Changes for design service
[appc.git] / appc-inbound / appc-design-services / provider / src / main / java / org / onap / appc / design / dbervices / RequestValidator.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP : APPC
4  * ================================================================================
5  * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Copyright (C) 2017 Amdocs
8  * =============================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * 
21  * ============LICENSE_END=========================================================
22  */
23
24 package org.onap.appc.design.dbervices;
25
26 import static org.onap.appc.design.services.util.DesignServiceConstants.ACTION;
27 import static org.onap.appc.design.services.util.DesignServiceConstants.ACTION_LEVEL;
28 import static org.onap.appc.design.services.util.DesignServiceConstants.ARTIFACT_CONTENTS;
29 import static org.onap.appc.design.services.util.DesignServiceConstants.ARTIFACT_NAME;
30 import static org.onap.appc.design.services.util.DesignServiceConstants.ARTIFACT_TYPE;
31 import static org.onap.appc.design.services.util.DesignServiceConstants.ARTIFACT_VERSOIN;
32 import static org.onap.appc.design.services.util.DesignServiceConstants.GETARTIFACT;
33 import static org.onap.appc.design.services.util.DesignServiceConstants.GETAPPCTIMESTAMPUTC;
34 import static org.onap.appc.design.services.util.DesignServiceConstants.GETDESIGNS;
35 import static org.onap.appc.design.services.util.DesignServiceConstants.GETSTATUS;
36 import static org.onap.appc.design.services.util.DesignServiceConstants.PROTOCOL;
37 import static org.onap.appc.design.services.util.DesignServiceConstants.SETINCART;
38 import static org.onap.appc.design.services.util.DesignServiceConstants.SETPROTOCOLREFERENCE;
39 import static org.onap.appc.design.services.util.DesignServiceConstants.SETSTATUS;
40 import static org.onap.appc.design.services.util.DesignServiceConstants.STATUS;
41 import static org.onap.appc.design.services.util.DesignServiceConstants.UPLOADARTIFACT;
42 import static org.onap.appc.design.services.util.DesignServiceConstants.USER_ID;
43 import static org.onap.appc.design.services.util.DesignServiceConstants.VNF_TYPE;
44
45 import com.att.eelf.configuration.EELFLogger;
46 import com.att.eelf.configuration.EELFManager;
47 import com.fasterxml.jackson.databind.JsonNode;
48 import com.fasterxml.jackson.databind.ObjectMapper;
49 import java.io.IOException;
50
51 import org.onap.appc.design.services.util.DesignServiceConstants;
52
53 public class RequestValidator {
54
55     private static final EELFLogger log = EELFManager.getInstance().getLogger(RequestValidator.class);
56
57     private RequestValidator() {
58     }
59
60     public static void validate(String action, String payload) throws RequestValidationException, IOException {
61         log.info("validate: action:"  +  action );
62         log.info("validate: payload:" + payload);
63         ObjectMapper objectMapper = new ObjectMapper();
64         JsonNode payloadObject = objectMapper.readTree(payload);
65         log.info("payloadObject:" + payloadObject.get(ARTIFACT_CONTENTS));
66
67         String errorString= null;
68         switch (action) {
69             case GETDESIGNS:
70                 errorString = resolveGetDesignsErrorString(payloadObject);
71                 break;
72             case GETAPPCTIMESTAMPUTC:
73                 log.info("validate: No payload validation needed for Timestamp.");
74                 break;
75             case GETARTIFACT:
76                 errorString = resolveGetArtifactErrorString(payloadObject);
77                 break;
78             case GETSTATUS:
79                 errorString = resolveGetStatusErrorString(payloadObject);
80                 break;
81             case SETSTATUS:
82                 errorString = resolveSetStatusErrorString(payloadObject);
83                 break;
84             case UPLOADARTIFACT:
85                 errorString = resolveUploadArtifactErrorString(payloadObject);
86                 break;
87             case DesignServiceConstants.UPLOADADMINARTIFACT:
88                 errorString = resolveUploadArtifactErrorString(payloadObject);
89                 break;
90             case SETPROTOCOLREFERENCE:
91             case SETINCART:
92                 errorString = resolveErrorString(payloadObject);
93                 break;
94             case DesignServiceConstants.CHECKVNF:
95                 errorString = resolveCheckVNFErrorString(payloadObject);
96                 break;
97             default:
98                 throw new RequestValidationException(" Action " + action + " not found while processing request ");
99         }
100         checkForErrorString(errorString);
101     }
102
103     private static String resolveCheckVNFErrorString(JsonNode payloadObject) {
104         if (nullOrEmpty(payloadObject, VNF_TYPE)) 
105             return VNF_TYPE;
106         return null;
107     }
108
109     private static void checkForErrorString(String errorString) throws RequestValidationException {
110         if (errorString != null) {
111             throw new RequestValidationException(" Missing input parameter :-" + errorString + " -:");
112         }
113     }
114
115     private static String resolveGetDesignsErrorString(JsonNode payloadObject) {
116         return nullOrEmpty(payloadObject, USER_ID) ? USER_ID : null;
117     }
118
119     private static String resolveErrorString(JsonNode payloadObject) {
120         if (nullOrEmpty(payloadObject, ACTION)) {
121             return ACTION;
122         } else if (nullOrEmpty(payloadObject, ACTION_LEVEL)) {
123             return ACTION_LEVEL;
124         } else if (nullOrEmpty(payloadObject, VNF_TYPE)) {
125             return VNF_TYPE;
126         } else if (nullOrEmpty(payloadObject, PROTOCOL)) {
127             return PROTOCOL;
128         }
129         return null;
130     }
131
132     private static String resolveUploadArtifactErrorString(JsonNode payloadObject) {
133         if (nullOrEmpty(payloadObject, ARTIFACT_NAME)) {
134             return ARTIFACT_NAME;
135         } else if (doesNotContainReference(payloadObject)) {
136             return ACTION;
137         } else if (nullOrEmpty(payloadObject, ARTIFACT_VERSOIN)) {
138             return ARTIFACT_VERSOIN;
139         } else if (payloadObject.get(ARTIFACT_CONTENTS) == null) {
140             return ARTIFACT_CONTENTS;
141         } else if (nullOrEmpty(payloadObject, ARTIFACT_TYPE)) {
142             return ARTIFACT_TYPE;
143         } else if (nullOrEmpty(payloadObject, VNF_TYPE)) {
144             return VNF_TYPE;
145         }
146         return null;
147     }
148
149     private static boolean doesNotContainReference(JsonNode payloadObject) {
150         return
151             !payloadObject.get(ARTIFACT_NAME).textValue().contains("reference")
152                 && nullOrEmpty(payloadObject, ARTIFACT_NAME);
153     }
154
155     private static String resolveSetStatusErrorString(JsonNode payloadObject) {
156         if (nullOrEmpty(payloadObject, USER_ID)) {
157             return USER_ID;
158         } else if (nullOrEmpty(payloadObject, VNF_TYPE)) {
159             return VNF_TYPE;
160         } else if (nullOrEmpty(payloadObject, ACTION)) {
161             return ACTION;
162         } else if (nullOrEmpty(payloadObject, ARTIFACT_TYPE)) {
163             return ARTIFACT_TYPE;
164         } else if (nullOrEmpty(payloadObject, STATUS)) {
165             return STATUS;
166         }
167         return null;
168     }
169
170     private static String resolveGetStatusErrorString(JsonNode payloadObject) {
171         if (nullOrEmpty(payloadObject, USER_ID)) {
172             return USER_ID;
173         } else if (nullOrEmpty(payloadObject, VNF_TYPE)) {
174             return VNF_TYPE;
175         }
176         return null;
177     }
178
179     private static String resolveGetArtifactErrorString(JsonNode payloadObject) {
180         if (nullOrEmpty(payloadObject, VNF_TYPE)) {
181             return VNF_TYPE;
182         } else if (nullOrEmpty(payloadObject, ARTIFACT_TYPE)) {
183             return ARTIFACT_TYPE;
184         } else if (nullOrEmpty(payloadObject, ARTIFACT_NAME)) {
185             return ARTIFACT_NAME;
186         }
187         return null;
188     }
189
190     private static boolean nullOrEmpty(JsonNode payloadObject, String param) {
191         JsonNode payload = payloadObject.get(param);
192         return payload == null || payload.textValue().trim().isEmpty();
193     }
194
195 }
196
197