/** * Copyright (C) 2007 - 2014 52°North Initiative for Geospatial Open Source * Software GmbH * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published * by the Free Software Foundation. * * If the program is linked with libraries which are licensed under one of * the following licenses, the combination of the program with the linked * library is not considered a "derivative work" of the program: * * • Apache License, version 2.0 * • Apache Software License, version 1.0 * • GNU Lesser General Public License, version 3 * • Mozilla Public License, versions 1.0, 1.1 and 2.0 * • Common Development and Distribution License (CDDL), version 1.0 * * Therefore the distribution of the program linked with libraries licensed * under the aforementioned licenses, is permitted by the copyright holders * if the distribution is compliant with both the GNU General Public * License version 2 and the aforementioned licenses. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. */ package org.n52.wps.transactional.deploymentprofiles; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.xpath.XPathAPI; import org.n52.wps.transactional.algorithm.GenericTransactionalAlgorithm; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.traversal.NodeIterator; public class BPELDeploymentProfile extends DeploymentProfile{ private Node suitCase; private Node bpel; private Node clientWSDL; private Map<Integer, Node> wsdlList; public BPELDeploymentProfile(Node payload, String processID) { super(payload, processID); try { extractInformation(payload); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public Node getSuitCase() { return suitCase; } public Node getBPEL() { return bpel; } public Node getClientWSDL() { return clientWSDL; } public Map<Integer, Node> getWSDLList() { return wsdlList; } private void extractInformation(Node deployProcessDocument) throws Exception { //parse out // 1. suitcase // 2. clientwsdl // 3. other wsdl // 4. bpel // 5.create describe process //System.out.println("deployProcessDocument: "); //printNode(deployProcessDocument, ""); //writeXmlFile(deployProcessDocument, "C:\\BPEL\\request.xml"); // 1. suitcase //suitCase = XPathAPI.selectSingleNode(deployProcessDocument, "/DeployProcessRequest/BPELDeploymentProfile/SuitCase/BPELSuitcase"); suitCase = XPathAPI.selectSingleNode(deployProcessDocument, "/DeployProcess/DeploymentProfile/SuitCase/BPELSuitcase/deploy"); //select processName //String processName = XPathAPI.selectSingleNode(suitCase, "/DeployProcessRequest/BPELDeploymentProfile/SuitCase/BPELSuitcase/BPELProcess/@id").getTextContent(); //System.out.println("suitCase: "); //printNode(suitCase, ""); String processName =""; //Node pn; // pn = XPathAPI.selectSingleNode(suitCase, "//deploy/process"); try{ //processName = XPathAPI.selectSingleNode(suitCase, "//process/@name").getTextContent(); processName = XPathAPI.selectSingleNode(deployProcessDocument, "/DeployProcess/ProcessDescriptions/ProcessDescription/Identifier/text()").getNodeValue().trim(); }catch(DOMException de){ de.printStackTrace(); }catch(Exception e){ e.printStackTrace(); } // 2. clientwsdl //clientWSDL = XPathAPI.selectSingleNode(deployProcessDocument, "/DeployProcessRequest/BPELDeploymentProfile/ProcessWSDL/definitions"); clientWSDL = XPathAPI.selectSingleNode(deployProcessDocument, "/DeployProcess/DeploymentProfile/ProcessWSDL/definitions"); //System.out.println("clientWSDL: "); //printNode(clientWSDL, ""); // 3. other wsdl //Node tempWSDLList = XPathAPI.selectSingleNode(deployProcessDocument, "/DeployProcessRequest/BPELDeploymentProfile/WSDL-List"); Node tempWSDLList = XPathAPI.selectSingleNode(deployProcessDocument, "/DeployProcess/DeploymentProfile/WSDL-List"); //NodeIterator wsdlIterator = XPathAPI.selectNodeIterator(tempWSDLList, "/DeployProcessRequest/BPELDeploymentProfile/WSDL-List/definitions"); NodeIterator wsdlIterator = XPathAPI.selectNodeIterator(tempWSDLList, "/DeployProcess/DeploymentProfile/WSDL-List/definitions"); //Note: WSDL files are written in the correct order wsdlList = new HashMap<Integer, Node>(); int index = 0; while(true){ Node wsdl = wsdlIterator.nextNode(); if(wsdl == null){ break; } wsdlList.put(index, wsdl); index = index +1; } // 4. bpel //bpel = XPathAPI.selectSingleNode(deployProcessDocument, "/DeployProcessRequest/BPELDeploymentProfile/BPEL/process"); bpel = XPathAPI.selectSingleNode(deployProcessDocument, "/DeployProcess/DeploymentProfile/BPEL/process"); //System.out.println("bpel: "); //printNode(bpel, ""); } private void writeXmlFile(Document doc, String filename) { try { // Prepare the DOM document for writing Source source = new DOMSource(doc); // Prepare the output file File file = new File(filename); file.createNewFile(); Result result = new StreamResult(file); // Write the DOM document to the file Transformer xformer = TransformerFactory.newInstance().newTransformer(); xformer.transform(source, result); } catch (TransformerConfigurationException e) { System.out.println("error"); } catch (TransformerException e) { System.out.println("error"); } catch (Exception e) { System.out.println("error"); } } public void printNode(Node node, String indent) { switch (node.getNodeType()) { case Node.DOCUMENT_NODE: System.out.println(indent + "<?xml version=\"1.0\"?>"); NodeList nodes = node.getChildNodes(); if (nodes != null) { for (int i = 0; i < nodes.getLength(); i++) { printNode(nodes.item(i), ""); } } break; case Node.ELEMENT_NODE: String name = node.getNodeName(); System.out.print(indent + "<" + name); NamedNodeMap attributes = node.getAttributes(); for (int i = 0; i < attributes.getLength(); i++) { Node current = attributes.item(i); System.out.print(" " + current.getNodeName() + "=\"" + current.getNodeValue() + "\""); } System.out.println(">"); NodeList children = node.getChildNodes(); if (children != null) { for (int i = 0; i < children.getLength(); i++) { printNode(children.item(i), indent + " "); } } System.out.println(indent + "</" + name + ">"); break; case Node.TEXT_NODE: case Node.CDATA_SECTION_NODE: System.out.println(indent + node.getNodeValue()); break; case Node.PROCESSING_INSTRUCTION_NODE: System.out.println(indent + "<?" + node.getNodeName() + " " + node.getNodeValue() + " ?>"); break; case Node.ENTITY_REFERENCE_NODE: System.out.println("&" + node.getNodeName() + ";"); break; case Node.DOCUMENT_TYPE_NODE: DocumentType docType = (DocumentType) node; System.out.print("<!DOCTYPE " + docType.getName()); if (docType.getPublicId() != null) { System.out.print("PUBLIC \"" + docType.getPublicId() + "\""); } else { System.out.print(" SYSTEM "); } System.out.println("\"" + docType.getSystemId() + "\" >"); break; } } }