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.FlowListEntriesResource;
19 import org.opendaylight.vtn.javaapi.resources.logical.FlowListEntryResource;
20 import org.opendaylight.vtn.javaapi.validation.CommonValidator;
21 import org.opendaylight.vtn.javaapi.validation.VtnServiceValidator;
24 * The Class FlowListEntryResourceValidator validates request Json object for
27 public class FlowListEntryResourceValidator extends VtnServiceValidator {
29 private static final Logger LOG = Logger
30 .getLogger(FlowListEntryResourceValidator.class.getName());
31 private final AbstractResource resource;
32 final CommonValidator validator = new CommonValidator();
35 * Instantiates a new flow list entry resource validator.
38 * the instance of AbstractResource
40 public FlowListEntryResourceValidator(final AbstractResource resource) {
41 this.resource = resource;
45 * Validate uri parameters for FlowListEntry API.
47 * @return true, if successful
50 public boolean validateUri() {
51 LOG.trace("Start FlowListEntryResourceValidator#validateUri()");
52 boolean isValid = false;
53 setInvalidParameter(VtnServiceJsonConsts.URI
54 + VtnServiceJsonConsts.FLNAME);
55 if (resource instanceof FlowListEntryResource
56 && ((FlowListEntryResource) resource).getFlName() != null
57 && !((FlowListEntryResource) resource).getFlName().trim()
59 isValid = validator.isValidMaxLengthAlphaNum(
60 ((FlowListEntryResource) resource).getFlName().trim(),
61 VtnServiceJsonConsts.LEN_32);
63 setInvalidParameter(VtnServiceJsonConsts.URI
64 + VtnServiceJsonConsts.SEQNUM);
65 if (((FlowListEntryResource) resource).getSeqnum() != null
66 && !((FlowListEntryResource) resource).getSeqnum()
68 isValid = validator.isValidRange(((FlowListEntryResource) resource)
70 VtnServiceJsonConsts.VAL_1,
71 VtnServiceJsonConsts.VAL_65535);
77 } else if (resource instanceof FlowListEntriesResource
78 && ((FlowListEntriesResource) resource).getFlName() != null
79 && !((FlowListEntriesResource) resource).getFlName().trim()
81 isValid = validator.isValidMaxLengthAlphaNum(
82 ((FlowListEntriesResource) resource).getFlName().trim(),
83 VtnServiceJsonConsts.LEN_32);
86 LOG.trace("Start FlowListEntryResourceValidator#validateUri()");
91 * Validate request Json object for get, put and post method of
95 public void validate(final String method, final JsonObject requestBody)
96 throws VtnServiceException {
97 LOG.trace("Start FlowListEntryResourceValidator#validate()");
98 LOG.info("Validating request for " + method
99 + " of FlowListEntryResourceValidator");
100 boolean isValid = false;
102 isValid = validateUri();
103 if (isValid && requestBody != null
104 && VtnServiceConsts.GET.equals(method)) {
105 isValid = validator.isValidGetForIntIndex(requestBody,
107 setInvalidParameter(validator.getInvalidParameter());
108 updateOpParameterForList(requestBody);
109 } else if (isValid && requestBody != null
110 && VtnServiceConsts.PUT.equals(method)) {
111 isValid = validatePut(requestBody);
112 } else if (isValid && requestBody != null
113 && VtnServiceConsts.POST.equals(method)) {
114 isValid = validatePost(requestBody);
115 } else if (isValid) {
116 setInvalidParameter(VtnServiceConsts.INCORRECT_METHOD_INVOCATION);
119 } catch (final NumberFormatException e) {
120 if (method.equals(VtnServiceConsts.GET)) {
121 setInvalidParameter(validator.getInvalidParameter());
123 LOG.error("Inside catch:NumberFormatException");
125 } catch (final ClassCastException e) {
126 if (method.equals(VtnServiceConsts.GET)) {
127 setInvalidParameter(validator.getInvalidParameter());
129 LOG.error("Inside catch:ClassCastException");
132 // Throws exception if validation fails
134 LOG.error("Validation failed");
135 throw new VtnServiceException(Thread.currentThread()
136 .getStackTrace()[1].getMethodName(),
137 UncJavaAPIErrorCode.VALIDATION_ERROR.getErrorCode(),
138 UncJavaAPIErrorCode.VALIDATION_ERROR.getErrorMessage());
140 LOG.info("Validation successful");
141 LOG.trace("Complete FlowListEntryResourceValidator#validate()");
145 * Validate put request Json object for FlowListEntry API
148 * the request Json object
149 * @return true, if successful
151 private boolean validatePut(final JsonObject requestBody) {
152 LOG.trace("Start FlowListEntryResourceValidator#validatePut()");
153 boolean isValid = false;
154 setInvalidParameter(VtnServiceJsonConsts.FLOWLISTENTRY);
155 if (requestBody.has(VtnServiceJsonConsts.FLOWLISTENTRY)
156 && requestBody.get(VtnServiceJsonConsts.FLOWLISTENTRY)
159 final JsonObject flowListEntry = requestBody
160 .getAsJsonObject(VtnServiceJsonConsts.FLOWLISTENTRY);
161 // validation for key: macdstaddr(optional)
163 setInvalidParameter(VtnServiceJsonConsts.MACDSTADDR);
164 if (flowListEntry.has(VtnServiceJsonConsts.MACDSTADDR)
165 && flowListEntry.getAsJsonPrimitive(
166 VtnServiceJsonConsts.MACDSTADDR).getAsString() != null) {
168 .isValidMacAddress(flowListEntry
170 VtnServiceJsonConsts.MACDSTADDR)
171 .getAsString().trim());
174 // validation for key: macsrcaddr
176 setInvalidParameter(VtnServiceJsonConsts.MACSRCADDR);
177 if (flowListEntry.has(VtnServiceJsonConsts.MACSRCADDR)
178 && flowListEntry.getAsJsonPrimitive(
179 VtnServiceJsonConsts.MACSRCADDR).getAsString() != null) {
181 .isValidMacAddress(flowListEntry
183 VtnServiceJsonConsts.MACSRCADDR)
184 .getAsString().trim());
187 // validation for key: macethertype
189 setInvalidParameter(VtnServiceJsonConsts.MACETHERTYPE);
190 if (flowListEntry.has(VtnServiceJsonConsts.MACETHERTYPE)
191 && flowListEntry.getAsJsonPrimitive(
192 VtnServiceJsonConsts.MACETHERTYPE)
193 .getAsString() != null) {
194 isValid = validator.isValidEtherType(flowListEntry
196 VtnServiceJsonConsts.MACETHERTYPE)
197 .getAsString().trim());
200 // validation for key: macvlanpriority
202 setInvalidParameter(VtnServiceJsonConsts.MACVLANPRIORITY);
203 if (flowListEntry.has(VtnServiceJsonConsts.MACVLANPRIORITY)
204 && flowListEntry.getAsJsonPrimitive(
205 VtnServiceJsonConsts.MACVLANPRIORITY)
206 .getAsString() != null) {
211 VtnServiceJsonConsts.MACVLANPRIORITY)
212 .getAsString().trim(),
213 VtnServiceJsonConsts.VAL_0,
214 VtnServiceJsonConsts.VAL_7);
217 // validation for key: ipdstaddr
219 setInvalidParameter(VtnServiceJsonConsts.IPDSTADDR);
220 if (flowListEntry.has(VtnServiceJsonConsts.IPDSTADDR)
221 && flowListEntry.getAsJsonPrimitive(
222 VtnServiceJsonConsts.IPDSTADDR).getAsString() != null) {
223 isValid = validator.isValidIpV4(flowListEntry
224 .getAsJsonPrimitive(VtnServiceJsonConsts.IPDSTADDR)
225 .getAsString().trim());
228 // validation for key: ipdstaddrprefix
230 setInvalidParameter(VtnServiceJsonConsts.IPDSTADDRPREFIX);
231 if (flowListEntry.has(VtnServiceJsonConsts.IPDSTADDRPREFIX)
232 && flowListEntry.getAsJsonPrimitive(
233 VtnServiceJsonConsts.IPDSTADDRPREFIX)
234 .getAsString() != null) {
239 VtnServiceJsonConsts.IPDSTADDRPREFIX)
240 .getAsString().trim(),
241 VtnServiceJsonConsts.VAL_1,
242 VtnServiceJsonConsts.VAL_32);
245 // validation for key: ipsrcaddr
247 setInvalidParameter(VtnServiceJsonConsts.IPSRCADDR);
248 if (flowListEntry.has(VtnServiceJsonConsts.IPSRCADDR)
249 && flowListEntry.getAsJsonPrimitive(
250 VtnServiceJsonConsts.IPSRCADDR).getAsString() != null) {
251 isValid = validator.isValidIpV4(flowListEntry
252 .getAsJsonPrimitive(VtnServiceJsonConsts.IPSRCADDR)
253 .getAsString().trim());
256 // validation for key: ipsrcaddrprefix
258 setInvalidParameter(VtnServiceJsonConsts.IPSRCADDRPREFIX);
259 if (flowListEntry.has(VtnServiceJsonConsts.IPSRCADDRPREFIX)
260 && flowListEntry.getAsJsonPrimitive(
261 VtnServiceJsonConsts.IPSRCADDRPREFIX)
262 .getAsString() != null) {
267 VtnServiceJsonConsts.IPSRCADDRPREFIX)
268 .getAsString().trim(),
269 VtnServiceJsonConsts.VAL_1,
270 VtnServiceJsonConsts.VAL_32);
273 // validation for key: ipv6dstaddr"
275 setInvalidParameter(VtnServiceJsonConsts.IPV6DSTADDR);
276 if (flowListEntry.has(VtnServiceJsonConsts.IPV6DSTADDR)
277 && flowListEntry.getAsJsonPrimitive(
278 VtnServiceJsonConsts.IPV6DSTADDR).getAsString() != null) {
279 isValid = validator.isValidIpV6(flowListEntry
281 VtnServiceJsonConsts.IPV6DSTADDR)
282 .getAsString().trim());
285 // validation for key: ipv6dstaddrprefix
287 setInvalidParameter(VtnServiceJsonConsts.IPV6DSTADDRPREFIX);
288 if (flowListEntry.has(VtnServiceJsonConsts.IPV6DSTADDRPREFIX)
289 && flowListEntry.getAsJsonPrimitive(
290 VtnServiceJsonConsts.IPV6DSTADDRPREFIX)
291 .getAsString() != null) {
296 VtnServiceJsonConsts.IPV6DSTADDRPREFIX)
297 .getAsString().trim(),
298 VtnServiceJsonConsts.VAL_1,
299 VtnServiceJsonConsts.VAL_128);
302 // validation for key: ipv6srcaddr
304 setInvalidParameter(VtnServiceJsonConsts.IPV6SRCADDR);
305 if (flowListEntry.has(VtnServiceJsonConsts.IPV6SRCADDR)
306 && flowListEntry.getAsJsonPrimitive(
307 VtnServiceJsonConsts.IPV6SRCADDR).getAsString() != null) {
308 isValid = validator.isValidIpV6(flowListEntry
310 VtnServiceJsonConsts.IPV6SRCADDR)
311 .getAsString().trim());
314 // validation for key: ipv6srcaddrprefix
316 setInvalidParameter(VtnServiceJsonConsts.IPV6SRCADDRPREFIX);
317 if (flowListEntry.has(VtnServiceJsonConsts.IPV6SRCADDRPREFIX)
318 && flowListEntry.getAsJsonPrimitive(
319 VtnServiceJsonConsts.IPV6SRCADDRPREFIX)
320 .getAsString() != null) {
325 VtnServiceJsonConsts.IPV6SRCADDRPREFIX)
326 .getAsString().trim(),
327 VtnServiceJsonConsts.VAL_1,
328 VtnServiceJsonConsts.VAL_128);
331 // validation for key: ipproto
333 setInvalidParameter(VtnServiceJsonConsts.IPPROTO);
334 if (flowListEntry.has(VtnServiceJsonConsts.IPPROTO)
335 && flowListEntry.getAsJsonPrimitive(
336 VtnServiceJsonConsts.IPPROTO).getAsString() != null) {
337 isValid = validator.isValidRange(
340 VtnServiceJsonConsts.IPPROTO)
341 .getAsString().trim(),
342 VtnServiceJsonConsts.VAL_1,
343 VtnServiceJsonConsts.VAL_255);
346 // validation for key: ipdscp
348 setInvalidParameter(VtnServiceJsonConsts.IPDSCP);
349 if (flowListEntry.has(VtnServiceJsonConsts.IPDSCP)
350 && flowListEntry.getAsJsonPrimitive(
351 VtnServiceJsonConsts.IPDSCP).getAsString() != null) {
352 isValid = validator.isValidRange(
355 VtnServiceJsonConsts.IPDSCP)
356 .getAsString().trim(),
357 VtnServiceJsonConsts.VAL_0,
358 VtnServiceJsonConsts.VAL_63);
361 // validation for key: l4dstport
363 setInvalidParameter(VtnServiceJsonConsts.L4DSTPORT);
364 if (flowListEntry.has(VtnServiceJsonConsts.L4DSTPORT)
365 && flowListEntry.getAsJsonPrimitive(
366 VtnServiceJsonConsts.L4DSTPORT).getAsString() != null) {
367 isValid = validator.isValidRange(
370 VtnServiceJsonConsts.L4DSTPORT)
371 .getAsString().trim(),
372 VtnServiceJsonConsts.VAL_0,
373 VtnServiceJsonConsts.VAL_65535);
376 // validation for key: l4dstendport
378 setInvalidParameter(VtnServiceJsonConsts.L4DSTENDPORT);
379 if (flowListEntry.has(VtnServiceJsonConsts.L4DSTENDPORT)
380 && flowListEntry.getAsJsonPrimitive(
381 VtnServiceJsonConsts.L4DSTENDPORT)
382 .getAsString() != null) {
383 isValid = validator.isValidRange(
386 VtnServiceJsonConsts.L4DSTENDPORT)
387 .getAsString().trim(),
388 VtnServiceJsonConsts.VAL_1,
389 VtnServiceJsonConsts.VAL_65535);
392 // validation for key: l4srcport
394 setInvalidParameter(VtnServiceJsonConsts.L4SRCPORT);
395 if (flowListEntry.has(VtnServiceJsonConsts.L4SRCPORT)
396 && flowListEntry.getAsJsonPrimitive(
397 VtnServiceJsonConsts.L4SRCPORT).getAsString() != null) {
398 isValid = validator.isValidRange(
401 VtnServiceJsonConsts.L4SRCPORT)
402 .getAsString().trim(),
403 VtnServiceJsonConsts.VAL_0,
405 VtnServiceJsonConsts.VAL_65535);
408 // validation for key: l4srcendport
410 setInvalidParameter(VtnServiceJsonConsts.L4SRCENDPORT);
411 if (flowListEntry.has(VtnServiceJsonConsts.L4SRCENDPORT)
412 && flowListEntry.getAsJsonPrimitive(
413 VtnServiceJsonConsts.L4SRCENDPORT)
414 .getAsString() != null) {
415 isValid = validator.isValidRange(
418 VtnServiceJsonConsts.L4SRCENDPORT)
419 .getAsString().trim(),
420 VtnServiceJsonConsts.VAL_1,
421 VtnServiceJsonConsts.VAL_65535);
424 // validation for key: icmptypenum
426 setInvalidParameter(VtnServiceJsonConsts.ICMPTYPENUM);
427 if (flowListEntry.has(VtnServiceJsonConsts.ICMPTYPENUM)
428 && flowListEntry.getAsJsonPrimitive(
429 VtnServiceJsonConsts.ICMPTYPENUM).getAsString() != null) {
430 isValid = validator.isValidRange(
433 VtnServiceJsonConsts.ICMPTYPENUM)
434 .getAsString().trim(),
435 VtnServiceJsonConsts.VAL_0,
436 VtnServiceJsonConsts.VAL_255);
439 // validation for key: icmpcodenum
441 setInvalidParameter(VtnServiceJsonConsts.ICMPCODENUM);
442 if (flowListEntry.has(VtnServiceJsonConsts.ICMPCODENUM)
443 && flowListEntry.getAsJsonPrimitive(
444 VtnServiceJsonConsts.ICMPCODENUM).getAsString() != null) {
445 isValid = validator.isValidRange(
448 VtnServiceJsonConsts.ICMPCODENUM)
449 .getAsString().trim(),
450 VtnServiceJsonConsts.VAL_0,
451 VtnServiceJsonConsts.VAL_255);
454 // validation for key: ipv6icmptypenum
456 setInvalidParameter(VtnServiceJsonConsts.IPV6ICMPTYPENUM);
457 if (flowListEntry.has(VtnServiceJsonConsts.IPV6ICMPTYPENUM)
458 && flowListEntry.getAsJsonPrimitive(
459 VtnServiceJsonConsts.IPV6ICMPTYPENUM)
460 .getAsString() != null) {
465 VtnServiceJsonConsts.IPV6ICMPTYPENUM)
466 .getAsString().trim(),
467 VtnServiceJsonConsts.VAL_0,
468 VtnServiceJsonConsts.VAL_255);
471 // validation for key: ipv6icmpcodenum
473 setInvalidParameter(VtnServiceJsonConsts.IPV6ICMPCODENUM);
474 if (flowListEntry.has(VtnServiceJsonConsts.IPV6ICMPCODENUM)
475 && flowListEntry.getAsJsonPrimitive(
476 VtnServiceJsonConsts.IPV6ICMPCODENUM)
477 .getAsString() != null) {
482 VtnServiceJsonConsts.IPV6ICMPCODENUM)
483 .getAsString().trim(),
484 VtnServiceJsonConsts.VAL_0,
485 VtnServiceJsonConsts.VAL_255);
489 LOG.trace("Complete FlowListEntryResourceValidator#validatePut()");
494 * Validate post request Json object for FlowListEntryresource
497 * the request Json object
498 * @return true, if successful
499 * @throws VtnServiceException
500 * the vtn service exception
502 private boolean validatePost(final JsonObject requestBody)
503 throws VtnServiceException {
504 LOG.trace("Start FlowListEntryResourceValidator#validatePost()");
505 boolean isValid = false;
506 setInvalidParameter(VtnServiceJsonConsts.FLOWLISTENTRY);
507 if (requestBody.has(VtnServiceJsonConsts.FLOWLISTENTRY)
508 && requestBody.get(VtnServiceJsonConsts.FLOWLISTENTRY)
510 final JsonObject flowListEntry = requestBody
511 .getAsJsonObject(VtnServiceJsonConsts.FLOWLISTENTRY);
512 // validation for key: seqnum
513 setInvalidParameter(VtnServiceJsonConsts.SEQNUM);
514 if (flowListEntry.has(VtnServiceJsonConsts.SEQNUM)
515 && flowListEntry.getAsJsonPrimitive(
516 VtnServiceJsonConsts.SEQNUM).getAsString() != null) {
517 isValid = validator.isValidRange(flowListEntry
518 .getAsJsonPrimitive(VtnServiceJsonConsts.SEQNUM)
519 .getAsString().trim(), VtnServiceJsonConsts.VAL_1,
520 VtnServiceJsonConsts.VAL_65535);
523 isValid = validatePut(requestBody);
527 LOG.trace("Complete FlowListEntryResourceValidator#validatePost()");