Pwirth has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/392046 )

Change subject: [WIP]: POC: Querybuilder filter und sort base classes
......................................................................

[WIP]: POC: Querybuilder filter und sort base classes

Change-Id: I33d0953b80a0976ab9184adcb39e768b37c8318c
---
A src/Data/DataSetFilter.php
R src/Data/DataSetFilter/Boolean.php
R src/Data/DataSetFilter/Date.php
R src/Data/DataSetFilter/ListValue.php
R src/Data/DataSetFilter/Numeric.php
A src/Data/DataSetFilter/Range.php
R src/Data/DataSetFilter/StringValue.php
R src/Data/DataSetFilter/TemplateTitle.php
R src/Data/DataSetFilter/Title.php
A src/Data/DataSetSort.php
M src/Data/DatabaseWriter.php
M src/Data/Filter.php
D src/Data/Filter/Range.php
M src/Data/FilterFactory.php
M src/Data/Filterer.php
A src/Data/IFilter.php
M src/Data/IPrimaryDataProvider.php
A src/Data/ISort.php
A src/Data/QueryBuilder.php
A src/Data/QueryFilter.php
A src/Data/QueryFilterFactory.php
A src/Data/QuerySort.php
M src/Data/ReaderParams.php
M src/Data/Sort.php
M src/Data/Watchlist/PrimaryDataProvider.php
A tests/phpunit/Data/DataSetFilter/BooleanTest.php
R tests/phpunit/Data/DataSetFilter/DateTest.php
R tests/phpunit/Data/DataSetFilter/ListValueTest.php
R tests/phpunit/Data/DataSetFilter/NumericTest.php
R tests/phpunit/Data/DataSetFilter/StringValueTest.php
R tests/phpunit/Data/DataSetFilter/TemplateTitleTest.php
R tests/phpunit/Data/DataSetFilter/TitleTest.php
D tests/phpunit/Data/Filter/BooleanTest.php
M tests/phpunit/Data/FiltererTest.php
M tests/phpunit/Data/ReaderParamsTest.php
M tests/phpunit/Data/SorterTest.php
36 files changed, 499 insertions(+), 244 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BlueSpiceFoundation 
refs/changes/46/392046/1

diff --git a/src/Data/DataSetFilter.php b/src/Data/DataSetFilter.php
new file mode 100644
index 0000000..2ee7f17
--- /dev/null
+++ b/src/Data/DataSetFilter.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace BlueSpice\Data;
+
+abstract class DataSetFilter extends Filter {
+       const COMPARISON_EQUALS = 'eq';
+       const COMPARISON_NOT_EQUALS = 'neq';
+
+       /**
+        *
+        * @param \BlueSpice\Data\Record $dataSet
+        * @return boolean
+        */
+       public function matches( $dataSet ) {
+               return $this->doesMatch( $dataSet );
+       }
+
+
+       /**
+        *
+        * @param stdClass[]|array[] $filters
+        * @return Filter[]
+        */
+       public static function newCollectionFromArray( $filters ) {
+               $filterObjects = [];
+               foreach( $filters as $filter ) {
+                       if( is_object(  $filter ) ) {
+                               $filter = (array) $filter;
+                       }
+                       try {
+                               $filterObjects[] = FilterFactory::newFromArray( 
$filter );
+                       } catch( \Exception $e ) {
+                               continue;
+                       }
+               }
+               return $filterObjects;
+       }
+
+       protected abstract function doesMatch( $dataSet );
+}
diff --git a/src/Data/Filter/Boolean.php b/src/Data/DataSetFilter/Boolean.php
similarity index 81%
rename from src/Data/Filter/Boolean.php
rename to src/Data/DataSetFilter/Boolean.php
index 22fa99f..59c6a1b 100644
--- a/src/Data/Filter/Boolean.php
+++ b/src/Data/DataSetFilter/Boolean.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace BlueSpice\Data\Filter;
+namespace BlueSpice\Data\DataSetFilter;
 
-use BlueSpice\Data\Filter;
+use BlueSpice\Data\DataSetFilter;
 
