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 2020/02/18 13:46:41 UTC

[syncope] 02/02: Various cleanings

This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git

commit fa9d913813be2b5bf1271afba1bd083c4f5dca80
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Tue Feb 18 14:39:27 2020 +0100

    Various cleanings
---
 .../wizards/any/ProvisioningReportsPanel.java      |  3 +
 .../client/console/commons/AnyDataProvider.java    |  1 -
 .../client/console/panels/ListViewPanel.java       | 25 ++++++--
 .../client/console/panels/ListViewPanel.html       |  2 +-
 .../core/persistence/jpa/dao/JPAAnySearchDAO.java  | 74 +++++++++++++---------
 5 files changed, 68 insertions(+), 37 deletions(-)

diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/ProvisioningReportsPanel.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/ProvisioningReportsPanel.java
index 264bb3f..93cd503 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/ProvisioningReportsPanel.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/wizards/any/ProvisioningReportsPanel.java
@@ -51,6 +51,7 @@ public class ProvisioningReportsPanel extends Panel {
                 return new ListViewPanel.Builder<>(ProvisioningReport.class, pageRef).
                         setItems(success).
                         withChecks(ListViewPanel.CheckAvailability.NONE).
+                        setCaptionVisible(false).
                         includes("name", "message").
                         build(panelId);
             }
@@ -69,6 +70,7 @@ public class ProvisioningReportsPanel extends Panel {
                 return new ListViewPanel.Builder<>(ProvisioningReport.class, pageRef).
                         setItems(failure).
                         withChecks(ListViewPanel.CheckAvailability.NONE).
+                        setCaptionVisible(false).
                         includes("name", "message").
                         build(panelId);
             }
@@ -87,6 +89,7 @@ public class ProvisioningReportsPanel extends Panel {
                 return new ListViewPanel.Builder<>(ProvisioningReport.class, pageRef).
                         setItems(ignore).
                         withChecks(ListViewPanel.CheckAvailability.NONE).
+                        setCaptionVisible(false).
                         includes("name", "message").
                         build(panelId);
             }
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
index 2f4dc17..a1aa807 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/commons/AnyDataProvider.java
@@ -115,7 +115,6 @@ public class AnyDataProvider<A extends AnyTO> extends DirectoryDataProvider<A> {
                     -> ((BasePage) pageRef.getPage()).getNotificationPanel().refresh(ajaxRequestTarget));
         }
 
-        result.sort(comparator);
         return result.iterator();
     }
 
diff --git a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
index b0d39ef..6c3f419 100644
--- a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
+++ b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/ListViewPanel.java
@@ -40,6 +40,7 @@ import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.util.lang.PropertyResolver;
 import org.apache.wicket.event.IEvent;
+import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Check;
 import org.apache.wicket.markup.html.form.CheckGroup;
@@ -104,7 +105,9 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan
             final CheckAvailability check,
             final boolean reuseItem,
             final boolean wizardInModal,
