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
34 import org.openecomp.mso.bpmn.core.json.DecomposeJsonUtil;
\r
35 import org.openecomp.mso.bpmn.core.json.JsonDecomposingException;
\r
39 * Service Decomposition Structure
\r
40 * This Java object contains service information:
\r
41 * - Service model info
\r
42 * - Service type and role
\r
43 * - list of VNF resource's decompositon
\r
44 * - list of network resource's decompositon
\r
45 * - list of allotted resource's decompositon
\r
47 @JsonRootName(value = "serviceResources")
\r
48 //@JsonTypeInfo(include=As.WRAPPER_OBJECT, use=Id.NAME)
\r
49 public class ServiceDecomposition extends JsonWrapper implements Serializable {
\r
51 private static final long serialVersionUID = 1L;
\r
53 @JsonProperty("modelInfo")
\r
54 private ModelInfo modelInfo;
\r
55 @JsonProperty("serviceType")
\r
56 private String serviceType;
\r
57 @JsonProperty("serviceRole")
\r
58 private String serviceRole;
\r
59 private ServiceInstance serviceInstance;
\r
60 @JsonProperty("vnfResource")
\r
61 private List <VnfResource> vnfResources;
\r
62 @JsonProperty("networkResource")
\r
63 private List <NetworkResource> networkResources;
\r
64 @JsonProperty("allottedResource")
\r
65 private List <AllottedResource> allottedResources;
\r
67 public ServiceDecomposition () {
\r
71 //GET and SET section
\r
73 * Return just the service model portion of the Service Decomposition as a Java object.
\r
74 * The service model object should support retrieval as JSON string that is formatted correctly for sending serviceModelInfo to Building Blocks.
\r
77 public ModelInfo getModelInfo() {
\r
80 public void setModelInfo(ModelInfo modelInfo) {
\r
81 this.modelInfo = modelInfo;
\r
83 public ServiceInstance getServiceInstance() {
\r
84 return serviceInstance;
\r
86 public void setServiceInstance(ServiceInstance serviceInstance) {
\r
87 this.serviceInstance = serviceInstance;
\r
89 public List<VnfResource> getServiceVnfs() {
\r
90 return vnfResources;
\r
92 public void setServiceVnfs(List<VnfResource> vnfResources) {
\r
93 this.vnfResources = vnfResources;
\r
95 public List<NetworkResource> getServiceNetworks() {
\r
96 return networkResources;
\r
98 public void setServiceNetworks(List<NetworkResource> networkResources) {
\r
99 this.networkResources = networkResources;
\r
101 public List<AllottedResource> getServiceAllottedResources() {
\r
102 return allottedResources;
\r
104 public void setServiceAllottedResources(List<AllottedResource> allottedResources) {
\r
105 this.allottedResources = allottedResources;
\r
107 public String getServiceType() {
\r
108 return serviceType;
\r
111 public void setServiceType(String serviceType) {
\r
112 this.serviceType = serviceType;
\r
115 public String getServiceRole() {
\r
116 return serviceRole;
\r
119 public void setServiceRole(String serviceRole) {
\r
120 this.serviceRole = serviceRole;
\r
129 * This method returns one combined list of Resources of All Types
\r
133 public List<Resource> getServiceResources(){
\r
134 ArrayList serviceResources = new ArrayList();
\r
135 if(this.getServiceAllottedResources() != null){
\r
136 serviceResources.addAll(this.getServiceAllottedResources());
\r
138 if(this.getServiceNetworks() != null){
\r
139 serviceResources.addAll(this.getServiceNetworks());
\r
141 if(this.getServiceVnfs() != null){
\r
142 serviceResources.addAll(this.getServiceVnfs());
\r
144 return serviceResources;
\r
148 * This method returns String representation of one combined list of Resources of All Types
\r
152 public String getServiceResourcesJsonString(){
\r
153 StringBuffer serviceResourcesJsonStringBuffer = new StringBuffer();
\r
154 serviceResourcesJsonStringBuffer.append(listToJson((this.getServiceNetworks())));
\r
155 serviceResourcesJsonStringBuffer.append(listToJson((this.getServiceVnfs())));
\r
156 serviceResourcesJsonStringBuffer.append(listToJson((this.getServiceAllottedResources())));
\r
157 return serviceResourcesJsonStringBuffer.toString();
\r
161 * Returns a JSON list of all Network Resource structures (i.e. the serialized NetworkDecomposition objects).
\r
165 public String getServiceNetworksJson(){
\r
166 return listToJson(this.getServiceNetworks());
\r
169 * Returns a JSON list of all VnfResource structures (i.e. the serialized VnfResource objects).
\r
173 public String getServiceVnfsJson(){
\r
174 return listToJson(this.getServiceVnfs());
\r
177 * Returns a JSON list of all Allotted Resource structures (i.e. the serialized AllottedResource objects).
\r
181 public String getServiceAllottedResourcesJson(){
\r
182 return listToJson(this.getServiceAllottedResources());
\r
185 //TODO - define Resource Object ID
\r
187 public String getVnfResource(String resourceObjectId) {
\r
189 Iterator<Resource> iter = getServiceResources().iterator();
\r
190 while (iter.hasNext()) {
\r
191 Resource resource = iter.next();
\r
192 //resource.getModelInfo().getModelInvariantId();
\r
194 if ("extracted information".equals(resourceObjectId)){
\r
195 return resource.toJsonString();
\r
201 //Methods to add Resource to the list
\r
203 * Add VNF resource to the list
\r
204 * @param vnfResource
\r
206 public void addVnfResource(Resource vnfResource) {
\r
207 if (vnfResources == null){
\r
208 vnfResources = new ArrayList<VnfResource>();
\r
210 this.vnfResources.add((VnfResource)vnfResource);
\r
213 * Add Network resource to the list
\r
214 * @param networkResource
\r
216 public void addNetworkResource(Resource networkResource) {
\r
217 if (networkResources == null){
\r
218 networkResources = new ArrayList<NetworkResource>();
\r
220 this.networkResources.add((NetworkResource)networkResource);
\r
223 * Add Allotted resource to the list
\r
224 * @param allottedResource
\r
226 public void addAllottedResource(Resource allottedResource) {
\r
227 if (allottedResources == null){
\r
228 allottedResources = new ArrayList<AllottedResource>();
\r
230 this.allottedResources.add((AllottedResource)allottedResource);
\r
234 * Add resource to the list
\r
235 * 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
236 * As dependencies are not currently supported, add it to the end of any ordered lists.
\r
239 public void addResource(Resource resource) {
\r
240 //create resource based upon type
\r
241 switch (resource.resourceType) {
\r
243 this.addVnfResource(resource);
\r
246 this.addNetworkResource(resource);
\r
248 case ALLOTTED_RESOURCE:
\r
249 this.addAllottedResource(resource);
\r
252 throw new IllegalArgumentException("Invalid resource type: " + resource.resourceType);
\r
257 * Add resource to the list
\r
258 * @param jsonResource
\r
260 public void addVnfResource(String jsonResource) throws JsonDecomposingException {
\r
261 VnfResource vnfResource = null;
\r
262 vnfResource = DecomposeJsonUtil.jsonToVnfResource(jsonResource);
\r
263 this.addVnfResource(vnfResource);
\r
266 * Add resource to the list
\r
267 * @param jsonResource
\r
269 public void addNetworkResource(String jsonResource) throws JsonDecomposingException {
\r
270 NetworkResource networkResource = null;
\r
271 networkResource = DecomposeJsonUtil.jsonToNetworkResource(jsonResource);
\r
272 this.addVnfResource(networkResource);
\r
275 * Add resource to the list
\r
276 * @param jsonResource
\r
278 public void addAllottedResource(String jsonResource) throws JsonDecomposingException {
\r
279 AllottedResource allottedResource = null;
\r
280 allottedResource = DecomposeJsonUtil.jsonToAllottedResource(jsonResource);
\r
281 this.addVnfResource(allottedResource);
\r
285 * 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
286 * This method should support concurrency control via an auto-incrementing field in the ResourceDecomposition class.
\r
287 * @param newResource
\r
288 * @return TRUE if replacement was a success
\r
290 public boolean replaceResource(Resource newResource){
\r
291 boolean result = false;
\r
292 List serviceResources = getServiceResources();
\r
293 Iterator<Resource> iter = serviceResources.iterator();
\r
294 while (iter.hasNext()) {
\r
295 Resource resource = iter.next();
\r
296 System.out.println("resource found");
\r
297 if (resource.resourceType == newResource.resourceType){
\r
298 System.out.println("resource type matches");
\r
299 if (resource.getResourceId().equalsIgnoreCase(newResource.getResourceId())){
\r
300 System.out.println("resource id matches");
\r
301 //returns TRUE if replacement is a success
\r
302 result = Collections.replaceAll(serviceResources, resource, newResource);
\r
306 //set updated list into ServiceDecomposition
\r
307 this.setResourceList(serviceResources);
\r
312 * Given a ResourceDecomposition as a JSON string, locate it in the Service Decomposition by its unique ID,
\r
313 * and replace the current version with the new one.
\r
314 * @param jsonString
\r
317 public boolean replaceResource(String jsonString){
\r
318 //TODO: define unique ID for the Resource!
\r
323 * Given a resource object ID, locate it in the Service Decomposition by its unique ID, and delete it.
\r
325 * @return TRUE if delete was a success
\r
327 public boolean deleteResource(Resource resource){
\r
328 List serviceResources = getServiceResources();
\r
329 Iterator<Resource> iter = serviceResources.iterator();
\r
330 while (iter.hasNext()) {
\r
331 Resource item = iter.next();
\r
333 if (item.resourceType == resource.resourceType){
\r
334 if (item.getResourceId().equalsIgnoreCase(resource.getResourceId())){
\r
335 //returns TRUE if replacement is a success
\r
336 return serviceResources.remove(resource);
\r
345 * Generic method to set List of ResourceDecomposition objects
\r
349 public boolean setResourceList(List<Resource> resources){
\r
350 //create resource based upon type
\r
351 switch (resources.get(0).resourceType) {
\r
353 this.setServiceVnfs((List<VnfResource>)(List<?>)resources);
\r
356 this.setServiceNetworks((List<NetworkResource>)(List<?>)resources);
\r
358 case ALLOTTED_RESOURCE:
\r
359 this.setServiceAllottedResources((List<AllottedResource>)(List<?>)resources);
\r
362 throw new IllegalArgumentException("Invalid resource type: " + resources.get(0).resourceType);
\r
370 * This method locates and returns a resource in a given
\r
371 * Service Decomposition object by its unique resource id.
\r
372 * Returns null if resource doesn't exist.
\r
374 * @param resourceId - id of the resource
\r
378 public Resource getServiceResource(String resourceId){
\r
379 List<Resource> resources = getServiceResources();
\r
380 Iterator<Resource> iter = resources.iterator();
\r
381 while (iter.hasNext()){
\r
382 Resource resource = iter.next();
\r
383 if (resource.getResourceId().equalsIgnoreCase(resourceId)){
\r