2 * Copyright (c) 2012-2013 NEC Corporation
5 * This program and the accompanying materials are made available under the
6 * terms of the Eclipse Public License v1.0 which accompanies this
7 * distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.vtn.javaapi.validation.logical;
11 import com.google.gson.JsonObject;
12 import org.opendaylight.vtn.core.util.Logger;
13 import org.opendaylight.vtn.javaapi.constants.VtnServiceConsts;
14 import org.opendaylight.vtn.javaapi.constants.VtnServiceJsonConsts;
15 import org.opendaylight.vtn.javaapi.exception.VtnServiceException;
16 import org.opendaylight.vtn.javaapi.ipc.enums.UncJavaAPIErrorCode;
17 import org.opendaylight.vtn.javaapi.resources.AbstractResource;
18 import org.opendaylight.vtn.javaapi.resources.logical.VTunnelResource;
19 import org.opendaylight.vtn.javaapi.resources.logical.VTunnelsResource;
20 import org.opendaylight.vtn.javaapi.validation.CommonValidator;
21 import org.opendaylight.vtn.javaapi.validation.VtnServiceValidator;
24 * The Class VTunnelResourceValidator validates request Json object for Vtunnel
27 public class VTunnelResourceValidator extends VtnServiceValidator {
29 private static final Logger LOG = Logger
30 .getLogger(VTunnelResourceValidator.class.getName());
32 private final AbstractResource resource;
33 final CommonValidator validator = new CommonValidator();
36 * Instantiates a new v tunnel resource validator.
39 * the instance of AbstractResource
41 public VTunnelResourceValidator(final AbstractResource resource) {
42 this.resource = resource;
46 * Validate uri parameters for VTunnel API.
48 * @return true, if successful
51 public boolean validateUri() {
52 LOG.trace("Start VTunnelResourceValidator#validateUri()");
53 boolean isValid = false;
54 setInvalidParameter(VtnServiceJsonConsts.URI
55 + VtnServiceJsonConsts.VTNNAME);
56 if (resource instanceof VTunnelsResource
57 && ((VTunnelsResource) resource).getVtnName() != null
58 && !((VTunnelsResource) resource).getVtnName().trim().isEmpty()) {
59 isValid = validator.isValidMaxLengthAlphaNum(
60 ((VTunnelsResource) resource).getVtnName().trim(),
61 VtnServiceJsonConsts.LEN_31);
63 } else if (resource instanceof VTunnelResource
64 && ((VTunnelResource) resource).getVtnName() != null
65 && !((VTunnelResource) resource).getVtnName().trim().isEmpty()) {
66 isValid = validator.isValidMaxLengthAlphaNum(
67 ((VTunnelResource) resource).getVtnName().trim(),
68 VtnServiceJsonConsts.LEN_31);
70 setInvalidParameter(VtnServiceJsonConsts.URI
71 + VtnServiceJsonConsts.VTUNNELNAME);
72 if (((VTunnelResource) resource).getvTunnelName() != null
73 && !((VTunnelResource) resource).getvTunnelName()
75 isValid = validator.isValidMaxLengthAlphaNum(
76 ((VTunnelResource) resource).getvTunnelName()
77 .trim(), VtnServiceJsonConsts.LEN_31);
84 LOG.trace("Complete VTunnelResourceValidator#validateUri()");
89 * Validate request Json object for get, put and post method of VTunnel API.
92 public void validate(final String method, final JsonObject requestBody)
93 throws VtnServiceException {
94 LOG.trace("Start VTunnelResource#validate()");
95 LOG.info("Validating request for " + method
96 + " of VTunnelResourceValidator");
97 boolean isValid = false;
99 isValid = validateUri();
100 if (isValid && requestBody != null
101 && VtnServiceConsts.GET.equals(method)) {
102 isValid = validator.isValidGet(requestBody, isListOpFlag());
103 setInvalidParameter(validator.getInvalidParameter());
104 updateOpParameterForList(requestBody);
105 } else if (isValid && requestBody != null
106 && VtnServiceConsts.POST.equals(method)) {
107 isValid = validatePost(requestBody);
108 } else if (isValid && requestBody != null
109 && VtnServiceConsts.PUT.equals(method)) {
110 isValid = validatePut(requestBody);
111 } else if (isValid) {
112 setInvalidParameter(VtnServiceConsts.INCORRECT_METHOD_INVOCATION);
115 } catch (final NumberFormatException e) {
116 LOG.error("Inside catch:NumberFormatException");
117 if (method.equals(VtnServiceConsts.GET)) {
118 setInvalidParameter(validator.getInvalidParameter());
121 } catch (final ClassCastException e) {
122 if (method.equals(VtnServiceConsts.GET)) {
123 setInvalidParameter(validator.getInvalidParameter());
125 LOG.error("Inside catch:ClassCastException");
128 // Throws exception if validation fails
130 LOG.error("Validation failed");
131 throw new VtnServiceException(Thread.currentThread()
132 .getStackTrace()[1].getMethodName(),
133 UncJavaAPIErrorCode.VALIDATION_ERROR.getErrorCode(),
134 UncJavaAPIErrorCode.VALIDATION_ERROR.getErrorMessage());
136 LOG.info("Validation successful");
137 LOG.trace("Complete VTunnelResourceValidator#validate()");
141 * Validate post request Json object for VTunnel API
144 * the request Json object
145 * @return true, if successful
146 * @throws VtnServiceException
147 * the vtn service exception
149 private boolean validatePost(final JsonObject requestBody)
150 throws VtnServiceException {
151 LOG.trace("Start VTunnelResourceValidator#validatePost()");
152 boolean isValid = false;
153 setInvalidParameter(VtnServiceJsonConsts.VTUNNEL);
154 if (requestBody.has(VtnServiceJsonConsts.VTUNNEL)
155 && requestBody.get(VtnServiceJsonConsts.VTUNNEL).isJsonObject()) {
156 final JsonObject vTunnel = requestBody
157 .getAsJsonObject(VtnServiceJsonConsts.VTUNNEL);
158 // validation for key: vtunnel_name(mandatory)
159 setInvalidParameter(VtnServiceJsonConsts.VTUNNELNAME);
160 if (vTunnel.has(VtnServiceJsonConsts.VTUNNELNAME)
161 && vTunnel.getAsJsonPrimitive(
162 VtnServiceJsonConsts.VTUNNELNAME).getAsString() != null) {
163 isValid = validator.isValidMaxLengthAlphaNum(vTunnel
164 .getAsJsonPrimitive(VtnServiceJsonConsts.VTUNNELNAME)
165 .getAsString().trim(), VtnServiceJsonConsts.LEN_31);
167 // validation for key: controller_id(mandatory)
169 setInvalidParameter(VtnServiceJsonConsts.CONTROLLERID);
170 if (vTunnel.has(VtnServiceJsonConsts.CONTROLLERID)
171 && vTunnel.getAsJsonPrimitive(
172 VtnServiceJsonConsts.CONTROLLERID)
173 .getAsString() != null) {
174 isValid = validator.isValidMaxLengthAlphaNum(
175 vTunnel.getAsJsonPrimitive(
176 VtnServiceJsonConsts.CONTROLLERID)
177 .getAsString().trim(),
178 VtnServiceJsonConsts.LEN_31);
184 // validation for key: description(optional), vtn_name(optional), vtepgroup_name(optional), label(optional)
185 isValid = commonValidations(isValid, vTunnel);
187 // validation for key: DomainId(optional)
189 setInvalidParameter(VtnServiceJsonConsts.DOMAINID);
190 if (vTunnel.has(VtnServiceJsonConsts.DOMAINID)
191 && vTunnel.getAsJsonPrimitive(
192 VtnServiceJsonConsts.DOMAINID).getAsString() != null) {
193 isValid = validator.isValidDomainId(vTunnel
194 .getAsJsonPrimitive(VtnServiceJsonConsts.DOMAINID)
195 .getAsString().trim(), VtnServiceJsonConsts.LEN_31);
201 LOG.trace("complete VTunnelResourceValidator#validatePost()");
210 private boolean commonValidations(boolean isValid, final JsonObject vTunnel) {
211 LOG.trace("Start VTunnelResourceValidator#commonValidations()");
212 // validation for key: description(optional)
213 setInvalidParameter(VtnServiceJsonConsts.DESCRIPTION);
214 if (vTunnel.has(VtnServiceJsonConsts.DESCRIPTION)
215 && vTunnel.getAsJsonPrimitive(
216 VtnServiceJsonConsts.DESCRIPTION).getAsString() != null) {
217 isValid = validator.isValidMaxLength(
218 vTunnel.getAsJsonPrimitive(
219 VtnServiceJsonConsts.DESCRIPTION)
220 .getAsString().trim(),
221 VtnServiceJsonConsts.LEN_127)
224 VtnServiceJsonConsts.DESCRIPTION)
225 .getAsString().trim().isEmpty();
227 // validation for key: vtn_name(optional)
229 setInvalidParameter(VtnServiceJsonConsts.VTNNAME);
230 if (vTunnel.has(VtnServiceJsonConsts.VTNNAME)
231 && vTunnel.getAsJsonPrimitive(
232 VtnServiceJsonConsts.VTNNAME).getAsString() != null) {
233 isValid = validator.isValidMaxLengthAlphaNum(vTunnel
234 .getAsJsonPrimitive(VtnServiceJsonConsts.VTNNAME)
235 .getAsString().trim(), VtnServiceJsonConsts.LEN_31)
238 VtnServiceJsonConsts.VTNNAME)
239 .getAsString().trim().isEmpty();
242 // validation for key: vtepgroup_name(optional)
244 setInvalidParameter(VtnServiceJsonConsts.VTEPGROUPNAME);
245 if (vTunnel.has(VtnServiceJsonConsts.VTEPGROUPNAME)
246 && vTunnel.getAsJsonPrimitive(
247 VtnServiceJsonConsts.VTEPGROUPNAME)
248 .getAsString() != null) {
249 isValid = validator.isValidMaxLengthAlphaNum(
250 vTunnel.getAsJsonPrimitive(
251 VtnServiceJsonConsts.VTEPGROUPNAME)
252 .getAsString().trim(),
253 VtnServiceJsonConsts.LEN_31)
256 VtnServiceJsonConsts.VTEPGROUPNAME)
257 .getAsString().trim().isEmpty();
260 // validation for key: label(optional)
262 setInvalidParameter(VtnServiceJsonConsts.LABEL);
263 if (isValid && vTunnel.has(VtnServiceJsonConsts.LABEL)) {
264 isValid = validator.isValidRange(
265 vTunnel.getAsJsonPrimitive(VtnServiceJsonConsts.LABEL)
266 .getAsString().trim(),
267 VtnServiceJsonConsts.LONG_VAL_0,
268 VtnServiceJsonConsts.LONG_VAL_4294967295);
271 LOG.trace("complete VTunnelResourceValidator#commonValidations()");
276 * Validate put request Json object for VTunnelResource
279 * the request Json object
280 * @return true, if successful
281 * @throws VtnServiceException
282 * the vtn service exception
284 private boolean validatePut(final JsonObject requestBody)
285 throws VtnServiceException {
286 LOG.trace("Start VTunnelResourceValidator#validatePost()");
287 boolean isValid = false;
288 setInvalidParameter(VtnServiceJsonConsts.VTUNNEL);
289 if (requestBody.has(VtnServiceJsonConsts.VTUNNEL)
290 && requestBody.get(VtnServiceJsonConsts.VTUNNEL).isJsonObject()) {
292 final JsonObject vTunnel = requestBody
293 .getAsJsonObject(VtnServiceJsonConsts.VTUNNEL);
294 // validation for key: description(optional), vtn_name(optional), vtepgroup_name(optional), label(optional)
295 isValid = commonValidations(isValid, vTunnel);
296 // validation for key: controller_id(optional)
298 setInvalidParameter(VtnServiceJsonConsts.CONTROLLERID);
299 if (vTunnel.has(VtnServiceJsonConsts.CONTROLLERID)
300 && vTunnel.getAsJsonPrimitive(
301 VtnServiceJsonConsts.CONTROLLERID)
302 .getAsString() != null && !vTunnel
304 VtnServiceJsonConsts.CONTROLLERID)
305 .getAsString().trim().isEmpty()) {
306 isValid = validator.isValidMaxLengthAlphaNum(
307 vTunnel.getAsJsonPrimitive(
308 VtnServiceJsonConsts.CONTROLLERID)
309 .getAsString().trim(),
310 VtnServiceJsonConsts.LEN_31);
313 // validation for key: DomainId(optional)
315 setInvalidParameter(VtnServiceJsonConsts.DOMAINID);
316 if (vTunnel.has(VtnServiceJsonConsts.DOMAINID)
317 && vTunnel.getAsJsonPrimitive(
318 VtnServiceJsonConsts.DOMAINID).getAsString() != null && !vTunnel
320 VtnServiceJsonConsts.DOMAINID)
321 .getAsString().trim().isEmpty()) {
322 isValid = validator.isValidDomainId(vTunnel
323 .getAsJsonPrimitive(VtnServiceJsonConsts.DOMAINID)
324 .getAsString().trim(), VtnServiceJsonConsts.LEN_31);
328 LOG.trace("Complete VTunnelResourceValidator#validatePost()");