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.VlanMapResource;
19 import org.opendaylight.vtn.javaapi.resources.logical.VlanMapsResource;
20 import org.opendaylight.vtn.javaapi.validation.CommonValidator;
21 import org.opendaylight.vtn.javaapi.validation.VtnServiceValidator;
24 * The Class VLanMapResourceValidator validates request Json Object for VlanMap
27 public class VLanMapResourceValidator extends VtnServiceValidator {
29 private static final Logger LOG = Logger
30 .getLogger(VLanMapResourceValidator.class.getName());
32 private final AbstractResource resource;
33 final CommonValidator validator = new CommonValidator();
36 * Instantiates a new vlan map resource validator.
39 * the instance of AbstractResource
41 public VLanMapResourceValidator(final AbstractResource resource) {
42 this.resource = resource;
46 * Validate uri parameters for VLanMap API.
48 * @return true, if successful
51 public boolean validateUri() {
52 LOG.trace("Start VLanMapResourceValidator#validateUri()");
53 boolean isValid = false;
54 setInvalidParameter(VtnServiceJsonConsts.URI
55 + VtnServiceJsonConsts.VTNNAME);
56 if (resource instanceof VlanMapsResource
57 && ((VlanMapsResource) resource).getVtnName() != null
58 && !((VlanMapsResource) resource).getVtnName().trim().isEmpty()) {
59 isValid = validator.isValidMaxLengthAlphaNum(
60 ((VlanMapsResource) resource).getVtnName().trim(),
61 VtnServiceJsonConsts.LEN_31);
63 setInvalidParameter(VtnServiceJsonConsts.URI
64 + VtnServiceJsonConsts.VBRNAME);
65 if (((VlanMapsResource) resource).getVbrName() != null
66 && !((VlanMapsResource) resource).getVbrName().trim()
68 isValid = validator.isValidMaxLengthAlphaNum(
69 ((VlanMapsResource) resource).getVbrName().trim(),
70 VtnServiceJsonConsts.LEN_31);
76 } else if (resource instanceof VlanMapResource
77 && ((VlanMapResource) resource).getVtnName() != null
78 && !((VlanMapResource) resource).getVtnName().trim().isEmpty()) {
79 isValid = validator.isValidMaxLengthAlphaNum(
80 ((VlanMapResource) resource).getVtnName().trim(),
81 VtnServiceJsonConsts.LEN_31);
83 setInvalidParameter(VtnServiceJsonConsts.URI
84 + VtnServiceJsonConsts.VBRNAME);
85 if (((VlanMapResource) resource).getVbrName() != null
86 && !((VlanMapResource) resource).getVbrName().trim()
88 isValid = validator.isValidMaxLengthAlphaNum(
89 ((VlanMapResource) resource).getVbrName().trim(),
90 VtnServiceJsonConsts.LEN_31);
96 setInvalidParameter(VtnServiceJsonConsts.URI
97 + VtnServiceJsonConsts.VLANMAPID);
98 if (((VlanMapResource) resource).getVlanMapId() != null
99 && !((VlanMapResource) resource).getVlanMapId().trim()
101 final String vlamMapId = ((VlanMapResource) resource)
102 .getVlanMapId().trim();
103 isValid = isValidVLanMapId(vlamMapId);
108 setListOpFlag(false);
110 LOG.trace("Completed VLanMapResourceValidator#validateUri()");
118 private boolean isValidVLanMapId(final String vlamMapId) {
119 LOG.trace("Start VLanMapResourceValidator#isValidVLanMapId()");
121 if (vlamMapId.contains(VtnServiceJsonConsts.LPID
122 + VtnServiceJsonConsts.VLANMAPIDSEPERATOR)) {
123 isValid = validator.isValidMaxLength(vlamMapId.substring(5),
124 VtnServiceJsonConsts.LEN_319);
125 } else if (vlamMapId.contains(VtnServiceJsonConsts.NOLPID)) {
130 LOG.trace("Completed VLanMapResourceValidator#isValidVLanMapId()");
135 * Validate request Json object for get, put and post method of VLanMap API.
138 public void validate(final String method, final JsonObject requestBody)
139 throws VtnServiceException {
140 LOG.trace("Start VLanMapResourceValidator#validate()");
141 LOG.info("Validating request for " + method
142 + " of VLanMapResourceValidator");
143 boolean isValid = false;
145 isValid = validateUri();
146 if (isValid && requestBody != null
147 && VtnServiceConsts.GET.equals(method)) {
148 isValid = validateGet(requestBody, isListOpFlag());
149 updateOpParameterForList(requestBody);
150 } else if (isValid && requestBody != null
151 && VtnServiceConsts.PUT.equals(method)) {
152 isValid = validatePut(requestBody);
153 } else if (isValid && requestBody != null
154 && VtnServiceConsts.POST.equals(method)) {
155 isValid = validatePost(requestBody);
156 } else if (isValid) {
157 setInvalidParameter(VtnServiceConsts.INCORRECT_METHOD_INVOCATION);
160 } catch (final NumberFormatException e) {
161 LOG.error("Inside catch:NumberFormatException");
164 // Throws exception if validation fails
166 LOG.error("Validation failed");
167 throw new VtnServiceException(Thread.currentThread()
168 .getStackTrace()[1].getMethodName(),
169 UncJavaAPIErrorCode.VALIDATION_ERROR.getErrorCode(),
170 UncJavaAPIErrorCode.VALIDATION_ERROR.getErrorMessage());
172 LOG.info("Validation successful");
173 LOG.trace("Complete VLanMapResourceValidator#validate()");
177 * Validate get request Json object for VLanMap API
180 * the request Json object
181 * @return true, if successful
183 private boolean validateGet(final JsonObject requestBody,
184 final boolean opFlag) {
186 LOG.trace("Start VLanMapValiadtor#isValidGet");
187 boolean isValid = true;
188 // validation for key: targetdb
190 setInvalidParameter(VtnServiceJsonConsts.TARGETDB);
191 isValid = validator.isValidRequestDB(requestBody);
194 if (requestBody.has(VtnServiceJsonConsts.OP)) {
195 requestBody.remove(VtnServiceJsonConsts.OP);
197 LOG.debug("No need to remove -op ");
199 if (requestBody.has(VtnServiceJsonConsts.INDEX)) {
200 requestBody.remove(VtnServiceJsonConsts.INDEX);
202 LOG.debug("No need to remove - index");
204 if (requestBody.has(VtnServiceJsonConsts.MAX)) {
205 requestBody.remove(VtnServiceJsonConsts.MAX);
207 LOG.debug("No need to remove-max count");
210 // validation for key: op
212 setInvalidParameter(VtnServiceJsonConsts.OP);
213 isValid = validator.isValidOperation(requestBody);
215 // validation for key: index
217 setInvalidParameter(VtnServiceJsonConsts.INDEX);
218 if (requestBody.has(VtnServiceJsonConsts.INDEX)
219 && requestBody.getAsJsonPrimitive(
220 VtnServiceJsonConsts.INDEX).getAsString() != null) {
222 final String vlamMapId = requestBody
223 .getAsJsonPrimitive(VtnServiceJsonConsts.INDEX)
224 .getAsString().trim();
225 isValid = isValidVLanMapId(vlamMapId);
228 // validation for key: max_repitition
230 setInvalidParameter(VtnServiceJsonConsts.MAX);
231 isValid = validator.isValidMaxRepetition(requestBody);
234 LOG.trace("Complete VLanMapValidator#isValidGet");
239 * Validate post request Json object for VLanMap API.
242 * the request Json object
243 * @return true, if successful
244 * @throws VtnServiceException
245 * the vtn service exception
247 private boolean validatePost(final JsonObject requestBody)
248 throws VtnServiceException {
249 LOG.trace("Start VLanMapValidator#validatePost()");
250 boolean isValid = false;
251 setInvalidParameter(VtnServiceJsonConsts.VLANMAP);
252 if (requestBody.has(VtnServiceJsonConsts.VLANMAP)
253 && requestBody.get(VtnServiceJsonConsts.VLANMAP).isJsonObject()) {
255 final JsonObject vLanMap = requestBody
256 .getAsJsonObject(VtnServiceJsonConsts.VLANMAP);
257 // validation for key: logical_port_id(optional)
258 setInvalidParameter(VtnServiceJsonConsts.LOGICAL_PORT_ID);
259 if (vLanMap.has(VtnServiceJsonConsts.LOGICAL_PORT_ID)
260 && vLanMap.getAsJsonPrimitive(
261 VtnServiceJsonConsts.LOGICAL_PORT_ID).getAsString() != null
264 VtnServiceJsonConsts.LOGICAL_PORT_ID)
265 .getAsString().trim().isEmpty()) {
266 isValid = validator.isValidMaxLength(
267 vLanMap.getAsJsonPrimitive(
268 VtnServiceJsonConsts.LOGICAL_PORT_ID)
269 .getAsString().trim(),
270 VtnServiceJsonConsts.LEN_319);
273 isValid = validatePut(requestBody);
277 LOG.trace("Complete VLanMapValidator#validatePost()");
282 * Validate put request Json object for VLanMap API.
285 * the request Json object
286 * @return true, if successful
287 * @throws VtnServiceException
288 * the vtn service exception
290 private boolean validatePut(final JsonObject requestBody)
291 throws VtnServiceException {
292 LOG.trace("Start VLanMapResourceValidator#validatePut()");
293 boolean isValid = false;
294 setInvalidParameter(VtnServiceJsonConsts.VLANMAP);
295 if (requestBody.has(VtnServiceJsonConsts.VLANMAP)
296 && requestBody.get(VtnServiceJsonConsts.VLANMAP).isJsonObject()) {
297 final JsonObject vLanMap = requestBody
298 .getAsJsonObject(VtnServiceJsonConsts.VLANMAP);
299 // only vlan_id or no_vlan_id is allowed
300 setInvalidParameter(VtnServiceJsonConsts.VLANID
301 + VtnServiceJsonConsts.SLASH
302 + VtnServiceJsonConsts.NO_VLAN_ID);
303 if (vLanMap.has(VtnServiceJsonConsts.VLANID)
304 && vLanMap.has(VtnServiceJsonConsts.NO_VLAN_ID)) {
307 // validation for key: vlan_id
308 else if (vLanMap.has(VtnServiceJsonConsts.VLANID)) {
309 setInvalidParameter(VtnServiceJsonConsts.VLANID);
310 if (vLanMap.getAsJsonPrimitive(VtnServiceJsonConsts.VLANID)
311 .getAsString() != null
313 .getAsJsonPrimitive(VtnServiceJsonConsts.VLANID)
314 .getAsString().trim().isEmpty()) {
315 isValid = validator.isValidRange(vLanMap
316 .getAsJsonPrimitive(VtnServiceJsonConsts.VLANID)
317 .getAsString().trim(), VtnServiceJsonConsts.VAL_1,
318 VtnServiceJsonConsts.VAL_4095);
323 // validation for key: no_vlan_id
324 else if (vLanMap.has(VtnServiceJsonConsts.NO_VLAN_ID)) {
325 setInvalidParameter(VtnServiceJsonConsts.NO_VLAN_ID);
326 if (vLanMap.getAsJsonPrimitive(VtnServiceJsonConsts.NO_VLAN_ID)
327 .getAsString() != null
330 VtnServiceJsonConsts.NO_VLAN_ID)
331 .getAsString().trim().isEmpty()) {
332 final String no_vlan_id = vLanMap
333 .getAsJsonPrimitive(VtnServiceJsonConsts.NO_VLAN_ID)
334 .getAsString().trim();
336 .equalsIgnoreCase(VtnServiceJsonConsts.TRUE);
347 LOG.trace("Complete VLanMapResourceValidator#validatePut()");