Merge pull request #40 from src125/develop
Separate Lists into individual patch operations
diff --git a/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/UpdateRequest.java b/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/UpdateRequest.java
index 11e66af..52598c6 100644
--- a/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/UpdateRequest.java
+++ b/scim-server/scim-server-common/src/main/java/edu/psu/swe/scim/server/provider/UpdateRequest.java
@@ -342,6 +342,7 @@
return operation;
}
+ @SuppressWarnings("unchecked")
private List<PatchOperation> handleAttributes(JsonNode valueNode, PatchOperation.Type patchOpType, ParseData parseData) throws IllegalAccessException, JsonProcessingException {
log.info("in handleAttributes");
List<PatchOperation> operations = new ArrayList<>();
@@ -416,16 +417,27 @@
valueNode = null;
}
+ if (patchOpType == Type.REPLACE && parseData.originalObject == null) {
+ patchOpType = Type.ADD;
+ }
+
if (!attributeReferenceList.isEmpty()) {
Object value = determineValue(patchOpType, valueNode, parseData);
if (value != null && value instanceof ArrayList) {
- @SuppressWarnings("unchecked")
List<Object> objList = (List<Object>)value;
- for (Object obj : objList) {
- PatchOperation operation = buildPatchOperation(patchOpType, parseData, attributeReferenceList, valueFilterExpression, subAttributes, obj);
- if (operation != null) {
- operations.add(operation);
+
+ if (!objList.isEmpty()) {
+ Object firstElement = objList.get(0);
+ if (firstElement instanceof ArrayList) {
+ objList = (List<Object>) firstElement;
+ }
+
+ for (Object obj : objList) {
+ PatchOperation operation = buildPatchOperation(patchOpType, parseData, attributeReferenceList, valueFilterExpression, subAttributes, obj);
+ if (operation != null) {
+ operations.add(operation);
+ }
}
}
} else {
diff --git a/scim-server/scim-server-common/src/test/java/edu/psu/swe/scim/server/provider/UpdateRequestTest.java b/scim-server/scim-server-common/src/test/java/edu/psu/swe/scim/server/provider/UpdateRequestTest.java
index 91feb46..613970d 100644
--- a/scim-server/scim-server-common/src/test/java/edu/psu/swe/scim/server/provider/UpdateRequestTest.java
+++ b/scim-server/scim-server-common/src/test/java/edu/psu/swe/scim/server/provider/UpdateRequestTest.java
@@ -238,7 +238,6 @@
user2.getPhoneNumbers().add(mobilePhone);
user2.getPhoneNumbers().add(homePhone);
-
updateRequest.initWithResource("1234", user1, user2);
List<PatchOperation> operations = updateRequest.getPatchOperations();