1 package org.openecomp.mso.bpmn.core.domain;
\r
4 import java.io.Serializable;
\r
5 import java.util.ArrayList;
\r
6 import java.util.Collections;
\r
7 import java.util.Iterator;
\r
8 import java.util.List;
\r
10 import com.fasterxml.jackson.annotation.JsonIgnore;
\r
11 import com.fasterxml.jackson.annotation.JsonProperty;
\r
12 import com.fasterxml.jackson.annotation.JsonRootName;
\r
14 import org.json.JSONObject;
\r
15 import org.openecomp.mso.bpmn.core.json.DecomposeJsonUtil;
\r
20 * Service Decomposition Structure
\r
21 * This Java object contains service information:
\r
22 * - Service model info
\r
23 * - Service type and role
\r
24 * - list of VNF resource's decompositon
\r
25 * - list of network resource's decompositon
\r
26 * - list of allotted resource's decompositon
\r
28 @JsonRootName(value = "serviceResources")
\r
29 //@JsonTypeInfo(include=As.WRAPPER_OBJECT, use=Id.NAME)
\r
30 public class ServiceDecomposition extends JsonWrapper implements Serializable {
\r
32 private static final long serialVersionUID = 1L;
\r
33 DecomposeJsonUtil jsonUtils = new DecomposeJsonUtil();
\r
35 @JsonProperty("modelInfo")
\r
36 private ModelInfo modelInfo;
\r
37 @JsonProperty("serviceType")
\r
38 private String serviceType;
\r
39 @JsonProperty("serviceRole")
\r
40 private String serviceRole;
\r
41 private ServiceInstance serviceInstance;
\r
42 @JsonProperty("vnfResource")
\r
43 private List <VnfResource> vnfResources;
\r
44 @JsonProperty("networkResource")
\r
45 private List <NetworkResource> networkResources;
\r
46 @JsonProperty("allottedResource")
\r
47 private List <AllottedResource> allottedResources;
\r
49 public ServiceDecomposition () {
\r
53 public ServiceDecomposition (String catalogRestOutput) {
\r
55 ServiceDecomposition serviceDecomposition = DecomposeJsonUtil.JsonToServiceDecomposition(catalogRestOutput);
\r
56 this.modelInfo = serviceDecomposition.getModelInfo();
\r
57 this.vnfResources = serviceDecomposition.getServiceVnfs();
\r
58 this.allottedResources = serviceDecomposition.getServiceAllottedResources();
\r
59 this.networkResources = serviceDecomposition.getServiceNetworks();
\r
60 this.serviceRole = serviceDecomposition.getServiceRole();
\r
61 this.serviceType = serviceDecomposition.getServiceType();
\r
65 * Constructor taking Catalog DB Adapter REST output (serviceResources model) + service Instance ID
\r
66 * @param catalogRestOutput
\r
67 * @param serviceInstanceId
\r
69 public ServiceDecomposition (String catalogRestOutput, String serviceInstanceId) {
\r
71 ServiceDecomposition serviceDecomposition = DecomposeJsonUtil.JsonToServiceDecomposition(catalogRestOutput);
\r
72 this.modelInfo = serviceDecomposition.getModelInfo();
\r
73 this.vnfResources = serviceDecomposition.getServiceVnfs();
\r
74 this.allottedResources = serviceDecomposition.getServiceAllottedResources();
\r
75 this.networkResources = serviceDecomposition.getServiceNetworks();
\r
77 this.serviceRole = serviceDecomposition.getServiceRole();
\r
78 this.serviceType = serviceDecomposition.getServiceType();
\r
80 this.serviceInstance = new ServiceInstance();
\r
81 this.serviceInstance.setInstanceId(serviceInstanceId);
\r
85 * Constructor taking a Service Decomposition JSON serialization
\r
86 * @param catalogRestOutput
\r
87 * @param serviceInstanceId
\r
89 public ServiceDecomposition (JSONObject jsonServiceDecomposition, String serviceInstanceId) {
\r
90 //TODO provide constructor implementation
\r
95 //GET and SET section
\r
97 * Return just the service model portion of the Service Decomposition as a Java object.
\r
98 * The service model object should support retrieval as JSON string that is formatted correctly for sending serviceModelInfo to Building Blocks.
\r
101 public ModelInfo getModelInfo() {
\r
104 public void setModelInfo(ModelInfo modelInfo) {
\r
105 this.modelInfo = modelInfo;
\r
107 public ServiceInstance getServiceInstance() {
\r
108 return serviceInstance;
\r
110 public void setServiceInstance(ServiceInstance serviceInstance) {
\r
111 this.serviceInstance = serviceInstance;
\r
113 public List<VnfResource> getServiceVnfs() {
\r
114 return vnfResources;
\r
116 public void setServiceVnfs(List<VnfResource> vnfResources) {
\r
117 this.vnfResources = vnfResources;
\r
119 public List<NetworkResource> getServiceNetworks() {
\r
120 return networkResources;
\r
122 public void setServiceNetworks(List<NetworkResource> networkResources) {
\r
123 this.networkResources = networkResources;
\r
125 public List<AllottedResource> getServiceAllottedResources() {
\r
126 return allottedResources;
\r
128 public void setServiceAllottedResources(List<AllottedResource> allottedResources) {
\r
129 this.allottedResources = allottedResources;
\r
131 public String getServiceType() {
\r
132 return serviceType;
\r
135 public void setServiceType(String serviceType) {
\r
136 this.serviceType = serviceType;
\r
139 public String getServiceRole() {
\r
140 return serviceRole;
\r
143 public void setServiceRole(String serviceRole) {
\r
144 this.serviceRole = serviceRole;
\r
153 * This method returns one combined list of Resources of All Types
\r
157 public List<Resource> getServiceResources(){
\r
158 ArrayList serviceResources = new ArrayList();
\r
159 if(this.getServiceAllottedResources() != null){
\r
160 serviceResources.addAll(this.getServiceAllottedResources());
\r
162 if(this.getServiceNetworks() != null){
\r
163 serviceResources.addAll(this.getServiceNetworks());
\r
165 if(this.getServiceVnfs() != null){
\r
166 serviceResources.addAll(this.getServiceVnfs());
\r
168 return serviceResources;
\r
172 * This method returns String representation of one combined list of Resources of All Types
\r
176 public String getServiceResourcesJsonString(){
\r
177 StringBuffer serviceResourcesJsonStringBuffer = new StringBuffer();
\r
178 serviceResourcesJsonStringBuffer.append(listToJson((this.getServiceNetworks())));
\r
179 serviceResourcesJsonStringBuffer.append(listToJson((this.getServiceVnfs())));
\r
180 serviceResourcesJsonStringBuffer.append(listToJson((this.getServiceAllottedResources())));
\r
181 return serviceResourcesJsonStringBuffer.toString();
\r
185 * Returns a JSON list of all Network Resource structures (i.e. the serialized NetworkDecomposition objects).
\r
189 public String getServiceNetworksJson(){
\r
190 return listToJson(this.getServiceNetworks());
\r
193 * Returns a JSON list of all VnfResource structures (i.e. the serialized VnfResource objects).
\r
197 public String getServiceVnfsJson(){
\r
198 return listToJson(this.getServiceVnfs());
\r
201 * Returns a JSON list of all Allotted Resource structures (i.e. the serialized AllottedResource objects).
\r
205 public String getServiceAllottedResourcesJson(){
\r
206 return listToJson(this.getServiceAllottedResources());
\r
209 //TODO - define Resource Object ID
\r
211 public String getVnfResource(String resourceObjectId) {
\r
213 Iterator<Resource> iter = getServiceResources().iterator();
\r
214 while (iter.hasNext()) {
\r
215 Resource resource = iter.next();
\r
216 //resource.getModelInfo().getModelInvariantId();
\r
218 if (resourceObjectId.equals("extracted information")){
\r
219 return resource.toJsonString();
\r
225 //Methods to add Resource to the list
\r
227 * Add VNF resource to the list
\r
228 * @param vnfResource
\r
230 public void addVnfResource(Resource vnfResource) {
\r
231 if (vnfResources == null){
\r
232 vnfResources = new ArrayList<VnfResource>();
\r
234 this.vnfResources.add((VnfResource)vnfResource);
\r
237 * Add Network resource to the list
\r
238 * @param networkResource
\r
240 public void addNetworkResource(Resource networkResource) {
\r
241 if (networkResources == null){
\r
242 networkResources = new ArrayList<NetworkResource>();
\r
244 this.networkResources.add((NetworkResource)networkResource);
\r
247 * Add Allotted resource to the list
\r
248 * @param allottedResource
\r
250 public void addAllottedResource(Resource allottedResource) {
\r
251 if (allottedResources == null){
\r
252 allottedResources = new ArrayList<AllottedResource>();
\r
254 this.allottedResources.add((AllottedResource)allottedResource);
\r
258 * Add resource to the list
\r
259 * Given a ResourceDecomposition (subclass) object, add it to the Service Decomposition (in the appropriate category, e.g. as a VNF, Network, or Allotted Resource).
\r
260 * As dependencies are not currently supported, add it to the end of any ordered lists.
\r
263 public void addResource(Resource resource) {
\r
264 //create resource based upon type
\r
265 switch (resource.resourceType) {
\r
267 this.addVnfResource(resource);
\r
270 this.addNetworkResource(resource);
\r
272 case ALLOTTED_RESOURCE:
\r
273 this.addAllottedResource(resource);
\r
276 throw new IllegalArgumentException("Invalid resource type: " + resource.resourceType);
\r
281 * Add resource to the list
\r
284 public void addVnfResource(String jsonResource) {
\r
285 VnfResource vnfResource = null;
\r
286 vnfResource = DecomposeJsonUtil.JsonToVnfResource(jsonResource);
\r
287 this.addVnfResource(vnfResource);
\r
290 * Add resource to the list
\r
293 public void addNetworkResource(String jsonResource) {
\r
294 NetworkResource networkResource = null;
\r
295 networkResource = DecomposeJsonUtil.JsonToNetworkResource(jsonResource);
\r
296 this.addVnfResource(networkResource);
\r
299 * Add resource to the list
\r
302 public void addAllottedResource(String jsonResource) {
\r
303 AllottedResource allottedResource = null;
\r
304 allottedResource = DecomposeJsonUtil.JsonToAllottedResource(jsonResource);
\r
305 this.addVnfResource(allottedResource);
\r
309 * Given a ResourceDecomposition (subclass) object, locate it in the Service Decomposition by its unique ID, and replace the current version with the new one.
\r
310 * This method should support concurrency control via an auto-incrementing field in the ResourceDecomposition class.
\r
312 * @return TRUE if replacement was a success
\r
314 public boolean replaceResource(Resource newResource){
\r
315 boolean result = false;
\r
316 List serviceResources = getServiceResources();
\r
317 Iterator<Resource> iter = serviceResources.iterator();
\r
318 while (iter.hasNext()) {
\r
319 Resource resource = iter.next();
\r
320 System.out.println("resource found");
\r
321 if (resource.resourceType == newResource.resourceType){
\r
322 System.out.println("resource type matches");
\r
323 if (resource.getResourceId().equalsIgnoreCase(newResource.getResourceId())){
\r
324 System.out.println("resource id matches");
\r
325 //returns TRUE if replacement is a success
\r
326 result = Collections.replaceAll(serviceResources, resource, newResource);
\r
330 //set updated list into ServiceDecomposition
\r
331 this.setResourceList(serviceResources);
\r
336 * Given a ResourceDecomposition as a JSON string, locate it in the Service Decomposition by its unique ID,
\r
337 * and replace the current version with the new one.
\r
338 * @param jsonString
\r
341 public boolean replaceResource(String jsonString){
\r
342 //TODO: define unique ID for the Resource!
\r
347 * Given a resource object ID, locate it in the Service Decomposition by its unique ID, and delete it.
\r
349 * @return TRUE if delete was a success
\r
351 public boolean deleteResource(Resource resource){
\r
352 List serviceResources = getServiceResources();
\r
353 Iterator<Resource> iter = serviceResources.iterator();
\r
354 while (iter.hasNext()) {
\r
355 Resource item = iter.next();
\r
357 if (item.resourceType == resource.resourceType){
\r
358 if (item.getResourceId().equalsIgnoreCase(resource.getResourceId())){
\r
359 //returns TRUE if replacement is a success
\r
360 return serviceResources.remove(resource);
\r
369 * Generic method to set List of ResourceDecomposition objects
\r
373 public boolean setResourceList(List<Resource> resources){
\r
374 //create resource based upon type
\r
375 switch (resources.get(0).resourceType) {
\r
377 this.setServiceVnfs((List<VnfResource>)(List<?>)resources);
\r
380 this.setServiceNetworks((List<NetworkResource>)(List<?>)resources);
\r
382 case ALLOTTED_RESOURCE:
\r
383 this.setServiceAllottedResources((List<AllottedResource>)(List<?>)resources);
\r
386 throw new IllegalArgumentException("Invalid resource type: " + resources.get(0).resourceType);
\r
394 * This method locates and returns a resource in a given
\r
395 * Service Decomposition object by its unique resource id.
\r
396 * Returns null if resource doesn't exist.
\r
398 * @param resourceId - id of the resource
\r
402 public Resource getServiceResource(String resourceId){
\r
403 List<Resource> resources = getServiceResources();
\r
404 Iterator<Resource> iter = resources.iterator();
\r
405 while (iter.hasNext()){
\r
406 Resource resource = iter.next();
\r
407 if (resource.getResourceId().equalsIgnoreCase(resourceId)){
\r