93f8a21e1acb361c64ad2f77f0ba11193da0cc2f
[ccsdk/apps.git] /
1 /*******************************************************************************\r
2  * Copyright © 2017-2018 AT&T Intellectual Property.\r
3  * \r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  * \r
8  *     http://www.apache.org/licenses/LICENSE-2.0\r
9  * \r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  ******************************************************************************/\r
16 package org.onap.ccsdk.apps.ms.vlantagapi.core.service;\r
17 \r
18 import java.util.ArrayList;\r
19 import java.util.Date;\r
20 import java.util.List;\r
21 import java.util.Optional;\r
22 import java.util.UUID;\r
23 \r
24 import org.onap.ccsdk.apps.ms.vlantagapi.core.exception.VlantagApiException;\r
25 import org.onap.ccsdk.apps.ms.vlantagapi.core.extinf.pm.model.AllowedRanges;\r
26 import org.onap.ccsdk.apps.ms.vlantagapi.core.extinf.pm.model.Elements;\r
27 import org.onap.ccsdk.apps.ms.vlantagapi.core.extinf.pm.model.ResourceModel;\r
28 import org.onap.ccsdk.apps.ms.vlantagapi.core.model.AssignVlanTagRequest;\r
29 import org.onap.ccsdk.apps.ms.vlantagapi.core.model.AssignVlanTagRequestInput;\r
30 import org.onap.ccsdk.apps.ms.vlantagapi.core.model.AssignVlanTagResponse;\r
31 import org.onap.ccsdk.apps.ms.vlantagapi.core.model.AssignVlanTagResponseOutput;\r
32 import org.onap.ccsdk.apps.ms.vlantagapi.core.model.PingResponse;\r
33 import org.onap.ccsdk.apps.ms.vlantagapi.core.model.UnassignVlanTagRequest;\r
34 import org.onap.ccsdk.apps.ms.vlantagapi.core.model.UnassignVlanTagRequestInput;\r
35 import org.onap.ccsdk.apps.ms.vlantagapi.core.model.UnassignVlanTagResponse;\r
36 import org.onap.ccsdk.apps.ms.vlantagapi.core.model.UnassignVlanTagResponseOutput;\r
37 import org.onap.ccsdk.apps.ms.vlantagapi.core.model.VlanTag;\r
38 import org.onap.ccsdk.apps.ms.vlantagapi.extinf.pm.PolicyManagerClient;\r
39 import org.onap.ccsdk.sli.adaptors.ra.ResourceAllocator;\r
40 import org.onap.ccsdk.sli.adaptors.ra.comp.ResourceEntity;\r
41 import org.onap.ccsdk.sli.adaptors.ra.comp.ResourceRequest;\r
42 import org.onap.ccsdk.sli.adaptors.ra.comp.ResourceResponse;\r
43 import org.onap.ccsdk.sli.adaptors.ra.comp.ResourceTarget;\r
44 import org.onap.ccsdk.sli.adaptors.rm.data.AllocationStatus;\r
45 import org.onap.ccsdk.sli.adaptors.rm.data.Range;\r
46 import org.onap.ccsdk.sli.adaptors.rm.data.ResourceType;\r
47 import org.onap.ccsdk.sli.adaptors.util.str.StrUtil;\r
48 \r
49 \r
50 import org.slf4j.Logger;\r
51 import org.slf4j.LoggerFactory;\r
52 import org.springframework.beans.factory.annotation.Autowired;\r
53 import org.springframework.stereotype.Service;\r
54 \r
55 /**\r
56  * VlantagApiServiceImpl.java Purpose: Provide Vlantag Assignment & UnAssignment\r
57  * APIs service implementation for VNFs\r
58  *\r
59  * @author Saurav Paira\r
60  * @version 1.0\r
61  */\r
62 @Service\r
63 public class VlantagApiServiceImpl implements VlantagApiService {\r
64 \r
65         private static final VlantagApiService INSTANCE = new VlantagApiServiceImpl();\r
66         private static final Logger log = LoggerFactory.getLogger(VlantagApiServiceImpl.class);\r
67         private static final String BEGIN_SQUAREBRACKET_RC = "#BSB#";\r
68         private static final String END_SQUAREBRACKET_RC = "#ESB#";\r
69 \r
70         @Autowired\r
71         private ResourceAllocator resourceAllocator;\r
72         @Autowired\r
73     private PolicyManagerClient policyClient;\r
74 \r
75         public static VlantagApiService getInstance() {\r
76                 return INSTANCE;\r
77         }\r
78 \r
79         /**\r
80      * This is a assignVlanTag service implementation to assign Vlantags based on the\r
81      * AssignVlanTagRequest and Policy instance.\r
82      * \r
83      * @param AssignVlanTagRequest\r
84      * @return AssignVlanTagResponse\r
85      */\r
86         @Override\r
87         public AssignVlanTagResponse assignVlanTag(AssignVlanTagRequest request) throws Exception {\r
88                 List<AssignVlanTagResponseOutput> outputList = new ArrayList<>();\r
89 \r
90                 try {\r
91                         validateRequest(request);\r
92                         List<AssignVlanTagRequestInput> vlanTagRequests = request.getInput();\r
93 \r
94                         List<AssignVlanTagRequestInput> reservedResources = new ArrayList<>();\r
95 \r
96                         for (AssignVlanTagRequestInput input : vlanTagRequests) {\r
97                                 log.info("PolicyManagerClient called..for policy : {}", input.getPolicyInstanceName());\r
98 \r
99                                 List<ResourceModel> resourceModels = policyClient.getPolicy(input.getPolicyInstanceName());\r
100                                 ResourceModel model = validate(resourceModels, input);\r
101                                 List<ResourceResponse> rl = new ArrayList<>();\r
102 \r
103                                 for (Elements elements : model.getElements()) {\r
104 \r
105                                         ResourceEntity re = new ResourceEntity();\r
106                                         ResourceTarget rt = new ResourceTarget();\r
107                                         ResourceRequest rr = new ResourceRequest();\r
108                                         List<ResourceResponse> rsList = new ArrayList<>();\r
109 \r
110                                         prepareResourceAllocatorObjects(input, model, elements, re, rt, rr);\r
111 \r
112                                         if (resourceAllocator != null) {\r
113                                                 AllocationStatus status = resourceAllocator.reserve(re, rt, rr, rsList);\r
114 \r
115                                                 if (AllocationStatus.Success.equals(status))\r
116                                                         rl.addAll(rsList);\r
117                                                 else {\r
118                                                         rollbackVlanTags(reservedResources);\r
119                                                         throw new VlantagApiException(\r
120                                                                         "Failed to reserve VlanTags for Element : {}. " + elements.getVlantagName()\r
121                                                                                         + ". Rolling back vlantags for other elements (if any).");\r
122                                                 }\r
123                                         } else\r
124                                                 throw new VlantagApiException(\r
125                                                                 "ResourceAllocator not available. Failed to Assign VlanTags for Element : "\r
126                                                                                 + elements.getVlantagName()\r
127                                                                                 + ". Rolling back vlantags for other elements (if any).");\r
128 \r
129                                 }\r
130                                 reservedResources.add(input);\r
131                                 outputList.add(prepareVlanTagResponse(input, model, rl));\r
132                         }\r
133 \r
134                 } catch (Exception e) {\r
135                         log.error("Exception : " + e.getMessage(), e);\r
136 \r
137                         AssignVlanTagResponse response = new AssignVlanTagResponse();\r
138                         response.setErrorCode(500);\r
139                         response.setErrorMessage(e.getMessage());\r
140                         return response;\r
141                 }\r
142 \r
143                 AssignVlanTagResponse response = new AssignVlanTagResponse();\r
144                 response.setErrorCode(200);\r
145                 response.setErrorMessage("Success");\r
146                 response.setOutput(outputList);\r
147                 return response;\r
148         }\r
149 \r
150         private void prepareResourceAllocatorObjects(AssignVlanTagRequestInput input, ResourceModel model, Elements element,\r
151                         ResourceEntity re, ResourceTarget rt, ResourceRequest rr) throws VlantagApiException {\r
152                 log.info("Preparing RA Objects for Vlan Type : " + input.getVlanType() + " and Element : "\r
153                                 + element.getVlantagName());\r
154                 re.resourceEntityId = input.getVlanTagKey();\r
155                 re.resourceEntityType = model.getKeyType() == null ? "DEFAULT" : model.getKeyType();\r
156                 re.resourceEntityVersion = "1";\r
157 \r
158                 rt.resourceTargetId = input.getScopeId();\r
159                 rt.resourceTargetType = model.getScope() == null ? "DEFAULT" : model.getScope();\r
160 \r
161                 rr.resourceName = input.getVlanType();\r
162                 rr.serviceModel = input.getPolicyInstanceName();\r
163                 rr.endPointPosition = element.getVlantagName();\r
164                 rr.resourceType = ResourceType.Range;\r
165                 rr.applicationId = "SDNC";\r
166                 rr.rangeMaxOverride = -1;\r
167                 rr.rangeMinOverride = -1;\r
168                 if("TRUE".equalsIgnoreCase(element.getSharedRange()))\r
169                     rr.resourceShareGroup = input.getScopeId();\r
170 \r
171                 List<Range> rangeList = new ArrayList<>();\r
172                 for (AllowedRanges allowedRange : element.getAllowedRanges()) {\r
173                         Range range = new Range();\r
174 \r
175                         if (allowedRange.getMin() != null && !allowedRange.getMin().isEmpty())\r
176                                 range.min = Integer.parseInt(allowedRange.getMin());\r
177 \r
178                         if (allowedRange.getMax() != null && !allowedRange.getMax().isEmpty())\r
179                                 range.max = Integer.parseInt(allowedRange.getMax());\r
180 \r
181                         rangeList.add(range);\r
182                 }\r
183 \r
184                 rr.rangeOverrideList = rangeList;\r
185 \r
186                 String resourceValue = resolveResourceElementValue(input, model, element);\r
187                 if (resourceValue != null) {\r
188                         rr.rangeRequestedNumbers = resourceValue; /* Manually provided values */\r
189 \r
190                         /*\r
191                          * If the override flag is TRUE, then add the resource value also in the range,\r
192                          * so it will ignore the current range min-max in the policy. Persist in the DB\r
193                          * if available else Fail.\r
194                          */\r
195                         if (element.getOverwrite() != null && element.getOverwrite().equalsIgnoreCase("TRUE")) {\r
196                                 Range range = new Range();\r
197                                 range.min = Integer.parseInt(resourceValue);\r
198                                 rangeList.add(range);\r
199                         }\r
200                 }\r
201 \r
202                 StrUtil.info(log, re);\r
203                 StrUtil.info(log, rt);\r
204                 StrUtil.info(log, rr);\r
205 \r
206         }\r
207 \r
208         protected String resolveResourceElementValue(AssignVlanTagRequestInput input, ResourceModel model, Elements element)\r
209                         throws VlantagApiException {\r
210                 String recipe = trimBrackets(model.getResourceResolutionRecipe().trim());\r
211 \r
212                 if (input.getResourceValue() != null && !input.getResourceValue().trim().isEmpty()\r
213                                 && !input.getResourceValue().contains("$")) {\r
214                         log.info("Resource Value : " + input.getResourceValue());\r
215                         String resourceValue = trimBrackets(input.getResourceValue());\r
216 \r
217                         String[] vlantagNames = recipe.split(",");\r
218                         String[] resourceValues = resourceValue.split(",");\r
219 \r
220                         try {\r
221                                 for (int i = 0; i < vlantagNames.length; i++) {\r
222                                         if (vlantagNames[i].trim().equalsIgnoreCase(element.getVlantagName().trim()))\r
223                                                 return resourceValues[i].trim();\r
224                                 }\r
225                         } catch (IndexOutOfBoundsException e) {\r
226                                 throw new VlantagApiException("No Matching Resource Value found from Recipe : \""\r
227                                                 + model.getResourceResolutionRecipe() + "\" for Vlantag Name : " + element.getVlantagName());\r
228                         }\r
229 \r
230                 }\r
231                 return null;\r
232         }\r
233 \r
234         ResourceModel validate(List<ResourceModel> resourceModels, AssignVlanTagRequestInput input)\r
235                         throws VlantagApiException {\r
236                 ResourceModel targetModel = null;\r
237                 if (resourceModels != null && !resourceModels.isEmpty()) {\r
238                         for (ResourceModel model : resourceModels) {\r
239                                 if (model.getVlanType().equals(input.getVlanType())) {\r
240                                         targetModel = model;\r
241                                         break;\r
242                                 }\r
243                         }\r
244                         validateModel(targetModel, input);\r
245                 } else\r
246                         throw new VlantagApiException("No Resource Models available in Policy Manager for Policy Instance Name : "\r
247                                         + input.getPolicyInstanceName());\r
248                 return targetModel;\r
249         }\r
250 \r
251         void validateModel(ResourceModel model, AssignVlanTagRequestInput input) throws VlantagApiException {\r
252 \r
253                 if (model == null)\r
254                         throw new VlantagApiException(\r
255                                         "No Matching Policy Resource Model found for Vlan Type : " + input.getVlanType());\r
256                 else {\r
257                         if (model.getResourceResolutionRecipe() == null || model.getResourceResolutionRecipe().isEmpty())\r
258                                 throw new VlantagApiException(\r
259                                                 "Resource Resolution Recipe is null in Resource Model for Vlan Type : " + input.getVlanType());\r
260 \r
261                         if (model.getScope() == null || model.getScope().isEmpty())\r
262                                 throw new VlantagApiException("Scope is null in Resource Model for Vlan Type : " + input.getVlanType());\r
263 \r
264                         List<Elements> elements = model.getElements();\r
265                         validateElements(elements, input);\r
266                 }\r
267 \r
268         }\r
269 \r
270         void validateElements(List<Elements> elements, AssignVlanTagRequestInput input) throws VlantagApiException {\r
271                 if (elements != null && !elements.isEmpty()) {\r
272                         for (Elements element : elements) {\r
273                                 if (element.getVlantagName() == null)\r
274                                         throw new VlantagApiException(\r
275                                                         "Vlantag Name missing for Element in Resource Model Policy for Vlan Type : "\r
276                                                                         + input.getVlanType());\r
277                                 if (element.getAllowedRanges() == null || element.getAllowedRanges().isEmpty())\r
278                                         throw new VlantagApiException(\r
279                                                         "Allowed Ranges missing for Element in Resource Model Policy for Vlan Type : "\r
280                                                                         + input.getVlanType());\r
281                         }\r
282                 } else\r
283                         throw new VlantagApiException(\r
284                                         "No Vlantag Elements found in Resource Model Policy for Vlan Type : " + input.getVlanType());\r
285 \r
286         }\r
287 \r
288         PolicyManagerClient getPolicyManagerClient() {\r
289                 return new PolicyManagerClient();\r
290         }\r
291 \r
292         void validateRequest(AssignVlanTagRequest request) throws VlantagApiException {\r
293                 if (request == null)\r
294                         throw new VlantagApiException("VlanTag Assign Request is null.");\r
295 \r
296                 List<AssignVlanTagRequestInput> inputList = request.getInput();\r
297 \r
298                 if (inputList == null || inputList.isEmpty())\r
299                         throw new VlantagApiException("VlanTag Assign Request Input is null or empty.");\r
300 \r
301                 for (AssignVlanTagRequestInput input : inputList) {\r
302                         if (input.getPolicyInstanceName() == null || input.getPolicyInstanceName().isEmpty())\r
303                                 throw new VlantagApiException("VlanTag Assign Request policy-instance-name is null.");\r
304 \r
305                         if (input.getVlanType() == null || input.getVlanType().isEmpty())\r
306                                 throw new VlantagApiException("VlanTag Assign Request vlan-type is null.");\r
307 \r
308                         if (input.getScopeId() == null || input.getScopeId().isEmpty())\r
309                                 throw new VlantagApiException("VlanTag Assign Request scope-id is null.");\r
310 \r
311                         if (input.getVlanTagKey() == null || input.getVlanTagKey().isEmpty())\r
312                                 throw new VlantagApiException("VlanTag Assign Request key is null.");\r
313                 }\r
314 \r
315         }\r
316 \r
317         private AssignVlanTagResponseOutput prepareVlanTagResponse(AssignVlanTagRequestInput input, ResourceModel model,\r
318                         List<ResourceResponse> rl) {\r
319                 AssignVlanTagResponseOutput ro = new AssignVlanTagResponseOutput();\r
320                 List<VlanTag> vlanTagList = new ArrayList<>();\r
321 \r
322                 if (rl != null && !rl.isEmpty()) {\r
323                         ro.setResourceName(input.getResourceName());\r
324                         ro.setResourceValue(resolveRecipe(model, rl));\r
325                         ro.setResourceVlanRole(model.getResourceVlanRole());\r
326                         if (model.getDataStore() != null && !model.getDataStore().isEmpty()) {\r
327                                 for (ResourceResponse rr : rl) {\r
328                                         VlanTag tag = new VlanTag();\r
329                                         Optional<Elements> optionalElements = model.getElements().stream()\r
330                                                         .filter(element -> element.getVlantagName().equalsIgnoreCase(rr.endPointPosition))\r
331                                                         .findFirst();\r
332                                         optionalElements.ifPresent(element -> tag.setElementVlanRole(element.getElementVlanRole()));\r
333 \r
334                                         tag.setVlanUuid(UUID.randomUUID().toString());\r
335                                         tag.setVlantagName(rr.endPointPosition);\r
336                                         tag.setVlantagValue(rr.resourceAllocated);\r
337                                         vlanTagList.add(tag);\r
338                                 }\r
339 \r
340                         }\r
341                         ro.setStoredElements(vlanTagList);\r
342                 }\r
343 \r
344                 return ro;\r
345         }\r
346 \r
347         protected String resolveRecipe(ResourceModel model, List<ResourceResponse> rl) {\r
348                 String recipe = model.getResourceResolutionRecipe().trim();\r
349                 String resourceValue = recipe;\r
350 \r
351                 if (recipe.contains(BEGIN_SQUAREBRACKET_RC)) {\r
352                         recipe = recipe.replace(BEGIN_SQUAREBRACKET_RC, "");\r
353                         resourceValue = resourceValue.replace(BEGIN_SQUAREBRACKET_RC, "[ ");\r
354                 }\r
355 \r
356                 if (recipe.contains(END_SQUAREBRACKET_RC)) {\r
357                         recipe = recipe.replace(END_SQUAREBRACKET_RC, "");\r
358                         resourceValue = resourceValue.replace(END_SQUAREBRACKET_RC, " ]");\r
359                 }\r
360 \r
361                 String[] vlantagNames = recipe.split(",");\r
362 \r
363                 for (String vlantagName : vlantagNames) {\r
364                         for (ResourceResponse rr : rl) {\r
365                                 if (vlantagName.trim().equalsIgnoreCase(rr.endPointPosition)) {\r
366                                         resourceValue = resourceValue.replace(vlantagName, " " + rr.resourceAllocated);\r
367                                         break;\r
368                                 }\r
369                         }\r
370                 }\r
371 \r
372                 log.info(resourceValue);\r
373 \r
374                 return resourceValue;\r
375         }\r
376 \r
377     private void rollbackVlanTags(List<AssignVlanTagRequestInput> reservedResources) throws Exception {\r
378         UnassignVlanTagRequest unassignRequest = new UnassignVlanTagRequest();\r
379         List<UnassignVlanTagRequestInput> inputList = new ArrayList<>();\r
380 \r
381         if (reservedResources != null && !reservedResources.isEmpty()) {\r
382             reservedResources.forEach(assignReqInput -> {\r
383 \r
384                 UnassignVlanTagRequestInput input = new UnassignVlanTagRequestInput();\r
385                 input.setVlanType(assignReqInput.getVlanType());\r
386                 input.setVlanTagKey(assignReqInput.getVlanTagKey());\r
387                 input.setPolicyInstanceName(assignReqInput.getPolicyInstanceName());\r
388                 inputList.add(input);\r
389             });\r
390             unassignRequest.setInput(inputList);\r
391             unassignVlanTag(unassignRequest);\r
392         }\r
393 \r
394     }\r
395 \r
396         /**\r
397      * This is a unassignVlanTag service implementation to unassign Vlantags based on the\r
398      * UnassignVlanTagRequest and Policy instance.\r
399      * \r
400      * @param UnassignVlanTagRequest\r
401      * @return UnassignVlanTagResponse\r
402      */\r
403         @Override\r
404         public UnassignVlanTagResponse unassignVlanTag(UnassignVlanTagRequest request) throws Exception {\r
405                 UnassignVlanTagResponse response = new UnassignVlanTagResponse();\r
406                 List<UnassignVlanTagResponseOutput> output = new ArrayList<>();\r
407 \r
408                 try {\r
409                         validateRequest(request);\r
410                         List<UnassignVlanTagRequestInput> vlanTagRequests = request.getInput();\r
411 \r
412                         for (UnassignVlanTagRequestInput input : vlanTagRequests) {\r
413                                 List<ResourceModel> resourceModels = policyClient.getPolicy(input.getPolicyInstanceName());\r
414                                 ResourceModel model = validate(resourceModels, input);\r
415 \r
416                                 for (Elements elements : model.getElements()) {\r
417 \r
418                                         ResourceEntity re = new ResourceEntity();\r
419                                         re.resourceEntityId = input.getVlanTagKey();\r
420                                         re.resourceEntityType = model.getKeyType() == null ? "DEFAULT" : model.getKeyType();\r
421                                         re.resourceEntityVersion = "1";\r
422 \r
423                                         ResourceRequest rr = new ResourceRequest();\r
424                                         rr.endPointPosition = elements.getVlantagName();\r
425 \r
426                                         if (resourceAllocator != null) {\r
427                                                 AllocationStatus status = resourceAllocator.release(re, rr);\r
428 \r
429                                                 if (AllocationStatus.Success.equals(status)) {\r
430                                                         UnassignVlanTagResponseOutput ro = new UnassignVlanTagResponseOutput();\r
431                                                         ro.setVlanTagKey(input.getVlanTagKey());\r
432                                                         ro.setVlanType(input.getVlanType());\r
433                                                         ro.setVlantagName(elements.getVlantagName());\r
434                                                         output.add(ro);\r
435                                                 } else {\r
436                                                         throw new VlantagApiException(\r
437                                                                         "Failed to release VlanTags for Element : " + elements.getVlantagName() + ".");\r
438                                                 }\r
439                                         } else\r
440                                                 throw new VlantagApiException(\r
441                                                                 "ResourceAllocator not available. Failed to Unassign VlanTags for Element : "\r
442                                                                                 + elements.getVlantagName()\r
443                                                                                 + ". Rolling back vlantags for other elements (if any).");\r
444                                 }\r
445                         }\r
446                 } catch (Exception e) {\r
447                         log.error("Exception : " + e.getMessage(), e);\r
448 \r
449                         response.setErrorCode(500);\r
450                         response.setErrorMessage(e.getMessage());\r
451                         return response;\r
452                 }\r
453 \r
454                 response.setOutput(output);\r
455                 response.setErrorCode(200);\r
456                 response.setErrorMessage("Success");\r
457                 return response;\r
458         }\r
459 \r
460         ResourceModel validate(List<ResourceModel> resourceModels, UnassignVlanTagRequestInput input)\r
461                         throws VlantagApiException {\r
462                 ResourceModel targetModel = null;\r
463                 if (resourceModels != null && !resourceModels.isEmpty()) {\r
464                         for (ResourceModel model : resourceModels) {\r
465                                 if (model.getVlanType().equals(input.getVlanType())) {\r
466                                         targetModel = model;\r
467                                         break;\r
468                                 }\r
469                         }\r
470                         validateModel(targetModel, input);\r
471                 } else\r
472                         throw new VlantagApiException("No Resource Models available in Policy Manager for Policy Instance Name : "\r
473                                         + input.getPolicyInstanceName());\r
474                 return targetModel;\r
475         }\r
476 \r
477         void validateModel(ResourceModel model, UnassignVlanTagRequestInput input) throws VlantagApiException {\r
478                 if (model == null)\r
479                         throw new VlantagApiException(\r
480                                         "No Matching Policy Resource Model found for Vlan Type : " + input.getVlanType());\r
481                 else {\r
482                         if (model.getResourceResolutionRecipe() == null || model.getResourceResolutionRecipe().isEmpty())\r
483                                 throw new VlantagApiException(\r
484                                                 "Resource Resolution Recipe is null in Resource Model for Vlan Type : " + input.getVlanType());\r
485 \r
486                         if (model.getScope() == null || model.getScope().isEmpty())\r
487                                 throw new VlantagApiException("Scope is null in Resource Model for Vlan Type : " + input.getVlanType());\r
488 \r
489                         List<Elements> elements = model.getElements();\r
490                         validateElements(elements, input);\r
491                 }\r
492 \r
493         }\r
494 \r
495         protected void validateElements(List<Elements> elements, UnassignVlanTagRequestInput input)\r
496                         throws VlantagApiException {\r
497                 if (elements != null && !elements.isEmpty()) {\r
498                         for (Elements element : elements) {\r
499                                 if (element.getVlantagName() == null)\r
500                                         throw new VlantagApiException(\r
501                                                         "Vlantag Name missing for Element in Resource Model Policy for Vlan Type : "\r
502                                                                         + input.getVlanType());\r
503                         }\r
504                 } else\r
505                         throw new VlantagApiException(\r
506                                         "No Vlantag Elements found in Resource Model Policy for Vlan Type : " + input.getVlanType());\r
507 \r
508         }\r
509 \r
510         protected void validateRequest(UnassignVlanTagRequest request) throws VlantagApiException {\r
511                 if (request == null)\r
512                         throw new VlantagApiException("VlanTag Unassign Request is null.");\r
513 \r
514                 List<UnassignVlanTagRequestInput> inputList = request.getInput();\r
515                 if (inputList == null || inputList.isEmpty())\r
516                         throw new VlantagApiException("VlanTag Unassign Request Input is null or empty.");\r
517 \r
518                 for (UnassignVlanTagRequestInput input : inputList) {\r
519                         if (input.getPolicyInstanceName() == null || input.getPolicyInstanceName().isEmpty())\r
520                                 throw new VlantagApiException("VlanTag Unassign Request policy-instance-name is null.");\r
521 \r
522                         if (input.getVlanType() == null || input.getVlanType().isEmpty())\r
523                                 throw new VlantagApiException("VlanTag Unassign Request resource-name is null.");\r
524 \r
525                         if (input.getVlanTagKey() == null || input.getVlanTagKey().isEmpty())\r
526                                 throw new VlantagApiException("VlanTag Unassign Request key is null.");\r
527                 }\r
528 \r
529         }\r
530 \r
531         /**\r
532      * This is a ping service implementation to check the Vlantag Api is Up and running.\r
533      * \r
534      * @param name\r
535      * @return PingResponse\r
536      */\r
537         @Override\r
538         public PingResponse getPing(String name) {\r
539                 PingResponse ping = new PingResponse();\r
540                 ping.setMessage("Ping response : " + name + " Time : " + new Date());\r
541                 return ping;\r
542         }\r
543         \r
544 \r
545         protected void setResourceAllocator(ResourceAllocator ra) {\r
546                 this.resourceAllocator = ra;\r
547         }\r
548 \r
549         protected String trimBrackets(String recipe) {\r
550                 if (recipe != null) {\r
551                         if (recipe.contains(BEGIN_SQUAREBRACKET_RC))\r
552                                 recipe = recipe.replace(BEGIN_SQUAREBRACKET_RC, "");\r
553                         if (recipe.contains(END_SQUAREBRACKET_RC))\r
554                                 recipe = recipe.replace(END_SQUAREBRACKET_RC, "");\r
555                         if (recipe.contains("["))\r
556                                 recipe = recipe.replace("[", "");\r
557                         if (recipe.contains("]"))\r
558                                 recipe = recipe.replace("]", "");\r
559                 }\r
560                 return recipe;\r
561         }\r
562 \r
563 }\r