Update license header in appc-inbound files
[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.GETDESIGNS;
34 import static org.onap.appc.design.services.util.DesignServiceConstants.GETSTATUS;
35 import static org.onap.appc.design.services.util.DesignServiceConstants.PROTOCOL;
36 import static org.onap.appc.design.services.util.DesignServiceConstants.SETINCART;
37 import static org.onap.appc.design.services.util.DesignServiceConstants.SETPROTOCOLREFERENCE;
38 import static org.onap.appc.design.services.util.DesignServiceConstants.SETSTATUS;
39 import static org.onap.appc.design.services.util.DesignServiceConstants.STATUS;
40 import static org.onap.appc.design.services.util.DesignServiceConstants.UPLOADARTIFACT;
41 import static org.onap.appc.design.services.util.DesignServiceConstants.USER_ID;
42 import static org.onap.appc.design.services.util.DesignServiceConstants.VNF_TYPE;
43
44 import com.att.eelf.configuration.EELFLogger;
45 import com.att.eelf.configuration.EELFManager;
46 import com.fasterxml.jackson.databind.JsonNode;
47 import com.fasterxml.jackson.databind.ObjectMapper;
48 import java.io.IOException;
49
50 public class RequestValidator {
51
52     private static final EELFLogger log = EELFManager.getInstance().getLogger(RequestValidator.class);
53
54     private RequestValidator() {
55     }
56
57     public static void validate(String action, String payload) throws RequestValidationException, IOException {
58         log.info("payload" + payload);
59         ObjectMapper objectMapper = new ObjectMapper();
60         JsonNode payloadObject = objectMapper.readTree(payload);
61         log.info("payloadObject" + payloadObject.get(ARTIFACT_CONTENTS));
62
63         String errorString;
64         switch (action) {
65             case GETDESIGNS:
66                 errorString = resolveGetDesignsErrorString(payloadObject);
67                 break;
68             case GETARTIFACT:
69                 errorString = resolveGetArtifactErrorString(payloadObject);
70                 break;
71             case GETSTATUS:
72                 errorString = resolveGetStatusErrorString(payloadObject);
73                 break;
74             case SETSTATUS:
75                 errorString = resolveSetStatusErrorString(payloadObject);
76                 break;
77             case UPLOADARTIFACT:
78                 errorString = resolveUploadArtifactErrorString(payloadObject);
79                 break;
80             case SETPROTOCOLREFERENCE:
81             case SETINCART:
82                 errorString = resolveErrorString(payloadObject);
83                 break;
84             default:
85                 throw new RequestValidationException(" Action " + action + " not found while processing request ");
86         }
87         checkForErrorString(errorString);
88     }
89
90     private static void checkForErrorString(String errorString) throws RequestValidationException {
91         if (errorString != null) {
92             throw new RequestValidationException(" Missing input parameter :-" + errorString + " -:");
93         }
94     }
95
96     private static String resolveGetDesignsErrorString(JsonNode payloadObject) {
97         return nullOrEmpty(payloadObject, USER_ID) ? USER_ID : null;
98     }
99
100     private static String resolveErrorString(JsonNode payloadObject) {
101         if (nullOrEmpty(payloadObject, ACTION)) {
102             return ACTION;
103         } else if (nullOrEmpty(payloadObject, ACTION_LEVEL)) {
104             return ACTION_LEVEL;
105         } else if (nullOrEmpty(payloadObject, VNF_TYPE)) {
106             return VNF_TYPE;
107         } else if (nullOrEmpty(payloadObject, PROTOCOL)) {
108             return PROTOCOL;
109         }
110         return null;
111     }
112
113     private static String resolveUploadArtifactErrorString(JsonNode payloadObject) {
114         if (nullOrEmpty(payloadObject, ARTIFACT_NAME)) {
115             return ARTIFACT_NAME;
116         } else if (doesNotContainReference(payloadObject)) {
117             return ACTION;
118         } else if (nullOrEmpty(payloadObject, ARTIFACT_VERSOIN)) {
119             return ARTIFACT_VERSOIN;
120         } else if (payloadObject.get(ARTIFACT_CONTENTS) == null) {
121             return ARTIFACT_CONTENTS;
122         } else if (nullOrEmpty(payloadObject, ARTIFACT_TYPE)) {
123             return ARTIFACT_TYPE;
124         } else if (nullOrEmpty(payloadObject, VNF_TYPE)) {
125             return VNF_TYPE;
126         }
127         return null;
128     }
129
130     private static boolean doesNotContainReference(JsonNode payloadObject) {
131         return
132             !payloadObject.get(ARTIFACT_NAME).textValue().contains("reference")
133                 && nullOrEmpty(payloadObject, ARTIFACT_NAME);
134     }
135
136     private static String resolveSetStatusErrorString(JsonNode payloadObject) {
137         if (nullOrEmpty(payloadObject, USER_ID)) {
138             return USER_ID;
139         } else if (nullOrEmpty(payloadObject, VNF_TYPE)) {
140             return VNF_TYPE;
141         } else if (nullOrEmpty(payloadObject, ACTION)) {
142             return ACTION;
143         } else if (nullOrEmpty(payloadObject, ARTIFACT_TYPE)) {
144             return ARTIFACT_TYPE;
145         } else if (nullOrEmpty(payloadObject, STATUS)) {
146             return STATUS;
147         }
148         return null;
149     }
150
151     private static String resolveGetStatusErrorString(JsonNode payloadObject) {
152         if (nullOrEmpty(payloadObject, USER_ID)) {
153             return USER_ID;
154         } else if (nullOrEmpty(payloadObject, VNF_TYPE)) {
155             return VNF_TYPE;
156         }
157         return null;
158     }
159
160     private static String resolveGetArtifactErrorString(JsonNode payloadObject) {
161         if (nullOrEmpty(payloadObject, VNF_TYPE)) {
162             return VNF_TYPE;
163         } else if (nullOrEmpty(payloadObject, ARTIFACT_TYPE)) {
164             return ARTIFACT_TYPE;
165         } else if (nullOrEmpty(payloadObject, ARTIFACT_NAME)) {
166             return ARTIFACT_NAME;
167         }
168         return null;
169     }
170
171     private static boolean nullOrEmpty(JsonNode payloadObject, String param) {
172         return payloadObject.get(param) == null || payloadObject
173             .get(param).textValue().isEmpty();
174     }
175
176 }
177
178