You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2017/06/19 13:55:24 UTC

syncope git commit: [SYNCOPE-1112] provide available schema type to better build fiqul expression

Repository: syncope
Updated Branches:
  refs/heads/master 37b70e661 -> d4ecdf6bd


[SYNCOPE-1112] provide available schema type to better build fiqul expression


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/d4ecdf6b
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/d4ecdf6b
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/d4ecdf6b

Branch: refs/heads/master
Commit: d4ecdf6bd7ee5a718b148c2b510bbf319b3b04a3
Parents: 37b70e6
Author: fmartelli <fa...@gmail.com>
Authored: Mon Jun 19 15:55:04 2017 +0200
Committer: fmartelli <fa...@gmail.com>
Committed: Mon Jun 19 15:55:04 2017 +0200

----------------------------------------------------------------------
 .../syncope/client/console/panels/AnyPanel.java |  9 ++++--
 .../panels/search/AbstractSearchPanel.java      | 26 +++++++++++------
 .../panels/search/SearchClausePanel.java        |  7 +++--
 .../console/panels/search/SearchUtils.java      | 30 ++++++++++++++------
 4 files changed, 50 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/d4ecdf6b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyPanel.java
index 4b8f9de..dd95128 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyPanel.java
@@ -163,19 +163,22 @@ public class AnyPanel extends Panel implements ModalPanel {
                     UserDirectoryPanel.class.cast(AnyPanel.this.directoryPanel).search(
                             precond + SearchUtils.buildFIQL(
                                     AnyPanel.this.searchPanel.getModel().getObject(),
-                                    SyncopeClient.getUserSearchConditionBuilder()), target);
+                                    SyncopeClient.getUserSearchConditionBuilder(),
+                                    AnyPanel.this.searchPanel.getAvailableSchemaTypes()), target);
                     break;
                 case GROUP:
                     GroupDirectoryPanel.class.cast(AnyPanel.this.directoryPanel).search(
                             precond + SearchUtils.buildFIQL(
                                     AnyPanel.this.searchPanel.getModel().getObject(),
-                                    SyncopeClient.getGroupSearchConditionBuilder()), target);
+                                    SyncopeClient.getGroupSearchConditionBuilder(),
+                                    AnyPanel.this.searchPanel.getAvailableSchemaTypes()), target);
                     break;
                 case ANY_OBJECT:
                     AnyObjectDirectoryPanel.class.cast(AnyPanel.this.directoryPanel).search(
                             precond + SearchUtils.buildFIQL(
                                     AnyPanel.this.searchPanel.getModel().getObject(),
-                                    SyncopeClient.getAnyObjectSearchConditionBuilder(anyTypeTO.getKey())), target);
+                                    SyncopeClient.getAnyObjectSearchConditionBuilder(anyTypeTO.getKey()),
+                                    AnyPanel.this.searchPanel.getAvailableSchemaTypes()), target);
                     break;
                 default:
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/d4ecdf6b/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 93ed552..050896f 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
@@ -20,6 +20,7 @@ package org.apache.syncope.client.console.panels.search;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import org.apache.commons.collections4.CollectionUtils;
@@ -29,7 +30,7 @@ import org.apache.syncope.client.console.rest.SchemaRestClient;
 import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel;
 import org.apache.syncope.common.lib.EntityTOUtils;
 import org.apache.syncope.common.lib.search.SearchableFields;
-import org.apache.syncope.common.lib.to.AbstractSchemaTO;
+import org.apache.syncope.common.lib.to.PlainSchemaTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.SchemaType;
@@ -56,7 +57,7 @@ public abstract class AbstractSearchPanel extends Panel {
 
     protected IModel<List<String>> dnames;
 
-    protected IModel<List<String>> anames;
+    protected IModel<Map<String, PlainSchemaTO>> anames;
 
     protected IModel<List<String>> resourceNames;
 
@@ -167,16 +168,21 @@ public abstract class AbstractSearchPanel extends Panel {
             }
         };
 
