You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2017/07/12 16:07:04 UTC
[1/2] syncope git commit: [SYNCOPE-1159] Now PushTasks have source
Realm
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ò <il...@apache.org>
Authored: Wed Jul 12 18:06:38 2017 +0200
Committer: Francesco Chicchiriccò <il...@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
[2/2] syncope git commit: [SYNCOPE-1159] Now PushTasks have source
Realm
Posted by il...@apache.org.
[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/bd6f46e9
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/bd6f46e9
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/bd6f46e9
Branch: refs/heads/master
Commit: bd6f46e9df674fe02721687d8ae810f040e850bc
Parents: 3e90e38
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Jul 12 18:06:38 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Jul 12 18:06:54 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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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/bd6f46e9/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 8b8432c..070090b 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