+            final boolean captionVisible,
             final IModel<? extends Collection<T>> model) {
+
         super(id, wizardInModal);
         setOutputMarkupId(true);
 
@@ -112,9 +115,15 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan
 
         this.check = Model.of(check);
 
-        addInnerObject(new Label("caption", new ResourceModel("listview.caption", StringUtils.EMPTY)));
+        WebMarkupContainer captionContainer = new WebMarkupContainer("captionContainer");
+        captionContainer.setOutputMarkupPlaceholderTag(true);
+        captionContainer.setVisible(captionVisible);
+        addInnerObject(captionContainer);
+
+        Label caption = new Label("caption", new ResourceModel("listview.caption", StringUtils.EMPTY));
+        captionContainer.add(caption);
 
-        final CheckGroup<T> checkGroup = new CheckGroup<>("group", model);
+        CheckGroup<T> checkGroup = new CheckGroup<>("group", model);
         checkGroup.setOutputMarkupId(true);
         checkGroup.add(new IndicatorAjaxFormChoiceComponentUpdatingBehavior() {
 
@@ -273,6 +282,8 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan
 
         private boolean reuseItem = true;
 
+        private boolean captionVisible = true;
+
         private final Class<T> reference;
 
         public Builder(final Class<T> reference, final PageReference pageRef) {
@@ -322,8 +333,14 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan
             return this;
         }
 
-        public void setReuseItem(final boolean reuseItem) {
+        public Builder<T> setReuseItem(final boolean reuseItem) {
             this.reuseItem = reuseItem;
+            return this;
+        }
+
+        public Builder<T> setCaptionVisible(final boolean captionVisible) {
+            this.captionVisible = captionVisible;
+            return this;
         }
 
         /**
@@ -406,7 +423,7 @@ public abstract class ListViewPanel<T extends Serializable> extends WizardMgtPan
         @Override
         protected WizardMgtPanel<T> newInstance(final String id, final boolean wizardInModal) {
             return new ListViewPanel<T>(
-                    id, items, reference, includes, actions, check, reuseItem, wizardInModal, model) {
+                    id, items, reference, includes, actions, check, reuseItem, wizardInModal, captionVisible, model) {
 
                 private static final long serialVersionUID = -1715389337530657988L;
 
diff --git a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/ListViewPanel.html b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/ListViewPanel.html
index 400b2a0..ca871d8 100644
--- a/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/ListViewPanel.html
+++ b/client/idrepo/console/src/main/resources/org/apache/syncope/client/console/panels/ListViewPanel.html
@@ -24,7 +24,7 @@ under the License.
     <wicket:extend>
       <div class="col-xs-12">
         <div class="box">
-          <div class="box-header">
+          <div class="box-header" wicket:id="captionContainer">
             <h3 class="box-title">
               <span wicket:id="caption"/>
             </h3>
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
index 3bf81da..687f2ae 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
@@ -170,7 +170,7 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
             LOG.debug("Query: {}, parameters: {}", queryString, parameters);
 
             // 2. take into account realms and ordering
-            OrderBySupport obs = parseOrderBy(kind, svs, orderBy);
+            OrderBySupport obs = parseOrderBy(svs, orderBy);
             if (queryString.charAt(0) == '(') {
                 queryString.insert(0, buildSelect(obs));
                 queryString.append(buildWhere(svs, queryInfo.getRight(), obs));
@@ -382,12 +382,20 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         }
     }
 
+    protected void parseOrderByForCustom(
+            final SearchSupport svs,
+            final OrderByClause clause,
+            final OrderBySupport.Item item,
+            final OrderBySupport obs) {
+
+        // do nothing by default, meant for subclasses
+    }
+
     private OrderBySupport parseOrderBy(
-            final AnyTypeKind kind,
             final SearchSupport svs,
             final List<OrderByClause> orderBy) {
 
-        AnyUtils anyUtils = anyUtilsFactory.getInstance(kind);
+        AnyUtils anyUtils = anyUtilsFactory.getInstance(svs.anyTypeKind);
 
         OrderBySupport obs = new OrderBySupport();
 
@@ -396,38 +404,42 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
         orderBy.forEach(clause -> {
             OrderBySupport.Item item = new OrderBySupport.Item();
 
-            if (anyUtils.getField(clause.getField()) == null) {
-                PlainSchema schema = schemaDAO.find(clause.getField());
-                if (schema != null) {
-                    if (schema.isUniqueConstraint()) {
-                        orderByUniquePlainSchemas.add(schema.getKey());
-                    } else {
-                        orderByNonUniquePlainSchemas.add(schema.getKey());
-                    }
-                    if (orderByUniquePlainSchemas.size() > 1 || orderByNonUniquePlainSchemas.size() > 1) {
-                        SyncopeClientException invalidSearch =
-                                SyncopeClientException.build(ClientExceptionType.InvalidSearchExpression);
-                        invalidSearch.getElements().add("Order by more than one attribute is not allowed; "
-                                + "remove one from " + (orderByUniquePlainSchemas.size() > 1
-                                ? orderByUniquePlainSchemas : orderByNonUniquePlainSchemas));
-                        throw invalidSearch;
+            parseOrderByForCustom(svs, clause, item, obs);
+
+            if (item.isEmpty()) {
+                if (anyUtils.getField(clause.getField()) == null) {
+                    PlainSchema schema = schemaDAO.find(clause.getField());
+                    if (schema != null) {
+                        if (schema.isUniqueConstraint()) {
+                            orderByUniquePlainSchemas.add(schema.getKey());
+                        } else {
+                            orderByNonUniquePlainSchemas.add(schema.getKey());
+                        }
+                        if (orderByUniquePlainSchemas.size() > 1 || orderByNonUniquePlainSchemas.size() > 1) {
+                            SyncopeClientException invalidSearch =
+                                    SyncopeClientException.build(ClientExceptionType.InvalidSearchExpression);
+                            invalidSearch.getElements().add("Order by more than one attribute is not allowed; "
+                                    + "remove one from " + (orderByUniquePlainSchemas.size() > 1
+                                    ? orderByUniquePlainSchemas : orderByNonUniquePlainSchemas));
+                            throw invalidSearch;
+                        }
+                        parseOrderByForPlainSchema(svs, obs, item, clause, schema, clause.getField());
                     }
-                    parseOrderByForPlainSchema(svs, obs, item, clause, schema, clause.getField());
-                }
-            } else {
-                // Manage difference among external key attribute and internal JPA @Id
-                String fieldName = "key".equals(clause.getField()) ? "id" : clause.getField();
+                } else {
+                    // Manage difference among external key attribute and internal JPA @Id
+                    String fieldName = "key".equals(clause.getField()) ? "id" : clause.getField();
 
-                // Adjust field name to column name
-                if (ArrayUtils.contains(RELATIONSHIP_FIELDS, fieldName)) {
-                    fieldName += "_id";
-                }
+                    // Adjust field name to column name
+                    if (ArrayUtils.contains(RELATIONSHIP_FIELDS, fieldName)) {
+                        fieldName += "_id";
+                    }
 
-                obs.views.add(svs.field());
+                    obs.views.add(svs.field());
 
-                item.select = svs.field().alias + '.' + fieldName;
-                item.where = StringUtils.EMPTY;
-                item.orderBy = svs.field().alias + '.' + fieldName + ' ' + clause.getDirection().name();
+                    item.select = svs.field().alias + '.' + fieldName;
+                    item.where = StringUtils.EMPTY;
+                    item.orderBy = svs.field().alias + '.' + fieldName + ' ' + clause.getDirection().name();
+                }
             }
 
             if (item.isEmpty()) {