acbf778ea23fb73db9d6de7fe1434da029de1496
[vid.git] / vid-app-common / src / main / java / org / onap / vid / mso / model / ServiceInstantiationRequestDetails.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * VID
4  * ================================================================================
5  * Copyright (C) 2017 - 2019 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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.onap.vid.mso.model;
22
23 import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY;
24 import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
25
26 import com.fasterxml.jackson.annotation.JsonCreator;
27 import com.fasterxml.jackson.annotation.JsonInclude;
28 import com.fasterxml.jackson.annotation.JsonProperty;
29 import java.util.List;
30 import java.util.Map;
31 import java.util.Objects;
32 import org.onap.vid.mso.rest.SubscriberInfo;
33
34 public class ServiceInstantiationRequestDetails {
35
36     @JsonProperty("modelInfo")
37     private ModelInfo modelInfo;
38
39     @JsonProperty("owningEntity")
40     private ServiceInstantiationOwningEntity owningEntity;
41
42     @JsonProperty("subscriberInfo")
43     private SubscriberInfo subscriberInfo;
44
45     @JsonProperty("project")
46     private Project project;
47
48     @JsonProperty("requestParameters")
49     private RequestParameters requestParameters;
50
51     @JsonProperty("requestInfo")
52     private RequestInfo requestInfo;
53
54     public ServiceInstantiationRequestDetails(@JsonProperty(value = "modelInfo", required = true) ModelInfo modelInfo,
55                                               @JsonProperty(value = "owningEntity", required = true) ServiceInstantiationOwningEntity owningEntity,
56                                               @JsonProperty(value = "subscriberInfo", required = true) SubscriberInfo subscriberInfo,
57                                               @JsonProperty(value = "project", required = true) Project project,
58                                               @JsonProperty(value = "requestInfo", required = true) RequestInfo requestInfo,
59                                               @JsonProperty(value = "requestParameters", required = true) RequestParameters requestParameters) {
60         this.modelInfo = modelInfo;
61         this.owningEntity = owningEntity;
62         this.subscriberInfo = subscriberInfo;
63         this.project = project;
64         this.requestInfo = requestInfo;
65         this.requestParameters = requestParameters;
66     }
67
68     public static class  ServiceInstantiationOwningEntity{
69         public final String owningEntityId;
70         public final String owningEntityName;
71
72         public ServiceInstantiationOwningEntity(String owningEntityId, String owningEntityName) {
73             this.owningEntityId = owningEntityId;
74             this.owningEntityName = owningEntityName;
75         }
76     }
77
78     public static class RequestInfo {
79
80         @JsonInclude(NON_EMPTY) public final String instanceName;
81         @JsonInclude(NON_EMPTY) public final String productFamilyId;
82         public final String source;
83         public final boolean suppressRollback;
84         public final String requestorId;
85
86         public RequestInfo(String instanceName, String productFamilyId, String source, boolean rollbackOnFailure, String requestorId) {
87             this.instanceName = instanceName;
88             this.productFamilyId = productFamilyId;
89             this.source = source;
90             this.requestorId = requestorId;
91             // in the FE we are asking for "RollbackOnFailure" but to MSO we are passing the negative value "suppressRollback"
92             this.suppressRollback = !rollbackOnFailure;
93         }
94     }
95
96     public static class Project{
97         public final String projectName;
98
99         public Project(String projectName) {
100             this.projectName = projectName;
101         }
102     }
103
104     public static class RequestParameters {
105         @JsonInclude(NON_NULL) public final String testApi;
106         public final String subscriptionServiceType;
107         public final boolean aLaCarte;
108         public final List<? extends UserParamTypes> userParams;
109
110         public RequestParameters(String subscriptionServiceType, boolean aLaCarte, List<? extends UserParamTypes> userParams) {
111             this(subscriptionServiceType, aLaCarte, userParams, null);
112         }
113
114         public RequestParameters(String subscriptionServiceType, boolean aLaCarte, List<? extends UserParamTypes> userParams, String testApi) {
115             this.subscriptionServiceType = subscriptionServiceType;
116             this.aLaCarte = aLaCarte;
117             this.userParams = userParams;
118             this.testApi = testApi;
119         }
120     }
121
122     public static class UserParamNameAndValue implements UserParamTypes {
123         private final String name;
124         private final String value;
125
126         @JsonCreator
127         public UserParamNameAndValue(
128             @JsonProperty("name") String name,
129             @JsonProperty("value") String value
130         ) {
131             this.name = name;
132             this.value = value;
133         }
134
135         public String getName() {
136             return name;
137         }
138
139         public String getValue() {
140             return value;
141         }
142
143         @Override
144         public boolean equals(Object o) {
145             if (this == o) {
146                 return true;
147             }
148             if (!(o instanceof UserParamNameAndValue)) {
149                 return false;
150             }
151             UserParamNameAndValue that = (UserParamNameAndValue) o;
152             return Objects.equals(getName(), that.getName()) &&
153                 Objects.equals(getValue(), that.getValue());
154         }
155
156         @Override
157         public int hashCode() {
158             return Objects.hash(getName(), getValue());
159         }
160     }
161
162     public static class HomingSolution implements UserParamTypes {
163         private final String homingSolution;
164
165         public HomingSolution(String homingSolution) {
166             this.homingSolution = homingSolution;
167         }
168
169         @JsonProperty("Homing_Solution")
170         public String getHomingSolution() {
171             return homingSolution;
172         }
173     }
174
175     public static class ServiceInstantiationService implements UserParamTypes {
176         private final ServiceInstantiationServiceInner serviceInstantiationServiceInner;
177
178         public ServiceInstantiationService(ModelInfo modelInfo, String instanceName, List<Map<String, String>> instanceParams, ServiceInstantiationVnfList vnfs) {
179             serviceInstantiationServiceInner = new ServiceInstantiationServiceInner(modelInfo, instanceName, instanceParams, vnfs);
180         }
181
182         @JsonProperty("service")
183         public ServiceInstantiationServiceInner getServiceInstantiationServiceInner() {
184             return serviceInstantiationServiceInner;
185         }
186
187         private static class ServiceInstantiationServiceInner implements UserParamTypes {
188             public ModelInfo modelInfo = new ModelInfo();
189             @JsonInclude(NON_EMPTY)
190             public String instanceName;
191             public List<Map<String, String>> instanceParams;
192             public ServiceInstantiationVnfList resources;
193
194             public ServiceInstantiationServiceInner(ModelInfo modelInfo, String instanceName, List<Map<String, String>> instanceParams, ServiceInstantiationVnfList vnfs) {
195                 this.modelInfo.setModelType(modelInfo.getModelType());
196                 this.modelInfo.setModelName(modelInfo.getModelName());
197                 this.modelInfo.setModelVersionId(modelInfo.getModelVersionId());
198                 this.instanceName = instanceName;
199                 this.instanceParams = instanceParams;
200                 this.resources = vnfs;
201             }
202         }
203     }
204
205     public static class ServiceInstantiationVnfList{
206         public final List<ServiceInstantiationVnf> vnfs;
207
208         public ServiceInstantiationVnfList(List<ServiceInstantiationVnf> vnfList) {
209             this.vnfs = vnfList;
210         }
211     }
212
213     public static class ServiceInstantiationVnf{
214         public final ModelInfo modelInfo;
215         public final CloudConfiguration cloudConfiguration;
216         public final Platform platform;
217         public final LineOfBusiness lineOfBusiness;
218         public final String productFamilyId;
219         public final List<Map<String, String>>  instanceParams;
220         @JsonInclude(NON_EMPTY) public final List<VfModuleMacro> vfModules;
221         @JsonInclude(NON_EMPTY) public final String instanceName;
222
223         public ServiceInstantiationVnf(ModelInfo modelInfo, CloudConfiguration cloudConfiguration, String platform, String lineOfBusiness, String productFamilyId, List<Map<String, String>>  instanceParams, List<VfModuleMacro> vfModules, String instanceName) {
224             this.modelInfo = modelInfo;
225             this.cloudConfiguration = cloudConfiguration;
226             this.platform = new Platform(platform);
227             this.lineOfBusiness = new LineOfBusiness(lineOfBusiness);
228             this.productFamilyId = productFamilyId;
229             this.instanceParams = instanceParams;
230             this.vfModules = vfModules;
231             this.instanceName = instanceName;
232         }
233     }
234
235     public static class Platform{
236         public final String platformName;
237
238         public Platform(String platformName) {
239             this.platformName = platformName;
240         }
241     }
242
243     public static class LineOfBusiness{
244         public final String lineOfBusinessName;
245
246         public LineOfBusiness(String lineOfBusiness) {
247             this.lineOfBusinessName = lineOfBusiness;
248         }
249     }
250 }
251