7ce65508b0da76f2b0dae930c51a70900b162d3e
[vtn.git] /
1 /*
2  * Copyright (c) 2012-2013 NEC Corporation
3  * All rights reserved.
4  * 
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
8  */
9 package org.opendaylight.vtn.javaapi.validation.logical;
10
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.HostAddressResource;
19 import org.opendaylight.vtn.javaapi.validation.CommonValidator;
20 import org.opendaylight.vtn.javaapi.validation.VtnServiceValidator;
21
22 /**
23  * The Class HostAddressResourceValidator validates request Json object for
24  * HostAddress API.
25  */
26 public class HostAddressResourceValidator extends VtnServiceValidator {
27
28         private static final Logger LOG = Logger
29                         .getLogger(HostAddressResourceValidator.class.getName());
30
31         private final AbstractResource resource;
32         final CommonValidator validator = new CommonValidator();
33
34         /**
35          * Instantiates a new host address resource validator.
36          * 
37          * @param resource
38          *            the instance of AbstractResource
39          */
40         public HostAddressResourceValidator(final AbstractResource resource) {
41                 this.resource = resource;
42         }
43
44         /**
45          * Validate uri parameters for HostAddress API.
46          * 
47          * @return true, if successful
48          */
49         @Override
50         public boolean validateUri() {
51                 LOG.trace("Start HostAddressResourceValidator#validateUri()");
52                 boolean isValid = false;
53                 setInvalidParameter(VtnServiceJsonConsts.URI
54                                 + VtnServiceJsonConsts.VTNNAME);
55                 if (resource instanceof HostAddressResource
56                                 && ((HostAddressResource) resource).getVtnName() != null
57                                 && !((HostAddressResource) resource).getVtnName().trim()
58                                                 .isEmpty()) {
59                         isValid = validator.isValidMaxLengthAlphaNum(
60                                         ((HostAddressResource) resource).getVtnName().trim(),
61                                         VtnServiceJsonConsts.LEN_31);
62                         if (isValid) {
63                                 setInvalidParameter(VtnServiceJsonConsts.URI
64                                                 + VtnServiceJsonConsts.VBRNAME);
65                                 if (((HostAddressResource) resource).getVbrName() != null
66                                                 && !((HostAddressResource) resource).getVbrName()
67                                                                 .trim().isEmpty()) {
68                                         isValid = validator.isValidMaxLengthAlphaNum(
69                                                         ((HostAddressResource) resource).getVbrName()
70                                                                         .trim(), VtnServiceJsonConsts.LEN_31);
71                                 } else {
72                                         isValid = false;
73                                 }
74                         }
75                         setListOpFlag(false);
76                 }
77                 LOG.trace("Complete HostAddressResourceValidator#validateUri()");
78                 return isValid;
79         }
80
81         /**
82          * Validate request Json object for get, put and post method of HostAddress
83          * API.
84          */
85         @Override
86         public void validate(final String method, final JsonObject requestBody)
87                         throws VtnServiceException {
88                 LOG.trace("Start HostAddressResourceValidator#validate()");
89                 boolean isValid = false;
90                 try {
91                         isValid = validateUri();
92                         LOG.info("Validating request for " + method
93                                         + " of HostAddressResourceValidator");
94                         if (isValid && requestBody != null
95                                         && VtnServiceConsts.GET.equals(method)) {
96                                 isValid = validator.isValidGet(requestBody, isListOpFlag());
97                                 setInvalidParameter(validator.getInvalidParameter());
98                                 updateOpParameterForList(requestBody);
99                         } else if (isValid && requestBody != null
100                                         && VtnServiceConsts.PUT.equals(method)) {
101                                 isValid = validatePut(requestBody);
102                         } else {
103                                 isValid = false;
104                         }
105                 } catch (final NumberFormatException e) {
106                         if (method.equals(VtnServiceConsts.GET)) {
107                                 setInvalidParameter(validator.getInvalidParameter());
108                         }
109                         LOG.error("Inside catch:NumberFormatException");
110                         isValid = false;
111                 } catch (final ClassCastException e) {
112                         if (method.equals(VtnServiceConsts.GET)) {
113                                 setInvalidParameter(validator.getInvalidParameter());
114                         }
115                         LOG.error("Inside catch:ClassCastException");
116                         isValid = false;
117                 }
118                 // Throws exception if validation fails
119                 if (!isValid) {
120                         LOG.error("Validation failed");
121                         throw new VtnServiceException(Thread.currentThread()
122                                         .getStackTrace()[1].getMethodName(),
123                                         UncJavaAPIErrorCode.VALIDATION_ERROR.getErrorCode(),
124                                         UncJavaAPIErrorCode.VALIDATION_ERROR.getErrorMessage());
125                 }
126                 LOG.info("Validation successful");
127                 LOG.trace("Complete HostAddressResourceValidator#validate()");
128         }
129
130         /**
131          * Validate put request Json object for HostAddressResource
132          * 
133          * @param requestBody
134          *            the request Json object
135          * @return true, if successful
136          */
137         private boolean validatePut(final JsonObject requestBody) {
138                 LOG.trace("Start HostAddressResourceValidator#validatePut()");
139                 boolean isValid = false;
140                 setInvalidParameter(VtnServiceJsonConsts.IPADDRESS);
141                 if (requestBody.has(VtnServiceJsonConsts.IPADDRESS)
142                                 && requestBody.get(VtnServiceJsonConsts.IPADDRESS)
143                                                 .isJsonObject()) {
144                         final JsonObject ipaddr = requestBody
145                                         .getAsJsonObject(VtnServiceJsonConsts.IPADDRESS);
146                         // validation for mandatory keys: ipaddr
147                         setInvalidParameter(VtnServiceJsonConsts.IPADDR);
148                         if (ipaddr.has(VtnServiceJsonConsts.IPADDR)
149                                         && ipaddr.getAsJsonPrimitive(VtnServiceJsonConsts.IPADDR)
150                                                         .getAsString() != null) {
151                                 isValid = validator.isValidIpV4(ipaddr
152                                                 .getAsJsonPrimitive(VtnServiceJsonConsts.IPADDR)
153                                                 .getAsString().trim());
154                         }
155                         if (isValid) {
156                                 // validation for mandatory keys: netmask
157                                 setInvalidParameter(VtnServiceJsonConsts.NETMASK);
158                                 if (ipaddr.has(VtnServiceJsonConsts.NETMASK)
159                                                 && ipaddr.getAsJsonPrimitive(
160                                                                 VtnServiceJsonConsts.NETMASK).getAsString() != null) {
161                                         isValid = validator.isValidRange(
162                                                         Integer.parseInt(ipaddr
163                                                                         .getAsJsonPrimitive(
164                                                                                         VtnServiceJsonConsts.NETMASK)
165                                                                         .getAsString().trim()),
166                                                         VtnServiceJsonConsts.VAL_1,
167                                                         VtnServiceJsonConsts.VAL_30);
168                                 } else {
169                                         isValid = false;
170                                 }
171                         }
172                 }
173                 LOG.trace("Complete HostAddressResourceValidator#validatePut()");
174                 return isValid;
175         }
176 }