]> source.dussan.org Git - vaadin-framework.git/commitdiff
Use non-Generic SortOrder in Query. (#8239)
authorDenis <denis@vaadin.com>
Wed, 25 Jan 2017 07:36:29 +0000 (09:36 +0200)
committerGitHub <noreply@github.com>
Wed, 25 Jan 2017 07:36:29 +0000 (09:36 +0200)
* Use non-Generic SortOrder in Query.

Fixes #8215

13 files changed:
server/src/main/java/com/vaadin/data/provider/AbstractBackEndDataProvider.java
server/src/main/java/com/vaadin/data/provider/BackEndDataProvider.java
server/src/main/java/com/vaadin/data/provider/DataCommunicator.java
server/src/main/java/com/vaadin/data/provider/Query.java
server/src/main/java/com/vaadin/data/provider/QuerySortOrder.java [new file with mode: 0644]
server/src/main/java/com/vaadin/data/provider/Sort.java
server/src/main/java/com/vaadin/data/provider/SortOrder.java
server/src/main/java/com/vaadin/ui/Grid.java
server/src/main/java/com/vaadin/ui/components/grid/SortOrderProvider.java
server/src/test/java/com/vaadin/data/provider/BackendDataProviderTest.java
server/src/test/java/com/vaadin/data/provider/DataProviderTestBase.java
server/src/test/java/com/vaadin/data/provider/ListDataProviderTest.java
server/src/test/java/com/vaadin/data/provider/bov/DataProviderBoVTest.java

index 8da5d7a7262c5ff528e9ea4781d46a4018d5abcd..9b08bb8c1dcd8228589aa4c8e6317dd56f55aed3 100644 (file)
@@ -33,7 +33,7 @@ import java.util.stream.Stream;
 public abstract class AbstractBackEndDataProvider<T, F> extends
         AbstractDataProvider<T, F> implements BackEndDataProvider<T, F> {
 
-    private List<SortOrder<String>> sortOrders = new ArrayList<>();
+    private List<QuerySortOrder> sortOrders = new ArrayList<>();
 
     private Query<T, F> mixInSortOrders(Query<T, F> query) {
         if (sortOrders.isEmpty()) {
@@ -43,7 +43,7 @@ public abstract class AbstractBackEndDataProvider<T, F> extends
         Set<String> sortedPropertyNames = query.getSortOrders().stream()
                 .map(SortOrder::getSorted).collect(Collectors.toSet());
 
-        List<SortOrder<String>> combinedSortOrders = Stream
+        List<QuerySortOrder> combinedSortOrders = Stream
                 .concat(query.getSortOrders().stream(),
                         sortOrders.stream()
                                 .filter(order -> !sortedPropertyNames
@@ -86,7 +86,7 @@ public abstract class AbstractBackEndDataProvider<T, F> extends
     protected abstract int sizeInBackEnd(Query<T, F> query);
 
     @Override
-    public void setSortOrders(List<SortOrder<String>> sortOrders) {
+    public void setSortOrders(List<QuerySortOrder> sortOrders) {
         this.sortOrders = Objects.requireNonNull(sortOrders,
                 "Sort orders cannot be null");
         refreshAll();
index f20b22fa1749717f9ca00852cb519d72cf102fea..36d875a21afb61bc3f36b2abc2d2a5ec3cc986a5 100644 (file)
@@ -37,12 +37,12 @@ public interface BackEndDataProvider<T, F> extends DataProvider<T, F> {
      * sorting is also used to determine the ordering of items that are
      * considered equal by the sorting defined in the query.
      *
-     * @see #setSortOrder(SortOrder)
+     * @see #setSortOrder(QuerySortOrder)
      *
      * @param sortOrders
      *            a list of sort orders to set, not <code>null</code>
      */
-    void setSortOrders(List<SortOrder<String>> sortOrders);
+    void setSortOrders(List<QuerySortOrder> sortOrders);
 
     /**
      * Sets a single sort order to use as the default sorting for this data
@@ -59,7 +59,7 @@ public interface BackEndDataProvider<T, F> extends DataProvider<T, F> {
      *            a sort order to set, or <code>null</code> to clear any
      *            previously set sort orders
      */
-    default void setSortOrder(SortOrder<String> sortOrder) {
+    default void setSortOrder(QuerySortOrder sortOrder) {
         if (sortOrder == null) {
             setSortOrders(Collections.emptyList());
         } else {
index 12fd323bc1fdc7980546e8a2c4bb0762b03e40ca..7b909b831d9e9331f9ac0a42d07bb79a85cfa305 100644 (file)
@@ -201,7 +201,7 @@ public class DataCommunicator<T, F> extends AbstractExtension {
 
     private F filter;
     private Comparator<T> inMemorySorting;
-    private final List<SortOrder<String>> backEndSorting = new ArrayList<>();
+    private final List<QuerySortOrder> backEndSorting = new ArrayList<>();
     private final DataCommunicatorClientRpc rpc;
 
     public DataCommunicator() {
@@ -421,12 +421,12 @@ public class DataCommunicator<T, F> extends AbstractExtension {
     }
 
     /**
-     * Sets the {@link SortOrder}s to use with backend sorting.
+     * Sets the {@link QuerySortOrder}s to use with backend sorting.
      *
      * @param sortOrder
      *            list of sort order information to pass to a query
      */
-    public void setBackEndSorting(List<SortOrder<String>> sortOrder) {
+    public void setBackEndSorting(List<QuerySortOrder> sortOrder) {
         backEndSorting.clear();
         backEndSorting.addAll(sortOrder);
         reset();
index a4e0197d835c7b9fab311e636a46ebdf16365651..abf905658ca1752b6496877d2bcc30563beb4035 100644 (file)
@@ -36,7 +36,7 @@ public class Query<T, F> implements Serializable {
 
     private final int offset;
     private final int limit;
-    private final List<SortOrder<String>> sortOrders;
+    private final List<QuerySortOrder> sortOrders;
     private final Comparator<T> inMemorySorting;
     private final F filter;
 
@@ -83,7 +83,7 @@ public class Query<T, F> implements Serializable {
      * @param filter
      *            filtering for fetching; can be null
      */
-    public Query(int offset, int limit, List<SortOrder<String>> sortOrders,
+    public Query(int offset, int limit, List<QuerySortOrder> sortOrders,
             Comparator<T> inMemorySorting, F filter) {
         this.offset = offset;
         this.limit = limit;
@@ -123,7 +123,7 @@ public class Query<T, F> implements Serializable {
      *
      * @return list of sort orders
      */
-    public List<SortOrder<String>> getSortOrders() {
+    public List<QuerySortOrder> getSortOrders() {
         return sortOrders;
     }
 
diff --git a/server/src/main/java/com/vaadin/data/provider/QuerySortOrder.java b/server/src/main/java/com/vaadin/data/provider/QuerySortOrder.java
new file mode 100644 (file)
index 0000000..ca8d743
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2000-2016 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.data.provider;
+
+import com.vaadin.shared.data.sort.SortDirection;
+
+/**
+ * Sorting information for {@link Query}.
+ *
+ * @see Query
+ */
+public class QuerySortOrder extends SortOrder<String> {
+
+    /**
+     * Constructs sorting information for usage in a {@link Query}.
+     *
+     * @param sorted
+     *            sorting information, usually field id
+     * @param direction
+     *            sorting direction
+     */
+    public QuerySortOrder(String sorted, SortDirection direction) {
+        super(sorted, direction);
+    }
+
+    /**
+     * Gets sorting information.
+     *
+     * @return sorting entity, usually field id
+     */
+    @Override
+    public String getSorted() {
+        return super.getSorted();
+    }
+}
index 303ee05f74e4952f8f5912db166ca16a4ed97fbd..0655c7d0e4e35f4131dd1b5cac0d5eaa9a68d19c 100644 (file)
@@ -35,16 +35,14 @@ public abstract class Sort implements Serializable {
      * lists. When the sort order is ready to be passed on, calling
      * {@link #build()} will create the list of sort orders
      *
-     * @param <S>
-     *            sort order data type
      *
      * @see Sort
      * @see Sort#asc(Object)
      * @see Sort#desc(Object)
      * @see #build()
      */
-    public static class SortBuilder<S> implements Serializable {
-        private List<SortOrder<S>> sortOrder = new ArrayList<>();
+    public static class SortBuilder implements Serializable {
+        private List<QuerySortOrder> sortOrder = new ArrayList<>();
 
         /**
          * Constructs an empty SortBuilder.
@@ -59,7 +57,7 @@ public abstract class Sort implements Serializable {
          *            the object to sort by
          * @return this sort builder
          */
-        public SortBuilder<S> thenAsc(S by) {
+        public SortBuilder thenAsc(String by) {
             return append(by, SortDirection.ASCENDING);
         }
 
@@ -70,7 +68,7 @@ public abstract class Sort implements Serializable {
          *            the object to sort by
          * @return this sort builder
          */
-        public SortBuilder<S> thenDesc(S by) {
+        public SortBuilder thenDesc(String by) {
             return append(by, SortDirection.DESCENDING);
         }
 
@@ -84,8 +82,8 @@ public abstract class Sort implements Serializable {
          *
          * @return this sort builder
          */
-        protected SortBuilder<S> append(S by, SortDirection direction) {
-            sortOrder.add(new SortOrder<>(by, direction));
+        protected SortBuilder append(String by, SortDirection direction) {
+            sortOrder.add(new QuerySortOrder(by, direction));
             return this;
         }
 
@@ -95,7 +93,7 @@ public abstract class Sort implements Serializable {
          *
          * @return the unmodifiable sort order list
          */
-        public List<SortOrder<S>> build() {
+        public List<QuerySortOrder> build() {
             return Collections.unmodifiableList(sortOrder);
         }
     }
@@ -111,8 +109,8 @@ public abstract class Sort implements Serializable {
      *
      * @return the sort builder
      */
-    public static <S> SortBuilder<S> asc(S by) {
-        return new SortBuilder<S>().thenAsc(by);
+    public static SortBuilder asc(String by) {
+        return new SortBuilder().thenAsc(by);
     }
 
     /**
@@ -126,7 +124,7 @@ public abstract class Sort implements Serializable {
      *
      * @return the sort builder
      */
-    public static <S> SortBuilder<S> desc(S by) {
-        return new SortBuilder<S>().thenDesc(by);
+    public static SortBuilder desc(String by) {
+        return new SortBuilder().thenDesc(by);
     }
 }
index 34e560e2d108ea55828075e3c2e8c89623137964..cb6a62668ad6ffb2f4cbebcd3f628dbc92bf10e0 100644 (file)
@@ -22,7 +22,6 @@ import com.vaadin.shared.data.sort.SortDirection;
 /**
  * Sorting information for one field.
  *
- * @see Query
  * @param <T>
  *            the type of the sorting information, usually a String (field id)
  *            or a {@link java.util.Comparator}.
index ae78d5486b5a34c1c04347df30e8a4795e4d5a0e..b3410c57f0774ad8a37c7c69636b01eff5ecc373 100644 (file)
@@ -47,6 +47,7 @@ import com.vaadin.data.ValueProvider;
 import com.vaadin.data.provider.DataCommunicator;
 import com.vaadin.data.provider.DataProvider;
 import com.vaadin.data.provider.Query;
+import com.vaadin.data.provider.QuerySortOrder;
 import com.vaadin.data.provider.SortOrder;
 import com.vaadin.event.ConnectorEvent;
 import com.vaadin.event.ContextClickEvent;
@@ -122,8 +123,8 @@ import elemental.json.JsonValue;
  * @param <T>
  *            the grid bean type
  */
-public class Grid<T> extends AbstractListing<T>
-        implements HasComponents, HasDataProvider<T>, SortNotifier<Grid.Column<T, ?>> {
+public class Grid<T> extends AbstractListing<T> implements HasComponents,
+        HasDataProvider<T>, SortNotifier<Grid.Column<T, ?>> {
 
     @Deprecated
     private static final Method COLUMN_REORDER_METHOD = ReflectTools.findMethod(
@@ -787,8 +788,8 @@ public class Grid<T> extends AbstractListing<T>
         private String userId;
 
         /**
-         * Constructs a new Column configuration with given renderer and
-         * value provider.
+         * Constructs a new Column configuration with given renderer and value
+         * provider.
          *
          * @param valueProvider
          *            the function to get values from items
@@ -1078,14 +1079,14 @@ public class Grid<T> extends AbstractListing<T>
         public Column<T, V> setSortProperty(String... properties) {
             Objects.requireNonNull(properties, "Sort properties can't be null");
             sortOrderProvider = dir -> Arrays.stream(properties)
-                    .map(s -> new SortOrder<>(s, dir));
+                    .map(s -> new QuerySortOrder(s, dir));
             return this;
         }
 
         /**
          * Sets the sort orders when sorting this column. The sort order
-         * provider is a function which provides {@link SortOrder} objects to
-         * describe how to sort by this column.
+         * provider is a function which provides {@link QuerySortOrder} objects
+         * to describe how to sort by this column.
          *
          * @param provider
          *            the function to use when generating sort orders with the
@@ -1107,7 +1108,7 @@ public class Grid<T> extends AbstractListing<T>
          *            the sorting direction
          * @return stream of sort orders
          */
-        public Stream<SortOrder<String>> getSortOrder(SortDirection direction) {
+        public Stream<QuerySortOrder> getSortOrder(SortDirection direction) {
             return sortOrderProvider.apply(direction);
         }
 
@@ -2772,7 +2773,7 @@ public class Grid<T> extends AbstractListing<T>
     }
 
     /**
-     * Sort this Grid in user-specified {@link SortOrder} by a column.
+     * Sort this Grid in user-specified {@link QuerySortOrder} by a column.
      *
      * @param column
      *            a column to sort against
@@ -3200,7 +3201,7 @@ public class Grid<T> extends AbstractListing<T>
         getDataCommunicator().setInMemorySorting(comparator);
 
         // Back-end sort properties
-        List<SortOrder<String>> sortProperties = new ArrayList<>();
+        List<QuerySortOrder> sortProperties = new ArrayList<>();
         sortOrder.stream().map(
                 order -> order.getSorted().getSortOrder(order.getDirection()))
                 .forEach(s -> s.forEach(sortProperties::add));
index 046719e9782662f80d98d1cd12a8864026d5fdc3..79cc9d4a4de1c7aef070e27fafd0aa49229d33a7 100644 (file)
@@ -17,7 +17,7 @@ package com.vaadin.ui.components.grid;
 
 import java.util.stream.Stream;
 
-import com.vaadin.data.provider.SortOrder;
+import com.vaadin.data.provider.QuerySortOrder;
 import com.vaadin.server.SerializableFunction;
 import com.vaadin.shared.data.sort.SortDirection;
 import com.vaadin.ui.Grid.Column;
@@ -32,7 +32,7 @@ import com.vaadin.ui.Grid.Column;
  */
 @FunctionalInterface
 public interface SortOrderProvider
-        extends SerializableFunction<SortDirection, Stream<SortOrder<String>>> {
+        extends SerializableFunction<SortDirection, Stream<QuerySortOrder>> {
 
     /**
      * Generates the sort orders when rows are sorted by a column.
@@ -43,6 +43,6 @@ public interface SortOrderProvider
      * @return sort information
      */
     @Override
-    public Stream<SortOrder<String>> apply(SortDirection sortDirection);
+    public Stream<QuerySortOrder> apply(SortDirection sortDirection);
 
 }
index e2f5211d002605c18dbbb5dc1c122746e48b6d61..b91a6fe3afa7c11314b72add81e299d00aa3c38e 100644 (file)
@@ -61,8 +61,9 @@ public class BackendDataProviderTest extends
     }
 
     @Override
-    protected void setSortOrder(List<SortOrder<String>> sortOrder,
+    protected void setSortOrder(List<QuerySortOrder> sortOrder,
             Comparator<StrBean> comp) {
         getDataProvider().setSortOrders(sortOrder);
     }
-}
+
+}
\ No newline at end of file
index 0aa9bb80ba11c1ed82bccc52527472176a39ad62..ebdcdd105cea2ab571f8989c3daac4bbe74a900b 100644 (file)
@@ -2,7 +2,6 @@ package com.vaadin.data.provider;
 
 import static org.junit.Assert.assertTrue;
 
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.LinkedList;
 import java.util.List;
@@ -49,25 +48,20 @@ public abstract class DataProviderTestBase<D extends DataProvider<StrBean, Seria
         return dataProvider;
     }
 
-    protected abstract void setSortOrder(List<SortOrder<String>> sortOrder,
+    protected abstract void setSortOrder(List<QuerySortOrder> sortOrder,
             Comparator<StrBean> comp);
 
     private Query<StrBean, SerializablePredicate<StrBean>> createQuery(
-            List<SortOrder<String>> sortOrder, Comparator<StrBean> comp) {
+            List<QuerySortOrder> sortOrder, Comparator<StrBean> comp) {
         return createQuery(sortOrder, comp, null);
     }
 
     private Query<StrBean, SerializablePredicate<StrBean>> createQuery(
-            List<SortOrder<String>> sortOrder, Comparator<StrBean> comp,
+            List<QuerySortOrder> sortOrder, Comparator<StrBean> comp,
             SerializablePredicate<StrBean> filter) {
         return new Query<>(0, Integer.MAX_VALUE, sortOrder, comp, filter);
     }
 
-    private Query<StrBean, SerializablePredicate<StrBean>> createQuery(
-            SerializablePredicate<StrBean> filter) {
-        return createQuery(Collections.emptyList(), null, filter);
-    }
-
     // Tests start here.
 
     @Test
index 7e324496289400cd40b70d4fb0b9af86c6a0c91a..1ffa444f50adf1c2bf938265f5cb00df858ce646 100644 (file)
@@ -218,7 +218,7 @@ public class ListDataProviderTest
     }
 
     @Override
-    protected void setSortOrder(List<SortOrder<String>> sortOrder,
+    protected void setSortOrder(List<QuerySortOrder> sortOrder,
             Comparator<StrBean> comp) {
         SerializableComparator<StrBean> serializableComp = comp::compare;
         getDataProvider().setSortComparator(serializableComp);
index cecb6bf51152f960095b008f173d736386e3c53a..b8d659fc4759d9b94f5280106494b690ad6d5bce 100644 (file)
@@ -26,7 +26,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 import com.vaadin.data.provider.DataProvider;
-import com.vaadin.data.provider.SortOrder;
+import com.vaadin.data.provider.QuerySortOrder;
 import com.vaadin.shared.data.sort.SortDirection;
 
 /**
@@ -133,7 +133,7 @@ public class DataProviderBoVTest {
                 // First callback fetches items based on a query
                 query -> {
                     List<PersonService.PersonSort> sortOrders = new ArrayList<>();
-                    for (SortOrder<String> queryOrder : query.getSortOrders()) {
+                    for (QuerySortOrder queryOrder : query.getSortOrders()) {
                         PersonService.PersonSort sort = personService
                                 .createSort(
                                         // The name of the sorted property