Repository: syncope Updated Branches: refs/heads/master e5d228fea -> e71ebd9fc
[SYNCOPE-156] providing type extension by assigning groups Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/e71ebd9f Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/e71ebd9f Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/e71ebd9f Branch: refs/heads/master Commit: e71ebd9fce85c58fcbcfcdd2d893e02bd6715db2 Parents: e5d228f Author: fmartelli <[email protected]> Authored: Mon Nov 23 18:21:45 2015 +0100 Committer: fmartelli <[email protected]> Committed: Mon Nov 23 18:22:10 2015 +0100 ---------------------------------------------------------------------- .../console/wizards/any/AbstractAttrs.java | 54 ++++++++++++ .../client/console/wizards/any/AuxClasses.java | 92 ++++++++++++-------- .../client/console/wizards/any/DerAttrs.java | 2 +- .../client/console/wizards/any/PlainAttrs.java | 2 +- .../client/console/wizards/any/VirAttrs.java | 2 +- .../client/console/wizards/any/AuxClasses.html | 42 ++++++--- .../console/wizards/any/AuxClasses.properties | 1 + .../wizards/any/AuxClasses_it.properties | 1 + .../wizards/any/AuxClasses_pt_BR.properties | 1 + 9 files changed, 144 insertions(+), 53 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/e71ebd9f/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java index 4413763..401f5a2 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AbstractAttrs.java @@ -18,9 +18,21 @@ */ package org.apache.syncope.client.console.wizards.any; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Transformer; import org.apache.syncope.client.console.rest.AnyTypeRestClient; +import org.apache.syncope.client.console.rest.GroupRestClient; import org.apache.syncope.client.console.rest.SchemaRestClient; +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.MembershipTO; +import org.apache.syncope.common.lib.to.UserTO; import org.apache.wicket.extensions.wizard.WizardStep; public abstract class AbstractAttrs extends WizardStep { @@ -31,9 +43,51 @@ public abstract class AbstractAttrs extends WizardStep { protected final AnyTypeRestClient anyTypeRestClient = new AnyTypeRestClient(); + private final GroupRestClient groupRestClient = new GroupRestClient(); + protected final AnyTO entityTO; public AbstractAttrs(final AnyTO entityTO) { this.entityTO = entityTO; } + + protected Set<String> getAllAuxClasses() { + final List<MembershipTO> memberships; + final List<Long> dyngroups; + if (entityTO instanceof UserTO) { + memberships = UserTO.class.cast(entityTO).getMemberships(); + dyngroups = UserTO.class.cast(entityTO).getDynGroups(); + } else if (entityTO instanceof AnyObjectTO) { + memberships = AnyObjectTO.class.cast(entityTO).getMemberships(); + dyngroups = AnyObjectTO.class.cast(entityTO).getDynGroups(); + } else { + memberships = Collections.<MembershipTO>emptyList(); + dyngroups = Collections.<Long>emptyList(); + } + + final List<GroupTO> groups = new ArrayList<>(); + CollectionUtils.collect(memberships, new Transformer<MembershipTO, GroupTO>() { + + @Override + public GroupTO transform(final MembershipTO input) { + dyngroups.remove(input.getRightKey()); + return groupRestClient.read(input.getRightKey()); + } + }, groups); + + CollectionUtils.collect(dyngroups, new Transformer<Long, GroupTO>() { + + @Override + public GroupTO transform(final Long input) { + return groupRestClient.read(input); + } + }, groups); + + final Set<String> auxClasses = new HashSet<>(entityTO.getAuxClasses()); + for (GroupTO groupTO : groups) { + auxClasses.addAll(groupTO.getAuxClasses()); + } + + return auxClasses; + } } http://git-wip-us.apache.org/repos/asf/syncope/blob/e71ebd9f/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java index 6e612b6..8c091a8 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/AuxClasses.java @@ -20,6 +20,7 @@ package org.apache.syncope.client.console.wizards.any; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -46,7 +47,7 @@ public class AuxClasses extends WizardStep { private final GroupRestClient groupRestClient = new GroupRestClient(); - private static final Pattern GROUP_ID_PATTERN = Pattern.compile("\\[(\\d)\\]? (.*)"); + private static final Pattern GROUP_ID_PATTERN = Pattern.compile("\\[(\\d*)\\]? (.*)"); public <T extends AnyTO> AuxClasses(final T entityTO, final String... anyTypeClass) { this.setOutputMarkupId(true); @@ -57,21 +58,39 @@ public class AuxClasses extends WizardStep { } else { fragment = new Fragment("groups", "groupsFragment", this); - final List<MembershipTO> memberships = entityTO instanceof UserTO - ? UserTO.class.cast(entityTO).getMemberships() - : AnyObjectTO.class.cast(entityTO).getMemberships(); + final ArrayList<String> available = CollectionUtils.collect( + groupRestClient.list(entityTO.getRealm(), -1, -1, new SortParam<>("name", true), null), + new Transformer<GroupTO, String>() { - fragment.add(new AjaxPalettePanel.Builder<String>().setAllowOrder(true) - .build( - "groups", - new ListModel<String>(CollectionUtils.collect(memberships, + @Override + public String transform(final GroupTO input) { + return String.format("[%d] %s", input.getKey(), input.getName()); + } + }, new ArrayList<String>()); + + final List<MembershipTO> memberships; + final List<Long> dyngroups; + + if (entityTO instanceof UserTO) { + memberships = UserTO.class.cast(entityTO).getMemberships(); + dyngroups = UserTO.class.cast(entityTO).getDynGroups(); + } else if (entityTO instanceof AnyObjectTO) { + memberships = AnyObjectTO.class.cast(entityTO).getMemberships(); + dyngroups = AnyObjectTO.class.cast(entityTO).getDynGroups(); + } else { + memberships = Collections.<MembershipTO>emptyList(); + dyngroups = Collections.<Long>emptyList(); + } + + fragment.add(new AjaxPalettePanel.Builder<String>().setAllowOrder(true).build( + "groups", new ListModel<String>(CollectionUtils.collect(memberships, new Transformer<MembershipTO, String>() { - @Override - public String transform(final MembershipTO input) { - return String.format("[%d] %s", input.getRightKey(), input.getGroupName()); - } - }, new ArrayList<String>())) { + @Override + public String transform(final MembershipTO input) { + return String.format("[%d] %s", input.getRightKey(), input.getGroupName()); + } + }, new ArrayList<String>())) { private static final long serialVersionUID = 1L; @@ -84,31 +103,35 @@ public class AuxClasses extends WizardStep { @Override public MembershipTO transform(final String input) { final Matcher m = GROUP_ID_PATTERN.matcher(input); - final String groupName; - final long groupKey; + final String name; + final long key; if (m.matches()) { - groupKey = Long.parseLong(m.group(1)); - groupName = m.group(2); + key = Long.parseLong(m.group(1)); + name = m.group(2); } else { - groupKey = -1L; - groupName = input; + key = -1L; + name = input; } - return new MembershipTO.Builder().left(entityTO.getType(), entityTO.getKey()). - group(groupKey, groupName).build(); + return new MembershipTO.Builder(). + left(entityTO.getType(), entityTO.getKey()).group(key, name).build(); } }, memberships); } }, - new ListModel<>(CollectionUtils.collect(groupRestClient.list( - entityTO.getRealm(), -1, -1, new SortParam<>("name", true), null), - new Transformer<GroupTO, String>() { - - @Override - public String transform(final GroupTO input) { - return String.format("[%d] %s", input.getKey(), input.getName()); - } - }, new ArrayList<String>()))).setOutputMarkupId(true)); + new ListModel<>(available)).setOutputMarkupId(true)); + + fragment.add(new AjaxPalettePanel.Builder<String>().setAllowOrder(true).build( + "dyngroups", new ListModel<String>(CollectionUtils.collect(dyngroups, + new Transformer<Long, String>() { + + @Override + public String transform(final Long input) { + final GroupTO groupTO = groupRestClient.read(input); + return String.format("[%d] %s", groupTO.getKey(), groupTO.getName()); + } + }, new ArrayList<String>())), + new ListModel<>(available)).setEnabled(false).setOutputMarkupId(true)); } add(fragment); @@ -121,11 +144,8 @@ public class AuxClasses extends WizardStep { } } - add(new AjaxPalettePanel.Builder<String>(). - setAllowOrder(true) - .build("auxClasses", - new PropertyModel<List<String>>(entityTO, "auxClasses"), - new ListModel<>(choices)).setOutputMarkupId(true)); - + add(new AjaxPalettePanel.Builder<String>().setAllowOrder(true).build("auxClasses", + new PropertyModel<List<String>>(entityTO, "auxClasses"), + new ListModel<>(choices)).setOutputMarkupId(true)); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/e71ebd9f/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java index 1b08760..8ac047b 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/DerAttrs.java @@ -58,7 +58,7 @@ public class DerAttrs extends AbstractAttrs { @Override protected List<AttrTO> load() { final List<String> classes = CollectionUtils.collect( - anyTypeRestClient.getAnyTypeClass(entityTO.getAuxClasses().toArray(new String[] {})), + anyTypeRestClient.getAnyTypeClass(getAllAuxClasses().toArray(new String[] {})), new Transformer<AnyTypeClassTO, String>() { @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/e71ebd9f/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java index 3aecf61..aef1962 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/PlainAttrs.java @@ -80,7 +80,7 @@ public class PlainAttrs extends AbstractAttrs { @Override protected List<AttrTO> load() { setSchemas(CollectionUtils.collect( - anyTypeRestClient.getAnyTypeClass(entityTO.getAuxClasses().toArray(new String[] {})), + anyTypeRestClient.getAnyTypeClass(getAllAuxClasses().toArray(new String[] {})), new Transformer<AnyTypeClassTO, String>() { @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/e71ebd9f/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java ---------------------------------------------------------------------- diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java index 7f45501..1c247e0 100644 --- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java +++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/VirAttrs.java @@ -56,7 +56,7 @@ public class VirAttrs extends AbstractAttrs { @Override protected List<AttrTO> load() { final List<String> classes = CollectionUtils.collect( - anyTypeRestClient.getAnyTypeClass(entityTO.getAuxClasses().toArray(new String[] {})), + anyTypeRestClient.getAnyTypeClass(getAllAuxClasses().toArray(new String[] {})), new Transformer<AnyTypeClassTO, String>() { @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/e71ebd9f/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.html ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.html index fe77779..ac3ba3c 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.html +++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.html @@ -20,18 +20,7 @@ under the License. <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="groups.palette">[GROUPS]</wicket:message> - </h3> - </div> - <div class="box-body"> - <span wicket:id="groups">[GROUPS]</span> - </div> - </div> - </div> + <span wicket:id="groups">[GROUPS]</span> <div class="col-xs-12"> <div class="box"> @@ -46,10 +35,35 @@ under the License. </div> </div> - <wicket:fragment wicket:id="emptyFragment"/> <wicket:fragment wicket:id="groupsFragment"> - <span wicket:id="groups"/> + <div class="col-xs-12"> + <div class="box"> + <div class="box-header"> + <h3 class="box-title"> + <wicket:message key="groups.palette">[GROUPS]</wicket:message> + </h3> + </div> + <div class="box-body"> + <span wicket:id="groups"/> + </div> + </div> + </div> + + <div class="col-xs-12"> + <div class="box"> + <div class="box-header"> + <h3 class="box-title"> + <wicket:message key="dyngroups.palette">[DYNAMIC GROUPS]</wicket:message> + </h3> + </div> + <div class="box-body"> + <span wicket:id="dyngroups">[DYNAMIC GROUPS]</span> + </div> + </div> + </div> </wicket:fragment> + + <wicket:fragment wicket:id="emptyFragment"/> </wicket:panel> </body> </html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/syncope/blob/e71ebd9f/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.properties index af43d8e..fdfe92b 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.properties +++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses.properties @@ -16,3 +16,4 @@ # under the License. groups.palette=Groups auxclasses.palette=Profile extension by auxiliary classes +dyngroups.palette=Dynamic groups http://git-wip-us.apache.org/repos/asf/syncope/blob/e71ebd9f/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_it.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_it.properties index 4aecff2..bd84c93 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_it.properties +++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_it.properties @@ -16,3 +16,4 @@ # under the License. groups.palette=Gruppi auxclasses.palette=Estensione profilo attraverso classi ausiliarie +dyngroups.palette=Gruppi dinamici http://git-wip-us.apache.org/repos/asf/syncope/blob/e71ebd9f/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_pt_BR.properties ---------------------------------------------------------------------- diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_pt_BR.properties index b9c6a57..120c4d6 100644 --- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_pt_BR.properties +++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/AuxClasses_pt_BR.properties @@ -16,3 +16,4 @@ # under the License. groups.palette=Grupos auxclasses.palette=Perfil de extens\u00e3o atrav\u00e9s de classes auxiliares +dyngroups.palette=Grupos din\u00e2micos