-        anames = new LoadableDetachableModel<List<String>>() {
+        anames = new LoadableDetachableModel<Map<String, PlainSchemaTO>>() {
 
             private static final long serialVersionUID = 5275935387613157437L;
 
             @Override
-            protected List<String> load() {
-                return CollectionUtils.collect(
-                        schemaRestClient.getSchemas(SchemaType.PLAIN, anyTypeRestClient.read(type).getClasses().
-                                toArray(new String[] {})),
-                        EntityTOUtils.<AbstractSchemaTO>keyTransformer(), new ArrayList<String>());
+            protected Map<String, PlainSchemaTO> load() {
+                final List<PlainSchemaTO> schemas = schemaRestClient.<PlainSchemaTO>getSchemas(
+                        SchemaType.PLAIN,
+                        anyTypeRestClient.read(type).getClasses().toArray(new String[] {}));
+
+                final Map<String, PlainSchemaTO> res = new HashMap<>();
+                for (PlainSchemaTO schema : schemas) {
+                    res.put(schema.getKey(), schema);
+                }
+                return res;
             }
         };
 
@@ -199,4 +205,8 @@ public abstract class AbstractSearchPanel extends Panel {
     public String getBackObjectType() {
         return this.type;
     }
+
+    public Map<String, PlainSchemaTO> getAvailableSchemaTypes() {
+        return anames.getObject();
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/d4ecdf6b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
index 12f9d86..28958ee 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java
@@ -40,6 +40,7 @@ import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormCompo
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.FieldPanel;
+import org.apache.syncope.common.lib.to.PlainSchemaTO;
 import org.apache.syncope.common.lib.to.RelationshipTypeTO;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
@@ -71,7 +72,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
 
     private final IModel<List<SearchClause.Type>> types;
 
-    private final IModel<List<String>> anames;
+    private final IModel<Map<String, PlainSchemaTO>> anames;
 
     private final IModel<List<String>> dnames;
 
@@ -101,7 +102,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
             final Model<SearchClause> clause,
             final boolean required,
             final IModel<List<SearchClause.Type>> types,
-            final IModel<List<String>> anames,
+            final IModel<Map<String, PlainSchemaTO>> anames,
             final IModel<List<String>> dnames,
             final IModel<Map<String, String>> groupNames,
             final IModel<List<String>> roleNames,
@@ -194,7 +195,7 @@ public class SearchClausePanel extends FieldPanel<SearchClause> {
                     case ATTRIBUTE:
                         final List<String> names = new ArrayList<>(dnames.getObject());
                         if (anames != null && anames.getObject() != null && !anames.getObject().isEmpty()) {
-                            names.addAll(anames.getObject());
+                            names.addAll(anames.getObject().keySet());
                         }
                         Collections.sort(names);
                         return names;

http://git-wip-us.apache.org/repos/asf/syncope/blob/d4ecdf6b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
index 4e5181a..4f42e2d 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchUtils.java
@@ -20,6 +20,7 @@ package org.apache.syncope.client.console.panels.search;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -38,6 +39,8 @@ import org.apache.syncope.common.lib.search.SyncopeFiqlParser;
 import org.apache.syncope.common.lib.search.SyncopeFiqlSearchCondition;
 import org.apache.syncope.common.lib.search.SyncopeProperty;
 import org.apache.syncope.common.lib.search.UserFiqlSearchConditionBuilder;
+import org.apache.syncope.common.lib.to.PlainSchemaTO;
+import org.apache.syncope.common.lib.types.AttrSchemaType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -195,6 +198,13 @@ public final class SearchUtils implements Serializable {
     }
 
     public static String buildFIQL(final List<SearchClause> clauses, final AbstractFiqlSearchConditionBuilder builder) {
+        return buildFIQL(clauses, builder, Collections.emptyMap());
+    }
+
+    public static String buildFIQL(
+            final List<SearchClause> clauses,
+            final AbstractFiqlSearchConditionBuilder builder,
+            final Map<String, PlainSchemaTO> availableSchemaTypes) {
         LOG.debug("Generating FIQL from List<SearchClause>: {}", clauses);
 
         CompleteCondition prevCondition;
@@ -249,6 +259,10 @@ public final class SearchUtils implements Serializable {
 
                     case ATTRIBUTE:
                         if (StringUtils.isNotBlank(clause.getProperty())) {
+                            boolean isLong = availableSchemaTypes.get(clause.getProperty()) != null
+                                    && availableSchemaTypes.get(clause.getProperty()).getType()
+                                    == AttrSchemaType.Long;
+
                             SyncopeProperty property = builder.is(clause.getProperty());
                             switch (clause.getComparator()) {
                                 case IS_NULL:
@@ -260,26 +274,26 @@ public final class SearchUtils implements Serializable {
                                     break;
 
                                 case LESS_THAN:
-                                    condition = StringUtils.isNumeric(clause.getProperty())
-                                            ? property.lessThan(NumberUtils.toDouble(clause.getValue()))
+                                    condition = isLong
+                                            ? property.lessThan(NumberUtils.toLong(clause.getValue()))
                                             : property.lexicalBefore(clause.getValue());
                                     break;
 
                                 case LESS_OR_EQUALS:
-                                    condition = StringUtils.isNumeric(clause.getProperty())
-                                            ? property.lessOrEqualTo(NumberUtils.toDouble(clause.getValue()))
+                                    condition = isLong
+                                            ? property.lessOrEqualTo(NumberUtils.toLong(clause.getValue()))
                                             : property.lexicalNotAfter(clause.getValue());
                                     break;
 
                                 case GREATER_THAN:
-                                    condition = StringUtils.isNumeric(clause.getProperty())
-                                            ? property.greaterThan(NumberUtils.toDouble(clause.getValue()))
+                                    condition = isLong
+                                            ? property.greaterThan(NumberUtils.toLong(clause.getValue()))
                                             : property.lexicalAfter(clause.getValue());
                                     break;
 
                                 case GREATER_OR_EQUALS:
-                                    condition = StringUtils.isNumeric(clause.getProperty())
-                                            ? property.greaterOrEqualTo(NumberUtils.toDouble(clause.getValue()))
+                                    condition = isLong
+                                            ? property.greaterOrEqualTo(NumberUtils.toLong(clause.getValue()))
                                             : property.lexicalNotBefore(clause.getValue());
                                     break;