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 3636import org .apache .directory .scim .spec .filter .FilterExpressions ;
3737import org .apache .directory .scim .spec .filter .FilterResponse ;
3838import 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 ;
3941import org .apache .directory .scim .spec .resources .ScimExtension ;
4042import org .apache .directory .scim .spec .resources .ScimGroup ;
4143
@@ -115,8 +117,10 @@ public void delete(String id) throws ResourceException {
115117
116118 @ Override
117119 public FilterResponse <ScimGroup > find (Filter filter , ScimRequestContext requestContext ) {
120+ Schema schema = schemaRegistry .getSchema (ScimGroup .SCHEMA_URI );
118121 List <ScimGroup > filtered = groups .values ().stream ()
119- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimGroup .SCHEMA_URI )))
122+ .filter (FilterExpressions .inMemory (filter , schema ))
123+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
120124 .toList ();
121125
122126 PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
Original file line number Diff line number Diff line change 3737import org .apache .directory .scim .spec .filter .FilterExpressions ;
3838import org .apache .directory .scim .spec .filter .FilterResponse ;
3939import org .apache .directory .scim .spec .filter .PageRequest ;
40+ import org .apache .directory .scim .spec .filter .SortExpressions ;
41+ import org .apache .directory .scim .spec .schema .Schema ;
4042import org .apache .directory .scim .spec .resources .Email ;
4143import org .apache .directory .scim .spec .resources .Name ;
4244import org .apache .directory .scim .spec .resources .ScimExtension ;
@@ -148,8 +150,10 @@ public void delete(String id) throws ResourceException {
148150
149151 @ Override
150152 public FilterResponse <ScimUser > find (Filter filter , ScimRequestContext requestContext ) {
153+ Schema schema = schemaRegistry .getSchema (ScimUser .SCHEMA_URI );
151154 List <ScimUser > filtered = users .values ().stream ()
152- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimUser .SCHEMA_URI )))
155+ .filter (FilterExpressions .inMemory (filter , schema ))
156+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
153157 .toList ();
154158
155159 PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
Original file line number Diff line number Diff line change 3636import org .apache .directory .scim .spec .filter .FilterExpressions ;
3737import org .apache .directory .scim .spec .filter .FilterResponse ;
3838import 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 ;
3941import org .apache .directory .scim .spec .resources .ScimExtension ;
4042import org .apache .directory .scim .spec .resources .ScimGroup ;
4143
@@ -115,8 +117,10 @@ public void delete(String id) throws ResourceException {
115117
116118 @ Override
117119 public FilterResponse <ScimGroup > find (Filter filter , ScimRequestContext requestContext ) {
120+ Schema schema = schemaRegistry .getSchema (ScimGroup .SCHEMA_URI );
118121 List <ScimGroup > filtered = groups .values ().stream ()
119- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimGroup .SCHEMA_URI )))
122+ .filter (FilterExpressions .inMemory (filter , schema ))
123+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
120124 .toList ();
121125
122126 PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
Original file line number Diff line number Diff line change 3737import org .apache .directory .scim .spec .filter .FilterExpressions ;
3838import org .apache .directory .scim .spec .filter .FilterResponse ;
3939import org .apache .directory .scim .spec .filter .PageRequest ;
40+ import org .apache .directory .scim .spec .filter .SortExpressions ;
41+ import org .apache .directory .scim .spec .schema .Schema ;
4042import org .apache .directory .scim .spec .resources .Email ;
4143import org .apache .directory .scim .spec .resources .Name ;
4244import org .apache .directory .scim .spec .resources .ScimExtension ;
@@ -148,8 +150,10 @@ public void delete(String id) throws ResourceException {
148150
149151 @ Override
150152 public FilterResponse <ScimUser > find (Filter filter , ScimRequestContext requestContext ) {
153+ Schema schema = schemaRegistry .getSchema (ScimUser .SCHEMA_URI );
151154 List <ScimUser > filtered = users .values ().stream ()
152- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimUser .SCHEMA_URI )))
155+ .filter (FilterExpressions .inMemory (filter , schema ))
156+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
153157 .toList ();
154158
155159 PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
Original file line number Diff line number Diff line change 3636import org .apache .directory .scim .spec .filter .FilterExpressions ;
3737import org .apache .directory .scim .spec .filter .FilterResponse ;
3838import 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 ;
3941import org .apache .directory .scim .spec .resources .ScimExtension ;
4042import org .apache .directory .scim .spec .resources .ScimGroup ;
4143
@@ -115,8 +117,10 @@ public void delete(String id) throws ResourceException {
115117
116118 @ Override
117119 public FilterResponse <ScimGroup > find (Filter filter , ScimRequestContext requestContext ) {
120+ Schema schema = schemaRegistry .getSchema (ScimGroup .SCHEMA_URI );
118121 List <ScimGroup > filtered = groups .values ().stream ()
119- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimGroup .SCHEMA_URI )))
122+ .filter (FilterExpressions .inMemory (filter , schema ))
123+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
120124 .toList ();
121125
122126 PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
Original file line number Diff line number Diff line change 3737import org .apache .directory .scim .spec .filter .FilterExpressions ;
3838import org .apache .directory .scim .spec .filter .FilterResponse ;
3939import org .apache .directory .scim .spec .filter .PageRequest ;
40+ import org .apache .directory .scim .spec .filter .SortExpressions ;
41+ import org .apache .directory .scim .spec .schema .Schema ;
4042import org .apache .directory .scim .spec .resources .Email ;
4143import org .apache .directory .scim .spec .resources .Name ;
4244import org .apache .directory .scim .spec .resources .ScimExtension ;
@@ -148,8 +150,10 @@ public void delete(String id) throws ResourceException {
148150
149151 @ Override
150152 public FilterResponse <ScimUser > find (Filter filter , ScimRequestContext requestContext ) {
153+ Schema schema = schemaRegistry .getSchema (ScimUser .SCHEMA_URI );
151154 List <ScimUser > filtered = users .values ().stream ()
152- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimUser .SCHEMA_URI )))
155+ .filter (FilterExpressions .inMemory (filter , schema ))
156+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
153157 .toList ();
154158
155159 PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
Original file line number Diff line number Diff line change 3636import org .apache .directory .scim .spec .filter .FilterExpressions ;
3737import org .apache .directory .scim .spec .filter .FilterResponse ;
3838import 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 ;
3941import org .apache .directory .scim .spec .resources .ScimExtension ;
4042import org .apache .directory .scim .spec .resources .ScimGroup ;
4143
@@ -115,8 +117,10 @@ public void delete(String id) throws ResourceException {
115117
116118 @ Override
117119 public FilterResponse <ScimGroup > find (Filter filter , ScimRequestContext requestContext ) {
120+ Schema schema = schemaRegistry .getSchema (ScimGroup .SCHEMA_URI );
118121 List <ScimGroup > filtered = groups .values ().stream ()
119- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimGroup .SCHEMA_URI )))
122+ .filter (FilterExpressions .inMemory (filter , schema ))
123+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
120124 .toList ();
121125
122126 PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
Original file line number Diff line number Diff line change 3737import org .apache .directory .scim .spec .filter .FilterExpressions ;
3838import org .apache .directory .scim .spec .filter .FilterResponse ;
3939import org .apache .directory .scim .spec .filter .PageRequest ;
40+ import org .apache .directory .scim .spec .filter .SortExpressions ;
41+ import org .apache .directory .scim .spec .schema .Schema ;
4042import org .apache .directory .scim .spec .resources .Email ;
4143import org .apache .directory .scim .spec .resources .Name ;
4244import org .apache .directory .scim .spec .resources .ScimExtension ;
@@ -148,8 +150,10 @@ public void delete(String id) throws ResourceException {
148150
149151 @ Override
150152 public FilterResponse <ScimUser > find (Filter filter , ScimRequestContext requestContext ) {
153+ Schema schema = schemaRegistry .getSchema (ScimUser .SCHEMA_URI );
151154 List <ScimUser > filtered = users .values ().stream ()
152- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimUser .SCHEMA_URI )))
155+ .filter (FilterExpressions .inMemory (filter , schema ))
156+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
153157 .toList ();
154158
155159 PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
Original file line number Diff line number Diff line change 3232import org .apache .directory .scim .spec .filter .FilterExpressions ;
3333import org .apache .directory .scim .spec .filter .FilterResponse ;
3434import org .apache .directory .scim .spec .filter .PageRequest ;
35+ import org .apache .directory .scim .spec .filter .SortExpressions ;
36+ import org .apache .directory .scim .spec .schema .Schema ;
3537import org .apache .directory .scim .spec .resources .ScimExtension ;
3638import org .apache .directory .scim .spec .resources .ScimGroup ;
3739import org .springframework .stereotype .Service ;
@@ -109,8 +111,10 @@ public void delete(String id) throws ResourceException {
109111
110112 @ Override
111113 public FilterResponse <ScimGroup > find (Filter filter , ScimRequestContext requestContext ) {
114+ Schema schema = schemaRegistry .getSchema (ScimGroup .SCHEMA_URI );
112115 List <ScimGroup > filtered = groups .values ().stream ()
113- .filter (FilterExpressions .inMemory (filter , schemaRegistry .getSchema (ScimGroup .SCHEMA_URI )))
116+ .filter (FilterExpressions .inMemory (filter , schema ))
117+ .sorted (SortExpressions .comparator (requestContext .getSortRequest (), schema ))
114118 .toList ();
115119
116120 PageRequest pageRequest = requestContext .getPageRequestOrDefault ();
You can’t perform that action at this time.
0 commit comments