- @Override\r
- public void rollback(List<Artifact> completedArtifacts, String distributionId, AaiRestClient aaiClient) {\r
- for (Artifact completedArtifact : completedArtifacts) {\r
- List<Map<String, String>> completedImageData = unmarshallVnfcData(completedArtifact);\r
- for (Map<String, String> data : completedImageData) {\r
- String url = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/" + data.get(ATTR_UUID);\r
- // Try to delete the image. If something goes wrong we can't really do anything here\r
- aaiClient.getAndDeleteResource(url, distributionId);\r
+ private List<Map<String, String>> parseXmlVnfcData(Artifact vnfcArtifact) throws VnfImageException {\r
+ List<Map<String, String>> vnfcData = new ArrayList<>();\r
+ try {\r
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\r
+ factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);\r
+ DocumentBuilder builder = factory.newDocumentBuilder();\r
+ InputSource is = new InputSource(new StringReader(vnfcArtifact.getPayload()));\r
+ Document doc = builder.parse(is);\r
+ doc.getDocumentElement().normalize();\r
+\r
+ NodeList pnl = doc.getElementsByTagName("part-number-list");\r
+ for (int i = 0; i < pnl.getLength(); i++) {\r
+ Node partNumber = pnl.item(i);\r
+ if (partNumber.getNodeType() == Node.ELEMENT_NODE) {\r
+ Element vendorInfo = getFirstChildNodeByName(partNumber, "vendor-info");\r
+ if (vendorInfo != null) {\r
+ Map<String, String> application = new HashMap<>();\r
+ application.put("application",\r
+ vendorInfo.getElementsByTagName("vendor-model").item(0).getTextContent());\r
+ application.put("application-vendor",\r
+ vendorInfo.getElementsByTagName("vendor-name").item(0).getTextContent());\r
+ populateSoftwareVersions(vnfcData, application, partNumber);\r
+ }\r
+ }\r
+ }\r
+ } catch (Exception ex) {\r
+ throw new VnfImageException(ex);\r
+ }\r
+ return vnfcData;\r
+ }\r
+\r
+ /**\r
+ * @param vnfcData to populate\r
+ * @param applicationData\r
+ * @param partNumber\r
+ */\r
+ private void populateSoftwareVersions(List<Map<String, String>> vnfcData, Map<String, String> applicationData,\r
+ Node partNumber) {\r
+ NodeList nodes = partNumber.getChildNodes();\r
+ for (int i = 0; i < nodes.getLength(); i++) {\r
+ Node childNode = nodes.item(i);\r
+ if (childNode.getNodeName().equalsIgnoreCase("software-version-list")) {\r
+ Element softwareVersion = getFirstChildNodeByName(childNode, "software-version");\r
+ if (softwareVersion != null) {\r
+ HashMap<String, String> vnfImageData = new HashMap<>(applicationData);\r
+ vnfImageData.put("application-version", softwareVersion.getTextContent());\r
+ vnfcData.add(vnfImageData);\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ /**\r
+ * @param node\r
+ * @param childNodeName\r
+ * @return the first child node matching the given name\r
+ */\r
+ private Element getFirstChildNodeByName(Node node, String childNodeName) {\r
+ NodeList nodes = node.getChildNodes();\r
+ for (int i = 0; i < nodes.getLength(); i++) {\r
+ Node childNode = nodes.item(i);\r
+ if (childNode.getNodeName().equalsIgnoreCase(childNodeName)) {\r
+ return (Element) childNode;\r