private Optional parseXML()

in transport/odata-transport/src/main/java/org/apache/airavata/mft/transport/odata/ODataMetadataCollector.java [104:160]


    private Optional<FileMetadata> parseXML(String xmlBody) {

        try {
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(new InputSource(new StringReader(xmlBody)));
            doc.getDocumentElement().normalize();

            System.out.print("Root element: ");
            System.out.println(doc.getDocumentElement().getNodeName());
            NodeList properties = doc.getElementsByTagName("m:properties");

            if (properties.getLength() == 1) {

                FileMetadata.Builder builder = FileMetadata.newBuilder();

                Node propertyNode = properties.item(0);
                NodeList childNodes = propertyNode.getChildNodes();
                for (int i = 0; i < childNodes.getLength(); i++) {
                    Node item = childNodes.item(i);
                    switch (item.getNodeName()) {
                        case "d:ContentLength":
                            builder.setResourceSize(Long.parseLong(item.getTextContent()));
                            break;
                        case "d:CreationDate":
                            builder.setCreatedTime(Instant.parse(item.getTextContent() + "Z").toEpochMilli());
                            break;
                        case "d:ModificationDate":
                            builder.setUpdateTime(Instant.parse(item.getTextContent() + "Z").toEpochMilli());
                            break;
                        case "d:Name":
                            builder.setFriendlyName(item.getTextContent());
                            break;
                        case "d:Id":
                            builder.setResourcePath(item.getTextContent());
                            break;
                        case "d:Checksum":
                            NodeList checksumNodes = item.getChildNodes();
                            for (int j = 0; j < checksumNodes.getLength(); j++) {
                                Node item1 = checksumNodes.item(j);
                                if (item1.getNodeName().equals("d:Value")) {
                                    builder.setMd5Sum(item1.getTextContent());
                                }
                            }
                            break;
                    }
                }

                return Optional.of(builder.build());
            }

        } catch (Exception e) {
            logger.warn("Failed while parsing provided XML body", e);
        }

        return Optional.empty();
    }