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();