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

Reply via email to