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 2013/03/04 16:52:52 UTC

svn commit: r1452352 - in /syncope/trunk: ./ common/src/main/java/org/apache/syncope/common/types/ console/src/main/java/org/apache/syncope/console/commons/ console/src/main/java/org/apache/syncope/console/pages/ console/src/main/java/org/apache/syncop...

Author: ilgrosso
Date: Mon Mar  4 15:52:51 2013
New Revision: 1452352

URL: http://svn.apache.org/r1452352
Log:
[SYNCOPE-332] Merge from 1_0_X

Modified:
    syncope/trunk/   (props changed)
    syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SchemaType.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/AttributableDataProvider.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SchemaModalPageFactory.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SortableAttributableProviderComparator.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SortableDataProviderComparator.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/DisplayAttributesModalPage.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/RoleModalPage.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Schema.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchResultPanel.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java

Propchange: syncope/trunk/
------------------------------------------------------------------------------
  Merged /syncope/branches/1_0_X:r1451188-1452348

Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SchemaType.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SchemaType.java?rev=1452352&r1=1452351&r2=1452352&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SchemaType.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/types/SchemaType.java Mon Mar  4 15:52:51 2013
@@ -21,36 +21,29 @@ package org.apache.syncope.common.types;
 import javax.xml.bind.annotation.XmlEnum;
 
 @XmlEnum
