You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by bd...@apache.org on 2022/12/12 23:22:39 UTC
[directory-scimple] 02/02: SCIM Resources will now have predictable ordered sets and maps
This is an automated email from the ASF dual-hosted git repository.
bdemers pushed a commit to branch consistant-ordering
in repository https://gitbox.apache.org/repos/asf/directory-scimple.git
commit d1d41d17265737f1948dafc33d3beca622eaac24
Author: Brian Demers <bd...@apache.org>
AuthorDate: Mon Dec 12 18:22:31 2022 -0500
SCIM Resources will now have predictable ordered sets and maps
Previously generated patch objects would have added a "move" op for non-ordered attributes like `schemas`
---
.../directory/scim/spec/resources/BaseResource.java | 20 ++++++++++++++------
.../directory/scim/spec/resources/ScimResource.java | 3 ++-
.../apache/directory/scim/spec/schema/Schemas.java | 1 +
3 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/BaseResource.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/BaseResource.java
index da6da1d4..a772aaa1 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/BaseResource.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/BaseResource.java
@@ -22,6 +22,7 @@ package org.apache.directory.scim.spec.resources;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
+import java.util.TreeSet;
import jakarta.validation.constraints.Size;
import jakarta.xml.bind.annotation.XmlAccessType;
@@ -48,17 +49,24 @@ public abstract class BaseResource implements Serializable {
@Size(min = 1)
@Urn
Set<String> schemas;
-
- public BaseResource(String urn) {
+
+ public BaseResource(@Urn String urn) {
addSchema(urn);
}
-
- public void addSchema(String urn) {
+
+ public void addSchema(@Urn String urn) {
if (schemas == null){
- schemas = new HashSet<>();
+ schemas = new TreeSet<>();
}
-
schemas.add(urn);
}
+
+ public void setSchemas(@Urn Set<String> schemas) {
+ if (schemas == null) {
+ this.schemas.clear();
+ } else {
+ this.schemas = new TreeSet<>(schemas);
+ }
+ }
}
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/ScimResource.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/ScimResource.java
index 67d94679..2085af5d 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/ScimResource.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/resources/ScimResource.java
@@ -38,6 +38,7 @@ import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import java.io.Serializable;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.Map;
/**
@@ -71,7 +72,7 @@ public abstract class ScimResource extends BaseResource implements Serializable
// TODO - Figure out JAXB equivalent of JsonAnyGetter and JsonAnySetter
// (XmlElementAny?)
- private Map<String, ScimExtension> extensions = new HashMap<String, ScimExtension>();
+ private Map<String, ScimExtension> extensions = new LinkedHashMap<>();
private final String baseUrn;
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/Schemas.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/Schemas.java
index bbe5bd41..897afa2a 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/Schemas.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/Schemas.java
@@ -288,6 +288,7 @@ public final class Schemas {
attributeList.add(attribute);
}
+ attributeList.sort(Comparator.comparing(o -> o.name));
log.debug("Returning " + attributeList.size() + " attributes");
return attributeList;
}