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.physical;
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.physical.ControllerResource;
19 import org.opendaylight.vtn.javaapi.resources.physical.ControllersResource;
20 import org.opendaylight.vtn.javaapi.validation.CommonValidator;
21 import org.opendaylight.vtn.javaapi.validation.VtnServiceValidator;
23 public class ControllerResourceValidator extends VtnServiceValidator {
25 private static final Logger LOG = Logger
26 .getLogger(ControllerResourceValidator.class.getName());
28 private final AbstractResource resource;
29 final CommonValidator validator = new CommonValidator();
32 * Instantiates a new controller resource validator.
35 * the instance of AbstractResource
37 public ControllerResourceValidator(final AbstractResource resource) {
38 this.resource = resource;
42 * Validate uri parameters for Controller API
44 * @return true, if successful
47 public boolean validateUri() {
48 LOG.trace("Start ControllerResourceValidator#validateUri()");
49 boolean isValid = false;
50 setInvalidParameter(VtnServiceJsonConsts.CONTROLLERID);
51 if (resource instanceof ControllerResource
52 && ((ControllerResource) resource).getControllerId() != null
53 && !((ControllerResource) resource).getControllerId().trim()
55 isValid = validator.isValidMaxLengthAlphaNum(
56 ((ControllerResource) resource).getControllerId().trim(),
57 VtnServiceJsonConsts.LEN_31);
59 } else if (resource instanceof ControllersResource) {
63 LOG.trace("Complete ControllerResourceValidator#validateUri()");
68 * Validate request json for put, post and get method of controller API
71 public void validate(final String method, final JsonObject requestBody)
72 throws VtnServiceException {
73 LOG.trace("Start ControlleResourceValidator#validate()");
74 LOG.info("Validating request for " + method
75 + " of ControllerResourceValidator");
76 boolean isValid = false;
78 isValid = validateUri();
79 if (isValid && requestBody != null
80 && VtnServiceConsts.GET.equals(method)) {
81 isValid = validateGet(requestBody, isListOpFlag());
82 updateOpParameterForList(requestBody);
83 } else if (isValid && requestBody != null
84 && VtnServiceConsts.POST.equalsIgnoreCase(method)) {
85 isValid = validatePost(requestBody);
86 } else if (isValid && requestBody != null
87 && VtnServiceConsts.PUT.equals(method)) {
88 isValid = validatePut(requestBody);
92 } catch (final NumberFormatException e) {
93 LOG.error("Inside catch:NumberFormatException");
96 // Throws exception if validation fails
98 LOG.error("Validation failed");
99 throw new VtnServiceException(Thread.currentThread()
100 .getStackTrace()[1].getMethodName(),
101 UncJavaAPIErrorCode.VALIDATION_ERROR.getErrorCode(),
102 UncJavaAPIErrorCode.VALIDATION_ERROR.getErrorMessage());
104 LOG.info("Validation successful");
105 LOG.trace("Complete ControllerResourceValidator#validate()");
109 * Validate request json for get method of controller API
112 * the request Json object
114 * @return true, if is valid get
116 public boolean validateGet(final JsonObject requestBody,
117 final boolean opFlag) {
118 LOG.trace("Start ControllerResourceValidator#isValidGet");
119 boolean isValid = true;
120 // validation for key: targetdb
122 setInvalidParameter(VtnServiceJsonConsts.TARGETDB);
123 isValid = validator.isValidRequestDB(requestBody);
126 if (requestBody.has(VtnServiceJsonConsts.OP)) {
127 requestBody.remove(VtnServiceJsonConsts.OP);
129 LOG.debug("No need to remove");
131 if (requestBody.has(VtnServiceJsonConsts.INDEX)) {
132 requestBody.remove(VtnServiceJsonConsts.INDEX);
134 LOG.debug("No need to remove");
136 if (requestBody.has(VtnServiceJsonConsts.MAX)) {
137 requestBody.remove(VtnServiceJsonConsts.MAX);
139 LOG.debug("No need to remove");
142 // validation for key: op
144 setInvalidParameter(VtnServiceJsonConsts.OP);
145 isValid = validator.isValidOperation(requestBody);
147 // validation for key: index
149 setInvalidParameter(VtnServiceJsonConsts.INDEX);
150 if (requestBody.has(VtnServiceJsonConsts.INDEX)
151 && requestBody.getAsJsonPrimitive(
152 VtnServiceJsonConsts.INDEX).getAsString() != null
154 .getAsJsonPrimitive(VtnServiceJsonConsts.INDEX)
155 .getAsString().trim().isEmpty()) {
156 isValid = validator.isValidMaxLengthAlphaNum(requestBody
157 .getAsJsonPrimitive(VtnServiceJsonConsts.INDEX)
158 .getAsString().trim(), VtnServiceJsonConsts.LEN_20);
161 // validation for key: max_repitition
162 // updated validation for max_repetition_count
164 setInvalidParameter(VtnServiceJsonConsts.MAX);
165 isValid = validator.isValidMaxRepetition(requestBody);
169 LOG.trace("Complete ControllerResourceValidator#isValidGet");
174 * Validate request json for post method of controller API
177 * the request Json object
179 * @return true, if successful
181 private boolean validatePost(final JsonObject requestBody) {
182 LOG.trace("Start ControllerResourceValidator#validatePost()");
183 boolean isValid = false;
184 setInvalidParameter(VtnServiceJsonConsts.CONTROLLER);
185 if (requestBody.has(VtnServiceJsonConsts.CONTROLLER)
186 && requestBody.get(VtnServiceJsonConsts.CONTROLLER)
188 final JsonObject controller = requestBody
189 .getAsJsonObject(VtnServiceJsonConsts.CONTROLLER);
190 // validation for mandatory key: controllerId(mandatory)
191 setInvalidParameter(VtnServiceJsonConsts.CONTROLLERID);
192 if (controller.has(VtnServiceJsonConsts.CONTROLLERID)
193 && controller.getAsJsonPrimitive(
194 VtnServiceJsonConsts.CONTROLLERID).getAsString() != null) {
195 isValid = validator.isValidMaxLengthAlphaNum(controller
196 .getAsJsonPrimitive(VtnServiceJsonConsts.CONTROLLERID)
197 .getAsString().trim(), VtnServiceJsonConsts.LEN_31);
200 // validation for key: type(mandatory)
201 setInvalidParameter(VtnServiceJsonConsts.TYPE);
202 if (controller.has(VtnServiceJsonConsts.TYPE)
203 && controller.getAsJsonPrimitive(
204 VtnServiceJsonConsts.TYPE).getAsString() != null) {
205 isValid = validator.isValidType(controller
206 .getAsJsonPrimitive(VtnServiceJsonConsts.TYPE)
207 .getAsString().trim());
213 // validation for key: version(mandatory)
214 setInvalidParameter(VtnServiceJsonConsts.VERSION);
215 if (controller.has(VtnServiceJsonConsts.VERSION)
216 && controller.getAsJsonPrimitive(
217 VtnServiceJsonConsts.VERSION).getAsString() != null) {
218 isValid = validator.isValidVersion(controller
219 .getAsJsonPrimitive(VtnServiceJsonConsts.VERSION)
220 .getAsString().trim(), VtnServiceJsonConsts.LEN_31);
226 isValid = validateField(isValid, controller);
229 LOG.trace("Complete ControllerResourceValidator#validatePost()");
234 * Validate common request for post and put method of controller API
239 * the request Json object
241 * @return true, if successful
243 private boolean validateField(boolean isValid, final JsonObject controller) {
244 // validation for key: description
245 setInvalidParameter(VtnServiceJsonConsts.DESCRIPTION);
246 if (controller.has(VtnServiceJsonConsts.DESCRIPTION)
247 && controller.getAsJsonPrimitive(
248 VtnServiceJsonConsts.DESCRIPTION).getAsString() != null
250 .getAsJsonPrimitive(VtnServiceJsonConsts.DESCRIPTION)
251 .getAsString().trim().isEmpty()) {
256 VtnServiceJsonConsts.DESCRIPTION)
257 .getAsString().trim(),
258 VtnServiceJsonConsts.LEN_127);
261 // validation for key: ipaddr
262 setInvalidParameter(VtnServiceJsonConsts.IPADDR);
263 if (controller.has(VtnServiceJsonConsts.IPADDR)
264 && controller.getAsJsonPrimitive(
265 VtnServiceJsonConsts.IPADDR).getAsString() != null) {
266 isValid = validator.isValidIpV4(controller
267 .getAsJsonPrimitive(VtnServiceJsonConsts.IPADDR)
268 .getAsString().trim());
272 // validation for key: audit_status
273 setInvalidParameter(VtnServiceJsonConsts.AUDITSTATUS);
274 if (controller.has(VtnServiceJsonConsts.AUDITSTATUS)
275 && controller.getAsJsonPrimitive(
276 VtnServiceJsonConsts.AUDITSTATUS).getAsString() != null) {
277 isValid = validator.isValidAuditStatus(controller
278 .getAsJsonPrimitive(VtnServiceJsonConsts.AUDITSTATUS)
279 .getAsString().trim());
283 // validation for key: username
284 setInvalidParameter(VtnServiceJsonConsts.USERNAME);
285 if (controller.has(VtnServiceJsonConsts.USERNAME)
286 && controller.getAsJsonPrimitive(
287 VtnServiceJsonConsts.USERNAME).getAsString() != null) {
288 isValid = validator.isValidMaxLength(controller
289 .getAsJsonPrimitive(VtnServiceJsonConsts.USERNAME)
290 .getAsString().trim(), VtnServiceJsonConsts.LEN_31);
294 // validation for key: password
295 setInvalidParameter(VtnServiceJsonConsts.PASSWORD);
296 if (controller.has(VtnServiceJsonConsts.PASSWORD)
297 && controller.getAsJsonPrimitive(
298 VtnServiceJsonConsts.PASSWORD).getAsString() != null) {
299 isValid = validator.isValidMaxLength(controller
300 .getAsJsonPrimitive(VtnServiceJsonConsts.PASSWORD)
301 .getAsString().trim(), VtnServiceJsonConsts.LEN_256);
308 * Validate request json for put method of controller API
311 * the request Json object
313 * @return true, if successful
315 private boolean validatePut(final JsonObject requestBody) {
316 LOG.trace("Start ControllerResourceValidator#validatePut()");
317 boolean isValid = false;
318 setInvalidParameter(VtnServiceJsonConsts.CONTROLLER);
319 if (requestBody.has(VtnServiceJsonConsts.CONTROLLER)
320 && requestBody.get(VtnServiceJsonConsts.CONTROLLER)
323 final JsonObject controller = requestBody
324 .getAsJsonObject(VtnServiceJsonConsts.CONTROLLER);
326 * // validation for key: type
327 * setInvalidParameter(VtnServiceJsonConsts.TYPE); if
328 * (controller.has(VtnServiceJsonConsts.TYPE) &&
329 * controller.getAsJsonPrimitive(
330 * VtnServiceJsonConsts.TYPE).getAsString() != null) { isValid =
331 * validator.isValidType(controller
332 * .getAsJsonPrimitive(VtnServiceJsonConsts.TYPE)
333 * .getAsString().trim()); }
336 // Remove type if present in request JSON
337 if (controller.has(VtnServiceJsonConsts.TYPE)) {
338 requestBody.getAsJsonObject(VtnServiceJsonConsts.CONTROLLER)
339 .remove(VtnServiceJsonConsts.TYPE);
341 // validation for key: version
342 setInvalidParameter(VtnServiceJsonConsts.VERSION);
343 if (controller.has(VtnServiceJsonConsts.VERSION)
344 && controller.getAsJsonPrimitive(
345 VtnServiceJsonConsts.VERSION).getAsString() != null
347 .getAsJsonPrimitive(VtnServiceJsonConsts.VERSION)
348 .getAsString().trim().isEmpty()) {
349 isValid = validator.isValidVersion(controller
350 .getAsJsonPrimitive(VtnServiceJsonConsts.VERSION)
351 .getAsString().trim(), VtnServiceJsonConsts.LEN_31);
354 isValid = validateField(isValid, controller);
357 LOG.trace("Complete ControllerResourceValidator#validatePut()");