-public
-enum SchemaType {
+public enum SchemaType {
 
     /**
      * Derived schema calculated based on other attributes.
      */
     DERIVED("derivedSchema"),
-
     /**
      * Standard schema for normal attributes to be stored within syncope.
      */
     NORMAL("schema"),
-
     /**
      * Virtual schema for attributes fetched from remote resources only.
      */
     VIRTUAL("virtualSchema");
 
-    public static SchemaType fromString(String value) {
-        return SchemaType.valueOf(value.toUpperCase());
-    }
-
     // TODO remove name once CXF migration is complete
     private final String name;
 
-    private SchemaType(String name) {
+    private SchemaType(final String name) {
         this.name = name;
     }
 
     public String toSpringURL() {
         return name;
     }
-}
\ No newline at end of file
+}

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/AttributableDataProvider.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/AttributableDataProvider.java?rev=1452352&r1=1452351&r2=1452352&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/AttributableDataProvider.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/AttributableDataProvider.java Mon Mar  4 15:52:51 2013
@@ -56,10 +56,10 @@ public class AttributableDataProvider ex
         this.filtered = filtered;
         this.paginatorRows = paginatorRows;
 
-        //Default sorting
+        // default sorting
         setSort("id", SortOrder.ASCENDING);
 
-        comparator = new SortableAttributableProviderComparator(this);
+        this.comparator = new SortableAttributableProviderComparator(this);
     }
 
     public void setSearchCond(final NodeCond searchCond) {

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SchemaModalPageFactory.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SchemaModalPageFactory.java?rev=1452352&r1=1452351&r2=1452352&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SchemaModalPageFactory.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SchemaModalPageFactory.java Mon Mar  4 15:52:51 2013
@@ -19,6 +19,7 @@
 package org.apache.syncope.console.commons;
 
 import org.apache.syncope.common.types.AttributableType;
+import org.apache.syncope.common.types.SchemaType;
 import org.apache.syncope.console.pages.AbstractSchemaModalPage;
 import org.apache.syncope.console.pages.BaseModalPage;
 import org.apache.syncope.console.pages.DerivedSchemaModalPage;
@@ -37,14 +38,6 @@ abstract public class SchemaModalPageFac
     @SpringBean
     protected SchemaRestClient restClient;
 
-    public enum SchemaType {
-
-        NORMAL,
-        DERIVED,
-        VIRTUAL
-
-    };
-
     public static AbstractSchemaModalPage getSchemaModalPage(AttributableType entity, SchemaType schemaType) {
 
         AbstractSchemaModalPage page;
@@ -53,9 +46,11 @@ abstract public class SchemaModalPageFac
             case DERIVED:
                 page = new DerivedSchemaModalPage(entity);
                 break;
+
             case VIRTUAL:
                 page = new VirtualSchemaModalPage(entity);
                 break;
+
             default:
                 page = new SchemaModalPage(entity);
                 break;

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SortableAttributableProviderComparator.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SortableAttributableProviderComparator.java?rev=1452352&r1=1452351&r2=1452352&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SortableAttributableProviderComparator.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SortableAttributableProviderComparator.java Mon Mar  4 15:52:51 2013
@@ -18,12 +18,14 @@
  */
 package org.apache.syncope.console.commons;
 
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import org.apache.syncope.common.to.AbstractAttributableTO;
 import org.apache.syncope.common.to.AttributeTO;
+import org.apache.syncope.common.types.SchemaType;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
 import org.apache.wicket.model.AbstractReadOnlyModel;
 
@@ -31,46 +33,86 @@ public class SortableAttributableProvide
 
     private static final long serialVersionUID = 1775967163571699258L;
 
-    private static final Set<String> inlineProps;
-
-    static {
-        inlineProps = new HashSet<String>();
-        inlineProps.add("id");
-        inlineProps.add("status");
-        inlineProps.add("token");
-        inlineProps.add("username");
-    }
+    private static final Set<String> INLINE_PROPS = new HashSet<String>(Arrays.asList(
+            new String[]{"id", "status", "token", "username"}));
 
     public SortableAttributableProviderComparator(final SortableDataProvider<AbstractAttributableTO, String> provider) {
         super(provider);
     }
 
     @Override
-    public int compare(final AbstractAttributableTO o1, final AbstractAttributableTO o2) {
-        if (inlineProps.contains(provider.getSort().getProperty())) {
-            return super.compare(o1, o2);
+    public int compare(final AbstractAttributableTO attributable1, AbstractAttributableTO attributable2) {
+        if (INLINE_PROPS.contains(provider.getSort().getProperty())) {
+            return super.compare(attributable1, attributable2);
         }
 
-        return super.compare(new AttrModel(o1.getAttributeMap()), new AttrModel(o2.getAttributeMap()));
+        return super.compare(new AttrModel(attributable1), new AttrModel(attributable2));
     }
 
+    @SuppressWarnings("rawtypes")
     private class AttrModel extends AbstractReadOnlyModel<Comparable> {
 
-        private static final long serialVersionUID = 7201800923472498270L;
+        private static final long serialVersionUID = -7856686374020091808L;
+
+        private final Map<String, AttributeTO> attrs;
 
-        private final Map<String, AttributeTO> attrMap;
+        private final Map<String, AttributeTO> derAttrs;
 
-        public AttrModel(final Map<String, AttributeTO> attrMap) {
+        private final Map<String, AttributeTO> virAttrs;
+
+        public AttrModel(final AbstractAttributableTO attributableTO) {
             super();
 
-            this.attrMap = attrMap;
+            this.attrs = attributableTO.getAttributeMap();
+            this.derAttrs = attributableTO.getDerivedAttributeMap();
+            this.virAttrs = attributableTO.getVirtualAttributeMap();
         }
 
+        /**
+         * @see UserAttrColumn constructor
+         */
         @Override
         public Comparable getObject() {
+            int hashPos = provider.getSort().getProperty().indexOf('#');
+
+            SchemaType schemaType = null;
+            final String schema;
+            if (hashPos == -1) {
+                schema = provider.getSort().getProperty();
+            } else {
+                String[] splitted = provider.getSort().getProperty().split("#");
+                try {
+                    schemaType = SchemaType.valueOf(splitted[0]);
+                } catch (IllegalArgumentException e) {
+                    // this should never happen
+                }
+                schema = provider.getSort().getProperty().substring(hashPos + 1);
+            }
+
+
+            final AttributeTO attr;
+            if (schemaType == null) {
+                attr = this.attrs.get(schema);
+            } else {
+                switch (schemaType) {
+                    case NORMAL:
+                    default:
+                        attr = this.attrs.get(schema);
+                        break;
+
+                    case DERIVED:
+                        attr = this.derAttrs.get(schema);
+                        break;
+
+                    case VIRTUAL:
+                        attr = this.virAttrs.get(schema);
+                        break;
+                }
+            }
+
             Comparable result = null;
 
-            List<String> values = attrMap.get(provider.getSort().getProperty()).getValues();
+            List<String> values = attr == null ? null : attr.getValues();
             if (values != null && !values.isEmpty()) {
                 result = values.iterator().next();
             }

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SortableDataProviderComparator.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SortableDataProviderComparator.java?rev=1452352&r1=1452351&r2=1452352&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SortableDataProviderComparator.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/commons/SortableDataProviderComparator.java Mon Mar  4 15:52:51 2013
@@ -24,19 +24,18 @@ import org.apache.wicket.extensions.mark
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.PropertyModel;
 
-public class SortableDataProviderComparator<T> implements Comparator<T>, Serializable {
+public class SortableDataProviderComparator<T extends Object> implements Comparator<T>, Serializable {
 
     private static final long serialVersionUID = -8897687699977460543L;
 
     protected final SortableDataProvider<T, String> provider;
 
     public SortableDataProviderComparator(final SortableDataProvider<T, String> provider) {
-
         this.provider = provider;
     }
 
-    protected int compare(final IModel<Comparable> model1, IModel<Comparable> model2) {
-
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    protected int compare(final IModel<Comparable> model1, final IModel<Comparable> model2) {
         int result;
 
         if (model1.getObject() == null && model2.getObject() == null) {
@@ -56,10 +55,11 @@ public class SortableDataProviderCompara
         return result;
     }
 
+    @SuppressWarnings("rawtypes")
     @Override
-    public int compare(final T o1, final T o2) {
-        IModel<Comparable> model1 = new PropertyModel<Comparable>(o1, provider.getSort().getProperty());
-        IModel<Comparable> model2 = new PropertyModel<Comparable>(o2, provider.getSort().getProperty());
+    public int compare(final T object1, final T object2) {
+        IModel<Comparable> model1 = new PropertyModel<Comparable>(object1, provider.getSort().getProperty());
+        IModel<Comparable> model2 = new PropertyModel<Comparable>(object2, provider.getSort().getProperty());
 
         return compare(model1, model2);
     }

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/DisplayAttributesModalPage.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/DisplayAttributesModalPage.java?rev=1452352&r1=1452351&r2=1452352&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/DisplayAttributesModalPage.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/DisplayAttributesModalPage.java Mon Mar  4 15:52:51 2013
@@ -30,10 +30,10 @@ import org.apache.syncope.common.types.A
 import org.apache.syncope.console.commons.Constants;
 import org.apache.syncope.console.commons.PreferenceManager;
 import org.apache.syncope.console.rest.SchemaRestClient;
-import org.apache.syncope.console.wicket.ajax.markup.html.ClearIndicatingAjaxButton;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
 import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Check;
@@ -266,12 +266,12 @@ public class DisplayAttributesModalPage 
             selectedDerSchemas.clear();
         }
 
-        final AjaxButton submit = new ClearIndicatingAjaxButton("submit", new ResourceModel("submit"), pageRef) {
+        final AjaxButton submit = new IndicatingAjaxButton("submit", new ResourceModel("submit")) {
 
             private static final long serialVersionUID = -4804368561204623354L;
 
             @Override
-            protected void onSubmitInternal(final AjaxRequestTarget target, final Form<?> form) {
+            protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
                 if (selectedDetails.size() + selectedSchemas.size() + selectedVirSchemas.size()
                         + selectedDerSchemas.size() > MAX_SELECTIONS) {
 
@@ -297,19 +297,19 @@ public class DisplayAttributesModalPage 
             }
 
             @Override
-            protected void onError(AjaxRequestTarget target, Form<?> form) {
+            protected void onError(final AjaxRequestTarget target, final Form<?> form) {
                 target.add(feedbackPanel);
             }
         };
 
         form.add(submit);
 
-        final AjaxButton cancel = new ClearIndicatingAjaxButton("cancel", new ResourceModel("cancel"), pageRef) {
+        final AjaxButton cancel = new IndicatingAjaxButton("cancel", new ResourceModel("cancel")) {
 
             private static final long serialVersionUID = -958724007591692537L;
 
             @Override
-            protected void onSubmitInternal(final AjaxRequestTarget target, final Form<?> form) {
+            protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
                 window.close(target);
             }
         };

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/RoleModalPage.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/RoleModalPage.java?rev=1452352&r1=1452351&r2=1452352&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/RoleModalPage.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/RoleModalPage.java Mon Mar  4 15:52:51 2013
@@ -95,7 +95,8 @@ public class RoleModalPage extends BaseM
         this.rolePanel = new RolePanel("rolePanel", form, roleTO, mode);
         form.add(rolePanel);
 
-        final AjaxButton submit = new ClearIndicatingAjaxButton("submit", new ResourceModel("submit"), pageRef) {
+        final AjaxButton submit = new ClearIndicatingAjaxButton("submit", new ResourceModel("submit"),
+                getPageReference()) {
 
             private static final long serialVersionUID = -958724007591692537L;
 
@@ -140,7 +141,7 @@ public class RoleModalPage extends BaseM
 
         form.add(submit);
         form.setDefaultButton(submit);
-        
+
         form.add(cancel);
 
         add(form);

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Schema.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Schema.java?rev=1452352&r1=1452351&r2=1452352&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Schema.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/Schema.java Mon Mar  4 15:52:51 2013
@@ -27,6 +27,7 @@ import org.apache.syncope.common.to.Deri
 import org.apache.syncope.common.to.SchemaTO;
 import org.apache.syncope.common.to.VirtualSchemaTO;
 import org.apache.syncope.common.types.AttributableType;
+import org.apache.syncope.common.types.SchemaType;
 import org.apache.syncope.console.commons.Constants;
 import org.apache.syncope.console.commons.PreferenceManager;
 import org.apache.syncope.console.commons.SchemaModalPageFactory;
@@ -68,7 +69,7 @@ public class Schema extends BasePage {
 
     private static final long serialVersionUID = 8091922398776299403L;
 
-    private enum SchemaType {
+    private enum PlainSchemaType {
 
         RoleSchema,
         UserSchema,
@@ -254,17 +255,17 @@ public class Schema extends BasePage {
         final String allowedDeleteRoles = xmlRolesReader.getAllAllowedRoles("Schema", "delete");
 
         List<IColumn> rolesColumns = getColumnsForSchema(roleSchemasContainer, editRoleSchemaWin,
-                AttributableType.ROLE, SchemaModalPageFactory.SchemaType.NORMAL, Constants.SCHEMA_FIELDS,
+                AttributableType.ROLE, SchemaType.NORMAL, Constants.SCHEMA_FIELDS,
                 allowedReadRoles, allowedCreateRoles);
 
         final AjaxFallbackDefaultDataTable tableRoles = new AjaxFallbackDefaultDataTable("datatable", rolesColumns,
-                new SchemaProvider(SchemaType.RoleSchema), rolePageRows);
+                new SchemaProvider(PlainSchemaType.RoleSchema), rolePageRows);
 
         add(getPaginatorForm(roleSchemasContainer, tableRoles, "RolesPaginatorForm", "rolePageRows",
                 Constants.PREF_ROLE_SCHEMA_PAGINATOR_ROWS));
 
         List<IColumn> columnsRolesDer = getColumnsForSchema(roleDerivedSchemasContainer, editRoleDerivedSchemaWin,
-                AttributableType.ROLE, SchemaModalPageFactory.SchemaType.DERIVED, Constants.DERIVED_SCHEMA_FIELDS,
+                AttributableType.ROLE, SchemaType.DERIVED, Constants.DERIVED_SCHEMA_FIELDS,
                 allowedReadRoles, allowedDeleteRoles);
 
         final AjaxFallbackDefaultDataTable tableRolesDer = new AjaxFallbackDefaultDataTable("datatable",
@@ -274,7 +275,7 @@ public class Schema extends BasePage {
                 Constants.PREF_ROLE_DER_SCHEMA_PAGINATOR_ROWS));
 
         List<IColumn> columnsRolesVir = getColumnsForSchema(roleVirtualSchemasContainer, editRoleVirtualSchemaWin,
-                AttributableType.ROLE, SchemaModalPageFactory.SchemaType.VIRTUAL, Constants.VIRTUAL_SCHEMA_FIELDS,
+                AttributableType.ROLE, SchemaType.VIRTUAL, Constants.VIRTUAL_SCHEMA_FIELDS,
                 allowedReadRoles, allowedDeleteRoles);
 
         final AjaxFallbackDefaultDataTable tableRolesVir = new AjaxFallbackDefaultDataTable("datatable",
@@ -284,10 +285,10 @@ public class Schema extends BasePage {
                 Constants.PREF_ROLE_VIR_SCHEMA_PAGINATOR_ROWS));
 
         List<IColumn> userColumns = getColumnsForSchema(userSchemasContainer, editUserSchemaWin, AttributableType.USER,
-                SchemaModalPageFactory.SchemaType.NORMAL, Constants.SCHEMA_FIELDS, allowedReadRoles, allowedCreateRoles);
+                SchemaType.NORMAL, Constants.SCHEMA_FIELDS, allowedReadRoles, allowedCreateRoles);
 
         final AjaxFallbackDefaultDataTable tableUsers = new AjaxFallbackDefaultDataTable("datatable", userColumns,
-                new SchemaProvider(SchemaType.UserSchema), userSchemaPageRows);
+                new SchemaProvider(PlainSchemaType.UserSchema), userSchemaPageRows);
 
         tableUsers.setMarkupId("tableUsers");
 
@@ -295,7 +296,7 @@ public class Schema extends BasePage {
                 Constants.PREF_USER_SCHEMA_PAGINATOR_ROWS));
 
         List<IColumn> columnsUsersDer = getColumnsForSchema(userDerivedSchemasContainer, editUserDerivedSchemaWin,
-                AttributableType.USER, SchemaModalPageFactory.SchemaType.DERIVED, Constants.DERIVED_SCHEMA_FIELDS,
+                AttributableType.USER, SchemaType.DERIVED, Constants.DERIVED_SCHEMA_FIELDS,
                 allowedReadRoles, allowedDeleteRoles);
 
         final AjaxFallbackDefaultDataTable tableUsersDer = new AjaxFallbackDefaultDataTable("datatable",
@@ -305,7 +306,7 @@ public class Schema extends BasePage {
                 "userDerSchemaPageRows", Constants.PREF_USER_DER_SCHEMA_PAGINATOR_ROWS));
 
         List<IColumn> columnsUsersVir = getColumnsForSchema(userVirtualSchemasContainer, editUserVirtualSchemaWin,
-                AttributableType.USER, SchemaModalPageFactory.SchemaType.VIRTUAL, Constants.VIRTUAL_SCHEMA_FIELDS,
+                AttributableType.USER, SchemaType.VIRTUAL, Constants.VIRTUAL_SCHEMA_FIELDS,
                 allowedReadRoles, allowedDeleteRoles);
 
         final AjaxFallbackDefaultDataTable tableUsersVir = new AjaxFallbackDefaultDataTable("datatable",
@@ -315,17 +316,17 @@ public class Schema extends BasePage {
                 "userVirSchemaPageRows", Constants.PREF_USER_VIR_SCHEMA_PAGINATOR_ROWS));
 
         List<IColumn> membershipsColumns = getColumnsForSchema(membershipSchemaContainer, editMembershipSchemaWin,
-                AttributableType.MEMBERSHIP, SchemaModalPageFactory.SchemaType.NORMAL, Constants.SCHEMA_FIELDS,
+                AttributableType.MEMBERSHIP, SchemaType.NORMAL, Constants.SCHEMA_FIELDS,
                 allowedReadRoles, allowedCreateRoles);
 
         final AjaxFallbackDefaultDataTable tableMemberships = new AjaxFallbackDefaultDataTable("datatable",
-                membershipsColumns, new SchemaProvider(SchemaType.MembershipSchema), membershipPageRows);
+                membershipsColumns, new SchemaProvider(PlainSchemaType.MembershipSchema), membershipPageRows);
 
         add(getPaginatorForm(membershipSchemaContainer, tableMemberships, "MembershipPaginatorForm",
                 "membershipPageRows", Constants.PREF_MEMBERSHIP_SCHEMA_PAGINATOR_ROWS));
 
         List<IColumn> columnsMembershipsDer = getColumnsForSchema(membershipDerivedSchemaContainer,
-                editMembershipDerivedSchemaWin, AttributableType.MEMBERSHIP, SchemaModalPageFactory.SchemaType.DERIVED,
+                editMembershipDerivedSchemaWin, AttributableType.MEMBERSHIP, SchemaType.DERIVED,
                 Constants.DERIVED_SCHEMA_FIELDS, allowedReadRoles, allowedDeleteRoles);
 
         final AjaxFallbackDefaultDataTable tableMembershipsDer = new AjaxFallbackDefaultDataTable("datatable",
@@ -336,7 +337,7 @@ public class Schema extends BasePage {
                 "membershipDerPageRows", Constants.PREF_MEMBERSHIP_DER_SCHEMA_PAGINATOR_ROWS));
 
         List<IColumn> columnsMembershipsVir = getColumnsForSchema(membershipVirtualSchemaContainer,
-                editMembershipVirtualSchemaWin, AttributableType.MEMBERSHIP, SchemaModalPageFactory.SchemaType.VIRTUAL,
+                editMembershipVirtualSchemaWin, AttributableType.MEMBERSHIP, SchemaType.VIRTUAL,
                 Constants.VIRTUAL_SCHEMA_FIELDS, allowedReadRoles, allowedDeleteRoles);
 
         final AjaxFallbackDefaultDataTable tableMembershipsVir = new AjaxFallbackDefaultDataTable("datatable",
@@ -506,38 +507,38 @@ public class Schema extends BasePage {
 
         setWindowClosedCallback(editMembershipVirtualSchemaWin, membershipVirtualSchemaContainer);
 
-        add(getCreateSchemaWindow(createRoleSchemaWin, AttributableType.ROLE, SchemaModalPageFactory.SchemaType.NORMAL,
+        add(getCreateSchemaWindow(createRoleSchemaWin, AttributableType.ROLE, SchemaType.NORMAL,
                 "createRoleSchemaWinLink", "createRoleSchemaWin", allowedCreateRoles));
 
         add(getCreateSchemaWindow(createRoleDerivedSchemaWin, AttributableType.ROLE,
-                SchemaModalPageFactory.SchemaType.DERIVED, "createRoleDerivedSchemaWinLink",
+                SchemaType.DERIVED, "createRoleDerivedSchemaWinLink",
                 "createRoleDerivedSchemaWin", allowedCreateRoles));
 
         add(getCreateSchemaWindow(createRoleVirtualSchemaWin, AttributableType.ROLE,
-                SchemaModalPageFactory.SchemaType.VIRTUAL, "createRoleVirtualSchemaWinLink",
+                SchemaType.VIRTUAL, "createRoleVirtualSchemaWinLink",
                 "createRoleVirtualSchemaWin", allowedCreateRoles));
 
-        add(getCreateSchemaWindow(createUserSchemaWin, AttributableType.USER, SchemaModalPageFactory.SchemaType.NORMAL,
+        add(getCreateSchemaWindow(createUserSchemaWin, AttributableType.USER, SchemaType.NORMAL,
                 "createUserSchemaWinLink", "createUserSchemaModalWin", allowedCreateRoles));
 
         add(getCreateSchemaWindow(createUserDerivedSchemaWin, AttributableType.USER,
-                SchemaModalPageFactory.SchemaType.DERIVED, "createUserDerSchemaWinLink", "createUserDerSchemaModalWin",
+                SchemaType.DERIVED, "createUserDerSchemaWinLink", "createUserDerSchemaModalWin",
                 allowedCreateRoles));
 
         add(getCreateSchemaWindow(createUserVirtualSchemaWin, AttributableType.USER,
-                SchemaModalPageFactory.SchemaType.VIRTUAL, "createUserVirSchemaWinLink", "createUserVirSchemaModalWin",
+                SchemaType.VIRTUAL, "createUserVirSchemaWinLink", "createUserVirSchemaModalWin",
                 allowedCreateRoles));
 
         add(getCreateSchemaWindow(createMembershipSchemaWin, AttributableType.MEMBERSHIP,
-                SchemaModalPageFactory.SchemaType.NORMAL, "createMembershipSchemaWinLink",
+                SchemaType.NORMAL, "createMembershipSchemaWinLink",
                 "createMembershipSchemaModalWin", allowedCreateRoles));
 
         add(getCreateSchemaWindow(createMembershipDerivedSchemaWin, AttributableType.MEMBERSHIP,
-                SchemaModalPageFactory.SchemaType.DERIVED, "createMembershipDerSchemaWinLink",
+                SchemaType.DERIVED, "createMembershipDerSchemaWinLink",
                 "createMembershipDerivedSchemaWin", allowedCreateRoles));
 
         add(getCreateSchemaWindow(createMembershipVirtualSchemaWin, AttributableType.MEMBERSHIP,
-                SchemaModalPageFactory.SchemaType.VIRTUAL, "createMembershipVirSchemaWinLink",
+                SchemaType.VIRTUAL, "createMembershipVirSchemaWinLink",
                 "createMembershipVirtualSchemaWin", allowedCreateRoles));
     }
 
@@ -547,9 +548,9 @@ public class Schema extends BasePage {
 
         private final SortableDataProviderComparator<SchemaTO> comparator;
 
-        private final SchemaType schemaType;
+        private final PlainSchemaType schemaType;
 
-        public SchemaProvider(final SchemaType schemaType) {
+        public SchemaProvider(final PlainSchemaType schemaType) {
             super();
             this.schemaType = schemaType;
 
@@ -565,7 +566,7 @@ public class Schema extends BasePage {
 
             Collections.sort(list, comparator);
 
-            return list.subList((int)first, (int)first + (int)count).iterator();
+            return list.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
@@ -624,7 +625,7 @@ public class Schema extends BasePage {
 
             Collections.sort(list, comparator);
 
-            return list.subList((int)first, (int)first + (int)count).iterator();
+            return list.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
@@ -676,7 +677,7 @@ public class Schema extends BasePage {
 
             Collections.sort(list, comparator);
 
-            return list.subList((int)first, (int)first + (int)count).iterator();
+            return list.subList((int) first, (int) first + (int) count).iterator();
         }
 
         @Override
@@ -707,7 +708,7 @@ public class Schema extends BasePage {
 
     private <T extends AbstractSchemaModalPage> List<IColumn> getColumnsForSchema(
             final WebMarkupContainer webContainer, final ModalWindow modalWindow,
-            final AttributableType attributableType, final SchemaModalPageFactory.SchemaType schemaType,
+            final AttributableType attributableType, final SchemaType schemaType,
             final String[] fields, final String readPermissions, final String deletePermissions) {
 
         List<IColumn> columns = new ArrayList<IColumn>();
@@ -820,7 +821,7 @@ public class Schema extends BasePage {
     }
 
     private <T extends AbstractSchemaModalPage> AjaxLink getCreateSchemaWindow(final ModalWindow createSchemaWin,
-            final AttributableType attributableType, final SchemaModalPageFactory.SchemaType schemaType,
+            final AttributableType attributableType, final SchemaType schemaType,
             final String winLinkName, final String winName, final String createPermissions) {
 
         AjaxLink createSchemaWinLink = new ClearIndicatingAjaxLink(winLinkName, getPageReference()) {

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchResultPanel.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchResultPanel.java?rev=1452352&r1=1452351&r2=1452352&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchResultPanel.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/panels/UserSearchResultPanel.java Mon Mar  4 15:52:51 2013
@@ -26,6 +26,7 @@ import java.util.List;
 import org.apache.syncope.common.search.NodeCond;
 import org.apache.syncope.common.to.AbstractAttributableTO;
 import org.apache.syncope.common.to.UserTO;
+import org.apache.syncope.common.types.SchemaType;
 import org.apache.syncope.common.validation.SyncopeClientCompositeErrorException;
 import org.apache.syncope.console.commons.Constants;
 import org.apache.syncope.console.pages.DisplayAttributesModalPage;
@@ -81,15 +82,15 @@ public class UserSearchResultPanel exten
         }
 
         for (String name : prefMan.getList(getRequest(), Constants.PREF_USERS_ATTRIBUTES_VIEW)) {
-            columns.add(new AttrColumn(name, AttrColumn.SchemaType.schema));
+            columns.add(new AttrColumn(name, SchemaType.NORMAL));
         }
 
         for (String name : prefMan.getList(getRequest(), Constants.PREF_USERS_DERIVED_ATTRIBUTES_VIEW)) {
-            columns.add(new AttrColumn(name, AttrColumn.SchemaType.derivedSchema));
+            columns.add(new AttrColumn(name, SchemaType.DERIVED));
         }
 
         for (String name : prefMan.getList(getRequest(), Constants.PREF_USERS_VIRTUAL_ATTRIBUTES_VIEW)) {
-            columns.add(new AttrColumn(name, AttrColumn.SchemaType.virtualSchema));
+            columns.add(new AttrColumn(name, SchemaType.VIRTUAL));
         }
 
         // Add defaults in case of no selection
@@ -105,6 +106,8 @@ public class UserSearchResultPanel exten
 
         columns.add(new AbstractColumn<AbstractAttributableTO, String>(new ResourceModel("actions", "")) {
 
+            private static final long serialVersionUID = -3503023501954863131L;
+
             @Override
             public String getCssClass() {
                 return "action";

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java?rev=1452352&r1=1452351&r2=1452352&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java Mon Mar  4 15:52:51 2013
@@ -21,6 +21,7 @@ package org.apache.syncope.console.wicke
 import java.util.List;
 
 import org.apache.syncope.common.to.AbstractAttributableTO;
+import org.apache.syncope.common.types.SchemaType;
 import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
 import org.apache.wicket.markup.html.basic.Label;
@@ -32,21 +33,14 @@ public class AttrColumn extends Abstract
 
     private static final long serialVersionUID = 2624734332447371372L;
 
-    public enum SchemaType {
-
-        schema,
-        virtualSchema,
-        derivedSchema;
-
-    };
-
     private final String name;
 
     private final SchemaType schemaType;
 
     public AttrColumn(final String name, final SchemaType schemaType) {
-
-        super(new ResourceModel(name, name), name);
+        // set sortProperty to schematype#name (e.g. derivedSchema#cn, 
+        // for use with SortableUserProviderComparator.AttrModel#getObject)
+        super(new ResourceModel(name, name), schemaType.name() + "#" + name);
         this.name = name;
         this.schemaType = schemaType;
     }
@@ -58,20 +52,20 @@ public class AttrColumn extends Abstract
         List<String> values = null;
 
         switch (schemaType) {
-            case schema:
+            case NORMAL:
                 if (rowModel.getObject().getAttributeMap().containsKey(name)) {
                     values = rowModel.getObject().getAttributeMap().get(name).getValues();
                 }
                 break;
 
-            case virtualSchema:
+            case VIRTUAL:
                 if (rowModel.getObject().getVirtualAttributeMap().containsKey(name)) {
 
                     values = rowModel.getObject().getVirtualAttributeMap().get(name).getValues();
                 }
                 break;
 
-            case derivedSchema:
+            case DERIVED:
                 if (rowModel.getObject().getDerivedAttributeMap().containsKey(name)) {
 
                     values = rowModel.getObject().getDerivedAttributeMap().get(name).getValues();