Merge from ECOMP's repository
[vid.git] / vid-app-common / src / main / java / org / onap / vid / mso / model / ServiceInstantiationRequestDetails.java
1 package org.onap.vid.mso.model;
2
3 import com.fasterxml.jackson.annotation.JsonInclude;
4 import com.fasterxml.jackson.annotation.JsonProperty;
5 import org.onap.vid.mso.rest.SubscriberInfo;
6
7 import java.util.List;
8 import java.util.Map;
9
10 import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY;
11 import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
12
13 public class ServiceInstantiationRequestDetails {
14
15     @JsonProperty("modelInfo")
16     private ModelInfo modelInfo;
17
18     @JsonProperty("owningEntity")
19     private ServiceInstantiationOwningEntity owningEntity;
20
21     @JsonProperty("subscriberInfo")
22     private SubscriberInfo subscriberInfo;
23
24     @JsonProperty("project")
25     private Project project;
26
27     @JsonProperty("requestParameters")
28     private RequestParameters requestParameters;
29
30     @JsonProperty("requestInfo")
31     private RequestInfo requestInfo;
32
33     public ServiceInstantiationRequestDetails(@JsonProperty(value = "modelInfo", required = true) ModelInfo modelInfo,
34                                               @JsonProperty(value = "owningEntity", required = true) ServiceInstantiationOwningEntity owningEntity,
35                                               @JsonProperty(value = "subscriberInfo", required = true) SubscriberInfo subscriberInfo,
36                                               @JsonProperty(value = "project", required = true) Project project,
37                                               @JsonProperty(value = "requestInfo", required = true) RequestInfo requestInfo,
38                                               @JsonProperty(value = "requestParameters", required = true) RequestParameters requestParameters) {
39         this.modelInfo = modelInfo;
40         this.owningEntity = owningEntity;
41         this.subscriberInfo = subscriberInfo;
42         this.project = project;
43         this.requestInfo = requestInfo;
44         this.requestParameters = requestParameters;
45     }
46
47     public static class  ServiceInstantiationOwningEntity{
48         public final String owningEntityId;
49         public final String owningEntityName;
50
51         public ServiceInstantiationOwningEntity(String owningEntityId, String owningEntityName) {
52             this.owningEntityId = owningEntityId;
53             this.owningEntityName = owningEntityName;
54         }
55     }
56
57     public static class RequestInfo {
58
59         @JsonInclude(NON_NULL) public final String instanceName;
60         @JsonInclude(NON_NULL) public final String productFamilyId;
61         public final String source;
62         public final boolean suppressRollback;
63         public final String requestorId;
64
65         public RequestInfo(String instanceName, String productFamilyId, String source, boolean rollbackOnFailure, String requestorId) {
66             this.instanceName = instanceName;
67             this.productFamilyId = productFamilyId;
68             this.source = source;
69             this.requestorId = requestorId;
70             // in the FE we are asking for "RollbackOnFailure" but to MSO we are passing the negative value "suppressRollback"
71             this.suppressRollback = !rollbackOnFailure;
72         }
73     }
74
75     public static class Project{
76         public final String projectName;
77
78         public Project(String projectName) {
79             this.projectName = projectName;
80         }
81     }
82
83     public static class RequestParameters {
84         @JsonInclude(NON_NULL) public final String testApi;
85         public final String subscriptionServiceType;
86         public final boolean aLaCarte;
87         public final List<? extends UserParamTypes> userParams;
88
89         public RequestParameters(String subscriptionServiceType, boolean aLaCarte, List<? extends UserParamTypes> userParams) {
90             this(subscriptionServiceType, aLaCarte, userParams, null);
91         }
92
93         public RequestParameters(String subscriptionServiceType, boolean aLaCarte, List<? extends UserParamTypes> userParams, String testApi) {
94             this.subscriptionServiceType = subscriptionServiceType;
95             this.aLaCarte = aLaCarte;
96             this.userParams = userParams;
97             this.testApi = testApi;
98         }
99     }
100
101     public static class UserParamNameAndValue implements UserParamTypes {
102         private final String name;
103         private final String value;
104
105         public UserParamNameAndValue(String name, String value) {
106             this.name = name;
107             this.value = value;
108         }
109
110         public String getName() {
111             return name;
112         }
113
114         public String getValue() {
115             return value;
116         }
117     }
118
119     public static class ServiceInstantiationService implements UserParamTypes {
120         private final ServiceInstantiationServiceInner serviceInstantiationServiceInner;
121
122         public ServiceInstantiationService(ModelInfo modelInfo, String instanceName, List<Map<String, String>> instanceParams, ServiceInstantiationVnfList vnfs) {
123             serviceInstantiationServiceInner = new ServiceInstantiationServiceInner(modelInfo, instanceName, instanceParams, vnfs);
124         }
125
126         @JsonProperty("service")
127         public ServiceInstantiationServiceInner getServiceInstantiationServiceInner() {
128             return serviceInstantiationServiceInner;
129         }
130
131         private static class ServiceInstantiationServiceInner implements UserParamTypes {
132             public ModelInfo modelInfo = new ModelInfo();
133             @JsonInclude(NON_NULL)
134             public String instanceName;
135             public List<Map<String, String>> instanceParams;
136             public ServiceInstantiationVnfList resources;
137
138             public ServiceInstantiationServiceInner(ModelInfo modelInfo, String instanceName, List<Map<String, String>> instanceParams, ServiceInstantiationVnfList vnfs) {
139                 this.modelInfo.setModelType(modelInfo.getModelType());
140                 this.modelInfo.setModelName(modelInfo.getModelName());
141                 this.modelInfo.setModelVersionId(modelInfo.getModelVersionId());
142                 this.instanceName = instanceName;
143                 this.instanceParams = instanceParams;
144                 this.resources = vnfs;
145             }
146         }
147     }
148
149     public static class ServiceInstantiationVnfList{
150         public final List<ServiceInstantiationVnf> vnfs;
151
152         public ServiceInstantiationVnfList(List<ServiceInstantiationVnf> vnfList) {
153             this.vnfs = vnfList;
154         }
155     }
156
157     public static class ServiceInstantiationVnf{
158         public final ModelInfo modelInfo;
159         public final CloudConfiguration cloudConfiguration;
160         public final Platform platform;
161         public final LineOfBusiness lineOfBusiness;
162         public final String productFamilyId;
163         public final List<Map<String, String>>  instanceParams;
164         @JsonInclude(NON_EMPTY) public final List<VfModuleMacro> vfModules;
165         @JsonInclude(NON_NULL) public final String instanceName;
166
167         public ServiceInstantiationVnf(ModelInfo modelInfo, CloudConfiguration cloudConfiguration, String platform, String lineOfBusiness, String productFamilyId, List<Map<String, String>>  instanceParams, List<VfModuleMacro> vfModules, String instanceName) {
168             this.modelInfo = modelInfo;
169             this.cloudConfiguration = cloudConfiguration;
170             this.platform = new Platform(platform);
171             this.lineOfBusiness = new LineOfBusiness(lineOfBusiness);
172             this.productFamilyId = productFamilyId;
173             this.instanceParams = instanceParams;
174             this.vfModules = vfModules;
175             this.instanceName = instanceName;
176         }
177     }
178
179     public static class Platform{
180         public final String platformName;
181
182         public Platform(String platformName) {
183             this.platformName = platformName;
184         }
185     }
186
187     public static class LineOfBusiness{
188         public final String lineOfBusinessName;
189
190         public LineOfBusiness(String lineOfBusiness) {
191             this.lineOfBusinessName = lineOfBusiness;
192         }
193     }
194 }
195