Repository: syncope Updated Branches: refs/heads/2_0_X f191fd002 -> a8c813a2b refs/heads/master 3e90e38fd -> bd6f46e9d
[SYNCOPE-1159] Now PushTasks have source Realm Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/a8c813a2 Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/a8c813a2 Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/a8c813a2 Branch: refs/heads/2_0_X Commit: a8c813a2bf1ef99f1c6aae4e0262bd852ec80daa Parents: f191fd0 Author: Francesco Chicchiriccò <ilgro...@apache.org> Authored: Wed Jul 12 18:06:38 2017 +0200 Committer: Francesco Chicchiriccò <ilgro...@apache.org> Committed: Wed Jul 12 18:06:38 2017 +0200 ---------------------------------------------------------------------- .../tasks/ProvisioningTaskDirectoryPanel.java | 4 +++ .../client/console/tasks/PushTaskFilters.java | 4 --- .../console/tasks/SchedTaskWizardBuilder.java | 22 ++++++++++++- .../panels/search/AbstractSearchPanel.html | 21 ++++++------- .../tasks/SchedTaskDirectoryPanel.properties | 1 + .../tasks/SchedTaskDirectoryPanel_it.properties | 1 + .../SchedTaskDirectoryPanel_pt_BR.properties | 1 + .../tasks/SchedTaskDirectoryPanel_ru.properties | 29 ++++++++--------- .../tasks/SchedTaskWizardBuilder$Profile.html | 4 +++ .../syncope/common/lib/to/PushTaskTO.java | 10 ++++++ .../persistence/api/entity/task/PushTask.java | 5 +++ .../jpa/dao/AbstractAnySearchDAO.java | 12 ++++++- .../jpa/entity/task/JPAPushTask.java | 17 ++++++++++ .../test/resources/domains/MasterContent.xml | 11 +++++++ .../java/data/TaskDataBinderImpl.java | 3 ++ .../pushpull/AbstractPushResultHandler.java | 8 +++++ .../java/pushpull/PushJobDelegate.java | 33 +++++++++----------- .../pushpull/RealmPushResultHandlerImpl.java | 8 +++++ .../apache/syncope/fit/core/PushTaskITCase.java | 5 +++ .../reference-guide/concepts/tasks.adoc | 1 + 20 files changed, 149 insertions(+), 51 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java index 6634736..0fa0f7b 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/ProvisioningTaskDirectoryPanel.java @@ -29,6 +29,7 @@ import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater. import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal; import org.apache.syncope.common.lib.to.AbstractProvisioningTaskTO; import org.apache.syncope.common.lib.to.PullTaskTO; +import org.apache.syncope.common.lib.to.PushTaskTO; import org.apache.syncope.common.lib.types.TaskType; import org.apache.wicket.PageReference; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; @@ -83,6 +84,9 @@ public abstract class ProvisioningTaskDirectoryPanel<T extends AbstractProvision if (reference == PullTaskTO.class) { columns.add(new PropertyColumn<T, String>( new StringResourceModel("destinationRealm", this), "destinationRealm", "destinationRealm")); + } else if (reference == PushTaskTO.class) { + columns.add(new PropertyColumn<T, String>( + new StringResourceModel("sourceRealm", this), "sourceRealm", "sourceRealm")); } columns.add(new DatePropertyColumn<T>( http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskFilters.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskFilters.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskFilters.java index c1e7e14..af40248 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskFilters.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PushTaskFilters.java @@ -54,9 +54,6 @@ public class PushTaskFilters extends WizardStep { } }; - // ------------------------ - // aDynMembershipConds - // ------------------------ add(new ListView<AnyTypeTO>("filters", types) { private static final long serialVersionUID = 9101744072914090143L; @@ -80,6 +77,5 @@ public class PushTaskFilters extends WizardStep { .setOutputMarkupId(true)); } }); - // ------------------------ } } http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java index fb08a87..dccc22a 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder.java @@ -240,8 +240,28 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends AjaxWizardBui pullTaskSpecifics.add(destinationRealm); // ------------------------------ + // Only for pull tasks + // ------------------------------ + WebMarkupContainer pushTaskSpecifics = new WebMarkupContainer("pushTaskSpecifics"); + add(pushTaskSpecifics.setRenderBodyOnly(true)); + + if (!(taskTO instanceof PushTaskTO)) { + pushTaskSpecifics.setEnabled(false).setVisible(false); + } + + AjaxDropDownChoicePanel<String> sourceRealm = new AjaxDropDownChoicePanel<>( + "sourceRealm", "sourceRealm", + new PropertyModel<String>(taskTO, "sourceRealm"), false). + setChoices(realms); + if (taskTO instanceof PushTaskTO) { + sourceRealm.addRequiredLabel(); + } + sourceRealm.setNullValid(!(taskTO instanceof PushTaskTO)); + pushTaskSpecifics.add(sourceRealm); + + // ------------------------------ // For push and pull tasks - // ------------------------------ + // ------------------------------ WebMarkupContainer provisioningTaskSpecifics = new WebMarkupContainer("provisioningTaskSpecifics"); add(provisioningTaskSpecifics.setRenderBodyOnly(true)); http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.html index 190a28f..91b3321 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.html +++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.html @@ -17,16 +17,13 @@ specific language governing permissions and limitations under the License. --> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org"> - <head><title></title></head> - <body> - <wicket:panel> - <span class="searchBox"> - <div class="col-xs-12"> - <span wicket:id="searchFormContainer"> - <span wicket:id="search">[SEARCH]</span> - </span> - </div> - </span> - </wicket:panel> - </body> + <wicket:panel> + <span class="searchBox"> + <div class="col-xs-12"> + <span wicket:id="searchFormContainer"> + <span wicket:id="search">[SEARCH]</span> + </span> + </div> + </span> + </wicket:panel> </html> http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.properties index 6234fe1..1226b8c 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.properties +++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.properties @@ -29,3 +29,4 @@ any.cancel=Cancel ${name} pullMode=Pull Mode reconciliationFilterBuilderClassName=Reconciliation Filter Builder actionsClassNames=Actions +sourceRealm=Source Realm http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_it.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_it.properties index 1a3156f..5341c88 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_it.properties +++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_it.properties @@ -29,3 +29,4 @@ any.cancel=Annulla ${name} pullMode=Pull Mode reconciliationFilterBuilderClassName=Reconciliation Filter Builder actionsClassNames=Actions +sourceRealm=Realm sorgente http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_pt_BR.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_pt_BR.properties index 6234fe1..1226b8c 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_pt_BR.properties +++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_pt_BR.properties @@ -29,3 +29,4 @@ any.cancel=Cancel ${name} pullMode=Pull Mode reconciliationFilterBuilderClassName=Reconciliation Filter Builder actionsClassNames=Actions +sourceRealm=Source Realm http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_ru.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_ru.properties index 52cfb2a..103731f 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_ru.properties +++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel_ru.properties @@ -14,32 +14,33 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -# name=Ðазвание +# name=\u00d0\u009d\u00d0\u00b0\u00d0\u00b7\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 name=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 -# description=ÐпиÑание +# description=\u00d0\u009e\u00d0\u00bf\u00d0\u00b8\u00d1\u0081\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 -# destinationRealm=ÐблаÑÑÑ Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ +# destinationRealm=\u00d0\u009e\u00d0\u00b1\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d1\u008c \u00d0\u00b4\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d1\u008f destinationRealm=\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f -# jobDelegateClassName=Ðазвание клаÑÑа +# jobDelegateClassName=\u00d0\u009d\u00d0\u00b0\u00d0\u00b7\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 \u00d0\u00ba\u00d0\u00bb\u00d0\u00b0\u00d1\u0081\u00d1\u0081\u00d0\u00b0 jobDelegateClassName=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 -# lastExec=ÐÑедÑдÑÑий запÑÑк +# lastExec=\u00d0\u009f\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d1\u008b\u00d0\u00b4\u00d1\u0083\u00d1\u0089\u00d0\u00b8\u00d0\u00b9 \u00d0\u00b7\u00d0\u00b0\u00d0\u00bf\u00d1\u0083\u00d1\u0081\u00d0\u00ba lastExec=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a -# nextExec=СледÑÑÑий запÑÑк +# nextExec=\u00d0\u00a1\u00d0\u00bb\u00d0\u00b5\u00d0\u00b4\u00d1\u0083\u00d1\u008e\u00d1\u0089\u00d0\u00b8\u00d0\u00b9 \u00d0\u00b7\u00d0\u00b0\u00d0\u00bf\u00d1\u0083\u00d1\u0081\u00d0\u00ba nextExec=\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a -# active=ÐкÑивна +# active=\u00d0\u0090\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00bd\u00d0\u00b0 active=\u0410\u043a\u0442\u0438\u0432\u043d\u0430 -# any.edit=ÐзмениÑÑ ${name} +# any.edit=\u00d0\u0098\u00d0\u00b7\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c ${name} any.edit=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c ${name} -# any.new=СоздаÑÑ Ð·Ð°Ð´Ð°ÑÑ +# any.new=\u00d0\u00a1\u00d0\u00be\u00d0\u00b7\u00d0\u00b4\u00d0\u00b0\u00d1\u0082\u00d1\u008c \u00d0\u00b7\u00d0\u00b0\u00d0\u00b4\u00d0\u00b0\u00d1\u0087\u00d1\u0083 any.new=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 -# any.finish=Ð¡Ð¾Ñ ÑаниÑÑ ${name} +# any.finish=\u00d0\u00a1\u00d0\u00be\u00d1\u0085\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c ${name} any.finish=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c ${name} -# any.cancel=ÐÑмениÑÑ ${name} +# any.cancel=\u00d0\u009e\u00d1\u0082\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d1\u008c ${name} any.cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c ${name} -# pullMode=Режим полÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ +# pullMode=\u00d0\u00a0\u00d0\u00b5\u00d0\u00b6\u00d0\u00b8\u00d0\u00bc \u00d0\u00bf\u00d0\u00be\u00d0\u00bb\u00d1\u0083\u00d1\u0087\u00d0\u00b5\u00d0\u00bd\u00d0\u00b8\u00d1\u008f \u00d0\u00b4\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008b\u00d1\u0085 pullMode=\u0420\u0435\u0436\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 -# reconciliationFilterBuilderClassName=ФилÑÑÑ ÑеконÑилиаÑии +# reconciliationFilterBuilderClassName=\u00d0\u00a4\u00d0\u00b8\u00d0\u00bb\u00d1\u008c\u00d1\u0082\u00d1\u0080 \u00d1\u0080\u00d0\u00b5\u00d0\u00ba\u00d0\u00be\u00d0\u00bd\u00d1\u0081\u00d0\u00b8\u00d0\u00bb\u00d0\u00b8\u00d0\u00b0\u00d1\u0086\u00d0\u00b8\u00d0\u00b8 reconciliationFilterBuilderClassName=\u0424\u0438\u043b\u044c\u0442\u0440 \u0440\u0435\u043a\u043e\u043d\u0441\u0438\u043b\u0438\u0430\u0446\u0438\u0438 -# actionsClassNames=ÐейÑÑÐ²Ð¸Ñ +# actionsClassNames=\u00d0\u0094\u00d0\u00b5\u00d0\u00b9\u00d1\u0081\u00d1\u0082\u00d0\u00b2\u00d0\u00b8\u00d1\u008f actionsClassNames=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f +sourceRealm=Source Realm http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.html b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.html index 838ff65..17b1e42 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.html +++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/SchedTaskWizardBuilder$Profile.html @@ -30,6 +30,10 @@ under the License. <div class="form-group"><span wicket:id="reconciliationFilterBuilderClassName">[filter]</span></div> </span> + <span wicket:id="pushTaskSpecifics"> + <div class="form-group"><span wicket:id="sourceRealm">[sourceRealm]</span></div> + </span> + <span wicket:id="provisioningTaskSpecifics"> <div class="form-group form-palette"> <span wicket:id="actionsClassNames">[actionsClassNames]</span> http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java index dd3347a..4528f11 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java @@ -36,10 +36,20 @@ public class PushTaskTO extends AbstractProvisioningTaskTO { private static final long serialVersionUID = -2143537546915809018L; + private String sourceRealm; + @XmlJavaTypeAdapter(XmlGenericMapAdapter.class) @JsonIgnore private final Map<String, String> filters = new HashMap<>(); + public String getSourceRealm() { + return sourceRealm; + } + + public void setSourceRealm(final String sourceRealm) { + this.sourceRealm = sourceRealm; + } + @JsonProperty public Map<String, String> getFilters() { return filters; http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTask.java ---------------------------------------------------------------------- diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTask.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTask.java index 93e112d..fe86726 100644 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTask.java +++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/task/PushTask.java @@ -20,9 +20,14 @@ package org.apache.syncope.core.persistence.api.entity.task; import java.util.List; import org.apache.syncope.core.persistence.api.entity.AnyType; +import org.apache.syncope.core.persistence.api.entity.Realm; public interface PushTask extends ProvisioningTask { + Realm getSourceRealm(); + + void setSourceRealm(Realm sourceRealm); + boolean add(PushTaskAnyFilter filter); PushTaskAnyFilter getFilter(AnyType anyType); http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java index 7c1a1b0..c9daf03 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java @@ -355,7 +355,17 @@ public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implement return Collections.<T>emptyList(); } - return doSearch(adminRealms, cond, page, itemsPerPage, orderBy, kind); + List<OrderByClause> effectiveOrderBy; + if (orderBy.isEmpty()) { + OrderByClause keyClause = new OrderByClause(); + keyClause.setField("key"); + keyClause.setDirection(OrderByClause.Direction.ASC); + effectiveOrderBy = Collections.singletonList(keyClause); + } else { + effectiveOrderBy = orderBy; + } + + return doSearch(adminRealms, cond, page, itemsPerPage, effectiveOrderBy, kind); } @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java index 1afb4ee..1ef12a4 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/task/JPAPushTask.java @@ -30,12 +30,15 @@ import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import org.apache.commons.collections4.IterableUtils; import org.apache.commons.collections4.Predicate; import org.apache.syncope.core.persistence.api.entity.AnyType; +import org.apache.syncope.core.persistence.api.entity.Realm; import org.apache.syncope.core.persistence.api.entity.task.PushTask; import org.apache.syncope.core.persistence.api.entity.task.PushTaskAnyFilter; +import org.apache.syncope.core.persistence.jpa.entity.JPARealm; @Entity @DiscriminatorValue("PushTask") @@ -43,6 +46,9 @@ public class JPAPushTask extends AbstractProvisioningTask implements PushTask { private static final long serialVersionUID = -4141057723006682564L; + @ManyToOne(fetch = FetchType.EAGER, optional = false) + private JPARealm sourceRealm; + @ElementCollection(fetch = FetchType.EAGER) @Column(name = "actionClassName") @CollectionTable(name = "PushTask_actionsClassNames", @@ -54,6 +60,17 @@ public class JPAPushTask extends AbstractProvisioningTask implements PushTask { private List<JPAPushTaskAnyFilter> filters = new ArrayList<>(); @Override + public JPARealm getSourceRealm() { + return sourceRealm; + } + + @Override + public void setSourceRealm(final Realm sourceRealm) { + checkType(sourceRealm, JPARealm.class); + this.sourceRealm = (JPARealm) sourceRealm; + } + + @Override public Set<String> getActionsClassNames() { return actionsClassNames; } http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/core/persistence-jpa/src/test/resources/domains/MasterContent.xml ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml index 1010dff..b88aee1 100644 --- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml +++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml @@ -1201,56 +1201,67 @@ under the License. destinationRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="0" performUpdate="1" performDelete="0" syncStatus="0" pullMode="FULL_RECONCILIATION" unmatchingRule="PROVISION" matchingRule="UPDATE" active="1"/> <Task DTYPE="PushTask" id="af558be4-9d2f-4359-bf85-a554e6e90be1" name="Export on resource-testdb2" resource_id="resource-testdb2" + sourceRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" unmatchingRule="ASSIGN" matchingRule="IGNORE" active="1"/> <PushTaskAnyFilter id="1fdcff65-765f-4a6e-98a7-13ef7cca47e2" anyType_id="USER" pushTask_id="af558be4-9d2f-4359-bf85-a554e6e90be1" fiql="surname==Vivaldi"/> <PushTaskAnyFilter id="3b564c51-5d64-48b3-8da5-fd4ebc10e0a8" anyType_id="GROUP" pushTask_id="af558be4-9d2f-4359-bf85-a554e6e90be1" fiql="name==_NO_ONE_"/> <Task DTYPE="PushTask" id="97f327b6-2eff-4d35-85e8-d581baaab855" name="Export on resource-testdb2" resource_id="resource-testdb2" + sourceRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" unmatchingRule="PROVISION" matchingRule="IGNORE" active="1"/> <PushTaskAnyFilter id="199efd21-5e89-46ac-95de-f47e9d0569fc" anyType_id="USER" pushTask_id="97f327b6-2eff-4d35-85e8-d581baaab855" fiql="surname==Bellini"/> <PushTaskAnyFilter id="7672a167-77d6-4639-8b1d-0af561293c7d" anyType_id="GROUP" pushTask_id="97f327b6-2eff-4d35-85e8-d581baaab855" fiql="name==_NO_ONE_"/> <Task DTYPE="PushTask" id="03aa2a04-4881-4573-9117-753f81b04865" name="Export on resource-testdb2" resource_id="resource-testdb2" + sourceRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" unmatchingRule="UNLINK" matchingRule="IGNORE" active="1"/> <PushTaskAnyFilter id="39a11ba6-397a-4c94-8bfe-1f4f757d6501" anyType_id="USER" pushTask_id="03aa2a04-4881-4573-9117-753f81b04865" fiql="surname==Puccini"/> <PushTaskAnyFilter id="5bd7501e-8a18-4fbd-a3fe-a1e731ba95db" anyType_id="GROUP" pushTask_id="03aa2a04-4881-4573-9117-753f81b04865" fiql="name==_NO_ONE_"/> <Task DTYPE="PushTask" id="5e5f7c7e-9de7-4c6a-99f1-4df1af959807" name="Export on resource-testdb2" resource_id="resource-testdb2" + sourceRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" unmatchingRule="IGNORE" matchingRule="IGNORE" active="1"/> <PushTaskAnyFilter id="0d0371a3-5772-4b4c-ad14-139adf1d346a" anyType_id="USER" pushTask_id="5e5f7c7e-9de7-4c6a-99f1-4df1af959807" fiql="surname==Verdi"/> <PushTaskAnyFilter id="2e7488ae-a2fc-4657-a93b-159b8433c0e7" anyType_id="GROUP" pushTask_id="5e5f7c7e-9de7-4c6a-99f1-4df1af959807" fiql="name==_NO_ONE_"/> <Task DTYPE="PushTask" id="0bc11a19-6454-45c2-a4e3-ceef84e5d79b" name="Export on resource-testdb2" resource_id="resource-testdb2" + sourceRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" unmatchingRule="ASSIGN" matchingRule="UPDATE" active="1"/> <PushTaskAnyFilter id="41bf22fe-a014-41af-9a75-402b987eb433" anyType_id="USER" pushTask_id="0bc11a19-6454-45c2-a4e3-ceef84e5d79b" fiql="username==_NO_ONE_"/> <PushTaskAnyFilter id="fa983fde-795e-4c89-a6f7-1ccd80a8adeb" anyType_id="GROUP" pushTask_id="0bc11a19-6454-45c2-a4e3-ceef84e5d79b" fiql="name==_NO_ONE_"/> <Task DTYPE="PushTask" id="ec674143-480a-4816-98ad-b61fa090821e" name="Export on resource-testdb2" resource_id="resource-testdb2" + sourceRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" unmatchingRule="IGNORE" matchingRule="DEPROVISION" active="1"/> <PushTaskAnyFilter id="e238a6dc-0b04-46cf-9bfa-be68bd9f2da0" anyType_id="USER" pushTask_id="ec674143-480a-4816-98ad-b61fa090821e" fiql="surname==Verdi"/> <PushTaskAnyFilter id="0eaa643e-0add-4c46-8273-539f9d6abec5" anyType_id="GROUP" pushTask_id="ec674143-480a-4816-98ad-b61fa090821e" fiql="name==_NO_ONE_"/> <Task DTYPE="PushTask" id="c46edc3a-a18b-4af2-b707-f4a415507496" name="Export on resource-testdb2" resource_id="resource-testdb2" + sourceRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" unmatchingRule="IGNORE" matchingRule="UNASSIGN" active="1"/> <PushTaskAnyFilter id="335b4f11-589a-44c5-80b0-ba94892f0c62" anyType_id="USER" pushTask_id="c46edc3a-a18b-4af2-b707-f4a415507496" fiql="surname==Rossini"/> <PushTaskAnyFilter id="b32eecc2-aa4f-43c6-a501-a692c3e93113" anyType_id="GROUP" pushTask_id="c46edc3a-a18b-4af2-b707-f4a415507496" fiql="name==_NO_ONE_"/> <Task DTYPE="PushTask" id="51318433-cce4-4f71-8f45-9534b6c9c819" name="Export on resource-testdb2" resource_id="resource-testdb2" + sourceRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" unmatchingRule="IGNORE" matchingRule="LINK" active="1"/> <PushTaskAnyFilter id="9f974a0d-87d8-4cae-9ea9-1fc245bc1dbf" anyType_id="USER" pushTask_id="51318433-cce4-4f71-8f45-9534b6c9c819" fiql="surname==Verdi"/> <PushTaskAnyFilter id="0dc46ba4-1270-4fa9-b3e1-79f940d4308f" anyType_id="GROUP" pushTask_id="51318433-cce4-4f71-8f45-9534b6c9c819" fiql="name==_NO_ONE_"/> <Task DTYPE="PushTask" id="24b1be9c-7e3b-443a-86c9-798ebce5eaf2" name="Export on resource-testdb2" resource_id="resource-testdb2" + sourceRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" unmatchingRule="IGNORE" matchingRule="UNLINK" active="1"/> <PushTaskAnyFilter id="3aa3b0b8-7469-4859-89d5-476ae5915101" anyType_id="USER" pushTask_id="24b1be9c-7e3b-443a-86c9-798ebce5eaf2" fiql="surname==Verdi"/> <PushTaskAnyFilter id="f054810e-6842-4017-8f60-5b4031fa2c72" anyType_id="GROUP" pushTask_id="24b1be9c-7e3b-443a-86c9-798ebce5eaf2" fiql="name==_NO_ONE_"/> <Task DTYPE="PushTask" id="375c7b7f-9e3a-4833-88c9-b7787b0a69f2" name="Export on resource-testdb2" resource_id="resource-testdb2" + sourceRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" unmatchingRule="IGNORE" matchingRule="UPDATE" active="1"/> <PushTaskAnyFilter id="95f047fc-1a8a-45f4-b56c-6e04d8ca5567" anyType_id="USER" pushTask_id="375c7b7f-9e3a-4833-88c9-b7787b0a69f2" fiql="surname==Verdi"/> <PushTaskAnyFilter id="013a4298-4b14-4f8b-9f59-191c2d53dbd8" anyType_id="GROUP" pushTask_id="375c7b7f-9e3a-4833-88c9-b7787b0a69f2" fiql="name==_NO_ONE_"/> <Task DTYPE="PushTask" id="fd905ba5-9d56-4f51-83e2-859096a67b75" name="Export on resource-ldap" resource_id="resource-ldap" + sourceRealm_id="e4c28e7a-9dbf-4ee7-9441-93812a0d4a28" performCreate="1" performUpdate="1" performDelete="1" syncStatus="1" unmatchingRule="ASSIGN" matchingRule="UNLINK" active="1"/> <PushTaskAnyFilter id="30842acc-f2dd-4d47-b359-20db06c30803" anyType_id="USER" pushTask_id="fd905ba5-9d56-4f51-83e2-859096a67b75" fiql="username==_NO_ONE_"/> http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java index 4045872..09b5d12 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/TaskDataBinderImpl.java @@ -116,6 +116,8 @@ public class TaskDataBinderImpl implements TaskDataBinder { pushTask.setJobDelegateClassName(PushJobDelegate.class.getName()); + pushTask.setSourceRealm(realmDAO.findByFullPath(pushTaskTO.getSourceRealm())); + pushTask.setMatchingRule(pushTaskTO.getMatchingRule() == null ? MatchingRule.LINK : pushTaskTO.getMatchingRule()); pushTask.setUnmatchingRule(pushTaskTO.getUnmatchingRule() == null @@ -346,6 +348,7 @@ public class TaskDataBinderImpl implements TaskDataBinder { case PUSH: setExecTime((SchedTaskTO) taskTO, task); + ((PushTaskTO) taskTO).setSourceRealm(((PushTask) task).getSourceRealm().getFullPath()); ((PushTaskTO) taskTO).setResource(((PushTask) task).getResource().getKey()); ((PushTaskTO) taskTO).setMatchingRule(((PushTask) task).getMatchingRule() == null ? MatchingRule.LINK : ((PushTask) task).getMatchingRule()); http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java index 66595ac..772c42a 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Map; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.IteratorUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.syncope.common.lib.patch.AnyPatch; import org.apache.syncope.common.lib.patch.StringPatchItem; import org.apache.syncope.common.lib.to.AnyTO; @@ -424,10 +425,17 @@ public abstract class AbstractPushResultHandler extends AbstractSyncopeResultHan action.after(profile, any, result); } + if (result.getStatus() == null) { + result.setStatus(ProvisioningReport.Status.SUCCESS); + } + resultStatus = AuditElements.Result.SUCCESS; output = getRemoteObject(connObjecKey, provision.getObjectClass()); } catch (IgnoreProvisionException e) { throw e; } catch (Exception e) { + result.setStatus(ProvisioningReport.Status.FAILURE); + result.setMessage(ExceptionUtils.getRootCauseMessage(e)); + resultStatus = AuditElements.Result.FAILURE; output = e; LOG.warn("Error pushing {} towards {}", any, profile.getTask().getResource(), e); http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java index 7c3bbe3..76ff65b 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java @@ -22,7 +22,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.commons.lang3.StringUtils; -import org.apache.syncope.common.lib.SyncopeConstants; import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.core.persistence.api.search.SearchCondConverter; import org.apache.syncope.core.spring.ApplicationContextProvider; @@ -199,26 +198,22 @@ public class PushJobDelegate extends AbstractProvisioningJobDelegate<PushTask> { String filter = pushTask.getFilter(provision.getAnyType()) == null ? null : pushTask.getFilter(provision.getAnyType()).getFIQLCond(); - if (StringUtils.isBlank(filter)) { - for (int page = 1; page <= (anyDAO.count() / AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) { - doHandle(anyDAO.findAll(page, AnyDAO.DEFAULT_PAGE_SIZE), handler, pushTask.getResource()); - } - } else { - SearchCond cond = SearchCondConverter.convert(filter); - int count = searchDAO.count( - SyncopeConstants.FULL_ADMIN_REALMS, + SearchCond cond = StringUtils.isBlank(filter) + ? anyDAO.getAllMatchingCond() + : SearchCondConverter.convert(filter); + int count = searchDAO.count( + Collections.singleton(profile.getTask().getSourceRealm().getFullPath()), + cond, + provision.getAnyType().getKind()); + for (int page = 1; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) { + List<? extends Any<?>> anys = searchDAO.search( + Collections.singleton(profile.getTask().getSourceRealm().getFullPath()), cond, + page, + AnyDAO.DEFAULT_PAGE_SIZE, + Collections.<OrderByClause>emptyList(), provision.getAnyType().getKind()); - for (int page = 1; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE) + 1; page++) { - List<? extends Any<?>> anys = searchDAO.search( - SyncopeConstants.FULL_ADMIN_REALMS, - cond, - page, - AnyDAO.DEFAULT_PAGE_SIZE, - Collections.<OrderByClause>emptyList(), - provision.getAnyType().getKind()); - doHandle(anys, handler, pushTask.getResource()); - } + doHandle(anys, handler, pushTask.getResource()); } } } http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPushResultHandlerImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPushResultHandlerImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPushResultHandlerImpl.java index 9cd574a..f028b38 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPushResultHandlerImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/RealmPushResultHandlerImpl.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.syncope.common.lib.to.RealmTO; import org.apache.syncope.common.lib.types.AuditElements; import org.apache.syncope.common.lib.types.AuditElements.Result; @@ -370,6 +371,10 @@ public class RealmPushResultHandlerImpl action.after(profile, realm, result); } + if (result.getStatus() == null) { + result.setStatus(ProvisioningReport.Status.SUCCESS); + } + resultStatus = AuditElements.Result.SUCCESS; output = getRemoteObject( realm.getName(), profile.getConnector(), @@ -377,6 +382,9 @@ public class RealmPushResultHandlerImpl } catch (IgnoreProvisionException e) { throw e; } catch (Exception e) { + result.setStatus(ProvisioningReport.Status.FAILURE); + result.setMessage(ExceptionUtils.getRootCauseMessage(e)); + resultStatus = AuditElements.Result.FAILURE; output = e; LOG.warn("Error pushing {} towards {}", realm, profile.getTask().getResource(), e); http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java index eb35e65..4ed4a52 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java @@ -30,6 +30,7 @@ import java.util.Set; import javax.sql.DataSource; import javax.ws.rs.core.Response; import org.apache.syncope.client.lib.SyncopeClient; +import org.apache.syncope.common.lib.SyncopeConstants; import org.apache.syncope.common.lib.to.AbstractTaskTO; import org.apache.syncope.common.lib.to.AnyTypeClassTO; import org.apache.syncope.common.lib.to.PagedResult; @@ -101,6 +102,7 @@ public class PushTaskITCase extends AbstractTaskITCase { PushTaskTO task = new PushTaskTO(); task.setName("Test create Push"); task.setResource(RESOURCE_NAME_WS2); + task.setSourceRealm(SyncopeConstants.ROOT_REALM); task.getFilters().put(AnyTypeKind.USER.name(), SyncopeClient.getUserSearchConditionBuilder().hasNotResources(RESOURCE_NAME_TESTDB2).query()); task.getFilters().put(AnyTypeKind.GROUP.name(), @@ -281,6 +283,7 @@ public class PushTaskITCase extends AbstractTaskITCase { task.setName("For orgUnit"); task.setActive(true); task.setResource(RESOURCE_NAME_LDAP_ORGUNIT); + task.setSourceRealm(SyncopeConstants.ROOT_REALM); task.setPerformCreate(true); task.setPerformDelete(true); task.setPerformUpdate(true); @@ -363,6 +366,7 @@ public class PushTaskITCase extends AbstractTaskITCase { task.setName("issueSYNCOPE598"); task.setActive(true); task.setResource(resourceName); + task.setSourceRealm(SyncopeConstants.ROOT_REALM); task.setPerformCreate(true); task.setPerformDelete(true); task.setPerformUpdate(true); @@ -393,6 +397,7 @@ public class PushTaskITCase extends AbstractTaskITCase { task.setName("Test create Push"); task.setActive(true); task.setResource(RESOURCE_NAME_LDAP); + task.setSourceRealm(SyncopeConstants.ROOT_REALM); task.getFilters().put(AnyTypeKind.USER.name(), SyncopeClient.getUserSearchConditionBuilder().is("username").equalTo("_NO_ONE_").query()); task.getFilters().put(AnyTypeKind.GROUP.name(), http://git-wip-us.apache.org/repos/asf/syncope/blob/a8c813a2/src/main/asciidoc/reference-guide/concepts/tasks.adoc ---------------------------------------------------------------------- diff --git a/src/main/asciidoc/reference-guide/concepts/tasks.adoc b/src/main/asciidoc/reference-guide/concepts/tasks.adoc index c058c98..cf4c710 100644 --- a/src/main/asciidoc/reference-guide/concepts/tasks.adoc +++ b/src/main/asciidoc/reference-guide/concepts/tasks.adoc @@ -113,6 +113,7 @@ Push tasks are required to define and trigger the <<provisioning-push,push>> pro When defining a push task, the following information must be provided: * related <<external-resources,external resource>> +* source <<realms,Realm>> - where entities to push will be read from * filter information for selecting which internal entities will be pushed onto the identity store * whether creation, update or deletion on the identity store are allowed or not * whether to synchronize the status information with internal storage