Replaced all tabs with spaces in java and pom.xml
[so.git] / bpmn / MSOCoreBPMN / src / main / java / org / onap / so / bpmn / core / domain / ServiceDecomposition.java
index 5e7a479..0e03989 100644 (file)
@@ -26,7 +26,6 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
-
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonRootName;
@@ -36,509 +35,556 @@ import org.onap.so.bpmn.core.json.JsonDecomposingException;
 
 
 
-
 /**
- * Service Decomposition Structure
- * This Java object contains service information:
- * - Service model info
- * - Service type and role
- * - list of VNF resource's decompositon
- * - list of network resource's decompositon
- * - list of allotted resource's decompositon
+ * Service Decomposition Structure This Java object contains service information: - Service model info - Service type
+ * and role - list of VNF resource's decompositon - list of network resource's decompositon - list of allotted
+ * resource's decompositon
  */
 @JsonRootName(value = "serviceResources")
-//@JsonTypeInfo(include=As.WRAPPER_OBJECT, use=Id.NAME)
+// @JsonTypeInfo(include=As.WRAPPER_OBJECT, use=Id.NAME)
 public class ServiceDecomposition extends JsonWrapper implements Serializable {
 
-       private static final long serialVersionUID = 1L;
-
-       @JsonProperty("modelInfo")
-       private ModelInfo modelInfo;
-       @JsonProperty("serviceType")
-       private String serviceType;
-       @JsonProperty("serviceRole")
-       private String serviceRole;
-       private ServiceInstance serviceInstance;
-       private Request request;
-       private Customer customer;
-       private String callbackURN;
-       private String sdncVersion;
-       @JsonProperty("project")
-       private Project project;
-       @JsonProperty("owningEntity")
-       private OwningEntity owningEntity;
-       @JsonProperty("serviceVnfs")
-       private List <VnfResource> vnfResources;
-       @JsonProperty("serviceNetworks")
-       private List <NetworkResource> networkResources;
-       @JsonProperty("serviceAllottedResources")
-       private List <AllottedResource> allottedResources;
-       @JsonProperty("configResource")
-       private List <ConfigResource> configResources;
-
-       public ServiceDecomposition () {
-               super();
-       }
-
-       public ServiceDecomposition (String catalogRestOutput) throws JsonDecomposingException {
-               ServiceDecomposition serviceDecomposition = DecomposeJsonUtil.jsonToServiceDecomposition(catalogRestOutput);
-               this.modelInfo = serviceDecomposition.getModelInfo();
-               this.vnfResources = serviceDecomposition.getVnfResources();
-               this.allottedResources = serviceDecomposition.getAllottedResources();
-               this.networkResources = serviceDecomposition.getNetworkResources();
-               this.serviceRole = serviceDecomposition.getServiceRole();
-               this.serviceType = serviceDecomposition.getServiceType();
-               this.configResources = serviceDecomposition.getConfigResources();
-       }
-
-       /**
-        * Constructor taking Catalog DB Adapter REST output (serviceResources model) + service Instance ID
-        *
-        * @param catalogRestOutput
-        * @param serviceInstanceId
-        */
-       public ServiceDecomposition (String catalogRestOutput, String serviceInstanceId) throws JsonDecomposingException {
-               ServiceDecomposition serviceDecomposition = DecomposeJsonUtil.jsonToServiceDecomposition(catalogRestOutput);
-               this.modelInfo = serviceDecomposition.getModelInfo();
-               this.vnfResources = serviceDecomposition.getVnfResources();
-               this.allottedResources = serviceDecomposition.getAllottedResources();
-               this.configResources = serviceDecomposition.getConfigResources();
-               this.networkResources = serviceDecomposition.getNetworkResources();
-
-               this.serviceRole = serviceDecomposition.getServiceRole();
-               this.serviceType = serviceDecomposition.getServiceType();
-
-               this.serviceInstance = new ServiceInstance();
-               this.serviceInstance.setInstanceId(serviceInstanceId);
-
-               this.project = serviceDecomposition.getProject();
-               this.owningEntity = serviceDecomposition.getOwningEntity();
-       }
-
-       /**
-        * Constructor taking a Service Decomposition JSON serialization
-        * @param catalogRestOutput
-        * @param serviceInstanceId
-        */
-       public ServiceDecomposition (JSONObject jsonServiceDecomposition, String serviceInstanceId) {
-               //TODO provide constructor implementation
-
-       }
-
-       //*****
-       //GET and SET section
-       /**
-        * Return just the service model portion of the Service Decomposition as a Java object.
-        * The service model object should support retrieval as JSON string that is formatted correctly for sending serviceModelInfo to Building Blocks.
-        * @return
-        */
-       public ModelInfo getModelInfo() {
-               return modelInfo;
-       }
-       public void setModelInfo(ModelInfo modelInfo) {
-               this.modelInfo = modelInfo;
-       }
-       public ServiceInstance getServiceInstance() {
-               return serviceInstance;
-       }
-       public void setServiceInstance(ServiceInstance serviceInstance) {
-               this.serviceInstance = serviceInstance;
-       }
-       public Project getProject() {
-               return project;
-       }
-       public OwningEntity getOwningEntity() {
-               return owningEntity;
-       }
-       public void setProject(Project project) {
-               this.project = project;
-       }
-       public void setOwningEntity(OwningEntity owningEntity) {
-               this.owningEntity = owningEntity;
-       }
-       public List<VnfResource> getVnfResources() {
-               return vnfResources;
-       }
-       public void setVnfResources(List<VnfResource> vnfResources) {
-               this.vnfResources = vnfResources;
-       }
-       public void setConfigResources(List<ConfigResource> configResources) {
-               this.configResources = configResources;
-       }
-       public List<ConfigResource> getConfigResources() {
-               return configResources;
-       }
-       public void setNetworkResources(List<NetworkResource> networkResources) {
-               this.networkResources = networkResources;
-       }
-       public List<NetworkResource> getNetworkResources() {
-               return networkResources;
-       }
-       public List<AllottedResource> getAllottedResources() {
-               return allottedResources;
-       }
-       public void setAllottedResources(List<AllottedResource> allottedResources) {
-               this.allottedResources = allottedResources;
-       }
-       public String getServiceType() {
-               return serviceType;
-       }
-
-       public void setServiceType(String serviceType) {
-               this.serviceType = serviceType;
-       }
-
-       public String getServiceRole() {
-               return serviceRole;
-       }
-
-       public void setServiceRole(String serviceRole) {
-               this.serviceRole = serviceRole;
-       }
-       public Request getRequest() {
-               return request;
-       }
-
-       public void setRequest(Request request) {
-               this.request = request;
-       }
-       public Customer getCustomer() {
-               return customer;
-       }
-       public void setCustomer(Customer customer) {
-               this.customer = customer;
-       }
-       public String getCallbackURN() {
-               return callbackURN;
-       }
-
-       public void setCallbackURN(String callbackURN) {
-               this.callbackURN = callbackURN;
-       }
-       public String getSdncVersion() {
-               return sdncVersion;
-       }
-
-       public void setSdncVersion(String sdncVersion) {
-               this.sdncVersion = sdncVersion;
-       }
-
-       //*****
-
-       //*****
-       //Access methods
-
-
-       /**
-        * This method returns one combined list of Resources of All Types
-        * @return
-        */
-       @JsonIgnore
-       public List<Resource> getServiceResources(){
-               ArrayList serviceResources = new ArrayList();
-               if(this.getAllottedResources() != null){
-                       serviceResources.addAll(this.getAllottedResources());
-               }
-               if(this.getNetworkResources() != null){
-                       serviceResources.addAll(this.getNetworkResources());
-               }
-               if(this.getVnfResources() != null){
-                       serviceResources.addAll(this.getVnfResources());
-               }
-               if(this.getConfigResources() != null){
-                       serviceResources.addAll(this.getConfigResources());
-               }
-               return serviceResources;
-       }
-
-       /**
-        * This method returns String representation of one combined list of Resources of All Types
-        */
-       @JsonIgnore
-       public String getServiceResourcesJsonString() {
-               return getServiceNetworksJson() +
-                               getServiceVnfsJson() +
-                               getServiceAllottedResourcesJson() +
-                               getServiceConfigResourcesJson();
-       }
-
-       /**
-        * Returns a JSON list of all Network Resource structures (i.e. the serialized NetworkDecomposition objects).
-        * @return
-        */
-       @JsonIgnore
-       public String getServiceNetworksJson(){
-               return listToJson(this.getNetworkResources());
-       }
-       /**
-        * Returns a JSON list of all VnfResource structures (i.e. the serialized VnfResource objects).
-        * @return
-        */
-       @JsonIgnore
-       public String getServiceVnfsJson(){
-               return listToJson(this.getVnfResources());
-       }
-       /**
-        * Returns a JSON list of all Allotted Resource structures (i.e. the serialized AllottedResource objects).
-        * @return
-        */
-       @JsonIgnore
-       public String getServiceAllottedResourcesJson(){
-               return listToJson(this.getAllottedResources());
-       }
-       /**
-        * Returns a JSON list of all Config Resource structures (i.e. the serialized ConfigResource objects).
-        * @return
-        */
-       @JsonIgnore
-       public String getServiceConfigResourcesJson(){
-               return listToJson(this.getConfigResources());
-       }
-
-       //TODO - define Resource Object ID
-       @JsonIgnore
-       public String getVnfResource(String resourceObjectId) {
+    private static final long serialVersionUID = 1L;
+
+    @JsonProperty("modelInfo")
+    private ModelInfo modelInfo;
+    @JsonProperty("serviceType")
+    private String serviceType;
+    @JsonProperty("serviceRole")
+    private String serviceRole;
+    private ServiceInstance serviceInstance;
+    private Request request;
+    private Customer customer;
+    private String callbackURN;
+    private String sdncVersion;
+    @JsonProperty("project")
+    private Project project;
+    @JsonProperty("owningEntity")
+    private OwningEntity owningEntity;
+    @JsonProperty("serviceVnfs")
+    private List<VnfResource> vnfResources;
+    @JsonProperty("serviceNetworks")
+    private List<NetworkResource> networkResources;
+    @JsonProperty("serviceAllottedResources")
+    private List<AllottedResource> allottedResources;
+    @JsonProperty("configResource")
+    private List<ConfigResource> configResources;
+
+    public ServiceDecomposition() {
+        super();
+    }
+
+    public ServiceDecomposition(String catalogRestOutput) throws JsonDecomposingException {
+        ServiceDecomposition serviceDecomposition = DecomposeJsonUtil.jsonToServiceDecomposition(catalogRestOutput);
+        this.modelInfo = serviceDecomposition.getModelInfo();
+        this.vnfResources = serviceDecomposition.getVnfResources();
+        this.allottedResources = serviceDecomposition.getAllottedResources();
+        this.networkResources = serviceDecomposition.getNetworkResources();
+        this.serviceRole = serviceDecomposition.getServiceRole();
+        this.serviceType = serviceDecomposition.getServiceType();
+        this.configResources = serviceDecomposition.getConfigResources();
+    }
+
+    /**
+     * Constructor taking Catalog DB Adapter REST output (serviceResources model) + service Instance ID
+     *
+     * @param catalogRestOutput
+     * @param serviceInstanceId
+     */
+    public ServiceDecomposition(String catalogRestOutput, String serviceInstanceId) throws JsonDecomposingException {
+        ServiceDecomposition serviceDecomposition = DecomposeJsonUtil.jsonToServiceDecomposition(catalogRestOutput);
+        this.modelInfo = serviceDecomposition.getModelInfo();
+        this.vnfResources = serviceDecomposition.getVnfResources();
+        this.allottedResources = serviceDecomposition.getAllottedResources();
+        this.configResources = serviceDecomposition.getConfigResources();
+        this.networkResources = serviceDecomposition.getNetworkResources();
+
+        this.serviceRole = serviceDecomposition.getServiceRole();
+        this.serviceType = serviceDecomposition.getServiceType();
+
+        this.serviceInstance = new ServiceInstance();
+        this.serviceInstance.setInstanceId(serviceInstanceId);
+
+        this.project = serviceDecomposition.getProject();
+        this.owningEntity = serviceDecomposition.getOwningEntity();
+    }
+
+    /**
+     * Constructor taking a Service Decomposition JSON serialization
+     * 
+     * @param catalogRestOutput
+     * @param serviceInstanceId
+     */
+    public ServiceDecomposition(JSONObject jsonServiceDecomposition, String serviceInstanceId) {
+        // TODO provide constructor implementation
+
+    }
+
+    // *****
+    // GET and SET section
+    /**
+     * Return just the service model portion of the Service Decomposition as a Java object. The service model object
+     * should support retrieval as JSON string that is formatted correctly for sending serviceModelInfo to Building
+     * Blocks.
+     * 
+     * @return
+     */
+    public ModelInfo getModelInfo() {
+        return modelInfo;
+    }
+
+    public void setModelInfo(ModelInfo modelInfo) {
+        this.modelInfo = modelInfo;
+    }
+
+    public ServiceInstance getServiceInstance() {
+        return serviceInstance;
+    }
+
+    public void setServiceInstance(ServiceInstance serviceInstance) {
+        this.serviceInstance = serviceInstance;
+    }
+
+    public Project getProject() {
+        return project;
+    }
+
+    public OwningEntity getOwningEntity() {
+        return owningEntity;
+    }
+
+    public void setProject(Project project) {
+        this.project = project;
+    }
+
+    public void setOwningEntity(OwningEntity owningEntity) {
+        this.owningEntity = owningEntity;
+    }
+
+    public List<VnfResource> getVnfResources() {
+        return vnfResources;
+    }
+
+    public void setVnfResources(List<VnfResource> vnfResources) {
+        this.vnfResources = vnfResources;
+    }
+
+    public void setConfigResources(List<ConfigResource> configResources) {
+        this.configResources = configResources;
+    }
+
+    public List<ConfigResource> getConfigResources() {
+        return configResources;
+    }
+
+    public void setNetworkResources(List<NetworkResource> networkResources) {
+        this.networkResources = networkResources;
+    }
+
+    public List<NetworkResource> getNetworkResources() {
+        return networkResources;
+    }
+
+    public List<AllottedResource> getAllottedResources() {
+        return allottedResources;
+    }
+
+    public void setAllottedResources(List<AllottedResource> allottedResources) {
+        this.allottedResources = allottedResources;
+    }
+
+    public String getServiceType() {
+        return serviceType;
+    }
+
+    public void setServiceType(String serviceType) {
+        this.serviceType = serviceType;
+    }
+
+    public String getServiceRole() {
+        return serviceRole;
+    }
+
+    public void setServiceRole(String serviceRole) {
+        this.serviceRole = serviceRole;
+    }
+
+    public Request getRequest() {
+        return request;
+    }
+
+    public void setRequest(Request request) {
+        this.request = request;
+    }
+
+    public Customer getCustomer() {
+        return customer;
+    }
+
+    public void setCustomer(Customer customer) {
+        this.customer = customer;
+    }
+
+    public String getCallbackURN() {
+        return callbackURN;
+    }
+
+    public void setCallbackURN(String callbackURN) {
+        this.callbackURN = callbackURN;
+    }
+
+    public String getSdncVersion() {
+        return sdncVersion;
+    }
+
+    public void setSdncVersion(String sdncVersion) {
+        this.sdncVersion = sdncVersion;
+    }
+
+    // *****
+
+    // *****
+    // Access methods
+
+
+    /**
+     * This method returns one combined list of Resources of All Types
+     * 
+     * @return
+     */
+    @JsonIgnore
+    public List<Resource> getServiceResources() {
+        ArrayList serviceResources = new ArrayList();
+        if (this.getAllottedResources() != null) {
+            serviceResources.addAll(this.getAllottedResources());
+        }
+        if (this.getNetworkResources() != null) {
+            serviceResources.addAll(this.getNetworkResources());
+        }
+        if (this.getVnfResources() != null) {
+            serviceResources.addAll(this.getVnfResources());
+        }
+        if (this.getConfigResources() != null) {
+            serviceResources.addAll(this.getConfigResources());
+        }
+        return serviceResources;
+    }
+
+    /**
+     * This method returns String representation of one combined list of Resources of All Types
+     */
+    @JsonIgnore
+    public String getServiceResourcesJsonString() {
+        return getServiceNetworksJson() + getServiceVnfsJson() + getServiceAllottedResourcesJson()
+                + getServiceConfigResourcesJson();
+    }
+
+    /**
+     * Returns a JSON list of all Network Resource structures (i.e. the serialized NetworkDecomposition objects).
+     * 
+     * @return
+     */
+    @JsonIgnore
+    public String getServiceNetworksJson() {
+        return listToJson(this.getNetworkResources());
+    }
+
+    /**
+     * Returns a JSON list of all VnfResource structures (i.e. the serialized VnfResource objects).
+     * 
+     * @return
+     */
+    @JsonIgnore
+    public String getServiceVnfsJson() {
+        return listToJson(this.getVnfResources());
+    }
+
+    /**
+     * Returns a JSON list of all Allotted Resource structures (i.e. the serialized AllottedResource objects).
+     * 
+     * @return
+     */
+    @JsonIgnore
+    public String getServiceAllottedResourcesJson() {
+        return listToJson(this.getAllottedResources());
+    }
+
+    /**
+     * Returns a JSON list of all Config Resource structures (i.e. the serialized ConfigResource objects).
+     * 
+     * @return
+     */
+    @JsonIgnore
+    public String getServiceConfigResourcesJson() {
+        return listToJson(this.getConfigResources());
+    }
+
+    // TODO - define Resource Object ID
+    @JsonIgnore
+    public String getVnfResource(String resourceObjectId) {
 
         for (Resource resource : getServiceResources()) {
-            //resource.getModelInfo().getModelInvariantId();
+            // resource.getModelInfo().getModelInvariantId();
 
             if ("extracted information".equals(resourceObjectId)) {
                 return resource.toJsonString();
             }
         }
-               return "";
-       }
-
-       //Methods to add Resource to the list
-       /**
-        * Add VNF resource to the list
-        * @param vnfResource
-        */
-       public void addVnfResource(Resource vnfResource) {
-               if (vnfResources == null){
-                       vnfResources = new ArrayList<>();
-               }
-               this.vnfResources.add((VnfResource)vnfResource);
-       }
-       /**
-        * Add Network resource to the list
-        * @param networkResource
-        */
-       public void addNetworkResource(Resource networkResource) {
-               if (networkResources == null){
-                       networkResources = new ArrayList<>();
-               }
-               this.networkResources.add((NetworkResource)networkResource);
-       }
-       /**
-        * Add Allotted resource to the list
-        * @param allottedResource
-        */
-       public void addAllottedResource(Resource allottedResource) {
-               if (allottedResources == null){
-                       allottedResources = new ArrayList<>();
-               }
-               this.allottedResources.add((AllottedResource)allottedResource);
-       }
-       /**
-        * Add Config resource to the list
-        * @param allottedResource
-        */
-       public void addConfigResource(Resource configResource) {
-               if (configResources == null){
-                       configResources = new ArrayList<>();
-               }
-               this.configResources.add((ConfigResource)configResource);
-       }
-       /**
-        * Add resource to the list
-        * Given a ResourceDecomposition (subclass) object, add it to the Service Decomposition (in the appropriate category, e.g. as a VNF, Network, or Allotted Resource).
-        * As dependencies are not currently supported, add it to the end of any ordered lists.
-        * @param resource
-        */
-       public void addResource(Resource resource) {
-               //create resource based upon type
-               switch (resource.resourceType) {
-               case VNF:
-                       this.addVnfResource(resource);
-                       break;
-               case NETWORK:
-                       this.addNetworkResource(resource);
-                    break;
-               case ALLOTTED_RESOURCE:
-                       this.addAllottedResource(resource);
-                   break;
-               case CONFIGURATION:
-                       this.addConfigResource(resource);
-                   break;
-               default:
-                    throw new IllegalArgumentException("Invalid resource type: " + resource.resourceType);
-                }
-       }
-
-       /**
-        * Add resource to the list
-        * @param jsonResource
-        */
-       public void addVnfResource(String jsonResource) throws JsonDecomposingException {
-               VnfResource vnfResource = null;
-               vnfResource = DecomposeJsonUtil.jsonToVnfResource(jsonResource);
-               this.addVnfResource(vnfResource);
-       }
-       /**
-        * Add resource to the list
-        * @param jsonResource
-        */
-       public void addNetworkResource(String jsonResource) throws JsonDecomposingException {
-               NetworkResource networkResource = null;
-               networkResource = DecomposeJsonUtil.jsonToNetworkResource(jsonResource);
-               this.addNetworkResource(networkResource);
-       }
-       /**
-        * Add resource to the list
-        * @param Resource
-        */
-       public void addAllottedResource(String jsonResource) throws JsonDecomposingException {
-               AllottedResource allottedResource = null;
-               allottedResource = DecomposeJsonUtil.jsonToAllottedResource(jsonResource);
-               this.addAllottedResource(allottedResource);
-       }
-       /**
-        * Add resource to the list
-        * @param Resource
-        */
-       public void addConfigResource(String jsonResource) throws JsonDecomposingException {
-               ConfigResource configResource = null;
-               configResource = DecomposeJsonUtil.jsonToConfigResource(jsonResource);
-               this.addConfigResource(configResource);
-       }
-       /**
-        * Given a ResourceDecomposition (subclass) object, locate it in the Service Decomposition by its unique ID, and replace the current version with the new one.
-        * This method should support concurrency control via an auto-incrementing field in the ResourceDecomposition class.
-        * @param newResource
-        * @return TRUE if replacement was a success
-        */
-       public boolean replaceResource(Resource newResource){
-               List resources = getResourceList(newResource);
-
-               boolean result = false;
-               for (Resource resource : (Iterable<Resource>) resources) {
-                       System.out.println("resource found");
-                       if (resource.resourceType == newResource.resourceType) {
-                               System.out.println("resource type matches");
-                               if (resource.getResourceId().equalsIgnoreCase(newResource.getResourceId())) {
-                                       System.out.println("resource id matches");
-                                       //returns TRUE if replacement is a success
-                                       result = Collections.replaceAll(resources, resource, newResource);
-                               }
-                       }
-               }
-               return result;
-       }
-
-       /**
-        * Given a ResourceDecomposition as a JSON string, locate it in the Service Decomposition by its unique ID,
-        *  and replace the current version with the new one.
-        * @param jsonString
-        * @return
-        */
-       public boolean replaceResource(String jsonString){
-               //TODO: define unique ID for the Resource!
-               return false;
-       }
-
-       /**
-        *  Given a resource object ID, locate it in the Service Decomposition by its unique ID, and delete it.
-        * @param resource
-        * @return TRUE if delete was a success
-        */
-       public boolean deleteResource(Resource resource){
-               List serviceResourceList = getResourceList(resource);
-               for (Resource item : (Iterable<Resource>) serviceResourceList) {
-                       if (item.resourceType == resource.resourceType) {
-                               if (item.getResourceId().equalsIgnoreCase(resource.getResourceId())) {
-                                       //returns TRUE if replacement is a success
-                                       return serviceResourceList.remove(resource);
-                               }
-                       }
-               }
-
-               return false;
-       }
-
-       /**
-        * Generic method to get List of Resource objects based on input resource's resourceType
-        * @param resource
-        * @return List matching the resourceType of resource
-        */
-       public List getResourceList(Resource resource) {
-               List resourceList;
-               switch(resource.getResourceType()) {
-                       case VNF:
-                               resourceList = getVnfResources();
-                               break;
-                       case NETWORK:
-                               resourceList = getNetworkResources();
-                               break;
-                       case ALLOTTED_RESOURCE:
-                               resourceList = getAllottedResources();
-                               break;
-                       case CONFIGURATION:
-                               resourceList = getConfigResources();
-                               break;
-                       default:
-                               resourceList = new ArrayList<>();
-               }
-               return resourceList;
-       }
-
-       /**
-        * Generic method to set List of ResourceDecomposition objects
-        * @param resources
-        * @return
-        */
-       public boolean setResourceList(List<Resource> resources){
-               if(resources != null && !resources.isEmpty()) {
-                       //create resource based upon type
-                       switch (resources.get(0).resourceType) {
-                               case VNF:
-                                       this.setVnfResources((List<VnfResource>)(List<?>)resources);
-                                       break;
-                               case NETWORK:
-                                       this.setNetworkResources((List<NetworkResource>)(List<?>)resources);
-                                   break;
-                               case ALLOTTED_RESOURCE:
-                                       this.setAllottedResources((List<AllottedResource>)(List<?>)resources);
-                                   break;
-                               case CONFIGURATION:
-                                       this.setConfigResources((List<ConfigResource>)(List<?>)resources);
-                                   break;
-                               default:
-                                    throw new IllegalArgumentException("Invalid resource type: " + resources.get(0).resourceType);
-                       }
-               }
-
-               return false;
-       }
-
-       /**
-        *
-        * This method locates and returns a resource in a given
-        * Service Decomposition object by its unique resource id.
-        * Returns null if resource doesn't exist.
-        *
-        * @param resourceId - id of the resource
-        * @return resource
-        */
-       @JsonIgnore
-       public Resource getServiceResource(String resourceId){
-               List<Resource> resources = getServiceResources();
-               for (Resource resource : resources) {
-                       if (resource.getResourceId().equalsIgnoreCase(resourceId)) {
-                               //match
-                               return resource;
-                       }
-               }
-               return null;
-       }
+        return "";
+    }
+
+    // Methods to add Resource to the list
+    /**
+     * Add VNF resource to the list
+     * 
+     * @param vnfResource
+     */
+    public void addVnfResource(Resource vnfResource) {
+        if (vnfResources == null) {
+            vnfResources = new ArrayList<>();
+        }
+        this.vnfResources.add((VnfResource) vnfResource);
+    }
+
+    /**
+     * Add Network resource to the list
+     * 
+     * @param networkResource
+     */
+    public void addNetworkResource(Resource networkResource) {
+        if (networkResources == null) {
+            networkResources = new ArrayList<>();
+        }
+        this.networkResources.add((NetworkResource) networkResource);
+    }
+
+    /**
+     * Add Allotted resource to the list
+     * 
+     * @param allottedResource
+     */
+    public void addAllottedResource(Resource allottedResource) {
+        if (allottedResources == null) {
+            allottedResources = new ArrayList<>();
+        }
+        this.allottedResources.add((AllottedResource) allottedResource);
+    }
+
+    /**
+     * Add Config resource to the list
+     * 
+     * @param allottedResource
+     */
+    public void addConfigResource(Resource configResource) {
+        if (configResources == null) {
+            configResources = new ArrayList<>();
+        }
+        this.configResources.add((ConfigResource) configResource);
+    }
+
+    /**
+     * Add resource to the list Given a ResourceDecomposition (subclass) object, add it to the Service Decomposition (in
+     * the appropriate category, e.g. as a VNF, Network, or Allotted Resource). As dependencies are not currently
+     * supported, add it to the end of any ordered lists.
+     * 
+     * @param resource
+     */
+    public void addResource(Resource resource) {
+        // create resource based upon type
+        switch (resource.resourceType) {
+            case VNF:
+                this.addVnfResource(resource);
+                break;
+            case NETWORK:
+                this.addNetworkResource(resource);
+                break;
+            case ALLOTTED_RESOURCE:
+                this.addAllottedResource(resource);
+                break;
+            case CONFIGURATION:
+                this.addConfigResource(resource);
+                break;
+            default:
+                throw new IllegalArgumentException("Invalid resource type: " + resource.resourceType);
+        }
+    }
+
+    /**
+     * Add resource to the list
+     * 
+     * @param jsonResource
+     */
+    public void addVnfResource(String jsonResource) throws JsonDecomposingException {
+        VnfResource vnfResource = null;
+        vnfResource = DecomposeJsonUtil.jsonToVnfResource(jsonResource);
+        this.addVnfResource(vnfResource);
+    }
+
+    /**
+     * Add resource to the list
+     * 
+     * @param jsonResource
+     */
+    public void addNetworkResource(String jsonResource) throws JsonDecomposingException {
+        NetworkResource networkResource = null;
+        networkResource = DecomposeJsonUtil.jsonToNetworkResource(jsonResource);
+        this.addNetworkResource(networkResource);
+    }
+
+    /**
+     * Add resource to the list
+     * 
+     * @param Resource
+     */
+    public void addAllottedResource(String jsonResource) throws JsonDecomposingException {
+        AllottedResource allottedResource = null;
+        allottedResource = DecomposeJsonUtil.jsonToAllottedResource(jsonResource);
+        this.addAllottedResource(allottedResource);
+    }
+
+    /**
+     * Add resource to the list
+     * 
+     * @param Resource
+     */
+    public void addConfigResource(String jsonResource) throws JsonDecomposingException {
+        ConfigResource configResource = null;
+        configResource = DecomposeJsonUtil.jsonToConfigResource(jsonResource);
+        this.addConfigResource(configResource);
+    }
+
+    /**
+     * Given a ResourceDecomposition (subclass) object, locate it in the Service Decomposition by its unique ID, and
+     * replace the current version with the new one. This method should support concurrency control via an
+     * auto-incrementing field in the ResourceDecomposition class.
+     * 
+     * @param newResource
+     * @return TRUE if replacement was a success
+     */
+    public boolean replaceResource(Resource newResource) {
+        List resources = getResourceList(newResource);
+
+        boolean result = false;
+        for (Resource resource : (Iterable<Resource>) resources) {
+            System.out.println("resource found");
+            if (resource.resourceType == newResource.resourceType) {
+                System.out.println("resource type matches");
+                if (resource.getResourceId().equalsIgnoreCase(newResource.getResourceId())) {
+                    System.out.println("resource id matches");
+                    // returns TRUE if replacement is a success
+                    result = Collections.replaceAll(resources, resource, newResource);
+                }
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Given a ResourceDecomposition as a JSON string, locate it in the Service Decomposition by its unique ID, and
+     * replace the current version with the new one.
+     * 
+     * @param jsonString
+     * @return
+     */
+    public boolean replaceResource(String jsonString) {
+        // TODO: define unique ID for the Resource!
+        return false;
+    }
+
+    /**
+     * Given a resource object ID, locate it in the Service Decomposition by its unique ID, and delete it.
+     * 
+     * @param resource
+     * @return TRUE if delete was a success
+     */
+    public boolean deleteResource(Resource resource) {
+        List serviceResourceList = getResourceList(resource);
+        for (Resource item : (Iterable<Resource>) serviceResourceList) {
+            if (item.resourceType == resource.resourceType) {
+                if (item.getResourceId().equalsIgnoreCase(resource.getResourceId())) {
+                    // returns TRUE if replacement is a success
+                    return serviceResourceList.remove(resource);
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Generic method to get List of Resource objects based on input resource's resourceType
+     * 
+     * @param resource
+     * @return List matching the resourceType of resource
+     */
+    public List getResourceList(Resource resource) {
+        List resourceList;
+        switch (resource.getResourceType()) {
+            case VNF:
+                resourceList = getVnfResources();
+                break;
+            case NETWORK:
+                resourceList = getNetworkResources();
+                break;
+            case ALLOTTED_RESOURCE:
+                resourceList = getAllottedResources();
+                break;
+            case CONFIGURATION:
+                resourceList = getConfigResources();
+                break;
+            default:
+                resourceList = new ArrayList<>();
+        }
+        return resourceList;
+    }
+
+    /**
+     * Generic method to set List of ResourceDecomposition objects
+     * 
+     * @param resources
+     * @return
+     */
+    public boolean setResourceList(List<Resource> resources) {
+        if (resources != null && !resources.isEmpty()) {
+            // create resource based upon type
+            switch (resources.get(0).resourceType) {
+                case VNF:
+                    this.setVnfResources((List<VnfResource>) (List<?>) resources);
+                    break;
+                case NETWORK:
+                    this.setNetworkResources((List<NetworkResource>) (List<?>) resources);
+                    break;
+                case ALLOTTED_RESOURCE:
+                    this.setAllottedResources((List<AllottedResource>) (List<?>) resources);
+                    break;
+                case CONFIGURATION:
+                    this.setConfigResources((List<ConfigResource>) (List<?>) resources);
+                    break;
+                default:
+                    throw new IllegalArgumentException("Invalid resource type: " + resources.get(0).resourceType);
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     *
+     * This method locates and returns a resource in a given Service Decomposition object by its unique resource id.
+     * Returns null if resource doesn't exist.
+     *
+     * @param resourceId - id of the resource
+     * @return resource
+     */
+    @JsonIgnore
+    public Resource getServiceResource(String resourceId) {
+        List<Resource> resources = getServiceResources();
+        for (Resource resource : resources) {
+            if (resource.getResourceId().equalsIgnoreCase(resourceId)) {
+                // match
+                return resource;
+            }
+        }
+        return null;
+    }
 }