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 Customer customer;
58 private String callbackURN;
59 private String sdncVersion;
60 @JsonProperty("project")
61 private Project project;
62 @JsonProperty("owningEntity")
63 private OwningEntity owningEntity;
64 @JsonProperty("serviceVnfs")
65 private List<VnfResource> vnfResources;
66 @JsonProperty("serviceNetworks")
67 private List<NetworkResource> networkResources;
68 @JsonProperty("serviceAllottedResources")
69 private List<AllottedResource> allottedResources;
70 @JsonProperty("configResource")
71 private List<ConfigResource> configResources;
73 public ServiceDecomposition() {
77 public ServiceDecomposition(String catalogRestOutput) throws JsonDecomposingException {
78 ServiceDecomposition serviceDecomposition = DecomposeJsonUtil.jsonToServiceDecomposition(catalogRestOutput);
79 this.modelInfo = serviceDecomposition.getModelInfo();
80 this.vnfResources = serviceDecomposition.getVnfResources();
81 this.allottedResources = serviceDecomposition.getAllottedResources();
82 this.networkResources = serviceDecomposition.getNetworkResources();
83 this.serviceRole = serviceDecomposition.getServiceRole();
84 this.serviceType = serviceDecomposition.getServiceType();
85 this.configResources = serviceDecomposition.getConfigResources();
89 * Constructor taking Catalog DB Adapter REST output (serviceResources model) + service Instance ID
91 * @param catalogRestOutput
92 * @param serviceInstanceId
94 public ServiceDecomposition(String catalogRestOutput, String serviceInstanceId) throws JsonDecomposingException {
95 ServiceDecomposition serviceDecomposition = DecomposeJsonUtil.jsonToServiceDecomposition(catalogRestOutput);
96 this.modelInfo = serviceDecomposition.getModelInfo();
97 this.vnfResources = serviceDecomposition.getVnfResources();
98 this.allottedResources = serviceDecomposition.getAllottedResources();
99 this.configResources = serviceDecomposition.getConfigResources();
100 this.networkResources = serviceDecomposition.getNetworkResources();
102 this.serviceRole = serviceDecomposition.getServiceRole();
103 this.serviceType = serviceDecomposition.getServiceType();
105 this.serviceInstance = new ServiceInstance();
106 this.serviceInstance.setInstanceId(serviceInstanceId);
108 this.project = serviceDecomposition.getProject();
109 this.owningEntity = serviceDecomposition.getOwningEntity();
113 * Constructor taking a Service Decomposition JSON serialization
115 * @param catalogRestOutput
116 * @param serviceInstanceId
118 public ServiceDecomposition(JSONObject jsonServiceDecomposition, String serviceInstanceId) {
119 // TODO provide constructor implementation
124 // GET and SET section
126 * Return just the service model portion of the Service Decomposition as a Java object. The service model object
127 * should support retrieval as JSON string that is formatted correctly for sending serviceModelInfo to Building
132 public ModelInfo getModelInfo() {
136 public void setModelInfo(ModelInfo modelInfo) {
137 this.modelInfo = modelInfo;
140 public ServiceInstance getServiceInstance() {
141 return serviceInstance;
144 public void setServiceInstance(ServiceInstance serviceInstance) {
145 this.serviceInstance = serviceInstance;
148 public Project getProject() {
152 public OwningEntity getOwningEntity() {
156 public void setProject(Project project) {
157 this.project = project;
160 public void setOwningEntity(OwningEntity owningEntity) {
161 this.owningEntity = owningEntity;
164 public List<VnfResource> getVnfResources() {
168 public void setVnfResources(List<VnfResource> vnfResources) {
169 this.vnfResources = vnfResources;
172 public void setConfigResources(List<ConfigResource> configResources) {
173 this.configResources = configResources;
176 public List<ConfigResource> getConfigResources() {
177 return configResources;
180 public void setNetworkResources(List<NetworkResource> networkResources) {
181 this.networkResources = networkResources;
184 public List<NetworkResource> getNetworkResources() {
185 return networkResources;
188 public List<AllottedResource> getAllottedResources() {
189 return allottedResources;
192 public void setAllottedResources(List<AllottedResource> allottedResources) {
193 this.allottedResources = allottedResources;
196 public String getServiceType() {
200 public void setServiceType(String serviceType) {
201 this.serviceType = serviceType;
204 public String getServiceRole() {
208 public void setServiceRole(String serviceRole) {
209 this.serviceRole = serviceRole;
212 public Request getRequest() {
216 public void setRequest(Request request) {
217 this.request = request;
220 public Customer getCustomer() {
224 public void setCustomer(Customer customer) {
225 this.customer = customer;
228 public String getCallbackURN() {
232 public void setCallbackURN(String callbackURN) {
233 this.callbackURN = callbackURN;
236 public String getSdncVersion() {
240 public void setSdncVersion(String sdncVersion) {
241 this.sdncVersion = sdncVersion;
251 * This method returns one combined list of Resources of All Types
256 public List<Resource> getServiceResources() {
257 ArrayList serviceResources = new ArrayList();
258 if (this.getAllottedResources() != null) {
259 serviceResources.addAll(this.getAllottedResources());
261 if (this.getNetworkResources() != null) {
262 serviceResources.addAll(this.getNetworkResources());
264 if (this.getVnfResources() != null) {
265 serviceResources.addAll(this.getVnfResources());
267 if (this.getConfigResources() != null) {
268 serviceResources.addAll(this.getConfigResources());
270 return serviceResources;
274 * This method returns String representation of one combined list of Resources of All Types
277 public String getServiceResourcesJsonString() {
278 return getServiceNetworksJson() + getServiceVnfsJson() + getServiceAllottedResourcesJson()
279 + getServiceConfigResourcesJson();
283 * Returns a JSON list of all Network Resource structures (i.e. the serialized NetworkDecomposition objects).
288 public String getServiceNetworksJson() {
289 return listToJson(this.getNetworkResources());
293 * Returns a JSON list of all VnfResource structures (i.e. the serialized VnfResource objects).
298 public String getServiceVnfsJson() {
299 return listToJson(this.getVnfResources());
303 * Returns a JSON list of all Allotted Resource structures (i.e. the serialized AllottedResource objects).
308 public String getServiceAllottedResourcesJson() {
309 return listToJson(this.getAllottedResources());
313 * Returns a JSON list of all Config Resource structures (i.e. the serialized ConfigResource objects).
318 public String getServiceConfigResourcesJson() {
319 return listToJson(this.getConfigResources());
322 // TODO - define Resource Object ID
324 public String getVnfResource(String resourceObjectId) {
326 for (Resource resource : getServiceResources()) {
327 // resource.getModelInfo().getModelInvariantId();
329 if ("extracted information".equals(resourceObjectId)) {
330 return resource.toJsonString();
336 // Methods to add Resource to the list
338 * Add VNF resource to the list
342 public void addVnfResource(Resource vnfResource) {
343 if (vnfResources == null) {
344 vnfResources = new ArrayList<>();
346 this.vnfResources.add((VnfResource) vnfResource);
350 * Add Network resource to the list
352 * @param networkResource
354 public void addNetworkResource(Resource networkResource) {
355 if (networkResources == null) {
356 networkResources = new ArrayList<>();
358 this.networkResources.add((NetworkResource) networkResource);
362 * Add Allotted resource to the list
364 * @param allottedResource
366 public void addAllottedResource(Resource allottedResource) {
367 if (allottedResources == null) {
368 allottedResources = new ArrayList<>();
370 this.allottedResources.add((AllottedResource) allottedResource);
374 * Add Config resource to the list
376 * @param allottedResource
378 public void addConfigResource(Resource configResource) {
379 if (configResources == null) {
380 configResources = new ArrayList<>();
382 this.configResources.add((ConfigResource) configResource);
386 * Add resource to the list Given a ResourceDecomposition (subclass) object, add it to the Service Decomposition (in
387 * the appropriate category, e.g. as a VNF, Network, or Allotted Resource). As dependencies are not currently
388 * supported, add it to the end of any ordered lists.
392 public void addResource(Resource resource) {
393 // create resource based upon type
394 switch (resource.resourceType) {
396 this.addVnfResource(resource);
399 this.addNetworkResource(resource);
401 case ALLOTTED_RESOURCE:
402 this.addAllottedResource(resource);
405 this.addConfigResource(resource);
408 throw new IllegalArgumentException("Invalid resource type: " + resource.resourceType);
413 * Add resource to the list
415 * @param jsonResource
417 public void addVnfResource(String jsonResource) throws JsonDecomposingException {
418 VnfResource vnfResource = null;
419 vnfResource = DecomposeJsonUtil.jsonToVnfResource(jsonResource);
420 this.addVnfResource(vnfResource);
424 * Add resource to the list
426 * @param jsonResource
428 public void addNetworkResource(String jsonResource) throws JsonDecomposingException {
429 NetworkResource networkResource = null;
430 networkResource = DecomposeJsonUtil.jsonToNetworkResource(jsonResource);
431 this.addNetworkResource(networkResource);
435 * Add resource to the list
439 public void addAllottedResource(String jsonResource) throws JsonDecomposingException {
440 AllottedResource allottedResource = null;
441 allottedResource = DecomposeJsonUtil.jsonToAllottedResource(jsonResource);
442 this.addAllottedResource(allottedResource);
446 * Add resource to the list
450 public void addConfigResource(String jsonResource) throws JsonDecomposingException {
451 ConfigResource configResource = null;
452 configResource = DecomposeJsonUtil.jsonToConfigResource(jsonResource);
453 this.addConfigResource(configResource);
457 * Given a ResourceDecomposition (subclass) object, locate it in the Service Decomposition by its unique ID, and
458 * replace the current version with the new one. This method should support concurrency control via an
459 * auto-incrementing field in the ResourceDecomposition class.
462 * @return TRUE if replacement was a success
464 public boolean replaceResource(Resource newResource) {
465 List resources = getResourceList(newResource);
467 boolean result = false;
468 for (Resource resource : (Iterable<Resource>) resources) {
469 System.out.println("resource found");
470 if (resource.resourceType == newResource.resourceType) {
471 System.out.println("resource type matches");
472 if (resource.getResourceId().equalsIgnoreCase(newResource.getResourceId())) {
473 System.out.println("resource id matches");
474 // returns TRUE if replacement is a success
475 result = Collections.replaceAll(resources, resource, newResource);
483 * Given a ResourceDecomposition as a JSON string, locate it in the Service Decomposition by its unique ID, and
484 * replace the current version with the new one.
489 public boolean replaceResource(String jsonString) {
490 // TODO: define unique ID for the Resource!
495 * Given a resource object ID, locate it in the Service Decomposition by its unique ID, and delete it.
498 * @return TRUE if delete was a success
500 public boolean deleteResource(Resource resource) {
501 List serviceResourceList = getResourceList(resource);
502 for (Resource item : (Iterable<Resource>) serviceResourceList) {
503 if (item.resourceType == resource.resourceType) {
504 if (item.getResourceId().equalsIgnoreCase(resource.getResourceId())) {
505 // returns TRUE if replacement is a success
506 return serviceResourceList.remove(resource);
515 * Generic method to get List of Resource objects based on input resource's resourceType
518 * @return List matching the resourceType of resource
520 public List getResourceList(Resource resource) {
522 switch (resource.getResourceType()) {
524 resourceList = getVnfResources();
527 resourceList = getNetworkResources();
529 case ALLOTTED_RESOURCE:
530 resourceList = getAllottedResources();
533 resourceList = getConfigResources();
536 resourceList = new ArrayList<>();
542 * Generic method to set List of ResourceDecomposition objects
547 public boolean setResourceList(List<Resource> resources) {
548 if (resources != null && !resources.isEmpty()) {
549 // create resource based upon type
550 switch (resources.get(0).resourceType) {
552 this.setVnfResources((List<VnfResource>) (List<?>) resources);
555 this.setNetworkResources((List<NetworkResource>) (List<?>) resources);
557 case ALLOTTED_RESOURCE:
558 this.setAllottedResources((List<AllottedResource>) (List<?>) resources);
561 this.setConfigResources((List<ConfigResource>) (List<?>) resources);
564 throw new IllegalArgumentException("Invalid resource type: " + resources.get(0).resourceType);
573 * This method locates and returns a resource in a given Service Decomposition object by its unique resource id.
574 * Returns null if resource doesn't exist.
576 * @param resourceId - id of the resource
580 public Resource getServiceResource(String resourceId) {
581 List<Resource> resources = getServiceResources();
582 for (Resource resource : resources) {
583 if (resource.getResourceId().equalsIgnoreCase(resourceId)) {