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 2016/04/05 15:46:46 UTC
[1/3] syncope git commit: Upgrading SLF4J
Repository: syncope
Updated Branches:
refs/heads/master bef072646 -> 692e1f91c
Upgrading SLF4J
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/756e5c5e
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/756e5c5e
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/756e5c5e
Branch: refs/heads/master
Commit: 756e5c5e2434d85ba207e0296f90c223a0b96f5b
Parents: bef0726
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Apr 5 15:14:11 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Apr 5 15:14:11 2016 +0200
----------------------------------------------------------------------
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/756e5c5e/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index d80da12..da5842e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -350,7 +350,7 @@ under the License.
<activiti.version>5.19.0.2</activiti.version>
- <slf4j.version>1.7.20</slf4j.version>
+ <slf4j.version>1.7.21</slf4j.version>
<log4j.version>2.5</log4j.version>
<disruptor.version>3.3.4</disruptor.version>
[3/3] syncope git commit: [SYNCOPE-806] Resource provisioning
validated, and management of aux classes in Provision instances added
Posted by il...@apache.org.
[SYNCOPE-806] Resource provisioning validated, and management of aux classes in Provision instances added
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/692e1f91
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/692e1f91
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/692e1f91
Branch: refs/heads/master
Commit: 692e1f91c67d8eeaa731392d42daa03b1df07248
Parents: 756e5c5
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Apr 5 15:46:37 2016 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Apr 5 15:46:37 2016 +0200
----------------------------------------------------------------------
.../console/approvals/ApprovalDetails.java | 2 +-
.../panels/ProvisionAuxClassesPanel.java | 62 +++++++
.../console/panels/ResourceMappingPanel.java | 30 +--
.../client/console/panels/ResourceModal.java | 12 +-
.../panels/search/AbstractSearchPanel.java | 2 +-
.../console/rest/AnyTypeClassRestClient.java | 4 +
.../client/console/rest/AnyTypeRestClient.java | 4 +-
.../wicket/markup/html/form/ActionLink.java | 1 -
.../markup/html/form/ActionLinksPanel.java | 24 ---
.../markup/html/form/AjaxPalettePanel.java | 12 +-
.../client/console/wizards/any/Ownership.java | 4 +-
.../provision/ProvisionWizardBuilder.java | 19 +-
.../panels/ProvisionAuxClassesPanel.html | 23 +++
.../console/panels/ResourceModal.properties | 2 +-
.../console/panels/ResourceModal_it.properties | 2 +-
.../panels/ResourceModal_pt_BR.properties | 2 +-
.../markup/html/form/ActionLinksPanel.html | 5 -
.../ProvisionWizardBuilder$AuxClasses.html | 23 +++
...ProvisionWizardBuilder$AuxClasses.properties | 20 ++
...visionWizardBuilder$AuxClasses_it.properties | 19 ++
...ionWizardBuilder$AuxClasses_pt_BR.properties | 20 ++
...isionWizardBuilder$ConnObjectLink.properties | 4 +-
...onWizardBuilder$ConnObjectLink_it.properties | 4 +-
...izardBuilder$ConnObjectLink_pt_BR.properties | 4 +-
.../ProvisionWizardBuilder$Mapping.properties | 2 +-
...ProvisionWizardBuilder$Mapping_it.properties | 2 +-
...visionWizardBuilder$Mapping_pt_BR.properties | 2 +-
.../ProvisionWizardBuilder$ObjectType.html | 1 -
.../syncope/common/lib/to/ProvisionTO.java | 9 +
.../api/dao/ExternalResourceDAO.java | 3 +
.../core/persistence/api/dao/GroupDAO.java | 2 +-
.../api/entity/resource/Provision.java | 6 +
.../persistence/jpa/dao/JPAAnyTypeClassDAO.java | 11 +-
.../jpa/dao/JPAExternalResourceDAO.java | 11 ++
.../core/persistence/jpa/dao/JPAGroupDAO.java | 2 +-
.../jpa/entity/resource/JPAProvision.java | 25 +++
.../test/resources/domains/MasterContent.xml | 5 +
.../java/data/ResourceDataBinderImpl.java | 186 +++++++++++++------
.../syncope/fit/console/TopologyITCase.java | 12 +-
.../apache/syncope/fit/core/PushTaskITCase.java | 3 +-
.../apache/syncope/fit/core/ResourceITCase.java | 15 +-
.../apache/syncope/fit/core/VirAttrITCase.java | 58 +++---
42 files changed, 473 insertions(+), 186 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDetails.java
index ec8cbcf..7c954fd 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/approvals/ApprovalDetails.java
@@ -38,7 +38,7 @@ public class ApprovalDetails extends MultilevelPanel.SecondLevel {
super(MultilevelPanel.SECOND_LEVEL_ID);
final UserTO userTO = new UserRestClient().read(formTO.getUserKey());
- final List<String> anyTypeClasses = new AnyTypeRestClient().get(AnyTypeKind.USER.name()).getClasses();
+ final List<String> anyTypeClasses = new AnyTypeRestClient().read(AnyTypeKind.USER.name()).getClasses();
final AjaxWizard<AnyHandler<UserTO>> wizard
= new UserWizardBuilder("wizard", userTO, anyTypeClasses, pageRef).build(AjaxWizard.Mode.READONLY);
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/java/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.java
new file mode 100644
index 0000000..3e7116c
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.java
@@ -0,0 +1,62 @@
+/*
+ * 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 java.util.ArrayList;
+import java.util.List;
+import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
+import org.apache.syncope.client.console.rest.AnyTypeRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
+import org.apache.syncope.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.lib.to.AnyTypeTO;
+import org.apache.syncope.common.lib.to.ProvisionTO;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.util.ListModel;
+
+public class ProvisionAuxClassesPanel extends Panel {
+
+ private static final long serialVersionUID = -3962956154520358784L;
+
+ private final ProvisionTO provisionTO;
+
+ public ProvisionAuxClassesPanel(final String id, final ProvisionTO provisionTO) {
+ super(id);
+ setOutputMarkupId(true);
+
+ this.provisionTO = provisionTO;
+ }
+
+ @Override
+ protected void onBeforeRender() {
+ super.onBeforeRender();
+
+ AnyTypeTO anyType = new AnyTypeRestClient().read(provisionTO.getAnyType());
+ List<String> choices = new ArrayList<>();
+ for (AnyTypeClassTO aux : new AnyTypeClassRestClient().list()) {
+ if (!anyType.getClasses().contains(aux.getKey())) {
+ choices.add(aux.getKey());
+ }
+ }
+ addOrReplace(new AjaxPalettePanel.Builder<String>().build("auxClasses",
+ new PropertyModel<List<String>>(provisionTO, "auxClasses"),
+ new ListModel<>(choices)).hideLabel().setOutputMarkupId(true));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
index 09d99d0..30188f9 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceMappingPanel.java
@@ -22,13 +22,11 @@ import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.IterableUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.syncope.client.console.commons.ConnIdSpecialAttributeName;
@@ -531,32 +529,22 @@ public class ResourceMappingPanel extends Panel {
* @param toBeUpdated drop down choice to be updated.
*/
private void setAttrNames(final IntMappingType type, final AjaxDropDownChoicePanel<String> toBeUpdated) {
-
toBeUpdated.setRequired(true);
toBeUpdated.setEnabled(true);
if (type == null || type.getAnyTypeKind() == null) {
toBeUpdated.setChoices(Collections.<String>emptyList());
} else {
- Collection<AnyTypeTO> anyTypeTOs = type.getAnyTypeKind() == AnyTypeKind.ANY_OBJECT
- ? CollectionUtils.select(anyTypeRestClient.list(), new Predicate<AnyTypeTO>() {
-
- @Override
- public boolean evaluate(final AnyTypeTO object) {
- return object.getKind() == AnyTypeKind.ANY_OBJECT;
- }
- })
- : Collections.singletonList(anyTypeRestClient.get(type.getAnyTypeKind().name()));
+ AnyTypeTO anyTypeTO = anyTypeRestClient.read(provisionTO.getAnyType());
- final List<AnyTypeClassTO> anyTypeClassTOs = new ArrayList<>();
- for (AnyTypeTO anyTypeTO : anyTypeTOs) {
- anyTypeClassTOs.addAll(anyTypeClassRestClient.list(anyTypeTO.getClasses()));
+ List<AnyTypeClassTO> anyTypeClassTOs = new ArrayList<>();
+ anyTypeClassTOs.addAll(anyTypeClassRestClient.list(anyTypeTO.getClasses()));
+ for (String auxClass : provisionTO.getAuxClasses()) {
+ anyTypeClassTOs.add(anyTypeClassRestClient.read(auxClass));
}
List<String> choices;
-
switch (type) {
- // user attribute names
case UserPlainSchema:
case GroupPlainSchema:
case AnyObjectPlainSchema:
@@ -639,14 +627,14 @@ public class ResourceMappingPanel extends Panel {
/**
* Get all attribute types from a selected attribute type.
*
- * @param entity entity.
+ * @param kind entity.
* @return all attribute types.
*/
- private List<IntMappingType> getAttributeTypes(final AnyTypeKind entity) {
+ private List<IntMappingType> getAttributeTypes(final AnyTypeKind kind) {
final List<IntMappingType> res = new ArrayList<>();
- if (entity != null) {
- res.addAll(IntMappingType.getAttributeTypes(entity));
+ if (kind != null) {
+ res.addAll(IntMappingType.getAttributeTypes(kind));
}
return res;
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java
index c0df4ac..ba29fb9 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ResourceModal.java
@@ -116,7 +116,7 @@ public class ResourceModal<T extends Serializable> extends AbstractResourceModal
};
builder.setItems(model.getObject().getProvisions());
- builder.includes("anyType", "objectClass");
+ builder.includes("anyType", "objectClass", "auxClasses");
builder.setReuseItem(false);
builder.
@@ -132,16 +132,6 @@ public class ResourceModal<T extends Serializable> extends AbstractResourceModal
}, ActionLink.ActionType.MAPPING, StandardEntitlement.RESOURCE_UPDATE).
addAction(new ActionLink<ProvisionTO>() {
- private static final long serialVersionUID = -3722207913631435514L;
-
- @Override
- public void onClick(final AjaxRequestTarget target, final ProvisionTO provisionTO) {
- send(pageRef.getPage(), Broadcast.DEPTH,
- new AjaxWizard.NewItemActionEvent<>(provisionTO, 3, target));
- }
- }, ActionLink.ActionType.ACCOUNT_LINK, StandardEntitlement.RESOURCE_UPDATE).
- addAction(new ActionLink<ProvisionTO>() {
-
private static final long serialVersionUID = -3722207913631435524L;
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
index b3918e1..3d05eee 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
@@ -166,7 +166,7 @@ public abstract class AbstractSearchPanel extends Panel {
@Override
protected List<String> load() {
return CollectionUtils.collect(
- schemaRestClient.getSchemas(SchemaType.PLAIN, anyTypeRestClient.get(type).getClasses().
+ schemaRestClient.getSchemas(SchemaType.PLAIN, anyTypeRestClient.read(type).getClasses().
toArray(new String[] {})),
EntityTOUtils.<String, AbstractSchemaTO>keyTransformer(),
new ArrayList<String>());
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeClassRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeClassRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeClassRestClient.java
index 2f9d0f1..26b8601 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeClassRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeClassRestClient.java
@@ -30,6 +30,10 @@ public class AnyTypeClassRestClient extends BaseRestClient {
private static final long serialVersionUID = -2211371717449597247L;
+ public AnyTypeClassTO read(final String key) {
+ return getService(AnyTypeClassService.class).read(key);
+ }
+
public List<AnyTypeClassTO> list() {
List<AnyTypeClassTO> types = Collections.emptyList();
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java
index 33b9552..06b45df 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyTypeRestClient.java
@@ -28,11 +28,11 @@ public class AnyTypeRestClient extends BaseRestClient {
private static final long serialVersionUID = -2211371717449597247L;
- public AnyTypeTO get(final String kind) {
+ public AnyTypeTO read(final String key) {
AnyTypeTO type = null;
try {
- type = getService(AnyTypeService.class).read(kind);
+ type = getService(AnyTypeService.class).read(key);
} catch (SyncopeClientException e) {
LOG.error("While reading all any types", e);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/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 9bd19ee..ed30b69 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
@@ -41,7 +41,6 @@ public abstract class ActionLink<T extends Serializable> implements Serializable
public enum ActionType {
MAPPING("update"),
- ACCOUNT_LINK("update"),
MUSTCHANGEPASSWORD("update"),
RESET_TIME("update"),
CLONE("create"),
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.java
index 52e1ada..4040bf6 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.java
@@ -56,7 +56,6 @@ public final class ActionLinksPanel<T extends Serializable> extends Panel {
super.add(new Fragment("panelManageUsers", "emptyFragment", this));
super.add(new Fragment("panelManageGroups", "emptyFragment", this));
super.add(new Fragment("panelMapping", "emptyFragment", this));
- super.add(new Fragment("panelAccountLink", "emptyFragment", this));
super.add(new Fragment("panelMustChangePassword", "emptyFragment", this));
super.add(new Fragment("panelResetTime", "emptyFragment", this));
super.add(new Fragment("panelClone", "emptyFragment", this));
@@ -194,25 +193,6 @@ public final class ActionLinksPanel<T extends Serializable> extends Panel {
}.setVisible(link.isEnabled(model.getObject())));
break;
- case ACCOUNT_LINK:
- fragment = new Fragment("panelAccountLink", "fragmentAccountLink", this);
-
- fragment.addOrReplace(new IndicatingAjaxLink<Void>("accountLinkLink") {
-
- private static final long serialVersionUID = -7978723352517770644L;
-
- @Override
- public void onClick(final AjaxRequestTarget target) {
- link.onClick(target, model.getObject());
- }
-
- @Override
- public String getAjaxIndicatorMarkupId() {
- return disableIndicator ? StringUtils.EMPTY : super.getAjaxIndicatorMarkupId();
- }
- }.setVisible(link.isEnabled(model.getObject())));
- break;
-
case MUSTCHANGEPASSWORD:
fragment = new Fragment("panelMustChangePassword", "fragmentMustChangePassword", this);
@@ -808,10 +788,6 @@ public final class ActionLinksPanel<T extends Serializable> extends Panel {
super.addOrReplace(new Fragment("panelMapping", "emptyFragment", this));
break;
- case ACCOUNT_LINK:
- super.addOrReplace(new Fragment("panelAccountLink", "emptyFragment", this));
- break;
-
case MUSTCHANGEPASSWORD:
super.addOrReplace(new Fragment("panelMustChangePassword", "emptyFragment", this));
break;
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
index d84397d..0af6e61 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/AjaxPalettePanel.java
@@ -78,7 +78,7 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
choicesModel = new PaletteLoadableDetachableModel(builder) {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = -108100712154481840L;
@Override
protected List<T> getChoices() {
@@ -174,7 +174,7 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
form.add(new AjaxSubmitLink("search") {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = -1765773642975892072L;
@Override
protected void onAfterSubmit(final AjaxRequestTarget target, final Form<?> form) {
@@ -184,6 +184,10 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
});
}
+ public LoadableDetachableModel<List<T>> getChoicesModel() {
+ return choicesModel;
+ }
+
@Override
public AjaxPalettePanel<T> setModelObject(final List<T> object) {
palette.setDefaultModelObject(object);
@@ -196,7 +200,7 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
public static class Builder<T extends Serializable> implements Serializable {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 991248996001040352L;
private IChoiceRenderer<T> renderer;
@@ -275,7 +279,7 @@ public class AjaxPalettePanel<T extends Serializable> extends AbstractFieldPanel
private abstract class PaletteLoadableDetachableModel extends LoadableDetachableModel<List<T>> {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = -7745220313769774616L;
private final Builder<T> builder;
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
index 58e9efa..69df4ba 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Ownership.java
@@ -157,7 +157,7 @@ public class Ownership extends WizardStep {
new ListModel<>(new ArrayList<SearchClause>())).required(false).enableSearch().build("groupsearch");
groupSearchFragment.add(groupSearchPanel.setRenderBodyOnly(true));
- AnyTypeTO anyTypeTO = anyTypeRestClient.get(AnyTypeKind.GROUP.name());
+ AnyTypeTO anyTypeTO = anyTypeRestClient.read(AnyTypeKind.GROUP.name());
groupDirectoryPanel = GroupSelectionDirectoryPanel.class.cast(new GroupSelectionDirectoryPanel.Builder(
anyTypeClassRestClient.list(anyTypeTO.getClasses()),
@@ -171,7 +171,7 @@ public class Ownership extends WizardStep {
new ListModel<>(new ArrayList<SearchClause>())).required(false).enableSearch().build("usersearch"));
userSearchFragment.add(userSearchPanel.setRenderBodyOnly(true));
- anyTypeTO = anyTypeRestClient.get(AnyTypeKind.USER.name());
+ anyTypeTO = anyTypeRestClient.read(AnyTypeKind.USER.name());
userDirectoryPanel = UserSelectionDirectoryPanel.class.cast(new UserSelectionDirectoryPanel.Builder(
anyTypeClassRestClient.list(anyTypeTO.getClasses()),
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
index 99eb7c5..73d6bfb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder.java
@@ -26,6 +26,7 @@ import org.apache.commons.collections4.Predicate;
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.panels.ProvisionAuxClassesPanel;
import org.apache.syncope.client.console.panels.ResourceMappingPanel;
import org.apache.syncope.client.console.rest.AnyTypeRestClient;
import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
@@ -139,6 +140,21 @@ public class ProvisionWizardBuilder extends AjaxWizardBuilder<ProvisionTO> imple
}
/**
+ * AuxClasses definition step.
+ */
+ private final class AuxClasses extends WizardStep {
+
+ private static final long serialVersionUID = 5315236191866427500L;
+
+ AuxClasses(final ProvisionTO item) {
+ setTitleModel(new ResourceModel("auxClasses.title"));
+ setSummaryModel(new StringResourceModel("auxClasses.summary", this, new Model<>(item)));
+
+ add(new ProvisionAuxClassesPanel("auxClasses", item));
+ }
+ }
+
+ /**
* Mapping definition step.
*/
private final class Mapping extends WizardStep {
@@ -146,7 +162,7 @@ public class ProvisionWizardBuilder extends AjaxWizardBuilder<ProvisionTO> imple
private static final long serialVersionUID = 3454904947720856253L;
Mapping(final ProvisionTO item) {
- setTitleModel(new ResourceModel("mapping.title", "Mapping"));
+ setTitleModel(new ResourceModel("mapping.title"));
setSummaryModel(new StringResourceModel("mapping.summary", this, new Model<>(item)));
add(new ResourceMappingPanel("mapping", resourceTO, item));
@@ -225,6 +241,7 @@ public class ProvisionWizardBuilder extends AjaxWizardBuilder<ProvisionTO> imple
@Override
protected WizardModel buildModelSteps(final ProvisionTO modelObject, final WizardModel wizardModel) {
wizardModel.add(new ObjectType(modelObject));
+ wizardModel.add(new AuxClasses(modelObject));
wizardModel.add(new Mapping(modelObject));
wizardModel.add(new ConnObjectLink(modelObject));
return wizardModel;
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.html
new file mode 100644
index 0000000..3be0e43
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ProvisionAuxClassesPanel.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:panel>
+ <span wicket:id="auxClasses"/>
+ </wicket:panel>
+</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal.properties
index 38500a7..5b21e1f 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal.properties
@@ -64,5 +64,5 @@ anyType=Object Type
objectClass= Object Class
__ACCOUNT__=ACCOUNT
__GROUP__=GROUP
-listview.caption=Provisioning configuration instances
connectorCapabilities=Connector Capabilities
+auxClasses=Auxiliary Classes
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_it.properties
index afb7798..1f7d76a 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_it.properties
@@ -63,5 +63,5 @@ anyType=Oggetto
objectClass=Classe
__ACCOUNT__=ACCOUNT
__GROUP__=GROUP
-listview.caption=Istanze di configurazione del provisioning
connectorCapabilities=Capabilitiey Connettore
+auxClasses=Classi Ausiliarie
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_pt_BR.properties
index 31989cd..db984d9 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ResourceModal_pt_BR.properties
@@ -63,5 +63,5 @@ anyType=Objeto
objectClass=Classe
__ACCOUNT__=ACCOUNT
__GROUP__=GROUP
-listview.caption=Inst\u00e2ncias de provisionamento de recursos
connectorCapabilities=Capacidades do Conector
+auxClasses=Classes Auxiliares
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
index cc36119..50d3c6c 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wicket/markup/html/form/ActionLinksPanel.html
@@ -38,7 +38,6 @@ under the License.
<span wicket:id="panelNotFound">[plus]</span>
<span wicket:id="panelView">[plus]</span>
<span wicket:id="panelMapping">[plus]</span>
- <span wicket:id="panelAccountLink">[plus]</span>
<span wicket:id="panelResetTime">[plus]</span>
<span wicket:id="panelClone">[plus]</span>
<span wicket:id="panelCreate">[plus]</span>
@@ -87,10 +86,6 @@ under the License.
<a href="#" wicket:id="mappingLink" class="btn"><i class="fa fa-exchange" alt="mapping icon" title="Mapping"></i></a>
</wicket:fragment>
- <wicket:fragment wicket:id="fragmentAccountLink">
- <a href="#" wicket:id="accountLinkLink" class="btn"><i class="fa fa-external-link" alt="account link icon" title="Account Link"></i></a>
- </wicket:fragment>
-
<wicket:fragment wicket:id="fragmentResetTime">
<a href="#" wicket:id="resetTimeLink" class="btn"><i class="fa fa-hourglass-start" alt="reset time icon" title="Reset Time"></i></a>
</wicket:fragment>
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.html
new file mode 100644
index 0000000..9b03dd7
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.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:panel>
+ <span wicket:id="auxClasses"/>
+ </wicket:panel>
+</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.properties
new file mode 100644
index 0000000..8223360
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses.properties
@@ -0,0 +1,20 @@
+# 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.
+
+auxClasses.title=Auxiliary Classes
+auxClasses.summary=
+
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_it.properties
new file mode 100644
index 0000000..372ef2d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_it.properties
@@ -0,0 +1,19 @@
+# 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.
+
+auxClasses.title=Classi Ausiliarie
+auxClasses.summary=
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_pt_BR.properties
new file mode 100644
index 0000000..0946b9d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$AuxClasses_pt_BR.properties
@@ -0,0 +1,20 @@
+# 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.
+
+auxClasses.title=Classes Auxiliares
+auxClasses.summary=
+
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.properties
index e2df31e..dad26b4 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.properties
@@ -15,6 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-link.title=Specify the connector object link (if required)
+link.title=Connector object link (if required)
link.summary=
-
+connObjectLinkCheckbox=Use ConnObjectLink
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_it.properties
index e2df31e..cf74d19 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_it.properties
@@ -15,6 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-link.title=Specify the connector object link (if required)
+link.title=Connector object link (se necessario)
link.summary=
-
+connObjectLinkCheckbox=Usa ConnObjectLink
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_pt_BR.properties
index e2df31e..305b0b7 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink_pt_BR.properties
@@ -15,6 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-link.title=Specify the connector object link (if required)
+link.title=Connector object link (se necess\u00e1rio)
link.summary=
-
+connObjectLinkCheckbox=Usar ConnObjectLink
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping.properties
index 8dc0c10..99d1add 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping.properties
@@ -15,6 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-mapping.title=Specify the mapping for this provisioning object
+mapping.title=Mapping
mapping.summary=
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_it.properties
index 63e44ce..fde5de0 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_it.properties
@@ -15,5 +15,5 @@
# specific language governing permissions and limitations
# under the License.
-mapping.title=Specify the mapping for this provisioning object
+mapping.title=Mapping
mapping.summary=
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_pt_BR.properties
index 8dc0c10..99d1add 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$Mapping_pt_BR.properties
@@ -15,6 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-mapping.title=Specify the mapping for this provisioning object
+mapping.title=Mapping
mapping.summary=
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.html
index 7b505e4..1b951d3 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ObjectType.html
@@ -20,7 +20,6 @@ under the License.
<wicket:panel>
<div wicket:id="container">
<div class="form-group">
- <label>Object Type</label>
<span wicket:id="type"/>
</div>
<div class="form-group">
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/common/lib/src/main/java/org/apache/syncope/common/lib/to/ProvisionTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ProvisionTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ProvisionTO.java
index b39d543..7a683d5 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ProvisionTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ProvisionTO.java
@@ -39,6 +39,8 @@ public class ProvisionTO extends AbstractBaseBean implements EntityTO<Long> {
private String objectClass;
+ private final List<String> auxClasses = new ArrayList<>();
+
private String syncToken;
private MappingTO mapping;
@@ -71,6 +73,13 @@ public class ProvisionTO extends AbstractBaseBean implements EntityTO<Long> {
this.objectClass = objectClass;
}
+ @XmlElementWrapper(name = "auxClasses")
+ @XmlElement(name = "class")
+ @JsonProperty("auxClasses")
+ public List<String> getAuxClasses() {
+ return auxClasses;
+ }
+
public String getSyncToken() {
return syncToken;
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java
index 6c443e8..b92e9f2 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/ExternalResourceDAO.java
@@ -20,6 +20,7 @@ package org.apache.syncope.core.persistence.api.dao;
import java.util.List;
import org.apache.syncope.common.lib.types.IntMappingType;
+import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
import org.apache.syncope.core.persistence.api.entity.Policy;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.resource.Provision;
@@ -32,6 +33,8 @@ public interface ExternalResourceDAO extends DAO<ExternalResource, String> {
Provision findProvision(Long key);
+ List<Provision> findProvisionsByAuxClass(AnyTypeClass anyTypeClass);
+
List<ExternalResource> findByPolicy(Policy policy);
List<ExternalResource> findWithoutPolicy(Class<? extends Policy> policyClass);
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
index d372fbc..1de4ba2 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
@@ -63,7 +63,7 @@ public interface GroupDAO extends AnyDAO<Group> {
*/
Map<Long, PropagationByResource> findUsersWithTransitiveResources(Long groupKey);
- List<TypeExtension> findTypeExtensionByAnyTypeClass(AnyTypeClass anyTypeClass);
+ List<TypeExtension> findTypeExtensions(AnyTypeClass anyTypeClass);
void refreshDynMemberships(AnyObject anyObject);
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java
index f1b33fe..30cd970 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/resource/Provision.java
@@ -18,7 +18,9 @@
*/
package org.apache.syncope.core.persistence.api.entity.resource;
+import java.util.List;
import org.apache.syncope.core.persistence.api.entity.AnyType;
+import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
import org.apache.syncope.core.persistence.api.entity.Entity;
import org.identityconnectors.framework.common.objects.ObjectClass;
import org.identityconnectors.framework.common.objects.SyncToken;
@@ -37,6 +39,10 @@ public interface Provision extends Entity<Long> {
void setObjectClass(ObjectClass objectClass);
+ boolean add(AnyTypeClass anyTypeClass);
+
+ List<? extends AnyTypeClass> getAuxClasses();
+
SyncToken getSyncToken();
String getSerializedSyncToken();
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
index 8efb01f..ee301f5 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
@@ -24,6 +24,7 @@ import javax.persistence.TypedQuery;
import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
+import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
@@ -33,6 +34,7 @@ import org.apache.syncope.core.persistence.api.entity.DerSchema;
import org.apache.syncope.core.persistence.api.entity.PlainSchema;
import org.apache.syncope.core.persistence.api.entity.VirSchema;
import org.apache.syncope.core.persistence.api.entity.group.TypeExtension;
+import org.apache.syncope.core.persistence.api.entity.resource.Provision;
import org.apache.syncope.core.persistence.jpa.entity.JPAAnyTypeClass;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@@ -55,6 +57,9 @@ public class JPAAnyTypeClassDAO extends AbstractDAO<AnyTypeClass, String> implem
@Autowired
private GroupDAO groupDAO;
+ @Autowired
+ private ExternalResourceDAO resourceDAO;
+
@Override
public AnyTypeClass find(final String key) {
return entityManager().find(JPAAnyTypeClass.class, key);
@@ -105,7 +110,7 @@ public class JPAAnyTypeClassDAO extends AbstractDAO<AnyTypeClass, String> implem
type.getClasses().remove(anyTypeClass);
}
- for (TypeExtension typeExt : groupDAO.findTypeExtensionByAnyTypeClass(anyTypeClass)) {
+ for (TypeExtension typeExt : groupDAO.findTypeExtensions(anyTypeClass)) {
typeExt.getAuxClasses().remove(anyTypeClass);
if (typeExt.getAuxClasses().isEmpty()) {
@@ -114,6 +119,10 @@ public class JPAAnyTypeClassDAO extends AbstractDAO<AnyTypeClass, String> implem
}
}
+ for (Provision provision : resourceDAO.findProvisionsByAuxClass(anyTypeClass)) {
+ provision.getAuxClasses().remove(anyTypeClass);
+ }
+
entityManager().remove(anyTypeClass);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
index be02327..1f08938 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
@@ -33,6 +33,7 @@ import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.dao.TaskDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
+import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.resource.MappingItem;
@@ -94,6 +95,16 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource, String
return entityManager().find(JPAProvision.class, key);
}
+ @Override
+ public List<Provision> findProvisionsByAuxClass(final AnyTypeClass anyTypeClass) {
+ TypedQuery<Provision> query = entityManager().createQuery(
+ "SELECT e FROM " + JPAProvision.class.getSimpleName()
+ + " e WHERE :anyTypeClass MEMBER OF e.auxClasses", Provision.class);
+ query.setParameter("anyTypeClass", anyTypeClass);
+
+ return query.getResultList();
+ }
+
private StringBuilder getByPolicyQuery(final Class<? extends Policy> policyClass) {
StringBuilder query = new StringBuilder("SELECT e FROM ").
append(JPAExternalResource.class.getSimpleName()).
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
index 9a6fe41..990962a 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java
@@ -284,7 +284,7 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO {
}
@Override
- public List<TypeExtension> findTypeExtensionByAnyTypeClass(final AnyTypeClass anyTypeClass) {
+ public List<TypeExtension> findTypeExtensions(final AnyTypeClass anyTypeClass) {
TypedQuery<TypeExtension> query = entityManager().createQuery(
"SELECT e FROM " + JPATypeExtension.class.getSimpleName()
+ " e WHERE :anyTypeClass MEMBER OF e.auxClasses", TypeExtension.class);
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java
index ec50d2c..4ae1043 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/resource/JPAProvision.java
@@ -18,11 +18,16 @@
*/
package org.apache.syncope.core.persistence.jpa.entity.resource;
+import java.util.ArrayList;
+import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
import javax.persistence.Lob;
+import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@@ -30,11 +35,13 @@ import javax.persistence.UniqueConstraint;
import javax.validation.constraints.NotNull;
import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
import org.apache.syncope.core.persistence.api.entity.AnyType;
+import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.resource.Mapping;
import org.apache.syncope.core.persistence.api.entity.resource.Provision;
import org.apache.syncope.core.persistence.jpa.entity.AbstractEntity;
import org.apache.syncope.core.persistence.jpa.entity.JPAAnyType;
+import org.apache.syncope.core.persistence.jpa.entity.JPAAnyTypeClass;
import org.identityconnectors.framework.common.objects.ObjectClass;
import org.identityconnectors.framework.common.objects.SyncToken;
@@ -59,6 +66,13 @@ public class JPAProvision extends AbstractEntity<Long> implements Provision {
@NotNull
private String objectClass;
+ @ManyToMany(fetch = FetchType.EAGER)
+ @JoinTable(joinColumns =
+ @JoinColumn(name = "provision_id"),
+ inverseJoinColumns =
+ @JoinColumn(name = "anyTypeClass_name"))
+ private List<JPAAnyTypeClass> auxClasses = new ArrayList<>();
+
@Lob
private String serializedSyncToken;
@@ -105,6 +119,17 @@ public class JPAProvision extends AbstractEntity<Long> implements Provision {
}
@Override
+ public boolean add(final AnyTypeClass auxClass) {
+ checkType(auxClass, JPAAnyTypeClass.class);
+ return auxClasses.contains((JPAAnyTypeClass) auxClass) || auxClasses.add((JPAAnyTypeClass) auxClass);
+ }
+
+ @Override
+ public List<? extends AnyTypeClass> getAuxClasses() {
+ return auxClasses;
+ }
+
+ @Override
public SyncToken getSyncToken() {
return serializedSyncToken == null
? null
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index 4505541..9873f32 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -819,6 +819,9 @@ under the License.
connObjectKey="0" password="1" purpose="PROPAGATION"/>
<Provision id="9" resource_name="resource-csv" anyType_name="USER" objectClass="__ACCOUNT__"/>
+ <Provision_AnyTypeClass provision_id="9" anyTypeClass_name="csv"/>
+ <Provision_AnyTypeClass provision_id="9" anyTypeClass_name="generic membership"/>
+ <Provision_AnyTypeClass provision_id="9" anyTypeClass_name="minimal group"/>
<Mapping id="9" provision_id="9"/>
<MappingItem id="200" extAttrName="id" mapping_id="9"
intMappingType="Username" mandatoryCondition="true"
@@ -862,6 +865,8 @@ under the License.
connObjectKey="0" password="1" purpose="BOTH"/>
<Provision id="11" resource_name="resource-ldap" anyType_name="USER" objectClass="__ACCOUNT__"/>
+ <Provision_AnyTypeClass provision_id="11" anyTypeClass_name="generic membership"/>
+ <Provision_AnyTypeClass provision_id="11" anyTypeClass_name="minimal group"/>
<Mapping id="11" provision_id="11"
connObjectLink="'uid=' + username + ',ou=people,o=isp'"/>
<MappingItem id="311" connObjectKey="1" password="0" mapping_id="11"
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
index b4aa8b2..51ebfa5 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ResourceDataBinderImpl.java
@@ -18,20 +18,21 @@
*/
package org.apache.syncope.core.provisioning.java.data;
-import org.apache.syncope.core.provisioning.api.data.ResourceDataBinder;
-import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
-import java.util.Set;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.IteratorUtils;
import org.apache.commons.lang3.SerializationUtils;
import org.apache.syncope.common.lib.SyncopeClientCompositeException;
import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.to.AnyTypeClassTO;
import org.apache.syncope.common.lib.to.MappingItemTO;
import org.apache.syncope.common.lib.to.MappingTO;
import org.apache.syncope.common.lib.to.ProvisionTO;
import org.apache.syncope.common.lib.to.ResourceTO;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.IntMappingType;
+import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
@@ -42,18 +43,23 @@ import org.apache.syncope.core.persistence.api.entity.resource.Mapping;
import org.apache.syncope.core.persistence.api.entity.resource.MappingItem;
import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
import org.apache.syncope.core.provisioning.java.jexl.JexlUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
import org.apache.syncope.core.persistence.api.entity.AnyType;
+import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
+import org.apache.syncope.core.persistence.api.entity.DerSchema;
+import org.apache.syncope.core.persistence.api.entity.PlainSchema;
import org.apache.syncope.core.persistence.api.entity.VirSchema;
+import org.apache.syncope.core.persistence.api.entity.policy.PullPolicy;
import org.apache.syncope.core.persistence.api.entity.resource.Provision;
+import org.apache.syncope.core.provisioning.api.data.ResourceDataBinder;
+import org.apache.syncope.core.provisioning.api.utils.EntityUtils;
import org.identityconnectors.framework.common.objects.ObjectClass;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import org.apache.syncope.core.persistence.api.entity.policy.PullPolicy;
@Component
public class ResourceDataBinderImpl implements ResourceDataBinder {
@@ -75,6 +81,9 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
private VirSchemaDAO virSchemaDAO;
@Autowired
+ private AnyTypeClassDAO anyTypeClassDAO;
+
+ @Autowired
private EntityFactory entityFactory;
@Override
@@ -127,6 +136,23 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
}
provision.setObjectClass(new ObjectClass(provisionTO.getObjectClass()));
+ // add all classes contained in the TO
+ for (String name : provisionTO.getAuxClasses()) {
+ AnyTypeClass anyTypeClass = anyTypeClassDAO.find(name);
+ if (anyTypeClass == null) {
+ LOG.warn("Ignoring invalid {}: {}", AnyTypeClass.class.getSimpleName(), name);
+ } else {
+ provision.add(anyTypeClass);
+ }
+ }
+ // remove all classes not contained in the TO
+ for (Iterator<? extends AnyTypeClass> itor = provision.getAuxClasses().iterator(); itor.hasNext();) {
+ AnyTypeClass anyTypeClass = itor.next();
+ if (!provisionTO.getAuxClasses().contains(anyTypeClass.getKey())) {
+ itor.remove();
+ }
+ }
+
if (provisionTO.getSyncToken() == null) {
provision.setSyncToken(null);
}
@@ -142,7 +168,29 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
} else {
mapping.getItems().clear();
}
- populateMapping(provisionTO.getMapping(), mapping, entityFactory.newEntity(MappingItem.class));
+
+ AnyTypeClassTO allowedSchemas = new AnyTypeClassTO();
+ for (Iterator<AnyTypeClass> itor = IteratorUtils.chainedIterator(
+ provision.getAnyType().getClasses().iterator(),
+ provision.getAuxClasses().iterator()); itor.hasNext();) {
+
+ AnyTypeClass anyTypeClass = itor.next();
+ allowedSchemas.getPlainSchemas().addAll(
+ CollectionUtils.collect(anyTypeClass.getPlainSchemas(),
+ EntityUtils.<String, PlainSchema>keyTransformer()));
+ allowedSchemas.getDerSchemas().addAll(
+ CollectionUtils.collect(anyTypeClass.getDerSchemas(),
+ EntityUtils.<String, DerSchema>keyTransformer()));
+ allowedSchemas.getVirSchemas().addAll(
+ CollectionUtils.collect(anyTypeClass.getVirSchemas(),
+ EntityUtils.<String, VirSchema>keyTransformer()));
+ }
+
+ populateMapping(
+ provisionTO.getMapping(),
+ mapping,
+ entityFactory.newEntity(MappingItem.class),
+ allowedSchemas);
}
if (provisionTO.getVirSchemas().isEmpty()) {
@@ -201,70 +249,92 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
return resource;
}
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private void populateMapping(final MappingTO mappingTO, final Mapping mapping, final MappingItem prototype) {
+ private void populateMapping(
+ final MappingTO mappingTO,
+ final Mapping mapping,
+ final MappingItem prototype,
+ final AnyTypeClassTO allowedSchemas) {
+
mapping.setConnObjectLink(mappingTO.getConnObjectLink());
- for (MappingItem item : getMappingItems(mappingTO.getItems(), prototype)) {
- item.setMapping(mapping);
- if (item.isConnObjectKey()) {
- mapping.setConnObjectKeyItem(item);
+ SyncopeClientCompositeException scce = SyncopeClientException.buildComposite();
+ SyncopeClientException invalidMapping = SyncopeClientException.build(ClientExceptionType.InvalidMapping);
+ SyncopeClientException requiredValuesMissing =
+ SyncopeClientException.build(ClientExceptionType.RequiredValuesMissing);
+
+ for (MappingItemTO itemTO : mappingTO.getItems()) {
+ if (itemTO == null || itemTO.getIntMappingType() == null) {
+ LOG.error("Null {} or missing {}",
+ MappingItemTO.class.getSimpleName(), IntMappingType.class.getSimpleName());
+ invalidMapping.getElements().add(
+ "Null " + MappingItemTO.class.getSimpleName()
+ + " or missing " + IntMappingType.class.getSimpleName());
} else {
- mapping.add(item);
- }
- }
- }
-
- private Set<MappingItem> getMappingItems(final Collection<MappingItemTO> itemTOs, final MappingItem prototype) {
- Set<MappingItem> items = new HashSet<>(itemTOs.size());
- for (MappingItemTO itemTO : itemTOs) {
- items.add(getMappingItem(itemTO, prototype));
- }
-
- return items;
- }
+ if (itemTO.getIntAttrName() == null) {
+ if (IntMappingType.getEmbedded().contains(itemTO.getIntMappingType())) {
+ itemTO.setIntAttrName(itemTO.getIntMappingType().toString());
+ } else {
+ requiredValuesMissing.getElements().add("intAttrName");
+ scce.addException(requiredValuesMissing);
+ }
+ }
- private MappingItem getMappingItem(final MappingItemTO itemTO, final MappingItem prototype) {
- if (itemTO == null || itemTO.getIntMappingType() == null) {
- LOG.error("Null mappingTO provided");
- return null;
- }
+ boolean allowed;
+ switch (itemTO.getIntMappingType()) {
+ case UserPlainSchema:
+ case GroupPlainSchema:
+ case AnyObjectPlainSchema:
+ allowed = allowedSchemas.getPlainSchemas().contains(itemTO.getIntAttrName());
+ break;
+
+ case UserDerivedSchema:
+ case GroupDerivedSchema:
+ case AnyObjectDerivedSchema:
+ allowed = allowedSchemas.getDerSchemas().contains(itemTO.getIntAttrName());
+ break;
+
+ case UserVirtualSchema:
+ case GroupVirtualSchema:
+ case AnyObjectVirtualSchema:
+ allowed = allowedSchemas.getVirSchemas().contains(itemTO.getIntAttrName());
+ break;
+
+ default:
+ allowed = true;
+ }
- SyncopeClientCompositeException scce = SyncopeClientException.buildComposite();
+ if (allowed) {
+ // no mandatory condition implies mandatory condition false
+ if (!JexlUtils.isExpressionValid(itemTO.getMandatoryCondition() == null
+ ? "false" : itemTO.getMandatoryCondition())) {
- SyncopeClientException requiredValuesMissing = SyncopeClientException.build(
- ClientExceptionType.RequiredValuesMissing);
+ SyncopeClientException invalidMandatoryCondition =
+ SyncopeClientException.build(ClientExceptionType.InvalidValues);
+ invalidMandatoryCondition.getElements().add(itemTO.getMandatoryCondition());
+ scce.addException(invalidMandatoryCondition);
+ }
- if (itemTO.getIntAttrName() == null) {
- if (IntMappingType.getEmbedded().contains(itemTO.getIntMappingType())) {
- itemTO.setIntAttrName(itemTO.getIntMappingType().toString());
- } else {
- requiredValuesMissing.getElements().add("intAttrName");
+ MappingItem item = SerializationUtils.clone(prototype);
+ BeanUtils.copyProperties(itemTO, item, MAPPINGITEM_IGNORE_PROPERTIES);
+ item.setMapping(mapping);
+ if (item.isConnObjectKey()) {
+ mapping.setConnObjectKeyItem(item);
+ } else {
+ mapping.add(item);
+ }
+ } else {
+ LOG.error("{} not allowed", itemTO.getIntAttrName());
+ invalidMapping.getElements().add(itemTO.getIntAttrName() + " not allowed");
+ }
}
}
- // Throw composite exception if there is at least one element set in the composing exceptions
- if (!requiredValuesMissing.isEmpty()) {
- scce.addException(requiredValuesMissing);
+ if (!invalidMapping.getElements().isEmpty()) {
+ scce.addException(invalidMapping);
}
-
- // no mandatory condition implies mandatory condition false
- if (!JexlUtils.isExpressionValid(itemTO.getMandatoryCondition() == null
- ? "false" : itemTO.getMandatoryCondition())) {
-
- SyncopeClientException invalidMandatoryCondition = SyncopeClientException.build(
- ClientExceptionType.InvalidValues);
- invalidMandatoryCondition.getElements().add(itemTO.getMandatoryCondition());
- scce.addException(invalidMandatoryCondition);
- }
-
if (scce.hasExceptions()) {
throw scce;
}
-
- MappingItem item = SerializationUtils.clone(prototype);
- BeanUtils.copyProperties(itemTO, item, MAPPINGITEM_IGNORE_PROPERTIES);
- return item;
}
private void populateMappingTO(final Mapping mapping, final MappingTO mappingTO) {
@@ -308,6 +378,8 @@ public class ResourceDataBinderImpl implements ResourceDataBinder {
provisionTO.setKey(provision.getKey());
provisionTO.setAnyType(provision.getAnyType().getKey());
provisionTO.setObjectClass(provision.getObjectClass().getObjectClassValue());
+ provisionTO.getAuxClasses().addAll(CollectionUtils.collect(
+ provision.getAuxClasses(), EntityUtils.<String, AnyTypeClass>keyTransformer()));
provisionTO.setSyncToken(provision.getSerializedSyncToken());
if (provision.getMapping() != null) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/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 ef0f7c6..edfcf04 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
@@ -65,7 +65,7 @@ public class TopologyITCase extends AbstractConsoleITCase {
@Test
public void editProvisioning() {
wicketTester.clickLink("body:topologyLI:topology");
-
+
Component component = findComponentByProp("key", "body:resources", "ws-target-resource-1");
assertNotNull(component);
wicketTester.executeAjaxEvent(component.getPageRelativePath() + ":res", Constants.ON_CLICK);
@@ -77,6 +77,11 @@ public class TopologyITCase extends AbstractConsoleITCase {
wicketTester.clickLink("body:toggle:outerObjectsRepeater:0:outer:form:content:tabbedPanel:panel:container:"
+ "content:group:beans:0:actions:panelMapping:mappingLink");
+ FormTester formTester = wicketTester.newFormTester(
+ "body:toggle:outerObjectsRepeater:0:outer:form:content:tabbedPanel:panel:container:"
+ + "content:wizard:form");
+ formTester.submit("buttons:next");
+
wicketTester.assertComponent("body:toggle:outerObjectsRepeater:0:outer:form:content:tabbedPanel:panel:"
+ "container:content:wizard:form:view:mapping:mappingContainer:mappings:1", WebMarkupContainer.class);
}
@@ -101,7 +106,7 @@ public class TopologyITCase extends AbstractConsoleITCase {
@Test
public void editPushTask() {
wicketTester.clickLink("body:topologyLI:topology");
-
+
Component component = findComponentByProp("key", "body:resources", "resource-ldap");
assertNotNull(component);
wicketTester.executeAjaxEvent(component.getPageRelativePath() + ":res", Constants.ON_CLICK);
@@ -110,10 +115,9 @@ public class TopologyITCase extends AbstractConsoleITCase {
+ "first:container:content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable:"
+ "body:rows:1:cells:9:cell:panelEdit:editLink");
- final FormTester formTester = wicketTester.newFormTester(
+ FormTester formTester = wicketTester.newFormTester(
"body:toggle:outerObjectsRepeater:1:outer:form:content:"
+ "tasks:firstLevelContainer:first:container:content:wizard:form");
-
formTester.setValue("view:description:textField", "test");
formTester.submit("buttons:finish");
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
index 90c98e8..0c7f380 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PushTaskITCase.java
@@ -261,7 +261,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
assertNotNull(schemaTO);
AnyTypeClassTO typeClass = new AnyTypeClassTO();
- typeClass.setKey("SYNCOPE-598");
+ typeClass.setKey("SYNCOPE-598" + getUUIDString());
typeClass.getPlainSchemas().add(schemaTO.getKey());
anyTypeClassService.create(typeClass);
@@ -288,6 +288,7 @@ public class PushTaskITCase extends AbstractTaskITCase {
ProvisionTO provisionTO = new ProvisionTO();
provisionTO.setAnyType(AnyTypeKind.GROUP.name());
provisionTO.setObjectClass(ObjectClass.GROUP_NAME);
+ provisionTO.getAuxClasses().add(typeClass.getKey());
resourceTO.getProvisions().add(provisionTO);
MappingTO mapping = new MappingTO();
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ResourceITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ResourceITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ResourceITCase.java
index b3010ff..e9923ef 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ResourceITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ResourceITCase.java
@@ -93,9 +93,9 @@ public class ResourceITCase extends AbstractITCase {
item = new MappingItemTO();
item.setExtAttrName("fullname");
item.setIntAttrName("cn");
- item.setIntMappingType(IntMappingType.UserPlainSchema);
+ item.setIntMappingType(IntMappingType.UserDerivedSchema);
item.setConnObjectKey(false);
- item.setPurpose(MappingPurpose.BOTH);
+ item.setPurpose(MappingPurpose.PROPAGATION);
mapping.add(item);
return resourceTO;
@@ -153,9 +153,9 @@ public class ResourceITCase extends AbstractITCase {
item = new MappingItemTO();
item.setExtAttrName("fullname");
item.setIntAttrName("cn");
- item.setIntMappingType(IntMappingType.UserPlainSchema);
+ item.setIntMappingType(IntMappingType.UserDerivedSchema);
item.setConnObjectKey(false);
- item.setPurpose(MappingPurpose.BOTH);
+ item.setPurpose(MappingPurpose.PROPAGATION);
mapping.add(item);
resourceTO.setKey(resourceName);
@@ -262,8 +262,10 @@ public class ResourceITCase extends AbstractITCase {
createResource(resourceTO);
fail("Create should not have worked");
} catch (SyncopeClientException e) {
- assertEquals(ClientExceptionType.RequiredValuesMissing, e.getType());
- assertEquals("intAttrName", e.getElements().iterator().next());
+ assertEquals(ClientExceptionType.Composite, e.getType());
+ SyncopeClientException rvm = e.asComposite().getException(ClientExceptionType.RequiredValuesMissing);
+ assertNotNull(rvm);
+ assertEquals("intAttrName", rvm.getElements().iterator().next());
}
}
@@ -644,7 +646,6 @@ public class ResourceITCase extends AbstractITCase {
fail();
} catch (SyncopeClientException e) {
assertEquals(ClientExceptionType.InvalidExternalResource, e.getType());
-
assertTrue(e.getElements().iterator().next().contains(EntityViolationType.InvalidName.name()));
}
}
[2/3] syncope git commit: [SYNCOPE-806] Resource provisioning
validated, and management of aux classes in Provision instances added
Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/syncope/blob/692e1f91/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
index 25434e9..b51670b 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/VirAttrITCase.java
@@ -455,6 +455,35 @@ public class VirAttrITCase extends AbstractITCase {
try {
// -------------------------------------------
+ // Create a VirAttrITCase ad-hoc
+ // -------------------------------------------
+ VirSchemaTO rvirtualdata;
+ try {
+ rvirtualdata = schemaService.read(SchemaType.VIRTUAL, "rvirtualdata");
+ } catch (SyncopeClientException e) {
+ LOG.warn("rvirtualdata not found, re-creating", e);
+
+ rvirtualdata = new VirSchemaTO();
+ rvirtualdata.setKey("rvirtualdata");
+ rvirtualdata.setExtAttrName("businessCategory");
+ rvirtualdata.setProvision(20);
+
+ rvirtualdata = createSchema(SchemaType.VIRTUAL, rvirtualdata);
+ }
+ assertNotNull(rvirtualdata);
+
+ if (!"minimal group".equals(rvirtualdata.getAnyTypeClass())) {
+ LOG.warn("rvirtualdata not in minimal group, restoring");
+
+ AnyTypeClassTO minimalGroup = anyTypeClassService.read("minimal group");
+ minimalGroup.getVirSchemas().add(rvirtualdata.getKey());
+ anyTypeClassService.update(minimalGroup);
+
+ rvirtualdata = schemaService.read(SchemaType.VIRTUAL, rvirtualdata.getKey());
+ assertEquals("minimal group", rvirtualdata.getAnyTypeClass());
+ }
+
+ // -------------------------------------------
// Create a resource ad-hoc
// -------------------------------------------
ResourceTO resourceTO = new ResourceTO();
@@ -465,6 +494,7 @@ public class VirAttrITCase extends AbstractITCase {
ProvisionTO provisionTO = new ProvisionTO();
provisionTO.setAnyType(AnyTypeKind.USER.name());
provisionTO.setObjectClass(ObjectClass.ACCOUNT_NAME);
+ provisionTO.getAuxClasses().add("minimal group");
resourceTO.getProvisions().add(provisionTO);
MappingTO mapping = new MappingTO();
@@ -495,34 +525,6 @@ public class VirAttrITCase extends AbstractITCase {
assertNotNull(getObject(
resourceService.create(resourceTO).getLocation(), ResourceService.class, ResourceTO.class));
// -------------------------------------------
- // -------------------------------------------
- // Create a VirAttrITCase ad-hoc
- // -------------------------------------------
- VirSchemaTO rvirtualdata;
- try {
- rvirtualdata = schemaService.read(SchemaType.VIRTUAL, "rvirtualdata");
- } catch (SyncopeClientException e) {
- LOG.warn("rvirtualdata not found, re-creating", e);
-
- rvirtualdata = new VirSchemaTO();
- rvirtualdata.setKey("rvirtualdata");
- rvirtualdata.setExtAttrName("businessCategory");
- rvirtualdata.setProvision(20);
-
- rvirtualdata = createSchema(SchemaType.VIRTUAL, rvirtualdata);
- }
- assertNotNull(rvirtualdata);
-
- if (!"minimal group".equals(rvirtualdata.getAnyTypeClass())) {
- LOG.warn("rvirtualdata not in minimal group, restoring");
-
- AnyTypeClassTO minimalGroup = anyTypeClassService.read("minimal group");
- minimalGroup.getVirSchemas().add(rvirtualdata.getKey());
- anyTypeClassService.update(minimalGroup);
-
- rvirtualdata = schemaService.read(SchemaType.VIRTUAL, rvirtualdata.getKey());
- assertEquals("minimal group", rvirtualdata.getAnyTypeClass());
- }
GroupTO groupTO = new GroupTO();
groupTO.setName(groupName);