2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.bpmn.core.domain;
24 import java.io.Serializable;
25 import java.util.ArrayList;
26 import java.util.Collections;
27 import java.util.Iterator;
28 import java.util.List;
29 import com.fasterxml.jackson.annotation.JsonIgnore;
30 import com.fasterxml.jackson.annotation.JsonProperty;
31 import com.fasterxml.jackson.annotation.JsonRootName;
32 import org.json.JSONObject;
33 import org.onap.so.bpmn.core.json.DecomposeJsonUtil;
34 import org.onap.so.bpmn.core.json.JsonDecomposingException;
39 * Service Decomposition Structure This Java object contains service information: - Service model info - Service type
40 * and role - list of VNF resource's decompositon - list of network resource's decompositon - list of allotted
41 * resource's decompositon
43 @JsonRootName(value = "serviceResources")
44 // @JsonTypeInfo(include=As.WRAPPER_OBJECT, use=Id.NAME)
45 public class ServiceDecomposition extends JsonWrapper implements Serializable {
47 private static final long serialVersionUID = 1L;
49 @JsonProperty("modelInfo")
50 private ModelInfo modelInfo;
51 @JsonProperty("serviceType")
52 private String serviceType;
53 @JsonProperty("serviceRole")
54 private String serviceRole;
55 private ServiceInstance serviceInstance;
56 private Request request;
57 private String callbackURN;
58 private String sdncVersion;
59 @JsonProperty("project")
60 private Project project;
61 @JsonProperty("owningEntity")
62 private OwningEntity owningEntity;
63 @JsonProperty("serviceVnfs")
64 private List<VnfResource> vnfResources;
65 @JsonProperty("serviceNetworks")
66 private List<NetworkResource> networkResources;
67 @JsonProperty("serviceAllottedResources")
68 private List<AllottedResource> allottedResources;
69 @JsonProperty("configResource")
70 private List<ConfigResource> configResources;
72 public ServiceDecomposition() {
76 public ServiceDecomposition(String catalogRestOutput) throws JsonDecomposingException {
77 ServiceDecomposition serviceDecomposition = DecomposeJsonUtil.jsonToServiceDecomposition(catalogRestOutput);
78 this.modelInfo = serviceDecomposition.getModelInfo();
79 this.vnfResources = serviceDecomposition.getVnfResources();
80 this.allottedResources = serviceDecomposition.getAllottedResources();
81 this.networkResources = serviceDecomposition.getNetworkResources();
82 this.serviceRole = serviceDecomposition.getServiceRole();
83 this.serviceType = serviceDecomposition.getServiceType();
84 this.configResources = serviceDecomposition.getConfigResources();
88 * Constructor taking Catalog DB Adapter REST output (serviceResources model) + service Instance ID
90 * @param catalogRestOutput
91 * @param serviceInstanceId
93 public ServiceDecomposition(String catalogRestOutput, String serviceInstanceId) throws JsonDecomposingException {
94 ServiceDecomposition serviceDecomposition = DecomposeJsonUtil.jsonToServiceDecomposition(catalogRestOutput);
95 this.modelInfo = serviceDecomposition.getModelInfo();
96 this.vnfResources = serviceDecomposition.getVnfResources();
97 this.allottedResources = serviceDecomposition.getAllottedResources();
98 this.configResources = serviceDecomposition.getConfigResources();
99 this.networkResources = serviceDecomposition.getNetworkResources();
101 this.serviceRole = serviceDecomposition.getServiceRole();
102 this.serviceType = serviceDecomposition.getServiceType();
104 this.serviceInstance = new ServiceInstance();
105 this.serviceInstance.setInstanceId(serviceInstanceId);
107 this.project = serviceDecomposition.getProject();
108 this.owningEntity = serviceDecomposition.getOwningEntity();
112 * Constructor taking a Service Decomposition JSON serialization
114 * @param catalogRestOutput
115 * @param serviceInstanceId
117 public ServiceDecomposition(JSONObject jsonServiceDecomposition, String serviceInstanceId) {
118 // TODO provide constructor implementation
123 // GET and SET section
125 * Return just the service model portion of the Service Decomposition as a Java object. The service model object
126 * should support retrieval as JSON string that is formatted correctly for sending serviceModelInfo to Building
131 public ModelInfo getModelInfo() {
135 public void setModelInfo(ModelInfo modelInfo) {
136 this.modelInfo = modelInfo;
139 public ServiceInstance getServiceInstance() {
140 return serviceInstance;
143 public void setServiceInstance(ServiceInstance serviceInstance) {
144 this.serviceInstance = serviceInstance;
147 public Project getProject() {
151 public OwningEntity getOwningEntity() {
155 public void setProject(Project project) {
156 this.project = project;
159 public void setOwningEntity(OwningEntity owningEntity) {
160 this.owningEntity = owningEntity;
163 public List<VnfResource> getVnfResources() {
167 public void setVnfResources(List<VnfResource> vnfResources) {
168 this.vnfResources = vnfResources;
171 public void setConfigResources(List<ConfigResource> configResources) {
172 this.configResources = configResources;
175 public List<ConfigResource> getConfigResources() {
176 return configResources;
179 public void setNetworkResources(List<NetworkResource> networkResources) {
180 this.networkResources = networkResources;
183 public List<NetworkResource> getNetworkResources() {
184 return networkResources;
187 public List<AllottedResource> getAllottedResources() {
188 return allottedResources;
191 public void setAllottedResources(List<AllottedResource> allottedResources) {
192 this.allottedResources = allottedResources;
195 public String getServiceType() {
199 public void setServiceType(String serviceType) {
200 this.serviceType = serviceType;
203 public String getServiceRole() {
207 public void setServiceRole(String serviceRole) {
208 this.serviceRole = serviceRole;
211 public Request getRequest() {
215 public void setRequest(Request request) {
216 this.request = request;
219 public String getCallbackURN() {
223 public void setCallbackURN(String callbackURN) {
224 this.callbackURN = callbackURN;
227 public String getSdncVersion() {
231 public void setSdncVersion(String sdncVersion) {
232 this.sdncVersion = sdncVersion;
242 * This method returns one combined list of Resources of All Types
247 public List<Resource> getServiceResources() {
248 ArrayList serviceResources = new ArrayList();
249 if (this.getAllottedResources() != null) {
250 serviceResources.addAll(this.getAllottedResources());
252 if (this.getNetworkResources() != null) {
253 serviceResources.addAll(this.getNetworkResources());
255 if (this.getVnfResources() != null) {
256 serviceResources.addAll(this.getVnfResources());
258 if (this.getConfigResources() != null) {
259 serviceResources.addAll(this.getConfigResources());
261 return serviceResources;
265 * This method returns String representation of one combined list of Resources of All Types
268 public String getServiceResourcesJsonString() {
269 return getServiceNetworksJson() + getServiceVnfsJson() + getServiceAllottedResourcesJson()
270 + getServiceConfigResourcesJson();
274 * Returns a JSON list of all Network Resource structures (i.e. the serialized NetworkDecomposition objects).
279 public String getServiceNetworksJson() {
280 return listToJson(this.getNetworkResources());
284 * Returns a JSON list of all VnfResource structures (i.e. the serialized VnfResource objects).
289 public String getServiceVnfsJson() {
290 return listToJson(this.getVnfResources());
294 * Returns a JSON list of all Allotted Resource structures (i.e. the serialized AllottedResource objects).
299 public String getServiceAllottedResourcesJson() {
300 return listToJson(this.getAllottedResources());
304 * Returns a JSON list of all Config Resource structures (i.e. the serialized ConfigResource objects).
309 public String getServiceConfigResourcesJson() {
310 return listToJson(this.getConfigResources());
313 // TODO - define Resource Object ID
315 public String getVnfResource(String resourceObjectId) {
317 for (Resource resource : getServiceResources()) {
318 // resource.getModelInfo().getModelInvariantId();
320 if ("extracted information".equals(resourceObjectId)) {
321 return resource.toJsonString();
327 // Methods to add Resource to the list
329 * Add VNF resource to the list
333 public void addVnfResource(Resource vnfResource) {
334 if (vnfResources == null) {
335 vnfResources = new ArrayList<>();
337 this.vnfResources.add((VnfResource) vnfResource);
341 * Add Network resource to the list
343 * @param networkResource
345 public void addNetworkResource(Resource networkResource) {
346 if (networkResources == null) {
347 networkResources = new ArrayList<>();
349 this.networkResources.add((NetworkResource) networkResource);
353 * Add Allotted resource to the list
355 * @param allottedResource
357 public void addAllottedResource(Resource allottedResource) {
358 if (allottedResources == null) {
359 allottedResources = new ArrayList<>();
361 this.allottedResources.add((AllottedResource) allottedResource);
365 * Add Config resource to the list
367 * @param allottedResource
369 public void addConfigResource(Resource configResource) {
370 if (configResources == null) {
371 configResources = new ArrayList<>();
373 this.configResources.add((ConfigResource) configResource);
377 * Add resource to the list Given a ResourceDecomposition (subclass) object, add it to the Service Decomposition (in
378 * the appropriate category, e.g. as a VNF, Network, or Allotted Resource). As dependencies are not currently
379 * supported, add it to the end of any ordered lists.
383 public void addResource(Resource resource) {
384 // create resource based upon type
385 switch (resource.resourceType) {
387 this.addVnfResource(resource);
390 this.addNetworkResource(resource);
392 case ALLOTTED_RESOURCE:
393 this.addAllottedResource(resource);
396 this.addConfigResource(resource);
399 throw new IllegalArgumentException("Invalid resource type: " + resource.resourceType);
404 * Add resource to the list
406 * @param jsonResource
408 public void addVnfResource(String jsonResource) throws JsonDecomposingException {
409 VnfResource vnfResource = null;
410 vnfResource = DecomposeJsonUtil.jsonToVnfResource(jsonResource);
411 this.addVnfResource(vnfResource);
415 * Add resource to the list
417 * @param jsonResource
419 public void addNetworkResource(String jsonResource) throws JsonDecomposingException {
420 NetworkResource networkResource = null;
421 networkResource = DecomposeJsonUtil.jsonToNetworkResource(jsonResource);
422 this.addNetworkResource(networkResource);
426 * Add resource to the list
430 public void addAllottedResource(String jsonResource) throws JsonDecomposingException {
431 AllottedResource allottedResource = null;
432 allottedResource = DecomposeJsonUtil.jsonToAllottedResource(jsonResource);
433 this.addAllottedResource(allottedResource);
437 * Add resource to the list
441 public void addConfigResource(String jsonResource) throws JsonDecomposingException {
442 ConfigResource configResource = null;
443 configResource = DecomposeJsonUtil.jsonToConfigResource(jsonResource);
444 this.addConfigResource(configResource);
448 * Given a ResourceDecomposition (subclass) object, locate it in the Service Decomposition by its unique ID, and
449 * replace the current version with the new one. This method should support concurrency control via an
450 * auto-incrementing field in the ResourceDecomposition class.
453 * @return TRUE if replacement was a success
455 public boolean replaceResource(Resource newResource) {
456 List resources = getResourceList(newResource);
458 boolean result = false;
459 for (Resource resource : (Iterable<Resource>) resources) {
460 System.out.println("resource found");
461 if (resource.resourceType == newResource.resourceType) {
462 System.out.println("resource type matches");
463 if (resource.getResourceId().equalsIgnoreCase(newResource.getResourceId())) {
464 System.out.println("resource id matches");
465 // returns TRUE if replacement is a success
466 result = Collections.replaceAll(resources, resource, newResource);
474 * Given a ResourceDecomposition as a JSON string, locate it in the Service Decomposition by its unique ID, and
475 * replace the current version with the new one.
480 public boolean replaceResource(String jsonString) {
481 // TODO: define unique ID for the Resource!
486 * Given a resource object ID, locate it in the Service Decomposition by its unique ID, and delete it.
489 * @return TRUE if delete was a success
491 public boolean deleteResource(Resource resource) {
492 List serviceResourceList = getResourceList(resource);
493 for (Resource item : (Iterable<Resource>) serviceResourceList) {
494 if (item.resourceType == resource.resourceType) {
495 if (item.getResourceId().equalsIgnoreCase(resource.getResourceId())) {
496 // returns TRUE if replacement is a success
497 return serviceResourceList.remove(resource);
506 * Generic method to get List of Resource objects based on input resource's resourceType
509 * @return List matching the resourceType of resource
511 public List getResourceList(Resource resource) {
513 switch (resource.getResourceType()) {
515 resourceList = getVnfResources();
518 resourceList = getNetworkResources();
520 case ALLOTTED_RESOURCE:
521 resourceList = getAllottedResources();
524 resourceList = getConfigResources();
527 resourceList = new ArrayList<>();
533 * Generic method to set List of ResourceDecomposition objects
538 public boolean setResourceList(List<Resource> resources) {
539 if (resources != null && !resources.isEmpty()) {
540 // create resource based upon type
541 switch (resources.get(0).resourceType) {
543 this.setVnfResources((List<VnfResource>) (List<?>) resources);
546 this.setNetworkResources((List<NetworkResource>) (List<?>) resources);
548 case ALLOTTED_RESOURCE:
549 this.setAllottedResources((List<AllottedResource>) (List<?>) resources);
552 this.setConfigResources((List<ConfigResource>) (List<?>) resources);
555 throw new IllegalArgumentException("Invalid resource type: " + resources.get(0).resourceType);
564 * This method locates and returns a resource in a given Service Decomposition object by its unique resource id.
565 * Returns null if resource doesn't exist.
567 * @param resourceId - id of the resource
571 public Resource getServiceResource(String resourceId) {
572 List<Resource> resources = getServiceResources();
573 for (Resource resource : resources) {
574 if (resource.getResourceId().equalsIgnoreCase(resourceId)) {