File tree Expand file tree Collapse file tree
scim-core/src/main/java/org/apache/directory/scim/core/repository
scim-server-jersey-4/src/main/java/org/apache/directory/scim/example/jersey4/service
scim-server-jersey/src/main/java/org/apache/directory/scim/example/jersey/service
scim-server-memory/src/main/java/org/apache/directory/scim/example/memory/service
scim-server-quarkus/src/main/java/org/apache/directory/scim/example/quarkus/service
scim-server-spring-boot-4/src/main/java/org/apache/directory/scim/example/spring/service
scim-server-spring-boot/src/main/java/org/apache/directory/scim/example/spring/service
scim-server/src/test/java/org/apache/directory/scim/server/it/testapp
scim-spec/scim-spec-schema/src
main/java/org/apache/directory/scim/spec/filter
test/java/org/apache/directory/scim/spec/filter
support/spring-boot/src/test/java/org/apache/directory/scim/spring/it/app Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -104,7 +104,14 @@ public interface Repository<T extends ScimResource> {
104104 * may be truncated by the scope specified by the passed PageRequest and
105105 * the order of the returned resources may be controlled by the passed
106106 * SortRequest.
107- *
107+ *
108+ * <p><b>Sorting:</b> If the request context contains a {@link org.apache.directory.scim.spec.filter.SortRequest},
109+ * the repository is responsible for applying it if the backend supports server-side
110+ * sorting. The SCIM server layer does NOT apply post-retrieval sorting as a fallback.
111+ * If the requested sort attribute is not supported, the repository should silently ignore
112+ * the sort request and return results in the backend's natural order, per
113+ * <a href="https://datatracker.ietf.org/doc/html/rfc7644#section-3.4.2.3">RFC 7644 §3.4.2.3</a>.</p>
114+ *
108115 * @param filter The filter that determines the ScimResources that will be
109116 * part of the ResultList.
110117 * @param requestContext the context object holding additional information about the request.
Original file line number Diff line number Diff line change 3535import org .apache .directory .scim .spec .filter .Filter ;
3636import org .apache .directory .scim .spec .filter .FilterExpressions ;
3737import org .apache .directory .scim .spec .filter .FilterResponse ;
38- import org .apache .directory .scim .spec .filter .PageRequest ;
38+ import org .apache .directory .scim .spec .filter .SortExpressions ;
39+ import org .apache .directory .scim .spec .schema .Schema ;
3940import org .apache .directory .scim .spec .resources .ScimExtension ;
4041import org .apache .directory .scim .spec .resources .ScimGroup ;
4142
@@ -115,12 +116,11 @@ public void delete(String id) throws ResourceException {
115116
116117 @ Override
117118 public FilterResponse <ScimGroup > find (Filter filter , ScimRequestContext requestContext ) {
118- List <ScimGroup > filtered = groups .values ().stream ()
119- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimGroup .SCHEMA_URI )))
120- .toList ();
121-
122- PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
123- return new FilterResponse <>(pageRequest .paginate (filtered ), filtered .size ());
119+ Schema schema = schemaRegistry .getSchema (ScimGroup .SCHEMA_URI );
120+ return groups .values ().stream ()
121+ .filter (FilterExpressions .inMemory (filter , schema ))
122+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
123+ .collect (FilterResponse .paginate (requestContext .getPageRequestOrDefault ()));
124124 }
125125
126126 @ Override
Original file line number Diff line number Diff line change 3636import org .apache .directory .scim .spec .filter .Filter ;
3737import org .apache .directory .scim .spec .filter .FilterExpressions ;
3838import org .apache .directory .scim .spec .filter .FilterResponse ;
39- import org .apache .directory .scim .spec .filter .PageRequest ;
39+ import org .apache .directory .scim .spec .filter .SortExpressions ;
40+ import org .apache .directory .scim .spec .schema .Schema ;
4041import org .apache .directory .scim .spec .resources .Email ;
4142import org .apache .directory .scim .spec .resources .Name ;
4243import org .apache .directory .scim .spec .resources .ScimExtension ;
@@ -148,12 +149,11 @@ public void delete(String id) throws ResourceException {
148149
149150 @ Override
150151 public FilterResponse <ScimUser > find (Filter filter , ScimRequestContext requestContext ) {
151- List <ScimUser > filtered = users .values ().stream ()
152- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimUser .SCHEMA_URI )))
153- .toList ();
154-
155- PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
156- return new FilterResponse <>(pageRequest .paginate (filtered ), filtered .size ());
152+ Schema schema = schemaRegistry .getSchema (ScimUser .SCHEMA_URI );
153+ return users .values ().stream ()
154+ .filter (FilterExpressions .inMemory (filter , schema ))
155+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
156+ .collect (FilterResponse .paginate (requestContext .getPageRequestOrDefault ()));
157157 }
158158
159159 @ Override
Original file line number Diff line number Diff line change 3535import org .apache .directory .scim .spec .filter .Filter ;
3636import org .apache .directory .scim .spec .filter .FilterExpressions ;
3737import org .apache .directory .scim .spec .filter .FilterResponse ;
38- import org .apache .directory .scim .spec .filter .PageRequest ;
38+ import org .apache .directory .scim .spec .filter .SortExpressions ;
39+ import org .apache .directory .scim .spec .schema .Schema ;
3940import org .apache .directory .scim .spec .resources .ScimExtension ;
4041import org .apache .directory .scim .spec .resources .ScimGroup ;
4142
@@ -115,12 +116,11 @@ public void delete(String id) throws ResourceException {
115116
116117 @ Override
117118 public FilterResponse <ScimGroup > find (Filter filter , ScimRequestContext requestContext ) {
118- List <ScimGroup > filtered = groups .values ().stream ()
119- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimGroup .SCHEMA_URI )))
120- .toList ();
121-
122- PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
123- return new FilterResponse <>(pageRequest .paginate (filtered ), filtered .size ());
119+ Schema schema = schemaRegistry .getSchema (ScimGroup .SCHEMA_URI );
120+ return groups .values ().stream ()
121+ .filter (FilterExpressions .inMemory (filter , schema ))
122+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
123+ .collect (FilterResponse .paginate (requestContext .getPageRequestOrDefault ()));
124124 }
125125
126126 @ Override
Original file line number Diff line number Diff line change 3636import org .apache .directory .scim .spec .filter .Filter ;
3737import org .apache .directory .scim .spec .filter .FilterExpressions ;
3838import org .apache .directory .scim .spec .filter .FilterResponse ;
39- import org .apache .directory .scim .spec .filter .PageRequest ;
39+ import org .apache .directory .scim .spec .filter .SortExpressions ;
40+ import org .apache .directory .scim .spec .schema .Schema ;
4041import org .apache .directory .scim .spec .resources .Email ;
4142import org .apache .directory .scim .spec .resources .Name ;
4243import org .apache .directory .scim .spec .resources .ScimExtension ;
@@ -148,12 +149,11 @@ public void delete(String id) throws ResourceException {
148149
149150 @ Override
150151 public FilterResponse <ScimUser > find (Filter filter , ScimRequestContext requestContext ) {
151- List <ScimUser > filtered = users .values ().stream ()
152- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimUser .SCHEMA_URI )))
153- .toList ();
154-
155- PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
156- return new FilterResponse <>(pageRequest .paginate (filtered ), filtered .size ());
152+ Schema schema = schemaRegistry .getSchema (ScimUser .SCHEMA_URI );
153+ return users .values ().stream ()
154+ .filter (FilterExpressions .inMemory (filter , schema ))
155+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
156+ .collect (FilterResponse .paginate (requestContext .getPageRequestOrDefault ()));
157157 }
158158
159159 @ Override
Original file line number Diff line number Diff line change 3535import org .apache .directory .scim .spec .filter .Filter ;
3636import org .apache .directory .scim .spec .filter .FilterExpressions ;
3737import org .apache .directory .scim .spec .filter .FilterResponse ;
38- import org .apache .directory .scim .spec .filter .PageRequest ;
38+ import org .apache .directory .scim .spec .filter .SortExpressions ;
39+ import org .apache .directory .scim .spec .schema .Schema ;
3940import org .apache .directory .scim .spec .resources .ScimExtension ;
4041import org .apache .directory .scim .spec .resources .ScimGroup ;
4142
@@ -115,12 +116,11 @@ public void delete(String id) throws ResourceException {
115116
116117 @ Override
117118 public FilterResponse <ScimGroup > find (Filter filter , ScimRequestContext requestContext ) {
118- List <ScimGroup > filtered = groups .values ().stream ()
119- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimGroup .SCHEMA_URI )))
120- .toList ();
121-
122- PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
123- return new FilterResponse <>(pageRequest .paginate (filtered ), filtered .size ());
119+ Schema schema = schemaRegistry .getSchema (ScimGroup .SCHEMA_URI );
120+ return groups .values ().stream ()
121+ .filter (FilterExpressions .inMemory (filter , schema ))
122+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
123+ .collect (FilterResponse .paginate (requestContext .getPageRequestOrDefault ()));
124124 }
125125
126126 @ Override
Original file line number Diff line number Diff line change 3636import org .apache .directory .scim .spec .filter .Filter ;
3737import org .apache .directory .scim .spec .filter .FilterExpressions ;
3838import org .apache .directory .scim .spec .filter .FilterResponse ;
39- import org .apache .directory .scim .spec .filter .PageRequest ;
39+ import org .apache .directory .scim .spec .filter .SortExpressions ;
40+ import org .apache .directory .scim .spec .schema .Schema ;
4041import org .apache .directory .scim .spec .resources .Email ;
4142import org .apache .directory .scim .spec .resources .Name ;
4243import org .apache .directory .scim .spec .resources .ScimExtension ;
@@ -148,12 +149,11 @@ public void delete(String id) throws ResourceException {
148149
149150 @ Override
150151 public FilterResponse <ScimUser > find (Filter filter , ScimRequestContext requestContext ) {
151- List <ScimUser > filtered = users .values ().stream ()
152- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimUser .SCHEMA_URI )))
153- .toList ();
154-
155- PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
156- return new FilterResponse <>(pageRequest .paginate (filtered ), filtered .size ());
152+ Schema schema = schemaRegistry .getSchema (ScimUser .SCHEMA_URI );
153+ return users .values ().stream ()
154+ .filter (FilterExpressions .inMemory (filter , schema ))
155+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
156+ .collect (FilterResponse .paginate (requestContext .getPageRequestOrDefault ()));
157157 }
158158
159159 @ Override
Original file line number Diff line number Diff line change 3535import org .apache .directory .scim .spec .filter .Filter ;
3636import org .apache .directory .scim .spec .filter .FilterExpressions ;
3737import org .apache .directory .scim .spec .filter .FilterResponse ;
38- import org .apache .directory .scim .spec .filter .PageRequest ;
38+ import org .apache .directory .scim .spec .filter .SortExpressions ;
39+ import org .apache .directory .scim .spec .schema .Schema ;
3940import org .apache .directory .scim .spec .resources .ScimExtension ;
4041import org .apache .directory .scim .spec .resources .ScimGroup ;
4142
@@ -115,12 +116,11 @@ public void delete(String id) throws ResourceException {
115116
116117 @ Override
117118 public FilterResponse <ScimGroup > find (Filter filter , ScimRequestContext requestContext ) {
118- List <ScimGroup > filtered = groups .values ().stream ()
119- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimGroup .SCHEMA_URI )))
120- .toList ();
121-
122- PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
123- return new FilterResponse <>(pageRequest .paginate (filtered ), filtered .size ());
119+ Schema schema = schemaRegistry .getSchema (ScimGroup .SCHEMA_URI );
120+ return groups .values ().stream ()
121+ .filter (FilterExpressions .inMemory (filter , schema ))
122+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
123+ .collect (FilterResponse .paginate (requestContext .getPageRequestOrDefault ()));
124124 }
125125
126126 @ Override
Original file line number Diff line number Diff line change 3636import org .apache .directory .scim .spec .filter .Filter ;
3737import org .apache .directory .scim .spec .filter .FilterExpressions ;
3838import org .apache .directory .scim .spec .filter .FilterResponse ;
39- import org .apache .directory .scim .spec .filter .PageRequest ;
39+ import org .apache .directory .scim .spec .filter .SortExpressions ;
40+ import org .apache .directory .scim .spec .schema .Schema ;
4041import org .apache .directory .scim .spec .resources .Email ;
4142import org .apache .directory .scim .spec .resources .Name ;
4243import org .apache .directory .scim .spec .resources .ScimExtension ;
@@ -148,12 +149,11 @@ public void delete(String id) throws ResourceException {
148149
149150 @ Override
150151 public FilterResponse <ScimUser > find (Filter filter , ScimRequestContext requestContext ) {
151- List <ScimUser > filtered = users .values ().stream ()
152- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimUser .SCHEMA_URI )))
153- .toList ();
154-
155- PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
156- return new FilterResponse <>(pageRequest .paginate (filtered ), filtered .size ());
152+ Schema schema = schemaRegistry .getSchema (ScimUser .SCHEMA_URI );
153+ return users .values ().stream ()
154+ .filter (FilterExpressions .inMemory (filter , schema ))
155+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
156+ .collect (FilterResponse .paginate (requestContext .getPageRequestOrDefault ()));
157157 }
158158
159159 @ Override
Original file line number Diff line number Diff line change 3131import org .apache .directory .scim .spec .filter .Filter ;
3232import org .apache .directory .scim .spec .filter .FilterExpressions ;
3333import org .apache .directory .scim .spec .filter .FilterResponse ;
34- import org .apache .directory .scim .spec .filter .PageRequest ;
34+ import org .apache .directory .scim .spec .filter .SortExpressions ;
35+ import org .apache .directory .scim .spec .schema .Schema ;
3536import org .apache .directory .scim .spec .resources .ScimExtension ;
3637import org .apache .directory .scim .spec .resources .ScimGroup ;
3738import org .springframework .stereotype .Service ;
@@ -109,12 +110,11 @@ public void delete(String id) throws ResourceException {
109110
110111 @ Override
111112 public FilterResponse <ScimGroup > find (Filter filter , ScimRequestContext requestContext ) {
112- List <ScimGroup > filtered = groups .values ().stream ()
113- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimGroup .SCHEMA_URI )))
114- .toList ();
115-
116- PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
117- return new FilterResponse <>(pageRequest .paginate (filtered ), filtered .size ());
113+ Schema schema = schemaRegistry .getSchema (ScimGroup .SCHEMA_URI );
114+ return groups .values ().stream ()
115+ .filter (FilterExpressions .inMemory (filter , schema ))
116+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
117+ .collect (FilterResponse .paginate (requestContext .getPageRequestOrDefault ()));
118118 }
119119
120120 @ Override
You can’t perform that action at this time.
0 commit comments