/** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.airavata.workflow.model.component.ws; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import org.apache.airavata.common.utils.XMLUtil; import org.apache.airavata.model.appcatalog.appinterface.ApplicationInterfaceDescription; import org.apache.airavata.model.application.io.DataType; import org.apache.airavata.model.application.io.InputDataObjectType; import org.apache.airavata.model.application.io.OutputDataObjectType; import org.apache.airavata.workflow.model.utils.WorkflowConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; //import xsul5.XmlConstants; @XmlRootElement(name = "Application") @XmlType(propOrder = {"applicationId", "name", "description", "inputParameters", "outputParameters"}) public class WSComponentApplication { private static final Logger log = LoggerFactory.getLogger(WSComponentApplication.class); private String applicationId; private String name; private String description; private List<WSComponentApplicationParameter> inputParameters; private List<WSComponentApplicationParameter> outputParameters; public WSComponentApplication() { } public static void main(String[] args) { WSComponentApplication app = new WSComponentApplication(); app.setApplicationId("dsfds"); app.setName("dfd"); app.setDescription("sdfdsfds"); app.addInputParameter(new WSComponentApplicationParameter("asas", DataType.STRING, null, "sdfds", 1)); app.addOutputParameter(new WSComponentApplicationParameter("9842", DataType.STRING, null, null)); app.addOutputParameter(new WSComponentApplicationParameter("AAAAA", DataType.STRING, "sdfsdf", "243bs sd fsd fs f dfd")); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try { JAXBContext context = JAXBContext.newInstance(WSComponentApplication.class); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // pretty marshaller.setProperty(Marshaller.JAXB_ENCODING, "ISO-8859-1"); // specify encoding // output xml to outputstream. marshaller.marshal(app, byteArrayOutputStream); org.xmlpull.infoset.XmlElement s = XMLUtil.stringToXmlElement(byteArrayOutputStream.toString()); System.out.println(s.toString()); } catch (JAXBException e) { log.error(e.getMessage(), e); } try { JAXBContext context = JAXBContext.newInstance(WSComponentApplication.class); Unmarshaller unmarshaller = context.createUnmarshaller(); // parse xml. WSComponentApplication d = (WSComponentApplication) unmarshaller.unmarshal(new ByteArrayInputStream(byteArrayOutputStream.toByteArray())); System.out.println(d.getApplicationId()); } catch (JAXBException e) { log.error(e.getMessage(), e); } } public static WSComponentApplication parse(org.xmlpull.infoset.XmlElement element) { String xmlString = XMLUtil.xmlElementToString(element); try { JAXBContext context = JAXBContext.newInstance(WSComponentApplication.class); Unmarshaller unmarshaller = context.createUnmarshaller(); return (WSComponentApplication) unmarshaller.unmarshal(new ByteArrayInputStream(xmlString.getBytes())); } catch (JAXBException e) { log.error(e.getMessage(), e); return null; } } public static WSComponentApplication parse(JsonObject applicationObject) { WSComponentApplication wsComponentApplication = new WSComponentApplication(); wsComponentApplication.description = applicationObject.getAsJsonPrimitive(WorkflowConstants.APPLICATION_COMPONENT_DESCRIPTION).getAsString(); wsComponentApplication.name = applicationObject.getAsJsonPrimitive(WorkflowConstants.APPLICATION_COMPONENT_NAME).getAsString(); wsComponentApplication.applicationId = applicationObject.getAsJsonPrimitive(WorkflowConstants.APPLICATION_COMPONENT_APPLICATION).getAsString(); if (applicationObject.get(WorkflowConstants.APPLICATION_INPUT) != null) { JsonArray inputArray = applicationObject.getAsJsonArray(WorkflowConstants.APPLICATION_INPUT); WSComponentApplicationParameter inputParameter; JsonObject inputObject; for (JsonElement jsonElement : inputArray) { if (jsonElement instanceof JsonObject) { inputObject = (JsonObject) jsonElement; inputParameter = new WSComponentApplicationParameter(); inputParameter.setDefaultValue(inputObject.getAsJsonPrimitive(WorkflowConstants.APPLICATION_DATA_DEFAULT_VALUE).getAsString()); inputParameter.setDescription(inputObject.getAsJsonPrimitive(WorkflowConstants.APPLICATION_DATA_DESCRIPTION).getAsString()); inputParameter.setName(inputObject.getAsJsonPrimitive(WorkflowConstants.APPLICATION_DATA_NAME).getAsString()); inputParameter.setType(DataType.valueOf(inputObject.getAsJsonPrimitive(WorkflowConstants.APPLICATION_DATA_DATA_TYPE).getAsString())); inputParameter.setInputOrder(inputObject.getAsJsonPrimitive(WorkflowConstants.APPLICATION_DATA_INPUT_ORDER).getAsInt()); if (inputObject.getAsJsonPrimitive(WorkflowConstants.APPLICATION_DATA_APP_ARGUMENT) != null) { inputParameter.setApplicationArgument(inputObject.getAsJsonPrimitive(WorkflowConstants.APPLICATION_DATA_APP_ARGUMENT).getAsString()); } wsComponentApplication.addInputParameter(inputParameter); } } } if (applicationObject.get(WorkflowConstants.APPLICATION_OUTPUT) != null) { JsonArray outputArray = applicationObject.getAsJsonArray(WorkflowConstants.APPLICATION_OUTPUT); WSComponentApplicationParameter outputParameter; JsonObject outputObject; for (JsonElement jsonElement : outputArray) { if (jsonElement instanceof JsonObject) { outputObject = (JsonObject) jsonElement; outputParameter = new WSComponentApplicationParameter(); outputParameter.setDescription(outputObject.getAsJsonPrimitive(WorkflowConstants.APPLICATION_DATA_DESCRIPTION).getAsString()); outputParameter.setName(outputObject.getAsJsonPrimitive(WorkflowConstants.APPLICATION_DATA_NAME).getAsString()); outputParameter.setType(DataType.valueOf(outputObject.getAsJsonPrimitive(WorkflowConstants.APPLICATION_DATA_DATA_TYPE).getAsString())); wsComponentApplication.addOutputParameter(outputParameter); } } } return wsComponentApplication; } public org.xmlpull.infoset.XmlElement toXml() { try { JAXBContext context = JAXBContext.newInstance(WSComponentApplication.class); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // pretty marshaller.setProperty(Marshaller.JAXB_ENCODING, "ISO-8859-1"); // specify encoding // output xml to outputstream. ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); marshaller.marshal(this, byteArrayOutputStream); return XMLUtil.stringToXmlElement(byteArrayOutputStream.toString()); } catch (Exception e) { log.error(e.getMessage(), e); return null; } } public JsonObject toJSON() { JsonObject componentObject = new JsonObject(); componentObject.addProperty(WorkflowConstants.APPLICATION_COMPONENT_DESCRIPTION, this.description); componentObject.addProperty(WorkflowConstants.APPLICATION_COMPONENT_NAME, this.name); componentObject.addProperty(WorkflowConstants.APPLICATION_COMPONENT_APPLICATION, this.applicationId); JsonArray inputArray = new JsonArray(); JsonObject inputObject; for (WSComponentApplicationParameter inputParameter : this.inputParameters) { inputObject = new JsonObject(); inputObject.addProperty(WorkflowConstants.APPLICATION_DATA_DESCRIPTION, inputParameter.getDescription()); inputObject.addProperty(WorkflowConstants.APPLICATION_DATA_NAME, inputParameter.getName()); inputObject.addProperty(WorkflowConstants.APPLICATION_DATA_DEFAULT_VALUE, inputParameter.getDefaultValue()); inputObject.addProperty(WorkflowConstants.APPLICATION_DATA_DATA_TYPE, inputParameter.getType().toString()); inputObject.addProperty(WorkflowConstants.APPLICATION_DATA_INPUT_ORDER, inputParameter.getInputOrder()); if (inputParameter.getApplicationArgument() != null) { inputObject.addProperty(WorkflowConstants.APPLICATION_DATA_APP_ARGUMENT, inputParameter.getApplicationArgument()); } inputArray.add(inputObject); } componentObject.add(WorkflowConstants.APPLICATION_INPUT, inputArray); JsonArray outputArray = new JsonArray(); JsonObject outputObject; for (WSComponentApplicationParameter outputParameter : this.outputParameters) { outputObject = new JsonObject(); outputObject.addProperty(WorkflowConstants.APPLICATION_DATA_DESCRIPTION, outputParameter.getDescription()); outputObject.addProperty(WorkflowConstants.APPLICATION_DATA_NAME, outputParameter.getName()); outputObject.addProperty(WorkflowConstants.APPLICATION_DATA_DATA_TYPE, outputParameter.getType().toString()); outputArray.add(outputObject); } componentObject.add(WorkflowConstants.APPLICATION_OUTPUT, outputArray); return componentObject; } public WSComponentApplication(ApplicationInterfaceDescription application) { setApplicationId(application.getApplicationInterfaceId()); setName(application.getApplicationName()); setDescription(application.getApplicationDescription()); List<InputDataObjectType> applicationInputs = application.getApplicationInputs(); for (InputDataObjectType inputDataObjectType : applicationInputs) { addInputParameter(new WSComponentApplicationParameter(inputDataObjectType.getName(), inputDataObjectType.getType(), inputDataObjectType.getUserFriendlyDescription(), inputDataObjectType.getValue(), inputDataObjectType.getApplicationArgument(), inputDataObjectType.getInputOrder())); } List<OutputDataObjectType> applicationOutputs = application.getApplicationOutputs(); for (OutputDataObjectType outputDataObjectType : applicationOutputs) { addOutputParameter(new WSComponentApplicationParameter(outputDataObjectType.getName(), outputDataObjectType.getType(), outputDataObjectType.getName(), outputDataObjectType.getValue())); } } @XmlAttribute(required = true, name = "application") public String getApplicationId() { return applicationId; } public void setApplicationId(String applicationId) { this.applicationId = applicationId; } @XmlAttribute(required = true) public String getName() { return name; } public void setName(String name) { this.name = name; } // @XmlElementWrapper(name = "Input") @XmlElement(name = "Input") public List<WSComponentApplicationParameter> getInputParameters() { return inputParameters; } public void setInputParameters( List<WSComponentApplicationParameter> inputParameters) { this.inputParameters = inputParameters; } @XmlElement(name = "Output") public List<WSComponentApplicationParameter> getOutputParameters() { return outputParameters; } public void setOutputParameters( List<WSComponentApplicationParameter> outputParameters) { this.outputParameters = outputParameters; } public void addInputParameter(WSComponentApplicationParameter inputParameter) { if (inputParameters == null) { inputParameters = new ArrayList<WSComponentApplicationParameter>(); } inputParameters.add(inputParameter); } public void addOutputParameter(WSComponentApplicationParameter outputParameter) { if (outputParameters == null) { outputParameters = new ArrayList<WSComponentApplicationParameter>(); } outputParameters.add(outputParameter); } @XmlAttribute(required = false) public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }