2 * ============LICENSE_START=======================================================
\r
4 * ================================================================================
\r
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
\r
6 * ================================================================================
\r
7 * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * you may not use this file except in compliance with the License.
\r
9 * You may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * Unless required by applicable law or agreed to in writing, software
\r
14 * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * See the License for the specific language governing permissions and
\r
17 * limitations under the License.
\r
18 * ============LICENSE_END=========================================================
\r
21 package org.openecomp.mso.bpmn.core.domain;
\r
24 import java.io.Serializable;
\r
25 import java.util.ArrayList;
\r
26 import java.util.Collections;
\r
27 import java.util.Iterator;
\r
28 import java.util.List;
\r
30 import com.fasterxml.jackson.annotation.JsonIgnore;
\r
31 import com.fasterxml.jackson.annotation.JsonProperty;
\r
32 import com.fasterxml.jackson.annotation.JsonRootName;
\r
33 import org.json.JSONObject;
\r
34 import org.openecomp.mso.bpmn.core.json.DecomposeJsonUtil;
\r
35 import org.openecomp.mso.bpmn.core.json.JsonDecomposingException;
\r
41 * Service Decomposition Structure
\r
42 * This Java object contains service information:
\r
43 * - Service model info
\r
44 * - Service type and role
\r
45 * - list of VNF resource's decompositon
\r
46 * - list of network resource's decompositon
\r
47 * - list of allotted resource's decompositon
\r
49 @JsonRootName(value = "serviceResources")
\r
50 //@JsonTypeInfo(include=As.WRAPPER_OBJECT, use=Id.NAME)
\r
51 public class ServiceDecomposition extends JsonWrapper implements Serializable {
\r
53 private static final long serialVersionUID = 1L;
\r
55 @JsonProperty("modelInfo")
\r
56 private ModelInfo modelInfo;
\r
57 @JsonProperty("serviceType")
\r
58 private String serviceType;
\r
59 @JsonProperty("serviceRole")
\r
60 private String serviceRole;
\r
61 private ServiceInstance serviceInstance;
\r
62 private Request request;
\r
63 private Customer customer;
\r
64 private String callbackURN;
\r
65 private String sdncVersion;
\r
66 @JsonProperty("project")
\r
67 private Project project;
\r
68 @JsonProperty("owningEntity")
\r
69 private OwningEntity owningEntity;
\r
70 @JsonProperty("vnfResource")
\r
71 private List <VnfResource> vnfResources;
\r
72 @JsonProperty("networkResource")
\r
73 private List <NetworkResource> networkResources;
\r
74 @JsonProperty("allottedResource")
\r
75 private List <AllottedResource> allottedResources;
\r
76 @JsonProperty("configResource")
\r
77 private List <ConfigResource> configResources;
\r
79 public ServiceDecomposition () {
\r
83 public ServiceDecomposition (String catalogRestOutput) throws JsonDecomposingException {
\r
84 ServiceDecomposition serviceDecomposition = DecomposeJsonUtil.jsonToServiceDecomposition(catalogRestOutput);
\r
85 this.modelInfo = serviceDecomposition.getModelInfo();
\r
86 this.vnfResources = serviceDecomposition.getServiceVnfs();
\r
87 this.allottedResources = serviceDecomposition.getServiceAllottedResources();
\r
88 this.networkResources = serviceDecomposition.getServiceNetworks();
\r
89 this.serviceRole = serviceDecomposition.getServiceRole();
\r
90 this.serviceType = serviceDecomposition.getServiceType();
\r
91 this.configResources = serviceDecomposition.getServiceConfigResources();
\r
95 * Constructor taking Catalog DB Adapter REST output (serviceResources model) + service Instance ID
\r
96 * @param catalogRestOutput
\r
97 * @param serviceInstanceId
\r
99 public ServiceDecomposition (String catalogRestOutput, String serviceInstanceId) throws JsonDecomposingException {
\r
100 ServiceDecomposition serviceDecomposition = DecomposeJsonUtil.jsonToServiceDecomposition(catalogRestOutput);
\r
101 this.modelInfo = serviceDecomposition.getModelInfo();
\r
102 this.vnfResources = serviceDecomposition.getServiceVnfs();
\r
103 this.allottedResources = serviceDecomposition.getServiceAllottedResources();
\r
104 this.configResources = serviceDecomposition.getServiceConfigResources();
\r
105 this.networkResources = serviceDecomposition.getServiceNetworks();
\r
107 this.serviceRole = serviceDecomposition.getServiceRole();
\r
108 this.serviceType = serviceDecomposition.getServiceType();
\r
110 this.serviceInstance = new ServiceInstance();
\r
111 this.serviceInstance.setInstanceId(serviceInstanceId);
\r
113 this.project = serviceDecomposition.getProject();
\r
114 this.owningEntity = serviceDecomposition.getOwningEntity();
\r
118 * Constructor taking a Service Decomposition JSON serialization
\r
119 * @param catalogRestOutput
\r
120 * @param serviceInstanceId
\r
122 public ServiceDecomposition (JSONObject jsonServiceDecomposition, String serviceInstanceId) {
\r
123 //TODO provide constructor implementation
\r
128 //GET and SET section
\r
130 * Return just the service model portion of the Service Decomposition as a Java object.
\r
131 * The service model object should support retrieval as JSON string that is formatted correctly for sending serviceModelInfo to Building Blocks.
\r
134 public ModelInfo getModelInfo() {
\r
137 public void setModelInfo(ModelInfo modelInfo) {
\r
138 this.modelInfo = modelInfo;
\r
140 public ServiceInstance getServiceInstance() {
\r
141 return serviceInstance;
\r
143 public void setServiceInstance(ServiceInstance serviceInstance) {
\r
144 this.serviceInstance = serviceInstance;
\r
146 public Project getProject() {
\r
149 public OwningEntity getOwningEntity() {
\r
150 return owningEntity;
\r
152 public void setProject(Project project) {
\r
153 this.project = project;
\r
155 public void setOwningEntity(OwningEntity owningEntity) {
\r
156 this.owningEntity = owningEntity;
\r
158 public List<VnfResource> getServiceVnfs() {
\r
159 return vnfResources;
\r
161 public void setServiceVnfs(List<VnfResource> vnfResources) {
\r
162 this.vnfResources = vnfResources;
\r
164 public List<NetworkResource> getServiceNetworks() {
\r
165 return networkResources;
\r
167 public void setServiceConfigs(List<ConfigResource> configResources) {
\r
168 this.configResources = configResources;
\r
170 public List<ConfigResource> getServiceConfigs() {
\r
171 return configResources;
\r
173 public void setServiceNetworks(List<NetworkResource> networkResources) {
\r
174 this.networkResources = networkResources;
\r
176 public List<AllottedResource> getServiceAllottedResources() {
\r
177 return allottedResources;
\r
179 public void setServiceAllottedResources(List<AllottedResource> allottedResources) {
\r
180 this.allottedResources = allottedResources;
\r
182 public List<ConfigResource> getServiceConfigResources() {
\r
183 return configResources;
\r
185 public void setServiceConfigResources(List<ConfigResource> configResources) {
\r
186 this.configResources = configResources;
\r
188 public String getServiceType() {
\r
189 return serviceType;
\r
192 public void setServiceType(String serviceType) {
\r
193 this.serviceType = serviceType;
\r
196 public String getServiceRole() {
\r
197 return serviceRole;
\r
200 public void setServiceRole(String serviceRole) {
\r
201 this.serviceRole = serviceRole;
\r
203 public Request getRequest() {
\r
207 public void setRequest(Request request) {
\r
208 this.request = request;
\r
210 public Customer getCustomer() {
\r
213 public void setCustomer(Customer customer) {
\r
214 this.customer = customer;
\r
216 public String getCallbackURN() {
\r
217 return callbackURN;
\r
220 public void setCallbackURN(String callbackURN) {
\r
221 this.callbackURN = callbackURN;
\r
224 public String getSdncVersion() {
\r
225 return sdncVersion;
\r
228 public void setSdncVersion(String sdncVersion) {
\r
229 this.sdncVersion = sdncVersion;
\r
239 * This method returns one combined list of Resources of All Types
\r
243 public List<Resource> getServiceResources(){
\r
244 ArrayList serviceResources = new ArrayList();
\r
245 if(this.getServiceAllottedResources() != null){
\r
246 serviceResources.addAll(this.getServiceAllottedResources());
\r
248 if(this.getServiceNetworks() != null){
\r
249 serviceResources.addAll(this.getServiceNetworks());
\r
251 if(this.getServiceVnfs() != null){
\r
252 serviceResources.addAll(this.getServiceVnfs());
\r
254 if(this.getServiceConfigResources() != null){
\r
255 serviceResources.addAll(this.getServiceConfigResources());
\r
257 return serviceResources;
\r
261 * This method returns String representation of one combined list of Resources of All Types
\r
264 public String getServiceResourcesJsonString() {
\r
265 return listToJson((this.getServiceNetworks())) +
\r
266 listToJson((this.getServiceVnfs())) +
\r
267 listToJson((this.getServiceAllottedResources())) +
\r
268 listToJson((this.getServiceConfigResources()));
\r
272 * Returns a JSON list of all Network Resource structures (i.e. the serialized NetworkDecomposition objects).
\r
276 public String getServiceNetworksJson(){
\r
277 return listToJson(this.getServiceNetworks());
\r
280 * Returns a JSON list of all VnfResource structures (i.e. the serialized VnfResource objects).
\r
284 public String getServiceVnfsJson(){
\r
285 return listToJson(this.getServiceVnfs());
\r
288 * Returns a JSON list of all Allotted Resource structures (i.e. the serialized AllottedResource objects).
\r
292 public String getServiceAllottedResourcesJson(){
\r
293 return listToJson(this.getServiceAllottedResources());
\r
296 * Returns a JSON list of all Config Resource structures (i.e. the serialized ConfigResource objects).
\r
300 public String getServiceConfigResourcesJson(){
\r
301 return listToJson(this.getServiceConfigResources());
\r
304 //TODO - define Resource Object ID
\r
306 public String getVnfResource(String resourceObjectId) {
\r
308 for (Resource resource : getServiceResources()) {
\r
309 //resource.getModelInfo().getModelInvariantId();
\r
311 if ("extracted information".equals(resourceObjectId)) {
\r
312 return resource.toJsonString();
\r
318 //Methods to add Resource to the list
\r
320 * Add VNF resource to the list
\r
321 * @param vnfResource
\r
323 public void addVnfResource(Resource vnfResource) {
\r
324 if (vnfResources == null){
\r
325 vnfResources = new ArrayList<>();
\r
327 this.vnfResources.add((VnfResource)vnfResource);
\r
330 * Add Network resource to the list
\r
331 * @param networkResource
\r
333 public void addNetworkResource(Resource networkResource) {
\r
334 if (networkResources == null){
\r
335 networkResources = new ArrayList<>();
\r
337 this.networkResources.add((NetworkResource)networkResource);
\r
340 * Add Allotted resource to the list
\r
341 * @param allottedResource
\r
343 public void addAllottedResource(Resource allottedResource) {
\r
344 if (allottedResources == null){
\r
345 allottedResources = new ArrayList<>();
\r
347 this.allottedResources.add((AllottedResource)allottedResource);
\r
350 * Add Config resource to the list
\r
351 * @param allottedResource
\r
353 public void addConfigResource(Resource configResource) {
\r
354 if (configResources == null){
\r
355 configResources = new ArrayList<>();
\r
357 this.configResources.add((ConfigResource)configResource);
\r
360 * Add resource to the list
\r
361 * 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
362 * As dependencies are not currently supported, add it to the end of any ordered lists.
\r
365 public void addResource(Resource resource) {
\r
366 //create resource based upon type
\r
367 switch (resource.resourceType) {
\r
369 this.addVnfResource(resource);
\r
372 this.addNetworkResource(resource);
\r
374 case ALLOTTED_RESOURCE:
\r
375 this.addAllottedResource(resource);
\r
377 case CONFIGURATION:
\r
378 this.addConfigResource(resource);
\r
381 throw new IllegalArgumentException("Invalid resource type: " + resource.resourceType);
\r
386 * Add resource to the list
\r
387 * @param jsonResource
\r
389 public void addVnfResource(String jsonResource) throws JsonDecomposingException {
\r
390 VnfResource vnfResource = null;
\r
391 vnfResource = DecomposeJsonUtil.jsonToVnfResource(jsonResource);
\r
392 this.addVnfResource(vnfResource);
\r
395 * Add resource to the list
\r
396 * @param jsonResource
\r
398 public void addNetworkResource(String jsonResource) throws JsonDecomposingException {
\r
399 NetworkResource networkResource = null;
\r
400 networkResource = DecomposeJsonUtil.jsonToNetworkResource(jsonResource);
\r
401 this.addVnfResource(networkResource);
\r
404 * Add resource to the list
\r
407 public void addAllottedResource(String jsonResource) throws JsonDecomposingException {
\r
408 AllottedResource allottedResource = null;
\r
409 allottedResource = DecomposeJsonUtil.jsonToAllottedResource(jsonResource);
\r
410 this.addVnfResource(allottedResource);
\r
413 * Add resource to the list
\r
416 public void addConfigResource(String jsonResource) throws JsonDecomposingException {
\r
417 ConfigResource configResource = null;
\r
418 configResource = DecomposeJsonUtil.jsonToConfigResource(jsonResource);
\r
419 this.addVnfResource(configResource);
\r
422 * 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
423 * This method should support concurrency control via an auto-incrementing field in the ResourceDecomposition class.
\r
424 * @param newResource
\r
425 * @return TRUE if replacement was a success
\r
427 public boolean replaceResource(Resource newResource){
\r
428 boolean result = false;
\r
429 List serviceResources = getServiceResources();
\r
430 for (Resource resource : (Iterable<Resource>) serviceResources) {
\r
431 System.out.println("resource found");
\r
432 if (resource.resourceType == newResource.resourceType) {
\r
433 System.out.println("resource type matches");
\r
434 if (resource.getResourceId().equalsIgnoreCase(newResource.getResourceId())) {
\r
435 System.out.println("resource id matches");
\r
436 //returns TRUE if replacement is a success
\r
437 result = Collections.replaceAll(serviceResources, resource, newResource);
\r
441 //set updated list into ServiceDecomposition
\r
442 this.setResourceList(serviceResources);
\r
447 * Given a ResourceDecomposition as a JSON string, locate it in the Service Decomposition by its unique ID,
\r
448 * and replace the current version with the new one.
\r
449 * @param jsonString
\r
452 public boolean replaceResource(String jsonString){
\r
453 //TODO: define unique ID for the Resource!
\r
458 * Given a resource object ID, locate it in the Service Decomposition by its unique ID, and delete it.
\r
460 * @return TRUE if delete was a success
\r
462 public boolean deleteResource(Resource resource){
\r
463 List serviceResources = getServiceResources();
\r
464 for (Resource item : (Iterable<Resource>) serviceResources) {
\r
465 if (item.resourceType == resource.resourceType) {
\r
466 if (item.getResourceId().equalsIgnoreCase(resource.getResourceId())) {
\r
467 //returns TRUE if replacement is a success
\r
468 return serviceResources.remove(resource);
\r
477 * Generic method to set List of ResourceDecomposition objects
\r
481 public boolean setResourceList(List<Resource> resources){
\r
482 //create resource based upon type
\r
483 switch (resources.get(0).resourceType) {
\r
485 this.setServiceVnfs((List<VnfResource>)(List<?>)resources);
\r
488 this.setServiceNetworks((List<NetworkResource>)(List<?>)resources);
\r
490 case ALLOTTED_RESOURCE:
\r
491 this.setServiceAllottedResources((List<AllottedResource>)(List<?>)resources);
\r
493 case CONFIGURATION:
\r
494 this.setServiceConfigResources((List<ConfigResource>)(List<?>)resources);
\r
497 throw new IllegalArgumentException("Invalid resource type: " + resources.get(0).resourceType);
\r
505 * This method locates and returns a resource in a given
\r
506 * Service Decomposition object by its unique resource id.
\r
507 * Returns null if resource doesn't exist.
\r
509 * @param resourceId - id of the resource
\r
513 public Resource getServiceResource(String resourceId){
\r
514 List<Resource> resources = getServiceResources();
\r
515 for (Resource resource : resources) {
\r
516 if (resource.getResourceId().equalsIgnoreCase(resourceId)) {
\r