3b79cdc1a827aabef8aa73c7770c471c0ea9ab77
[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.getKey();\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 \r
169                 List<Range> rangeList = new ArrayList<>();\r
170                 for (AllowedRanges allowedRange : element.getAllowedRanges()) {\r
171                         Range range = new Range();\r
172 \r
173                         if (allowedRange.getMin() != null && !allowedRange.getMin().isEmpty())\r
174                                 range.min = Integer.parseInt(allowedRange.getMin());\r
175 \r
176                         if (allowedRange.getMax() != null && !allowedRange.getMax().isEmpty())\r
177                                 range.max = Integer.parseInt(allowedRange.getMax());\r
178 \r
179                         rangeList.add(range);\r
180                 }\r
181 \r
182                 rr.rangeOverrideList = rangeList;\r
183 \r
184                 String resourceValue = resolveResourceElementValue(input, model, element);\r
185                 if (resourceValue != null) {\r
186                         rr.rangeRequestedNumbers = resourceValue; /* Manually provided values */\r
187 \r
188                         /*\r
189                          * If the override flag is TRUE, then add the resource value also in the range,\r
190                          * so it will ignore the current range min-max in the policy. Persist in the DB\r
191                          * if available else Fail.\r
192                          */\r
193                         if (element.getOverwrite() != null && element.getOverwrite().equalsIgnoreCase("TRUE")) {\r
194                                 Range range = new Range();\r
195                                 range.min = Integer.parseInt(resourceValue);\r
196                                 rangeList.add(range);\r
197                         }\r
198                 }\r
199 \r
200                 StrUtil.info(log, re);\r
201                 StrUtil.info(log, rt);\r
202                 StrUtil.info(log, rr);\r
203 \r
204         }\r
205 \r
206         protected String resolveResourceElementValue(AssignVlanTagRequestInput input, ResourceModel model, Elements element)\r
207                         throws VlantagApiException {\r
208                 String recipe = trimBrackets(model.getResourceResolutionRecipe().trim());\r
209 \r
210                 if (input.getResourceValue() != null && !input.getResourceValue().trim().isEmpty()\r
211                                 && !input.getResourceValue().contains("$")) {\r
212                         log.info("Resource Value : " + input.getResourceValue());\r
213                         String resourceValue = trimBrackets(input.getResourceValue());\r
214 \r
215                         String[] vlantagNames = recipe.split(",");\r
216                         String[] resourceValues = resourceValue.split(",");\r
217 \r
218                         try {\r
219                                 for (int i = 0; i < vlantagNames.length; i++) {\r
220                                         if (vlantagNames[i].trim().equalsIgnoreCase(element.getVlantagName().trim()))\r
221                                                 return resourceValues[i].trim();\r
222                                 }\r
223                         } catch (IndexOutOfBoundsException e) {\r
224                                 throw new VlantagApiException("No Matching Resource Value found from Recipe : \""\r
225                                                 + model.getResourceResolutionRecipe() + "\" for Vlantag Name : " + element.getVlantagName());\r
226                         }\r
227 \r
228                 }\r
229                 return null;\r
230         }\r
231 \r
232         ResourceModel validate(List<ResourceModel> resourceModels, AssignVlanTagRequestInput input)\r
233                         throws VlantagApiException {\r
234                 ResourceModel targetModel = null;\r
235                 if (resourceModels != null && !resourceModels.isEmpty()) {\r
236                         for (ResourceModel model : resourceModels) {\r
237                                 if (model.getVlanType().equals(input.getVlanType())) {\r
238                                         targetModel = model;\r
239                                         break;\r
240                                 }\r
241                         }\r
242                         validateModel(targetModel, input);\r
243                 } else\r
244                         throw new VlantagApiException("No Resource Models available in Policy Manager for Policy Instance Name : "\r
245                                         + input.getPolicyInstanceName());\r
246                 return targetModel;\r
247         }\r
248 \r
249         void validateModel(ResourceModel model, AssignVlanTagRequestInput input) throws VlantagApiException {\r
250 \r
251                 if (model == null)\r
252                         throw new VlantagApiException(\r
253                                         "No Matching Policy Resource Model found for Vlan Type : " + input.getVlanType());\r
254                 else {\r
255                         if (model.getResourceResolutionRecipe() == null || model.getResourceResolutionRecipe().isEmpty())\r
256                                 throw new VlantagApiException(\r
257                                                 "Resource Resolution Recipe is null in Resource Model for Vlan Type : " + input.getVlanType());\r
258 \r
259                         if (model.getScope() == null || model.getScope().isEmpty())\r
260                                 throw new VlantagApiException("Scope is null in Resource Model for Vlan Type : " + input.getVlanType());\r
261 \r
262                         List<Elements> elements = model.getElements();\r
263                         validateElements(elements, input);\r
264                 }\r
265 \r
266         }\r
267 \r
268         void validateElements(List<Elements> elements, AssignVlanTagRequestInput input) throws VlantagApiException {\r
269                 if (elements != null && !elements.isEmpty()) {\r
270                         for (Elements element : elements) {\r
271                                 if (element.getVlantagName() == null)\r
272                                         throw new VlantagApiException(\r
273                                                         "Vlantag Name missing for Element in Resource Model Policy for Vlan Type : "\r
274                                                                         + input.getVlanType());\r
275                                 if (element.getAllowedRanges() == null || element.getAllowedRanges().isEmpty())\r
276                                         throw new VlantagApiException(\r
277                                                         "Allowed Ranges missing for Element in Resource Model Policy for Vlan Type : "\r
278                                                                         + input.getVlanType());\r
279                         }\r
280                 } else\r
281                         throw new VlantagApiException(\r
282                                         "No Vlantag Elements found in Resource Model Policy for Vlan Type : " + input.getVlanType());\r
283 \r
284         }\r
285 \r
286         PolicyManagerClient getPolicyManagerClient() {\r
287                 return new PolicyManagerClient();\r
288         }\r
289 \r
290         void validateRequest(AssignVlanTagRequest request) throws VlantagApiException {\r
291                 if (request == null)\r
292                         throw new VlantagApiException("VlanTag Assign Request is null.");\r
293 \r
294                 List<AssignVlanTagRequestInput> inputList = request.getInput();\r
295 \r
296                 if (inputList == null || inputList.isEmpty())\r
297                         throw new VlantagApiException("VlanTag Assign Request Input is null or empty.");\r
298 \r
299                 for (AssignVlanTagRequestInput input : inputList) {\r
300                         if (input.getPolicyInstanceName() == null || input.getPolicyInstanceName().isEmpty())\r
301                                 throw new VlantagApiException("VlanTag Assign Request policy-instance-name is null.");\r
302 \r
303                         if (input.getVlanType() == null || input.getVlanType().isEmpty())\r
304                                 throw new VlantagApiException("VlanTag Assign Request vlan-type is null.");\r
305 \r
306                         if (input.getScopeId() == null || input.getScopeId().isEmpty())\r
307                                 throw new VlantagApiException("VlanTag Assign Request scope-id is null.");\r
308 \r
309                         if (input.getKey() == null || input.getKey().isEmpty())\r
310                                 throw new VlantagApiException("VlanTag Assign Request key is null.");\r
311                 }\r
312 \r
313         }\r
314 \r
315         private AssignVlanTagResponseOutput prepareVlanTagResponse(AssignVlanTagRequestInput input, ResourceModel model,\r
316                         List<ResourceResponse> rl) {\r
317                 AssignVlanTagResponseOutput ro = new AssignVlanTagResponseOutput();\r
318                 List<VlanTag> vlanTagList = new ArrayList<>();\r
319 \r
320                 if (rl != null && !rl.isEmpty()) {\r
321                         ro.setResourceName(input.getResourceName());\r
322                         ro.setResourceValue(resolveRecipe(model, rl));\r
323                         ro.setResourceVlanRole(model.getResourceVlanRole());\r
324                         if (model.getDataStore() != null && !model.getDataStore().isEmpty()) {\r
325                                 for (ResourceResponse rr : rl) {\r
326                                         VlanTag tag = new VlanTag();\r
327                                         Optional<Elements> optionalElements = model.getElements().stream()\r
328                                                         .filter(element -> element.getVlantagName().equalsIgnoreCase(rr.endPointPosition))\r
329                                                         .findFirst();\r
330                                         optionalElements.ifPresent(element -> tag.setElementVlanRole(element.getElementVlanRole()));\r
331 \r
332                                         tag.setVlanUuid(UUID.randomUUID().toString());\r
333                                         tag.setVlantagName(rr.endPointPosition);\r
334                                         tag.setVlantagValue(rr.resourceAllocated);\r
335                                         vlanTagList.add(tag);\r
336                                 }\r
337 \r
338                         }\r
339                         ro.setStoredElements(vlanTagList);\r
340                 }\r
341 \r
342                 return ro;\r
343         }\r
344 \r
345         protected String resolveRecipe(ResourceModel model, List<ResourceResponse> rl) {\r
346                 String recipe = model.getResourceResolutionRecipe().trim();\r
347                 String resourceValue = recipe;\r
348 \r
349                 if (recipe.contains(BEGIN_SQUAREBRACKET_RC)) {\r
350                         recipe = recipe.replace(BEGIN_SQUAREBRACKET_RC, "");\r
351                         resourceValue = resourceValue.replace(BEGIN_SQUAREBRACKET_RC, "[ ");\r
352                 }\r
353 \r
354                 if (recipe.contains(END_SQUAREBRACKET_RC)) {\r
355                         recipe = recipe.replace(END_SQUAREBRACKET_RC, "");\r
356                         resourceValue = resourceValue.replace(END_SQUAREBRACKET_RC, " ]");\r
357                 }\r
358 \r
359                 String[] vlantagNames = recipe.split(",");\r
360 \r
361                 for (String vlantagName : vlantagNames) {\r
362                         for (ResourceResponse rr : rl) {\r
363                                 if (vlantagName.trim().equalsIgnoreCase(rr.endPointPosition)) {\r
364                                         resourceValue = resourceValue.replace(vlantagName, " " + rr.resourceAllocated);\r
365                                         break;\r
366                                 }\r
367                         }\r
368                 }\r
369 \r
370                 log.info(resourceValue);\r
371 \r
372                 return resourceValue;\r
373         }\r
374 \r
375     private void rollbackVlanTags(List<AssignVlanTagRequestInput> reservedResources) throws Exception {\r
376         UnassignVlanTagRequest unassignRequest = new UnassignVlanTagRequest();\r
377         List<UnassignVlanTagRequestInput> inputList = new ArrayList<>();\r
378 \r
379         if (reservedResources != null && !reservedResources.isEmpty()) {\r
380             reservedResources.forEach(assignReqInput -> {\r
381 \r
382                 UnassignVlanTagRequestInput input = new UnassignVlanTagRequestInput();\r
383                 input.setVlanType(assignReqInput.getVlanType());\r
384                 input.setKey(assignReqInput.getKey());\r
385                 input.setPolicyInstanceName(assignReqInput.getPolicyInstanceName());\r
386                 inputList.add(input);\r
387             });\r
388             unassignRequest.setInput(inputList);\r
389             unassignVlanTag(unassignRequest);\r
390         }\r
391 \r
392     }\r
393 \r
394         /**\r
395      * This is a unassignVlanTag service implementation to unassign Vlantags based on the\r
396      * UnassignVlanTagRequest and Policy instance.\r
397      * \r
398      * @param UnassignVlanTagRequest\r
399      * @return UnassignVlanTagResponse\r
400      */\r
401         @Override\r
402         public UnassignVlanTagResponse unassignVlanTag(UnassignVlanTagRequest request) throws Exception {\r
403                 UnassignVlanTagResponse response = new UnassignVlanTagResponse();\r
404                 List<UnassignVlanTagResponseOutput> output = new ArrayList<>();\r
405 \r
406                 try {\r
407                         validateRequest(request);\r
408                         List<UnassignVlanTagRequestInput> vlanTagRequests = request.getInput();\r
409 \r
410                         for (UnassignVlanTagRequestInput input : vlanTagRequests) {\r
411                                 List<ResourceModel> resourceModels = policyClient.getPolicy(input.getPolicyInstanceName());\r
412                                 ResourceModel model = validate(resourceModels, input);\r
413 \r
414                                 for (Elements elements : model.getElements()) {\r
415 \r
416                                         ResourceEntity re = new ResourceEntity();\r
417                                         re.resourceEntityId = input.getKey();\r
418                                         re.resourceEntityType = model.getKeyType() == null ? "DEFAULT" : model.getKeyType();\r
419                                         re.resourceEntityVersion = "1";\r
420 \r
421                                         ResourceRequest rr = new ResourceRequest();\r
422                                         rr.endPointPosition = elements.getVlantagName();\r
423 \r
424                                         if (resourceAllocator != null) {\r
425                                                 AllocationStatus status = resourceAllocator.release(re, rr);\r
426 \r
427                                                 if (AllocationStatus.Success.equals(status)) {\r
428                                                         UnassignVlanTagResponseOutput ro = new UnassignVlanTagResponseOutput();\r
429                                                         ro.setKey(input.getKey());\r
430                                                         ro.setVlanType(input.getVlanType());\r
431                                                         ro.setVlantagName(elements.getVlantagName());\r
432                                                         output.add(ro);\r
433                                                 } else {\r
434                                                         throw new VlantagApiException(\r
435                                                                         "Failed to release VlanTags for Element : " + elements.getVlantagName() + ".");\r
436                                                 }\r
437                                         } else\r
438                                                 throw new VlantagApiException(\r
439                                                                 "ResourceAllocator not available. Failed to Unassign VlanTags for Element : "\r
440                                                                                 + elements.getVlantagName()\r
441                                                                                 + ". Rolling back vlantags for other elements (if any).");\r
442                                 }\r
443                         }\r
444                 } catch (Exception e) {\r
445                         log.error("Exception : " + e.getMessage(), e);\r
446 \r
447                         response.setErrorCode(500);\r
448                         response.setErrorMessage(e.getMessage());\r
449                         return response;\r
450                 }\r
451 \r
452                 response.setOutput(output);\r
453                 response.setErrorCode(200);\r
454                 response.setErrorMessage("Success");\r
455                 return response;\r
456         }\r
457 \r
458         ResourceModel validate(List<ResourceModel> resourceModels, UnassignVlanTagRequestInput input)\r
459                         throws VlantagApiException {\r
460                 ResourceModel targetModel = null;\r
461                 if (resourceModels != null && !resourceModels.isEmpty()) {\r
462                         for (ResourceModel model : resourceModels) {\r
463                                 if (model.getVlanType().equals(input.getVlanType())) {\r
464                                         targetModel = model;\r
465                                         break;\r
466                                 }\r
467                         }\r
468                         validateModel(targetModel, input);\r
469                 } else\r
470                         throw new VlantagApiException("No Resource Models available in Policy Manager for Policy Instance Name : "\r
471                                         + input.getPolicyInstanceName());\r
472                 return targetModel;\r
473         }\r
474 \r
475         void validateModel(ResourceModel model, UnassignVlanTagRequestInput input) throws VlantagApiException {\r
476                 if (model == null)\r
477                         throw new VlantagApiException(\r
478                                         "No Matching Policy Resource Model found for Vlan Type : " + input.getVlanType());\r
479                 else {\r
480                         if (model.getResourceResolutionRecipe() == null || model.getResourceResolutionRecipe().isEmpty())\r
481                                 throw new VlantagApiException(\r
482                                                 "Resource Resolution Recipe is null in Resource Model for Vlan Type : " + input.getVlanType());\r
483 \r
484                         if (model.getScope() == null || model.getScope().isEmpty())\r
485                                 throw new VlantagApiException("Scope is null in Resource Model for Vlan Type : " + input.getVlanType());\r
486 \r
487                         List<Elements> elements = model.getElements();\r
488                         validateElements(elements, input);\r
489                 }\r
490 \r
491         }\r
492 \r
493         protected void validateElements(List<Elements> elements, UnassignVlanTagRequestInput input)\r
494                         throws VlantagApiException {\r
495                 if (elements != null && !elements.isEmpty()) {\r
496                         for (Elements element : elements) {\r
497                                 if (element.getVlantagName() == null)\r
498                                         throw new VlantagApiException(\r
499                                                         "Vlantag Name missing for Element in Resource Model Policy for Vlan Type : "\r
500                                                                         + input.getVlanType());\r
501                         }\r
502                 } else\r
503                         throw new VlantagApiException(\r
504                                         "No Vlantag Elements found in Resource Model Policy for Vlan Type : " + input.getVlanType());\r
505 \r
506         }\r
507 \r
508         protected void validateRequest(UnassignVlanTagRequest request) throws VlantagApiException {\r
509                 if (request == null)\r
510                         throw new VlantagApiException("VlanTag Unassign Request is null.");\r
511 \r
512                 List<UnassignVlanTagRequestInput> inputList = request.getInput();\r
513                 if (inputList == null || inputList.isEmpty())\r
514                         throw new VlantagApiException("VlanTag Unassign Request Input is null or empty.");\r
515 \r
516                 for (UnassignVlanTagRequestInput input : inputList) {\r
517                         if (input.getPolicyInstanceName() == null || input.getPolicyInstanceName().isEmpty())\r
518                                 throw new VlantagApiException("VlanTag Unassign Request policy-instance-name is null.");\r
519 \r
520                         if (input.getVlanType() == null || input.getVlanType().isEmpty())\r
521                                 throw new VlantagApiException("VlanTag Unassign Request resource-name is null.");\r
522 \r
523                         if (input.getKey() == null || input.getKey().isEmpty())\r
524                                 throw new VlantagApiException("VlanTag Unassign Request key is null.");\r
525                 }\r
526 \r
527         }\r
528 \r
529         /**\r
530      * This is a ping service implementation to check the Vlantag Api is Up and running.\r
531      * \r
532      * @param name\r
533      * @return PingResponse\r
534      */\r
535         @Override\r
536         public PingResponse getPing(String name) {\r
537                 PingResponse ping = new PingResponse();\r
538                 ping.setMessage("Ping response : " + name + " Time : " + new Date());\r
539                 return ping;\r
540         }\r
541         \r
542 \r
543         protected void setResourceAllocator(ResourceAllocator ra) {\r
544                 this.resourceAllocator = ra;\r
545         }\r
546 \r
547         protected String trimBrackets(String recipe) {\r
548                 if (recipe != null) {\r
549                         if (recipe.contains(BEGIN_SQUAREBRACKET_RC))\r
550                                 recipe = recipe.replace(BEGIN_SQUAREBRACKET_RC, "");\r
551                         if (recipe.contains(END_SQUAREBRACKET_RC))\r
552                                 recipe = recipe.replace(END_SQUAREBRACKET_RC, "");\r
553                         if (recipe.contains("["))\r
554                                 recipe = recipe.replace("[", "");\r
555                         if (recipe.contains("]"))\r
556                                 recipe = recipe.replace("]", "");\r
557                 }\r
558                 return recipe;\r
559         }\r
560 \r
561 }\r