-class Boolean extends Filter {
+class Boolean extends DataSetFilter {
 
        /**
         * Performs filtering based on given filter of type bool on a dataset
diff --git a/src/Data/Filter/Date.php b/src/Data/DataSetFilter/Date.php
similarity index 95%
rename from src/Data/Filter/Date.php
rename to src/Data/DataSetFilter/Date.php
index e45dc37..f6a0f9b 100644
--- a/src/Data/Filter/Date.php
+++ b/src/Data/DataSetFilter/Date.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace BlueSpice\Data\Filter;
+namespace BlueSpice\Data\DataSetFilter;
 
 class Date extends Range {
 
diff --git a/src/Data/Filter/ListValue.php 
b/src/Data/DataSetFilter/ListValue.php
similarity index 82%
rename from src/Data/Filter/ListValue.php
rename to src/Data/DataSetFilter/ListValue.php
index 00bc7ca..61b865e 100644
--- a/src/Data/Filter/ListValue.php
+++ b/src/Data/DataSetFilter/ListValue.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace BlueSpice\Data\Filter;
+namespace BlueSpice\Data\DataSetFilter;
 
-use BlueSpice\Data\Filter;
+use BlueSpice\Data\DataSetFilter;
 
-class ListValue extends Filter {
+class ListValue extends DataSetFilter {
 
        /**
         * Performs list filtering based on given filter of type array on a 
dataset
diff --git a/src/Data/Filter/Numeric.php b/src/Data/DataSetFilter/Numeric.php
similarity index 94%
rename from src/Data/Filter/Numeric.php
rename to src/Data/DataSetFilter/Numeric.php
index 0d84024..8e43d45 100644
--- a/src/Data/Filter/Numeric.php
+++ b/src/Data/DataSetFilter/Numeric.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace BlueSpice\Data\Filter;
+namespace BlueSpice\Data\DataSetFilter;
 
 class Numeric extends Range {
        /**
diff --git a/src/Data/DataSetFilter/Range.php b/src/Data/DataSetFilter/Range.php
new file mode 100644
index 0000000..1113e42
--- /dev/null
+++ b/src/Data/DataSetFilter/Range.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace BlueSpice\Data\DataSetFilter;
+
+use BlueSpice\Data\DataSetFilter;
+
+abstract class Range extends DataSetFilter {
+       const COMPARISON_LOWER_THAN = 'lt';
+       const COMPARISON_GREATER_THAN = 'gt';
+}
\ No newline at end of file
diff --git a/src/Data/Filter/StringValue.php 
b/src/Data/DataSetFilter/StringValue.php
similarity index 81%
rename from src/Data/Filter/StringValue.php
rename to src/Data/DataSetFilter/StringValue.php
index d569ab6..5ea411e 100644
--- a/src/Data/Filter/StringValue.php
+++ b/src/Data/DataSetFilter/StringValue.php
@@ -1,13 +1,13 @@
 <?php
 
-namespace BlueSpice\Data\Filter;
+namespace BlueSpice\Data\DataSetFilter;
 
-use BlueSpice\Data\Filter;
+use BlueSpice\Data\DataSetFilter;
 
 /**
  * Class name "String" is reserved
  */
-class StringValue extends Filter {
+class StringValue extends DataSetFilter {
        const COMPARISON_STARTS_WITH = 'sw';
        const COMPARISON_ENDS_WITH = 'ew';
        const COMPARISON_CONTAINS = 'ct';
diff --git a/src/Data/Filter/TemplateTitle.php 
b/src/Data/DataSetFilter/TemplateTitle.php
similarity index 74%
rename from src/Data/Filter/TemplateTitle.php
rename to src/Data/DataSetFilter/TemplateTitle.php
index 0ef445b..19ce804 100644
--- a/src/Data/Filter/TemplateTitle.php
+++ b/src/Data/DataSetFilter/TemplateTitle.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace BlueSpice\Data\Filter;
+namespace BlueSpice\Data\DataSetFilter;
 
 class TemplateTitle extends Title {
        protected function getDefaultTitleNamespace() {
diff --git a/src/Data/Filter/Title.php b/src/Data/DataSetFilter/Title.php
similarity index 96%
rename from src/Data/Filter/Title.php
rename to src/Data/DataSetFilter/Title.php
index b4d0187..38b66e2 100644
--- a/src/Data/Filter/Title.php
+++ b/src/Data/DataSetFilter/Title.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace BlueSpice\Data\Filter;
+namespace BlueSpice\Data\DataSetFilter;
 
 class Title extends Range {
 
diff --git a/src/Data/DataSetSort.php b/src/Data/DataSetSort.php
new file mode 100644
index 0000000..e88a156
--- /dev/null
+++ b/src/Data/DataSetSort.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace BlueSpice\Data;
+
+class DataSetSort extends Sort {
+
+       /**
+        *
+        * @param string $property
+        * @param string $direction
+        * @throws UnexpectedValueException
+        */
+       public function __construct( $property, $direction = static::ASCENDING 
) {
+               parent::__construct( $property , $direction );
+
+               if( !in_array( $this->direction, [ static::ASCENDING, 
static::DESCENDING ] ) ) {
+                       throw new UnexpectedValueException(
+                               "'{$this->direction}' is not an allowed value 
for argument \$direction"
+                       );
+               }
+       }
+
+       /**
+        *
+        * @param stdClass[]|array[] $sorts
+        * @return Sort[]
+        */
+       public static function newCollectionFromArray( $sorts ) {
+               $sortObjects = [];
+               foreach( $sorts as $sort ) {
+                       if( is_array( $sort ) ) {
+                               $sort = (object) $sort;
+                       }
+
+                       $sortObjects[] = new DataSetSort(
+                               $sort->property,
+                               isset( $sort->direction ) ? $sort->direction : 
null
+                       );
+               }
+               return $sortObjects;
+       }
+}
diff --git a/src/Data/DatabaseWriter.php b/src/Data/DatabaseWriter.php
index 895a809..b078f35 100644
--- a/src/Data/DatabaseWriter.php
+++ b/src/Data/DatabaseWriter.php
@@ -235,7 +235,7 @@
                        Filter::KEY_FIELD => $fieldName,
                        Filter::KEY_VALUE => $record->get( $fieldName ),
                        Filter::KEY_TYPE => $this->getFieldType( $fieldName ),
-                       Filter::KEY_COMPARISON => Filter::COMPARISON_EQUALS,
+                       Filter::KEY_COMPARISON => 
DataSetFilter::COMPARISON_EQUALS,
                ];
        }
 
diff --git a/src/Data/Filter.php b/src/Data/Filter.php
index ea87ceb..cf60413 100644
--- a/src/Data/Filter.php
+++ b/src/Data/Filter.php
@@ -2,14 +2,7 @@
 
 namespace BlueSpice\Data;
 
-abstract class Filter {
-       const COMPARISON_EQUALS = 'eq';
-       const COMPARISON_NOT_EQUALS = 'neq';
-
-       const KEY_TYPE = 'type';
-       const KEY_COMPARISON = 'comparison';
-       const KEY_FIELD = 'field';
-       const KEY_VALUE = 'value';
+abstract class Filter implements IFilter{
 
        /**
         *
@@ -63,32 +56,4 @@
                return $this->comparison;
        }
 
-       /**
-        *
-        * @param \BlueSpice\Data\Record $dataSet
-        * @return boolean
-        */
-       public function matches( $dataSet ) {
-               return $this->doesMatch( $dataSet );
-       }
-
-
-       /**
-        *
-        * @param stdClass[]|array[] $filters
-        * @return Filter[]
-        */
-       public static function newCollectionFromArray( $filters ) {
-               $filterObjects = [];
-               foreach( $filters as $filter ) {
-                       if( is_object(  $filter ) ) {
-                               $filter = (array) $filter;
-                       }
-                       $filterObjects[] = FilterFactory::newFromArray( $filter 
);
-               }
-
-               return $filterObjects;
-       }
-
-       protected abstract function doesMatch( $dataSet );
 }
diff --git a/src/Data/Filter/Range.php b/src/Data/Filter/Range.php
deleted file mode 100644
index b85b724..0000000
--- a/src/Data/Filter/Range.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace BlueSpice\Data\Filter;
-
-use BlueSpice\Data\Filter;
-
-abstract class Range extends Filter {
-       const COMPARISON_LOWER_THAN = 'lt';
-       const COMPARISON_GREATER_THAN = 'gt';
-}
\ No newline at end of file
diff --git a/src/Data/FilterFactory.php b/src/Data/FilterFactory.php
index 40544d4..d89022f 100644
--- a/src/Data/FilterFactory.php
+++ b/src/Data/FilterFactory.php
@@ -2,20 +2,20 @@
 
 namespace BlueSpice\Data;
 
-class FilterFactory {
+abstract class FilterFactory {
        /**
         *
         * @var array
         */
-       public static $typeMap = [
-               'string' => 'BlueSpice\Data\Filter\StringValue',
-               'date'=> 'BlueSpice\Data\Filter\Date',
-               #'datetime'=> 'BlueSpice\Data\Filter\DateTime',
-               'boolean'=> 'BlueSpice\Data\Filter\Boolean',
-               'numeric' => 'BlueSpice\Data\Filter\Numeric',
-               'title' => 'BlueSpice\Data\Filter\Title',
-               'templatetitle' => 'BlueSpice\Data\Filter\TemplateTitle',
-               'list' => 'BlueSpice\Data\Filter\ListValue'
+       protected static $typeMap = [
+               'string' => 'BlueSpice\Data\DataSetFilter\StringValue',
+               'date'=> 'BlueSpice\Data\DataSetFilter\Date',
+               #'datetime'=> 'BlueSpice\Data\DataSetFilter\DateTime',
+               'boolean'=> 'BlueSpice\Data\DataSetFilter\Boolean',
+               'numeric' => 'BlueSpice\Data\DataSetFilter\Numeric',
+               'title' => 'BlueSpice\Data\DataSetFilter\Title',
+               'templatetitle' => 'BlueSpice\Data\DataSetFilter\TemplateTitle',
+               'list' => 'BlueSpice\Data\DataSetFilter\ListValue'
        ];
 
        /**
@@ -25,8 +25,8 @@
         * @throws \UnexpectedValueException
         */
        public static function newFromArray( $filter ) {
-               if( isset( self::$typeMap[$filter[Filter::KEY_TYPE]]) ) {
-                       return new self::$typeMap[$filter[Filter::KEY_TYPE]]( 
$filter );
+               if( isset( static::$typeMap[$filter[Filter::KEY_TYPE]]) ) {
+                       return new static::$typeMap[$filter[Filter::KEY_TYPE]]( 
$filter );
                }
                else {
                        throw new \UnexpectedValueException(
diff --git a/src/Data/Filterer.php b/src/Data/Filterer.php
index 0b2b354..1095ac4 100644
--- a/src/Data/Filterer.php
+++ b/src/Data/Filterer.php
@@ -39,6 +39,9 @@
         */
        protected function matchFilter( $dataSet ) {
                foreach( $this->filters as $filter ) {
+                       if( !$filter instanceof DataSetFilter ) {
+                               continue;
+                       }
                        //If just one of these filters does not apply, the 
dataset needs
                        //to be removed
                        if( !$filter->matches( $dataSet ) ) {
diff --git a/src/Data/IFilter.php b/src/Data/IFilter.php
new file mode 100644
index 0000000..29044b4
--- /dev/null
+++ b/src/Data/IFilter.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace BlueSpice\Data;
+
+interface IFilter {
+
+       const KEY_TYPE = 'type';
+       const KEY_COMPARISON = 'comparison';
+       const KEY_FIELD = 'field';
+       const KEY_VALUE = 'value';
+
+       /**
+        *
+        * @return string
+        */
+       public function getField();
+
+       /**
+        *
+        * @return mixed
+        */
+       public function getValue();
+
+       /**
+        *
+        * @return string
+        */
+       public function getComparison();
+
+}
diff --git a/src/Data/IPrimaryDataProvider.php 
b/src/Data/IPrimaryDataProvider.php
index 5871aab..c7c8195 100644
--- a/src/Data/IPrimaryDataProvider.php
+++ b/src/Data/IPrimaryDataProvider.php
@@ -8,10 +8,9 @@
         *
         * @param string $query Special simple filter that aims at one specific
         * field that the DataProvider needs to define.
-        * @param Filter[] $preFilters Complete set of filters that will also be
-        * applied later during the process by the "Filterer" step. Having it 
here
-        * allows us to prefilter and tweak performance
+        * @param ReaderParams $params Complete set of reder params. Having it 
here
+        * allows us to prefilter, presort and tweak performance
         * @return \BlueSpice\Data\Record[]
         */
-       public function makeData( $query = '', $preFilters = [] );
+       public function makeData( $query = '', $params = null );
 }
\ No newline at end of file
diff --git a/src/Data/ISort.php b/src/Data/ISort.php
new file mode 100644
index 0000000..b102c7b
--- /dev/null
+++ b/src/Data/ISort.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace BlueSpice\Data;
+
+interface ISort {
+
+       const ASCENDING = 'ASC';
+       const DESCENDING = 'DESC';
+
+       /**
+        *
+        * @return string
+        */
+       public function getProperty();
+
+       /**
+        *
+        * @return string One of Sort::ASCENDING or Sort::DESCENDING
+        */
+       public function getDirection();
+
+}
diff --git a/src/Data/QueryBuilder.php b/src/Data/QueryBuilder.php
new file mode 100644
index 0000000..422ea0b
--- /dev/null
+++ b/src/Data/QueryBuilder.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace BlueSpice\Data;
+
+class QueryBuilder {
+
+       /**
+        *
+        * @var Filter[]
+        */
+       protected $filters = null;
+
+       /**
+        *
+        * @param Filter $filters
+        */
+       public function __construct( $filters ) {
+               $this->filters = $filters;
+       }
+
+       /**
+        *
+        * @param mixed $query
+        * @return mixed $query
+        */
+       public function build( $query ) {
+               foreach( $this->filters as $filter ) {
+                       if( !$filter instanceof QueryFilter ) {
+                               continue;
+                       }
+                       $query = $filter->build( $query );
+               }
+
+               return $query;
+       }
+}
\ No newline at end of file
diff --git a/src/Data/QueryFilter.php b/src/Data/QueryFilter.php
new file mode 100644
index 0000000..b6c06a4
--- /dev/null
+++ b/src/Data/QueryFilter.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace BlueSpice\Data;
+
+abstract class QueryFilter implements IFilter{
+
+       /**
+        *
+        * @param \BlueSpice\Data\Record $dataSet
+        * @return boolean
+        */
+       public function build( $dataSet ) {
+               return $this->buildQuery( $dataSet );
+       }
+
+
+       /**
+        *
+        * @param stdClass[]|array[] $filters
+        * @return Filter[]
+        */
+       public static function newCollectionFromArray( $filters ) {
+               $filterObjects = [];
+               foreach( $filters as $filter ) {
+                       if( is_object(  $filter ) ) {
+                               $filter = (array) $filter;
+                       }
+                       try {
+                               $filterObjects[] =  
QueryFilterFactory::newFromArray( $filter );
+                       } catch( \Exception $e ) {
+                               continue;
+                       }
+               }
+
+               return $filterObjects;
+       }
+
+       protected abstract function buildQuery( $dataSet );
+}
diff --git a/src/Data/QueryFilterFactory.php b/src/Data/QueryFilterFactory.php
new file mode 100644
index 0000000..cfbf418
--- /dev/null
+++ b/src/Data/QueryFilterFactory.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace BlueSpice\Data;
+
+abstract class QueryFilterFactory {
+       /**
+        *
+        * @var array
+        */
+       protected static $typeMap = [];
+
+       /**
+        *
+        * @param array $filter
+        * @return \BlueSpice\Data\QueryFilter
+        * @throws \UnexpectedValueException
+        */
+       public static function newFromArray( $filter ) {
+               if( isset( static::$typeMap[$filter[Filter::KEY_TYPE]]) ) {
+                       return new static::$typeMap[$filter[Filter::KEY_TYPE]]( 
$filter );
+               }
+               else {
+                       throw new \UnexpectedValueException(
+                               "No filter class for 
'{$filter[Filter::KEY_TYPE]}' available!"
+                       );
+               }
+       }
+}
diff --git a/src/Data/QuerySort.php b/src/Data/QuerySort.php
new file mode 100644
index 0000000..f79aebd
--- /dev/null
+++ b/src/Data/QuerySort.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace BlueSpice\Data;
+
+abstract class QuerySort extends Sort {
+
+       /**
+        *
+        * @param string $property
+        * @param string $direction
+        * @throws UnexpectedValueException
+        */
+       public function __construct( $property, $direction = static::ASCENDING 
) {
+               parent::__construct( $property , $direction );
+
+               if( !in_array( $this->direction, [ static::ASCENDING, 
static::DESCENDING ] ) ) {
+                       throw new UnexpectedValueException(
+                               "'{$this->direction}' is not an allowed value 
for argument \$direction"
+                       );
+               }
+       }
+
+       /**
+        *
+        * @param mixed $query
+        * @return boolean
+        */
+       public function build( $query ) {
+               return $this->buildQuery( $query );
+       }
+
+       /**
+        *
+        * @param stdClass[]|array[] $sorts
+        * @return Sort[]
+        */
+       public function newCollectionFromArray( $sorts ) {
+               return [];
+       }
+
+       protected abstract function buildQuery( $query );
+}
diff --git a/src/Data/ReaderParams.php b/src/Data/ReaderParams.php
index 05de0a9..f9eef31 100644
--- a/src/Data/ReaderParams.php
+++ b/src/Data/ReaderParams.php
@@ -2,9 +2,6 @@
 
 namespace BlueSpice\Data;
 
-use BlueSpice\Data\Sort;
-use BlueSpice\Data\Filter;
-
 class ReaderParams {
        const LIMIT_INFINITE = -1;
 
@@ -102,14 +99,39 @@
                        return;
                }
 
-               $this->sort = Sort::newCollectionFromArray( $params['sort'] );
+               $dataSort = DataSetSort::newCollectionFromArray( 
$params['sort'] );
+               foreach( $dataSort as $sort ) {
+                       $this->sort[ $sort->getProperty() ] = $sort;
+               }
+
+               $querySort = QuerySort::newCollectionFromArray( $params['sort'] 
);
+               foreach( $querySort as $sort ) {
+                       $this->sort[ $sort->getProperty() ] = $sort;
+               }
+
+               $this->sort = array_values( $this->sort );
        }
 
        protected function setFilter( $params ) {
                if( !isset( $params['filter'] ) || !is_array(  
$params['filter'] ) ) {
                        return;
                }
-               $this->filter = Filter::newCollectionFromArray( 
$params['filter'] );
+
+               $dataFilter = DataSetFilter::newCollectionFromArray(
+                       $params['filter']
+               );
+               foreach( $dataFilter as $filter ) {
+                       $this->filter[$filter->getField()] = $filter;
+               }
+
+               $queryFilter = QueryFilter::newCollectionFromArray(
+                       $params['filter']
+               );
+               foreach( $queryFilter as $filter ) {
+                       $this->filter[$filter->getField()] = $filter;
+               }
+
+               $this->filter = array_values( $this->filter );
        }
 
 }
\ No newline at end of file
diff --git a/src/Data/Sort.php b/src/Data/Sort.php
index d392e11..bb63636 100644
--- a/src/Data/Sort.php
+++ b/src/Data/Sort.php
@@ -2,10 +2,7 @@
 
 namespace BlueSpice\Data;
 
-class Sort {
-
-       const ASCENDING = 'ASC';
-       const DESCENDING = 'DESC';
+abstract class Sort implements ISort {
 
        protected $property = '';
 
@@ -17,11 +14,11 @@
         * @param string $direction
         * @throws UnexpectedValueException
         */
-       public function __construct( $property, $direction = self::ASCENDING ) {
+       public function __construct( $property, $direction = static::ASCENDING 
) {
                $this->property = $property;
                $this->direction = strtoupper( $direction );
 
-               if( !in_array( $this->direction, [ self::ASCENDING, 
self::DESCENDING ] ) ) {
+               if( !in_array( $this->direction, [ static::ASCENDING, 
static::DESCENDING ] ) ) {
                        throw new UnexpectedValueException(
                                "'{$this->direction}' is not an allowed value 
for argument \$direction"
                        );
@@ -50,25 +47,5 @@
         */
        public function __toString() {
                return $this->getProperty().' '.$this->getDirection();
-       }
-
-               /**
-        *
-        * @param stdClass[]|array[] $sorts
-        * @return Sort[]
-        */
-       public static function newCollectionFromArray( $sorts ) {
-               $sortObjects = [];
-               foreach( $sorts as $sort ) {
-                       if( is_array( $sort ) ) {
-                               $sort = (object) $sort;
-                       }
-
-                       $sortObjects[] = new Sort(
-                               $sort->property,
-                               isset( $sort->direction ) ? $sort->direction : 
null
-                       );
-               }
-               return $sortObjects;
        }
 }
diff --git a/src/Data/Watchlist/PrimaryDataProvider.php 
b/src/Data/Watchlist/PrimaryDataProvider.php
index 1de86d5..ad01c08 100644
--- a/src/Data/Watchlist/PrimaryDataProvider.php
+++ b/src/Data/Watchlist/PrimaryDataProvider.php
@@ -42,14 +42,21 @@
 
        /**
         *
-        * @param string $query
-        * @param type $preFilters
+        * @param string $queryString
+        * @param \BlueSpice\Data\ReaderParams $params
         */
-       public function makeData( $query = '', $preFilters = [] ) {
+       public function makeData( $queryString = '', $params = [] ) {
+
+               $query = [
+                       'tables' => [ 'watchlist' ],
+                       'fields' => '*',
+                       'conditions' => [],
+                       'options' => [],
+               ];
                $res = $this->db->select(
                        'watchlist',
                        '*',
-                       $this->makePreFilterConds( $preFilters )
+                       $this->makePreFilterConds( $params, $query, 
$queryString )
                );
 
                $distinctUserIds = [];
@@ -71,10 +78,13 @@
 
        /**
         *
-        * @param Filter[] $preFilters
+        * @param \BlueSpice\Data\ReaderParams $params
+        * @param array $query
+        * @param string $queryString
         * @return array
         */
-       protected function makePreFilterConds( $preFilters ) {
+       protected function makePreFilterConds( $params, $query, $queryString ) {
+               $preFilters = $params->getFilter();
                $conds = [];
                $filterFinder = new FilterFinder( $preFilters );
                $userIdFilter = $filterFinder->findByField( 'user_id' );
diff --git a/tests/phpunit/Data/DataSetFilter/BooleanTest.php 
b/tests/phpunit/Data/DataSetFilter/BooleanTest.php
new file mode 100644
index 0000000..8eb6352
--- /dev/null
+++ b/tests/phpunit/Data/DataSetFilter/BooleanTest.php
@@ -0,0 +1,98 @@
+<?php
+
+namespace BlueSpice\Tests\Data\DataSetFilter;
+
+use BlueSpice\Data\DataSetFilter;
+use BlueSpice\Data\Record;
+
+/**
+ * @group BlueSpice
+ * @group BlueSpiceFoundation
+ */
+class BooleanTest extends \PHPUnit_Framework_TestCase {
+       public function testPositive() {
+               $filter = new DataSetFilter\Boolean( [
+                       'field' => 'field1',
+                       'comparison' => 'eq',
+                       'value' => true
+               ] );
+
+               $result = $filter->matches( new Record( (object)[
+                       'field1' => true,
+                       'field2' => false
+               ] ) );
+
+               $this->assertTrue( $result );
+       }
+
+       public function testNegative() {
+               $filter = new DataSetFilter\Boolean( [
+                       'field' => 'field1',
+                       'comparison' => 'eq',
+                       'value' => false
+               ] );
+
+               $result = $filter->matches( new Record( (object)[
+                       'field1' => true,
+                       'field2' => false
+               ] ) );
+
+               $this->assertFalse( $result );
+       }
+
+
+       /**
+        * @dataProvider provideAppliesToValues
+        * @param boolean $expecation
+        * @param mixed $fieldValue
+        * @param mixed $filterValue
+        * @param string $comparison
+        */
+       public function testAppliesTo ( $expectation, $comparison, $fieldValue, 
$filterValue ) {
+               $filter = new DataSetFilter\Boolean( [
+                       DataSetFilter\Boolean::KEY_FIELD => 'field_A',
+                       DataSetFilter\Boolean::KEY_VALUE => $filterValue,
+                       DataSetFilter\Boolean::KEY_COMPARISON => $comparison
+               ] );
+
+               $dataSet = new Record( (object) [
+                       'field_A' => $fieldValue
+               ] );
+
+               if( $expectation ) {
+                       $this->assertTrue( $filter->matches( $dataSet ), 
'Filter should apply' );
+               }
+               else {
+                       $this->assertFalse( $filter->matches( $dataSet ), 
'Filter should not apply' );
+               }
+       }
+
+       public function provideAppliesToValues() {
+               return [
+                       [ true, DataSetFilter\Boolean::COMPARISON_EQUALS, true, 
true ],
+                       [ true, DataSetFilter\Boolean::COMPARISON_EQUALS, 1, 
true ],
+                       [ true, DataSetFilter\Boolean::COMPARISON_EQUALS, '1', 
true ],
+                       [ true, DataSetFilter\Boolean::COMPARISON_EQUALS, 
false, false ],
+                       [ true, DataSetFilter\Boolean::COMPARISON_EQUALS, 0, 
false ],
+                       [ true, DataSetFilter\Boolean::COMPARISON_EQUALS, '0', 
false ],
+                       [ true, DataSetFilter\Boolean::COMPARISON_NOT_EQUALS, 
true, false ],
+                       [ true, DataSetFilter\Boolean::COMPARISON_NOT_EQUALS, 
1, false ],
+                       [ true, DataSetFilter\Boolean::COMPARISON_NOT_EQUALS, 
'1', false ],
+                       [ true, DataSetFilter\Boolean::COMPARISON_NOT_EQUALS, 
false, true ],
+                       [ true, DataSetFilter\Boolean::COMPARISON_NOT_EQUALS, 
0, true ],
+                       [ true, DataSetFilter\Boolean::COMPARISON_NOT_EQUALS, 
'0', true ],
+                       [ false, DataSetFilter\Boolean::COMPARISON_EQUALS, 
true, false ],
+                       [ false, DataSetFilter\Boolean::COMPARISON_EQUALS, 1, 
false ],
+                       [ false, DataSetFilter\Boolean::COMPARISON_EQUALS, '1', 
false ],
+                       [ false, DataSetFilter\Boolean::COMPARISON_EQUALS, 
false, true ],
+                       [ false, DataSetFilter\Boolean::COMPARISON_EQUALS, 0, 
true ],
+                       [ false, DataSetFilter\Boolean::COMPARISON_EQUALS, '0', 
true ],
+                       [ false, DataSetFilter\Boolean::COMPARISON_NOT_EQUALS, 
true, true ],
+                       [ false, DataSetFilter\Boolean::COMPARISON_NOT_EQUALS, 
1, true ],
+                       [ false, DataSetFilter\Boolean::COMPARISON_NOT_EQUALS, 
'1', true ],
+                       [ false, DataSetFilter\Boolean::COMPARISON_NOT_EQUALS, 
false, false ],
+                       [ false, DataSetFilter\Boolean::COMPARISON_NOT_EQUALS, 
0, false ],
+                       [ false, DataSetFilter\Boolean::COMPARISON_NOT_EQUALS, 
'0', false ]
+               ];
+       }
+}
diff --git a/tests/phpunit/Data/Filter/DateTest.php 
b/tests/phpunit/Data/DataSetFilter/DateTest.php
similarity index 61%
rename from tests/phpunit/Data/Filter/DateTest.php
rename to tests/phpunit/Data/DataSetFilter/DateTest.php
index d54830a..cf4ab8f 100644
--- a/tests/phpunit/Data/Filter/DateTest.php
+++ b/tests/phpunit/Data/DataSetFilter/DateTest.php
@@ -2,7 +2,7 @@
 
 namespace BlueSpice\Tests\Data\Filter;
 
-use \BlueSpice\Data\Filter;
+use \BlueSpice\Data\DataSetFilter;
 use BlueSpice\Data\Record;
 
 /**
@@ -11,7 +11,7 @@
  */
 class DateTest extends \PHPUnit_Framework_TestCase {
        public function testPositive() {
-               $filter = new Filter\Date( [
+               $filter = new DataSetFilter\Date( [
                        'field' => 'field1',
                        'comparison' => 'gt',
                        'value' => '2017/01/01'
@@ -26,7 +26,7 @@
        }
 
        public function testNegative() {
-               $filter = new \BlueSpice\Data\Filter\Date( [
+               $filter = new \BlueSpice\Data\DataSetFilter\Date( [
                        'field' => 'field1',
                        'comparison' => 'gt',
                        'value' => '2017/01/02'
@@ -48,10 +48,10 @@
         * @param string $comparison
         */
        public function testAppliesTo ( $expectation, $comparison, $fieldValue, 
$filterValue ) {
-               $filter = new Filter\Date([
-                       Filter::KEY_FIELD => 'field_A',
-                       Filter::KEY_VALUE => $filterValue,
-                       Filter::KEY_COMPARISON => $comparison
+               $filter = new DataSetFilter\Date([
+                       DataSetFilter::KEY_FIELD => 'field_A',
+                       DataSetFilter::KEY_VALUE => $filterValue,
+                       DataSetFilter::KEY_COMPARISON => $comparison
                ]);
 
                $dataSet = new Record( (object)[
@@ -68,13 +68,13 @@
 
        public function provideAppliesToValues() {
                return [
-                       [ true, Filter::COMPARISON_EQUALS, '2017-07-01', 
'20170701000000' ],
-                       [ true, Filter::COMPARISON_EQUALS, 0, '1970-01-01' ],
-                       [ true, Filter::COMPARISON_EQUALS, '1970/01/02', 
'1970-01-02' ],
-                       [ true, Filter\Range::COMPARISON_GREATER_THAN, 
'1970/01/02', 1 ],
-                       [ true, Filter\Range::COMPARISON_LOWER_THAN, 
'1970/01/02', 'now' ],
-                       [ true, Filter\Range::COMPARISON_LOWER_THAN, 'now - 1 
week', 'now' ],
-                       [ false, Filter\Range::COMPARISON_EQUALS, 'now - 1 
week', 'now' ],
+                       [ true, DataSetFilter::COMPARISON_EQUALS, '2017-07-01', 
'20170701000000' ],
+                       [ true, DataSetFilter::COMPARISON_EQUALS, 0, 
'1970-01-01' ],
+                       [ true, DataSetFilter::COMPARISON_EQUALS, '1970/01/02', 
'1970-01-02' ],
+                       [ true, DataSetFilter\Range::COMPARISON_GREATER_THAN, 
'1970/01/02', 1 ],
+                       [ true, DataSetFilter\Range::COMPARISON_LOWER_THAN, 
'1970/01/02', 'now' ],
+                       [ true, DataSetFilter\Range::COMPARISON_LOWER_THAN, 
'now - 1 week', 'now' ],
+                       [ false, DataSetFilter\Range::COMPARISON_EQUALS, 'now - 
1 week', 'now' ],
                ];
        }
 }
diff --git a/tests/phpunit/Data/Filter/ListValueTest.php 
b/tests/phpunit/Data/DataSetFilter/ListValueTest.php
similarity index 80%
rename from tests/phpunit/Data/Filter/ListValueTest.php
rename to tests/phpunit/Data/DataSetFilter/ListValueTest.php
index feacbfc..c434926 100644
--- a/tests/phpunit/Data/Filter/ListValueTest.php
+++ b/tests/phpunit/Data/DataSetFilter/ListValueTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace BlueSpice\Tests\Data\Filter;
+namespace BlueSpice\Tests\Data\DataSetFilter;
 
 use BlueSpice\Data\Record;
 
@@ -10,7 +10,7 @@
  */
 class ListValueTest extends \PHPUnit_Framework_TestCase {
        public function testPositive() {
-               $filter = new \BlueSpice\Data\Filter\ListValue( [
+               $filter = new \BlueSpice\Data\DataSetFilter\ListValue( [
                        'field' => 'field1',
                        'comparison' => 'ct',
                        'value' => [ 'Hello' ]
@@ -25,7 +25,7 @@
        }
 
        public function testNegative() {
-               $filter = new \BlueSpice\Data\Filter\ListValue( [
+               $filter = new \BlueSpice\Data\DataSetFilter\ListValue( [
                        'field' => 'field1',
                        'comparison' => 'ct',
                        'value' => [ 'Hello' ]
diff --git a/tests/phpunit/Data/Filter/NumericTest.php 
b/tests/phpunit/Data/DataSetFilter/NumericTest.php
similarity index 79%
rename from tests/phpunit/Data/Filter/NumericTest.php
rename to tests/phpunit/Data/DataSetFilter/NumericTest.php
index d9d137d..fa75263 100644
--- a/tests/phpunit/Data/Filter/NumericTest.php
+++ b/tests/phpunit/Data/DataSetFilter/NumericTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace BlueSpice\Tests\Data\Filter;
+namespace BlueSpice\Tests\Data\DataSetFilter;
 
 use BlueSpice\Data\Record;
 
@@ -10,7 +10,7 @@
  */
 class NumericTest extends \PHPUnit_Framework_TestCase {
        public function testPositive() {
-               $filter = new \BlueSpice\Data\Filter\Numeric( [
+               $filter = new \BlueSpice\Data\DataSetFilter\Numeric( [
                        'field' => 'field1',
                        'comparison' => 'gt',
                        'value' => 5
@@ -25,7 +25,7 @@
        }
 
        public function testNegative() {
-               $filter = new \BlueSpice\Data\Filter\Numeric( [
+               $filter = new \BlueSpice\Data\DataSetFilter\Numeric( [
                        'field' => 'field1',
                        'comparison' => 'gt',
                        'value' => 5
diff --git a/tests/phpunit/Data/Filter/StringValueTest.php 
b/tests/phpunit/Data/DataSetFilter/StringValueTest.php
similarity index 80%
rename from tests/phpunit/Data/Filter/StringValueTest.php
rename to tests/phpunit/Data/DataSetFilter/StringValueTest.php
index 4456358..95f2e1a 100644
--- a/tests/phpunit/Data/Filter/StringValueTest.php
+++ b/tests/phpunit/Data/DataSetFilter/StringValueTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace BlueSpice\Tests\Data\Filter;
+namespace BlueSpice\Tests\Data\DataSetFilter;
 
 use BlueSpice\Data\Record;
 
@@ -10,7 +10,7 @@
  */
 class StringValueTest extends \PHPUnit_Framework_TestCase {
        public function testPositive() {
-               $filter = new \BlueSpice\Data\Filter\StringValue( [
+               $filter = new \BlueSpice\Data\DataSetFilter\StringValue( [
                        'field' => 'field1',
                        'comparison' => 'ct',
                        'value' => 'ello'
@@ -25,7 +25,7 @@
        }
 
        public function testNegative() {
-               $filter = new \BlueSpice\Data\Filter\StringValue( [
+               $filter = new \BlueSpice\Data\DataSetFilter\StringValue( [
                        'field' => 'field1',
                        'comparison' => 'ct',
                        'value' => 'allo'
diff --git a/tests/phpunit/Data/Filter/TemplateTitleTest.php 
b/tests/phpunit/Data/DataSetFilter/TemplateTitleTest.php
similarity index 80%
rename from tests/phpunit/Data/Filter/TemplateTitleTest.php
rename to tests/phpunit/Data/DataSetFilter/TemplateTitleTest.php
index 789fc28..d543de1 100644
--- a/tests/phpunit/Data/Filter/TemplateTitleTest.php
+++ b/tests/phpunit/Data/DataSetFilter/TemplateTitleTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace BlueSpice\Tests\Data\Filter;
+namespace BlueSpice\Tests\Data\DataSetFilter;
 
 use BlueSpice\Data\Record;
 
@@ -10,7 +10,7 @@
  */
 class TemplateTitleTest extends \PHPUnit_Framework_TestCase {
        public function testPositive() {
-               $filter = new \BlueSpice\Data\Filter\TemplateTitle( [
+               $filter = new \BlueSpice\Data\DataSetFilter\TemplateTitle( [
                        'field' => 'field1',
                        'comparison' => 'eq',
                        'value' => 'Help'
@@ -25,7 +25,7 @@
        }
 
        public function testNegative() {
-               $filter = new \BlueSpice\Data\Filter\TemplateTitle( [
+               $filter = new \BlueSpice\Data\DataSetFilter\TemplateTitle( [
                        'field' => 'field1',
                        'comparison' => 'eq',
                        'value' => 'Help'
diff --git a/tests/phpunit/Data/Filter/TitleTest.php 
b/tests/phpunit/Data/DataSetFilter/TitleTest.php
similarity index 81%
rename from tests/phpunit/Data/Filter/TitleTest.php
rename to tests/phpunit/Data/DataSetFilter/TitleTest.php
index 412a703..274b671 100644
--- a/tests/phpunit/Data/Filter/TitleTest.php
+++ b/tests/phpunit/Data/DataSetFilter/TitleTest.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace BlueSpice\Tests\Data\Filter;
+namespace BlueSpice\Tests\Data\DataSetFilter;
 
 use BlueSpice\Data\Record;
 
@@ -10,7 +10,7 @@
  */
 class TitleTest extends \PHPUnit_Framework_TestCase {
        public function testPositive() {
-               $filter = new \BlueSpice\Data\Filter\Title( [
+               $filter = new \BlueSpice\Data\DataSetFilter\Title( [
                        'field' => 'field2',
                        'comparison' => 'eq',
                        'value' => 'User:WikiSysop'
@@ -25,7 +25,7 @@
        }
 
        public function testNegative() {
-               $filter = new \BlueSpice\Data\Filter\Title( [
+               $filter = new \BlueSpice\Data\DataSetFilter\Title( [
                        'field' => 'field1',
                        'comparison' => 'eq',
                        'value' => 'Hilfe'
diff --git a/tests/phpunit/Data/Filter/BooleanTest.php 
b/tests/phpunit/Data/Filter/BooleanTest.php
deleted file mode 100644
index 59f07e0..0000000
--- a/tests/phpunit/Data/Filter/BooleanTest.php
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-
-namespace BlueSpice\Tests\Data\Filter;
-
-use BlueSpice\Data\Filter;
-use BlueSpice\Data\Record;
-
-/**
- * @group BlueSpice
- * @group BlueSpiceFoundation
- */
-class BooleanTest extends \PHPUnit_Framework_TestCase {
-       public function testPositive() {
-               $filter = new Filter\Boolean( [
-                       'field' => 'field1',
-                       'comparison' => 'eq',
-                       'value' => true
-               ] );
-
-               $result = $filter->matches( new Record( (object)[
-                       'field1' => true,
-                       'field2' => false
-               ] ) );
-
-               $this->assertTrue( $result );
-       }
-
-       public function testNegative() {
-               $filter = new Filter\Boolean( [
-                       'field' => 'field1',
-                       'comparison' => 'eq',
-                       'value' => false
-               ] );
-
-               $result = $filter->matches( new Record( (object)[
-                       'field1' => true,
-                       'field2' => false
-               ] ) );
-
-               $this->assertFalse( $result );
-       }
-
-
-       /**
-        * @dataProvider provideAppliesToValues
-        * @param boolean $expecation
-        * @param mixed $fieldValue
-        * @param mixed $filterValue
-        * @param string $comparison
-        */
-       public function testAppliesTo ( $expectation, $comparison, $fieldValue, 
$filterValue ) {
-               $filter = new Filter\Boolean( [
-                       Filter\Boolean::KEY_FIELD => 'field_A',
-                       Filter\Boolean::KEY_VALUE => $filterValue,
-                       Filter\Boolean::KEY_COMPARISON => $comparison
-               ] );
-
-               $dataSet = new Record( (object) [
-                       'field_A' => $fieldValue
-               ] );
-
-               if( $expectation ) {
-                       $this->assertTrue( $filter->matches( $dataSet ), 
'Filter should apply' );
-               }
-               else {
-                       $this->assertFalse( $filter->matches( $dataSet ), 
'Filter should not apply' );
-               }
-       }
-
-       public function provideAppliesToValues() {
-               return [
-                       [ true, Filter\Boolean::COMPARISON_EQUALS, true, true ],
-                       [ true, Filter\Boolean::COMPARISON_EQUALS, 1, true ],
-                       [ true, Filter\Boolean::COMPARISON_EQUALS, '1', true ],
-                       [ true, Filter\Boolean::COMPARISON_EQUALS, false, false 
],
-                       [ true, Filter\Boolean::COMPARISON_EQUALS, 0, false ],
-                       [ true, Filter\Boolean::COMPARISON_EQUALS, '0', false ],
-                       [ true, Filter\Boolean::COMPARISON_NOT_EQUALS, true, 
false ],
-                       [ true, Filter\Boolean::COMPARISON_NOT_EQUALS, 1, false 
],
-                       [ true, Filter\Boolean::COMPARISON_NOT_EQUALS, '1', 
false ],
-                       [ true, Filter\Boolean::COMPARISON_NOT_EQUALS, false, 
true ],
-                       [ true, Filter\Boolean::COMPARISON_NOT_EQUALS, 0, true 
],
-                       [ true, Filter\Boolean::COMPARISON_NOT_EQUALS, '0', 
true ],
-                       [ false, Filter\Boolean::COMPARISON_EQUALS, true, false 
],
-                       [ false, Filter\Boolean::COMPARISON_EQUALS, 1, false ],
-                       [ false, Filter\Boolean::COMPARISON_EQUALS, '1', false 
],
-                       [ false, Filter\Boolean::COMPARISON_EQUALS, false, true 
],
-                       [ false, Filter\Boolean::COMPARISON_EQUALS, 0, true ],
-                       [ false, Filter\Boolean::COMPARISON_EQUALS, '0', true ],
-                       [ false, Filter\Boolean::COMPARISON_NOT_EQUALS, true, 
true ],
-                       [ false, Filter\Boolean::COMPARISON_NOT_EQUALS, 1, true 
],
-                       [ false, Filter\Boolean::COMPARISON_NOT_EQUALS, '1', 
true ],
-                       [ false, Filter\Boolean::COMPARISON_NOT_EQUALS, false, 
false ],
-                       [ false, Filter\Boolean::COMPARISON_NOT_EQUALS, 0, 
false ],
-                       [ false, Filter\Boolean::COMPARISON_NOT_EQUALS, '0', 
false ]
-               ];
-       }
-}
diff --git a/tests/phpunit/Data/FiltererTest.php 
b/tests/phpunit/Data/FiltererTest.php
index f7bf7ad..3a07598 100644
--- a/tests/phpunit/Data/FiltererTest.php
+++ b/tests/phpunit/Data/FiltererTest.php
@@ -3,7 +3,7 @@
 namespace BlueSpice\Tests\Data;
 
 use BlueSpice\Data\Filterer;
-use BlueSpice\Data\Filter;
+use BlueSpice\Data\DataSetFilter;
 use BlueSpice\Data\Record;
 
 /**
@@ -65,7 +65,7 @@
         * @dataProvider provideFilterData
         */
        public function testFilter( $filters, $expectedCount ) {
-               $filterer = new Filterer( Filter::newCollectionFromArray( 
$filters ) );
+               $filterer = new Filterer( 
DataSetFilter::newCollectionFromArray( $filters ) );
                $dataSets = $this->makeDataSets();
                $filteredDataSets = $filterer->filter( $dataSets );
 
diff --git a/tests/phpunit/Data/ReaderParamsTest.php 
b/tests/phpunit/Data/ReaderParamsTest.php
index 2af1858..f45d5ff 100644
--- a/tests/phpunit/Data/ReaderParamsTest.php
+++ b/tests/phpunit/Data/ReaderParamsTest.php
@@ -62,7 +62,7 @@
                );
 
                $this->assertEquals(
-                       \BlueSpice\Data\Filter\StringValue::COMPARISON_CONTAINS,
+                       
\BlueSpice\Data\DataSetFilter\StringValue::COMPARISON_CONTAINS,
                        $firstFilter->getComparison()
                );
 
diff --git a/tests/phpunit/Data/SorterTest.php 
b/tests/phpunit/Data/SorterTest.php
index 59c0868..2e9672f 100644
--- a/tests/phpunit/Data/SorterTest.php
+++ b/tests/phpunit/Data/SorterTest.php
@@ -79,7 +79,7 @@
         * @dataProvider provideSortData
         */
        public function testSort( $sort, $expectedSorting ) {
-               $sorter = new Sorter( Sort::newCollectionFromArray( $sort ) );
+               $sorter = new Sorter( DataSetSort::newCollectionFromArray( 
$sort ) );
                $dataSets = $this->makeDataSets();
                $sortedDataSets = $sorter->sort( $dataSets );
 

-- 
To view, visit https://gerrit.wikimedia.org/r/392046
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I33d0953b80a0976ab9184adcb39e768b37c8318c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/BlueSpiceFoundation
Gerrit-Branch: master
Gerrit-Owner: Pwirth <wi...@hallowelt.biz>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to