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 2018/04/17 15:09:39 UTC
[1/8] syncope git commit: [SYNCOPE-1299] Console features implemented
Repository: syncope
Updated Branches:
refs/heads/2_0_X 5965dfa91 -> a660a26b5
refs/heads/master 33847ad37 -> 4da5dcccb
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePullJobDelegate.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePullJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePullJobDelegate.java
index 542f92d..9155f18 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePullJobDelegate.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePullJobDelegate.java
@@ -108,6 +108,7 @@ public class SinglePullJobDelegate extends PullJobDelegate implements SyncopeSin
pullTask.setPerformCreate(pullTaskTO.isPerformCreate());
pullTask.setPerformUpdate(pullTaskTO.isPerformUpdate());
pullTask.setPerformDelete(pullTaskTO.isPerformDelete());
+ pullTask.setSyncStatus(pullTaskTO.isSyncStatus());
pullTask.setDestinationRealm(realm);
// validate JEXL expressions from templates and proceed if fine
templateUtils.check(pullTaskTO.getTemplates(), ClientExceptionType.InvalidPullTask);
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePushJobDelegate.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePushJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePushJobDelegate.java
index 3f1e655..aae83d4 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePushJobDelegate.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePushJobDelegate.java
@@ -73,6 +73,7 @@ public class SinglePushJobDelegate extends PushJobDelegate implements SyncopeSin
pushTask.setPerformCreate(pushTaskTO.isPerformCreate());
pushTask.setPerformUpdate(pushTaskTO.isPerformUpdate());
pushTask.setPerformDelete(pushTaskTO.isPerformDelete());
+ pushTask.setSyncStatus(pushTaskTO.isSyncStatus());
profile = new ProvisioningProfile<>(connector, pushTask);
profile.getActions().addAll(actions);
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReconciliationServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReconciliationServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReconciliationServiceImpl.java
index ad460cb..ed24be5 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReconciliationServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReconciliationServiceImpl.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.rest.cxf.service;
import org.apache.syncope.common.lib.to.PullTaskTO;
import org.apache.syncope.common.lib.to.PushTaskTO;
-import org.apache.syncope.common.lib.to.ReconciliationStatus;
+import org.apache.syncope.common.lib.to.ReconStatus;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.rest.api.service.ReconciliationService;
import org.apache.syncope.core.logic.ReconciliationLogic;
@@ -38,7 +38,7 @@ public class ReconciliationServiceImpl extends AbstractServiceImpl implements Re
private AnyUtilsFactory anyUtilsFactory;
@Override
- public ReconciliationStatus status(final AnyTypeKind anyTypeKind, final String anyKey, final String resourceKey) {
+ public ReconStatus status(final AnyTypeKind anyTypeKind, final String anyKey, final String resourceKey) {
return logic.status(
anyTypeKind,
getActualKey(anyUtilsFactory.getInstance(anyTypeKind).dao(), anyKey),
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
index a55bf67..abf4a40 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
@@ -96,7 +96,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
+ "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
assertNotNull(formTester);
- formTester.select("checkgroup", 2);
+ formTester.select("checkgroup", 0);
TESTER.executeAjaxEvent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
+ "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
@@ -116,7 +116,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
@Test
public void userStatusOnSyncopeOnlyBulkAction() {
- userStatusBulkAction(0, "Syncope");
+ userStatusBulkAction(0, Constants.SYNCOPE);
}
private void userStatusBulkAction(final int index, final String resource) {
@@ -169,7 +169,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
TESTER.cleanupFeedbackMessages();
TESTER.assertLabel(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
- + "secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:3:cell", "SUCCESS");
+ + "secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:4:cell", "SUCCESS");
TESTER.executeAjaxEvent(TAB_PANEL
+ "outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:back",
@@ -224,7 +224,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
TESTER.cleanupFeedbackMessages();
TESTER.assertLabel(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
- + "secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:3:cell", "SUCCESS");
+ + "secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:4:cell", "SUCCESS");
TESTER.executeAjaxEvent(TAB_PANEL
+ "outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:back",
@@ -268,7 +268,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
component = findComponentByProp("resource",
TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
+ "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
- + "checkgroup:dataTable", "ws-target-resource-1");
+ + "checkgroup:dataTable", "resource-ldap");
assertNotNull(component);
FormTester formTester = TESTER.newFormTester(
@@ -276,7 +276,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
+ "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
assertNotNull(formTester);
- formTester.select("checkgroup", 7);
+ formTester.select("checkgroup", 0);
TESTER.executeAjaxEvent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
+ "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
@@ -286,7 +286,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
+ "secondLevelContainer:second:container", WebMarkupContainer.class);
assertNotNull(findComponentByProp("resource", TAB_PANEL + "outerObjectsRepeater:2:outer:"
- + "form:content:status:secondLevelContainer:second:container:selectedObjects", "resource-testdb2"));
+ + "form:content:status:secondLevelContainer:second:container:selectedObjects", "resource-ldap"));
}
@Test
@@ -316,7 +316,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
component = findComponentByProp("resource",
TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
+ "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
- + "checkgroup:dataTable", "ws-target-resource-1");
+ + "checkgroup:dataTable", "resource-db-scripted");
assertNotNull(component);
FormTester formTester = TESTER.newFormTester(
@@ -324,7 +324,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
+ "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
assertNotNull(formTester);
- formTester.select("checkgroup", 7);
+ formTester.select("checkgroup", 0);
TESTER.executeAjaxEvent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
+ "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
@@ -334,7 +334,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
+ "secondLevelContainer:second:container", WebMarkupContainer.class);
assertNotNull(findComponentByProp("resource", TAB_PANEL + "outerObjectsRepeater:2:outer:"
- + "form:content:status:secondLevelContainer:second:container:selectedObjects", "resource-testdb2"));
+ + "form:content:status:secondLevelContainer:second:container:selectedObjects", "resource-db-scripted"));
}
@Test
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RealmsITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RealmsITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RealmsITCase.java
index cb02357..ff7e251 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RealmsITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RealmsITCase.java
@@ -181,16 +181,17 @@ public class RealmsITCase extends AbstractConsoleITCase {
TESTER.clickLink(component.getPageRelativePath() + ":actions:actionRepeater:0:action:action");
TESTER.assertLabel("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:0:value:oldAttribute:field-label", "__NAME__");
+ + "secondLevelContainer:second:remoteObject:propView:0:value:leftAttribute:field-label", "__NAME__");
TESTER.assertModelValue("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:0:value:oldAttribute:textField", null);
+ + "secondLevelContainer:second:remoteObject:propView:0:value:leftAttribute:textField", null);
TESTER.assertLabel("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:0:value:newAttribute:field-label", "__NAME__");
+ + "secondLevelContainer:second:remoteObject:propView:0:value:rightAttribute:field-label", "__NAME__");
TESTER.assertModelValue("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:0:value:newAttribute:textField", "ou=even,o=isp");
+ + "secondLevelContainer:second:remoteObject:propView:0:value:rightAttribute:textField",
+ "ou=even,o=isp");
TESTER.clickLink("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
+ "secondLevelContainer:back");
@@ -226,16 +227,16 @@ public class RealmsITCase extends AbstractConsoleITCase {
TESTER.clickLink(component.getPageRelativePath() + ":actions:actionRepeater:0:action:action");
TESTER.assertLabel("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:4:value:oldAttribute:field-label", "ou");
+ + "secondLevelContainer:second:remoteObject:propView:4:value:leftAttribute:field-label", "ou");
TESTER.assertModelValue("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:4:value:oldAttribute:textField", "even");
+ + "secondLevelContainer:second:remoteObject:propView:4:value:leftAttribute:textField", "even");
TESTER.assertLabel("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:4:value:newAttribute:field-label", "ou");
+ + "secondLevelContainer:second:remoteObject:propView:4:value:rightAttribute:field-label", "ou");
TESTER.assertModelValue("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:4:value:newAttribute:textField", null);
+ + "secondLevelContainer:second:remoteObject:propView:4:value:rightAttribute:textField", null);
TESTER.clickLink("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
+ "secondLevelContainer:back");
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
index 48963a2..6dcb678 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
@@ -84,7 +84,7 @@ public class TopologyITCase extends AbstractConsoleITCase {
Component component = findComponentByProp("key", "body:resources", "ws-target-resource-1");
assertNotNull(component);
TESTER.executeAjaxEvent(component.getPageRelativePath() + ":res", Constants.ON_CLICK);
- TESTER.clickLink("body:toggle:container:content:togglePanelContainer:container:actions:status");
+ TESTER.clickLink("body:toggle:container:content:togglePanelContainer:container:actions:reconciliation");
TESTER.assertComponent("body:toggle:outerObjectsRepeater:1:outer", Modal.class);
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReconciliationITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReconciliationITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReconciliationITCase.java
index 8fd8680..9ab1578 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReconciliationITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReconciliationITCase.java
@@ -30,7 +30,7 @@ import org.apache.syncope.common.lib.to.AnyObjectTO;
import org.apache.syncope.common.lib.to.AttrTO;
import org.apache.syncope.common.lib.to.PullTaskTO;
import org.apache.syncope.common.lib.to.PushTaskTO;
-import org.apache.syncope.common.lib.to.ReconciliationStatus;
+import org.apache.syncope.common.lib.to.ReconStatus;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.UnmatchingRule;
import org.apache.syncope.fit.AbstractITCase;
@@ -63,7 +63,7 @@ public class ReconciliationITCase extends AbstractITCase {
"SELECT id FROM testPRINTER WHERE printername=?", printer.getName()).size());
// 3. verify reconciliation status
- ReconciliationStatus status =
+ ReconStatus status =
reconciliationService.status(AnyTypeKind.ANY_OBJECT, printer.getName(), "resource-db-scripted");
assertNotNull(status);
assertNotNull(status.getOnSyncope());
@@ -113,7 +113,7 @@ public class ReconciliationITCase extends AbstractITCase {
printer.getKey(), printer.getName(), "Nowhere", false, new Date());
// 3. verify reconciliation status
- ReconciliationStatus status =
+ ReconStatus status =
reconciliationService.status(AnyTypeKind.ANY_OBJECT, printer.getName(), "resource-db-scripted");
assertNotNull(status);
assertNotNull(status.getOnSyncope());
[3/8] syncope git commit: [SYNCOPE-1299] Console features implemented
Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
new file mode 100644
index 0000000..1319a5b
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
@@ -0,0 +1,155 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.status;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.panels.MultilevelPanel;
+import org.apache.syncope.client.console.rest.ReconciliationRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
+import org.apache.syncope.common.lib.to.ProvisioningTaskTO;
+import org.apache.syncope.common.lib.to.PullTaskTO;
+import org.apache.syncope.common.lib.to.PushTaskTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.types.MatchingRule;
+import org.apache.syncope.common.lib.types.UnmatchingRule;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.util.ListModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ReconTaskPanel extends MultilevelPanel.SecondLevel {
+
+ private static final long serialVersionUID = 5870444905957760434L;
+
+ protected static final Logger LOG = LoggerFactory.getLogger(ReconTaskPanel.class);
+
+ private final ReconciliationRestClient restClient = new ReconciliationRestClient();
+
+ private final IModel<List<String>> pullActionsClasses = new LoadableDetachableModel<List<String>>() {
+
+ private static final long serialVersionUID = 5275935387613157437L;
+
+ @Override
+ protected List<String> load() {
+ return new ArrayList<>(SyncopeConsoleSession.get().getPlatformInfo().getPullActions());
+ }
+ };
+
+ private final IModel<List<String>> pushActionsClasses = new LoadableDetachableModel<List<String>>() {
+
+ private static final long serialVersionUID = 5275935387613157437L;
+
+ @Override
+ protected List<String> load() {
+ return new ArrayList<>(SyncopeConsoleSession.get().getPlatformInfo().getPushActions());
+ }
+ };
+
+ public ReconTaskPanel(
+ final String resource,
+ final ProvisioningTaskTO taskTO,
+ final AnyTypeKind anyTypeKind,
+ final String anyKey,
+ final MultilevelPanel multiLevelPanelRef,
+ final PageReference pageRef) {
+
+ Form<ProvisioningTaskTO> form = new Form<>("form", new CompoundPropertyModel<>(taskTO));
+ add(form);
+
+ AjaxPalettePanel<String> actionsClassNames = new AjaxPalettePanel.Builder<String>().
+ setAllowMoveAll(true).setAllowOrder(true).
+ build("actionsClassNames",
+ new PropertyModel<List<String>>(taskTO, "actionsClassNames"),
+ new ListModel<>(taskTO instanceof PushTaskTO
+ ? pushActionsClasses.getObject() : pullActionsClasses.getObject()));
+ actionsClassNames.setOutputMarkupId(true);
+ form.add(actionsClassNames);
+
+ AjaxDropDownChoicePanel<MatchingRule> matchingRule = new AjaxDropDownChoicePanel<>(
+ "matchingRule", "matchingRule", new PropertyModel<MatchingRule>(taskTO, "matchingRule"), false);
+ matchingRule.setChoices(Arrays.asList(MatchingRule.values()));
+ form.add(matchingRule);
+
+ AjaxDropDownChoicePanel<UnmatchingRule> unmatchingRule = new AjaxDropDownChoicePanel<>(
+ "unmatchingRule", "unmatchingRule", new PropertyModel<UnmatchingRule>(taskTO, "unmatchingRule"),
+ false);
+ unmatchingRule.setChoices(Arrays.asList(UnmatchingRule.values()));
+ form.add(unmatchingRule);
+
+ taskTO.setPerformCreate(true);
+ AjaxCheckBoxPanel performCreate = new AjaxCheckBoxPanel(
+ "performCreate", "performCreate", new PropertyModel<Boolean>(taskTO, "performCreate"), false);
+ form.add(performCreate);
+
+ taskTO.setPerformUpdate(true);
+ AjaxCheckBoxPanel performUpdate = new AjaxCheckBoxPanel(
+ "performUpdate", "performUpdate", new PropertyModel<Boolean>(taskTO, "performUpdate"), false);
+ form.add(performUpdate);
+
+ taskTO.setPerformDelete(true);
+ AjaxCheckBoxPanel performDelete = new AjaxCheckBoxPanel(
+ "performDelete", "performDelete", new PropertyModel<Boolean>(taskTO, "performDelete"), false);
+ form.add(performDelete);
+
+ taskTO.setSyncStatus(true);
+ AjaxCheckBoxPanel syncStatus = new AjaxCheckBoxPanel(
+ "syncStatus", "syncStatus", new PropertyModel<Boolean>(taskTO, "syncStatus"), false);
+ form.add(syncStatus);
+
+ form.add(new AjaxSubmitLink("reconcile") {
+
+ private static final long serialVersionUID = -817438685948164787L;
+
+ @Override
+ protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+ try {
+ if (taskTO instanceof PushTaskTO) {
+ restClient.push(anyTypeKind, anyKey, resource, (PushTaskTO) form.getModelObject());
+ } else {
+ restClient.pull(anyTypeKind, anyKey, resource, (PullTaskTO) form.getModelObject());
+ }
+
+ SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+ } catch (Exception e) {
+ LOG.error("While attempting reconciliation on {} {} {} {}",
+ anyTypeKind, anyKey, resource, form.getModelObject(), e);
+ SyncopeConsoleSession.get().error(resource + ": "
+ + (StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage()));
+ }
+ multiLevelPanelRef.prev(target);
+ ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+ }
+ });
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/status/ResourceStatusDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/ResourceStatusDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/status/ResourceStatusDirectoryPanel.java
index 1431442..4902f15 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/status/ResourceStatusDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/status/ResourceStatusDirectoryPanel.java
@@ -21,9 +21,11 @@ package org.apache.syncope.client.console.status;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Transformer;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.client.console.commons.DirectoryDataProvider;
-import org.apache.syncope.client.console.commons.ResourceStatusDataProvider;
+import org.apache.syncope.client.console.commons.status.AbstractStatusBeanProvider;
import org.apache.syncope.client.console.commons.status.StatusBean;
import org.apache.syncope.client.console.commons.status.StatusUtils;
import org.apache.syncope.client.console.panels.DirectoryPanel;
@@ -36,16 +38,21 @@ import org.apache.syncope.client.console.rest.GroupRestClient;
import org.apache.syncope.client.console.rest.UserRestClient;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
+import org.apache.syncope.client.lib.SyncopeClient;
import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.search.AbstractFiqlSearchConditionBuilder;
+import org.apache.syncope.common.lib.to.AnyTO;
+import org.apache.syncope.common.lib.to.GroupTO;
+import org.apache.syncope.common.lib.to.PullTaskTO;
+import org.apache.syncope.common.lib.to.PushTaskTO;
import org.apache.syncope.common.lib.to.ResourceTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.StringResourceModel;
@@ -61,21 +68,21 @@ public class ResourceStatusDirectoryPanel
private String type;
- private final ResourceTO resourceTO;
+ private final ResourceTO resource;
public ResourceStatusDirectoryPanel(
final BaseModal<?> baseModal,
final MultilevelPanel multiLevelPanelRef,
final PageReference pageRef,
final String type,
- final ResourceTO resourceTO) {
+ final ResourceTO resource) {
super(MultilevelPanel.FIRST_LEVEL_ID, pageRef);
this.baseModal = baseModal;
this.multiLevelPanelRef = multiLevelPanelRef;
this.type = type;
- this.resourceTO = resourceTO;
- this.itemKeyFieldName = "key";
+ this.resource = resource;
+ this.itemKeyFieldName = "name";
initResultTable();
}
@@ -90,43 +97,117 @@ public class ResourceStatusDirectoryPanel
final List<IColumn<StatusBean, String>> columns = new ArrayList<>();
columns.add(new PropertyColumn<StatusBean, String>(
- new StringResourceModel("key", this), "key", "key"));
+ new StringResourceModel("name", this), "name", "name"));
- columns.add(new PropertyColumn<StatusBean, String>(
- new StringResourceModel("connObjectLink", this), "connObjectLink", "connObjectLink"));
+ return columns;
+ }
+
+ private AnyTypeKind getAnyTypeKind() {
+ if (StringUtils.isBlank(type)) {
+ return null;
+ }
+
+ switch (type) {
+ case "USER":
+ return AnyTypeKind.USER;
+
+ case "GROUP":
+ return AnyTypeKind.GROUP;
- columns.add(new AbstractColumn<StatusBean, String>(new StringResourceModel("status", this)) {
+ default:
+ return AnyTypeKind.ANY_OBJECT;
+ }
+ }
+
+ @Override
+ public ActionsPanel<StatusBean> getActions(final IModel<StatusBean> model) {
+ final ActionsPanel<StatusBean> panel = super.getActions(model);
- private static final long serialVersionUID = -3503023501954863131L;
+ panel.add(new ActionLink<StatusBean>() {
+
+ private static final long serialVersionUID = -7978723352517770645L;
@Override
- public void populateItem(
- final Item<ICellPopulator<StatusBean>> cellItem,
- final String componentId,
- final IModel<StatusBean> model) {
-
- if (model.getObject().isLinked()) {
- cellItem.add(StatusUtils.getStatusImage(componentId, model.getObject().getStatus()));
- } else {
- cellItem.add(new Label(componentId, ""));
- }
+ protected boolean statusCondition(final StatusBean bean) {
+ return getAnyTypeKind() != null;
}
- });
- return columns;
+ @Override
+ public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+ multiLevelPanelRef.next(bean.getResource(),
+ new ReconStatusPanel(bean.getResource(), getAnyTypeKind(), bean.getKey()),
+ target);
+ target.add(multiLevelPanelRef);
+ getTogglePanel().close(target);
+ }
+ }, ActionLink.ActionType.VIEW, StandardEntitlement.RESOURCE_GET_CONNOBJECT);
+
+ panel.add(new ActionLink<StatusBean>() {
+
+ private static final long serialVersionUID = -7978723352517770645L;
+
+ @Override
+ protected boolean statusCondition(final StatusBean bean) {
+ return getAnyTypeKind() != null;
+ }
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+ multiLevelPanelRef.next("PUSH " + bean.getResource(),
+ new ReconTaskPanel(
+ bean.getResource(),
+ new PushTaskTO(),
+ getAnyTypeKind(),
+ bean.getKey(),
+ multiLevelPanelRef,
+ pageRef),
+ target);
+ target.add(multiLevelPanelRef);
+ getTogglePanel().close(target);
+ }
+ }, ActionLink.ActionType.RECONCILIATION_PUSH, StandardEntitlement.TASK_EXECUTE);
+
+ panel.add(new ActionLink<StatusBean>() {
+
+ private static final long serialVersionUID = -7978723352517770645L;
+
+ @Override
+ protected boolean statusCondition(final StatusBean bean) {
+ return getAnyTypeKind() != null;
+ }
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+ multiLevelPanelRef.next("PULL " + bean.getResource(),
+ new ReconTaskPanel(
+ bean.getResource(),
+ new PullTaskTO(),
+ getAnyTypeKind(),
+ bean.getKey(),
+ multiLevelPanelRef,
+ pageRef),
+ target);
+ target.add(multiLevelPanelRef);
+ getTogglePanel().close(target);
+ }
+ }, ActionLink.ActionType.RECONCILIATION_PULL, StandardEntitlement.TASK_EXECUTE);
+
+ return panel;
}
public void updateResultTable(final String type, final AjaxRequestTarget target) {
this.type = type;
- if (StringUtils.isNoneEmpty(type)) {
+ if (StringUtils.isNotBlank(type)) {
switch (type) {
case "USER":
this.restClient = new UserRestClient();
break;
+
case "GROUP":
this.restClient = new GroupRestClient();
break;
+
default:
this.restClient = new AnyObjectRestClient();
}
@@ -137,20 +218,91 @@ public class ResourceStatusDirectoryPanel
@Override
protected Collection<ActionLink.ActionType> getBulkActions() {
- final List<ActionLink.ActionType> bulkActions = new ArrayList<>();
+ List<ActionLink.ActionType> bulkActions = new ArrayList<>();
bulkActions.add(ActionLink.ActionType.UNLINK);
+ bulkActions.add(ActionLink.ActionType.LINK);
bulkActions.add(ActionLink.ActionType.DEPROVISION);
+ bulkActions.add(ActionLink.ActionType.PROVISION);
+ bulkActions.add(ActionLink.ActionType.ASSIGN);
bulkActions.add(ActionLink.ActionType.UNASSIGN);
return bulkActions;
}
@Override
protected ResourceStatusDataProvider dataProvider() {
- return new ResourceStatusDataProvider(type, resourceTO.getKey(), rows, SyncopeConstants.ROOT_REALM);
+ return new ResourceStatusDataProvider();
}
@Override
protected String paginatorRowsKey() {
return StringUtils.EMPTY;
}
+
+ protected class ResourceStatusDataProvider extends AbstractStatusBeanProvider {
+
+ private static final long serialVersionUID = 4586969457669796621L;
+
+ private final String fiql;
+
+ private final AbstractAnyRestClient<? extends AnyTO> restClient;
+
+ public ResourceStatusDataProvider() {
+ super(AnyTypeKind.USER.name().equals(type) ? "username" : "name");
+
+ if (StringUtils.isEmpty(type)) {
+ fiql = null;
+ restClient = null;
+ } else {
+ AbstractFiqlSearchConditionBuilder bld;
+ switch (type) {
+ case "USER":
+ bld = SyncopeClient.getUserSearchConditionBuilder();
+ restClient = new UserRestClient();
+ break;
+
+ case "GROUP":
+ bld = SyncopeClient.getGroupSearchConditionBuilder();
+ restClient = new GroupRestClient();
+ break;
+
+ default:
+ bld = SyncopeClient.getAnyObjectSearchConditionBuilder(type);
+ restClient = new AnyObjectRestClient();
+ }
+ fiql = bld.isNotNull("key").query();
+ }
+ }
+
+ @Override
+ protected List<StatusBean> getStatusBeans(final long first, final long count) {
+ List<StatusBean> statusBeans = new ArrayList<>();
+
+ if (fiql != null && restClient != null) {
+ int page = (int) first / paginatorRows;
+ List<? extends AnyTO> result = restClient.search(
+ SyncopeConstants.ROOT_REALM, fiql, (page < 0 ? 0 : page) + 1, paginatorRows, getSort(), type);
+
+ CollectionUtils.collect(result, new Transformer<AnyTO, StatusBean>() {
+
+ @Override
+ public StatusBean transform(final AnyTO any) {
+ return StatusUtils.getStatusBean(
+ any,
+ resource.getKey(),
+ null,
+ any instanceof GroupTO);
+ }
+ }, statusBeans);
+ }
+
+ return statusBeans;
+ }
+
+ @Override
+ public long size() {
+ return fiql == null
+ ? 0
+ : restClient.count(SyncopeConstants.ROOT_REALM, fiql, type);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java b/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java
index baba5a5..d1387e0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java
@@ -18,7 +18,6 @@
*/
package org.apache.syncope.client.console.status;
-import java.io.Serializable;
import org.apache.syncope.client.console.commons.DirectoryDataProvider;
import org.apache.syncope.client.console.commons.status.StatusBean;
import org.apache.syncope.client.console.panels.DirectoryPanel;
@@ -26,10 +25,11 @@ import org.apache.syncope.client.console.panels.ModalPanel;
import org.apache.syncope.client.console.panels.MultilevelPanel;
import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.common.lib.AbstractBaseBean;
import org.apache.wicket.PageReference;
import org.apache.wicket.markup.html.panel.Panel;
-public abstract class StatusModal<T extends Serializable> extends Panel implements ModalPanel {
+public abstract class StatusModal<T extends AbstractBaseBean> extends Panel implements ModalPanel {
private static final long serialVersionUID = 1066124171682570080L;
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/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 1a78c2d..48c73f6 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
@@ -244,7 +244,7 @@ public class SchedTaskWizardBuilder<T extends SchedTaskTO> extends AjaxWizardBui
pullTaskSpecifics.add(destinationRealm);
// ------------------------------
- // Only for pull tasks
+ // Only for push tasks
// ------------------------------
WebMarkupContainer pushTaskSpecifics = new WebMarkupContainer("pushTaskSpecifics");
add(pushTaskSpecifics.setRenderBodyOnly(true));
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
index 5f33ed5..310aa13 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
@@ -18,7 +18,6 @@
*/
package org.apache.syncope.client.console.topology;
-
import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
import java.io.Serializable;
import java.text.MessageFormat;
@@ -417,7 +416,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
MetaDataRoleAuthorizationStrategy.authorize(edit, RENDER, StandardEntitlement.RESOURCE_READ);
fragment.add(edit);
- AjaxLink<String> status = new IndicatingAjaxLink<String>("status") {
+ AjaxLink<String> status = new IndicatingAjaxLink<String>("reconciliation") {
private static final long serialVersionUID = 3776750333491622263L;
@@ -426,8 +425,8 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
ResourceTO modelObject = resourceRestClient.read(node.getKey());
target.add(propTaskModal.setContent(
new ResourceStatusModal(propTaskModal, pageRef, modelObject)));
- propTaskModal.header(new Model<>(MessageFormat.format(getString("resource.provisioning.status"),
- node.getKey())));
+ propTaskModal.header(
+ new Model<>(MessageFormat.format(getString("resource.reconciliation"), node.getKey())));
propTaskModal.show(true);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
index 5b67fa1..d8e8f77 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
@@ -89,6 +89,8 @@ public abstract class ActionLink<T extends Serializable> implements Serializable
PROVISION("update"),
DEPROVISION_MEMBERS("update"),
PROVISION_MEMBERS("update"),
+ RECONCILIATION_PUSH("update"),
+ RECONCILIATION_PULL("update"),
MANAGE_RESOURCES("update"),
MANAGE_USERS("update"),
MANAGE_GROUPS("update"),
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.java
new file mode 100644
index 0000000..dfd6047
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.java
@@ -0,0 +1,178 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.widgets;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
+import org.apache.syncope.client.console.panels.AbstractModalPanel;
+import org.apache.syncope.client.console.panels.DirectoryPanel;
+import org.apache.syncope.client.console.rest.BaseRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import org.apache.syncope.client.console.widgets.reconciliation.Any;
+import org.apache.syncope.client.console.widgets.reconciliation.Misaligned;
+import org.apache.syncope.client.console.wizards.WizardMgtPanel;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
+
+public class ReconDetailsModalPanel extends AbstractModalPanel<Any> {
+
+ private static final long serialVersionUID = 1469396040405535283L;
+
+ private static final int ROWS = 10;
+
+ private final String resource;
+
+ private final List<Misaligned> misaligned;
+
+ public ReconDetailsModalPanel(
+ final BaseModal<Any> modal,
+ final String resource,
+ final List<Misaligned> misaligned,
+ final PageReference pageRef) {
+
+ super(modal, pageRef);
+ this.resource = resource;
+ this.misaligned = misaligned;
+
+ add(new DiffPanel("diff", pageRef));
+ }
+
+ private class DiffPanel extends DirectoryPanel<
+ Misaligned, Misaligned, DetailsProvider, BaseRestClient> {
+
+ private static final long serialVersionUID = -8214546246301342868L;
+
+ DiffPanel(final String id, final PageReference pageRef) {
+ super(id, new Builder<Misaligned, Misaligned, BaseRestClient>(null, pageRef) {
+
+ private static final long serialVersionUID = 8769126634538601689L;
+
+ @Override
+ protected WizardMgtPanel<Misaligned> newInstance(final String id, final boolean wizardInModal) {
+ throw new UnsupportedOperationException();
+ }
+ }.disableCheckBoxes().hidePaginator());
+
+ rows = 10;
+ initResultTable();
+ }
+
+ @Override
+ protected DetailsProvider dataProvider() {
+ return new DetailsProvider();
+ }
+
+ @Override
+ protected String paginatorRowsKey() {
+ return StringUtils.EMPTY;
+ }
+
+ @Override
+ protected Collection<ActionLink.ActionType> getBulkActions() {
+ return Collections.<ActionLink.ActionType>emptyList();
+ }
+
+ @Override
+ protected List<IColumn<Misaligned, String>> getColumns() {
+ List<IColumn<Misaligned, String>> columns = new ArrayList<>();
+
+ columns.add(new PropertyColumn<Misaligned, String>(new ResourceModel("key"), "name", "name"));
+
+ columns.add(new AbstractColumn<Misaligned, String>(Model.of(Constants.SYNCOPE)) {
+
+ private static final long serialVersionUID = 2054811145491901166L;
+
+ @Override
+ public void populateItem(
+ final Item<ICellPopulator<Misaligned>> cellItem,
+ final String componentId,
+ final IModel<Misaligned> rowModel) {
+
+ cellItem.add(new Label(componentId, rowModel.getObject().getOnSyncope().toString()));
+ cellItem.add(new AttributeModifier("class", "code-deletion"));
+ }
+ });
+
+ columns.add(new AbstractColumn<Misaligned, String>(Model.of(resource)) {
+
+ private static final long serialVersionUID = 2054811145491901166L;
+
+ @Override
+ public void populateItem(
+ final Item<ICellPopulator<Misaligned>> cellItem,
+ final String componentId,
+ final IModel<Misaligned> rowModel) {
+
+ cellItem.add(new Label(componentId, rowModel.getObject().getOnResource().toString()));
+ cellItem.add(new AttributeModifier("class", "code-addition"));
+ }
+ });
+
+ return columns;
+ }
+ }
+
+ protected final class DetailsProvider extends DirectoryDataProvider<Misaligned> {
+
+ private static final long serialVersionUID = -1500081449932597854L;
+
+ private final SortableDataProviderComparator<Misaligned> comparator;
+
+ private DetailsProvider() {
+ super(ROWS);
+ setSort("name", SortOrder.ASCENDING);
+ comparator = new SortableDataProviderComparator<>(this);
+ }
+
+ @Override
+ public Iterator<Misaligned> iterator(final long first, final long count) {
+ Collections.sort(misaligned, comparator);
+ return misaligned.subList((int) first, (int) first + (int) count).iterator();
+ }
+
+ @Override
+ public long size() {
+ return misaligned.size();
+ }
+
+ @Override
+ public IModel<Misaligned> model(final Misaligned object) {
+ return new CompoundPropertyModel<>(object);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.java
deleted file mode 100644
index 5fd1e62..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.widgets;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.client.console.commons.DirectoryDataProvider;
-import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
-import org.apache.syncope.client.console.panels.AbstractModalPanel;
-import org.apache.syncope.client.console.panels.DirectoryPanel;
-import org.apache.syncope.client.console.rest.BaseRestClient;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
-import org.apache.syncope.client.console.widgets.reconciliation.Any;
-import org.apache.syncope.client.console.widgets.reconciliation.Misaligned;
-import org.apache.syncope.client.console.wizards.WizardMgtPanel;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
-import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.repeater.Item;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.ResourceModel;
-
-public class ReconciliationDetailsModalPanel extends AbstractModalPanel<Any> {
-
- private static final long serialVersionUID = 1469396040405535283L;
-
- private static final int ROWS = 10;
-
- private final String resource;
-
- private final List<Misaligned> misaligned;
-
- public ReconciliationDetailsModalPanel(
- final BaseModal<Any> modal,
- final String resource,
- final List<Misaligned> misaligned,
- final PageReference pageRef) {
-
- super(modal, pageRef);
- this.resource = resource;
- this.misaligned = misaligned;
-
- add(new DiffPanel("diff", pageRef));
- }
-
- private class DiffPanel extends DirectoryPanel<
- Misaligned, Misaligned, DetailsProvider, BaseRestClient> {
-
- private static final long serialVersionUID = -8214546246301342868L;
-
- DiffPanel(final String id, final PageReference pageRef) {
- super(id, new Builder<Misaligned, Misaligned, BaseRestClient>(null, pageRef) {
-
- private static final long serialVersionUID = 8769126634538601689L;
-
- @Override
- protected WizardMgtPanel<Misaligned> newInstance(final String id, final boolean wizardInModal) {
- throw new UnsupportedOperationException();
- }
- }.disableCheckBoxes().hidePaginator());
-
- rows = 10;
- initResultTable();
- }
-
- @Override
- protected DetailsProvider dataProvider() {
- return new DetailsProvider();
- }
-
- @Override
- protected String paginatorRowsKey() {
- return StringUtils.EMPTY;
- }
-
- @Override
- protected Collection<ActionLink.ActionType> getBulkActions() {
- return Collections.<ActionLink.ActionType>emptyList();
- }
-
- @Override
- protected List<IColumn<Misaligned, String>> getColumns() {
- List<IColumn<Misaligned, String>> columns = new ArrayList<>();
-
- columns.add(new PropertyColumn<Misaligned, String>(new ResourceModel("key"), "name", "name"));
-
- columns.add(new AbstractColumn<Misaligned, String>(Model.of("Syncope")) {
-
- private static final long serialVersionUID = 2054811145491901166L;
-
- @Override
- public void populateItem(
- final Item<ICellPopulator<Misaligned>> cellItem,
- final String componentId,
- final IModel<Misaligned> rowModel) {
-
- cellItem.add(new Label(componentId, rowModel.getObject().getOnSyncope().toString()));
- cellItem.add(new AttributeModifier("class", "code-deletion"));
- }
- });
-
- columns.add(new AbstractColumn<Misaligned, String>(Model.of(resource)) {
-
- private static final long serialVersionUID = 2054811145491901166L;
-
- @Override
- public void populateItem(
- final Item<ICellPopulator<Misaligned>> cellItem,
- final String componentId,
- final IModel<Misaligned> rowModel) {
-
- cellItem.add(new Label(componentId, rowModel.getObject().getOnResource().toString()));
- cellItem.add(new AttributeModifier("class", "code-addition"));
- }
- });
-
- return columns;
- }
- }
-
- protected final class DetailsProvider extends DirectoryDataProvider<Misaligned> {
-
- private static final long serialVersionUID = -1500081449932597854L;
-
- private final SortableDataProviderComparator<Misaligned> comparator;
-
- private DetailsProvider() {
- super(ROWS);
- setSort("name", SortOrder.ASCENDING);
- comparator = new SortableDataProviderComparator<>(this);
- }
-
- @Override
- public Iterator<Misaligned> iterator(final long first, final long count) {
- Collections.sort(misaligned, comparator);
- return misaligned.subList((int) first, (int) first + (int) count).iterator();
- }
-
- @Override
- public long size() {
- return misaligned.size();
- }
-
- @Override
- public IModel<Misaligned> model(final Misaligned object) {
- return new CompoundPropertyModel<>(object);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
index edce805..502fc3f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
@@ -445,7 +445,7 @@ public class ReconciliationWidget extends BaseWidget {
rowModel.getObject().getType()
+ " " + rowModel.getObject().getKey()
+ " " + rowModel.getObject().getName()));
- modal.setContent(new ReconciliationDetailsModalPanel(
+ modal.setContent(new ReconDetailsModalPanel(
modal,
resource,
misaligned,
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
index 5d925df..025998c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
@@ -49,22 +49,22 @@ public class AnyObjectWizardBuilder extends AnyWizardBuilder<AnyObjectTO> implem
protected Serializable onApplyInternal(final AnyWrapper<AnyObjectTO> modelObject) {
final AnyObjectTO inner = modelObject.getInnerObject();
- ProvisioningResult<AnyObjectTO> actual;
+ ProvisioningResult<AnyObjectTO> result;
if (inner.getKey() == null) {
- actual = anyObjectRestClient.create(inner);
+ result = anyObjectRestClient.create(inner);
} else {
AnyObjectPatch patch = AnyOperations.diff(inner, getOriginalItem().getInnerObject(), false);
// update just if it is changed
if (patch.isEmpty()) {
- actual = new ProvisioningResult<>();
- actual.setEntity(inner);
+ result = new ProvisioningResult<>();
+ result.setEntity(inner);
} else {
- actual = anyObjectRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
+ result = anyObjectRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
}
}
- return actual;
+ return result;
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
index 2c75dae..76601f6 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
@@ -35,6 +35,7 @@ import org.apache.syncope.common.lib.EntityTOUtils;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Fragment;
@@ -48,7 +49,12 @@ public class ConnObjectPanel extends Panel {
private static final long serialVersionUID = -6469290753080058487L;
- public ConnObjectPanel(final String id, final Pair<ConnObjectTO, ConnObjectTO> connObjectTOs, final boolean view) {
+ public ConnObjectPanel(
+ final String id,
+ final Pair<IModel<?>, IModel<?>> titles,
+ final Pair<ConnObjectTO, ConnObjectTO> connObjectTOs,
+ final boolean hideLeft) {
+
super(id);
final IModel<List<String>> formProps = new LoadableDetachableModel<List<String>>() {
@@ -60,12 +66,11 @@ public class ConnObjectPanel extends Panel {
List<AttrTO> right = new ArrayList<>(connObjectTOs == null || connObjectTOs.getRight() == null
? Collections.<AttrTO>emptyList()
: connObjectTOs.getRight().getAttrs());
-
List<AttrTO> left = new ArrayList<>(connObjectTOs == null || connObjectTOs.getLeft() == null
? Collections.<AttrTO>emptyList()
: connObjectTOs.getLeft().getAttrs());
- final List<String> schemas = ListUtils.sum(
+ List<String> schemas = ListUtils.sum(
CollectionUtils.collect(right, new Transformer<AttrTO, String>() {
@Override
@@ -80,21 +85,21 @@ public class ConnObjectPanel extends Panel {
return input.getSchema();
}
}, new ArrayList<String>()));
-
Collections.sort(schemas);
-
return schemas;
}
};
- final Map<String, AttrTO> beforeProfile = connObjectTOs == null || connObjectTOs.getLeft() == null
+ add(new Label("leftTitle", titles.getLeft()).setOutputMarkupPlaceholderTag(true).setVisible(!hideLeft));
+ add(new Label("rightTitle", titles.getRight()));
+
+ final Map<String, AttrTO> leftProfile = connObjectTOs == null || connObjectTOs.getLeft() == null
? null
: EntityTOUtils.buildAttrMap(connObjectTOs.getLeft().getAttrs());
- final Map<String, AttrTO> afterProfile = connObjectTOs == null || connObjectTOs.getRight() == null
+ final Map<String, AttrTO> rightProfile = connObjectTOs == null || connObjectTOs.getRight() == null
? null
: EntityTOUtils.buildAttrMap(connObjectTOs.getRight().getAttrs());
-
- final ListView<String> propView = new ListView<String>("propView", formProps) {
+ ListView<String> propView = new ListView<String>("propView", formProps) {
private static final long serialVersionUID = 3109256773218160485L;
@@ -103,29 +108,26 @@ public class ConnObjectPanel extends Panel {
final String prop = item.getModelObject();
final Fragment valueFragment;
- final AttrTO before = beforeProfile == null ? null : beforeProfile.get(prop);
- final AttrTO after = afterProfile == null ? null : afterProfile.get(prop);
+ final AttrTO left = leftProfile == null ? null : leftProfile.get(prop);
+ final AttrTO right = rightProfile == null ? null : rightProfile.get(prop);
valueFragment = new Fragment("value", "doubleValue", ConnObjectPanel.this);
+ valueFragment.add(getValuePanel("leftAttribute", prop, left).
+ setOutputMarkupPlaceholderTag(true).setVisible(!hideLeft));
+ valueFragment.add(getValuePanel("rightAttribute", prop, right));
+
+ if (left == null || right == null
+ || (CollectionUtils.isNotEmpty(right.getValues())
+ && CollectionUtils.isEmpty(left.getValues()))
+ || (CollectionUtils.isEmpty(right.getValues())
+ && CollectionUtils.isNotEmpty(left.getValues()))
+ || (CollectionUtils.isNotEmpty(right.getValues())
+ && CollectionUtils.isNotEmpty(left.getValues())
+ && right.getValues().size() != left.getValues().size())
+ || (CollectionUtils.isNotEmpty(right.getValues())
+ && CollectionUtils.isNotEmpty(left.getValues())
+ && !right.getValues().equals(left.getValues()))) {
- Panel oldAttribute = getValuePanel("oldAttribute", prop, before);
- oldAttribute.setOutputMarkupPlaceholderTag(true);
- oldAttribute.setVisible(!view);
- valueFragment.add(oldAttribute);
-
- valueFragment.add(getValuePanel("newAttribute", prop, after));
-
- if (before == null || after == null
- || (CollectionUtils.isNotEmpty(after.getValues())
- && CollectionUtils.isEmpty(before.getValues()))
- || (CollectionUtils.isEmpty(after.getValues())
- && CollectionUtils.isNotEmpty(before.getValues()))
- || (CollectionUtils.isNotEmpty(after.getValues())
- && CollectionUtils.isNotEmpty(before.getValues())
- && after.getValues().size() != before.getValues().size())
- || (CollectionUtils.isNotEmpty(after.getValues())
- && CollectionUtils.isNotEmpty(before.getValues())
- && !after.getValues().equals(before.getValues()))) {
valueFragment.add(new Behavior() {
private static final long serialVersionUID = 3109256773218160485L;
@@ -169,5 +171,4 @@ public class ConnObjectPanel extends Panel {
field.setEnabled(false);
return field;
}
-
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
index 94b3d37..cb46bf1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
@@ -68,9 +68,9 @@ public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> implements Gro
? GroupWrapper.class.cast(modelObject).fillDynamicConditions()
: modelObject.getInnerObject();
- ProvisioningResult<GroupTO> actual;
+ ProvisioningResult<GroupTO> result;
if (inner.getKey() == null) {
- actual = groupRestClient.create(inner);
+ result = groupRestClient.create(inner);
} else {
GroupPatch patch = AnyOperations.diff(inner, getOriginalItem().getInnerObject(), false);
GroupTO originaObj = getOriginalItem().getInnerObject();
@@ -88,14 +88,14 @@ public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> implements Gro
// update just if it is changed
if (patch.isEmpty() && !othersNotEqualsOrBlanks) {
- actual = new ProvisioningResult<>();
- actual.setEntity(inner);
+ result = new ProvisioningResult<>();
+ result.setEntity(inner);
} else {
- actual = groupRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
+ result = groupRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
}
}
- return actual;
+ return result;
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
index cc1a2cc..1f64372 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
@@ -19,11 +19,14 @@
package org.apache.syncope.client.console.wizards.any;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
+import org.apache.commons.lang3.tuple.Triple;
import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.commons.SerializableTransformer;
import org.apache.syncope.client.console.commons.status.ConnObjectWrapper;
@@ -32,18 +35,22 @@ import org.apache.syncope.client.console.commons.status.StatusBean;
import org.apache.syncope.client.console.commons.status.StatusUtils;
import org.apache.syncope.client.console.panels.ListViewPanel;
import org.apache.syncope.client.console.panels.MultilevelPanel;
+import org.apache.syncope.client.console.panels.PropagationErrorPanel;
import org.apache.syncope.client.console.panels.RemoteObjectPanel;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.to.ConnObjectTO;
import org.apache.syncope.common.lib.to.GroupTO;
+import org.apache.syncope.common.lib.to.ReconStatus;
import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.StandardEntitlement;
import org.apache.wicket.Component;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.ResourceModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -55,8 +62,6 @@ public class StatusPanel extends Panel {
private Map<String, StatusBean> initialStatusBeanMap;
- private final StatusUtils statusUtils;
-
private ListViewPanel<?> listViewPanel;
public <T extends AnyTO> StatusPanel(
@@ -65,36 +70,38 @@ public class StatusPanel extends Panel {
final IModel<List<StatusBean>> model,
final PageReference pageRef) {
super(id);
- statusUtils = new StatusUtils();
- init(any, model,
- CollectionUtils.collect(statusUtils.getConnectorObjects(any),
- new SerializableTransformer<ConnObjectWrapper, Pair<ConnObjectTO, ConnObjectWrapper>>() {
+ init(any, model, CollectionUtils.collect(StatusUtils.getReconStatuses(
+ AnyTypeKind.fromTOClass(any.getClass()), any.getKey(), any.getResources()),
+ new SerializableTransformer<ReconStatus, Triple<ConnObjectTO, ConnObjectWrapper, String>>() {
- private static final long serialVersionUID = 2658691884036294287L;
+ private static final long serialVersionUID = 2658691884036294287L;
- @Override
- public Pair<ConnObjectTO, ConnObjectWrapper> transform(final ConnObjectWrapper input) {
- return Pair.of(null, input);
- }
+ @Override
+ public Triple<ConnObjectTO, ConnObjectWrapper, String> transform(final ReconStatus status) {
+ return Triple.of(
+ status.getOnSyncope(),
+ new ConnObjectWrapper(any, status.getResource(), status.getOnResource()),
+ null);
+ }
- }, new ArrayList<Pair<ConnObjectTO, ConnObjectWrapper>>()), pageRef, false);
+ }, new ArrayList<Triple<ConnObjectTO, ConnObjectWrapper, String>>()), pageRef, false);
}
public <T extends AnyTO> StatusPanel(
final String id,
final T any,
final IModel<List<StatusBean>> model,
- final List<Pair<ConnObjectTO, ConnObjectWrapper>> connObjects,
+ final List<Triple<ConnObjectTO, ConnObjectWrapper, String>> connObjects,
final PageReference pageRef) {
+
super(id);
- statusUtils = new StatusUtils();
init(any, model, connObjects, pageRef, true);
}
private void init(
final AnyTO any,
final IModel<List<StatusBean>> model,
- final List<Pair<ConnObjectTO, ConnObjectWrapper>> connObjects,
+ final List<Triple<ConnObjectTO, ConnObjectWrapper, String>> connObjects,
final PageReference pageRef,
final boolean enableConnObjectLink) {
@@ -123,15 +130,20 @@ public class StatusPanel extends Panel {
statusBeans.add(syncope);
initialStatusBeanMap.put(syncope.getResource(), syncope);
- for (Pair<ConnObjectTO, ConnObjectWrapper> pair : connObjects) {
- ConnObjectWrapper entry = pair.getRight();
- final StatusBean statusBean = statusUtils.getStatusBean(entry.getAny(),
- entry.getResourceName(),
- entry.getConnObjectTO(),
+ final Map<String, String> failureReasons = new HashMap<>();
+ for (Triple<ConnObjectTO, ConnObjectWrapper, String> pair : connObjects) {
+ ConnObjectWrapper connObjectWrapper = pair.getMiddle();
+ StatusBean statusBean = StatusUtils.getStatusBean(connObjectWrapper.getAny(),
+ connObjectWrapper.getResource(),
+ connObjectWrapper.getConnObjectTO(),
any instanceof GroupTO);
- initialStatusBeanMap.put(entry.getResourceName(), statusBean);
+ initialStatusBeanMap.put(connObjectWrapper.getResource(), statusBean);
statusBeans.add(statusBean);
+
+ if (StringUtils.isNotBlank(pair.getRight())) {
+ failureReasons.put(connObjectWrapper.getResource(), pair.getRight());
+ }
}
final MultilevelPanel mlp = new MultilevelPanel("resources");
@@ -150,22 +162,20 @@ public class StatusPanel extends Panel {
}
}
};
-
builder.setModel(model);
builder.setItems(statusBeans);
builder.includes("resource", "connObjectLink", "status");
builder.withChecks(ListViewPanel.CheckAvailability.NONE);
builder.setReuseItem(false);
- final ActionLink<StatusBean> connObjectLink = new ActionLink<StatusBean>() {
+ ActionLink<StatusBean> connObjectLink = new ActionLink<StatusBean>() {
private static final long serialVersionUID = -3722207913631435501L;
@Override
protected boolean statusCondition(final StatusBean bean) {
- final Pair<ConnObjectTO, ConnObjectTO> pair
- = getConnObjectTO(bean.getKey(), bean.getResource(), connObjects);
-
+ Pair<ConnObjectTO, ConnObjectTO> pair =
+ getConnObjectTOs(bean.getKey(), bean.getResource(), connObjects);
return pair != null && pair.getRight() != null;
}
@@ -174,13 +184,26 @@ public class StatusPanel extends Panel {
mlp.next(bean.getResource(), new RemoteAnyPanel(bean, connObjects), target);
}
};
-
if (!enableConnObjectLink) {
connObjectLink.disable();
}
-
builder.addAction(connObjectLink, ActionLink.ActionType.VIEW, StandardEntitlement.RESOURCE_GET_CONNOBJECT);
+ builder.addAction(new ActionLink<StatusBean>() {
+
+ private static final long serialVersionUID = -3722207913631435501L;
+
+ @Override
+ protected boolean statusCondition(final StatusBean bean) {
+ return failureReasons.containsKey(bean.getResource());
+ }
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+ mlp.next(bean.getResource(), new PropagationErrorPanel(failureReasons.get(bean.getResource())), target);
+ }
+ }, ActionLink.ActionType.PROPAGATION_TASKS, StringUtils.EMPTY);
+
listViewPanel = ListViewPanel.class.cast(builder.build(MultilevelPanel.FIRST_LEVEL_ID));
mlp.setFirstLevel(listViewPanel);
}
@@ -193,39 +216,44 @@ public class StatusPanel extends Panel {
return initialStatusBeanMap;
}
- protected Pair<ConnObjectTO, ConnObjectTO> getConnObjectTO(
- final String anyKey, final String resourceName,
- final List<Pair<ConnObjectTO, ConnObjectWrapper>> objects) {
+ protected Pair<ConnObjectTO, ConnObjectTO> getConnObjectTOs(
+ final String anyKey,
+ final String resource,
+ final List<Triple<ConnObjectTO, ConnObjectWrapper, String>> objects) {
- for (Pair<ConnObjectTO, ConnObjectWrapper> object : objects) {
- if (anyKey.equals(object.getRight().getAny().getKey())
- && resourceName.equalsIgnoreCase(object.getRight().getResourceName())) {
+ for (Triple<ConnObjectTO, ConnObjectWrapper, String> object : objects) {
+ if (anyKey.equals(object.getMiddle().getAny().getKey())
+ && resource.equalsIgnoreCase(object.getMiddle().getResource())) {
- return Pair.of(object.getLeft(), object.getRight().getConnObjectTO());
+ return Pair.of(object.getLeft(), object.getMiddle().getConnObjectTO());
}
}
return null;
}
- public class RemoteAnyPanel extends RemoteObjectPanel {
+ class RemoteAnyPanel extends RemoteObjectPanel {
private static final long serialVersionUID = 4303365227411467563L;
private final StatusBean bean;
- private final List<Pair<ConnObjectTO, ConnObjectWrapper>> connObjects;
+ private final List<Triple<ConnObjectTO, ConnObjectWrapper, String>> connObjects;
- public RemoteAnyPanel(final StatusBean bean, final List<Pair<ConnObjectTO, ConnObjectWrapper>> connObjects) {
+ RemoteAnyPanel(final StatusBean bean, final List<Triple<ConnObjectTO, ConnObjectWrapper, String>> connObjects) {
this.bean = bean;
this.connObjects = connObjects;
- add(new ConnObjectPanel(REMOTE_OBJECT_PANEL_ID, getConnObjectTO(), false));
+ add(new ConnObjectPanel(
+ REMOTE_OBJECT_PANEL_ID,
+ Pair.<IModel<?>, IModel<?>>of(new ResourceModel("before"), new ResourceModel("after")),
+ getConnObjectTOs(),
+ false));
}
@Override
- protected final Pair<ConnObjectTO, ConnObjectTO> getConnObjectTO() {
- return StatusPanel.this.getConnObjectTO(bean.getKey(), bean.getResource(), connObjects);
+ protected final Pair<ConnObjectTO, ConnObjectTO> getConnObjectTOs() {
+ return StatusPanel.this.getConnObjectTOs(bean.getKey(), bean.getResource(), connObjects);
}
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
index 4f408e8..cfa78a0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
@@ -76,9 +76,9 @@ public class UserWizardBuilder extends AnyWizardBuilder<UserTO> implements UserF
protected Serializable onApplyInternal(final AnyWrapper<UserTO> modelObject) {
UserTO inner = modelObject.getInnerObject();
- ProvisioningResult<UserTO> actual;
+ ProvisioningResult<UserTO> result;
if (inner.getKey() == null) {
- actual = userRestClient.create(inner, modelObject instanceof UserWrapper
+ result = userRestClient.create(inner, modelObject instanceof UserWrapper
? UserWrapper.class.cast(modelObject).isStorePasswordInSyncope()
: StringUtils.isNotBlank(inner.getPassword()));
} else {
@@ -92,14 +92,14 @@ public class UserWizardBuilder extends AnyWizardBuilder<UserTO> implements UserF
// update just if it is changed
if (patch.isEmpty()) {
- actual = new ProvisioningResult<>();
- actual.setEntity(inner);
+ result = new ProvisioningResult<>();
+ result.setEntity(inner);
} else {
- actual = userRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
+ result = userRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
}
}
- return actual;
+ return result;
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
index 76fe2d0..7a162c2 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
@@ -73,3 +73,5 @@ confirmGlobalLogout=Do you really want to perform global logout?
administration=Administration
timeout=Operation is taking to long: it will be executed in background. Please check later for the result (errors won't be triggered).
+before=Before
+after=After
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
index c8b1529..dca64f0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
@@ -73,3 +73,5 @@ confirmGlobalLogout=Vuoi davvero procedere al logout globale?
administration=Amministrazione
timeout=L'operazione sta durando troppo: sar\u00e0 eseguita in background. Verifica il risultato pi\u00f9 tardi (gli errori non saranno notificati).
+before=Prima
+after=Dopo
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties
index d69adc5..3c2674b 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties
@@ -71,3 +71,5 @@ intAttrNameInfo.help=\u30aa\u30fc\u30c8\u30b3\u30f3\u30d7\u30ea\u30fc\u30c8\u306
confirmGlobalLogout=\u30b0\u30ed\u30fc\u30d0\u30eb\u30ed\u30b0\u30a2\u30a6\u30c8\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
administration=\u7ba1\u7406
timeout=\u64cd\u4f5c\u306b\u9577\u6642\u9593\u304b\u304b\u3063\u3066\u3044\u307e\u3059\: \u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002 \u7d50\u679c\u3092\u5f8c\u3067\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044 (\u30a8\u30e9\u30fc\u306f\u5f15\u304d\u8d77\u3053\u3057\u307e\u305b\u3093)\u3002
+before=Before
+after=After
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
index 492c0c4..118a859 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
@@ -73,3 +73,5 @@ confirmGlobalLogout=Do you really want to perform global logout?
administration=Administra\u00e7\u00e3o
timeout=Operation is taking to long: it will be executed in background. Please check later for the result (errors won't be triggered).
+before=Before
+after=After
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
index b39225d..6a95add 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
@@ -72,3 +72,5 @@ confirmGlobalLogout=Do you really want to perform global logout?
administration=Administration
timeout=Operation is taking to long: it will be executed in background. Please check later for the result (errors won't be triggered).
+before=Before
+after=After
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.html b/client/console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.html
index 790398a..5d5d129 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/approvals/ApprovalModal.html
@@ -17,10 +17,7 @@ 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 wicket:id="approval">[APPROVAL]</span>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <span wicket:id="approval">[APPROVAL]</span>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkActionModal.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkActionModal.html b/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkActionModal.html
index a9cd88e..dda032e 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkActionModal.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkActionModal.html
@@ -17,10 +17,7 @@ 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:extend>
- <span wicket:id="content"/>
- </wicket:extend>
- </body>
+ <wicket:extend>
+ <span wicket:id="content"/>
+ </wicket:extend>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkContent.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkContent.html b/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkContent.html
index 4adf9d7..5cebcb5 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkContent.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkContent.html
@@ -17,21 +17,18 @@ 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:head>
- <link rel="stylesheet" type="text/css" href="css/bulk.css" media="all"/>
- </wicket:head>
- <wicket:panel>
- <div wicket:id="container" id="selectedObjects" class="table-responsive dataTable">
- <table class="ui-widget ui-widget-content table-hover pageRowElement" wicket:id="selectedObjects">[DataTable]</table>
+ <wicket:head>
+ <link rel="stylesheet" type="text/css" href="css/bulk.css" media="all"/>
+ </wicket:head>
+ <wicket:panel>
+ <div wicket:id="container" id="selectedObjects" class="table-responsive dataTable">
+ <table class="ui-widget ui-widget-content table-hover pageRowElement" wicket:id="selectedObjects">[DataTable]</table>
- <div class="circular-actions">
- <div id="inline-actions">
- <span wicket:id="actions">[Actions]</span>
- </div>
+ <div class="circular-actions">
+ <div id="inline-actions">
+ <span wicket:id="actions">[Actions]</span>
</div>
</div>
- </wicket:panel>
- </body>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationTasks.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationTasks.html b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationTasks.html
index ac755e8..f74731a 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationTasks.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationTasks.html
@@ -17,7 +17,6 @@ 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>
<wicket:panel>
<span wicket:id="tasks">[TASKS]</span>
</wicket:panel>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Abouts.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Abouts.html b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Abouts.html
index c1cbc27..4b5ef37 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Abouts.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Abouts.html
@@ -17,12 +17,9 @@ 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>
- <div wicket:id="about" class="form-group">
- <span wicket:id="abouts">[abouts]</span>
- </div>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <div wicket:id="about" class="form-group">
+ <span wicket:id="abouts">[abouts]</span>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html
index d9844ab..1cbab58 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html
@@ -17,24 +17,21 @@ 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>
- <div class="form-group">
- <span wicket:id="isActive">[isActive]</span>
- </div>
- <div class="form-group">
- <span wicket:id="sender">[sender]</span>
- </div>
- <div class="form-group">
- <span wicket:id="subject">[subject]</span>
- </div>
- <div class="form-group">
- <span wicket:id="template">[template]</span>
- </div>
- <div class="form-group">
- <span wicket:id="traceLevel">[traceLevel]</span>
- </div>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <div class="form-group">
+ <span wicket:id="isActive">[isActive]</span>
+ </div>
+ <div class="form-group">
+ <span wicket:id="sender">[sender]</span>
+ </div>
+ <div class="form-group">
+ <span wicket:id="subject">[subject]</span>
+ </div>
+ <div class="form-group">
+ <span wicket:id="template">[template]</span>
+ </div>
+ <div class="form-group">
+ <span wicket:id="traceLevel">[traceLevel]</span>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.html b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.html
index c697099..0001cfd 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.html
@@ -17,11 +17,8 @@ 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 wicket:id="eventSelection"/>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <span wicket:id="eventSelection"/>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Recipients.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Recipients.html b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Recipients.html
index cb8bc9d..09cccb0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Recipients.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Recipients.html
@@ -17,33 +17,29 @@ 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>
- <div class="form-group">
- <span wicket:id="staticRecipients">[staticRecipients]</span>
+ <wicket:panel>
+ <div class="form-group">
+ <span wicket:id="staticRecipients">[staticRecipients]</span>
+ </div>
+ <div class="form-group form-group-inline">
+ <span wicket:id="recipients">[recipients]</span>
+ </div>
+ <div class="form-group">
+ <span wicket:id="recipientAttrName">[recipientAttrName]</span>
+ </div>
+ <div class="form-group">
+ <span wicket:id="recipientsProviderClassName">[recipientsProviderClassName]</span>
+ </div>
+ <div id="userFilter" class="form-group box">
+ <div id="title">
+ <span for="userNotifications"><wicket:message key="userNotifications"/></span>
</div>
- <div class="form-group form-group-inline">
- <span wicket:id="recipients">[recipients]</span>
+ <div id="warning">
+ <span for="userNotificationsWarning"><wicket:message key="userNotificationsWarning"/></span>
</div>
- <div class="form-group">
- <span wicket:id="recipientAttrName">[recipientAttrName]</span>
+ <div id="check">
+ <span wicket:id="selfAsRecipient">[selfAsRecipient]</span>
</div>
- <div class="form-group">
- <span wicket:id="recipientsProviderClassName">[recipientsProviderClassName]</span>
- </div>
- <div id="userFilter" class="form-group box">
- <div id="title">
- <span for="userNotifications"><wicket:message key="userNotifications"/></span>
- </div>
- <div id="warning">
- <span for="userNotificationsWarning"><wicket:message key="userNotificationsWarning"/></span>
- </div>
- <div id="check">
- <span wicket:id="selfAsRecipient">[selfAsRecipient]</span>
- </div>
- </div>
- </wicket:panel>
- </body>
+ </div>
+ </wicket:panel>
</html>
-
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/panels/MultilevelPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/MultilevelPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/MultilevelPanel.html
index 6c75dfb..f91de30 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/MultilevelPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/MultilevelPanel.html
@@ -17,7 +17,6 @@ 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>
<wicket:panel>
<div wicket:id="firstLevelContainer">
<span wicket:id="first">[FIRST]</span>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PropagationErrorPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/PropagationErrorPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PropagationErrorPanel.html
new file mode 100644
index 0000000..777986d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PropagationErrorPanel.html
@@ -0,0 +1,24 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+ <wicket:panel>
+ <pre wicket:id="failureReason">
+ </pre>
+ </wicket:panel>
+</html>
[7/8] syncope git commit: [SYNCOPE-1299] Console features implemented
Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
new file mode 100644
index 0000000..3dadb567
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/status/ReconTaskPanel.java
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.status;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.pages.BasePage;
+import org.apache.syncope.client.console.panels.MultilevelPanel;
+import org.apache.syncope.client.console.rest.ImplementationRestClient;
+import org.apache.syncope.client.console.rest.ReconciliationRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
+import org.apache.syncope.common.lib.to.EntityTO;
+import org.apache.syncope.common.lib.to.ProvisioningTaskTO;
+import org.apache.syncope.common.lib.to.PullTaskTO;
+import org.apache.syncope.common.lib.to.PushTaskTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.types.ImplementationType;
+import org.apache.syncope.common.lib.types.MatchingRule;
+import org.apache.syncope.common.lib.types.UnmatchingRule;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.util.ListModel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ReconTaskPanel extends MultilevelPanel.SecondLevel {
+
+ private static final long serialVersionUID = 5870444905957760434L;
+
+ protected static final Logger LOG = LoggerFactory.getLogger(ReconTaskPanel.class);
+
+ private final ReconciliationRestClient restClient = new ReconciliationRestClient();
+
+ private final ImplementationRestClient implRestClient = new ImplementationRestClient();
+
+ private final IModel<List<String>> pullActions = new LoadableDetachableModel<List<String>>() {
+
+ private static final long serialVersionUID = 5275935387613157437L;
+
+ @Override
+ protected List<String> load() {
+ return implRestClient.list(ImplementationType.PULL_ACTIONS).stream().
+ map(EntityTO::getKey).sorted().collect(Collectors.toList());
+ }
+ };
+
+ private final IModel<List<String>> pushActions = new LoadableDetachableModel<List<String>>() {
+
+ private static final long serialVersionUID = 5275935387613157437L;
+
+ @Override
+ protected List<String> load() {
+ return implRestClient.list(ImplementationType.PUSH_ACTIONS).stream().
+ map(EntityTO::getKey).sorted().collect(Collectors.toList());
+ }
+ };
+
+ public ReconTaskPanel(
+ final String resource,
+ final ProvisioningTaskTO taskTO,
+ final AnyTypeKind anyTypeKind,
+ final String anyKey,
+ final MultilevelPanel multiLevelPanelRef,
+ final PageReference pageRef) {
+
+ Form<ProvisioningTaskTO> form = new Form<>("form", new CompoundPropertyModel<>(taskTO));
+ add(form);
+
+ AjaxPalettePanel<String> actions = new AjaxPalettePanel.Builder<String>().
+ setAllowMoveAll(true).setAllowOrder(true).
+ build("actions",
+ new PropertyModel<List<String>>(taskTO, "actions"),
+ new ListModel<>(taskTO instanceof PushTaskTO
+ ? pushActions.getObject() : pullActions.getObject()));
+ actions.setOutputMarkupId(true);
+ form.add(actions);
+
+ AjaxDropDownChoicePanel<MatchingRule> matchingRule = new AjaxDropDownChoicePanel<>(
+ "matchingRule", "matchingRule", new PropertyModel<MatchingRule>(taskTO, "matchingRule"), false);
+ matchingRule.setChoices(Arrays.asList(MatchingRule.values()));
+ form.add(matchingRule);
+
+ AjaxDropDownChoicePanel<UnmatchingRule> unmatchingRule = new AjaxDropDownChoicePanel<>(
+ "unmatchingRule", "unmatchingRule", new PropertyModel<UnmatchingRule>(taskTO, "unmatchingRule"),
+ false);
+ unmatchingRule.setChoices(Arrays.asList(UnmatchingRule.values()));
+ form.add(unmatchingRule);
+
+ taskTO.setPerformCreate(true);
+ AjaxCheckBoxPanel performCreate = new AjaxCheckBoxPanel(
+ "performCreate", "performCreate", new PropertyModel<Boolean>(taskTO, "performCreate"), false);
+ form.add(performCreate);
+
+ taskTO.setPerformUpdate(true);
+ AjaxCheckBoxPanel performUpdate = new AjaxCheckBoxPanel(
+ "performUpdate", "performUpdate", new PropertyModel<Boolean>(taskTO, "performUpdate"), false);
+ form.add(performUpdate);
+
+ taskTO.setPerformDelete(true);
+ AjaxCheckBoxPanel performDelete = new AjaxCheckBoxPanel(
+ "performDelete", "performDelete", new PropertyModel<Boolean>(taskTO, "performDelete"), false);
+ form.add(performDelete);
+
+ taskTO.setSyncStatus(true);
+ AjaxCheckBoxPanel syncStatus = new AjaxCheckBoxPanel(
+ "syncStatus", "syncStatus", new PropertyModel<Boolean>(taskTO, "syncStatus"), false);
+ form.add(syncStatus);
+
+ form.add(new AjaxSubmitLink("reconcile") {
+
+ private static final long serialVersionUID = -817438685948164787L;
+
+ @Override
+ protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+ try {
+ if (taskTO instanceof PushTaskTO) {
+ restClient.push(anyTypeKind, anyKey, resource, (PushTaskTO) form.getModelObject());
+ } else {
+ restClient.pull(anyTypeKind, anyKey, resource, (PullTaskTO) form.getModelObject());
+ }
+
+ SyncopeConsoleSession.get().info(getString(Constants.OPERATION_SUCCEEDED));
+ } catch (Exception e) {
+ LOG.error("While attempting reconciliation on {} {} {} {}",
+ anyTypeKind, anyKey, resource, form.getModelObject(), e);
+ SyncopeConsoleSession.get().error(resource + ": "
+ + (StringUtils.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage()));
+ }
+ multiLevelPanelRef.prev(target);
+ ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(target);
+ }
+ });
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/status/ResourceStatusDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/ResourceStatusDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/status/ResourceStatusDirectoryPanel.java
index a37ab4a..c75dce3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/status/ResourceStatusDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/status/ResourceStatusDirectoryPanel.java
@@ -21,9 +21,10 @@ package org.apache.syncope.client.console.status;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.client.console.commons.DirectoryDataProvider;
-import org.apache.syncope.client.console.commons.ResourceStatusDataProvider;
+import org.apache.syncope.client.console.commons.status.AbstractStatusBeanProvider;
import org.apache.syncope.client.console.commons.status.StatusBean;
import org.apache.syncope.client.console.commons.status.StatusUtils;
import org.apache.syncope.client.console.panels.DirectoryPanel;
@@ -36,16 +37,21 @@ import org.apache.syncope.client.console.rest.GroupRestClient;
import org.apache.syncope.client.console.rest.UserRestClient;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
+import org.apache.syncope.client.lib.SyncopeClient;
import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.search.AbstractFiqlSearchConditionBuilder;
+import org.apache.syncope.common.lib.to.AnyTO;
+import org.apache.syncope.common.lib.to.GroupTO;
+import org.apache.syncope.common.lib.to.PullTaskTO;
+import org.apache.syncope.common.lib.to.PushTaskTO;
import org.apache.syncope.common.lib.to.ResourceTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.StringResourceModel;
@@ -61,21 +67,21 @@ public class ResourceStatusDirectoryPanel
private String type;
- private final ResourceTO resourceTO;
+ private final ResourceTO resource;
public ResourceStatusDirectoryPanel(
final BaseModal<?> baseModal,
final MultilevelPanel multiLevelPanelRef,
final PageReference pageRef,
final String type,
- final ResourceTO resourceTO) {
+ final ResourceTO resource) {
super(MultilevelPanel.FIRST_LEVEL_ID, pageRef);
this.baseModal = baseModal;
this.multiLevelPanelRef = multiLevelPanelRef;
this.type = type;
- this.resourceTO = resourceTO;
- this.itemKeyFieldName = "key";
+ this.resource = resource;
+ this.itemKeyFieldName = "name";
initResultTable();
}
@@ -89,44 +95,117 @@ public class ResourceStatusDirectoryPanel
protected List<IColumn<StatusBean, String>> getColumns() {
final List<IColumn<StatusBean, String>> columns = new ArrayList<>();
- columns.add(new PropertyColumn<>(
- new StringResourceModel("key", this), "key", "key"));
+ columns.add(new PropertyColumn<>(new StringResourceModel("name", this), "name", "name"));
- columns.add(new PropertyColumn<>(
- new StringResourceModel("connObjectLink", this), "connObjectLink", "connObjectLink"));
+ return columns;
+ }
+
+ private AnyTypeKind getAnyTypeKind() {
+ if (StringUtils.isBlank(type)) {
+ return null;
+ }
+
+ switch (type) {
+ case "USER":
+ return AnyTypeKind.USER;
+
+ case "GROUP":
+ return AnyTypeKind.GROUP;
+
+ default:
+ return AnyTypeKind.ANY_OBJECT;
+ }
+ }
+
+ @Override
+ public ActionsPanel<StatusBean> getActions(final IModel<StatusBean> model) {
+ final ActionsPanel<StatusBean> panel = super.getActions(model);
- columns.add(new AbstractColumn<StatusBean, String>(new StringResourceModel("status", this)) {
+ panel.add(new ActionLink<StatusBean>() {
- private static final long serialVersionUID = -3503023501954863131L;
+ private static final long serialVersionUID = -7978723352517770645L;
@Override
- public void populateItem(
- final Item<ICellPopulator<StatusBean>> cellItem,
- final String componentId,
- final IModel<StatusBean> model) {
-
- if (model.getObject().isLinked()) {
- cellItem.add(StatusUtils.getStatusImage(componentId, model.getObject().getStatus()));
- } else {
- cellItem.add(new Label(componentId, ""));
- }
+ protected boolean statusCondition(final StatusBean bean) {
+ return getAnyTypeKind() != null;
}
- });
- return columns;
+ @Override
+ public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+ multiLevelPanelRef.next(bean.getResource(),
+ new ReconStatusPanel(bean.getResource(), getAnyTypeKind(), bean.getKey()),
+ target);
+ target.add(multiLevelPanelRef);
+ getTogglePanel().close(target);
+ }
+ }, ActionLink.ActionType.VIEW, StandardEntitlement.RESOURCE_GET_CONNOBJECT);
+
+ panel.add(new ActionLink<StatusBean>() {
+
+ private static final long serialVersionUID = -7978723352517770645L;
+
+ @Override
+ protected boolean statusCondition(final StatusBean bean) {
+ return getAnyTypeKind() != null;
+ }
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+ multiLevelPanelRef.next("PUSH " + bean.getResource(),
+ new ReconTaskPanel(
+ bean.getResource(),
+ new PushTaskTO(),
+ getAnyTypeKind(),
+ bean.getKey(),
+ multiLevelPanelRef,
+ pageRef),
+ target);
+ target.add(multiLevelPanelRef);
+ getTogglePanel().close(target);
+ }
+ }, ActionLink.ActionType.RECONCILIATION_PUSH, StandardEntitlement.TASK_EXECUTE);
+
+ panel.add(new ActionLink<StatusBean>() {
+
+ private static final long serialVersionUID = -7978723352517770645L;
+
+ @Override
+ protected boolean statusCondition(final StatusBean bean) {
+ return getAnyTypeKind() != null;
+ }
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+ multiLevelPanelRef.next("PULL " + bean.getResource(),
+ new ReconTaskPanel(
+ bean.getResource(),
+ new PullTaskTO(),
+ getAnyTypeKind(),
+ bean.getKey(),
+ multiLevelPanelRef,
+ pageRef),
+ target);
+ target.add(multiLevelPanelRef);
+ getTogglePanel().close(target);
+ }
+ }, ActionLink.ActionType.RECONCILIATION_PULL, StandardEntitlement.TASK_EXECUTE);
+
+ return panel;
}
public void updateResultTable(final String type, final AjaxRequestTarget target) {
this.type = type;
- if (StringUtils.isNoneEmpty(type)) {
+ if (StringUtils.isNotBlank(type)) {
switch (type) {
case "USER":
this.restClient = new UserRestClient();
break;
+
case "GROUP":
this.restClient = new GroupRestClient();
break;
+
default:
this.restClient = new AnyObjectRestClient();
}
@@ -137,20 +216,85 @@ public class ResourceStatusDirectoryPanel
@Override
protected Collection<ActionLink.ActionType> getBulkActions() {
- final List<ActionLink.ActionType> bulkActions = new ArrayList<>();
+ List<ActionLink.ActionType> bulkActions = new ArrayList<>();
bulkActions.add(ActionLink.ActionType.UNLINK);
+ bulkActions.add(ActionLink.ActionType.LINK);
bulkActions.add(ActionLink.ActionType.DEPROVISION);
+ bulkActions.add(ActionLink.ActionType.PROVISION);
+ bulkActions.add(ActionLink.ActionType.ASSIGN);
bulkActions.add(ActionLink.ActionType.UNASSIGN);
return bulkActions;
}
@Override
protected ResourceStatusDataProvider dataProvider() {
- return new ResourceStatusDataProvider(type, resourceTO.getKey(), rows, SyncopeConstants.ROOT_REALM);
+ return new ResourceStatusDataProvider();
}
@Override
protected String paginatorRowsKey() {
return StringUtils.EMPTY;
}
+
+ protected class ResourceStatusDataProvider extends AbstractStatusBeanProvider {
+
+ private static final long serialVersionUID = 4586969457669796621L;
+
+ private final String fiql;
+
+ private final AbstractAnyRestClient<? extends AnyTO> restClient;
+
+ public ResourceStatusDataProvider() {
+ super(AnyTypeKind.USER.name().equals(type) ? "username" : "name");
+
+ if (StringUtils.isEmpty(type)) {
+ fiql = null;
+ restClient = null;
+ } else {
+ AbstractFiqlSearchConditionBuilder bld;
+ switch (type) {
+ case "USER":
+ bld = SyncopeClient.getUserSearchConditionBuilder();
+ restClient = new UserRestClient();
+ break;
+
+ case "GROUP":
+ bld = SyncopeClient.getGroupSearchConditionBuilder();
+ restClient = new GroupRestClient();
+ break;
+
+ default:
+ bld = SyncopeClient.getAnyObjectSearchConditionBuilder(type);
+ restClient = new AnyObjectRestClient();
+ }
+ fiql = bld.isNotNull("key").query();
+ }
+ }
+
+ @Override
+ protected List<StatusBean> getStatusBeans(final long first, final long count) {
+ List<StatusBean> statusBeans = new ArrayList<>();
+
+ if (fiql != null && restClient != null) {
+ int page = (int) first / paginatorRows;
+ List<? extends AnyTO> result = restClient.search(
+ SyncopeConstants.ROOT_REALM, fiql, (page < 0 ? 0 : page) + 1, paginatorRows, getSort(), type);
+
+ statusBeans.addAll(result.stream().map(any -> StatusUtils.getStatusBean(
+ any,
+ resource.getKey(),
+ null,
+ any instanceof GroupTO)).collect(Collectors.toList()));
+ }
+
+ return statusBeans;
+ }
+
+ @Override
+ public long size() {
+ return fiql == null
+ ? 0
+ : restClient.count(SyncopeConstants.ROOT_REALM, fiql, type);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java b/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java
index baba5a5..d1387e0 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/status/StatusModal.java
@@ -18,7 +18,6 @@
*/
package org.apache.syncope.client.console.status;
-import java.io.Serializable;
import org.apache.syncope.client.console.commons.DirectoryDataProvider;
import org.apache.syncope.client.console.commons.status.StatusBean;
import org.apache.syncope.client.console.panels.DirectoryPanel;
@@ -26,10 +25,11 @@ import org.apache.syncope.client.console.panels.ModalPanel;
import org.apache.syncope.client.console.panels.MultilevelPanel;
import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.common.lib.AbstractBaseBean;
import org.apache.wicket.PageReference;
import org.apache.wicket.markup.html.panel.Panel;
-public abstract class StatusModal<T extends Serializable> extends Panel implements ModalPanel {
+public abstract class StatusModal<T extends AbstractBaseBean> extends Panel implements ModalPanel {
private static final long serialVersionUID = 1066124171682570080L;
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
index 5f33ed5..310aa13 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
@@ -18,7 +18,6 @@
*/
package org.apache.syncope.client.console.topology;
-
import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
import java.io.Serializable;
import java.text.MessageFormat;
@@ -417,7 +416,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
MetaDataRoleAuthorizationStrategy.authorize(edit, RENDER, StandardEntitlement.RESOURCE_READ);
fragment.add(edit);
- AjaxLink<String> status = new IndicatingAjaxLink<String>("status") {
+ AjaxLink<String> status = new IndicatingAjaxLink<String>("reconciliation") {
private static final long serialVersionUID = 3776750333491622263L;
@@ -426,8 +425,8 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
ResourceTO modelObject = resourceRestClient.read(node.getKey());
target.add(propTaskModal.setContent(
new ResourceStatusModal(propTaskModal, pageRef, modelObject)));
- propTaskModal.header(new Model<>(MessageFormat.format(getString("resource.provisioning.status"),
- node.getKey())));
+ propTaskModal.header(
+ new Model<>(MessageFormat.format(getString("resource.reconciliation"), node.getKey())));
propTaskModal.show(true);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
index 5b67fa1..d8e8f77 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLink.java
@@ -89,6 +89,8 @@ public abstract class ActionLink<T extends Serializable> implements Serializable
PROVISION("update"),
DEPROVISION_MEMBERS("update"),
PROVISION_MEMBERS("update"),
+ RECONCILIATION_PUSH("update"),
+ RECONCILIATION_PULL("update"),
MANAGE_RESOURCES("update"),
MANAGE_USERS("update"),
MANAGE_GROUPS("update"),
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.java
new file mode 100644
index 0000000..7e969f3
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.java
@@ -0,0 +1,178 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.widgets;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
+import org.apache.syncope.client.console.panels.AbstractModalPanel;
+import org.apache.syncope.client.console.panels.DirectoryPanel;
+import org.apache.syncope.client.console.rest.BaseRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
+import org.apache.syncope.client.console.widgets.reconciliation.Any;
+import org.apache.syncope.client.console.widgets.reconciliation.Misaligned;
+import org.apache.syncope.client.console.wizards.WizardMgtPanel;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
+
+public class ReconDetailsModalPanel extends AbstractModalPanel<Any> {
+
+ private static final long serialVersionUID = 1469396040405535283L;
+
+ private static final int ROWS = 10;
+
+ private final String resource;
+
+ private final List<Misaligned> misaligned;
+
+ public ReconDetailsModalPanel(
+ final BaseModal<Any> modal,
+ final String resource,
+ final List<Misaligned> misaligned,
+ final PageReference pageRef) {
+
+ super(modal, pageRef);
+ this.resource = resource;
+ this.misaligned = misaligned;
+
+ add(new DiffPanel("diff", pageRef));
+ }
+
+ private class DiffPanel extends DirectoryPanel<
+ Misaligned, Misaligned, DetailsProvider, BaseRestClient> {
+
+ private static final long serialVersionUID = -8214546246301342868L;
+
+ DiffPanel(final String id, final PageReference pageRef) {
+ super(id, new Builder<Misaligned, Misaligned, BaseRestClient>(null, pageRef) {
+
+ private static final long serialVersionUID = 8769126634538601689L;
+
+ @Override
+ protected WizardMgtPanel<Misaligned> newInstance(final String id, final boolean wizardInModal) {
+ throw new UnsupportedOperationException();
+ }
+ }.disableCheckBoxes().hidePaginator());
+
+ rows = 10;
+ initResultTable();
+ }
+
+ @Override
+ protected DetailsProvider dataProvider() {
+ return new DetailsProvider();
+ }
+
+ @Override
+ protected String paginatorRowsKey() {
+ return StringUtils.EMPTY;
+ }
+
+ @Override
+ protected Collection<ActionLink.ActionType> getBulkActions() {
+ return Collections.<ActionLink.ActionType>emptyList();
+ }
+
+ @Override
+ protected List<IColumn<Misaligned, String>> getColumns() {
+ List<IColumn<Misaligned, String>> columns = new ArrayList<>();
+
+ columns.add(new PropertyColumn<>(new ResourceModel("key"), "name", "name"));
+
+ columns.add(new AbstractColumn<Misaligned, String>(Model.of(Constants.SYNCOPE)) {
+
+ private static final long serialVersionUID = 2054811145491901166L;
+
+ @Override
+ public void populateItem(
+ final Item<ICellPopulator<Misaligned>> cellItem,
+ final String componentId,
+ final IModel<Misaligned> rowModel) {
+
+ cellItem.add(new Label(componentId, rowModel.getObject().getOnSyncope().toString()));
+ cellItem.add(new AttributeModifier("class", "code-deletion"));
+ }
+ });
+
+ columns.add(new AbstractColumn<Misaligned, String>(Model.of(resource)) {
+
+ private static final long serialVersionUID = 2054811145491901166L;
+
+ @Override
+ public void populateItem(
+ final Item<ICellPopulator<Misaligned>> cellItem,
+ final String componentId,
+ final IModel<Misaligned> rowModel) {
+
+ cellItem.add(new Label(componentId, rowModel.getObject().getOnResource().toString()));
+ cellItem.add(new AttributeModifier("class", "code-addition"));
+ }
+ });
+
+ return columns;
+ }
+ }
+
+ protected final class DetailsProvider extends DirectoryDataProvider<Misaligned> {
+
+ private static final long serialVersionUID = -1500081449932597854L;
+
+ private final SortableDataProviderComparator<Misaligned> comparator;
+
+ private DetailsProvider() {
+ super(ROWS);
+ setSort("name", SortOrder.ASCENDING);
+ comparator = new SortableDataProviderComparator<>(this);
+ }
+
+ @Override
+ public Iterator<Misaligned> iterator(final long first, final long count) {
+ Collections.sort(misaligned, comparator);
+ return misaligned.subList((int) first, (int) first + (int) count).iterator();
+ }
+
+ @Override
+ public long size() {
+ return misaligned.size();
+ }
+
+ @Override
+ public IModel<Misaligned> model(final Misaligned object) {
+ return new CompoundPropertyModel<>(object);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.java
deleted file mode 100644
index 15accd3..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.widgets;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.client.console.commons.DirectoryDataProvider;
-import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
-import org.apache.syncope.client.console.panels.AbstractModalPanel;
-import org.apache.syncope.client.console.panels.DirectoryPanel;
-import org.apache.syncope.client.console.rest.BaseRestClient;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
-import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
-import org.apache.syncope.client.console.widgets.reconciliation.Any;
-import org.apache.syncope.client.console.widgets.reconciliation.Misaligned;
-import org.apache.syncope.client.console.wizards.WizardMgtPanel;
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.PageReference;
-import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
-import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
-import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.repeater.Item;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.model.ResourceModel;
-
-public class ReconciliationDetailsModalPanel extends AbstractModalPanel<Any> {
-
- private static final long serialVersionUID = 1469396040405535283L;
-
- private static final int ROWS = 10;
-
- private final String resource;
-
- private final List<Misaligned> misaligned;
-
- public ReconciliationDetailsModalPanel(
- final BaseModal<Any> modal,
- final String resource,
- final List<Misaligned> misaligned,
- final PageReference pageRef) {
-
- super(modal, pageRef);
- this.resource = resource;
- this.misaligned = misaligned;
-
- add(new DiffPanel("diff", pageRef));
- }
-
- private class DiffPanel extends DirectoryPanel<
- Misaligned, Misaligned, DetailsProvider, BaseRestClient> {
-
- private static final long serialVersionUID = -8214546246301342868L;
-
- DiffPanel(final String id, final PageReference pageRef) {
- super(id, new Builder<Misaligned, Misaligned, BaseRestClient>(null, pageRef) {
-
- private static final long serialVersionUID = 8769126634538601689L;
-
- @Override
- protected WizardMgtPanel<Misaligned> newInstance(final String id, final boolean wizardInModal) {
- throw new UnsupportedOperationException();
- }
- }.disableCheckBoxes().hidePaginator());
-
- rows = 10;
- initResultTable();
- }
-
- @Override
- protected DetailsProvider dataProvider() {
- return new DetailsProvider();
- }
-
- @Override
- protected String paginatorRowsKey() {
- return StringUtils.EMPTY;
- }
-
- @Override
- protected Collection<ActionLink.ActionType> getBulkActions() {
- return Collections.<ActionLink.ActionType>emptyList();
- }
-
- @Override
- protected List<IColumn<Misaligned, String>> getColumns() {
- List<IColumn<Misaligned, String>> columns = new ArrayList<>();
-
- columns.add(new PropertyColumn<>(new ResourceModel("key"), "name", "name"));
-
- columns.add(new AbstractColumn<Misaligned, String>(Model.of("Syncope")) {
-
- private static final long serialVersionUID = 2054811145491901166L;
-
- @Override
- public void populateItem(
- final Item<ICellPopulator<Misaligned>> cellItem,
- final String componentId,
- final IModel<Misaligned> rowModel) {
-
- cellItem.add(new Label(componentId, rowModel.getObject().getOnSyncope().toString()));
- cellItem.add(new AttributeModifier("class", "code-deletion"));
- }
- });
-
- columns.add(new AbstractColumn<Misaligned, String>(Model.of(resource)) {
-
- private static final long serialVersionUID = 2054811145491901166L;
-
- @Override
- public void populateItem(
- final Item<ICellPopulator<Misaligned>> cellItem,
- final String componentId,
- final IModel<Misaligned> rowModel) {
-
- cellItem.add(new Label(componentId, rowModel.getObject().getOnResource().toString()));
- cellItem.add(new AttributeModifier("class", "code-addition"));
- }
- });
-
- return columns;
- }
- }
-
- protected final class DetailsProvider extends DirectoryDataProvider<Misaligned> {
-
- private static final long serialVersionUID = -1500081449932597854L;
-
- private final SortableDataProviderComparator<Misaligned> comparator;
-
- private DetailsProvider() {
- super(ROWS);
- setSort("name", SortOrder.ASCENDING);
- comparator = new SortableDataProviderComparator<>(this);
- }
-
- @Override
- public Iterator<Misaligned> iterator(final long first, final long count) {
- Collections.sort(misaligned, comparator);
- return misaligned.subList((int) first, (int) first + (int) count).iterator();
- }
-
- @Override
- public long size() {
- return misaligned.size();
- }
-
- @Override
- public IModel<Misaligned> model(final Misaligned object) {
- return new CompoundPropertyModel<>(object);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
index 86aefed..475f6e9 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/widgets/ReconciliationWidget.java
@@ -414,7 +414,7 @@ public class ReconciliationWidget extends BaseWidget {
rowModel.getObject().getType()
+ " " + rowModel.getObject().getKey()
+ " " + rowModel.getObject().getName()));
- modal.setContent(new ReconciliationDetailsModalPanel(
+ modal.setContent(new ReconDetailsModalPanel(
modal,
resource,
misaligned,
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
index d52a2f7..184de10 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AnyObjectWizardBuilder.java
@@ -68,22 +68,22 @@ public class AnyObjectWizardBuilder extends AnyWizardBuilder<AnyObjectTO> implem
protected Serializable onApplyInternal(final AnyWrapper<AnyObjectTO> modelObject) {
final AnyObjectTO inner = modelObject.getInnerObject();
- ProvisioningResult<AnyObjectTO> actual;
+ ProvisioningResult<AnyObjectTO> result;
if (inner.getKey() == null) {
- actual = anyObjectRestClient.create(inner);
+ result = anyObjectRestClient.create(inner);
} else {
AnyObjectPatch patch = AnyOperations.diff(inner, getOriginalItem().getInnerObject(), false);
// update just if it is changed
if (patch.isEmpty()) {
- actual = new ProvisioningResult<>();
- actual.setEntity(inner);
+ result = new ProvisioningResult<>();
+ result.setEntity(inner);
} else {
- actual = anyObjectRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
+ result = anyObjectRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
}
}
- return actual;
+ return result;
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
index 4ebd393..ada36d3 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
@@ -35,6 +35,7 @@ import org.apache.syncope.common.lib.EntityTOUtils;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Fragment;
@@ -48,7 +49,12 @@ public class ConnObjectPanel extends Panel {
private static final long serialVersionUID = -6469290753080058487L;
- public ConnObjectPanel(final String id, final Pair<ConnObjectTO, ConnObjectTO> connObjectTOs, final boolean view) {
+ public ConnObjectPanel(
+ final String id,
+ final Pair<IModel<?>, IModel<?>> titles,
+ final Pair<ConnObjectTO, ConnObjectTO> connObjectTOs,
+ final boolean hideLeft) {
+
super(id);
final IModel<List<String>> formProps = new LoadableDetachableModel<List<String>>() {
@@ -60,29 +66,28 @@ public class ConnObjectPanel extends Panel {
List<AttrTO> right = new ArrayList<>(connObjectTOs == null || connObjectTOs.getRight() == null
? Collections.<AttrTO>emptyList()
: connObjectTOs.getRight().getAttrs());
-
List<AttrTO> left = new ArrayList<>(connObjectTOs == null || connObjectTOs.getLeft() == null
? Collections.<AttrTO>emptyList()
: connObjectTOs.getLeft().getAttrs());
- final List<String> schemas = ListUtils.sum(
+ List<String> schemas = ListUtils.sum(
right.stream().map(AttrTO::getSchema).collect(Collectors.toList()),
left.stream().map(AttrTO::getSchema).collect(Collectors.toList()));
-
Collections.sort(schemas);
-
return schemas;
}
};
- final Map<String, AttrTO> beforeProfile = connObjectTOs == null || connObjectTOs.getLeft() == null
+ add(new Label("leftTitle", titles.getLeft()).setOutputMarkupPlaceholderTag(true).setVisible(!hideLeft));
+ add(new Label("rightTitle", titles.getRight()));
+
+ final Map<String, AttrTO> leftProfile = connObjectTOs == null || connObjectTOs.getLeft() == null
? null
: EntityTOUtils.buildAttrMap(connObjectTOs.getLeft().getAttrs());
- final Map<String, AttrTO> afterProfile = connObjectTOs == null || connObjectTOs.getRight() == null
+ final Map<String, AttrTO> rightProfile = connObjectTOs == null || connObjectTOs.getRight() == null
? null
: EntityTOUtils.buildAttrMap(connObjectTOs.getRight().getAttrs());
-
- final ListView<String> propView = new ListView<String>("propView", formProps) {
+ ListView<String> propView = new ListView<String>("propView", formProps) {
private static final long serialVersionUID = 3109256773218160485L;
@@ -91,29 +96,25 @@ public class ConnObjectPanel extends Panel {
final String prop = item.getModelObject();
final Fragment valueFragment;
- final AttrTO before = beforeProfile == null ? null : beforeProfile.get(prop);
- final AttrTO after = afterProfile == null ? null : afterProfile.get(prop);
+ final AttrTO left = leftProfile == null ? null : leftProfile.get(prop);
+ final AttrTO right = rightProfile == null ? null : rightProfile.get(prop);
valueFragment = new Fragment("value", "doubleValue", ConnObjectPanel.this);
-
- Panel oldAttribute = getValuePanel("oldAttribute", prop, before);
- oldAttribute.setOutputMarkupPlaceholderTag(true);
- oldAttribute.setVisible(!view);
- valueFragment.add(oldAttribute);
-
- valueFragment.add(getValuePanel("newAttribute", prop, after));
-
- if (before == null || after == null
- || (CollectionUtils.isNotEmpty(after.getValues())
- && CollectionUtils.isEmpty(before.getValues()))
- || (CollectionUtils.isEmpty(after.getValues())
- && CollectionUtils.isNotEmpty(before.getValues()))
- || (CollectionUtils.isNotEmpty(after.getValues())
- && CollectionUtils.isNotEmpty(before.getValues())
- && after.getValues().size() != before.getValues().size())
- || (CollectionUtils.isNotEmpty(after.getValues())
- && CollectionUtils.isNotEmpty(before.getValues())
- && !after.getValues().equals(before.getValues()))) {
+ valueFragment.add(getValuePanel("leftAttribute", prop, left).
+ setOutputMarkupPlaceholderTag(true).setVisible(!hideLeft));
+ valueFragment.add(getValuePanel("rightAttribute", prop, right));
+
+ if (left == null || right == null
+ || (CollectionUtils.isNotEmpty(right.getValues())
+ && CollectionUtils.isEmpty(left.getValues()))
+ || (CollectionUtils.isEmpty(right.getValues())
+ && CollectionUtils.isNotEmpty(left.getValues()))
+ || (CollectionUtils.isNotEmpty(right.getValues())
+ && CollectionUtils.isNotEmpty(left.getValues())
+ && right.getValues().size() != left.getValues().size())
+ || (CollectionUtils.isNotEmpty(right.getValues())
+ && CollectionUtils.isNotEmpty(left.getValues())
+ && !right.getValues().equals(left.getValues()))) {
valueFragment.add(new Behavior() {
@@ -158,5 +159,4 @@ public class ConnObjectPanel extends Panel {
field.setEnabled(false);
return field;
}
-
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
index 4282fae..2e0d47f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/GroupWizardBuilder.java
@@ -87,9 +87,9 @@ public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> implements Gro
? GroupWrapper.class.cast(modelObject).fillDynamicConditions()
: modelObject.getInnerObject();
- ProvisioningResult<GroupTO> actual;
+ ProvisioningResult<GroupTO> result;
if (inner.getKey() == null) {
- actual = groupRestClient.create(inner);
+ result = groupRestClient.create(inner);
} else {
GroupPatch patch = AnyOperations.diff(inner, getOriginalItem().getInnerObject(), false);
GroupTO originaObj = getOriginalItem().getInnerObject();
@@ -107,14 +107,14 @@ public class GroupWizardBuilder extends AnyWizardBuilder<GroupTO> implements Gro
// update just if it is changed
if (patch.isEmpty() && !othersNotEqualsOrBlanks) {
- actual = new ProvisioningResult<>();
- actual.setEntity(inner);
+ result = new ProvisioningResult<>();
+ result.setEntity(inner);
} else {
- actual = groupRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
+ result = groupRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
}
}
- return actual;
+ return result;
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
index cac7b38..93a338a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
@@ -19,12 +19,14 @@
package org.apache.syncope.client.console.wizards.any;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
-import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
+import org.apache.commons.lang3.tuple.Triple;
import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.commons.status.ConnObjectWrapper;
import org.apache.syncope.client.console.commons.status.Status;
@@ -32,18 +34,21 @@ import org.apache.syncope.client.console.commons.status.StatusBean;
import org.apache.syncope.client.console.commons.status.StatusUtils;
import org.apache.syncope.client.console.panels.ListViewPanel;
import org.apache.syncope.client.console.panels.MultilevelPanel;
+import org.apache.syncope.client.console.panels.PropagationErrorPanel;
import org.apache.syncope.client.console.panels.RemoteObjectPanel;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.to.ConnObjectTO;
import org.apache.syncope.common.lib.to.GroupTO;
import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.StandardEntitlement;
import org.apache.wicket.Component;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.ResourceModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -55,8 +60,6 @@ public class StatusPanel extends Panel {
private Map<String, StatusBean> initialStatusBeanMap;
- private final StatusUtils statusUtils;
-
private ListViewPanel<?> listViewPanel;
public <T extends AnyTO> StatusPanel(
@@ -66,9 +69,12 @@ public class StatusPanel extends Panel {
final PageReference pageRef) {
super(id);
- statusUtils = new StatusUtils();
- init(any, model, statusUtils.getConnectorObjects(any).stream().
- map(input -> new ImmutablePair<ConnObjectTO, ConnObjectWrapper>(null, input)).
+ init(any, model, StatusUtils.getReconStatuses(
+ AnyTypeKind.fromTOClass(any.getClass()), any.getKey(), any.getResources()).stream().
+ map(status -> Triple.<ConnObjectTO, ConnObjectWrapper, String>of(
+ status.getOnSyncope(),
+ new ConnObjectWrapper(any, status.getResource(), status.getOnResource()),
+ null)).
collect(Collectors.toList()), pageRef, false);
}
@@ -76,17 +82,17 @@ public class StatusPanel extends Panel {
final String id,
final T any,
final IModel<List<StatusBean>> model,
- final List<Pair<ConnObjectTO, ConnObjectWrapper>> connObjects,
+ final List<Triple<ConnObjectTO, ConnObjectWrapper, String>> connObjects,
final PageReference pageRef) {
+
super(id);
- statusUtils = new StatusUtils();
init(any, model, connObjects, pageRef, true);
}
private void init(
final AnyTO any,
final IModel<List<StatusBean>> model,
- final List<Pair<ConnObjectTO, ConnObjectWrapper>> connObjects,
+ final List<Triple<ConnObjectTO, ConnObjectWrapper, String>> connObjects,
final PageReference pageRef,
final boolean enableConnObjectLink) {
@@ -115,15 +121,20 @@ public class StatusPanel extends Panel {
statusBeans.add(syncope);
initialStatusBeanMap.put(syncope.getResource(), syncope);
- connObjects.forEach(pair -> {
- ConnObjectWrapper entry = pair.getRight();
- final StatusBean statusBean = statusUtils.getStatusBean(entry.getAny(),
- entry.getResourceName(),
- entry.getConnObjectTO(),
+ Map<String, String> failureReasons = new HashMap<>();
+ connObjects.forEach(triple -> {
+ ConnObjectWrapper connObjectWrapper = triple.getMiddle();
+ StatusBean statusBean = StatusUtils.getStatusBean(connObjectWrapper.getAny(),
+ connObjectWrapper.getResource(),
+ connObjectWrapper.getConnObjectTO(),
any instanceof GroupTO);
- initialStatusBeanMap.put(entry.getResourceName(), statusBean);
+ initialStatusBeanMap.put(connObjectWrapper.getResource(), statusBean);
statusBeans.add(statusBean);
+
+ if (StringUtils.isNotBlank(triple.getRight())) {
+ failureReasons.put(connObjectWrapper.getResource(), triple.getRight());
+ }
});
final MultilevelPanel mlp = new MultilevelPanel("resources");
@@ -142,22 +153,20 @@ public class StatusPanel extends Panel {
}
}
};
-
builder.setModel(model);
builder.setItems(statusBeans);
builder.includes("resource", "connObjectLink", "status");
builder.withChecks(ListViewPanel.CheckAvailability.NONE);
builder.setReuseItem(false);
- final ActionLink<StatusBean> connObjectLink = new ActionLink<StatusBean>() {
+ ActionLink<StatusBean> connObjectLink = new ActionLink<StatusBean>() {
private static final long serialVersionUID = -3722207913631435501L;
@Override
protected boolean statusCondition(final StatusBean bean) {
- final Pair<ConnObjectTO, ConnObjectTO> pair =
- getConnObjectTO(bean.getKey(), bean.getResource(), connObjects);
-
+ Pair<ConnObjectTO, ConnObjectTO> pair =
+ getConnObjectTOs(bean.getKey(), bean.getResource(), connObjects);
return pair != null && pair.getRight() != null;
}
@@ -166,13 +175,26 @@ public class StatusPanel extends Panel {
mlp.next(bean.getResource(), new RemoteAnyPanel(bean, connObjects), target);
}
};
-
if (!enableConnObjectLink) {
connObjectLink.disable();
}
-
builder.addAction(connObjectLink, ActionLink.ActionType.VIEW, StandardEntitlement.RESOURCE_GET_CONNOBJECT);
+ builder.addAction(new ActionLink<StatusBean>() {
+
+ private static final long serialVersionUID = -3722207913631435501L;
+
+ @Override
+ protected boolean statusCondition(final StatusBean bean) {
+ return failureReasons.containsKey(bean.getResource());
+ }
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+ mlp.next(bean.getResource(), new PropagationErrorPanel(failureReasons.get(bean.getResource())), target);
+ }
+ }, ActionLink.ActionType.PROPAGATION_TASKS, StringUtils.EMPTY);
+
listViewPanel = ListViewPanel.class.cast(builder.build(MultilevelPanel.FIRST_LEVEL_ID));
mlp.setFirstLevel(listViewPanel);
}
@@ -185,39 +207,44 @@ public class StatusPanel extends Panel {
return initialStatusBeanMap;
}
- protected Pair<ConnObjectTO, ConnObjectTO> getConnObjectTO(
- final String anyKey, final String resourceName,
- final List<Pair<ConnObjectTO, ConnObjectWrapper>> objects) {
+ protected Pair<ConnObjectTO, ConnObjectTO> getConnObjectTOs(
+ final String anyKey,
+ final String resource,
+ final List<Triple<ConnObjectTO, ConnObjectWrapper, String>> objects) {
- for (Pair<ConnObjectTO, ConnObjectWrapper> object : objects) {
- if (anyKey.equals(object.getRight().getAny().getKey())
- && resourceName.equalsIgnoreCase(object.getRight().getResourceName())) {
+ for (Triple<ConnObjectTO, ConnObjectWrapper, String> object : objects) {
+ if (anyKey.equals(object.getMiddle().getAny().getKey())
+ && resource.equalsIgnoreCase(object.getMiddle().getResource())) {
- return Pair.of(object.getLeft(), object.getRight().getConnObjectTO());
+ return Pair.of(object.getLeft(), object.getMiddle().getConnObjectTO());
}
}
return null;
}
- public class RemoteAnyPanel extends RemoteObjectPanel {
+ class RemoteAnyPanel extends RemoteObjectPanel {
private static final long serialVersionUID = 4303365227411467563L;
private final StatusBean bean;
- private final List<Pair<ConnObjectTO, ConnObjectWrapper>> connObjects;
+ private final List<Triple<ConnObjectTO, ConnObjectWrapper, String>> connObjects;
- public RemoteAnyPanel(final StatusBean bean, final List<Pair<ConnObjectTO, ConnObjectWrapper>> connObjects) {
+ RemoteAnyPanel(final StatusBean bean, final List<Triple<ConnObjectTO, ConnObjectWrapper, String>> connObjects) {
this.bean = bean;
this.connObjects = connObjects;
- add(new ConnObjectPanel(REMOTE_OBJECT_PANEL_ID, getConnObjectTO(), false));
+ add(new ConnObjectPanel(
+ REMOTE_OBJECT_PANEL_ID,
+ Pair.<IModel<?>, IModel<?>>of(new ResourceModel("before"), new ResourceModel("after")),
+ getConnObjectTOs(),
+ false));
}
@Override
- protected final Pair<ConnObjectTO, ConnObjectTO> getConnObjectTO() {
- return StatusPanel.this.getConnObjectTO(bean.getKey(), bean.getResource(), connObjects);
+ protected final Pair<ConnObjectTO, ConnObjectTO> getConnObjectTOs() {
+ return StatusPanel.this.getConnObjectTOs(bean.getKey(), bean.getResource(), connObjects);
}
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
index 4db79bf..2a932af 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/UserWizardBuilder.java
@@ -76,9 +76,9 @@ public class UserWizardBuilder extends AnyWizardBuilder<UserTO> implements UserF
protected Serializable onApplyInternal(final AnyWrapper<UserTO> modelObject) {
UserTO inner = modelObject.getInnerObject();
- ProvisioningResult<UserTO> actual;
+ ProvisioningResult<UserTO> result;
if (inner.getKey() == null) {
- actual = userRestClient.create(inner, modelObject instanceof UserWrapper
+ result = userRestClient.create(inner, modelObject instanceof UserWrapper
? UserWrapper.class.cast(modelObject).isStorePasswordInSyncope()
: StringUtils.isNotBlank(inner.getPassword()));
} else {
@@ -92,14 +92,14 @@ public class UserWizardBuilder extends AnyWizardBuilder<UserTO> implements UserF
// update just if it is changed
if (patch.isEmpty()) {
- actual = new ProvisioningResult<>();
- actual.setEntity(inner);
+ result = new ProvisioningResult<>();
+ result.setEntity(inner);
} else {
- actual = userRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
+ result = userRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
}
}
- return actual;
+ return result;
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
index 1d093bc..41b2c46 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication.properties
@@ -73,3 +73,5 @@ implementations=Implementations
timeout=Operation is taking to long: it will be executed in background. Please check later for the result (errors won't be triggered).
security=Security
+before=Before
+after=After
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
index a4514ff..bb0b3af 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_it.properties
@@ -73,3 +73,5 @@ implementations=Implementazioni
timeout=L'operazione sta durando troppo: sar\u00e0 eseguita in background. Verifica il risultato pi\u00f9 tardi (gli errori non saranno notificati).
security=Sicurezza
+before=Prima
+after=Dopo
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties
index c512754..dda9afc 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ja.properties
@@ -71,3 +71,5 @@ confirmGlobalLogout=\u30b0\u30ed\u30fc\u30d0\u30eb\u30ed\u30b0\u30a2\u30a6\u30c8
implementations=\u5c0e\u5165
timeout=\u64cd\u4f5c\u306b\u9577\u6642\u9593\u304b\u304b\u3063\u3066\u3044\u307e\u3059\: \u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u3067\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002 \u7d50\u679c\u3092\u5f8c\u3067\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044 (\u30a8\u30e9\u30fc\u306f\u5f15\u304d\u8d77\u3053\u3057\u307e\u305b\u3093)\u3002
security=Security
+before=Before
+after=After
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
index 3d40751..ceea675 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_pt_BR.properties
@@ -73,3 +73,5 @@ implementations=Implementa\u00e7\u00f5es
timeout=Operation is taking to long: it will be executed in background. Please check later for the result (errors won't be triggered).
security=Security
+before=Before
+after=After
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
index 0e0ecbf..c603b39 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/SyncopeConsoleApplication_ru.properties
@@ -72,3 +72,5 @@ implementations=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438
timeout=Operation is taking to long: it will be executed in background. Please check later for the result (errors won't be triggered).
security=Security
+before=Before
+after=After
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkActionModal.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkActionModal.html b/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkActionModal.html
index a9cd88e..dda032e 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkActionModal.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkActionModal.html
@@ -17,10 +17,7 @@ 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:extend>
- <span wicket:id="content"/>
- </wicket:extend>
- </body>
+ <wicket:extend>
+ <span wicket:id="content"/>
+ </wicket:extend>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkContent.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkContent.html b/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkContent.html
index 4adf9d7..5cebcb5 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkContent.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/bulk/BulkContent.html
@@ -17,21 +17,18 @@ 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:head>
- <link rel="stylesheet" type="text/css" href="css/bulk.css" media="all"/>
- </wicket:head>
- <wicket:panel>
- <div wicket:id="container" id="selectedObjects" class="table-responsive dataTable">
- <table class="ui-widget ui-widget-content table-hover pageRowElement" wicket:id="selectedObjects">[DataTable]</table>
+ <wicket:head>
+ <link rel="stylesheet" type="text/css" href="css/bulk.css" media="all"/>
+ </wicket:head>
+ <wicket:panel>
+ <div wicket:id="container" id="selectedObjects" class="table-responsive dataTable">
+ <table class="ui-widget ui-widget-content table-hover pageRowElement" wicket:id="selectedObjects">[DataTable]</table>
- <div class="circular-actions">
- <div id="inline-actions">
- <span wicket:id="actions">[Actions]</span>
- </div>
+ <div class="circular-actions">
+ <div id="inline-actions">
+ <span wicket:id="actions">[Actions]</span>
</div>
</div>
- </wicket:panel>
- </body>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationTasks.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationTasks.html b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationTasks.html
index ac755e8..f74731a 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationTasks.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationTasks.html
@@ -17,7 +17,6 @@ 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>
<wicket:panel>
<span wicket:id="tasks">[TASKS]</span>
</wicket:panel>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Abouts.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Abouts.html b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Abouts.html
index c1cbc27..4b5ef37 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Abouts.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Abouts.html
@@ -17,12 +17,9 @@ 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>
- <div wicket:id="about" class="form-group">
- <span wicket:id="abouts">[abouts]</span>
- </div>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <div wicket:id="about" class="form-group">
+ <span wicket:id="abouts">[abouts]</span>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html
index d9844ab..1cbab58 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Details.html
@@ -17,24 +17,21 @@ 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>
- <div class="form-group">
- <span wicket:id="isActive">[isActive]</span>
- </div>
- <div class="form-group">
- <span wicket:id="sender">[sender]</span>
- </div>
- <div class="form-group">
- <span wicket:id="subject">[subject]</span>
- </div>
- <div class="form-group">
- <span wicket:id="template">[template]</span>
- </div>
- <div class="form-group">
- <span wicket:id="traceLevel">[traceLevel]</span>
- </div>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <div class="form-group">
+ <span wicket:id="isActive">[isActive]</span>
+ </div>
+ <div class="form-group">
+ <span wicket:id="sender">[sender]</span>
+ </div>
+ <div class="form-group">
+ <span wicket:id="subject">[subject]</span>
+ </div>
+ <div class="form-group">
+ <span wicket:id="template">[template]</span>
+ </div>
+ <div class="form-group">
+ <span wicket:id="traceLevel">[traceLevel]</span>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.html b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.html
index c697099..0001cfd 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Events.html
@@ -17,11 +17,8 @@ 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 wicket:id="eventSelection"/>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <span wicket:id="eventSelection"/>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Recipients.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Recipients.html b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Recipients.html
index c79089d..11f9af9 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Recipients.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/notifications/NotificationWizardBuilder$Recipients.html
@@ -43,4 +43,3 @@ under the License.
</div>
</wicket:panel>
</html>
-
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/panels/MultilevelPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/MultilevelPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/MultilevelPanel.html
index 6c75dfb..f91de30 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/MultilevelPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/MultilevelPanel.html
@@ -17,7 +17,6 @@ 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>
<wicket:panel>
<div wicket:id="firstLevelContainer">
<span wicket:id="first">[FIRST]</span>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/panels/PropagationErrorPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/PropagationErrorPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PropagationErrorPanel.html
new file mode 100644
index 0000000..777986d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/PropagationErrorPanel.html
@@ -0,0 +1,24 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+ <wicket:panel>
+ <pre wicket:id="failureReason">
+ </pre>
+ </wicket:panel>
+</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/panels/RemoteObjectPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/RemoteObjectPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/RemoteObjectPanel.html
index d0e5167..46fb7fd 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/RemoteObjectPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/RemoteObjectPanel.html
@@ -17,8 +17,7 @@ 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>
<wicket:panel>
- <span wicket:id="remoteObject">[REMOTE OBJCET]</span>
+ <span wicket:id="remoteObject">[REMOTE OBJECT]</span>
</wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/SearchClausePanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/SearchClausePanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/SearchClausePanel.html
index 683fef7..0929615 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/SearchClausePanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/SearchClausePanel.html
@@ -17,28 +17,25 @@ 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:extend>
- <wicket:enclosure child="field-label">
- <label wicket:id="field-label">[LABEL]</label><span wicket:id="required"/>
- <span wicket:id="externalAction"/>
- </wicket:enclosure>
- <span wicket:id="container" class="clause">
- <div wicket:id="operatorContainer" class="field operator"><span wicket:id="operator"/></div>
- <span wicket:id="type" class="field type"/>
- <span wicket:id="property" class="field property"/>
- <span wicket:id="comparator" class="field comparator"/>
- <span wicket:id="value" class="field value"/>
- </span>
+ <wicket:extend>
+ <wicket:enclosure child="field-label">
+ <label wicket:id="field-label">[LABEL]</label><span wicket:id="required"/>
+ <span wicket:id="externalAction"/>
+ </wicket:enclosure>
+ <span wicket:id="container" class="clause">
+ <div wicket:id="operatorContainer" class="field operator"><span wicket:id="operator"/></div>
+ <span wicket:id="type" class="field type"/>
+ <span wicket:id="property" class="field property"/>
+ <span wicket:id="comparator" class="field comparator"/>
+ <span wicket:id="value" class="field value"/>
+ </span>
- <wicket:fragment wicket:id="searchButtonFragment">
- <a href="#" wicket:id="search"><li class="glyphicon glyphicon-search"></li></a>
- </wicket:fragment>
+ <wicket:fragment wicket:id="searchButtonFragment">
+ <a href="#" wicket:id="search"><li class="glyphicon glyphicon-search"></li></a>
+ </wicket:fragment>
- <wicket:fragment wicket:id="operatorFragment">
- <span wicket:id="operator"/>
- </wicket:fragment>
- </wicket:extend>
- </body>
+ <wicket:fragment wicket:id="operatorFragment">
+ <span wicket:id="operator"/>
+ </wicket:fragment>
+ </wicket:extend>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/reports/ReportWizardBuilder$Schedule.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/reports/ReportWizardBuilder$Schedule.html b/client/console/src/main/resources/org/apache/syncope/client/console/reports/ReportWizardBuilder$Schedule.html
index 99e853e..dad9871 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/reports/ReportWizardBuilder$Schedule.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/reports/ReportWizardBuilder$Schedule.html
@@ -17,10 +17,7 @@ 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 wicket:id="schedule"/>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <span wicket:id="schedule"/>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/status/AnyStatusModal.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/status/AnyStatusModal.html b/client/console/src/main/resources/org/apache/syncope/client/console/status/AnyStatusModal.html
index 7f18503..303ef4a 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/status/AnyStatusModal.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/status/AnyStatusModal.html
@@ -16,8 +16,7 @@ KIND, either express or implied. See the License for the
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>
+<html xmlns="http://www.w3.org/1999/xhtml" >
<wicket:extend>
</wicket:extend>
</html>
[5/8] syncope git commit: [SYNCOPE-1299] Console features implemented
Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RealmsITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RealmsITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RealmsITCase.java
index a5ba6a0..44518de 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RealmsITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/RealmsITCase.java
@@ -181,16 +181,17 @@ public class RealmsITCase extends AbstractConsoleITCase {
TESTER.clickLink(component.getPageRelativePath() + ":actions:actionRepeater:0:action:action");
TESTER.assertLabel("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:0:value:oldAttribute:field-label", "__NAME__");
+ + "secondLevelContainer:second:remoteObject:propView:0:value:leftAttribute:field-label", "__NAME__");
TESTER.assertModelValue("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:0:value:oldAttribute:textField", null);
+ + "secondLevelContainer:second:remoteObject:propView:0:value:leftAttribute:textField", null);
TESTER.assertLabel("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:0:value:newAttribute:field-label", "__NAME__");
+ + "secondLevelContainer:second:remoteObject:propView:0:value:rightAttribute:field-label", "__NAME__");
TESTER.assertModelValue("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:0:value:newAttribute:textField", "ou=even,o=isp");
+ + "secondLevelContainer:second:remoteObject:propView:0:value:rightAttribute:textField",
+ "ou=even,o=isp");
TESTER.clickLink("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
+ "secondLevelContainer:back");
@@ -226,16 +227,16 @@ public class RealmsITCase extends AbstractConsoleITCase {
TESTER.clickLink(component.getPageRelativePath() + ":actions:actionRepeater:0:action:action");
TESTER.assertLabel("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:4:value:oldAttribute:field-label", "ou");
+ + "secondLevelContainer:second:remoteObject:propView:4:value:leftAttribute:field-label", "ou");
TESTER.assertModelValue("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:4:value:oldAttribute:textField", "even");
+ + "secondLevelContainer:second:remoteObject:propView:4:value:leftAttribute:textField", "even");
TESTER.assertLabel("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:4:value:newAttribute:field-label", "ou");
+ + "secondLevelContainer:second:remoteObject:propView:4:value:rightAttribute:field-label", "ou");
TESTER.assertModelValue("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
- + "secondLevelContainer:second:remoteObject:propView:4:value:newAttribute:textField", null);
+ + "secondLevelContainer:second:remoteObject:propView:4:value:rightAttribute:textField", null);
TESTER.clickLink("body:content:body:outerObjectsRepeater:0:outer:form:content:customResultBody:"
+ "secondLevelContainer:back");
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
index ff417f6..7a99aaf 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/TopologyITCase.java
@@ -84,7 +84,7 @@ public class TopologyITCase extends AbstractConsoleITCase {
Component component = findComponentByProp("key", "body:resources", "ws-target-resource-1");
assertNotNull(component);
TESTER.executeAjaxEvent(component.getPageRelativePath() + ":res", Constants.ON_CLICK);
- TESTER.clickLink("body:toggle:container:content:togglePanelContainer:container:actions:status");
+ TESTER.clickLink("body:toggle:container:content:togglePanelContainer:container:actions:reconciliation");
TESTER.assertComponent("body:toggle:outerObjectsRepeater:1:outer", Modal.class);
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReconciliationITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReconciliationITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReconciliationITCase.java
index 703799f..c8fd044 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReconciliationITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ReconciliationITCase.java
@@ -30,7 +30,7 @@ import org.apache.syncope.common.lib.to.AnyObjectTO;
import org.apache.syncope.common.lib.to.AttrTO;
import org.apache.syncope.common.lib.to.PullTaskTO;
import org.apache.syncope.common.lib.to.PushTaskTO;
-import org.apache.syncope.common.lib.to.ReconciliationStatus;
+import org.apache.syncope.common.lib.to.ReconStatus;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.UnmatchingRule;
import org.apache.syncope.fit.AbstractITCase;
@@ -60,7 +60,7 @@ public class ReconciliationITCase extends AbstractITCase {
"SELECT id FROM testPRINTER WHERE printername=?", printer.getName()).size());
// 3. verify reconciliation status
- ReconciliationStatus status =
+ ReconStatus status =
reconciliationService.status(AnyTypeKind.ANY_OBJECT, printer.getName(), "resource-db-scripted");
assertNotNull(status);
assertNotNull(status.getOnSyncope());
@@ -110,7 +110,7 @@ public class ReconciliationITCase extends AbstractITCase {
printer.getKey(), printer.getName(), "Nowhere", false, new Date());
// 3. verify reconciliation status
- ReconciliationStatus status =
+ ReconStatus status =
reconciliationService.status(AnyTypeKind.ANY_OBJECT, printer.getName(), "resource-db-scripted");
assertNotNull(status);
assertNotNull(status.getOnSyncope());
[6/8] syncope git commit: [SYNCOPE-1299] Console features implemented
Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/status/ReconTaskPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/status/ReconTaskPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/status/ReconTaskPanel.html
new file mode 100644
index 0000000..c0c4891
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/status/ReconTaskPanel.html
@@ -0,0 +1,37 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+ <wicket:panel>
+ <form wicket:id="form">
+ <div class="form-group form-palette">
+ <span wicket:id="actions">[actions]</span>
+ </div>
+ <div class="form-group"><span wicket:id="matchingRule">[matchingRule]</span></div>
+ <div class="form-group"><span wicket:id="unmatchingRule">[unmatchingRule]</span></div>
+ <div class="form-group"><span wicket:id="performCreate">[performCreate]</span></div>
+ <div class="form-group"><span wicket:id="performUpdate">[performUpdate]</span></div>
+ <div class="form-group"><span wicket:id="performDelete">[performDelete]</span></div>
+ <div class="form-group"><span wicket:id="syncStatus">[syncStatus]</span></div>
+
+ <div style="float: right;">
+ <a href="#" wicket:id="reconcile" class="btn btn-primary btn-circle btn-lg"><i class="fa fa-recycle" alt="reconcile" title="Reconcile"></i></a>
+ </div>
+ </form>
+ </wicket:panel>
+</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
index 892ec31..839fce0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
@@ -66,8 +66,8 @@ under the License.
<wicket:enclosure child="push">
<li><a href="#" wicket:id="push"><i class="fa fa-chevron-circle-right"></i><wicket:message key="resource.menu.push.list"/></a></li>
</wicket:enclosure>
- <wicket:enclosure child="status">
- <li><a href="#" wicket:id="status"><i class="fa fa-list-ul"></i><wicket:message key="resource.menu.provisioning.status"/></a></li>
+ <wicket:enclosure child="reconciliation">
+ <li><a href="#" wicket:id="reconciliation"><i class="fa fa-recycle"></i><wicket:message key="resource.menu.reconciliation"/></a></li>
</wicket:enclosure>
<wicket:enclosure child="history">
<li><a href="#" wicket:id="history"><i class="fa fa-history"></i><wicket:message key="resource.menu.history"/></a></li>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
index 60e4c18..a20f7cb 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
@@ -37,8 +37,8 @@ task.pull.list=Pull tasks {0}
task.push.list=Push tasks {0}
resource.explore.list=Explore ${key}
connectors.reload=Reload all connectors
-resource.provisioning.status=Provisioning Status {0}
-resource.menu.provisioning.status=Provisioning status
+resource.reconciliation=Reconciliation {0}
+resource.menu.reconciliation=Reconciliation
resource.menu.push.list=Push tasks
resource.menu.pull.list=Pull tasks
resource.menu.propagation.list=Propagation tasks
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
index dd16d75..7a67919 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
@@ -37,8 +37,8 @@ task.pull.list=Pull task {0}
task.push.list=Push task {0}
resource.explore.list=Esplora ${key}
connectors.reload=Ricarica tutti i connettori
-resource.provisioning.status=Stato provisioning {0}
-resource.menu.provisioning.status=Stato provisioning
+resource.reconciliation=Riconciliazione {0}
+resource.menu.reconciliation=Riconciliazione
resource.menu.push.list=Push tasks
resource.menu.pull.list=Pull tasks
resource.menu.propagation.list=Task di propagazione
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ja.properties
index aef451c..9bff0a5 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ja.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ja.properties
@@ -37,8 +37,8 @@ task.pull.list=\u30d7\u30eb\u30bf\u30b9\u30af {0}
task.push.list=\u30d7\u30c3\u30b7\u30e5\u30bf\u30b9\u30af {0}
resource.explore.list=${key} \u3092\u63a2\u7d22
connectors.reload=\u3059\u3079\u3066\u306e\u30b3\u30cd\u30af\u30bf\u30fc\u3092\u518d\u8aad\u307f\u8fbc\u307f
-resource.provisioning.status=\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u30b9\u30c6\u30fc\u30bf\u30b9 {0}
-resource.menu.provisioning.status=\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u30b9\u30c6\u30fc\u30bf\u30b9
+resource.reconciliation=Reconciliation {0}
+resource.menu.reconciliation=Reconciliation
resource.menu.push.list=\u30d7\u30c3\u30b7\u30e5\u30bf\u30b9\u30af
resource.menu.pull.list=\u30d7\u30eb\u30bf\u30b9\u30af
resource.menu.propagation.list=\u4f1d\u64ad\u30bf\u30b9\u30af
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
index ce3fa05..47d851f 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
@@ -37,8 +37,8 @@ task.pull.list=Pull tasks {0}
task.push.list=Push tasks {0}
resource.explore.list=Explorar ${key}
connectors.reload=Reload all connectors
-resource.provisioning.status=Provisioning status {0}
-resource.menu.provisioning.status=Provisioning status
+resource.reconciliation=Reconciliation {0}
+resource.menu.reconciliation=Reconciliation
resource.menu.push.list=Push tasks
resource.menu.pull.list=Pull tasks
resource.menu.propagation.list=Propagation tasks
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties
index 07b3b09..5879fe2 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties
@@ -38,8 +38,8 @@ task.pull.list=\u0417\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u043b\u0443\u04
task.push.list=\u0417\u0430\u0434\u0430\u0447\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 {0}
resource.explore.list=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 ${key}
connectors.reload=\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0441\u0435 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b
-resource.provisioning.status=\u0421\u0442\u0430\u0442\u0443\u0441 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f {0}
-resource.menu.provisioning.status=\u0421\u0442\u0430\u0442\u0443\u0441 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f
+resource.reconciliation=Reconciliation {0}
+resource.menu.reconciliation=Reconciliation
resource.menu.push.list=\u0417\u0430\u0434\u0430\u0447\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445
resource.menu.pull.list=\u0417\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445
resource.menu.propagation.list=\u0417\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.properties
index a0fe773..1086b88 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.properties
@@ -91,7 +91,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=enable
+enable.title=manage status
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -226,6 +226,14 @@ provision_members.class=glyphicon glyphicon-fast-forward
provision_members.title=provision members
provision_members.alt=provision members icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+
+reconciliation_pull.class=fa fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
+
manage_resources.class=fa fa-sitemap
manage_resources.title=manage resources
manage_resources.alt=manage resources icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_it.properties
index e3903e1..5538d75 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_it.properties
@@ -91,7 +91,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=enable
+enable.title=manage status
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -256,3 +256,9 @@ zoom_out.alt=zoom-out icon
workflow_modeler.class=fa fa-picture-o
workflow_modeler.title=workflow modeler
workflow_modeler.alt=workflow modeler icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ja.properties
index 2ef2c19..6789a9b 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ja.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ja.properties
@@ -91,7 +91,7 @@ reset.title=\u30ea\u30bb\u30c3\u30c8
reset.alt=\u30ea\u30bb\u30c3\u30c8
enable.class=fa fa-toggle-on
-enable.title=\u6709\u52b9
+enable.title=manage status
enable.alt=\u6709\u52b9
not_found.class=fa fa-eye-slash
@@ -257,3 +257,9 @@ zoom_out.alt=\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8
workflow_modeler.class=fa fa-picture-o
workflow_modeler.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30e2\u30c7\u30e9\u2015
workflow_modeler.alt=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30e2\u30c7\u30e9\u2015
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_pt_BR.properties
index 07acbc3..c996263 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_pt_BR.properties
@@ -91,7 +91,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=enable
+enable.title=manage status
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -256,3 +256,9 @@ zoom_out.alt=zoom-out icon
workflow_modeler.class=fa fa-picture-o
workflow_modeler.title=workflow modeler
workflow_modeler.alt=workflow modeler icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ru.properties
index db15243..d697f25 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ru.properties
@@ -91,7 +91,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=abilita
+enable.title=gestisci stato
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -256,3 +256,9 @@ zoom_out.alt=zoom-out icon
workflow_modeler.class=fa fa-picture-o
workflow_modeler.title=workflow modeler
workflow_modeler.alt=workflow modeler icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.properties
index ad327c2..e5affd7 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.properties
@@ -75,7 +75,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=enable
+enable.title=manage status
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -198,6 +198,14 @@ provision_members.class=glyphicon glyphicon-fast-forward
provision_members.title=provision members
provision_members.alt=provision members icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+
+reconciliation_pull.class=fa fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
+
manage_resources.class=fa fa-sitemap
manage_resources.title=manage resources
manage_resources.alt=manage resources icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_it.properties
index 5cf18df..d0dbb16 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_it.properties
@@ -75,7 +75,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=abilita
+enable.title=gestisci stato
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -225,3 +225,9 @@ zoom_in.alt=zoom-in icon
zoom_out.class=fa fa-search-minus
zoom_out.title=rimpicciolisci
zoom_out.alt=zoom-out icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ja.properties
index db63cdb..599edfa 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ja.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ja.properties
@@ -75,7 +75,7 @@ reset.title=\u30ea\u30bb\u30c3\u30c8
reset.alt=\u30ea\u30bb\u30c3\u30c8
enable.class=fa fa-toggle-on
-enable.title=\u6709\u52b9
+enable.title=manage status
enable.alt=\u6709\u52b9
not_found.class=fa fa-eye-slash
@@ -225,3 +225,9 @@ zoom_in.alt=\u30ba\u30fc\u30e0\u30a4\u30f3
zoom_out.class=fa fa-search-minus
zoom_out.title=\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8
zoom_out.alt=\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_pt_BR.properties
index b8afd75..4aedf76 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_pt_BR.properties
@@ -75,7 +75,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=enable
+enable.title=manage status
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -225,3 +225,9 @@ zoom_in.alt=zoom-in icon
zoom_out.class=fa fa-search-minus
zoom_out.title=zoom-out
zoom_out.alt=zoom-out icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ru.properties
index ad327c2..e7fc2d3 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ru.properties
@@ -75,7 +75,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=enable
+enable.title=manage status
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -225,3 +225,9 @@ zoom_in.alt=zoom-in icon
zoom_out.class=fa fa-search-minus
zoom_out.title=zoom-out
zoom_out.alt=zoom-out icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.html b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.html
index 0767e59..249ac51 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.html
@@ -16,11 +16,8 @@ KIND, either express or implied. See the License for the
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>
- <wicket:child />
- </wicket:panel>
- </body>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+ <wicket:panel>
+ <wicket:child/>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.html b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.html
index 51f5a3e..3b891b0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.html
@@ -17,10 +17,7 @@ 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:extend>
- <div><img wicket:id = "previewImage"/></div>
- </wicket:extend>
- </body>
+ <wicket:extend>
+ <div><img wicket:id = "previewImage"/></div>
+ </wicket:extend>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryPDFPreviewer.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryPDFPreviewer.html b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryPDFPreviewer.html
index 6b4cee1..b9a1f19 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryPDFPreviewer.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryPDFPreviewer.html
@@ -17,21 +17,17 @@ 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:extend>
- <div wicket:id="previewContainer">
- <span wicket:id="preview"/>
- </div>
+ <wicket:extend>
+ <div wicket:id="previewContainer">
+ <span wicket:id="preview"/>
+ </div>
- <wicket:fragment wicket:id="previewFragment">
- <div><img wicket:id = "previewImage"/></div>
- </wicket:fragment>
- <wicket:fragment wicket:id="noPreviewFragment">
- <div style="padding: 8px 0px 1px 10px">
- <i class=" glyphicon glyphicon-paperclip fa-2x" title="Preview not available" alt="Default preview icon"></i>
- </div>
- </wicket:fragment>
- </wicket:extend>
- </body>
+ <wicket:fragment wicket:id="previewFragment">
+ <div><img wicket:id = "previewImage"/></div>
+ </wicket:fragment>
+ <wicket:fragment wicket:id="noPreviewFragment">
+ <div style="padding: 8px 0px 1px 10px">
+ <i class=" glyphicon glyphicon-paperclip fa-2x" title="Preview not available" alt="Default preview icon"></i>
+ </div>
+ </wicket:fragment>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/DefaultPreviewer.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/DefaultPreviewer.html b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/DefaultPreviewer.html
index c96fd4b..7471fed 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/DefaultPreviewer.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/DefaultPreviewer.html
@@ -16,13 +16,10 @@ KIND, either express or implied. See the License for the
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:extend>
- <div style="padding: 8px 0px 1px 10px">
- <i class=" glyphicon glyphicon-paperclip fa-2x" title="Preview not available" alt="Default preview icon"></i>
- </div>
- </wicket:extend>
- </body>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+ <wicket:extend>
+ <div style="padding: 8px 0px 1px 10px">
+ <i class=" glyphicon glyphicon-paperclip fa-2x" title="Preview not available" alt="Default preview icon"></i>
+ </div>
+ </wicket:extend>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.html
new file mode 100644
index 0000000..645039d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.html
@@ -0,0 +1,23 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+ <wicket:extend>
+ <div wicket:id="diff"/>
+ </wicket:extend>
+</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.html
deleted file mode 100644
index 645039d..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
- <wicket:extend>
- <div wicket:id="diff"/>
- </wicket:extend>
-</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AbstractMappingPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AbstractMappingPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AbstractMappingPanel.html
index 57339dd..6df2828 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AbstractMappingPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AbstractMappingPanel.html
@@ -17,80 +17,77 @@ 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>
- <div class="table-responsive no-padding">
- <table id="mappings"
- class="table table-hover"
- style="font-size: 1em;margin-top:2px;"
- wicket:id="mappingContainer">
- <tbody>
- <tr>
- <th>
- <wicket:message key="intAttrName"/>
- <span id="intAttrNameInfo" wicket:id="intAttrNameInfo" class="glyphicon glyphicon-info-sign"></span>
- </th>
- <th><wicket:message key="extAttrName"/></th>
- <th><i class="fa fa-repeat"></i></th>
- <th><i class="fa fa-magic"></i></th>
- <th>
- <wicket:message key="mandatoryCondition"/>
- <span id="jexlInfo" wicket:id="jexlInfo" class="glyphicon glyphicon-info-sign"></span>
- </th>
- <th><wicket:message key="connObjectKey"/></th>
- <th><label wicket:id="passwordLabel"/></th>
- <th><label wicket:id="purposeLabel"/></th>
- <th></th>
- </tr>
- <tr wicket:id="mappings">
- <td>
- <span wicket:id="intAttrName">[intAttrNames]</span>
- </td>
- <td>
- <span wicket:id="extAttrName">[extAttrName]</span>
- </td>
- <td>
- <div class="alert-widget dropdown tasks-menu">
- <span wicket:id="jexlTransformers">[JEXL Transformers]</span>
- </div>
- </td>
- <td>
- <div class="alert-widget dropdown tasks-menu">
- <span wicket:id="itemTransformers">[Mapping Item Transformers]</span>
- </div>
- </td>
- <td>
- <span wicket:id="mandatoryCondition">[mandatoryCondition]</span>
- </td>
- <td>
- <span wicket:id="connObjectKey">[connObjectKey]</span>
- </td>
- <td>
- <span wicket:id="password">[password]</span>
- </td>
- <td>
- <div wicket:id="purpose" style="margin: 10px 0px 10px 0px">
- <span wicket:id="purposeActions">[purpose]</span>
- </div>
- </td>
- <td>
- <div id="inline-actions">
- <span wicket:id="toRemove"/>
- </div>
- </td>
- </tr>
- </tbody>
+ <wicket:panel>
+ <div class="table-responsive no-padding">
+ <table id="mappings"
+ class="table table-hover"
+ style="font-size: 1em;margin-top:2px;"
+ wicket:id="mappingContainer">
+ <tbody>
+ <tr>
+ <th>
+ <wicket:message key="intAttrName"/>
+ <span id="intAttrNameInfo" wicket:id="intAttrNameInfo" class="glyphicon glyphicon-info-sign"></span>
+ </th>
+ <th><wicket:message key="extAttrName"/></th>
+ <th><i class="fa fa-repeat"></i></th>
+ <th><i class="fa fa-magic"></i></th>
+ <th>
+ <wicket:message key="mandatoryCondition"/>
+ <span id="jexlInfo" wicket:id="jexlInfo" class="glyphicon glyphicon-info-sign"></span>
+ </th>
+ <th><wicket:message key="connObjectKey"/></th>
+ <th><label wicket:id="passwordLabel"/></th>
+ <th><label wicket:id="purposeLabel"/></th>
+ <th></th>
+ </tr>
+ <tr wicket:id="mappings">
+ <td>
+ <span wicket:id="intAttrName">[intAttrNames]</span>
+ </td>
+ <td>
+ <span wicket:id="extAttrName">[extAttrName]</span>
+ </td>
+ <td>
+ <div class="alert-widget dropdown tasks-menu">
+ <span wicket:id="jexlTransformers">[JEXL Transformers]</span>
+ </div>
+ </td>
+ <td>
+ <div class="alert-widget dropdown tasks-menu">
+ <span wicket:id="itemTransformers">[Mapping Item Transformers]</span>
+ </div>
+ </td>
+ <td>
+ <span wicket:id="mandatoryCondition">[mandatoryCondition]</span>
+ </td>
+ <td>
+ <span wicket:id="connObjectKey">[connObjectKey]</span>
+ </td>
+ <td>
+ <span wicket:id="password">[password]</span>
+ </td>
+ <td>
+ <div wicket:id="purpose" style="margin: 10px 0px 10px 0px">
+ <span wicket:id="purposeActions">[purpose]</span>
+ </div>
+ </td>
+ <td>
+ <div id="inline-actions">
+ <span wicket:id="toRemove"/>
+ </div>
+ </td>
+ </tr>
+ </tbody>
- <tfoot>
- <tr>
- <td colspan="10" style="padding: 5px; text-align: right">
- <input type="submit" class="btn btn-primary" wicket:id="addMappingBtn" />
- </td>
- </tr>
- </tfoot>
- </table>
- </div>
- </wicket:panel>
- </body>
+ <tfoot>
+ <tr>
+ <td colspan="10" style="padding: 5px; text-align: right">
+ <input type="submit" class="btn btn-primary" wicket:id="addMappingBtn" />
+ </td>
+ </tr>
+ </tfoot>
+ </table>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AnnotatedBeanPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AnnotatedBeanPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AnnotatedBeanPanel.html
index 02bbeb7..c2ae2b8 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AnnotatedBeanPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AnnotatedBeanPanel.html
@@ -17,48 +17,45 @@ 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>
- <div class="information">
- <div class="infoleft">
- <div class="infolabel">
- <wicket:message key="creationDate"/>:
- </div>
- <div>
- <span wicket:id="creationDate" />
- </div>
+ <wicket:panel>
+ <div class="information">
+ <div class="infoleft">
+ <div class="infolabel">
+ <wicket:message key="creationDate"/>:
</div>
-
- <div class="inforight">
- <div class="infolabel">
- <wicket:message key="lastChangeDate"/>:
- </div>
- <div>
- <span wicket:id="lastChangeDate" />
- </div>
+ <div>
+ <span wicket:id="creationDate" />
</div>
+ </div>
- <div class="infoleft">
- <div class="infolabel">
- <wicket:message key="creator"/>:
- </div>
- <div>
- <span wicket:id="creator" />
- </div>
+ <div class="inforight">
+ <div class="infolabel">
+ <wicket:message key="lastChangeDate"/>:
+ </div>
+ <div>
+ <span wicket:id="lastChangeDate" />
</div>
+ </div>
- <div class="inforight">
- <div class="infolabel">
- <wicket:message key="lastModifier"/>:
- </div>
- <div>
- <span wicket:id="lastModifier" />
- </div>
+ <div class="infoleft">
+ <div class="infolabel">
+ <wicket:message key="creator"/>:
+ </div>
+ <div>
+ <span wicket:id="creator" />
</div>
+ </div>
- <wicket:child />
+ <div class="inforight">
+ <div class="infolabel">
+ <wicket:message key="lastModifier"/>:
+ </div>
+ <div>
+ <span wicket:id="lastModifier" />
+ </div>
</div>
- </wicket:panel>
- </body>
+
+ <wicket:child />
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html
index 18a4448..3b15ad7 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html
@@ -18,15 +18,17 @@ under the License.
-->
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
- <div class="form-group" wicket:id="propView">
- <span wicket:id="value">[ATTIRIBUTE]</span>
+ <h4 class="left page-header" wicket:id="leftTitle">[TITLE]</h4>
+ <h4 class="right page-header" wicket:id="rightTitle">[TITLE]</h4>
+ <div class="form-group" wicket:id="propView" style="clear: both;">
+ <span wicket:id="value">[ATTRIBUTE]</span>
</div>
<wicket:fragment wicket:id="doubleValue">
<div class="left attribute">
- <span wicket:id="oldAttribute">[ATTIRIBUTE]</span>
+ <span wicket:id="leftAttribute">[ATTRIBUTE]</span>
</div>
<div class="right attribute">
- <span wicket:id="newAttribute">[ATTIRIBUTE]</span>
+ <span wicket:id="rightAttribute">[ATTRIBUTE]</span>
</div>
</wicket:fragment>
</wicket:panel>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Details.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Details.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Details.html
index f9b03c8..a6773aa 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Details.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Details.html
@@ -17,18 +17,15 @@ 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>
- <div class="details">
- <div class="form-group">
- <span wicket:id="destinationRealm">[DESTINATION REALM]</span>
- </div>
- <wicket:child/>
+ <wicket:panel>
+ <div class="details">
+ <div class="form-group">
+ <span wicket:id="destinationRealm">[DESTINATION REALM]</span>
</div>
- <div class="details-footer">
- <span wicket:id="generalStatusInformation">[GENERAL STATUS INFORMATION]</span>
- </div>
- </wicket:panel>
- </body>
+ <wicket:child/>
+ </div>
+ <div class="details-footer">
+ <span wicket:id="generalStatusInformation">[GENERAL STATUS INFORMATION]</span>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DynamicMemberships.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DynamicMemberships.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DynamicMemberships.html
index 12540fa..9e6f5f9 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DynamicMemberships.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DynamicMemberships.html
@@ -17,13 +17,10 @@ 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>
- <div wicket:id="uDynMembershipCond" />
- <span wicket:id="aDynMembershipCond">
- <div wicket:id="aDynMembershipCond"/>
- </span>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <div wicket:id="uDynMembershipCond" />
+ <span wicket:id="aDynMembershipCond">
+ <div wicket:id="aDynMembershipCond"/>
+ </span>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Ownership.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Ownership.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Ownership.html
index 1e1629b..11509f6 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Ownership.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Ownership.html
@@ -17,38 +17,35 @@ 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>
- <div id="ownership">
- <span wicket:id="ownership">[OWNERSHIP]</span>
- </div>
+ <wicket:panel>
+ <div id="ownership">
+ <span wicket:id="ownership">[OWNERSHIP]</span>
+ </div>
- <div wicket:id="ownerContainer">
- <span wicket:id="search">[SEARCH]</span>
- </div>
+ <div wicket:id="ownerContainer">
+ <span wicket:id="search">[SEARCH]</span>
+ </div>
- <wicket:fragment wicket:id="userSearchFragment">
- <div class="form-group input-group">
- <span wicket:id="userOwner"/>
- <a href="#" wicket:id="userOwnerReset" class="input-group-addon"><i class="glyphicon glyphicon-remove-circle" alt="reset user owner" title="Reset"></i></a>
- </div>
- <span wicket:id="usersearch">[USER SEARCH]</span>
- <div class="searchResult">
- <span wicket:id="searchResult">[USER SEARCH RESULT]</span>
- </div>
- </wicket:fragment>
+ <wicket:fragment wicket:id="userSearchFragment">
+ <div class="form-group input-group">
+ <span wicket:id="userOwner"/>
+ <a href="#" wicket:id="userOwnerReset" class="input-group-addon"><i class="glyphicon glyphicon-remove-circle" alt="reset user owner" title="Reset"></i></a>
+ </div>
+ <span wicket:id="usersearch">[USER SEARCH]</span>
+ <div class="searchResult">
+ <span wicket:id="searchResult">[USER SEARCH RESULT]</span>
+ </div>
+ </wicket:fragment>
- <wicket:fragment wicket:id="groupSearchFragment">
- <div class="form-group input-group">
- <span wicket:id="groupOwner"/>
- <a href="#" wicket:id="groupOwnerReset" class="input-group-addon"><i class="glyphicon glyphicon-remove-circle" alt="reset group owner" title="Reset"></i></a>
- </div>
- <span wicket:id="groupsearch">[GROUP SEARCH]</span>
- <div class="searchResult">
- <span wicket:id="searchResult">[GROUP SEARCH RESULT]</span>
- </div>
- </wicket:fragment>
- </wicket:panel>
- </body>
+ <wicket:fragment wicket:id="groupSearchFragment">
+ <div class="form-group input-group">
+ <span wicket:id="groupOwner"/>
+ <a href="#" wicket:id="groupOwnerReset" class="input-group-addon"><i class="glyphicon glyphicon-remove-circle" alt="reset group owner" title="Reset"></i></a>
+ </div>
+ <span wicket:id="groupsearch">[GROUP SEARCH]</span>
+ <div class="searchResult">
+ <span wicket:id="searchResult">[GROUP SEARCH RESULT]</span>
+ </div>
+ </wicket:fragment>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html
index 83ab31d..c58eb6f 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html
@@ -17,28 +17,25 @@ 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>
- <div class="form-group">
- <span wicket:id="type" />
- </div>
+ <wicket:panel>
+ <div class="form-group">
+ <span wicket:id="type" />
+ </div>
- <div class="form-group">
- <span wicket:id="otherType"/>
- </div>
+ <div class="form-group">
+ <span wicket:id="otherType"/>
+ </div>
- <div wicket:id="searchPanelContainer">
- <span wicket:id="searchPanel"/>
- </div>
+ <div wicket:id="searchPanelContainer">
+ <span wicket:id="searchPanel"/>
+ </div>
- <wicket:fragment wicket:id="emptyFragment"/>
- <wicket:fragment wicket:id="searchFragment">
- <span wicket:id="searchPanel"/>
- <div class="searchResult">
- <span wicket:id="searchResultPanel"/>
- </div>
- </wicket:fragment>
- </wicket:panel>
- </body>
+ <wicket:fragment wicket:id="emptyFragment"/>
+ <wicket:fragment wicket:id="searchFragment">
+ <span wicket:id="searchPanel"/>
+ <div class="searchResult">
+ <span wicket:id="searchResultPanel"/>
+ </div>
+ </wicket:fragment>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships.html
index bfa6f45..992c3af 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships.html
@@ -17,25 +17,22 @@ 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>
- <div class="wizard-step-title">
- <div><span wicket:id="title">[RELATIONSHIPS]</span></div><span wicket:id="changed"></span>
- </div>
+ <wicket:panel>
+ <div class="wizard-step-title">
+ <div><span wicket:id="title">[RELATIONSHIPS]</span></div><span wicket:id="changed"></span>
+ </div>
- <div id="emptyPlaceholder"/>
- <span wicket:id="relationships"/>
+ <div id="emptyPlaceholder"/>
+ <span wicket:id="relationships"/>
- <wicket:fragment wicket:id="viewFragment">
- <div wicket:id="relationships"/>
- <div id="inline-actions" class="modal-footer">
- <span wicket:id="actions" class="circular-actions">[ACTIONS]</span>
- </div>
- </wicket:fragment>
- <wicket:fragment wicket:id="addFragment">
- <span wicket:id="specification" />
- </wicket:fragment>
- </wicket:panel>
- </body>
+ <wicket:fragment wicket:id="viewFragment">
+ <div wicket:id="relationships"/>
+ <div id="inline-actions" class="modal-footer">
+ <span wicket:id="actions" class="circular-actions">[ACTIONS]</span>
+ </div>
+ </wicket:fragment>
+ <wicket:fragment wicket:id="addFragment">
+ <span wicket:id="specification" />
+ </wicket:fragment>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Resources.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Resources.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Resources.html
index 54219d1..10f17f7 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Resources.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Resources.html
@@ -17,22 +17,19 @@ 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>
- <div class="col-xs-12">
- <div class="box">
- <div class="box-header">
- <h3 class="box-title">
- <wicket:message key="resources.palette">[ROLES]</wicket:message>
- </h3>
- <span wicket:id="changed"></span>
- </div>
- <div class="box-body">
- <span wicket:id="resources">[RESOURCES]</span>
- </div>
+ <wicket:panel>
+ <div class="col-xs-12">
+ <div class="box">
+ <div class="box-header">
+ <h3 class="box-title">
+ <wicket:message key="resources.palette">[ROLES]</wicket:message>
+ </h3>
+ <span wicket:id="changed"></span>
+ </div>
+ <div class="box-body">
+ <span wicket:id="resources">[RESOURCES]</span>
</div>
</div>
- </wicket:panel>
- </body>
+ </div>
+ </wicket:panel>
</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ResultPage.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ResultPage.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ResultPage.html
index cf43602..bca1667 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ResultPage.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ResultPage.html
@@ -17,13 +17,10 @@ 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 wicket:id="customResultBody"/>
- <div id="inline-actions" class="modal-footer circular-actions">
- <span wicket:id="action"/>
- </div>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <span wicket:id="customResultBody"/>
+ <div id="inline-actions" class="modal-footer circular-actions">
+ <span wicket:id="action"/>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Roles.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Roles.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Roles.html
index f7eded7..5243059 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Roles.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Roles.html
@@ -17,35 +17,32 @@ 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>
- <div class="col-xs-12">
- <div class="box">
- <div class="box-header">
- <h3 class="box-title">
- <wicket:message key="roles.palette">[ROLES]</wicket:message>
- </h3>
- <span wicket:id="changed"></span>
- </div>
- <div class="box-body">
- <span wicket:id="roles">[ROLES]</span>
- </div>
+ <wicket:panel>
+ <div class="col-xs-12">
+ <div class="box">
+ <div class="box-header">
+ <h3 class="box-title">
+ <wicket:message key="roles.palette">[ROLES]</wicket:message>
+ </h3>
+ <span wicket:id="changed"></span>
+ </div>
+ <div class="box-body">
+ <span wicket:id="roles">[ROLES]</span>
</div>
</div>
+ </div>
- <div class="col-xs-12">
- <div class="box">
- <div class="box-header">
- <h3 class="box-title">
- <wicket:message key="dynroles.palette">[ROLES]</wicket:message>
- </h3>
- </div>
- <div class="box-body">
- <span wicket:id="dynroles">[ROLES]</span>
- </div>
+ <div class="col-xs-12">
+ <div class="box">
+ <div class="box-header">
+ <h3 class="box-title">
+ <wicket:message key="dynroles.palette">[ROLES]</wicket:message>
+ </h3>
+ </div>
+ <div class="box-body">
+ <span wicket:id="dynroles">[ROLES]</span>
</div>
</div>
- </wicket:panel>
- </body>
+ </div>
+ </wicket:panel>
</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/StatusPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/StatusPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/StatusPanel.html
index a411f3f..de9b10d 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/StatusPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/StatusPanel.html
@@ -17,7 +17,6 @@ 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>
<wicket:panel>
<span wicket:id="resources">[RESOURCES]</span>
</wicket:panel>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserInformationPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserInformationPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserInformationPanel.html
index 0b10b23..aa47866 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserInformationPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserInformationPanel.html
@@ -17,53 +17,50 @@ 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:extend>
- <div class="infoleft">
- <div class="infolabel">
- <wicket:message key="lastLoginDate"/>:
- </div>
- <div>
- <span wicket:id="lastLoginDate"/>
- </div>
+ <wicket:extend>
+ <div class="infoleft">
+ <div class="infolabel">
+ <wicket:message key="lastLoginDate"/>:
</div>
+ <div>
+ <span wicket:id="lastLoginDate"/>
+ </div>
+ </div>
- <div class="inforight">
- <div class="infolabel">
- <wicket:message key="failedLogins"/>:
- </div>
- <div>
- <span wicket:id="failedLogins"/>
- </div>
+ <div class="inforight">
+ <div class="infolabel">
+ <wicket:message key="failedLogins"/>:
+ </div>
+ <div>
+ <span wicket:id="failedLogins"/>
</div>
+ </div>
- <div class="infoleft">
- <div class="infolabel">
- <wicket:message key="changePwdDate"/>:
- </div>
- <div>
- <span wicket:id="changePwdDate"/>
- </div>
+ <div class="infoleft">
+ <div class="infolabel">
+ <wicket:message key="changePwdDate"/>:
+ </div>
+ <div>
+ <span wicket:id="changePwdDate"/>
</div>
+ </div>
- <div class="inforight">
- <div class="infolabel">
- <wicket:message key="tokenExpireTime"/>
- </div>
- <div>
- <span wicket:id="tokenExpireTime"/>
- </div>
+ <div class="inforight">
+ <div class="infolabel">
+ <wicket:message key="tokenExpireTime"/>
</div>
+ <div>
+ <span wicket:id="tokenExpireTime"/>
+ </div>
+ </div>
- <div class="inforow">
- <div class="infolabel">
- <wicket:message key="token"/>:
- </div>
- <div class="wrap">
- <span wicket:id="token"/>
- </div>
+ <div class="inforow">
+ <div class="infolabel">
+ <wicket:message key="token"/>:
+ </div>
+ <div class="wrap">
+ <span wicket:id="token"/>
</div>
- </wicket:extend>
- </body>
+ </div>
+ </wicket:extend>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconStatus.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconStatus.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconStatus.java
new file mode 100644
index 0000000..de48cac
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconStatus.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.to;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.apache.syncope.common.lib.AbstractBaseBean;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * Reconciliation status.
+ */
+@XmlRootElement(name = "reconciliationStatus")
+@XmlType
+public class ReconStatus extends AbstractBaseBean {
+
+ private static final long serialVersionUID = -8516345256596521490L;
+
+ private String resource;
+
+ private ConnObjectTO onSyncope;
+
+ private ConnObjectTO onResource;
+
+ @Schema(accessMode = Schema.AccessMode.READ_ONLY)
+ public String getResource() {
+ return resource;
+ }
+
+ public void setResource(final String resource) {
+ this.resource = resource;
+ }
+
+ @Schema(accessMode = Schema.AccessMode.READ_ONLY)
+ public ConnObjectTO getOnSyncope() {
+ return onSyncope;
+ }
+
+ public void setOnSyncope(final ConnObjectTO onSyncope) {
+ this.onSyncope = onSyncope;
+ }
+
+ @Schema(accessMode = Schema.AccessMode.READ_ONLY)
+ public ConnObjectTO getOnResource() {
+ return onResource;
+ }
+
+ public void setOnResource(final ConnObjectTO onResource) {
+ this.onResource = onResource;
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconciliationStatus.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconciliationStatus.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconciliationStatus.java
deleted file mode 100644
index 2d7af98..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconciliationStatus.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.lib.to;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import org.apache.syncope.common.lib.AbstractBaseBean;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
-
-/**
- * Reconciliation status.
- */
-@XmlRootElement(name = "reconciliationStatus")
-@XmlType
-public class ReconciliationStatus extends AbstractBaseBean {
-
- private static final long serialVersionUID = -8516345256596521490L;
-
- private ConnObjectTO onSyncope;
-
- private ConnObjectTO onResource;
-
- @Schema(accessMode = Schema.AccessMode.READ_ONLY)
- public ConnObjectTO getOnSyncope() {
- return onSyncope;
- }
-
- public void setOnSyncope(final ConnObjectTO onSyncope) {
- this.onSyncope = onSyncope;
- }
-
- @Schema(accessMode = Schema.AccessMode.READ_ONLY)
- public ConnObjectTO getOnResource() {
- return onResource;
- }
-
- public void setOnResource(final ConnObjectTO onResource) {
- this.onResource = onResource;
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java
index 6cd6c98..ec82e1b 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java
@@ -52,4 +52,11 @@ public enum AnyTypeKind {
return patchClass;
}
+ public static AnyTypeKind fromTOClass(final Class<? extends AnyTO> clazz) {
+ return UserTO.class.isAssignableFrom(clazz)
+ ? AnyTypeKind.USER
+ : GroupTO.class.isAssignableFrom(clazz)
+ ? AnyTypeKind.GROUP
+ : AnyTypeKind.ANY_OBJECT;
+ }
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReconciliationService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReconciliationService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReconciliationService.java
index 068f840..b971a3e 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReconciliationService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReconciliationService.java
@@ -34,7 +34,7 @@ import javax.ws.rs.core.MediaType;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.to.PullTaskTO;
import org.apache.syncope.common.lib.to.PushTaskTO;
-import org.apache.syncope.common.lib.to.ReconciliationStatus;
+import org.apache.syncope.common.lib.to.ReconStatus;
import org.apache.syncope.common.lib.types.AnyTypeKind;
/**
@@ -59,7 +59,7 @@ public interface ReconciliationService extends JAXRSService {
*/
@GET
@Produces({ MediaType.APPLICATION_JSON, SyncopeConstants.APPLICATION_YAML, MediaType.APPLICATION_XML })
- ReconciliationStatus status(
+ ReconStatus status(
@NotNull @QueryParam("anyTypeKind") AnyTypeKind anyTypeKind,
@NotNull @QueryParam("anyKey") String anyKey,
@NotNull @QueryParam("resourceKey") String resourceKey);
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
index a686215..d2315c5 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
@@ -31,7 +31,7 @@ import org.apache.syncope.common.lib.to.AttrTO;
import org.apache.syncope.common.lib.to.ConnObjectTO;
import org.apache.syncope.common.lib.to.PullTaskTO;
import org.apache.syncope.common.lib.to.PushTaskTO;
-import org.apache.syncope.common.lib.to.ReconciliationStatus;
+import org.apache.syncope.common.lib.to.ReconStatus;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.StandardEntitlement;
@@ -131,9 +131,10 @@ public class ReconciliationLogic extends AbstractTransactionalLogic<AbstractBase
MappingItem connObjectKeyItem = MappingUtils.getConnObjectKeyItem(provision).orElseThrow(()
-> new NotFoundException("ConnObjectKey for " + any.getType()
+ " on resource '" + provision.getResource().getKey() + "'"));
- String connObjectKeyValue = mappingManager.getConnObjectKeyValue(any, provision).orElseThrow(()
- -> new NotFoundException("Value for ConnObjectKey for " + any.getType()
- + " on resource '" + provision.getResource().getKey() + "'"));
+ String connObjectKeyValue = mappingManager.getConnObjectKeyValue(any, provision).orElse(null);
+ if (connObjectKeyValue == null) {
+ return null;
+ }
// 2. determine attributes to query
Set<MappingItem> linkinMappingItems = virSchemaDAO.findByProvision(provision).stream().
@@ -166,10 +167,11 @@ public class ReconciliationLogic extends AbstractTransactionalLogic<AbstractBase
}
@PreAuthorize("hasRole('" + StandardEntitlement.RESOURCE_GET_CONNOBJECT + "')")
- public ReconciliationStatus status(final AnyTypeKind anyTypeKind, final String anyKey, final String resourceKey) {
+ public ReconStatus status(final AnyTypeKind anyTypeKind, final String anyKey, final String resourceKey) {
Pair<Any<?>, Provision> init = init(anyTypeKind, anyKey, resourceKey);
- ReconciliationStatus status = new ReconciliationStatus();
+ ReconStatus status = new ReconStatus();
+ status.setResource(resourceKey);
status.setOnSyncope(getOnSyncope(init.getLeft(), init.getRight(), resourceKey));
status.setOnResource(getOnResource(init.getLeft(), init.getRight()));
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
index dda23b2..e65704a 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
@@ -101,12 +101,11 @@ public class JPARoleDAO extends AbstractDAO<Role> implements RoleDAO {
Role merged = entityManager().merge(role);
// refresh dynamic memberships
+ clearDynMembers(merged);
if (merged.getDynMembership() != null) {
List<User> matching = searchDAO().search(
SearchCondConverter.convert(merged.getDynMembership().getFIQLCond()), AnyTypeKind.USER);
- clearDynMembers(merged);
-
matching.forEach((user) -> {
Query insert = entityManager().createNativeQuery("INSERT INTO " + DYNMEMB_TABLE + " VALUES(?, ?)");
insert.setParameter(1, user.getKey());
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePullJobDelegate.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePullJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePullJobDelegate.java
index bb410f9..65151dc 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePullJobDelegate.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePullJobDelegate.java
@@ -110,6 +110,7 @@ public class SinglePullJobDelegate extends PullJobDelegate implements SyncopeSin
pullTask.setPerformCreate(pullTaskTO.isPerformCreate());
pullTask.setPerformUpdate(pullTaskTO.isPerformUpdate());
pullTask.setPerformDelete(pullTaskTO.isPerformDelete());
+ pullTask.setSyncStatus(pullTaskTO.isSyncStatus());
pullTask.setDestinationRealm(realm);
pullTask.setRemediation(pullTaskTO.isRemediation());
// validate JEXL expressions from templates and proceed if fine
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePushJobDelegate.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePushJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePushJobDelegate.java
index 90b8f08..8f8a3d1 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePushJobDelegate.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/SinglePushJobDelegate.java
@@ -80,6 +80,7 @@ public class SinglePushJobDelegate extends PushJobDelegate implements SyncopeSin
pushTask.setPerformCreate(pushTaskTO.isPerformCreate());
pushTask.setPerformUpdate(pushTaskTO.isPerformUpdate());
pushTask.setPerformDelete(pushTaskTO.isPerformDelete());
+ pushTask.setSyncStatus(pushTaskTO.isSyncStatus());
profile = new ProvisioningProfile<>(connector, pushTask);
profile.getActions().addAll(actions);
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReconciliationServiceImpl.java
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReconciliationServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReconciliationServiceImpl.java
index ad460cb..ed24be5 100644
--- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReconciliationServiceImpl.java
+++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/ReconciliationServiceImpl.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.rest.cxf.service;
import org.apache.syncope.common.lib.to.PullTaskTO;
import org.apache.syncope.common.lib.to.PushTaskTO;
-import org.apache.syncope.common.lib.to.ReconciliationStatus;
+import org.apache.syncope.common.lib.to.ReconStatus;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.rest.api.service.ReconciliationService;
import org.apache.syncope.core.logic.ReconciliationLogic;
@@ -38,7 +38,7 @@ public class ReconciliationServiceImpl extends AbstractServiceImpl implements Re
private AnyUtilsFactory anyUtilsFactory;
@Override
- public ReconciliationStatus status(final AnyTypeKind anyTypeKind, final String anyKey, final String resourceKey) {
+ public ReconStatus status(final AnyTypeKind anyTypeKind, final String anyKey, final String resourceKey) {
return logic.status(
anyTypeKind,
getActualKey(anyUtilsFactory.getInstance(anyTypeKind).dao(), anyKey),
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
index cd20170..66486ff 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/BulkActionITCase.java
@@ -96,7 +96,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
+ "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
assertNotNull(formTester);
- formTester.select("checkgroup", 2);
+ formTester.select("checkgroup", 0);
TESTER.executeAjaxEvent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
+ "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
@@ -116,7 +116,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
@Test
public void userStatusOnSyncopeOnlyBulkAction() {
- userStatusBulkAction(0, "Syncope");
+ userStatusBulkAction(0, Constants.SYNCOPE);
}
private void userStatusBulkAction(final int index, final String resource) {
@@ -169,7 +169,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
TESTER.cleanupFeedbackMessages();
TESTER.assertLabel(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
- + "secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:3:cell", "SUCCESS");
+ + "secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:4:cell", "SUCCESS");
TESTER.executeAjaxEvent(TAB_PANEL
+ "outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:back",
@@ -224,7 +224,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
TESTER.cleanupFeedbackMessages();
TESTER.assertLabel(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
- + "secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:3:cell", "SUCCESS");
+ + "secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:4:cell", "SUCCESS");
TESTER.executeAjaxEvent(TAB_PANEL
+ "outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:back",
@@ -268,7 +268,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
component = findComponentByProp("resource",
TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
+ "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
- + "checkgroup:dataTable", "ws-target-resource-1");
+ + "checkgroup:dataTable", "resource-ldap");
assertNotNull(component);
FormTester formTester = TESTER.newFormTester(
@@ -276,7 +276,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
+ "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
assertNotNull(formTester);
- formTester.select("checkgroup", 7);
+ formTester.select("checkgroup", 0);
TESTER.executeAjaxEvent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
+ "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
@@ -286,7 +286,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
+ "secondLevelContainer:second:container", WebMarkupContainer.class);
assertNotNull(findComponentByProp("resource", TAB_PANEL + "outerObjectsRepeater:2:outer:"
- + "form:content:status:secondLevelContainer:second:container:selectedObjects", "resource-testdb2"));
+ + "form:content:status:secondLevelContainer:second:container:selectedObjects", "resource-ldap"));
}
@Test
@@ -316,7 +316,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
component = findComponentByProp("resource",
TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
+ "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
- + "checkgroup:dataTable", "ws-target-resource-1");
+ + "checkgroup:dataTable", "resource-db-scripted");
assertNotNull(component);
FormTester formTester = TESTER.newFormTester(
@@ -324,7 +324,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
+ "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
assertNotNull(formTester);
- formTester.select("checkgroup", 7);
+ formTester.select("checkgroup", 0);
TESTER.executeAjaxEvent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
+ "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:bulkActionLink",
@@ -334,7 +334,7 @@ public class BulkActionITCase extends AbstractConsoleITCase {
+ "secondLevelContainer:second:container", WebMarkupContainer.class);
assertNotNull(findComponentByProp("resource", TAB_PANEL + "outerObjectsRepeater:2:outer:"
- + "form:content:status:secondLevelContainer:second:container:selectedObjects", "resource-testdb2"));
+ + "form:content:status:secondLevelContainer:second:container:selectedObjects", "resource-db-scripted"));
}
@Test
[2/8] syncope git commit: [SYNCOPE-1299] Console features implemented
Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/panels/RemoteObjectPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/RemoteObjectPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/RemoteObjectPanel.html
index d0e5167..46fb7fd 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/RemoteObjectPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/RemoteObjectPanel.html
@@ -17,8 +17,7 @@ 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>
<wicket:panel>
- <span wicket:id="remoteObject">[REMOTE OBJCET]</span>
+ <span wicket:id="remoteObject">[REMOTE OBJECT]</span>
</wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/SearchClausePanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/SearchClausePanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/SearchClausePanel.html
index 683fef7..0929615 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/SearchClausePanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/search/SearchClausePanel.html
@@ -17,28 +17,25 @@ 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:extend>
- <wicket:enclosure child="field-label">
- <label wicket:id="field-label">[LABEL]</label><span wicket:id="required"/>
- <span wicket:id="externalAction"/>
- </wicket:enclosure>
- <span wicket:id="container" class="clause">
- <div wicket:id="operatorContainer" class="field operator"><span wicket:id="operator"/></div>
- <span wicket:id="type" class="field type"/>
- <span wicket:id="property" class="field property"/>
- <span wicket:id="comparator" class="field comparator"/>
- <span wicket:id="value" class="field value"/>
- </span>
+ <wicket:extend>
+ <wicket:enclosure child="field-label">
+ <label wicket:id="field-label">[LABEL]</label><span wicket:id="required"/>
+ <span wicket:id="externalAction"/>
+ </wicket:enclosure>
+ <span wicket:id="container" class="clause">
+ <div wicket:id="operatorContainer" class="field operator"><span wicket:id="operator"/></div>
+ <span wicket:id="type" class="field type"/>
+ <span wicket:id="property" class="field property"/>
+ <span wicket:id="comparator" class="field comparator"/>
+ <span wicket:id="value" class="field value"/>
+ </span>
- <wicket:fragment wicket:id="searchButtonFragment">
- <a href="#" wicket:id="search"><li class="glyphicon glyphicon-search"></li></a>
- </wicket:fragment>
+ <wicket:fragment wicket:id="searchButtonFragment">
+ <a href="#" wicket:id="search"><li class="glyphicon glyphicon-search"></li></a>
+ </wicket:fragment>
- <wicket:fragment wicket:id="operatorFragment">
- <span wicket:id="operator"/>
- </wicket:fragment>
- </wicket:extend>
- </body>
+ <wicket:fragment wicket:id="operatorFragment">
+ <span wicket:id="operator"/>
+ </wicket:fragment>
+ </wicket:extend>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/reports/ReportWizardBuilder$Schedule.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/reports/ReportWizardBuilder$Schedule.html b/client/console/src/main/resources/org/apache/syncope/client/console/reports/ReportWizardBuilder$Schedule.html
index 99e853e..dad9871 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/reports/ReportWizardBuilder$Schedule.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/reports/ReportWizardBuilder$Schedule.html
@@ -17,10 +17,7 @@ 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 wicket:id="schedule"/>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <span wicket:id="schedule"/>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/status/AnyStatusModal.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/status/AnyStatusModal.html b/client/console/src/main/resources/org/apache/syncope/client/console/status/AnyStatusModal.html
index 7f18503..303ef4a 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/status/AnyStatusModal.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/status/AnyStatusModal.html
@@ -16,8 +16,7 @@ KIND, either express or implied. See the License for the
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>
+<html xmlns="http://www.w3.org/1999/xhtml" >
<wicket:extend>
</wicket:extend>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/status/ReconTaskPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/status/ReconTaskPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/status/ReconTaskPanel.html
new file mode 100644
index 0000000..91b0038
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/status/ReconTaskPanel.html
@@ -0,0 +1,37 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+ <wicket:panel>
+ <form wicket:id="form">
+ <div class="form-group form-palette">
+ <span wicket:id="actionsClassNames">[actionsClassNames]</span>
+ </div>
+ <div class="form-group"><span wicket:id="matchingRule">[matchingRule]</span></div>
+ <div class="form-group"><span wicket:id="unmatchingRule">[unmatchingRule]</span></div>
+ <div class="form-group"><span wicket:id="performCreate">[performCreate]</span></div>
+ <div class="form-group"><span wicket:id="performUpdate">[performUpdate]</span></div>
+ <div class="form-group"><span wicket:id="performDelete">[performDelete]</span></div>
+ <div class="form-group"><span wicket:id="syncStatus">[syncStatus]</span></div>
+
+ <div style="float: right;">
+ <a href="#" wicket:id="reconcile" class="btn btn-primary btn-circle btn-lg"><i class="fa fa-recycle" alt="reconcile" title="Reconcile"></i></a>
+ </div>
+ </form>
+ </wicket:panel>
+</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
index 892ec31..839fce0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
@@ -66,8 +66,8 @@ under the License.
<wicket:enclosure child="push">
<li><a href="#" wicket:id="push"><i class="fa fa-chevron-circle-right"></i><wicket:message key="resource.menu.push.list"/></a></li>
</wicket:enclosure>
- <wicket:enclosure child="status">
- <li><a href="#" wicket:id="status"><i class="fa fa-list-ul"></i><wicket:message key="resource.menu.provisioning.status"/></a></li>
+ <wicket:enclosure child="reconciliation">
+ <li><a href="#" wicket:id="reconciliation"><i class="fa fa-recycle"></i><wicket:message key="resource.menu.reconciliation"/></a></li>
</wicket:enclosure>
<wicket:enclosure child="history">
<li><a href="#" wicket:id="history"><i class="fa fa-history"></i><wicket:message key="resource.menu.history"/></a></li>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
index 60e4c18..a20f7cb 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
@@ -37,8 +37,8 @@ task.pull.list=Pull tasks {0}
task.push.list=Push tasks {0}
resource.explore.list=Explore ${key}
connectors.reload=Reload all connectors
-resource.provisioning.status=Provisioning Status {0}
-resource.menu.provisioning.status=Provisioning status
+resource.reconciliation=Reconciliation {0}
+resource.menu.reconciliation=Reconciliation
resource.menu.push.list=Push tasks
resource.menu.pull.list=Pull tasks
resource.menu.propagation.list=Propagation tasks
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
index dd16d75..7a67919 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
@@ -37,8 +37,8 @@ task.pull.list=Pull task {0}
task.push.list=Push task {0}
resource.explore.list=Esplora ${key}
connectors.reload=Ricarica tutti i connettori
-resource.provisioning.status=Stato provisioning {0}
-resource.menu.provisioning.status=Stato provisioning
+resource.reconciliation=Riconciliazione {0}
+resource.menu.reconciliation=Riconciliazione
resource.menu.push.list=Push tasks
resource.menu.pull.list=Pull tasks
resource.menu.propagation.list=Task di propagazione
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ja.properties
index aef451c..9bff0a5 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ja.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ja.properties
@@ -37,8 +37,8 @@ task.pull.list=\u30d7\u30eb\u30bf\u30b9\u30af {0}
task.push.list=\u30d7\u30c3\u30b7\u30e5\u30bf\u30b9\u30af {0}
resource.explore.list=${key} \u3092\u63a2\u7d22
connectors.reload=\u3059\u3079\u3066\u306e\u30b3\u30cd\u30af\u30bf\u30fc\u3092\u518d\u8aad\u307f\u8fbc\u307f
-resource.provisioning.status=\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u30b9\u30c6\u30fc\u30bf\u30b9 {0}
-resource.menu.provisioning.status=\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0\u30b9\u30c6\u30fc\u30bf\u30b9
+resource.reconciliation=Reconciliation {0}
+resource.menu.reconciliation=Reconciliation
resource.menu.push.list=\u30d7\u30c3\u30b7\u30e5\u30bf\u30b9\u30af
resource.menu.pull.list=\u30d7\u30eb\u30bf\u30b9\u30af
resource.menu.propagation.list=\u4f1d\u64ad\u30bf\u30b9\u30af
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
index ce3fa05..47d851f 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
@@ -37,8 +37,8 @@ task.pull.list=Pull tasks {0}
task.push.list=Push tasks {0}
resource.explore.list=Explorar ${key}
connectors.reload=Reload all connectors
-resource.provisioning.status=Provisioning status {0}
-resource.menu.provisioning.status=Provisioning status
+resource.reconciliation=Reconciliation {0}
+resource.menu.reconciliation=Reconciliation
resource.menu.push.list=Push tasks
resource.menu.pull.list=Pull tasks
resource.menu.propagation.list=Propagation tasks
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties
index 07b3b09..5879fe2 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_ru.properties
@@ -38,8 +38,8 @@ task.pull.list=\u0417\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u043b\u0443\u04
task.push.list=\u0417\u0430\u0434\u0430\u0447\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 {0}
resource.explore.list=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 ${key}
connectors.reload=\u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0441\u0435 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b
-resource.provisioning.status=\u0421\u0442\u0430\u0442\u0443\u0441 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f {0}
-resource.menu.provisioning.status=\u0421\u0442\u0430\u0442\u0443\u0441 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f
+resource.reconciliation=Reconciliation {0}
+resource.menu.reconciliation=Reconciliation
resource.menu.push.list=\u0417\u0430\u0434\u0430\u0447\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445
resource.menu.pull.list=\u0417\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445
resource.menu.propagation.list=\u0417\u0430\u0434\u0430\u0447\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.properties
index a0fe773..1086b88 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel.properties
@@ -91,7 +91,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=enable
+enable.title=manage status
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -226,6 +226,14 @@ provision_members.class=glyphicon glyphicon-fast-forward
provision_members.title=provision members
provision_members.alt=provision members icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+
+reconciliation_pull.class=fa fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
+
manage_resources.class=fa fa-sitemap
manage_resources.title=manage resources
manage_resources.alt=manage resources icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_it.properties
index 7e8d0c2..e326a95 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_it.properties
@@ -91,7 +91,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=enable
+enable.title=manage status
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -256,3 +256,9 @@ zoom_out.alt=zoom-out icon
workflow_modeler.class=fa fa-picture-o
workflow_modeler.title=workflow modeler
workflow_modeler.alt=workflow modeler icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ja.properties
index 2ef2c19..6789a9b 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ja.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ja.properties
@@ -91,7 +91,7 @@ reset.title=\u30ea\u30bb\u30c3\u30c8
reset.alt=\u30ea\u30bb\u30c3\u30c8
enable.class=fa fa-toggle-on
-enable.title=\u6709\u52b9
+enable.title=manage status
enable.alt=\u6709\u52b9
not_found.class=fa fa-eye-slash
@@ -257,3 +257,9 @@ zoom_out.alt=\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8
workflow_modeler.class=fa fa-picture-o
workflow_modeler.title=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30e2\u30c7\u30e9\u2015
workflow_modeler.alt=\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u30e2\u30c7\u30e9\u2015
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_pt_BR.properties
index 07acbc3..c996263 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_pt_BR.properties
@@ -91,7 +91,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=enable
+enable.title=manage status
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -256,3 +256,9 @@ zoom_out.alt=zoom-out icon
workflow_modeler.class=fa fa-picture-o
workflow_modeler.title=workflow modeler
workflow_modeler.alt=workflow modeler icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ru.properties
index d363d25..9cad806 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionPanel_ru.properties
@@ -91,7 +91,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=abilita
+enable.title=gestisci stato
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -256,3 +256,9 @@ zoom_out.alt=zoom-out icon
workflow_modeler.class=fa fa-picture-o
workflow_modeler.title=workflow modeler
workflow_modeler.alt=workflow modeler icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.properties
index ad327c2..e5affd7 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel.properties
@@ -75,7 +75,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=enable
+enable.title=manage status
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -198,6 +198,14 @@ provision_members.class=glyphicon glyphicon-fast-forward
provision_members.title=provision members
provision_members.alt=provision members icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+
+reconciliation_pull.class=fa fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
+
manage_resources.class=fa fa-sitemap
manage_resources.title=manage resources
manage_resources.alt=manage resources icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_it.properties
index 5cf18df..d0dbb16 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_it.properties
@@ -75,7 +75,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=abilita
+enable.title=gestisci stato
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -225,3 +225,9 @@ zoom_in.alt=zoom-in icon
zoom_out.class=fa fa-search-minus
zoom_out.title=rimpicciolisci
zoom_out.alt=zoom-out icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ja.properties
index db63cdb..599edfa 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ja.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ja.properties
@@ -75,7 +75,7 @@ reset.title=\u30ea\u30bb\u30c3\u30c8
reset.alt=\u30ea\u30bb\u30c3\u30c8
enable.class=fa fa-toggle-on
-enable.title=\u6709\u52b9
+enable.title=manage status
enable.alt=\u6709\u52b9
not_found.class=fa fa-eye-slash
@@ -225,3 +225,9 @@ zoom_in.alt=\u30ba\u30fc\u30e0\u30a4\u30f3
zoom_out.class=fa fa-search-minus
zoom_out.title=\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8
zoom_out.alt=\u30ba\u30fc\u30e0\u30a2\u30a6\u30c8
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_pt_BR.properties
index b8afd75..4aedf76 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_pt_BR.properties
@@ -75,7 +75,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=enable
+enable.title=manage status
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -225,3 +225,9 @@ zoom_in.alt=zoom-in icon
zoom_out.class=fa fa-search-minus
zoom_out.title=zoom-out
zoom_out.alt=zoom-out icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ru.properties
index ad327c2..e7fc2d3 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionsPanel_ru.properties
@@ -75,7 +75,7 @@ reset.title=reset
reset.alt=reset icon
enable.class=fa fa-toggle-on
-enable.title=enable
+enable.title=manage status
enable.alt=enable icon
not_found.class=fa fa-eye-slash
@@ -225,3 +225,9 @@ zoom_in.alt=zoom-in icon
zoom_out.class=fa fa-search-minus
zoom_out.title=zoom-out
zoom_out.alt=zoom-out icon
+reconciliation_push.class=fa fa-chevron-circle-right
+reconciliation_push.title=push
+reconciliation_push.alt=reconciliation push icon
+reconciliation_pull.class=fa-chevron-circle-left
+reconciliation_pull.title=pull
+reconciliation_pull.alt=reconciliation pull icon
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.html b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.html
index 0767e59..249ac51 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/AbstractBinaryPreviewer.html
@@ -16,11 +16,8 @@ KIND, either express or implied. See the License for the
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>
- <wicket:child />
- </wicket:panel>
- </body>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+ <wicket:panel>
+ <wicket:child/>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.html b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.html
index 51f5a3e..3b891b0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryImagePreviewer.html
@@ -17,10 +17,7 @@ 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:extend>
- <div><img wicket:id = "previewImage"/></div>
- </wicket:extend>
- </body>
+ <wicket:extend>
+ <div><img wicket:id = "previewImage"/></div>
+ </wicket:extend>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryPDFPreviewer.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryPDFPreviewer.html b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryPDFPreviewer.html
index 6b4cee1..b9a1f19 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryPDFPreviewer.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/BinaryPDFPreviewer.html
@@ -17,21 +17,17 @@ 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:extend>
- <div wicket:id="previewContainer">
- <span wicket:id="preview"/>
- </div>
+ <wicket:extend>
+ <div wicket:id="previewContainer">
+ <span wicket:id="preview"/>
+ </div>
- <wicket:fragment wicket:id="previewFragment">
- <div><img wicket:id = "previewImage"/></div>
- </wicket:fragment>
- <wicket:fragment wicket:id="noPreviewFragment">
- <div style="padding: 8px 0px 1px 10px">
- <i class=" glyphicon glyphicon-paperclip fa-2x" title="Preview not available" alt="Default preview icon"></i>
- </div>
- </wicket:fragment>
- </wicket:extend>
- </body>
+ <wicket:fragment wicket:id="previewFragment">
+ <div><img wicket:id = "previewImage"/></div>
+ </wicket:fragment>
+ <wicket:fragment wicket:id="noPreviewFragment">
+ <div style="padding: 8px 0px 1px 10px">
+ <i class=" glyphicon glyphicon-paperclip fa-2x" title="Preview not available" alt="Default preview icon"></i>
+ </div>
+ </wicket:fragment>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/DefaultPreviewer.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/DefaultPreviewer.html b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/DefaultPreviewer.html
index c96fd4b..7471fed 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/DefaultPreviewer.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/preview/DefaultPreviewer.html
@@ -16,13 +16,10 @@ KIND, either express or implied. See the License for the
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:extend>
- <div style="padding: 8px 0px 1px 10px">
- <i class=" glyphicon glyphicon-paperclip fa-2x" title="Preview not available" alt="Default preview icon"></i>
- </div>
- </wicket:extend>
- </body>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+ <wicket:extend>
+ <div style="padding: 8px 0px 1px 10px">
+ <i class=" glyphicon glyphicon-paperclip fa-2x" title="Preview not available" alt="Default preview icon"></i>
+ </div>
+ </wicket:extend>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.html
new file mode 100644
index 0000000..645039d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconDetailsModalPanel.html
@@ -0,0 +1,23 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+ <wicket:extend>
+ <div wicket:id="diff"/>
+ </wicket:extend>
+</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.html
deleted file mode 100644
index 645039d..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/widgets/ReconciliationDetailsModalPanel.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied. See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
- <wicket:extend>
- <div wicket:id="diff"/>
- </wicket:extend>
-</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AbstractMappingPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AbstractMappingPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AbstractMappingPanel.html
index 57339dd..6df2828 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AbstractMappingPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/AbstractMappingPanel.html
@@ -17,80 +17,77 @@ 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>
- <div class="table-responsive no-padding">
- <table id="mappings"
- class="table table-hover"
- style="font-size: 1em;margin-top:2px;"
- wicket:id="mappingContainer">
- <tbody>
- <tr>
- <th>
- <wicket:message key="intAttrName"/>
- <span id="intAttrNameInfo" wicket:id="intAttrNameInfo" class="glyphicon glyphicon-info-sign"></span>
- </th>
- <th><wicket:message key="extAttrName"/></th>
- <th><i class="fa fa-repeat"></i></th>
- <th><i class="fa fa-magic"></i></th>
- <th>
- <wicket:message key="mandatoryCondition"/>
- <span id="jexlInfo" wicket:id="jexlInfo" class="glyphicon glyphicon-info-sign"></span>
- </th>
- <th><wicket:message key="connObjectKey"/></th>
- <th><label wicket:id="passwordLabel"/></th>
- <th><label wicket:id="purposeLabel"/></th>
- <th></th>
- </tr>
- <tr wicket:id="mappings">
- <td>
- <span wicket:id="intAttrName">[intAttrNames]</span>
- </td>
- <td>
- <span wicket:id="extAttrName">[extAttrName]</span>
- </td>
- <td>
- <div class="alert-widget dropdown tasks-menu">
- <span wicket:id="jexlTransformers">[JEXL Transformers]</span>
- </div>
- </td>
- <td>
- <div class="alert-widget dropdown tasks-menu">
- <span wicket:id="itemTransformers">[Mapping Item Transformers]</span>
- </div>
- </td>
- <td>
- <span wicket:id="mandatoryCondition">[mandatoryCondition]</span>
- </td>
- <td>
- <span wicket:id="connObjectKey">[connObjectKey]</span>
- </td>
- <td>
- <span wicket:id="password">[password]</span>
- </td>
- <td>
- <div wicket:id="purpose" style="margin: 10px 0px 10px 0px">
- <span wicket:id="purposeActions">[purpose]</span>
- </div>
- </td>
- <td>
- <div id="inline-actions">
- <span wicket:id="toRemove"/>
- </div>
- </td>
- </tr>
- </tbody>
+ <wicket:panel>
+ <div class="table-responsive no-padding">
+ <table id="mappings"
+ class="table table-hover"
+ style="font-size: 1em;margin-top:2px;"
+ wicket:id="mappingContainer">
+ <tbody>
+ <tr>
+ <th>
+ <wicket:message key="intAttrName"/>
+ <span id="intAttrNameInfo" wicket:id="intAttrNameInfo" class="glyphicon glyphicon-info-sign"></span>
+ </th>
+ <th><wicket:message key="extAttrName"/></th>
+ <th><i class="fa fa-repeat"></i></th>
+ <th><i class="fa fa-magic"></i></th>
+ <th>
+ <wicket:message key="mandatoryCondition"/>
+ <span id="jexlInfo" wicket:id="jexlInfo" class="glyphicon glyphicon-info-sign"></span>
+ </th>
+ <th><wicket:message key="connObjectKey"/></th>
+ <th><label wicket:id="passwordLabel"/></th>
+ <th><label wicket:id="purposeLabel"/></th>
+ <th></th>
+ </tr>
+ <tr wicket:id="mappings">
+ <td>
+ <span wicket:id="intAttrName">[intAttrNames]</span>
+ </td>
+ <td>
+ <span wicket:id="extAttrName">[extAttrName]</span>
+ </td>
+ <td>
+ <div class="alert-widget dropdown tasks-menu">
+ <span wicket:id="jexlTransformers">[JEXL Transformers]</span>
+ </div>
+ </td>
+ <td>
+ <div class="alert-widget dropdown tasks-menu">
+ <span wicket:id="itemTransformers">[Mapping Item Transformers]</span>
+ </div>
+ </td>
+ <td>
+ <span wicket:id="mandatoryCondition">[mandatoryCondition]</span>
+ </td>
+ <td>
+ <span wicket:id="connObjectKey">[connObjectKey]</span>
+ </td>
+ <td>
+ <span wicket:id="password">[password]</span>
+ </td>
+ <td>
+ <div wicket:id="purpose" style="margin: 10px 0px 10px 0px">
+ <span wicket:id="purposeActions">[purpose]</span>
+ </div>
+ </td>
+ <td>
+ <div id="inline-actions">
+ <span wicket:id="toRemove"/>
+ </div>
+ </td>
+ </tr>
+ </tbody>
- <tfoot>
- <tr>
- <td colspan="10" style="padding: 5px; text-align: right">
- <input type="submit" class="btn btn-primary" wicket:id="addMappingBtn" />
- </td>
- </tr>
- </tfoot>
- </table>
- </div>
- </wicket:panel>
- </body>
+ <tfoot>
+ <tr>
+ <td colspan="10" style="padding: 5px; text-align: right">
+ <input type="submit" class="btn btn-primary" wicket:id="addMappingBtn" />
+ </td>
+ </tr>
+ </tfoot>
+ </table>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AnnotatedBeanPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AnnotatedBeanPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AnnotatedBeanPanel.html
index 02bbeb7..c2ae2b8 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AnnotatedBeanPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AnnotatedBeanPanel.html
@@ -17,48 +17,45 @@ 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>
- <div class="information">
- <div class="infoleft">
- <div class="infolabel">
- <wicket:message key="creationDate"/>:
- </div>
- <div>
- <span wicket:id="creationDate" />
- </div>
+ <wicket:panel>
+ <div class="information">
+ <div class="infoleft">
+ <div class="infolabel">
+ <wicket:message key="creationDate"/>:
</div>
-
- <div class="inforight">
- <div class="infolabel">
- <wicket:message key="lastChangeDate"/>:
- </div>
- <div>
- <span wicket:id="lastChangeDate" />
- </div>
+ <div>
+ <span wicket:id="creationDate" />
</div>
+ </div>
- <div class="infoleft">
- <div class="infolabel">
- <wicket:message key="creator"/>:
- </div>
- <div>
- <span wicket:id="creator" />
- </div>
+ <div class="inforight">
+ <div class="infolabel">
+ <wicket:message key="lastChangeDate"/>:
+ </div>
+ <div>
+ <span wicket:id="lastChangeDate" />
</div>
+ </div>
- <div class="inforight">
- <div class="infolabel">
- <wicket:message key="lastModifier"/>:
- </div>
- <div>
- <span wicket:id="lastModifier" />
- </div>
+ <div class="infoleft">
+ <div class="infolabel">
+ <wicket:message key="creator"/>:
+ </div>
+ <div>
+ <span wicket:id="creator" />
</div>
+ </div>
- <wicket:child />
+ <div class="inforight">
+ <div class="infolabel">
+ <wicket:message key="lastModifier"/>:
+ </div>
+ <div>
+ <span wicket:id="lastModifier" />
+ </div>
</div>
- </wicket:panel>
- </body>
+
+ <wicket:child />
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html
index 18a4448..3b15ad7 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html
@@ -18,15 +18,17 @@ under the License.
-->
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
- <div class="form-group" wicket:id="propView">
- <span wicket:id="value">[ATTIRIBUTE]</span>
+ <h4 class="left page-header" wicket:id="leftTitle">[TITLE]</h4>
+ <h4 class="right page-header" wicket:id="rightTitle">[TITLE]</h4>
+ <div class="form-group" wicket:id="propView" style="clear: both;">
+ <span wicket:id="value">[ATTRIBUTE]</span>
</div>
<wicket:fragment wicket:id="doubleValue">
<div class="left attribute">
- <span wicket:id="oldAttribute">[ATTIRIBUTE]</span>
+ <span wicket:id="leftAttribute">[ATTRIBUTE]</span>
</div>
<div class="right attribute">
- <span wicket:id="newAttribute">[ATTIRIBUTE]</span>
+ <span wicket:id="rightAttribute">[ATTRIBUTE]</span>
</div>
</wicket:fragment>
</wicket:panel>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Details.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Details.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Details.html
index f9b03c8..a6773aa 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Details.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Details.html
@@ -17,18 +17,15 @@ 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>
- <div class="details">
- <div class="form-group">
- <span wicket:id="destinationRealm">[DESTINATION REALM]</span>
- </div>
- <wicket:child/>
+ <wicket:panel>
+ <div class="details">
+ <div class="form-group">
+ <span wicket:id="destinationRealm">[DESTINATION REALM]</span>
</div>
- <div class="details-footer">
- <span wicket:id="generalStatusInformation">[GENERAL STATUS INFORMATION]</span>
- </div>
- </wicket:panel>
- </body>
+ <wicket:child/>
+ </div>
+ <div class="details-footer">
+ <span wicket:id="generalStatusInformation">[GENERAL STATUS INFORMATION]</span>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DynamicMemberships.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DynamicMemberships.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DynamicMemberships.html
index 12540fa..9e6f5f9 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DynamicMemberships.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/DynamicMemberships.html
@@ -17,13 +17,10 @@ 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>
- <div wicket:id="uDynMembershipCond" />
- <span wicket:id="aDynMembershipCond">
- <div wicket:id="aDynMembershipCond"/>
- </span>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <div wicket:id="uDynMembershipCond" />
+ <span wicket:id="aDynMembershipCond">
+ <div wicket:id="aDynMembershipCond"/>
+ </span>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Ownership.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Ownership.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Ownership.html
index 1e1629b..11509f6 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Ownership.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Ownership.html
@@ -17,38 +17,35 @@ 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>
- <div id="ownership">
- <span wicket:id="ownership">[OWNERSHIP]</span>
- </div>
+ <wicket:panel>
+ <div id="ownership">
+ <span wicket:id="ownership">[OWNERSHIP]</span>
+ </div>
- <div wicket:id="ownerContainer">
- <span wicket:id="search">[SEARCH]</span>
- </div>
+ <div wicket:id="ownerContainer">
+ <span wicket:id="search">[SEARCH]</span>
+ </div>
- <wicket:fragment wicket:id="userSearchFragment">
- <div class="form-group input-group">
- <span wicket:id="userOwner"/>
- <a href="#" wicket:id="userOwnerReset" class="input-group-addon"><i class="glyphicon glyphicon-remove-circle" alt="reset user owner" title="Reset"></i></a>
- </div>
- <span wicket:id="usersearch">[USER SEARCH]</span>
- <div class="searchResult">
- <span wicket:id="searchResult">[USER SEARCH RESULT]</span>
- </div>
- </wicket:fragment>
+ <wicket:fragment wicket:id="userSearchFragment">
+ <div class="form-group input-group">
+ <span wicket:id="userOwner"/>
+ <a href="#" wicket:id="userOwnerReset" class="input-group-addon"><i class="glyphicon glyphicon-remove-circle" alt="reset user owner" title="Reset"></i></a>
+ </div>
+ <span wicket:id="usersearch">[USER SEARCH]</span>
+ <div class="searchResult">
+ <span wicket:id="searchResult">[USER SEARCH RESULT]</span>
+ </div>
+ </wicket:fragment>
- <wicket:fragment wicket:id="groupSearchFragment">
- <div class="form-group input-group">
- <span wicket:id="groupOwner"/>
- <a href="#" wicket:id="groupOwnerReset" class="input-group-addon"><i class="glyphicon glyphicon-remove-circle" alt="reset group owner" title="Reset"></i></a>
- </div>
- <span wicket:id="groupsearch">[GROUP SEARCH]</span>
- <div class="searchResult">
- <span wicket:id="searchResult">[GROUP SEARCH RESULT]</span>
- </div>
- </wicket:fragment>
- </wicket:panel>
- </body>
+ <wicket:fragment wicket:id="groupSearchFragment">
+ <div class="form-group input-group">
+ <span wicket:id="groupOwner"/>
+ <a href="#" wicket:id="groupOwnerReset" class="input-group-addon"><i class="glyphicon glyphicon-remove-circle" alt="reset group owner" title="Reset"></i></a>
+ </div>
+ <span wicket:id="groupsearch">[GROUP SEARCH]</span>
+ <div class="searchResult">
+ <span wicket:id="searchResult">[GROUP SEARCH RESULT]</span>
+ </div>
+ </wicket:fragment>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html
index 83ab31d..c58eb6f 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships$Specification.html
@@ -17,28 +17,25 @@ 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>
- <div class="form-group">
- <span wicket:id="type" />
- </div>
+ <wicket:panel>
+ <div class="form-group">
+ <span wicket:id="type" />
+ </div>
- <div class="form-group">
- <span wicket:id="otherType"/>
- </div>
+ <div class="form-group">
+ <span wicket:id="otherType"/>
+ </div>
- <div wicket:id="searchPanelContainer">
- <span wicket:id="searchPanel"/>
- </div>
+ <div wicket:id="searchPanelContainer">
+ <span wicket:id="searchPanel"/>
+ </div>
- <wicket:fragment wicket:id="emptyFragment"/>
- <wicket:fragment wicket:id="searchFragment">
- <span wicket:id="searchPanel"/>
- <div class="searchResult">
- <span wicket:id="searchResultPanel"/>
- </div>
- </wicket:fragment>
- </wicket:panel>
- </body>
+ <wicket:fragment wicket:id="emptyFragment"/>
+ <wicket:fragment wicket:id="searchFragment">
+ <span wicket:id="searchPanel"/>
+ <div class="searchResult">
+ <span wicket:id="searchResultPanel"/>
+ </div>
+ </wicket:fragment>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships.html
index bfa6f45..992c3af 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Relationships.html
@@ -17,25 +17,22 @@ 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>
- <div class="wizard-step-title">
- <div><span wicket:id="title">[RELATIONSHIPS]</span></div><span wicket:id="changed"></span>
- </div>
+ <wicket:panel>
+ <div class="wizard-step-title">
+ <div><span wicket:id="title">[RELATIONSHIPS]</span></div><span wicket:id="changed"></span>
+ </div>
- <div id="emptyPlaceholder"/>
- <span wicket:id="relationships"/>
+ <div id="emptyPlaceholder"/>
+ <span wicket:id="relationships"/>
- <wicket:fragment wicket:id="viewFragment">
- <div wicket:id="relationships"/>
- <div id="inline-actions" class="modal-footer">
- <span wicket:id="actions" class="circular-actions">[ACTIONS]</span>
- </div>
- </wicket:fragment>
- <wicket:fragment wicket:id="addFragment">
- <span wicket:id="specification" />
- </wicket:fragment>
- </wicket:panel>
- </body>
+ <wicket:fragment wicket:id="viewFragment">
+ <div wicket:id="relationships"/>
+ <div id="inline-actions" class="modal-footer">
+ <span wicket:id="actions" class="circular-actions">[ACTIONS]</span>
+ </div>
+ </wicket:fragment>
+ <wicket:fragment wicket:id="addFragment">
+ <span wicket:id="specification" />
+ </wicket:fragment>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Resources.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Resources.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Resources.html
index 54219d1..10f17f7 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Resources.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Resources.html
@@ -17,22 +17,19 @@ 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>
- <div class="col-xs-12">
- <div class="box">
- <div class="box-header">
- <h3 class="box-title">
- <wicket:message key="resources.palette">[ROLES]</wicket:message>
- </h3>
- <span wicket:id="changed"></span>
- </div>
- <div class="box-body">
- <span wicket:id="resources">[RESOURCES]</span>
- </div>
+ <wicket:panel>
+ <div class="col-xs-12">
+ <div class="box">
+ <div class="box-header">
+ <h3 class="box-title">
+ <wicket:message key="resources.palette">[ROLES]</wicket:message>
+ </h3>
+ <span wicket:id="changed"></span>
+ </div>
+ <div class="box-body">
+ <span wicket:id="resources">[RESOURCES]</span>
</div>
</div>
- </wicket:panel>
- </body>
+ </div>
+ </wicket:panel>
</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ResultPage.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ResultPage.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ResultPage.html
index cf43602..bca1667 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ResultPage.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ResultPage.html
@@ -17,13 +17,10 @@ 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 wicket:id="customResultBody"/>
- <div id="inline-actions" class="modal-footer circular-actions">
- <span wicket:id="action"/>
- </div>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <span wicket:id="customResultBody"/>
+ <div id="inline-actions" class="modal-footer circular-actions">
+ <span wicket:id="action"/>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Roles.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Roles.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Roles.html
index f7eded7..5243059 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Roles.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/Roles.html
@@ -17,35 +17,32 @@ 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>
- <div class="col-xs-12">
- <div class="box">
- <div class="box-header">
- <h3 class="box-title">
- <wicket:message key="roles.palette">[ROLES]</wicket:message>
- </h3>
- <span wicket:id="changed"></span>
- </div>
- <div class="box-body">
- <span wicket:id="roles">[ROLES]</span>
- </div>
+ <wicket:panel>
+ <div class="col-xs-12">
+ <div class="box">
+ <div class="box-header">
+ <h3 class="box-title">
+ <wicket:message key="roles.palette">[ROLES]</wicket:message>
+ </h3>
+ <span wicket:id="changed"></span>
+ </div>
+ <div class="box-body">
+ <span wicket:id="roles">[ROLES]</span>
</div>
</div>
+ </div>
- <div class="col-xs-12">
- <div class="box">
- <div class="box-header">
- <h3 class="box-title">
- <wicket:message key="dynroles.palette">[ROLES]</wicket:message>
- </h3>
- </div>
- <div class="box-body">
- <span wicket:id="dynroles">[ROLES]</span>
- </div>
+ <div class="col-xs-12">
+ <div class="box">
+ <div class="box-header">
+ <h3 class="box-title">
+ <wicket:message key="dynroles.palette">[ROLES]</wicket:message>
+ </h3>
+ </div>
+ <div class="box-body">
+ <span wicket:id="dynroles">[ROLES]</span>
</div>
</div>
- </wicket:panel>
- </body>
+ </div>
+ </wicket:panel>
</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/StatusPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/StatusPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/StatusPanel.html
index a411f3f..de9b10d 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/StatusPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/StatusPanel.html
@@ -17,7 +17,6 @@ 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>
<wicket:panel>
<span wicket:id="resources">[RESOURCES]</span>
</wicket:panel>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserInformationPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserInformationPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserInformationPanel.html
index 0b10b23..aa47866 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserInformationPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/UserInformationPanel.html
@@ -17,53 +17,50 @@ 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:extend>
- <div class="infoleft">
- <div class="infolabel">
- <wicket:message key="lastLoginDate"/>:
- </div>
- <div>
- <span wicket:id="lastLoginDate"/>
- </div>
+ <wicket:extend>
+ <div class="infoleft">
+ <div class="infolabel">
+ <wicket:message key="lastLoginDate"/>:
</div>
+ <div>
+ <span wicket:id="lastLoginDate"/>
+ </div>
+ </div>
- <div class="inforight">
- <div class="infolabel">
- <wicket:message key="failedLogins"/>:
- </div>
- <div>
- <span wicket:id="failedLogins"/>
- </div>
+ <div class="inforight">
+ <div class="infolabel">
+ <wicket:message key="failedLogins"/>:
+ </div>
+ <div>
+ <span wicket:id="failedLogins"/>
</div>
+ </div>
- <div class="infoleft">
- <div class="infolabel">
- <wicket:message key="changePwdDate"/>:
- </div>
- <div>
- <span wicket:id="changePwdDate"/>
- </div>
+ <div class="infoleft">
+ <div class="infolabel">
+ <wicket:message key="changePwdDate"/>:
+ </div>
+ <div>
+ <span wicket:id="changePwdDate"/>
</div>
+ </div>
- <div class="inforight">
- <div class="infolabel">
- <wicket:message key="tokenExpireTime"/>
- </div>
- <div>
- <span wicket:id="tokenExpireTime"/>
- </div>
+ <div class="inforight">
+ <div class="infolabel">
+ <wicket:message key="tokenExpireTime"/>
</div>
+ <div>
+ <span wicket:id="tokenExpireTime"/>
+ </div>
+ </div>
- <div class="inforow">
- <div class="infolabel">
- <wicket:message key="token"/>:
- </div>
- <div class="wrap">
- <span wicket:id="token"/>
- </div>
+ <div class="inforow">
+ <div class="infolabel">
+ <wicket:message key="token"/>:
+ </div>
+ <div class="wrap">
+ <span wicket:id="token"/>
</div>
- </wicket:extend>
- </body>
+ </div>
+ </wicket:extend>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Details.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Details.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Details.html
index 80ebc0c..0908605 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Details.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Details.html
@@ -17,13 +17,10 @@ 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>
- <div class="form-group">
- <span wicket:id="key">[NAME]</span>
- </div>
- <div wicket:id="dynMembershipCond" />
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <div class="form-group">
+ <span wicket:id="key">[NAME]</span>
+ </div>
+ <div wicket:id="dynMembershipCond" />
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$DynRealms.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$DynRealms.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$DynRealms.html
index c55493c..d043a5a 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$DynRealms.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$DynRealms.html
@@ -17,12 +17,9 @@ 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>
- <div class="form-group">
- <span wicket:id="dynRealms">[DYNAMIC REALMS]</span>
- </div>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <div class="form-group">
+ <span wicket:id="dynRealms">[DYNAMIC REALMS]</span>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Entitlements.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Entitlements.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Entitlements.html
index f14d054..ffbd5aa 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Entitlements.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Entitlements.html
@@ -17,12 +17,9 @@ 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>
- <div class="form-group">
- <span wicket:id="entitlements">[ENTITLEMENTS]</span>
- </div>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <div class="form-group">
+ <span wicket:id="entitlements">[ENTITLEMENTS]</span>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Realms.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Realms.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Realms.html
index 7c3d20e..b4031e2 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Realms.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/role/RoleWizardBuilder$Realms.html
@@ -17,12 +17,9 @@ 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>
- <div class="form-group">
- <span wicket:id="realms">[REALMS]</span>
- </div>
- </wicket:panel>
- </body>
+ <wicket:panel>
+ <div class="form-group">
+ <span wicket:id="realms">[REALMS]</span>
+ </div>
+ </wicket:panel>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconStatus.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconStatus.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconStatus.java
new file mode 100644
index 0000000..e5baf8f
--- /dev/null
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconStatus.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.common.lib.to;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.syncope.common.lib.AbstractBaseBean;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
+
+/**
+ * Reconciliation status.
+ */
+@XmlRootElement(name = "reconciliationStatus")
+@XmlType
+public class ReconStatus extends AbstractBaseBean {
+
+ private static final long serialVersionUID = -8516345256596521490L;
+
+ private String resource;
+
+ private ConnObjectTO onSyncope;
+
+ private ConnObjectTO onResource;
+
+ @ApiModelProperty(readOnly = true)
+ public String getResource() {
+ return resource;
+ }
+
+ public void setResource(final String resource) {
+ this.resource = resource;
+ }
+
+ @ApiModelProperty(readOnly = true)
+ public ConnObjectTO getOnSyncope() {
+ return onSyncope;
+ }
+
+ public void setOnSyncope(final ConnObjectTO onSyncope) {
+ this.onSyncope = onSyncope;
+ }
+
+ @ApiModelProperty(readOnly = true)
+ public ConnObjectTO getOnResource() {
+ return onResource;
+ }
+
+ public void setOnResource(final ConnObjectTO onResource) {
+ this.onResource = onResource;
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconciliationStatus.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconciliationStatus.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconciliationStatus.java
deleted file mode 100644
index bd4f8b7..0000000
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ReconciliationStatus.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.common.lib.to;
-
-import io.swagger.annotations.ApiModelProperty;
-import org.apache.syncope.common.lib.AbstractBaseBean;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
-
-/**
- * Reconciliation status.
- */
-@XmlRootElement(name = "reconciliationStatus")
-@XmlType
-public class ReconciliationStatus extends AbstractBaseBean {
-
- private static final long serialVersionUID = -8516345256596521490L;
-
- private ConnObjectTO onSyncope;
-
- private ConnObjectTO onResource;
-
- @ApiModelProperty(readOnly = true)
- public ConnObjectTO getOnSyncope() {
- return onSyncope;
- }
-
- public void setOnSyncope(final ConnObjectTO onSyncope) {
- this.onSyncope = onSyncope;
- }
-
- @ApiModelProperty(readOnly = true)
- public ConnObjectTO getOnResource() {
- return onResource;
- }
-
- public void setOnResource(final ConnObjectTO onResource) {
- this.onResource = onResource;
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java
index 12fbf59..5f01d23 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java
@@ -41,4 +41,12 @@ public enum AnyTypeKind {
return toClass;
}
+ public static AnyTypeKind fromTOClass(final Class<? extends AnyTO> clazz) {
+ return UserTO.class.isAssignableFrom(clazz)
+ ? AnyTypeKind.USER
+ : GroupTO.class.isAssignableFrom(clazz)
+ ? AnyTypeKind.GROUP
+ : AnyTypeKind.ANY_OBJECT;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReconciliationService.java
----------------------------------------------------------------------
diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReconciliationService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReconciliationService.java
index bfec63c..f3e5650 100644
--- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReconciliationService.java
+++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/ReconciliationService.java
@@ -33,7 +33,7 @@ import javax.ws.rs.core.MediaType;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.to.PullTaskTO;
import org.apache.syncope.common.lib.to.PushTaskTO;
-import org.apache.syncope.common.lib.to.ReconciliationStatus;
+import org.apache.syncope.common.lib.to.ReconStatus;
import org.apache.syncope.common.lib.types.AnyTypeKind;
/**
@@ -57,7 +57,7 @@ public interface ReconciliationService extends JAXRSService {
*/
@GET
@Produces({ MediaType.APPLICATION_JSON, SyncopeConstants.APPLICATION_YAML, MediaType.APPLICATION_XML })
- ReconciliationStatus status(
+ ReconStatus status(
@NotNull @QueryParam("anyTypeKind") AnyTypeKind anyTypeKind,
@NotNull @QueryParam("anyKey") String anyKey,
@NotNull @QueryParam("resourceKey") String resourceKey);
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
index 58fd708..cdfe9ef 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ReconciliationLogic.java
@@ -31,7 +31,7 @@ import org.apache.syncope.common.lib.to.AttrTO;
import org.apache.syncope.common.lib.to.ConnObjectTO;
import org.apache.syncope.common.lib.to.PullTaskTO;
import org.apache.syncope.common.lib.to.PushTaskTO;
-import org.apache.syncope.common.lib.to.ReconciliationStatus;
+import org.apache.syncope.common.lib.to.ReconStatus;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.StandardEntitlement;
@@ -139,6 +139,9 @@ public class ReconciliationLogic extends AbstractTransactionalLogic<AbstractBase
+ " on resource '" + provision.getResource().getKey() + "'");
}
String connObjectKeyValue = mappingManager.getConnObjectKeyValue(any, provision);
+ if (connObjectKeyValue == null) {
+ return null;
+ }
// 2. determine attributes to query
Set<MappingItem> linkinMappingItems = new HashSet<>();
@@ -173,10 +176,11 @@ public class ReconciliationLogic extends AbstractTransactionalLogic<AbstractBase
}
@PreAuthorize("hasRole('" + StandardEntitlement.RESOURCE_GET_CONNOBJECT + "')")
- public ReconciliationStatus status(final AnyTypeKind anyTypeKind, final String anyKey, final String resourceKey) {
+ public ReconStatus status(final AnyTypeKind anyTypeKind, final String anyKey, final String resourceKey) {
Pair<Any<?>, Provision> init = init(anyTypeKind, anyKey, resourceKey);
- ReconciliationStatus status = new ReconciliationStatus();
+ ReconStatus status = new ReconStatus();
+ status.setResource(resourceKey);
status.setOnSyncope(getOnSyncope(init.getLeft(), init.getRight(), resourceKey));
status.setOnResource(getOnResource(init.getLeft(), init.getRight()));
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
index 367ee8d..37096c7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARoleDAO.java
@@ -91,12 +91,11 @@ public class JPARoleDAO extends AbstractDAO<Role> implements RoleDAO {
Role merged = entityManager().merge(role);
// refresh dynamic memberships
+ clearDynMembers(merged);
if (merged.getDynMembership() != null) {
List<User> matching = searchDAO().search(
SearchCondConverter.convert(merged.getDynMembership().getFIQLCond()), AnyTypeKind.USER);
- clearDynMembers(merged);
-
for (User user : matching) {
Query insert = entityManager().createNativeQuery("INSERT INTO " + DYNMEMB_TABLE + " VALUES(?, ?)");
insert.setParameter(1, user.getKey());
[8/8] syncope git commit: [SYNCOPE-1299] Console features implemented
Posted by il...@apache.org.
[SYNCOPE-1299] Console features implemented
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/4da5dccc
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/4da5dccc
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/4da5dccc
Branch: refs/heads/master
Commit: 4da5dcccbf69acd7a706cfffe3db8f1c4494eac5
Parents: 33847ad
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Apr 17 16:01:13 2018 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Apr 17 17:09:23 2018 +0200
----------------------------------------------------------------------
.../approvals/ApprovalDirectoryPanel.java | 18 +-
.../client/console/bulk/BulkContent.java | 19 +-
.../client/console/commons/AnyDataProvider.java | 4 +-
.../commons/ResourceStatusDataProvider.java | 137 -----------
.../status/AbstractStatusBeanProvider.java | 15 +-
.../commons/status/ConnObjectWrapper.java | 10 +-
.../console/commons/status/StatusBean.java | 13 +-
.../console/commons/status/StatusUtils.java | 93 +++-----
.../console/panels/AjaxDataTablePanel.java | 10 +-
.../console/panels/AnyDirectoryPanel.java | 19 +-
.../console/panels/ConnObjectDetails.java | 9 +-
.../client/console/panels/ConnObjects.java | 2 +-
.../client/console/panels/MultilevelPanel.java | 6 +-
.../console/panels/PropagationErrorPanel.java | 30 +++
.../syncope/client/console/panels/Realm.java | 35 ++-
.../console/panels/RealmWizardBuilder.java | 8 +-
.../console/panels/RemoteObjectPanel.java | 5 +-
.../panels/search/SearchClausePanel.java | 19 +-
.../console/rest/AbstractAnyRestClient.java | 2 +-
.../console/rest/AnyObjectRestClient.java | 2 +-
.../client/console/rest/GroupRestClient.java | 2 +-
.../console/rest/ReconciliationRestClient.java | 52 +++++
.../client/console/rest/UserRestClient.java | 47 ++--
.../console/status/AnyStatusDirectoryPanel.java | 226 ++++++++++++-------
.../client/console/status/ReconStatusPanel.java | 68 ++++++
.../client/console/status/ReconTaskPanel.java | 162 +++++++++++++
.../status/ResourceStatusDirectoryPanel.java | 204 ++++++++++++++---
.../client/console/status/StatusModal.java | 4 +-
.../console/topology/TopologyTogglePanel.java | 7 +-
.../wicket/markup/html/form/ActionLink.java | 2 +
.../console/widgets/ReconDetailsModalPanel.java | 178 +++++++++++++++
.../ReconciliationDetailsModalPanel.java | 177 ---------------
.../console/widgets/ReconciliationWidget.java | 2 +-
.../wizards/any/AnyObjectWizardBuilder.java | 12 +-
.../console/wizards/any/ConnObjectPanel.java | 62 ++---
.../console/wizards/any/GroupWizardBuilder.java | 12 +-
.../client/console/wizards/any/StatusPanel.java | 97 +++++---
.../console/wizards/any/UserWizardBuilder.java | 12 +-
.../SyncopeConsoleApplication.properties | 2 +
.../SyncopeConsoleApplication_it.properties | 2 +
.../SyncopeConsoleApplication_ja.properties | 2 +
.../SyncopeConsoleApplication_pt_BR.properties | 2 +
.../SyncopeConsoleApplication_ru.properties | 2 +
.../client/console/bulk/BulkActionModal.html | 9 +-
.../client/console/bulk/BulkContent.html | 25 +-
.../notifications/NotificationTasks.html | 1 -
.../NotificationWizardBuilder$Abouts.html | 13 +-
.../NotificationWizardBuilder$Details.html | 37 ++-
.../NotificationWizardBuilder$Events.html | 9 +-
.../NotificationWizardBuilder$Recipients.html | 1 -
.../client/console/panels/MultilevelPanel.html | 1 -
.../console/panels/PropagationErrorPanel.html | 24 ++
.../console/panels/RemoteObjectPanel.html | 3 +-
.../panels/search/SearchClausePanel.html | 41 ++--
.../reports/ReportWizardBuilder$Schedule.html | 9 +-
.../client/console/status/AnyStatusModal.html | 3 +-
.../client/console/status/ReconTaskPanel.html | 37 +++
.../console/topology/TopologyTogglePanel.html | 4 +-
.../topology/TopologyTogglePanel.properties | 4 +-
.../topology/TopologyTogglePanel_it.properties | 4 +-
.../topology/TopologyTogglePanel_ja.properties | 4 +-
.../TopologyTogglePanel_pt_BR.properties | 4 +-
.../topology/TopologyTogglePanel_ru.properties | 4 +-
.../markup/html/form/ActionPanel.properties | 10 +-
.../markup/html/form/ActionPanel_it.properties | 8 +-
.../markup/html/form/ActionPanel_ja.properties | 8 +-
.../html/form/ActionPanel_pt_BR.properties | 8 +-
.../markup/html/form/ActionPanel_ru.properties | 8 +-
.../markup/html/form/ActionsPanel.properties | 10 +-
.../markup/html/form/ActionsPanel_it.properties | 8 +-
.../markup/html/form/ActionsPanel_ja.properties | 8 +-
.../html/form/ActionsPanel_pt_BR.properties | 8 +-
.../markup/html/form/ActionsPanel_ru.properties | 8 +-
.../form/preview/AbstractBinaryPreviewer.html | 11 +-
.../html/form/preview/BinaryImagePreviewer.html | 9 +-
.../html/form/preview/BinaryPDFPreviewer.html | 28 +--
.../html/form/preview/DefaultPreviewer.html | 15 +-
.../console/widgets/ReconDetailsModalPanel.html | 23 ++
.../ReconciliationDetailsModalPanel.html | 23 --
.../console/wizards/AbstractMappingPanel.html | 147 ++++++------
.../console/wizards/any/AnnotatedBeanPanel.html | 69 +++---
.../console/wizards/any/ConnObjectPanel.html | 10 +-
.../client/console/wizards/any/Details.html | 23 +-
.../console/wizards/any/DynamicMemberships.html | 15 +-
.../client/console/wizards/any/Ownership.html | 59 +++--
.../any/Relationships$Specification.html | 39 ++--
.../console/wizards/any/Relationships.html | 35 ++-
.../client/console/wizards/any/Resources.html | 29 ++-
.../client/console/wizards/any/ResultPage.html | 15 +-
.../client/console/wizards/any/Roles.html | 49 ++--
.../client/console/wizards/any/StatusPanel.html | 1 -
.../wizards/any/UserInformationPanel.html | 77 +++----
.../syncope/common/lib/to/ReconStatus.java | 67 ++++++
.../common/lib/to/ReconciliationStatus.java | 56 -----
.../syncope/common/lib/types/AnyTypeKind.java | 7 +
.../rest/api/service/ReconciliationService.java | 4 +-
.../syncope/core/logic/ReconciliationLogic.java | 14 +-
.../core/persistence/jpa/dao/JPARoleDAO.java | 3 +-
.../java/pushpull/SinglePullJobDelegate.java | 1 +
.../java/pushpull/SinglePushJobDelegate.java | 1 +
.../cxf/service/ReconciliationServiceImpl.java | 4 +-
.../syncope/fit/console/BulkActionITCase.java | 20 +-
.../syncope/fit/console/RealmsITCase.java | 17 +-
.../syncope/fit/console/TopologyITCase.java | 2 +-
.../syncope/fit/core/ReconciliationITCase.java | 6 +-
105 files changed, 1743 insertions(+), 1249 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
index 60077ba..10e4fa5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
@@ -325,13 +325,13 @@ public class ApprovalDirectoryPanel
protected Serializable onApplyInternal(final AnyWrapper<UserTO> modelObject) {
UserTO inner = modelObject.getInnerObject();
- ProvisioningResult<UserTO> actual;
+ ProvisioningResult<UserTO> result;
if (formTO.getUserPatch() == null) {
- actual = new ProvisioningResult<>();
+ result = new ProvisioningResult<>();
UserTO user = new UserWorkflowRestClient().executeTask("default", inner);
- actual.setEntity(user);
- claimForm(restClient.getFormForUser(actual.getEntity().getKey()).getTaskId());
+ result.setEntity(user);
+ claimForm(restClient.getFormForUser(result.getEntity().getKey()).getTaskId());
} else {
UserPatch patch = AnyOperations.diff(inner, formTO.getUserTO(), false);
@@ -344,11 +344,11 @@ public class ApprovalDirectoryPanel
}
// update just if it is changed
if (patch.isEmpty()) {
- actual = new ProvisioningResult<>();
- actual.setEntity(inner);
+ result = new ProvisioningResult<>();
+ result.setEntity(inner);
} else {
- actual = userRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
- WorkflowFormTO workFlowTO = restClient.getFormForUser(actual.getEntity().getKey());
+ result = userRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
+ WorkflowFormTO workFlowTO = restClient.getFormForUser(result.getEntity().getKey());
if (workFlowTO != null) {
claimForm(workFlowTO.getTaskId());
}
@@ -356,7 +356,7 @@ public class ApprovalDirectoryPanel
}
- return actual;
+ return result;
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java b/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java
index faf7255..4287521 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java
@@ -203,37 +203,36 @@ public class BulkContent<T extends Serializable, S> extends MultilevelPanel.Seco
for (Map.Entry<String, List<StatusBean>> entry : beans.entrySet()) {
final String etag = anyRestClient.read(entry.getKey()).getETagValue();
- switch (actionToBeAddresed.name()) {
- case "DEPROVISION":
+ switch (actionToBeAddresed) {
+ case DEPROVISION:
res = anyRestClient.deprovision(etag, entry.getKey(), entry.getValue());
break;
- case "UNASSIGN":
+ case UNASSIGN:
res = anyRestClient.unassign(etag, entry.getKey(), entry.getValue());
break;
- case "UNLINK":
+ case UNLINK:
res = anyRestClient.unlink(etag, entry.getKey(), entry.getValue());
break;
- case "ASSIGN":
+ case ASSIGN:
res = anyRestClient.assign(etag, entry.getKey(), entry.getValue());
break;
- case "LINK":
+ case LINK:
res = anyRestClient.link(etag, entry.getKey(), entry.getValue());
break;
- case "PROVISION":
+ case PROVISION:
res = anyRestClient.provision(etag, entry.getKey(), entry.getValue());
break;
- case "REACTIVATE":
+ case REACTIVATE:
res = ((UserRestClient) anyRestClient).
reactivate(etag, entry.getKey(), entry.getValue());
fieldName = "resource";
break;
- case "SUSPEND":
+ case SUSPEND:
res = ((UserRestClient) anyRestClient).
suspend(etag, entry.getKey(), entry.getValue());
fieldName = "resource";
break;
default:
- break;
}
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
index ff4161c..0eca373 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
@@ -121,9 +121,9 @@ public class AnyDataProvider<A extends AnyTO> extends DirectoryDataProvider<A> {
try {
if (filtered) {
- result = fiql == null ? 0 : restClient.searchCount(realm, fiql, type);
+ result = fiql == null ? 0 : restClient.count(realm, fiql, type);
} else {
- result = restClient.searchCount(realm, null, type);
+ result = restClient.count(realm, null, type);
}
} catch (Exception e) {
LOG.error("While requesting for size() with FIQL {}", fiql, e);
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/commons/ResourceStatusDataProvider.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/ResourceStatusDataProvider.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/ResourceStatusDataProvider.java
deleted file mode 100644
index 3ce39ea..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/ResourceStatusDataProvider.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.commons;
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.stream.Collectors;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.client.console.commons.status.ConnObjectWrapper;
-import org.apache.syncope.client.console.commons.status.StatusBean;
-import org.apache.syncope.client.console.commons.status.StatusUtils;
-import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
-import org.apache.syncope.client.console.rest.AnyObjectRestClient;
-import org.apache.syncope.client.console.rest.GroupRestClient;
-import org.apache.syncope.client.console.rest.UserRestClient;
-import org.apache.syncope.client.lib.SyncopeClient;
-import org.apache.syncope.common.lib.search.AbstractFiqlSearchConditionBuilder;
-import org.apache.syncope.common.lib.to.AnyTO;
-import org.apache.syncope.common.lib.to.GroupTO;
-import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-
-public class ResourceStatusDataProvider extends DirectoryDataProvider<StatusBean> {
-
- private static final long serialVersionUID = 6267494272884913376L;
-
- private final StatusUtils statusUtils;
-
- private final String resource;
-
- private final SortableDataProviderComparator<StatusBean> comparator;
-
- private final AbstractAnyRestClient<? extends AnyTO> restClient;
-
- protected String fiql;
-
- private final String realm;
-
- private final String type;
-
- public ResourceStatusDataProvider(
- final String type,
- final String resource,
- final int paginatorRows,
- final String realm) {
-
- super(paginatorRows);
- statusUtils = new StatusUtils();
- this.resource = resource;
-
- AbstractFiqlSearchConditionBuilder bld;
-
- if (StringUtils.isEmpty(type)) {
- this.fiql = null;
- restClient = null;
- } else {
- switch (type) {
- case "USER":
- bld = SyncopeClient.getUserSearchConditionBuilder();
- restClient = new UserRestClient();
- break;
- case "GROUP":
- bld = SyncopeClient.getGroupSearchConditionBuilder();
- restClient = new GroupRestClient();
- break;
- default:
- bld = SyncopeClient.getAnyObjectSearchConditionBuilder(type);
- restClient = new AnyObjectRestClient();
- }
-
- this.fiql = bld.hasResources(resource).query();
- }
-
- setSort("connObjectLink", SortOrder.ASCENDING);
-
- this.comparator = new SortableDataProviderComparator<>(this);
-
- this.realm = realm;
- this.type = type;
- }
-
- @Override
- public Iterator<StatusBean> iterator(final long first, final long count) {
- if (fiql == null) {
- return Collections.<StatusBean>emptyList().iterator();
- }
-
- final int page = ((int) first / paginatorRows);
- List<? extends AnyTO> result =
- restClient.search(realm, fiql, (page < 0 ? 0 : page) + 1, paginatorRows, getSort(), type);
-
- List<StatusBean> statuses = result.stream().map(any -> {
- List<ConnObjectWrapper> connObjects =
- statusUtils.getConnectorObjects(any, Collections.singletonList(resource));
-
- return statusUtils.getStatusBean(
- any,
- resource,
- connObjects.isEmpty() ? null : connObjects.iterator().next().getConnObjectTO(),
- any instanceof GroupTO);
- }).collect(Collectors.toList());
-
- Collections.sort(statuses, comparator);
- return statuses.iterator();
- }
-
- @Override
- public long size() {
- if (fiql == null) {
- return 0;
- }
- return restClient.searchCount(realm, fiql, type);
- }
-
- @Override
- public IModel<StatusBean> model(final StatusBean object) {
- return new CompoundPropertyModel<>(object);
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/commons/status/AbstractStatusBeanProvider.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/AbstractStatusBeanProvider.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/AbstractStatusBeanProvider.java
index 7d9a688..50619e5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/AbstractStatusBeanProvider.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/AbstractStatusBeanProvider.java
@@ -18,7 +18,6 @@
*/
package org.apache.syncope.client.console.commons.status;
-import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.apache.syncope.client.console.commons.DirectoryDataProvider;
@@ -31,7 +30,7 @@ public abstract class AbstractStatusBeanProvider extends DirectoryDataProvider<S
private static final long serialVersionUID = 4287357360778016173L;
- private final SortableDataProviderComparator<StatusBean> comparator;
+ protected final SortableDataProviderComparator<StatusBean> comparator;
public AbstractStatusBeanProvider(final String sort) {
super(10);
@@ -42,29 +41,27 @@ public abstract class AbstractStatusBeanProvider extends DirectoryDataProvider<S
@Override
public Iterator<StatusBean> iterator(final long first, final long count) {
- List<StatusBean> list = getStatusBeans();
- Collections.sort(list, comparator);
- return list.subList((int) first, (int) first + (int) count).iterator();
+ return getStatusBeans(first, count).iterator();
}
@Override
public long size() {
- return getStatusBeans().size();
+ return getStatusBeans(-1, -1).size();
}
@Override
- public IModel<StatusBean> model(final StatusBean resource) {
+ public IModel<StatusBean> model(final StatusBean statusBean) {
return new AbstractReadOnlyModel<StatusBean>() {
private static final long serialVersionUID = -7802635613997243712L;
@Override
public StatusBean getObject() {
- return resource;
+ return statusBean;
}
};
}
- public abstract List<StatusBean> getStatusBeans();
+ protected abstract List<StatusBean> getStatusBeans(long first, long count);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java
index 06ccac7..14dca77 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java
@@ -28,13 +28,13 @@ public class ConnObjectWrapper implements Serializable {
private final AnyTO any;
- private final String resourceName;
+ private final String resource;
private final ConnObjectTO connObjectTO;
- public ConnObjectWrapper(final AnyTO any, final String resourceName, final ConnObjectTO connObjectTO) {
+ public ConnObjectWrapper(final AnyTO any, final String resource, final ConnObjectTO connObjectTO) {
this.any = any;
- this.resourceName = resourceName;
+ this.resource = resource;
this.connObjectTO = connObjectTO;
}
@@ -42,8 +42,8 @@ public class ConnObjectWrapper implements Serializable {
return any;
}
- public String getResourceName() {
- return resourceName;
+ public String getResource() {
+ return resource;
}
public ConnObjectTO getConnObjectTO() {
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java
index fe7ce9f..fc834b5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java
@@ -23,6 +23,7 @@ import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
+import org.apache.syncope.common.lib.to.AnyObjectTO;
import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.to.GroupTO;
import org.apache.syncope.common.lib.to.RealmTO;
@@ -44,18 +45,20 @@ public class StatusBean implements Serializable {
private boolean linked = true;
- public StatusBean(final AnyTO any, final String resourceName) {
+ public StatusBean(final AnyTO any, final String resource) {
this.key = any.getKey();
this.name = any instanceof UserTO
? ((UserTO) any).getUsername()
- : any instanceof GroupTO ? ((GroupTO) any).getName() : String.valueOf(any.getKey());
- this.resource = resourceName;
+ : any instanceof GroupTO
+ ? ((GroupTO) any).getName()
+ : ((AnyObjectTO) any).getName();
+ this.resource = resource;
}
- public StatusBean(final RealmTO realm, final String resourceName) {
+ public StatusBean(final RealmTO realm, final String resource) {
this.key = realm.getKey();
this.name = realm.getFullPath();
- this.resource = resourceName;
+ this.resource = resource;
}
public String getConnObjectLink() {
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java
index 608dee1..7ba310e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java
@@ -19,21 +19,24 @@
package org.apache.syncope.client.console.commons.status;
import java.io.Serializable;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.Objects;
import java.util.Optional;
+import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.client.console.commons.ConnIdSpecialName;
import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.panels.LabelPanel;
-import org.apache.syncope.client.console.rest.ResourceRestClient;
+import org.apache.syncope.client.console.rest.ReconciliationRestClient;
import org.apache.syncope.common.lib.patch.PasswordPatch;
import org.apache.syncope.common.lib.patch.StatusPatch;
import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.to.AttrTO;
import org.apache.syncope.common.lib.to.ConnObjectTO;
import org.apache.syncope.common.lib.to.RealmTO;
+import org.apache.syncope.common.lib.to.ReconStatus;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.PropagationTaskExecStatus;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.basic.Label;
@@ -41,78 +44,50 @@ import org.apache.wicket.markup.html.panel.Panel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class StatusUtils implements Serializable {
+public final class StatusUtils implements Serializable {
private static final long serialVersionUID = 7238009174387184309L;
private static final Logger LOG = LoggerFactory.getLogger(StatusUtils.class);
- private final ResourceRestClient restClient = new ResourceRestClient();
+ private static final ReconciliationRestClient RECONCILIATION_REST_CLIENT = new ReconciliationRestClient();
- public List<ConnObjectWrapper> getConnectorObjects(final AnyTO any) {
- final List<ConnObjectWrapper> objects = new ArrayList<>();
- objects.addAll(getConnectorObjects(any, any.getResources()));
- return objects;
- }
-
- public List<ConnObjectWrapper> getConnectorObjects(
- final Collection<AnyTO> anys, final Collection<String> resources) {
-
- final List<ConnObjectWrapper> objects = new ArrayList<>();
-
- for (AnyTO any : anys) {
- objects.addAll(getConnectorObjects(any, resources));
- }
-
- return objects;
- }
+ public static List<ReconStatus> getReconStatuses(
+ final AnyTypeKind anyTypeKind, final String anyKey, final Collection<String> resources) {
- public List<ConnObjectWrapper> getConnectorObjects(
- final AnyTO any, final Collection<String> resources) {
-
- final List<ConnObjectWrapper> objects = new ArrayList<>();
-
- for (String resourceName : resources) {
- ConnObjectTO objectTO = null;
+ return resources.stream().map(resource -> {
try {
- objectTO = restClient.readConnObject(resourceName, any.getType(), any.getKey());
+ return RECONCILIATION_REST_CLIENT.status(anyTypeKind, anyKey, resource);
} catch (Exception e) {
- LOG.warn("ConnObject '{}' not found on resource '{}'", any.getKey(), resourceName);
+ LOG.warn("Unexpected error for {} {} on {}", anyTypeKind, anyKey, resource, e);
+ return null;
}
-
- objects.add(new ConnObjectWrapper(any, resourceName, objectTO));
- }
-
- return objects;
+ }).filter(Objects::nonNull).collect(Collectors.toList());
}
- public StatusBean getStatusBean(
+ public static StatusBean getStatusBean(
final AnyTO anyTO,
- final String resourceName,
- final ConnObjectTO objectTO,
+ final String resource,
+ final ConnObjectTO connObjectTO,
final boolean notUser) {
- final StatusBean statusBean = new StatusBean(anyTO, resourceName);
+ StatusBean statusBean = new StatusBean(anyTO, resource);
- if (objectTO != null) {
- final Boolean enabled = isEnabled(objectTO);
-
- final Status status = enabled == null
+ if (connObjectTO != null) {
+ Boolean enabled = isEnabled(connObjectTO);
+ statusBean.setStatus(enabled == null
? (notUser ? Status.ACTIVE : Status.UNDEFINED)
: enabled
? Status.ACTIVE
- : Status.SUSPENDED;
-
- String connObjectLink = getConnObjectLink(objectTO);
+ : Status.SUSPENDED);
- statusBean.setStatus(status);
- statusBean.setConnObjectLink(connObjectLink);
+ statusBean.setConnObjectLink(getConnObjectLink(connObjectTO));
}
return statusBean;
}
- public StatusBean getStatusBean(
+ public static StatusBean getStatusBean(
final RealmTO anyTO,
final String resourceName,
final ConnObjectTO objectTO) {
@@ -137,31 +112,31 @@ public class StatusUtils implements Serializable {
return statusBean;
}
- private Boolean isEnabled(final ConnObjectTO objectTO) {
+ private static Boolean isEnabled(final ConnObjectTO objectTO) {
Optional<AttrTO> status = objectTO.getAttr(ConnIdSpecialName.ENABLE);
return status.isPresent() && status.get().getValues() != null && !status.get().getValues().isEmpty()
? Boolean.valueOf(status.get().getValues().get(0))
: Boolean.FALSE;
}
- private String getConnObjectLink(final ConnObjectTO objectTO) {
+ private static String getConnObjectLink(final ConnObjectTO objectTO) {
Optional<AttrTO> name = objectTO == null ? null : objectTO.getAttr(ConnIdSpecialName.NAME);
- return name.isPresent() && name.get().getValues() != null && !name.get().getValues().isEmpty()
+ return name != null && name.isPresent() && name.get().getValues() != null && !name.get().getValues().isEmpty()
? name.get().getValues().get(0)
: null;
}
public static PasswordPatch buildPasswordPatch(final String password, final Collection<StatusBean> statuses) {
- final PasswordPatch.Builder builder = new PasswordPatch.Builder();
+ PasswordPatch.Builder builder = new PasswordPatch.Builder();
builder.value(password);
- for (StatusBean status : statuses) {
+ statuses.forEach((status) -> {
if (Constants.SYNCOPE.equalsIgnoreCase(status.getResource())) {
builder.onSyncope(true);
} else {
builder.resource(status.getResource());
}
- }
+ });
return builder.build();
}
@@ -172,13 +147,13 @@ public class StatusUtils implements Serializable {
public static StatusPatch buildStatusPatch(final Collection<StatusBean> statuses, final Boolean enable) {
StatusPatch.Builder builder = new StatusPatch.Builder();
builder.onSyncope(false);
- for (StatusBean status : statuses) {
+ statuses.forEach((status) -> {
if ("syncope".equalsIgnoreCase(status.getResource())) {
builder.onSyncope(true);
} else {
builder.resource(status.getResource());
}
- }
+ });
return builder.build();
}
@@ -295,4 +270,8 @@ public class StatusUtils implements Serializable {
}
};
}
+
+ private StatusUtils() {
+ // private constructor for static utility class
+ }
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
index 001de67..aa7b19f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
@@ -249,15 +249,17 @@ public final class AjaxDataTablePanel<T extends Serializable, S> extends DataTab
}
if (builder.multiLevelPanel == null) {
- bulkModal.header(new ResourceModel("bulk.action", "Bulk action"));
+ bulkModal.header(new ResourceModel("bulk.action"));
bulkModal.changeCloseButtonLabel(getString("cancel", null, "Cancel"), target);
target.add(bulkModal.setContent(new BulkActionModal<>(
bulkModal,
builder.pageRef,
new ArrayList<>(group.getModelObject()),
+ builder.columns.size() == 1
+ ? builder.columns
// serialization problem with sublist only
- new ArrayList<>(builder.columns.subList(1, builder.columns.size())),
+ : new ArrayList<>(builder.columns.subList(1, builder.columns.size())),
builder.bulkActions,
builder.bulkActionExecutor,
builder.itemKeyField)));
@@ -269,8 +271,10 @@ public final class AjaxDataTablePanel<T extends Serializable, S> extends DataTab
new BulkContent<>(
builder.baseModal,
new ArrayList<>(group.getModelObject()),
+ builder.columns.size() == 1
+ ? builder.columns
// serialization problem with sublist only
- new ArrayList<>(builder.columns.subList(1, builder.columns.size() - 1)),
+ : new ArrayList<>(builder.columns.subList(1, builder.columns.size())),
builder.bulkActions,
builder.bulkActionExecutor,
builder.itemKeyField),
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
index 427953b..bea77ae 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
@@ -27,7 +27,7 @@ import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
-import org.apache.commons.lang3.tuple.Pair;
+import org.apache.commons.lang3.tuple.Triple;
import org.apache.syncope.client.console.SyncopeConsoleSession;
import org.apache.syncope.client.console.commons.AnyDataProvider;
import org.apache.syncope.client.console.commons.Constants;
@@ -285,15 +285,14 @@ public abstract class AnyDirectoryPanel<A extends AnyTO, E extends AbstractAnyRe
panelId,
((ProvisioningResult<A>) result).getEntity(),
new ListModel<>(new ArrayList<>()),
- ((ProvisioningResult<A>) result).getPropagationStatuses().stream().
- map(input -> {
- ConnObjectTO before = input.getBeforeObj();
- ConnObjectWrapper afterObjWrapper = new ConnObjectWrapper(
- ((ProvisioningResult<A>) result).getEntity(),
- input.getResource(),
- input.getAfterObj());
- return Pair.of(before, afterObjWrapper);
- }).collect(Collectors.toList()),
+ ((ProvisioningResult<A>) result).getPropagationStatuses().stream().map(status -> {
+ ConnObjectTO before = status.getBeforeObj();
+ ConnObjectWrapper afterObjWrapper = new ConnObjectWrapper(
+ ((ProvisioningResult<A>) result).getEntity(),
+ status.getResource(),
+ status.getAfterObj());
+ return Triple.of(before, afterObjWrapper, status.getFailureReason());
+ }).collect(Collectors.toList()),
pageRef);
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDetails.java
index 98a289e..4f348be 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDetails.java
@@ -21,6 +21,8 @@ package org.apache.syncope.client.console.panels;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.client.console.wizards.any.ConnObjectPanel;
import org.apache.syncope.common.lib.to.ConnObjectTO;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
public class ConnObjectDetails extends MultilevelPanel.SecondLevel {
@@ -30,8 +32,11 @@ public class ConnObjectDetails extends MultilevelPanel.SecondLevel {
super();
MultilevelPanel mlp = new MultilevelPanel("details");
- mlp.setFirstLevel(
- new ConnObjectPanel(MultilevelPanel.FIRST_LEVEL_ID, Pair.of((ConnObjectTO) null, connObjectTO), true));
+ mlp.setFirstLevel(new ConnObjectPanel(
+ MultilevelPanel.FIRST_LEVEL_ID,
+ Pair.<IModel<?>, IModel<?>>of(Model.of(), Model.of()),
+ Pair.of((ConnObjectTO) null, connObjectTO),
+ true));
add(mlp);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java
index 303cbf1..881ae74 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java
@@ -73,7 +73,7 @@ public class ConnObjects extends Panel implements ModalPanel {
private static final long serialVersionUID = 1473786800290434002L;
@Override
- protected void prev(final AjaxRequestTarget target) {
+ public void prev(final AjaxRequestTarget target) {
anyTypes.setEnabled(true);
target.add(anyTypes);
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java
index 4f0029c..6050d30 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java
@@ -34,12 +34,12 @@ public class MultilevelPanel extends Panel implements IHeaderContributor {
protected static final Logger LOG = LoggerFactory.getLogger(MultilevelPanel.class);
- private boolean isFirstLevel = true;
-
public static final String FIRST_LEVEL_ID = "first";
public static final String SECOND_LEVEL_ID = "second";
+ private boolean isFirstLevel = true;
+
private final WebMarkupContainer firstLevelContainer;
private final WebMarkupContainer secondLevelContainer;
@@ -85,7 +85,7 @@ public class MultilevelPanel extends Panel implements IHeaderContributor {
}
}
- protected void prev(final AjaxRequestTarget target) {
+ public void prev(final AjaxRequestTarget target) {
if (isFirstLevel) {
LOG.warn("No further level available");
} else {
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/panels/PropagationErrorPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/PropagationErrorPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/PropagationErrorPanel.java
new file mode 100644
index 0000000..c6d4da9
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/PropagationErrorPanel.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.panels;
+
+import org.apache.wicket.markup.html.basic.Label;
+
+public class PropagationErrorPanel extends MultilevelPanel.SecondLevel {
+
+ private static final long serialVersionUID = -6203280629851678781L;
+
+ public PropagationErrorPanel(final String failureReason) {
+ add(new Label("failureReason", failureReason).setOutputMarkupId(true));
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
index e3f121c..95331ee 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
@@ -58,7 +58,9 @@ import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -205,7 +207,7 @@ public abstract class Realm extends WizardMgtPanel<RealmTO> {
syncope.setStatus(PropagationTaskExecStatus.SUCCESS);
syncope.setResource(Constants.SYNCOPE);
- ArrayList<PropagationStatus> propagations = new ArrayList<>();
+ List<PropagationStatus> propagations = new ArrayList<>();
propagations.add(syncope);
propagations.addAll(((ProvisioningResult) result).getPropagationStatuses());
@@ -253,11 +255,26 @@ public abstract class Realm extends WizardMgtPanel<RealmTO> {
}
@Override
- public void onClick(final AjaxRequestTarget target, final PropagationStatus bean) {
- mlp.next(bean.getResource(), new RemoteRealmPanel(bean), target);
+ public void onClick(final AjaxRequestTarget target, final PropagationStatus status) {
+ mlp.next(status.getResource(), new RemoteRealmPanel(status), target);
}
}, ActionLink.ActionType.VIEW, StandardEntitlement.RESOURCE_GET_CONNOBJECT);
+ builder.addAction(new ActionLink<PropagationStatus>() {
+
+ private static final long serialVersionUID = -3722207913631435501L;
+
+ @Override
+ protected boolean statusCondition(final PropagationStatus status) {
+ return StringUtils.isNotBlank(status.getFailureReason());
+ }
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final PropagationStatus status) {
+ mlp.next(status.getResource(), new PropagationErrorPanel(status.getFailureReason()), target);
+ }
+ }, ActionLink.ActionType.PROPAGATION_TASKS, StringUtils.EMPTY);
+
mlp.setFirstLevel(builder.build(MultilevelPanel.FIRST_LEVEL_ID));
return mlp;
}
@@ -270,19 +287,23 @@ public abstract class Realm extends WizardMgtPanel<RealmTO> {
protected abstract void onClickDelete(final AjaxRequestTarget target, final RealmTO realmTO);
- public class RemoteRealmPanel extends RemoteObjectPanel {
+ class RemoteRealmPanel extends RemoteObjectPanel {
private static final long serialVersionUID = 4303365227411467563L;
private final PropagationStatus bean;
- public RemoteRealmPanel(final PropagationStatus bean) {
+ RemoteRealmPanel(final PropagationStatus bean) {
this.bean = bean;
- add(new ConnObjectPanel(REMOTE_OBJECT_PANEL_ID, getConnObjectTO(), false));
+ add(new ConnObjectPanel(
+ REMOTE_OBJECT_PANEL_ID,
+ Pair.<IModel<?>, IModel<?>>of(new ResourceModel("before"), new ResourceModel("after")),
+ getConnObjectTOs(),
+ false));
}
@Override
- protected final Pair<ConnObjectTO, ConnObjectTO> getConnObjectTO() {
+ protected final Pair<ConnObjectTO, ConnObjectTO> getConnObjectTOs() {
return Pair.of(bean.getBeforeObj(), bean.getAfterObj());
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmWizardBuilder.java
index f491f2b..9edcded 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmWizardBuilder.java
@@ -47,13 +47,13 @@ public class RealmWizardBuilder extends AjaxWizardBuilder<RealmTO> {
@Override
protected Serializable onApplyInternal(final RealmTO modelObject) {
- final ProvisioningResult<RealmTO> res;
+ ProvisioningResult<RealmTO> result;
if (modelObject.getKey() == null) {
- res = realmRestClient.create(this.parentPath, modelObject);
+ result = realmRestClient.create(this.parentPath, modelObject);
} else {
- res = realmRestClient.update(modelObject);
+ result = realmRestClient.update(modelObject);
}
- return res;
+ return result;
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/panels/RemoteObjectPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RemoteObjectPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RemoteObjectPanel.java
index 5a6ab4e..6c4231d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RemoteObjectPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RemoteObjectPanel.java
@@ -19,14 +19,13 @@
package org.apache.syncope.client.console.panels;
import org.apache.commons.lang3.tuple.Pair;
-import org.apache.syncope.client.console.panels.MultilevelPanel.SecondLevel;
import org.apache.syncope.common.lib.to.ConnObjectTO;
-public abstract class RemoteObjectPanel extends SecondLevel {
+public abstract class RemoteObjectPanel extends MultilevelPanel.SecondLevel {
private static final long serialVersionUID = 4303365227411467563L;
protected static final String REMOTE_OBJECT_PANEL_ID = "remoteObject";
- protected abstract Pair<ConnObjectTO, ConnObjectTO> getConnObjectTO();
+ protected abstract Pair<ConnObjectTO, ConnObjectTO> getConnObjectTOs();
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
index 0dc3196..47e3545 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
@@ -23,13 +23,10 @@ import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkbox.boot
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.client.console.commons.Constants;
@@ -378,7 +375,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
final AjaxTextFieldPanel property = new AjaxTextFieldPanel(
"property",
"property",
- new PropertyModel<String>(searchClause, "property"),
+ new PropertyModel<>(searchClause, "property"),
false);
property.hideLabel().setOutputMarkupId(true).setEnabled(true);
property.setChoices(properties.getObject());
@@ -424,16 +421,8 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
AnyObjectSearchPanel.MAX_GROUP_LIST_CARDINALITY,
new SortParam<>("name", true),
null);
- Collection<String> newList = CollectionUtils.collect(filteredGroups,
- new Transformer<GroupTO, String>() {
-
- @Override
- public String transform(final GroupTO input) {
- return input.getName();
- }
- });
-
- final List<String> names = new ArrayList<>(newList);
+ List<String> names = filteredGroups.stream().
+ map(GroupTO::getName).collect(Collectors.toList());
Collections.sort(names);
property.setChoices(names);
}
@@ -614,7 +603,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
properties.detach();
property.setChoices(properties.getObject());
break;
-
+
case GROUP_MEMBERSHIP:
value.setEnabled(false);
value.setModelObject(StringUtils.EMPTY);
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
index 4cfdddb..639a4eb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
@@ -40,7 +40,7 @@ public abstract class AbstractAnyRestClient<TO extends AnyTO> extends BaseRestCl
protected abstract Class<? extends AnyService<TO>> getAnyServiceClass();
- public abstract int searchCount(String realm, String fiql, String type);
+ public abstract int count(String realm, String fiql, String type);
public abstract List<TO> search(String realm, String fiql, int page, int size, SortParam<String> sort, String type);
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
index a885764..86a9e29 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
@@ -59,7 +59,7 @@ public class AnyObjectRestClient extends AbstractAnyRestClient<AnyObjectTO> {
}
@Override
- public int searchCount(final String realm, final String fiql, final String type) {
+ public int count(final String realm, final String fiql, final String type) {
return getService(AnyObjectService.class).
search(new AnyQuery.Builder().realm(realm).fiql(fiql).page(1).size(1).build()).
getTotalCount();
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
index c7ff004..9ecd9ca 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
@@ -62,7 +62,7 @@ public class GroupRestClient extends AbstractAnyRestClient<GroupTO> {
}
@Override
- public int searchCount(final String realm, final String fiql, final String type) {
+ public int count(final String realm, final String fiql, final String type) {
return getService(GroupService.class).
search(new AnyQuery.Builder().realm(realm).fiql(fiql).page(1).size(1).build()).
getTotalCount();
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/rest/ReconciliationRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReconciliationRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReconciliationRestClient.java
new file mode 100644
index 0000000..16960de
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReconciliationRestClient.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.rest;
+
+import org.apache.syncope.common.lib.to.PullTaskTO;
+import org.apache.syncope.common.lib.to.PushTaskTO;
+import org.apache.syncope.common.lib.to.ReconStatus;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.rest.api.service.ReconciliationService;
+
+public class ReconciliationRestClient extends BaseRestClient {
+
+ private static final long serialVersionUID = -3161863874876938094L;
+
+ public ReconStatus status(final AnyTypeKind anyTypeKind, final String anyKey, final String resourceKey) {
+ return getService(ReconciliationService.class).status(anyTypeKind, anyKey, resourceKey);
+ }
+
+ public void push(
+ final AnyTypeKind anyTypeKind,
+ final String anyKey,
+ final String resourceKey,
+ final PushTaskTO pushTask) {
+
+ getService(ReconciliationService.class).push(anyTypeKind, anyKey, resourceKey, pushTask);
+ }
+
+ public void pull(
+ final AnyTypeKind anyTypeKind,
+ final String anyKey,
+ final String resourceKey,
+ final PullTaskTO pullTask) {
+
+ getService(ReconciliationService.class).pull(anyTypeKind, anyKey, resourceKey, pullTask);
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
index b64ff9b..514d970 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
@@ -22,7 +22,6 @@ import java.util.List;
import java.util.Map;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.Response;
-import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.commons.status.StatusBean;
import org.apache.syncope.client.console.commons.status.StatusUtils;
@@ -69,7 +68,7 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
}
@Override
- public int searchCount(final String realm, final String fiql, final String type) {
+ public int count(final String realm, final String fiql, final String type) {
return getService(UserService.class).
search(new AnyQuery.Builder().realm(realm).fiql(fiql).page(1).size(1).build()).
getTotalCount();
@@ -97,29 +96,29 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
statusPatch.setKey(userKey);
statusPatch.setType(StatusPatchType.SUSPEND);
- BulkActionResult result;
+ BulkActionResult bulkActionResult;
synchronized (this) {
- result = new BulkActionResult();
- Map<String, BulkActionResult.Status> res = result.getResults();
+ bulkActionResult = new BulkActionResult();
+ Map<String, BulkActionResult.Status> results = bulkActionResult.getResults();
UserService service = getService(etag, UserService.class);
- @SuppressWarnings("unchecked")
- ProvisioningResult<UserTO> provisions = (ProvisioningResult<UserTO>) service.status(statusPatch).
- readEntity(ProvisioningResult.class);
+ ProvisioningResult<UserTO> provisioningResult = service.status(statusPatch).readEntity(
+ new GenericType<ProvisioningResult<UserTO>>() {
+ });
if (statusPatch.isOnSyncope()) {
- res.put(StringUtils.capitalize(Constants.SYNCOPE),
- "suspended".equalsIgnoreCase(provisions.getEntity().getStatus())
+ results.put(Constants.SYNCOPE,
+ "suspended".equalsIgnoreCase(provisioningResult.getEntity().getStatus())
? BulkActionResult.Status.SUCCESS
: BulkActionResult.Status.FAILURE);
}
- for (PropagationStatus status : provisions.getPropagationStatuses()) {
- res.put(status.getResource(), BulkActionResult.Status.valueOf(status.getStatus().name()));
+ for (PropagationStatus status : provisioningResult.getPropagationStatuses()) {
+ results.put(status.getResource(), BulkActionResult.Status.valueOf(status.getStatus().name()));
}
resetClient(UserService.class);
}
- return result;
+ return bulkActionResult;
}
public BulkActionResult reactivate(final String etag, final String userKey, final List<StatusBean> statuses) {
@@ -127,28 +126,28 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
statusPatch.setKey(userKey);
statusPatch.setType(StatusPatchType.REACTIVATE);
- BulkActionResult result;
+ BulkActionResult bulkActionResult;
synchronized (this) {
- result = new BulkActionResult();
- Map<String, BulkActionResult.Status> res = result.getResults();
+ bulkActionResult = new BulkActionResult();
+ Map<String, BulkActionResult.Status> results = bulkActionResult.getResults();
UserService service = getService(etag, UserService.class);
- @SuppressWarnings("unchecked")
- ProvisioningResult<UserTO> provisions = (ProvisioningResult<UserTO>) service.status(statusPatch).
- readEntity(ProvisioningResult.class);
+ ProvisioningResult<UserTO> provisioningResult = service.status(statusPatch).readEntity(
+ new GenericType<ProvisioningResult<UserTO>>() {
+ });
if (statusPatch.isOnSyncope()) {
- res.put(StringUtils.capitalize(Constants.SYNCOPE),
- "active".equalsIgnoreCase(provisions.getEntity().getStatus())
+ results.put(Constants.SYNCOPE,
+ "active".equalsIgnoreCase(provisioningResult.getEntity().getStatus())
? BulkActionResult.Status.SUCCESS
: BulkActionResult.Status.FAILURE);
}
- for (PropagationStatus status : provisions.getPropagationStatuses()) {
- res.put(status.getResource(), BulkActionResult.Status.valueOf(status.getStatus().name()));
+ for (PropagationStatus status : provisioningResult.getPropagationStatuses()) {
+ results.put(status.getResource(), BulkActionResult.Status.valueOf(status.getStatus().name()));
}
resetClient(UserService.class);
}
- return result;
+ return bulkActionResult;
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
index 087bdf8..f39e823 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
@@ -19,19 +19,20 @@
package org.apache.syncope.client.console.status;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
+import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.commons.DirectoryDataProvider;
import org.apache.syncope.client.console.commons.status.AbstractStatusBeanProvider;
-import org.apache.syncope.client.console.commons.status.ConnObjectWrapper;
import org.apache.syncope.client.console.commons.status.Status;
import org.apache.syncope.client.console.commons.status.StatusBean;
import org.apache.syncope.client.console.commons.status.StatusUtils;
import org.apache.syncope.client.console.panels.DirectoryPanel;
import org.apache.syncope.client.console.panels.AjaxDataTablePanel;
-import org.apache.syncope.client.console.panels.ConnObjectDetails;
import org.apache.syncope.client.console.panels.ModalPanel;
import org.apache.syncope.client.console.panels.MultilevelPanel;
import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
@@ -42,9 +43,15 @@ import org.apache.syncope.client.console.rest.UserRestClient;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
+import org.apache.syncope.common.lib.to.AnyObjectTO;
import org.apache.syncope.common.lib.to.AnyTO;
+import org.apache.syncope.common.lib.to.EntityTO;
import org.apache.syncope.common.lib.to.GroupTO;
+import org.apache.syncope.common.lib.to.PullTaskTO;
+import org.apache.syncope.common.lib.to.PushTaskTO;
+import org.apache.syncope.common.lib.to.ReconStatus;
import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.StandardEntitlement;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -70,9 +77,11 @@ public class AnyStatusDirectoryPanel
private final AnyTO anyTO;
+ private final AnyTypeKind anyTypeKind;
+
private final boolean statusOnly;
- private final ResourceRestClient resourceRestClient = new ResourceRestClient();
+ private final List<String> resources;
public AnyStatusDirectoryPanel(
final BaseModal<?> baseModal,
@@ -91,12 +100,19 @@ public class AnyStatusDirectoryPanel
if (anyTO instanceof UserTO) {
this.restClient = new UserRestClient();
+ anyTypeKind = AnyTypeKind.USER;
} else if (anyTO instanceof GroupTO) {
this.restClient = new GroupRestClient();
+ anyTypeKind = AnyTypeKind.GROUP;
} else {
this.restClient = new AnyObjectRestClient();
+ anyTypeKind = AnyTypeKind.ANY_OBJECT;
}
+ resources = new ResourceRestClient().list().stream().
+ filter(resource -> resource.getProvision(anyTO.getType()).isPresent()).
+ map(EntityTO::getKey).collect(Collectors.toList());
+
initResultTable();
}
@@ -126,7 +142,9 @@ public class AnyStatusDirectoryPanel
@Override
protected void onComponentTag(final ComponentTag tag) {
- if (model.getObject().isLinked()) {
+ if (anyTO.getResources().contains(model.getObject().getResource())
+ || Constants.SYNCOPE.equalsIgnoreCase(model.getObject().getResource())) {
+
super.onComponentTag(tag);
} else {
tag.put("style", "font-style: italic");
@@ -136,26 +154,29 @@ public class AnyStatusDirectoryPanel
}
});
- columns.add(new PropertyColumn<>(
- new StringResourceModel("connObjectLink", this), "connObjectLink", "connObjectLink"));
+ if (statusOnly) {
+ columns.add(new PropertyColumn<>(
+ new StringResourceModel("connObjectLink", this), "connObjectLink", "connObjectLink"));
- columns.add(new AbstractColumn<StatusBean, String>(new StringResourceModel("status", this)) {
+ columns.add(new AbstractColumn<StatusBean, String>(new StringResourceModel("status", this)) {
- private static final long serialVersionUID = -3503023501954863131L;
+ private static final long serialVersionUID = -3503023501954863131L;
- @Override
- public void populateItem(
- final Item<ICellPopulator<StatusBean>> cellItem,
- final String componentId,
- final IModel<StatusBean> model) {
+ @Override
+ public void populateItem(
+ final Item<ICellPopulator<StatusBean>> cellItem,
+ final String componentId,
+ final IModel<StatusBean> model) {
- if (model.getObject().isLinked()) {
- cellItem.add(StatusUtils.getStatusImage(componentId, model.getObject().getStatus()));
- } else {
- cellItem.add(new Label(componentId, ""));
+ if (model.getObject().isLinked()) {
+ cellItem.add(StatusUtils.getStatusImage(componentId, model.getObject().getStatus()));
+ } else {
+ cellItem.add(new Label(componentId, ""));
+ }
}
- }
- });
+ });
+ }
+
return columns;
}
@@ -163,32 +184,70 @@ public class AnyStatusDirectoryPanel
public ActionsPanel<StatusBean> getActions(final IModel<StatusBean> model) {
final ActionsPanel<StatusBean> panel = super.getActions(model);
- panel.add(new ActionLink<StatusBean>() {
+ if (!Constants.SYNCOPE.equalsIgnoreCase(model.getObject().getResource())) {
+ panel.add(new ActionLink<StatusBean>() {
- private static final long serialVersionUID = -7978723352517770645L;
+ private static final long serialVersionUID = -7978723352517770645L;
- @Override
- protected boolean statusCondition(final StatusBean bean) {
- return bean != null && bean.getConnObjectLink() != null
- && !bean.getResource().equalsIgnoreCase(Constants.SYNCOPE);
- }
+ @Override
+ public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+ multiLevelPanelRef.next(bean.getResource(),
+ new ReconStatusPanel(bean.getResource(), anyTypeKind, anyTO.getKey()),
+ target);
+ target.add(multiLevelPanelRef);
+ AnyStatusDirectoryPanel.this.getTogglePanel().close(target);
+ }
+ }, ActionLink.ActionType.VIEW, StandardEntitlement.RESOURCE_GET_CONNOBJECT);
+ }
- @Override
- public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
- multiLevelPanelRef.next(bean.getResource(),
- new ConnObjectDetails(resourceRestClient.readConnObject(
- bean.getResource(), anyTO.getType(), anyTO.getKey())), target);
- target.add(multiLevelPanelRef);
- AnyStatusDirectoryPanel.this.getTogglePanel().close(target);
- }
- }, ActionLink.ActionType.VIEW, StandardEntitlement.RESOURCE_GET_CONNOBJECT);
+ if (!statusOnly) {
+ panel.add(new ActionLink<StatusBean>() {
+
+ private static final long serialVersionUID = -7978723352517770645L;
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+ multiLevelPanelRef.next("PUSH " + bean.getResource(),
+ new ReconTaskPanel(
+ bean.getResource(),
+ new PushTaskTO(),
+ anyTypeKind,
+ anyTO.getKey(),
+ multiLevelPanelRef,
+ pageRef),
+ target);
+ target.add(multiLevelPanelRef);
+ AnyStatusDirectoryPanel.this.getTogglePanel().close(target);
+ }
+ }, ActionLink.ActionType.RECONCILIATION_PUSH, StandardEntitlement.TASK_EXECUTE);
+
+ panel.add(new ActionLink<StatusBean>() {
+
+ private static final long serialVersionUID = -7978723352517770645L;
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+ multiLevelPanelRef.next("PULL " + bean.getResource(),
+ new ReconTaskPanel(
+ bean.getResource(),
+ new PullTaskTO(),
+ anyTypeKind,
+ anyTO.getKey(),
+ multiLevelPanelRef,
+ pageRef),
+ target);
+ target.add(multiLevelPanelRef);
+ AnyStatusDirectoryPanel.this.getTogglePanel().close(target);
+ }
+ }, ActionLink.ActionType.RECONCILIATION_PULL, StandardEntitlement.TASK_EXECUTE);
+ }
return panel;
}
@Override
protected Collection<ActionLink.ActionType> getBulkActions() {
- final List<ActionLink.ActionType> bulkActions = new ArrayList<>();
+ List<ActionLink.ActionType> bulkActions = new ArrayList<>();
if (statusOnly) {
bulkActions.add(ActionLink.ActionType.SUSPEND);
bulkActions.add(ActionLink.ActionType.REACTIVATE);
@@ -199,14 +258,13 @@ public class AnyStatusDirectoryPanel
bulkActions.add(ActionLink.ActionType.PROVISION);
bulkActions.add(ActionLink.ActionType.ASSIGN);
bulkActions.add(ActionLink.ActionType.UNASSIGN);
-
}
return bulkActions;
}
@Override
- protected AttributableStatusProvider dataProvider() {
- return new AttributableStatusProvider();
+ protected AnyStatusProvider dataProvider() {
+ return new AnyStatusProvider();
}
@Override
@@ -214,74 +272,82 @@ public class AnyStatusDirectoryPanel
return StringUtils.EMPTY;
}
- public class AttributableStatusProvider extends AbstractStatusBeanProvider {
+ protected class AnyStatusProvider extends AbstractStatusBeanProvider {
private static final long serialVersionUID = 4586969457669796621L;
- private final StatusUtils statusUtils;
-
- AttributableStatusProvider() {
- super(statusOnly ? "resource" : "connObjectLink");
- statusUtils = new StatusUtils();
+ AnyStatusProvider() {
+ super("resource");
}
- @SuppressWarnings("unchecked")
@Override
- public List<StatusBean> getStatusBeans() {
+ protected List<StatusBean> getStatusBeans(final long first, final long count) {
// this is required to retrieve updated data by reloading table
final AnyTO actual = restClient.read(anyTO.getKey());
- final List<String> resources = new ArrayList<>();
- new ResourceRestClient().list().forEach(resourceTO -> {
- resources.add(resourceTO.getKey());
- });
-
- final List<ConnObjectWrapper> connObjects = statusUtils.getConnectorObjects(actual);
-
- final List<StatusBean> statusBeans = new ArrayList<>(connObjects.size() + 1);
+ List<StatusBean> statusBeans = actual.getResources().stream().map(resource -> {
+ List<ReconStatus> statuses = Collections.emptyList();
+ if (statusOnly) {
+ statuses = StatusUtils.
+ getReconStatuses(anyTypeKind, anyTO.getKey(), Arrays.asList(resource));
+ }
- connObjects.forEach(entry -> {
- final StatusBean statusBean = statusUtils.getStatusBean(actual,
- entry.getResourceName(),
- entry.getConnObjectTO(),
+ return StatusUtils.getStatusBean(
+ actual,
+ resource,
+ statuses.isEmpty() ? null : statuses.get(0).getOnResource(),
actual instanceof GroupTO);
-
- statusBeans.add(statusBean);
- resources.remove(entry.getResourceName());
- });
+ }).collect(Collectors.toList());
if (statusOnly) {
- final StatusBean syncope = new StatusBean(actual, "Syncope");
+ StatusBean syncope = new StatusBean(actual, Constants.SYNCOPE);
+ switch (anyTypeKind) {
+ case USER:
+ syncope.setConnObjectLink(((UserTO) actual).getUsername());
+ break;
+
+ case GROUP:
+ syncope.setConnObjectLink(((GroupTO) actual).getName());
+ break;
- syncope.setConnObjectLink(((UserTO) actual).getUsername());
+ case ANY_OBJECT:
+ syncope.setConnObjectLink(((AnyObjectTO) actual).getName());
+ break;
+
+ default:
+ }
Status syncopeStatus = Status.UNDEFINED;
- if (((UserTO) actual).getStatus() != null) {
+ if (actual.getStatus() != null) {
try {
- syncopeStatus = Status.valueOf(((UserTO) actual).getStatus().toUpperCase());
+ syncopeStatus = Status.valueOf(actual.getStatus().toUpperCase());
} catch (IllegalArgumentException e) {
- LOG.warn("Unexpected status found: {}", ((UserTO) actual).getStatus(), e);
+ LOG.warn("Unexpected status found: {}", actual.getStatus(), e);
}
}
syncope.setStatus(syncopeStatus);
- statusBeans.add(syncope);
+ Collections.sort(statusBeans, comparator);
+ statusBeans.add(0, syncope);
} else {
- resources.stream().
- map(resource -> statusUtils.getStatusBean(actual,
- resource,
- null,
- actual instanceof GroupTO)).
- map(statusBean -> {
+ statusBeans.addAll(resources.stream().
+ filter(resource -> !anyTO.getResources().contains(resource)).
+ map(resource -> {
+ StatusBean statusBean = StatusUtils.getStatusBean(
+ actual,
+ resource,
+ null,
+ actual instanceof GroupTO);
statusBean.setLinked(false);
return statusBean;
- }).
- forEachOrdered(statusBean -> {
- statusBeans.add(statusBean);
- });
+ }).collect(Collectors.toList()));
+
+ Collections.sort(statusBeans, comparator);
}
- return statusBeans;
+ return first == -1 && count == -1
+ ? statusBeans
+ : statusBeans.subList((int) first, (int) first + (int) count);
}
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/4da5dccc/client/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusPanel.java
new file mode 100644
index 0000000..91dc9ac
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusPanel.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.status;
+
+import java.util.Arrays;
+import java.util.List;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.commons.status.StatusUtils;
+import org.apache.syncope.client.console.panels.RemoteObjectPanel;
+import org.apache.syncope.client.console.wizards.any.ConnObjectPanel;
+import org.apache.syncope.common.lib.to.ConnObjectTO;
+import org.apache.syncope.common.lib.to.ReconStatus;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
+
+public class ReconStatusPanel extends RemoteObjectPanel {
+
+ private static final long serialVersionUID = 8000309881812037770L;
+
+ private final String resource;
+
+ private final AnyTypeKind anyTypeKind;
+
+ private final String anyKey;
+
+ public ReconStatusPanel(
+ final String resource,
+ final AnyTypeKind anyTypeKind,
+ final String anyKey) {
+
+ this.resource = resource;
+ this.anyTypeKind = anyTypeKind;
+ this.anyKey = anyKey;
+
+ add(new ConnObjectPanel(
+ REMOTE_OBJECT_PANEL_ID,
+ Pair.<IModel<?>, IModel<?>>of(Model.of(Constants.SYNCOPE), new ResourceModel("resource")),
+ getConnObjectTOs(),
+ false));
+ }
+
+ @Override
+ protected Pair<ConnObjectTO, ConnObjectTO> getConnObjectTOs() {
+ List<ReconStatus> statuses =
+ StatusUtils.getReconStatuses(anyTypeKind, anyKey, Arrays.asList(resource));
+
+ return statuses.isEmpty() ? null : Pair.of(statuses.get(0).getOnSyncope(), statuses.get(0).getOnResource());
+ }
+}
[4/8] syncope git commit: [SYNCOPE-1299] Console features implemented
Posted by il...@apache.org.
[SYNCOPE-1299] Console features implemented
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/a660a26b
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/a660a26b
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/a660a26b
Branch: refs/heads/2_0_X
Commit: a660a26b5c1fd4198009f08535ec437e80cf86e3
Parents: 5965dfa
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Apr 17 16:01:13 2018 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Apr 17 16:01:13 2018 +0200
----------------------------------------------------------------------
.../approvals/ApprovalDirectoryPanel.java | 18 +-
.../client/console/bulk/BulkContent.java | 19 +-
.../client/console/commons/AnyDataProvider.java | 4 +-
.../commons/ResourceStatusDataProvider.java | 143 -----------
.../status/AbstractStatusBeanProvider.java | 15 +-
.../commons/status/ConnObjectWrapper.java | 10 +-
.../console/commons/status/StatusBean.java | 13 +-
.../console/commons/status/StatusUtils.java | 118 ++++------
.../console/panels/AjaxDataTablePanel.java | 10 +-
.../console/panels/AnyDirectoryPanel.java | 17 +-
.../console/panels/ConnObjectDetails.java | 9 +-
.../client/console/panels/ConnObjects.java | 2 +-
.../client/console/panels/MultilevelPanel.java | 6 +-
.../console/panels/PropagationErrorPanel.java | 30 +++
.../syncope/client/console/panels/Realm.java | 39 ++-
.../console/panels/RealmWizardBuilder.java | 8 +-
.../console/panels/RemoteObjectPanel.java | 5 +-
.../console/rest/AbstractAnyRestClient.java | 2 +-
.../console/rest/AnyObjectRestClient.java | 2 +-
.../client/console/rest/GroupRestClient.java | 2 +-
.../console/rest/ReconciliationRestClient.java | 52 ++++
.../client/console/rest/UserRestClient.java | 47 ++--
.../console/status/AnyStatusDirectoryPanel.java | 236 +++++++++++++------
.../client/console/status/ReconStatusPanel.java | 68 ++++++
.../client/console/status/ReconTaskPanel.java | 155 ++++++++++++
.../status/ResourceStatusDirectoryPanel.java | 210 ++++++++++++++---
.../client/console/status/StatusModal.java | 4 +-
.../console/tasks/SchedTaskWizardBuilder.java | 2 +-
.../console/topology/TopologyTogglePanel.java | 7 +-
.../wicket/markup/html/form/ActionLink.java | 2 +
.../console/widgets/ReconDetailsModalPanel.java | 178 ++++++++++++++
.../ReconciliationDetailsModalPanel.java | 177 --------------
.../console/widgets/ReconciliationWidget.java | 2 +-
.../wizards/any/AnyObjectWizardBuilder.java | 12 +-
.../console/wizards/any/ConnObjectPanel.java | 61 ++---
.../console/wizards/any/GroupWizardBuilder.java | 12 +-
.../client/console/wizards/any/StatusPanel.java | 110 +++++----
.../console/wizards/any/UserWizardBuilder.java | 12 +-
.../SyncopeConsoleApplication.properties | 2 +
.../SyncopeConsoleApplication_it.properties | 2 +
.../SyncopeConsoleApplication_ja.properties | 2 +
.../SyncopeConsoleApplication_pt_BR.properties | 2 +
.../SyncopeConsoleApplication_ru.properties | 2 +
.../client/console/approvals/ApprovalModal.html | 9 +-
.../client/console/bulk/BulkActionModal.html | 9 +-
.../client/console/bulk/BulkContent.html | 25 +-
.../notifications/NotificationTasks.html | 1 -
.../NotificationWizardBuilder$Abouts.html | 13 +-
.../NotificationWizardBuilder$Details.html | 37 ++-
.../NotificationWizardBuilder$Events.html | 9 +-
.../NotificationWizardBuilder$Recipients.html | 48 ++--
.../client/console/panels/MultilevelPanel.html | 1 -
.../console/panels/PropagationErrorPanel.html | 24 ++
.../console/panels/RemoteObjectPanel.html | 3 +-
.../panels/search/SearchClausePanel.html | 41 ++--
.../reports/ReportWizardBuilder$Schedule.html | 9 +-
.../client/console/status/AnyStatusModal.html | 3 +-
.../client/console/status/ReconTaskPanel.html | 37 +++
.../console/topology/TopologyTogglePanel.html | 4 +-
.../topology/TopologyTogglePanel.properties | 4 +-
.../topology/TopologyTogglePanel_it.properties | 4 +-
.../topology/TopologyTogglePanel_ja.properties | 4 +-
.../TopologyTogglePanel_pt_BR.properties | 4 +-
.../topology/TopologyTogglePanel_ru.properties | 4 +-
.../markup/html/form/ActionPanel.properties | 10 +-
.../markup/html/form/ActionPanel_it.properties | 8 +-
.../markup/html/form/ActionPanel_ja.properties | 8 +-
.../html/form/ActionPanel_pt_BR.properties | 8 +-
.../markup/html/form/ActionPanel_ru.properties | 8 +-
.../markup/html/form/ActionsPanel.properties | 10 +-
.../markup/html/form/ActionsPanel_it.properties | 8 +-
.../markup/html/form/ActionsPanel_ja.properties | 8 +-
.../html/form/ActionsPanel_pt_BR.properties | 8 +-
.../markup/html/form/ActionsPanel_ru.properties | 8 +-
.../form/preview/AbstractBinaryPreviewer.html | 11 +-
.../html/form/preview/BinaryImagePreviewer.html | 9 +-
.../html/form/preview/BinaryPDFPreviewer.html | 28 +--
.../html/form/preview/DefaultPreviewer.html | 15 +-
.../console/widgets/ReconDetailsModalPanel.html | 23 ++
.../ReconciliationDetailsModalPanel.html | 23 --
.../console/wizards/AbstractMappingPanel.html | 147 ++++++------
.../console/wizards/any/AnnotatedBeanPanel.html | 69 +++---
.../console/wizards/any/ConnObjectPanel.html | 10 +-
.../client/console/wizards/any/Details.html | 23 +-
.../console/wizards/any/DynamicMemberships.html | 15 +-
.../client/console/wizards/any/Ownership.html | 59 +++--
.../any/Relationships$Specification.html | 39 ++-
.../console/wizards/any/Relationships.html | 35 ++-
.../client/console/wizards/any/Resources.html | 29 +--
.../client/console/wizards/any/ResultPage.html | 15 +-
.../client/console/wizards/any/Roles.html | 49 ++--
.../client/console/wizards/any/StatusPanel.html | 1 -
.../wizards/any/UserInformationPanel.html | 77 +++---
.../wizards/role/RoleWizardBuilder$Details.html | 15 +-
.../role/RoleWizardBuilder$DynRealms.html | 13 +-
.../role/RoleWizardBuilder$Entitlements.html | 13 +-
.../wizards/role/RoleWizardBuilder$Realms.html | 13 +-
.../syncope/common/lib/to/ReconStatus.java | 67 ++++++
.../common/lib/to/ReconciliationStatus.java | 56 -----
.../syncope/common/lib/types/AnyTypeKind.java | 8 +
.../rest/api/service/ReconciliationService.java | 4 +-
.../syncope/core/logic/ReconciliationLogic.java | 10 +-
.../core/persistence/jpa/dao/JPARoleDAO.java | 3 +-
.../java/pushpull/SinglePullJobDelegate.java | 1 +
.../java/pushpull/SinglePushJobDelegate.java | 1 +
.../cxf/service/ReconciliationServiceImpl.java | 4 +-
.../syncope/fit/console/BulkActionITCase.java | 20 +-
.../syncope/fit/console/RealmsITCase.java | 17 +-
.../syncope/fit/console/TopologyITCase.java | 2 +-
.../syncope/fit/core/ReconciliationITCase.java | 6 +-
110 files changed, 1812 insertions(+), 1324 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
index a324ea3..72d2916 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDirectoryPanel.java
@@ -327,13 +327,13 @@ public class ApprovalDirectoryPanel
protected Serializable onApplyInternal(final AnyWrapper<UserTO> modelObject) {
UserTO inner = modelObject.getInnerObject();
- ProvisioningResult<UserTO> actual;
+ ProvisioningResult<UserTO> result;
if (formTO.getUserPatch() == null) {
- actual = new ProvisioningResult<>();
+ result = new ProvisioningResult<>();
UserTO user = new UserWorkflowRestClient().executeTask("default", inner);
- actual.setEntity(user);
- claimForm(restClient.getFormForUser(actual.getEntity().getKey()).getTaskId());
+ result.setEntity(user);
+ claimForm(restClient.getFormForUser(result.getEntity().getKey()).getTaskId());
} else {
UserPatch patch = AnyOperations.diff(inner, formTO.getUserTO(), false);
@@ -346,11 +346,11 @@ public class ApprovalDirectoryPanel
}
// update just if it is changed
if (patch.isEmpty()) {
- actual = new ProvisioningResult<>();
- actual.setEntity(inner);
+ result = new ProvisioningResult<>();
+ result.setEntity(inner);
} else {
- actual = userRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
- WorkflowFormTO workFlowTO = restClient.getFormForUser(actual.getEntity().getKey());
+ result = userRestClient.update(getOriginalItem().getInnerObject().getETagValue(), patch);
+ WorkflowFormTO workFlowTO = restClient.getFormForUser(result.getEntity().getKey());
if (workFlowTO != null) {
claimForm(workFlowTO.getTaskId());
}
@@ -358,7 +358,7 @@ public class ApprovalDirectoryPanel
}
- return actual;
+ return result;
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java b/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java
index c58bce0..a72de6a 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/bulk/BulkContent.java
@@ -202,37 +202,36 @@ public class BulkContent<T extends Serializable, S> extends MultilevelPanel.Seco
for (Map.Entry<String, List<StatusBean>> entry : beans.entrySet()) {
final String etag = anyRestClient.read(entry.getKey()).getETagValue();
- switch (actionToBeAddresed.name()) {
- case "DEPROVISION":
+ switch (actionToBeAddresed) {
+ case DEPROVISION:
res = anyRestClient.deprovision(etag, entry.getKey(), entry.getValue());
break;
- case "UNASSIGN":
+ case UNASSIGN:
res = anyRestClient.unassign(etag, entry.getKey(), entry.getValue());
break;
- case "UNLINK":
+ case UNLINK:
res = anyRestClient.unlink(etag, entry.getKey(), entry.getValue());
break;
- case "ASSIGN":
+ case ASSIGN:
res = anyRestClient.assign(etag, entry.getKey(), entry.getValue());
break;
- case "LINK":
+ case LINK:
res = anyRestClient.link(etag, entry.getKey(), entry.getValue());
break;
- case "PROVISION":
+ case PROVISION:
res = anyRestClient.provision(etag, entry.getKey(), entry.getValue());
break;
- case "REACTIVATE":
+ case REACTIVATE:
res = ((UserRestClient) anyRestClient).
reactivate(etag, entry.getKey(), entry.getValue());
fieldName = "resource";
break;
- case "SUSPEND":
+ case SUSPEND:
res = ((UserRestClient) anyRestClient).
suspend(etag, entry.getKey(), entry.getValue());
fieldName = "resource";
break;
default:
- break;
}
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
index ff4161c..0eca373 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
@@ -121,9 +121,9 @@ public class AnyDataProvider<A extends AnyTO> extends DirectoryDataProvider<A> {
try {
if (filtered) {
- result = fiql == null ? 0 : restClient.searchCount(realm, fiql, type);
+ result = fiql == null ? 0 : restClient.count(realm, fiql, type);
} else {
- result = restClient.searchCount(realm, null, type);
+ result = restClient.count(realm, null, type);
}
} catch (Exception e) {
LOG.error("While requesting for size() with FIQL {}", fiql, e);
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/commons/ResourceStatusDataProvider.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/ResourceStatusDataProvider.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/ResourceStatusDataProvider.java
deleted file mode 100644
index e54e4e6..0000000
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/ResourceStatusDataProvider.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.syncope.client.console.commons;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.Transformer;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.syncope.client.console.commons.status.ConnObjectWrapper;
-import org.apache.syncope.client.console.commons.status.StatusBean;
-import org.apache.syncope.client.console.commons.status.StatusUtils;
-import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
-import org.apache.syncope.client.console.rest.AnyObjectRestClient;
-import org.apache.syncope.client.console.rest.GroupRestClient;
-import org.apache.syncope.client.console.rest.UserRestClient;
-import org.apache.syncope.client.lib.SyncopeClient;
-import org.apache.syncope.common.lib.search.AbstractFiqlSearchConditionBuilder;
-import org.apache.syncope.common.lib.to.AnyTO;
-import org.apache.syncope.common.lib.to.GroupTO;
-import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
-import org.apache.wicket.model.CompoundPropertyModel;
-import org.apache.wicket.model.IModel;
-
-public class ResourceStatusDataProvider extends DirectoryDataProvider<StatusBean> {
-
- private static final long serialVersionUID = 6267494272884913376L;
-
- private final StatusUtils statusUtils;
-
- private final String resource;
-
- private final SortableDataProviderComparator<StatusBean> comparator;
-
- private final AbstractAnyRestClient<? extends AnyTO> restClient;
-
- protected String fiql;
-
- private final String realm;
-
- private final String type;
-
- public ResourceStatusDataProvider(
- final String type,
- final String resource,
- final int paginatorRows,
- final String realm) {
-
- super(paginatorRows);
- statusUtils = new StatusUtils();
- this.resource = resource;
-
- AbstractFiqlSearchConditionBuilder bld;
-
- if (StringUtils.isEmpty(type)) {
- this.fiql = null;
- restClient = null;
- } else {
- switch (type) {
- case "USER":
- bld = SyncopeClient.getUserSearchConditionBuilder();
- restClient = new UserRestClient();
- break;
- case "GROUP":
- bld = SyncopeClient.getGroupSearchConditionBuilder();
- restClient = new GroupRestClient();
- break;
- default:
- bld = SyncopeClient.getAnyObjectSearchConditionBuilder(type);
- restClient = new AnyObjectRestClient();
- }
-
- this.fiql = bld.hasResources(resource).query();
- }
-
- setSort("connObjectLink", SortOrder.ASCENDING);
-
- this.comparator = new SortableDataProviderComparator<>(this);
-
- this.realm = realm;
- this.type = type;
- }
-
- @Override
- public Iterator<StatusBean> iterator(final long first, final long count) {
- if (fiql == null) {
- return Collections.<StatusBean>emptyList().iterator();
- }
-
- final int page = ((int) first / paginatorRows);
- List<? extends AnyTO> result =
- restClient.search(realm, fiql, (page < 0 ? 0 : page) + 1, paginatorRows, getSort(), type);
-
- List<StatusBean> res = CollectionUtils.collect(result, new Transformer<AnyTO, StatusBean>() {
-
- @Override
- public StatusBean transform(final AnyTO input) {
- final List<ConnObjectWrapper> connObjects =
- statusUtils.getConnectorObjects(input, Collections.singletonList(resource));
-
- return statusUtils.getStatusBean(
- input,
- resource,
- connObjects.isEmpty() ? null : connObjects.iterator().next().getConnObjectTO(),
- input instanceof GroupTO);
- }
- }, new ArrayList<StatusBean>());
-
- Collections.sort(res, comparator);
- return res.iterator();
- }
-
- @Override
- public long size() {
- if (fiql == null) {
- return 0;
- }
- return restClient.searchCount(realm, fiql, type);
- }
-
- @Override
- public IModel<StatusBean> model(final StatusBean object) {
- return new CompoundPropertyModel<>(object);
- }
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/AbstractStatusBeanProvider.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/AbstractStatusBeanProvider.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/AbstractStatusBeanProvider.java
index 7d9a688..50619e5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/AbstractStatusBeanProvider.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/AbstractStatusBeanProvider.java
@@ -18,7 +18,6 @@
*/
package org.apache.syncope.client.console.commons.status;
-import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.apache.syncope.client.console.commons.DirectoryDataProvider;
@@ -31,7 +30,7 @@ public abstract class AbstractStatusBeanProvider extends DirectoryDataProvider<S
private static final long serialVersionUID = 4287357360778016173L;
- private final SortableDataProviderComparator<StatusBean> comparator;
+ protected final SortableDataProviderComparator<StatusBean> comparator;
public AbstractStatusBeanProvider(final String sort) {
super(10);
@@ -42,29 +41,27 @@ public abstract class AbstractStatusBeanProvider extends DirectoryDataProvider<S
@Override
public Iterator<StatusBean> iterator(final long first, final long count) {
- List<StatusBean> list = getStatusBeans();
- Collections.sort(list, comparator);
- return list.subList((int) first, (int) first + (int) count).iterator();
+ return getStatusBeans(first, count).iterator();
}
@Override
public long size() {
- return getStatusBeans().size();
+ return getStatusBeans(-1, -1).size();
}
@Override
- public IModel<StatusBean> model(final StatusBean resource) {
+ public IModel<StatusBean> model(final StatusBean statusBean) {
return new AbstractReadOnlyModel<StatusBean>() {
private static final long serialVersionUID = -7802635613997243712L;
@Override
public StatusBean getObject() {
- return resource;
+ return statusBean;
}
};
}
- public abstract List<StatusBean> getStatusBeans();
+ protected abstract List<StatusBean> getStatusBeans(long first, long count);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java
index 06ccac7..14dca77 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/ConnObjectWrapper.java
@@ -28,13 +28,13 @@ public class ConnObjectWrapper implements Serializable {
private final AnyTO any;
- private final String resourceName;
+ private final String resource;
private final ConnObjectTO connObjectTO;
- public ConnObjectWrapper(final AnyTO any, final String resourceName, final ConnObjectTO connObjectTO) {
+ public ConnObjectWrapper(final AnyTO any, final String resource, final ConnObjectTO connObjectTO) {
this.any = any;
- this.resourceName = resourceName;
+ this.resource = resource;
this.connObjectTO = connObjectTO;
}
@@ -42,8 +42,8 @@ public class ConnObjectWrapper implements Serializable {
return any;
}
- public String getResourceName() {
- return resourceName;
+ public String getResource() {
+ return resource;
}
public ConnObjectTO getConnObjectTO() {
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java
index fe7ce9f..fc834b5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusBean.java
@@ -23,6 +23,7 @@ import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
+import org.apache.syncope.common.lib.to.AnyObjectTO;
import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.to.GroupTO;
import org.apache.syncope.common.lib.to.RealmTO;
@@ -44,18 +45,20 @@ public class StatusBean implements Serializable {
private boolean linked = true;
- public StatusBean(final AnyTO any, final String resourceName) {
+ public StatusBean(final AnyTO any, final String resource) {
this.key = any.getKey();
this.name = any instanceof UserTO
? ((UserTO) any).getUsername()
- : any instanceof GroupTO ? ((GroupTO) any).getName() : String.valueOf(any.getKey());
- this.resource = resourceName;
+ : any instanceof GroupTO
+ ? ((GroupTO) any).getName()
+ : ((AnyObjectTO) any).getName();
+ this.resource = resource;
}
- public StatusBean(final RealmTO realm, final String resourceName) {
+ public StatusBean(final RealmTO realm, final String resource) {
this.key = realm.getKey();
this.name = realm.getFullPath();
- this.resource = resourceName;
+ this.resource = resource;
}
public String getConnObjectLink() {
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java
index 9828b0c..9f4bd6c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java
@@ -22,17 +22,21 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.PredicateUtils;
+import org.apache.commons.collections4.Transformer;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.client.console.commons.ConnIdSpecialName;
import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.panels.LabelPanel;
-import org.apache.syncope.client.console.rest.ResourceRestClient;
+import org.apache.syncope.client.console.rest.ReconciliationRestClient;
import org.apache.syncope.common.lib.patch.PasswordPatch;
import org.apache.syncope.common.lib.patch.StatusPatch;
import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.to.AttrTO;
import org.apache.syncope.common.lib.to.ConnObjectTO;
-import org.apache.syncope.common.lib.to.RealmTO;
+import org.apache.syncope.common.lib.to.ReconStatus;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.PropagationTaskExecStatus;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.basic.Label;
@@ -40,118 +44,72 @@ import org.apache.wicket.markup.html.panel.Panel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class StatusUtils implements Serializable {
+public final class StatusUtils implements Serializable {
private static final long serialVersionUID = 7238009174387184309L;
private static final Logger LOG = LoggerFactory.getLogger(StatusUtils.class);
- private final ResourceRestClient restClient = new ResourceRestClient();
+ private static final ReconciliationRestClient RECONCILIATION_REST_CLIENT = new ReconciliationRestClient();
- public List<ConnObjectWrapper> getConnectorObjects(final AnyTO any) {
- final List<ConnObjectWrapper> objects = new ArrayList<>();
- objects.addAll(getConnectorObjects(any, any.getResources()));
- return objects;
- }
-
- public List<ConnObjectWrapper> getConnectorObjects(
- final Collection<AnyTO> anys, final Collection<String> resources) {
-
- final List<ConnObjectWrapper> objects = new ArrayList<>();
-
- for (AnyTO any : anys) {
- objects.addAll(getConnectorObjects(any, resources));
- }
-
- return objects;
- }
+ public static List<ReconStatus> getReconStatuses(
+ final AnyTypeKind anyTypeKind, final String anyKey, final Collection<String> resources) {
- public List<ConnObjectWrapper> getConnectorObjects(
- final AnyTO any, final Collection<String> resources) {
+ List<ReconStatus> result = CollectionUtils.collect(resources, new Transformer<String, ReconStatus>() {
- final List<ConnObjectWrapper> objects = new ArrayList<>();
-
- for (String resourceName : resources) {
- ConnObjectTO objectTO = null;
- try {
- objectTO = restClient.readConnObject(resourceName, any.getType(), any.getKey());
- } catch (Exception e) {
- LOG.warn("ConnObject '{}' not found on resource '{}'", any.getKey(), resourceName);
+ @Override
+ public ReconStatus transform(final String resource) {
+ try {
+ return RECONCILIATION_REST_CLIENT.status(anyTypeKind, anyKey, resource);
+ } catch (Exception e) {
+ LOG.warn("Unexpected error for {} {} on {}", anyTypeKind, anyKey, resource, e);
+ return null;
+ }
}
+ }, new ArrayList<ReconStatus>());
+ CollectionUtils.filter(result, PredicateUtils.notNullPredicate());
- objects.add(new ConnObjectWrapper(any, resourceName, objectTO));
- }
-
- return objects;
+ return result;
}
- public StatusBean getStatusBean(
+ public static StatusBean getStatusBean(
final AnyTO anyTO,
- final String resourceName,
- final ConnObjectTO objectTO,
+ final String resource,
+ final ConnObjectTO connObjectTO,
final boolean notUser) {
- final StatusBean statusBean = new StatusBean(anyTO, resourceName);
+ StatusBean statusBean = new StatusBean(anyTO, resource);
- if (objectTO != null) {
- final Boolean enabled = isEnabled(objectTO);
-
- final Status status = enabled == null
+ if (connObjectTO != null) {
+ Boolean enabled = isEnabled(connObjectTO);
+ statusBean.setStatus(enabled == null
? (notUser ? Status.ACTIVE : Status.UNDEFINED)
: enabled
? Status.ACTIVE
- : Status.SUSPENDED;
-
- String connObjectLink = getConnObjectLink(objectTO);
+ : Status.SUSPENDED);
- statusBean.setStatus(status);
- statusBean.setConnObjectLink(connObjectLink);
+ statusBean.setConnObjectLink(getConnObjectLink(connObjectTO));
}
return statusBean;
}
- public StatusBean getStatusBean(
- final RealmTO anyTO,
- final String resourceName,
- final ConnObjectTO objectTO) {
-
- final StatusBean statusBean = new StatusBean(anyTO, resourceName);
-
- if (objectTO != null) {
- final Boolean enabled = isEnabled(objectTO);
-
- final Status status = enabled == null
- ? Status.ACTIVE
- : enabled
- ? Status.ACTIVE
- : Status.SUSPENDED;
-
- String connObjectLink = getConnObjectLink(objectTO);
-
- statusBean.setStatus(status);
- statusBean.setConnObjectLink(connObjectLink);
- }
-
- return statusBean;
- }
-
- private Boolean isEnabled(final ConnObjectTO objectTO) {
- final AttrTO status = objectTO.getAttr(ConnIdSpecialName.ENABLE);
+ private static Boolean isEnabled(final ConnObjectTO objectTO) {
+ AttrTO status = objectTO.getAttr(ConnIdSpecialName.ENABLE);
return status != null && status.getValues() != null && !status.getValues().isEmpty()
? Boolean.valueOf(status.getValues().get(0))
: Boolean.FALSE;
}
- private String getConnObjectLink(final ConnObjectTO objectTO) {
- final AttrTO name = objectTO == null ? null : objectTO.getAttr(ConnIdSpecialName.NAME);
+ private static String getConnObjectLink(final ConnObjectTO objectTO) {
+ AttrTO name = objectTO == null ? null : objectTO.getAttr(ConnIdSpecialName.NAME);
return name != null && name.getValues() != null && !name.getValues().isEmpty()
? name.getValues().get(0)
: null;
}
public static PasswordPatch buildPasswordPatch(final String password, final Collection<StatusBean> statuses) {
- final PasswordPatch.Builder builder = new PasswordPatch.Builder();
+ PasswordPatch.Builder builder = new PasswordPatch.Builder();
builder.value(password);
for (StatusBean status : statuses) {
@@ -294,4 +252,8 @@ public class StatusUtils implements Serializable {
}
};
}
+
+ private StatusUtils() {
+ // private constructor for static utility class
+ }
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
index 9204aa1..eabf5aa 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AjaxDataTablePanel.java
@@ -256,15 +256,17 @@ public final class AjaxDataTablePanel<T extends Serializable, S> extends DataTab
}
if (builder.multiLevelPanel == null) {
- bulkModal.header(new ResourceModel("bulk.action", "Bulk action"));
+ bulkModal.header(new ResourceModel("bulk.action"));
bulkModal.changeCloseButtonLabel(getString("cancel", null, "Cancel"), target);
target.add(bulkModal.setContent(new BulkActionModal<>(
bulkModal,
builder.pageRef,
new ArrayList<>(group.getModelObject()),
+ builder.columns.size() == 1
+ ? builder.columns
// serialization problem with sublist only
- new ArrayList<>(builder.columns.subList(1, builder.columns.size())),
+ : new ArrayList<>(builder.columns.subList(1, builder.columns.size())),
builder.bulkActions,
builder.bulkActionExecutor,
builder.itemKeyField)));
@@ -276,8 +278,10 @@ public final class AjaxDataTablePanel<T extends Serializable, S> extends DataTab
new BulkContent<>(
builder.baseModal,
new ArrayList<>(group.getModelObject()),
+ builder.columns.size() == 1
+ ? builder.columns
// serialization problem with sublist only
- new ArrayList<>(builder.columns.subList(1, builder.columns.size() - 1)),
+ : new ArrayList<>(builder.columns.subList(1, builder.columns.size())),
builder.bulkActions,
builder.bulkActionExecutor,
builder.itemKeyField),
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
index 3b05c8b..c2b10fd 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyDirectoryPanel.java
@@ -27,7 +27,7 @@ import java.util.Collection;
import java.util.Date;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.tuple.Pair;
+import org.apache.commons.lang3.tuple.Triple;
import org.apache.syncope.client.console.SyncopeConsoleSession;
import org.apache.syncope.client.console.commons.AnyDataProvider;
import org.apache.syncope.client.console.commons.Constants;
@@ -293,21 +293,22 @@ public abstract class AnyDirectoryPanel<A extends AnyTO, E extends AbstractAnyRe
new ListModel<>(new ArrayList<StatusBean>()),
CollectionUtils.collect(
((ProvisioningResult<A>) result).getPropagationStatuses(),
- new SerializableTransformer<PropagationStatus, Pair<ConnObjectTO, ConnObjectWrapper>>() {
+ new SerializableTransformer<
+ PropagationStatus, Triple<ConnObjectTO, ConnObjectWrapper, String>>() {
private static final long serialVersionUID = -4931455531906427515L;
@Override
- public Pair<ConnObjectTO, ConnObjectWrapper> transform(final PropagationStatus input) {
- ConnObjectTO before = input.getBeforeObj();
+ public Triple<ConnObjectTO, ConnObjectWrapper, String> transform(final PropagationStatus status) {
+ ConnObjectTO before = status.getBeforeObj();
ConnObjectWrapper afterObjWrapper = new ConnObjectWrapper(
((ProvisioningResult<A>) result).getEntity(),
- input.getResource(),
- input.getAfterObj());
- return Pair.of(before, afterObjWrapper);
+ status.getResource(),
+ status.getAfterObj());
+ return Triple.of(before, afterObjWrapper, status.getFailureReason());
}
- }, new ArrayList<Pair<ConnObjectTO, ConnObjectWrapper>>()),
+ }, new ArrayList<Triple<ConnObjectTO, ConnObjectWrapper, String>>()),
pageRef);
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDetails.java
index 98a289e..4f348be 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDetails.java
@@ -21,6 +21,8 @@ package org.apache.syncope.client.console.panels;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.client.console.wizards.any.ConnObjectPanel;
import org.apache.syncope.common.lib.to.ConnObjectTO;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
public class ConnObjectDetails extends MultilevelPanel.SecondLevel {
@@ -30,8 +32,11 @@ public class ConnObjectDetails extends MultilevelPanel.SecondLevel {
super();
MultilevelPanel mlp = new MultilevelPanel("details");
- mlp.setFirstLevel(
- new ConnObjectPanel(MultilevelPanel.FIRST_LEVEL_ID, Pair.of((ConnObjectTO) null, connObjectTO), true));
+ mlp.setFirstLevel(new ConnObjectPanel(
+ MultilevelPanel.FIRST_LEVEL_ID,
+ Pair.<IModel<?>, IModel<?>>of(Model.of(), Model.of()),
+ Pair.of((ConnObjectTO) null, connObjectTO),
+ true));
add(mlp);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java
index d29ce1a..191460d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java
@@ -81,7 +81,7 @@ public class ConnObjects extends Panel implements ModalPanel {
private static final long serialVersionUID = 1473786800290434002L;
@Override
- protected void prev(final AjaxRequestTarget target) {
+ public void prev(final AjaxRequestTarget target) {
anyTypes.setEnabled(true);
target.add(anyTypes);
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java
index 4f0029c..6050d30 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java
@@ -34,12 +34,12 @@ public class MultilevelPanel extends Panel implements IHeaderContributor {
protected static final Logger LOG = LoggerFactory.getLogger(MultilevelPanel.class);
- private boolean isFirstLevel = true;
-
public static final String FIRST_LEVEL_ID = "first";
public static final String SECOND_LEVEL_ID = "second";
+ private boolean isFirstLevel = true;
+
private final WebMarkupContainer firstLevelContainer;
private final WebMarkupContainer secondLevelContainer;
@@ -85,7 +85,7 @@ public class MultilevelPanel extends Panel implements IHeaderContributor {
}
}
- protected void prev(final AjaxRequestTarget target) {
+ public void prev(final AjaxRequestTarget target) {
if (isFirstLevel) {
LOG.warn("No further level available");
} else {
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/panels/PropagationErrorPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/PropagationErrorPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/PropagationErrorPanel.java
new file mode 100644
index 0000000..c6d4da9
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/PropagationErrorPanel.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.panels;
+
+import org.apache.wicket.markup.html.basic.Label;
+
+public class PropagationErrorPanel extends MultilevelPanel.SecondLevel {
+
+ private static final long serialVersionUID = -6203280629851678781L;
+
+ public PropagationErrorPanel(final String failureReason) {
+ add(new Label("failureReason", failureReason).setOutputMarkupId(true));
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
index 7e6e998..6d845ad 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
@@ -58,7 +58,9 @@ import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -166,8 +168,8 @@ public abstract class Realm extends WizardMgtPanel<RealmTO> {
}
});
- final Triple<UserFormLayoutInfo, GroupFormLayoutInfo, Map<String, AnyObjectFormLayoutInfo>> formLayoutInfo
- = FormLayoutInfoUtils.fetch(CollectionUtils.collect(anyTypes, EntityTOUtils.keyTransformer()));
+ final Triple<UserFormLayoutInfo, GroupFormLayoutInfo, Map<String, AnyObjectFormLayoutInfo>> formLayoutInfo =
+ FormLayoutInfoUtils.fetch(CollectionUtils.collect(anyTypes, EntityTOUtils.keyTransformer()));
for (final AnyTypeTO anyType : anyTypes) {
tabs.add(new ITabComponent(
@@ -205,7 +207,7 @@ public abstract class Realm extends WizardMgtPanel<RealmTO> {
syncope.setStatus(PropagationTaskExecStatus.SUCCESS);
syncope.setResource(Constants.SYNCOPE);
- ArrayList<PropagationStatus> propagations = new ArrayList<>();
+ List<PropagationStatus> propagations = new ArrayList<>();
propagations.add(syncope);
propagations.addAll(((ProvisioningResult) result).getPropagationStatuses());
@@ -253,11 +255,26 @@ public abstract class Realm extends WizardMgtPanel<RealmTO> {
}
@Override
- public void onClick(final AjaxRequestTarget target, final PropagationStatus bean) {
- mlp.next(bean.getResource(), new RemoteRealmPanel(bean), target);
+ public void onClick(final AjaxRequestTarget target, final PropagationStatus status) {
+ mlp.next(status.getResource(), new RemoteRealmPanel(status), target);
}
}, ActionLink.ActionType.VIEW, StandardEntitlement.RESOURCE_GET_CONNOBJECT);
+ builder.addAction(new ActionLink<PropagationStatus>() {
+
+ private static final long serialVersionUID = -3722207913631435501L;
+
+ @Override
+ protected boolean statusCondition(final PropagationStatus status) {
+ return StringUtils.isNotBlank(status.getFailureReason());
+ }
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final PropagationStatus status) {
+ mlp.next(status.getResource(), new PropagationErrorPanel(status.getFailureReason()), target);
+ }
+ }, ActionLink.ActionType.PROPAGATION_TASKS, StringUtils.EMPTY);
+
mlp.setFirstLevel(builder.build(MultilevelPanel.FIRST_LEVEL_ID));
return mlp;
}
@@ -270,19 +287,23 @@ public abstract class Realm extends WizardMgtPanel<RealmTO> {
protected abstract void onClickDelete(final AjaxRequestTarget target, final RealmTO realmTO);
- public class RemoteRealmPanel extends RemoteObjectPanel {
+ class RemoteRealmPanel extends RemoteObjectPanel {
private static final long serialVersionUID = 4303365227411467563L;
private final PropagationStatus bean;
- public RemoteRealmPanel(final PropagationStatus bean) {
+ RemoteRealmPanel(final PropagationStatus bean) {
this.bean = bean;
- add(new ConnObjectPanel(REMOTE_OBJECT_PANEL_ID, getConnObjectTO(), false));
+ add(new ConnObjectPanel(
+ REMOTE_OBJECT_PANEL_ID,
+ Pair.<IModel<?>, IModel<?>>of(new ResourceModel("before"), new ResourceModel("after")),
+ getConnObjectTOs(),
+ false));
}
@Override
- protected final Pair<ConnObjectTO, ConnObjectTO> getConnObjectTO() {
+ protected final Pair<ConnObjectTO, ConnObjectTO> getConnObjectTOs() {
return Pair.of(bean.getBeforeObj(), bean.getAfterObj());
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmWizardBuilder.java
index f491f2b..9edcded 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmWizardBuilder.java
@@ -47,13 +47,13 @@ public class RealmWizardBuilder extends AjaxWizardBuilder<RealmTO> {
@Override
protected Serializable onApplyInternal(final RealmTO modelObject) {
- final ProvisioningResult<RealmTO> res;
+ ProvisioningResult<RealmTO> result;
if (modelObject.getKey() == null) {
- res = realmRestClient.create(this.parentPath, modelObject);
+ result = realmRestClient.create(this.parentPath, modelObject);
} else {
- res = realmRestClient.update(modelObject);
+ result = realmRestClient.update(modelObject);
}
- return res;
+ return result;
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/panels/RemoteObjectPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RemoteObjectPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RemoteObjectPanel.java
index 5a6ab4e..6c4231d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RemoteObjectPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RemoteObjectPanel.java
@@ -19,14 +19,13 @@
package org.apache.syncope.client.console.panels;
import org.apache.commons.lang3.tuple.Pair;
-import org.apache.syncope.client.console.panels.MultilevelPanel.SecondLevel;
import org.apache.syncope.common.lib.to.ConnObjectTO;
-public abstract class RemoteObjectPanel extends SecondLevel {
+public abstract class RemoteObjectPanel extends MultilevelPanel.SecondLevel {
private static final long serialVersionUID = 4303365227411467563L;
protected static final String REMOTE_OBJECT_PANEL_ID = "remoteObject";
- protected abstract Pair<ConnObjectTO, ConnObjectTO> getConnObjectTO();
+ protected abstract Pair<ConnObjectTO, ConnObjectTO> getConnObjectTOs();
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
index 4cfdddb..639a4eb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
@@ -40,7 +40,7 @@ public abstract class AbstractAnyRestClient<TO extends AnyTO> extends BaseRestCl
protected abstract Class<? extends AnyService<TO>> getAnyServiceClass();
- public abstract int searchCount(String realm, String fiql, String type);
+ public abstract int count(String realm, String fiql, String type);
public abstract List<TO> search(String realm, String fiql, int page, int size, SortParam<String> sort, String type);
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
index a885764..86a9e29 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
@@ -59,7 +59,7 @@ public class AnyObjectRestClient extends AbstractAnyRestClient<AnyObjectTO> {
}
@Override
- public int searchCount(final String realm, final String fiql, final String type) {
+ public int count(final String realm, final String fiql, final String type) {
return getService(AnyObjectService.class).
search(new AnyQuery.Builder().realm(realm).fiql(fiql).page(1).size(1).build()).
getTotalCount();
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
index c7ff004..9ecd9ca 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
@@ -62,7 +62,7 @@ public class GroupRestClient extends AbstractAnyRestClient<GroupTO> {
}
@Override
- public int searchCount(final String realm, final String fiql, final String type) {
+ public int count(final String realm, final String fiql, final String type) {
return getService(GroupService.class).
search(new AnyQuery.Builder().realm(realm).fiql(fiql).page(1).size(1).build()).
getTotalCount();
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReconciliationRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ReconciliationRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReconciliationRestClient.java
new file mode 100644
index 0000000..16960de
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ReconciliationRestClient.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.rest;
+
+import org.apache.syncope.common.lib.to.PullTaskTO;
+import org.apache.syncope.common.lib.to.PushTaskTO;
+import org.apache.syncope.common.lib.to.ReconStatus;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.syncope.common.rest.api.service.ReconciliationService;
+
+public class ReconciliationRestClient extends BaseRestClient {
+
+ private static final long serialVersionUID = -3161863874876938094L;
+
+ public ReconStatus status(final AnyTypeKind anyTypeKind, final String anyKey, final String resourceKey) {
+ return getService(ReconciliationService.class).status(anyTypeKind, anyKey, resourceKey);
+ }
+
+ public void push(
+ final AnyTypeKind anyTypeKind,
+ final String anyKey,
+ final String resourceKey,
+ final PushTaskTO pushTask) {
+
+ getService(ReconciliationService.class).push(anyTypeKind, anyKey, resourceKey, pushTask);
+ }
+
+ public void pull(
+ final AnyTypeKind anyTypeKind,
+ final String anyKey,
+ final String resourceKey,
+ final PullTaskTO pullTask) {
+
+ getService(ReconciliationService.class).pull(anyTypeKind, anyKey, resourceKey, pullTask);
+ }
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
index b64ff9b..514d970 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
@@ -22,7 +22,6 @@ import java.util.List;
import java.util.Map;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.Response;
-import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.commons.status.StatusBean;
import org.apache.syncope.client.console.commons.status.StatusUtils;
@@ -69,7 +68,7 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
}
@Override
- public int searchCount(final String realm, final String fiql, final String type) {
+ public int count(final String realm, final String fiql, final String type) {
return getService(UserService.class).
search(new AnyQuery.Builder().realm(realm).fiql(fiql).page(1).size(1).build()).
getTotalCount();
@@ -97,29 +96,29 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
statusPatch.setKey(userKey);
statusPatch.setType(StatusPatchType.SUSPEND);
- BulkActionResult result;
+ BulkActionResult bulkActionResult;
synchronized (this) {
- result = new BulkActionResult();
- Map<String, BulkActionResult.Status> res = result.getResults();
+ bulkActionResult = new BulkActionResult();
+ Map<String, BulkActionResult.Status> results = bulkActionResult.getResults();
UserService service = getService(etag, UserService.class);
- @SuppressWarnings("unchecked")
- ProvisioningResult<UserTO> provisions = (ProvisioningResult<UserTO>) service.status(statusPatch).
- readEntity(ProvisioningResult.class);
+ ProvisioningResult<UserTO> provisioningResult = service.status(statusPatch).readEntity(
+ new GenericType<ProvisioningResult<UserTO>>() {
+ });
if (statusPatch.isOnSyncope()) {
- res.put(StringUtils.capitalize(Constants.SYNCOPE),
- "suspended".equalsIgnoreCase(provisions.getEntity().getStatus())
+ results.put(Constants.SYNCOPE,
+ "suspended".equalsIgnoreCase(provisioningResult.getEntity().getStatus())
? BulkActionResult.Status.SUCCESS
: BulkActionResult.Status.FAILURE);
}
- for (PropagationStatus status : provisions.getPropagationStatuses()) {
- res.put(status.getResource(), BulkActionResult.Status.valueOf(status.getStatus().name()));
+ for (PropagationStatus status : provisioningResult.getPropagationStatuses()) {
+ results.put(status.getResource(), BulkActionResult.Status.valueOf(status.getStatus().name()));
}
resetClient(UserService.class);
}
- return result;
+ return bulkActionResult;
}
public BulkActionResult reactivate(final String etag, final String userKey, final List<StatusBean> statuses) {
@@ -127,28 +126,28 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
statusPatch.setKey(userKey);
statusPatch.setType(StatusPatchType.REACTIVATE);
- BulkActionResult result;
+ BulkActionResult bulkActionResult;
synchronized (this) {
- result = new BulkActionResult();
- Map<String, BulkActionResult.Status> res = result.getResults();
+ bulkActionResult = new BulkActionResult();
+ Map<String, BulkActionResult.Status> results = bulkActionResult.getResults();
UserService service = getService(etag, UserService.class);
- @SuppressWarnings("unchecked")
- ProvisioningResult<UserTO> provisions = (ProvisioningResult<UserTO>) service.status(statusPatch).
- readEntity(ProvisioningResult.class);
+ ProvisioningResult<UserTO> provisioningResult = service.status(statusPatch).readEntity(
+ new GenericType<ProvisioningResult<UserTO>>() {
+ });
if (statusPatch.isOnSyncope()) {
- res.put(StringUtils.capitalize(Constants.SYNCOPE),
- "active".equalsIgnoreCase(provisions.getEntity().getStatus())
+ results.put(Constants.SYNCOPE,
+ "active".equalsIgnoreCase(provisioningResult.getEntity().getStatus())
? BulkActionResult.Status.SUCCESS
: BulkActionResult.Status.FAILURE);
}
- for (PropagationStatus status : provisions.getPropagationStatuses()) {
- res.put(status.getResource(), BulkActionResult.Status.valueOf(status.getStatus().name()));
+ for (PropagationStatus status : provisioningResult.getPropagationStatuses()) {
+ results.put(status.getResource(), BulkActionResult.Status.valueOf(status.getStatus().name()));
}
resetClient(UserService.class);
}
- return result;
+ return bulkActionResult;
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
index 6a4c3ad..f50bbed 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/status/AnyStatusDirectoryPanel.java
@@ -19,19 +19,22 @@
package org.apache.syncope.client.console.status;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.PredicateUtils;
+import org.apache.commons.collections4.Transformer;
import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.client.console.commons.Constants;
import org.apache.syncope.client.console.commons.DirectoryDataProvider;
import org.apache.syncope.client.console.commons.status.AbstractStatusBeanProvider;
-import org.apache.syncope.client.console.commons.status.ConnObjectWrapper;
import org.apache.syncope.client.console.commons.status.Status;
import org.apache.syncope.client.console.commons.status.StatusBean;
import org.apache.syncope.client.console.commons.status.StatusUtils;
import org.apache.syncope.client.console.panels.DirectoryPanel;
import org.apache.syncope.client.console.panels.AjaxDataTablePanel;
-import org.apache.syncope.client.console.panels.ConnObjectDetails;
import org.apache.syncope.client.console.panels.ModalPanel;
import org.apache.syncope.client.console.panels.MultilevelPanel;
import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
@@ -42,10 +45,15 @@ import org.apache.syncope.client.console.rest.UserRestClient;
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionsPanel;
+import org.apache.syncope.common.lib.to.AnyObjectTO;
import org.apache.syncope.common.lib.to.AnyTO;
import org.apache.syncope.common.lib.to.ResourceTO;
import org.apache.syncope.common.lib.to.GroupTO;
+import org.apache.syncope.common.lib.to.PullTaskTO;
+import org.apache.syncope.common.lib.to.PushTaskTO;
+import org.apache.syncope.common.lib.to.ReconStatus;
import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.StandardEntitlement;
import org.apache.wicket.PageReference;
import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -71,9 +79,11 @@ public class AnyStatusDirectoryPanel
private final AnyTO anyTO;
+ private final AnyTypeKind anyTypeKind;
+
private final boolean statusOnly;
- private final ResourceRestClient resourceRestClient = new ResourceRestClient();
+ private final List<String> resources;
public AnyStatusDirectoryPanel(
final BaseModal<?> baseModal,
@@ -92,12 +102,25 @@ public class AnyStatusDirectoryPanel
if (anyTO instanceof UserTO) {
this.restClient = new UserRestClient();
+ anyTypeKind = AnyTypeKind.USER;
} else if (anyTO instanceof GroupTO) {
this.restClient = new GroupRestClient();
+ anyTypeKind = AnyTypeKind.GROUP;
} else {
this.restClient = new AnyObjectRestClient();
+ anyTypeKind = AnyTypeKind.ANY_OBJECT;
}
+ resources = CollectionUtils.collect(new ResourceRestClient().list(),
+ new Transformer<ResourceTO, String>() {
+
+ @Override
+ public String transform(final ResourceTO resource) {
+ return resource.getProvision(anyTO.getType()) == null ? null : resource.getKey();
+ }
+ }, new ArrayList<String>());
+ CollectionUtils.filter(resources, PredicateUtils.notNullPredicate());
+
initResultTable();
}
@@ -127,7 +150,9 @@ public class AnyStatusDirectoryPanel
@Override
protected void onComponentTag(final ComponentTag tag) {
- if (model.getObject().isLinked()) {
+ if (anyTO.getResources().contains(model.getObject().getResource())
+ || Constants.SYNCOPE.equalsIgnoreCase(model.getObject().getResource())) {
+
super.onComponentTag(tag);
} else {
tag.put("style", "font-style: italic");
@@ -137,26 +162,29 @@ public class AnyStatusDirectoryPanel
}
});
- columns.add(new PropertyColumn<StatusBean, String>(
- new StringResourceModel("connObjectLink", this), "connObjectLink", "connObjectLink"));
+ if (statusOnly) {
+ columns.add(new PropertyColumn<StatusBean, String>(
+ new StringResourceModel("connObjectLink", this), "connObjectLink", "connObjectLink"));
- columns.add(new AbstractColumn<StatusBean, String>(new StringResourceModel("status", this)) {
+ columns.add(new AbstractColumn<StatusBean, String>(new StringResourceModel("status", this)) {
- private static final long serialVersionUID = -3503023501954863131L;
+ private static final long serialVersionUID = -3503023501954863131L;
- @Override
- public void populateItem(
- final Item<ICellPopulator<StatusBean>> cellItem,
- final String componentId,
- final IModel<StatusBean> model) {
+ @Override
+ public void populateItem(
+ final Item<ICellPopulator<StatusBean>> cellItem,
+ final String componentId,
+ final IModel<StatusBean> model) {
- if (model.getObject().isLinked()) {
- cellItem.add(StatusUtils.getStatusImage(componentId, model.getObject().getStatus()));
- } else {
- cellItem.add(new Label(componentId, ""));
+ if (model.getObject().isLinked()) {
+ cellItem.add(StatusUtils.getStatusImage(componentId, model.getObject().getStatus()));
+ } else {
+ cellItem.add(new Label(componentId, ""));
+ }
}
- }
- });
+ });
+ }
+
return columns;
}
@@ -164,32 +192,70 @@ public class AnyStatusDirectoryPanel
public ActionsPanel<StatusBean> getActions(final IModel<StatusBean> model) {
final ActionsPanel<StatusBean> panel = super.getActions(model);
- panel.add(new ActionLink<StatusBean>() {
+ if (!Constants.SYNCOPE.equalsIgnoreCase(model.getObject().getResource())) {
+ panel.add(new ActionLink<StatusBean>() {
- private static final long serialVersionUID = -7978723352517770645L;
+ private static final long serialVersionUID = -7978723352517770645L;
- @Override
- protected boolean statusCondition(final StatusBean bean) {
- return bean != null && bean.getConnObjectLink() != null
- && !bean.getResource().equalsIgnoreCase(Constants.SYNCOPE);
- }
+ @Override
+ public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+ multiLevelPanelRef.next(bean.getResource(),
+ new ReconStatusPanel(bean.getResource(), anyTypeKind, anyTO.getKey()),
+ target);
+ target.add(multiLevelPanelRef);
+ AnyStatusDirectoryPanel.this.getTogglePanel().close(target);
+ }
+ }, ActionLink.ActionType.VIEW, StandardEntitlement.RESOURCE_GET_CONNOBJECT);
+ }
- @Override
- public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
- multiLevelPanelRef.next(bean.getResource(),
- new ConnObjectDetails(resourceRestClient.readConnObject(
- bean.getResource(), anyTO.getType(), anyTO.getKey())), target);
- target.add(multiLevelPanelRef);
- AnyStatusDirectoryPanel.this.getTogglePanel().close(target);
- }
- }, ActionLink.ActionType.VIEW, StandardEntitlement.RESOURCE_GET_CONNOBJECT);
+ if (!statusOnly) {
+ panel.add(new ActionLink<StatusBean>() {
+
+ private static final long serialVersionUID = -7978723352517770645L;
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+ multiLevelPanelRef.next("PUSH " + bean.getResource(),
+ new ReconTaskPanel(
+ bean.getResource(),
+ new PushTaskTO(),
+ anyTypeKind,
+ anyTO.getKey(),
+ multiLevelPanelRef,
+ pageRef),
+ target);
+ target.add(multiLevelPanelRef);
+ AnyStatusDirectoryPanel.this.getTogglePanel().close(target);
+ }
+ }, ActionLink.ActionType.RECONCILIATION_PUSH, StandardEntitlement.TASK_EXECUTE);
+
+ panel.add(new ActionLink<StatusBean>() {
+
+ private static final long serialVersionUID = -7978723352517770645L;
+
+ @Override
+ public void onClick(final AjaxRequestTarget target, final StatusBean bean) {
+ multiLevelPanelRef.next("PULL " + bean.getResource(),
+ new ReconTaskPanel(
+ bean.getResource(),
+ new PullTaskTO(),
+ anyTypeKind,
+ anyTO.getKey(),
+ multiLevelPanelRef,
+ pageRef),
+ target);
+ target.add(multiLevelPanelRef);
+ AnyStatusDirectoryPanel.this.getTogglePanel().close(target);
+ }
+ }, ActionLink.ActionType.RECONCILIATION_PULL, StandardEntitlement.TASK_EXECUTE);
+ }
return panel;
}
@Override
protected Collection<ActionLink.ActionType> getBulkActions() {
- final List<ActionLink.ActionType> bulkActions = new ArrayList<>();
+ List<ActionLink.ActionType> bulkActions = new ArrayList<>();
if (statusOnly) {
bulkActions.add(ActionLink.ActionType.SUSPEND);
bulkActions.add(ActionLink.ActionType.REACTIVATE);
@@ -200,14 +266,13 @@ public class AnyStatusDirectoryPanel
bulkActions.add(ActionLink.ActionType.PROVISION);
bulkActions.add(ActionLink.ActionType.ASSIGN);
bulkActions.add(ActionLink.ActionType.UNASSIGN);
-
}
return bulkActions;
}
@Override
- protected AttributableStatusProvider dataProvider() {
- return new AttributableStatusProvider();
+ protected AnyStatusProvider dataProvider() {
+ return new AnyStatusProvider();
}
@Override
@@ -215,71 +280,88 @@ public class AnyStatusDirectoryPanel
return StringUtils.EMPTY;
}
- public class AttributableStatusProvider extends AbstractStatusBeanProvider {
+ protected class AnyStatusProvider extends AbstractStatusBeanProvider {
private static final long serialVersionUID = 4586969457669796621L;
- private final StatusUtils statusUtils;
-
- AttributableStatusProvider() {
- super(statusOnly ? "resource" : "connObjectLink");
- statusUtils = new StatusUtils();
+ AnyStatusProvider() {
+ super("resource");
}
- @SuppressWarnings("unchecked")
@Override
- public List<StatusBean> getStatusBeans() {
+ protected List<StatusBean> getStatusBeans(final long first, final long count) {
// this is required to retrieve updated data by reloading table
final AnyTO actual = restClient.read(anyTO.getKey());
- final List<String> resources = new ArrayList<>();
- for (ResourceTO resourceTO : new ResourceRestClient().list()) {
- resources.add(resourceTO.getKey());
- }
+ List<StatusBean> statusBeans = CollectionUtils.collect(actual.getResources(),
+ new Transformer<String, StatusBean>() {
- final List<ConnObjectWrapper> connObjects = statusUtils.getConnectorObjects(actual);
+ @Override
+ public StatusBean transform(final String resource) {
+ List<ReconStatus> statuses = Collections.emptyList();
+ if (statusOnly) {
+ statuses = StatusUtils.getReconStatuses(anyTypeKind, anyTO.getKey(), Arrays.asList(resource));
+ }
- final List<StatusBean> statusBeans = new ArrayList<>(connObjects.size() + 1);
+ return StatusUtils.getStatusBean(
+ actual,
+ resource,
+ statuses.isEmpty() ? null : statuses.get(0).getOnResource(),
+ actual instanceof GroupTO);
+ }
+ }, new ArrayList<StatusBean>());
- for (ConnObjectWrapper entry : connObjects) {
- final StatusBean statusBean = statusUtils.getStatusBean(actual,
- entry.getResourceName(),
- entry.getConnObjectTO(),
- actual instanceof GroupTO);
+ if (statusOnly) {
+ StatusBean syncope = new StatusBean(actual, Constants.SYNCOPE);
+ switch (anyTypeKind) {
+ case USER:
+ syncope.setConnObjectLink(((UserTO) actual).getUsername());
+ break;
- statusBeans.add(statusBean);
- resources.remove(entry.getResourceName());
- }
+ case GROUP:
+ syncope.setConnObjectLink(((GroupTO) actual).getName());
+ break;
- if (statusOnly) {
- final StatusBean syncope = new StatusBean(actual, "Syncope");
+ case ANY_OBJECT:
+ syncope.setConnObjectLink(((AnyObjectTO) actual).getName());
+ break;
- syncope.setConnObjectLink(((UserTO) actual).getUsername());
+ default:
+ }
Status syncopeStatus = Status.UNDEFINED;
- if (((UserTO) actual).getStatus() != null) {
+ if (actual.getStatus() != null) {
try {
- syncopeStatus = Status.valueOf(((UserTO) actual).getStatus().toUpperCase());
+ syncopeStatus = Status.valueOf(actual.getStatus().toUpperCase());
} catch (IllegalArgumentException e) {
- LOG.warn("Unexpected status found: {}", ((UserTO) actual).getStatus(), e);
+ LOG.warn("Unexpected status found: {}", actual.getStatus(), e);
}
}
syncope.setStatus(syncopeStatus);
- statusBeans.add(syncope);
+ Collections.sort(statusBeans, comparator);
+ statusBeans.add(0, syncope);
} else {
- for (String resource : resources) {
- final StatusBean statusBean = statusUtils.getStatusBean(actual,
- resource,
- null,
- actual instanceof GroupTO);
+ statusBeans.addAll(CollectionUtils.collect(CollectionUtils.subtract(resources, anyTO.getResources()),
+ new Transformer<String, StatusBean>() {
- statusBean.setLinked(false);
- statusBeans.add(statusBean);
- }
+ @Override
+ public StatusBean transform(final String resource) {
+ StatusBean statusBean = StatusUtils.getStatusBean(
+ actual,
+ resource,
+ null,
+ actual instanceof GroupTO);
+ statusBean.setLinked(false);
+ return statusBean;
+ }
+ }, new ArrayList<StatusBean>()));
+ Collections.sort(statusBeans, comparator);
}
- return statusBeans;
+ return first == -1 && count == -1
+ ? statusBeans
+ : statusBeans.subList((int) first, (int) first + (int) count);
}
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a660a26b/client/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusPanel.java
new file mode 100644
index 0000000..91dc9ac
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/status/ReconStatusPanel.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.client.console.status;
+
+import java.util.Arrays;
+import java.util.List;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.commons.status.StatusUtils;
+import org.apache.syncope.client.console.panels.RemoteObjectPanel;
+import org.apache.syncope.client.console.wizards.any.ConnObjectPanel;
+import org.apache.syncope.common.lib.to.ConnObjectTO;
+import org.apache.syncope.common.lib.to.ReconStatus;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.ResourceModel;
+
+public class ReconStatusPanel extends RemoteObjectPanel {
+
+ private static final long serialVersionUID = 8000309881812037770L;
+
+ private final String resource;
+
+ private final AnyTypeKind anyTypeKind;
+
+ private final String anyKey;
+
+ public ReconStatusPanel(
+ final String resource,
+ final AnyTypeKind anyTypeKind,
+ final String anyKey) {
+
+ this.resource = resource;
+ this.anyTypeKind = anyTypeKind;
+ this.anyKey = anyKey;
+
+ add(new ConnObjectPanel(
+ REMOTE_OBJECT_PANEL_ID,
+ Pair.<IModel<?>, IModel<?>>of(Model.of(Constants.SYNCOPE), new ResourceModel("resource")),
+ getConnObjectTOs(),
+ false));
+ }
+
+ @Override
+ protected Pair<ConnObjectTO, ConnObjectTO> getConnObjectTOs() {
+ List<ReconStatus> statuses =
+ StatusUtils.getReconStatuses(anyTypeKind, anyKey, Arrays.asList(resource));
+
+ return statuses.isEmpty() ? null : Pair.of(statuses.get(0).getOnSyncope(), statuses.get(0).getOnResource());
+ }
+}