Return-Path: X-Original-To: apmail-airavata-commits-archive@www.apache.org Delivered-To: apmail-airavata-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 047EC111AB for ; Mon, 14 Apr 2014 18:35:41 +0000 (UTC) Received: (qmail 66599 invoked by uid 500); 14 Apr 2014 18:32:49 -0000 Delivered-To: apmail-airavata-commits-archive@airavata.apache.org Received: (qmail 64676 invoked by uid 500); 14 Apr 2014 18:31:19 -0000 Mailing-List: contact commits-help@airavata.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@airavata.apache.org Delivered-To: mailing list commits@airavata.apache.org Received: (qmail 62368 invoked by uid 99); 14 Apr 2014 18:30:09 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 14 Apr 2014 18:30:09 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 804CE98D45F; Mon, 14 Apr 2014 18:30:05 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: samindaw@apache.org To: commits@airavata.apache.org Date: Mon, 14 Apr 2014 18:31:13 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [71/90] [abbrv] AIRAVATA-1124 http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/ServiceDescriptionNode.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/ServiceDescriptionNode.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/ServiceDescriptionNode.java new file mode 100644 index 0000000..81a5589 --- /dev/null +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/ServiceDescriptionNode.java @@ -0,0 +1,142 @@ +/* + * + * 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.xbaya.registrybrowser.nodes; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.swing.Icon; +import javax.swing.JTree; +import javax.swing.tree.TreeNode; + +import org.apache.airavata.client.api.exception.AiravataAPIInvocationException; +import org.apache.airavata.registry.api.exception.RegistryException; +import org.apache.airavata.commons.gfac.type.ServiceDescription; +import org.apache.airavata.xbaya.model.registrybrowser.ApplicationDeploymentDescriptions; +import org.apache.airavata.xbaya.model.registrybrowser.InputParameters; +import org.apache.airavata.xbaya.model.registrybrowser.OutputParameters; +import org.apache.airavata.xbaya.ui.actions.AbstractBrowserActionItem; +import org.apache.airavata.xbaya.ui.actions.registry.browser.DeleteAction; +import org.apache.airavata.xbaya.ui.actions.registry.browser.EditAction; +import org.apache.airavata.xbaya.ui.dialogs.descriptors.DeploymentDescriptionDialog; + +public class ServiceDescriptionNode extends AbstractAiravataTreeNode { + private ServiceDescription serviceDescription; + + public ServiceDescriptionNode(ServiceDescription serviceDescription, TreeNode parent) { + super(parent); + setServiceDescription(serviceDescription); + } + + @Override + protected List getChildren() { + List parameterTypeList=new ArrayList(); + if (getServiceDescription().getType().getInputParametersArray().length>0){ + parameterTypeList.add(new InputParameters(getServiceDescription().getType().getInputParametersArray())); + } + if (getServiceDescription().getType().getOutputParametersArray().length>0){ + parameterTypeList.add(new OutputParameters(getServiceDescription().getType().getOutputParametersArray())); + } + parameterTypeList.add(new ApplicationDeploymentDescriptions(getRegistry(),getServiceDescription().getType().getName())); + return getTreeNodeList(parameterTypeList.toArray(), this); + } + + @Override + public String getCaption(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + return getServiceDescription().getType().getName(); + } + + @Override + public Icon getIcon(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + return JCRBrowserIcons.SERVICE_ICON; + } + + public ServiceDescription getServiceDescription() { + return serviceDescription; + } + + public void setServiceDescription(ServiceDescription serviceDescription) { + this.serviceDescription = serviceDescription; + } + + @Override + public List getSupportedActions() { + return Arrays.asList(EditAction.ID, DeleteAction.ID); + } + + public boolean triggerAction(JTree tree, String action) throws Exception { + if (action.equals(DeleteAction.ID)) { + return deleteServiceDescription(tree); + } else if (action.equals(EditAction.ID)) { + return editServiceDescription(tree); + } + return super.triggerAction(tree, action); + } + + private boolean editServiceDescription(JTree tree) { + DeploymentDescriptionDialog serviceDescriptionDialog = new DeploymentDescriptionDialog(getRegistry(),false,getServiceDescription(), null); + serviceDescriptionDialog.open(); +// ServiceDescriptionDialog serviceDescriptionDialog = new ServiceDescriptionDialog(getRegistry(),false,getServiceDescription()); +// serviceDescriptionDialog.open(); + if (serviceDescriptionDialog.isServiceCreated()) { + refresh(); + reloadTreeNode(tree, this); + } + return true; + } + + private boolean deleteServiceDescription(JTree tree) throws AiravataAPIInvocationException { + if (askQuestion("Application", "Are you sure that you want to remove the applications associated with \"" + + getServiceDescription().getType().getName() + "\"?")) { + getRegistry().getApplicationManager().deleteServiceDescription(getServiceDescription().getType().getName()); + ((AbstractAiravataTreeNode) getParent()).refresh(); + reloadTreeNode(tree, getParent()); + } + return true; + } + + @Override + public String getActionCaption(AbstractBrowserActionItem action) { + if (action.getID().equals(DeleteAction.ID)) { + return "Remove"; + } else if (action.getID().equals(EditAction.ID)) { + return "View/Edit"; + } + return action.getDefaultCaption(); + } + + @Override + public Icon getActionIcon(AbstractBrowserActionItem action) { + return null; + } + + @Override + public String getActionDescription(AbstractBrowserActionItem action) { + return null; + } + + @Override + public String getDefaultAction() { + return EditAction.ID; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/ServiceDescriptionsNode.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/ServiceDescriptionsNode.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/ServiceDescriptionsNode.java new file mode 100644 index 0000000..dbfce2e --- /dev/null +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/ServiceDescriptionsNode.java @@ -0,0 +1,137 @@ +/* + * + * 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.xbaya.registrybrowser.nodes; + +import java.util.Arrays; +import java.util.List; + +import javax.swing.Icon; +import javax.swing.JTree; +import javax.swing.tree.TreeNode; + +import org.apache.airavata.client.api.AiravataAPI; +import org.apache.airavata.client.api.exception.AiravataAPIInvocationException; +import org.apache.airavata.registry.api.exception.RegistryException; +import org.apache.airavata.commons.gfac.type.ServiceDescription; +//import org.apache.airavata.registry.api.AiravataRegistry2; +import org.apache.airavata.xbaya.model.registrybrowser.ServiceDescriptions; +import org.apache.airavata.xbaya.ui.actions.AbstractBrowserActionItem; +import org.apache.airavata.xbaya.ui.actions.registry.browser.AddAction; +import org.apache.airavata.xbaya.ui.actions.registry.browser.DeleteAction; +import org.apache.airavata.xbaya.ui.actions.registry.browser.RefreshAction; +import org.apache.airavata.xbaya.ui.dialogs.descriptors.DeploymentDescriptionDialog; + +public class ServiceDescriptionsNode extends AbstractAiravataTreeNode { + private ServiceDescriptions serviceDescriptions; + + public ServiceDescriptionsNode(ServiceDescriptions serviceDescriptions, TreeNode parent) { + super(parent); + setServiceDescriptions(serviceDescriptions); + } + + @Override + protected List getChildren() { + try { + return getTreeNodeList(getServiceDescriptions().getDescriptions().toArray(), this); + } catch (AiravataAPIInvocationException e) { + e.printStackTrace(); + return emptyList(); + } catch (RegistryException e) { + e.printStackTrace(); + return emptyList(); + } + } + + @Override + public String getCaption(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + return "Applications"; + } + + @Override + public Icon getIcon(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + return JCRBrowserIcons.SERVICES_ICON; + } + + public ServiceDescriptions getServiceDescriptions() { + return serviceDescriptions; + } + + public void setServiceDescriptions(ServiceDescriptions serviceDescriptions) { + this.serviceDescriptions = serviceDescriptions; + } + + @Override + public List getSupportedActions() { + return Arrays.asList(AddAction.ID, RefreshAction.ID, DeleteAction.ID); + } + + public boolean triggerAction(JTree tree, String action) throws Exception { + if (action.equals(DeleteAction.ID)) { + deleteServiceDescription(tree); + return true; + } else if (action.equals(AddAction.ID)) { + DeploymentDescriptionDialog serviceDescriptionDialog = new DeploymentDescriptionDialog(null, getRegistry()); + serviceDescriptionDialog.open(); +// ServiceDescriptionDialog serviceDescriptionDialog = new ServiceDescriptionDialog(getRegistry()); +// serviceDescriptionDialog.open(); + if (serviceDescriptionDialog.isServiceCreated()) { + refresh(); + reloadTreeNode(tree, this); + } + return true; + } + return super.triggerAction(tree, action); + } + + private void deleteServiceDescription(JTree tree) throws Exception { + if (askQuestion("Applications", + "Are you sure that you want to remove all applications defined in this registry?")) { + AiravataAPI registry = getRegistry(); + List descriptions = getServiceDescriptions().getDescriptions(); + for (ServiceDescription descriptionWrap : descriptions) { + registry.getApplicationManager().deleteServiceDescription(descriptionWrap.getType().getName()); + } + refresh(); + reloadTreeNode(tree, this); + } + } + + @Override + public String getActionCaption(AbstractBrowserActionItem action) { + if (action.getID().equals(DeleteAction.ID)) { + return "Remove all Applicatons"; + } else if (action.getID().equals(AddAction.ID)) { + return "Register Application..."; + } + return action.getDefaultCaption(); + } + + @Override + public Icon getActionIcon(AbstractBrowserActionItem action) { + return null; + } + + @Override + public String getActionDescription(AbstractBrowserActionItem action) { + return null; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowExperimentNode.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowExperimentNode.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowExperimentNode.java new file mode 100644 index 0000000..d7294db --- /dev/null +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowExperimentNode.java @@ -0,0 +1,141 @@ +/* + * + * 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.xbaya.registrybrowser.nodes; + +import java.awt.*; +import java.awt.datatransfer.StringSelection; +import java.util.Arrays; +import java.util.List; + +import javax.swing.Icon; +import javax.swing.JTree; +import javax.swing.tree.TreeNode; + +import org.apache.airavata.client.api.exception.AiravataAPIInvocationException; +import org.apache.airavata.registry.api.exception.RegistryException; +import org.apache.airavata.registry.api.workflow.ExperimentName; +import org.apache.airavata.registry.api.workflow.WorkflowExecutionStatus; +import org.apache.airavata.xbaya.model.registrybrowser.XBayaWorkflowExperiment; +import org.apache.airavata.xbaya.ui.actions.AbstractBrowserActionItem; +import org.apache.airavata.xbaya.ui.actions.registry.browser.CopyAction; +import org.apache.airavata.xbaya.ui.actions.registry.browser.DeleteAction; + +public class XBayaWorkflowExperimentNode extends AbstractAiravataTreeNode { + private XBayaWorkflowExperiment experiment; + private String workflowExecutionName; + + public XBayaWorkflowExperimentNode(XBayaWorkflowExperiment experiment, TreeNode parent) { + super(parent); + setExperiment(experiment); + } + + @Override + protected List getChildren() { + return getTreeNodeList(getExperiment().getWorkflows().toArray(), this); + } + + @Override + public String getCaption(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + if (workflowExecutionName==null) { + try { + workflowExecutionName = getRegistry().getProvenanceManager().getExperimentName(getExperiment().getExperimentId()).getInstanceName(); + } catch (AiravataAPIInvocationException e) { + e.printStackTrace(); + } + if (workflowExecutionName==null){ + workflowExecutionName="["+getExperiment().getExperimentId()+"]"; + } + } + String caption=workflowExecutionName; + try { + WorkflowExecutionStatus workflowExecutionStatus = getRegistry().getProvenanceManager().getWorkflowInstanceStatus(getExperiment().getExperimentId(), getExperiment().getExperimentId()); + if (workflowExecutionStatus!=null && workflowExecutionStatus.getExecutionStatus()!=null){ + caption += " - " + workflowExecutionStatus.getExecutionStatus().toString()+""; + if (workflowExecutionStatus.getStatusUpdateTime()!=null) { + caption += " as of " + workflowExecutionStatus.getStatusUpdateTime().toString() + ""; + } + } + } catch (AiravataAPIInvocationException e) { + e.printStackTrace(); + } + return wrapAsHtml(caption); + } + + @Override + public Icon getIcon(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + return JCRBrowserIcons.WORKFLOW_EXPERIMENT_ICON; + } + + @Override + public List getSupportedActions() { + return Arrays.asList(CopyAction.ID); + } + + public boolean triggerAction(JTree tree, String action) throws Exception { + if (action.equals(CopyAction.ID)) { + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(getExperimentInfo()), null); + } + return super.triggerAction(tree, action); + } + + private String getExperimentName (){ + String experimentId = getExperiment().getExperimentId(); + try { + ExperimentName experimentName = getExperiment().getAiravataAPI().getProvenanceManager().getExperimentName(experimentId); + return experimentName.getInstanceName(); + } catch (AiravataAPIInvocationException e) { + return null; + } + } + + private String getExperimentInfo (){ + String experimetName = getExperimentName(); + String experimetID = getExperiment().getExperimentId(); + return "[Experiment Name = " + experimetName + ", Experiment ID = " + experimetID + "]"; + } + + @Override + public String getActionCaption(AbstractBrowserActionItem action) { + if (action.getID().equals(CopyAction.ID)) { + return "Copy Experiment Info to clipboard"; + } + return action.getDefaultCaption(); + } + + @Override + public Icon getActionIcon(AbstractBrowserActionItem action) { + return null; + } + + @Override + public String getActionDescription(AbstractBrowserActionItem action) { + return null; + } + + public XBayaWorkflowExperiment getExperiment() { + return experiment; + } + + public void setExperiment(XBayaWorkflowExperiment experiment) { + this.experiment = experiment; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowExperimentsNode.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowExperimentsNode.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowExperimentsNode.java new file mode 100644 index 0000000..420dea3 --- /dev/null +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowExperimentsNode.java @@ -0,0 +1,89 @@ +/* + * + * 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.xbaya.registrybrowser.nodes; + +import java.util.Arrays; +import java.util.List; + +import javax.swing.Icon; +import javax.swing.JTree; +import javax.swing.tree.TreeNode; + +import org.apache.airavata.xbaya.model.registrybrowser.XBayaWorkflowExperiments; +import org.apache.airavata.xbaya.ui.actions.AbstractBrowserActionItem; +import org.apache.airavata.xbaya.ui.actions.registry.browser.RefreshAction; + +public class XBayaWorkflowExperimentsNode extends AbstractAiravataTreeNode { + private XBayaWorkflowExperiments experiments; + + public XBayaWorkflowExperimentsNode(XBayaWorkflowExperiments experiments, TreeNode parent) { + super(parent); + setExperiments(experiments); + } + + @Override + protected List getChildren() { + return getTreeNodeList(getExperiments().getAllExperiments().toArray(), this); + } + + @Override + public String getCaption(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + return "Experiments"; + } + + @Override + public Icon getIcon(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + return JCRBrowserIcons.WORKFLOW_EXPERIMENTS_ICON; + } + + @Override + public List getSupportedActions() { + return Arrays.asList(RefreshAction.ID); + } + + public boolean triggerAction(JTree tree, String action) throws Exception { + return super.triggerAction(tree, action); + } + + @Override + public String getActionCaption(AbstractBrowserActionItem action) { + return action.getDefaultCaption(); + } + + @Override + public Icon getActionIcon(AbstractBrowserActionItem action) { + return null; + } + + @Override + public String getActionDescription(AbstractBrowserActionItem action) { + return null; + } + + public XBayaWorkflowExperiments getExperiments() { + return experiments; + } + + public void setExperiments(XBayaWorkflowExperiments experiments) { + this.experiments = experiments; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowNode.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowNode.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowNode.java new file mode 100644 index 0000000..1d38b80 --- /dev/null +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowNode.java @@ -0,0 +1,107 @@ +/* + * + * 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.xbaya.registrybrowser.nodes; + +import java.awt.*; +import java.awt.datatransfer.StringSelection; +import java.util.Arrays; +import java.util.List; + +import javax.swing.Icon; +import javax.swing.JTree; +import javax.swing.tree.TreeNode; + +import org.apache.airavata.xbaya.model.registrybrowser.XBayaWorkflow; +import org.apache.airavata.xbaya.ui.actions.AbstractBrowserActionItem; +import org.apache.airavata.xbaya.ui.actions.registry.browser.CopyAction; + +public class XBayaWorkflowNode extends AbstractAiravataTreeNode { + private XBayaWorkflow xbayaWorkflow; + + public XBayaWorkflowNode(XBayaWorkflow xbayaWorkflow, TreeNode parent) { + super(parent); + setXbayaWorkflow(xbayaWorkflow); + } + + @Override + protected List getChildren() { + return getTreeNodeList(getXbayaWorkflow().getWorkflowServices().toArray(),this); + } + + @Override + public String getCaption(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + String caption=getXbayaWorkflow().getWorkflowId(); + if (getXbayaWorkflow().getWorkflowName()!=null){ + caption=getXbayaWorkflow().getWorkflowName()+" : "+caption; + } + return caption; + } + + @Override + public Icon getIcon(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + return JCRBrowserIcons.WORKFLOW_ICON; + } + + public XBayaWorkflow getXbayaWorkflow() { + return xbayaWorkflow; + } + + public void setXbayaWorkflow(XBayaWorkflow xbayaWorkflow) { + this.xbayaWorkflow = xbayaWorkflow; + } + + @Override + public List getSupportedActions() { + return Arrays.asList(CopyAction.ID); + } + + public boolean triggerAction(JTree tree, String action) throws Exception { + if (action.equals(CopyAction.ID)) { + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(getWorkflowInfo()), null); + } + return super.triggerAction(tree, action); + } + + private String getWorkflowInfo (){ + String workflowName = getXbayaWorkflow().getWorkflowName(); + String workflowId = getXbayaWorkflow().getWorkflowId(); + return "[Worklfow Name = " + workflowName + ", Workflow Instance ID = " + workflowId + "]"; + } + + @Override + public String getActionCaption(AbstractBrowserActionItem action) { + if (action.getID().equals(CopyAction.ID)) { + return "Copy Workflow Info to clipboard"; + } + return action.getDefaultCaption(); + } + + @Override + public Icon getActionIcon(AbstractBrowserActionItem action) { + return null; + } + + @Override + public String getActionDescription(AbstractBrowserActionItem action) { + return null; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowNodeElementNode.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowNodeElementNode.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowNodeElementNode.java new file mode 100644 index 0000000..5cf32de --- /dev/null +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowNodeElementNode.java @@ -0,0 +1,101 @@ +/* + * + * 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.xbaya.registrybrowser.nodes; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.swing.Icon; +import javax.swing.JTree; +import javax.swing.tree.TreeNode; + +import org.apache.airavata.xbaya.model.registrybrowser.ServiceParameters; +import org.apache.airavata.xbaya.model.registrybrowser.XBayaWorkflowNodeElement; +import org.apache.airavata.xbaya.ui.actions.AbstractBrowserActionItem; + +public class XBayaWorkflowNodeElementNode extends AbstractAiravataTreeNode { + private XBayaWorkflowNodeElement xbayaWorkflowService; + + public XBayaWorkflowNodeElementNode(XBayaWorkflowNodeElement xbayaWorkflowNodeElement, TreeNode parent) { + super(parent); + setXbayaWorkflowNodeElement(xbayaWorkflowNodeElement); + } + + @Override + protected List getChildren() { + List parameterTypeList=new ArrayList(); + if (getXbayaWorkflowNodeElement().getInputParameters()!=null && getXbayaWorkflowNodeElement().getInputParameters().getParameters().size()>0){ + parameterTypeList.add(getXbayaWorkflowNodeElement().getInputParameters()); + } + if (getXbayaWorkflowNodeElement().getOutputParameters()!=null && getXbayaWorkflowNodeElement().getOutputParameters().getParameters().size()>0){ + parameterTypeList.add(getXbayaWorkflowNodeElement().getOutputParameters()); + } + return getTreeNodeList(parameterTypeList.toArray(), this); + } + + @Override + public String getCaption(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + String type = getXbayaWorkflowNodeElement().getNodeData().getType().toString(); +// if (selected) { +// type = " Service call"; +// } + return wrapAsHtml(getXbayaWorkflowNodeElement().getNodeId()," [", type, "]"); + } + + @Override + public Icon getIcon(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + return JCRBrowserIcons.WORKFLOW_SERVICE_ICON; + } + + @Override + public List getSupportedActions() { + return Arrays.asList(); + } + + public boolean triggerAction(JTree tree, String action) throws Exception { + return super.triggerAction(tree, action); + } + + @Override + public String getActionCaption(AbstractBrowserActionItem action) { + return action.getDefaultCaption(); + } + + @Override + public Icon getActionIcon(AbstractBrowserActionItem action) { + return null; + } + + @Override + public String getActionDescription(AbstractBrowserActionItem action) { + return null; + } + + public XBayaWorkflowNodeElement getXbayaWorkflowNodeElement() { + return xbayaWorkflowService; + } + + public void setXbayaWorkflowNodeElement(XBayaWorkflowNodeElement xbayaWorkflowNodeElement) { + this.xbayaWorkflowService = xbayaWorkflowNodeElement; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowTemplateNode.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowTemplateNode.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowTemplateNode.java new file mode 100644 index 0000000..0edc847 --- /dev/null +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowTemplateNode.java @@ -0,0 +1,130 @@ +/* + * + * 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.xbaya.registrybrowser.nodes; + +import java.util.Arrays; +import java.util.List; + +import javax.jcr.PathNotFoundException; +import javax.swing.Icon; +import javax.swing.JTree; +import javax.swing.tree.TreeNode; + +import org.apache.airavata.client.api.exception.AiravataAPIInvocationException; +import org.apache.airavata.registry.api.exception.RegistryException; +import org.apache.airavata.registry.api.exception.ServiceDescriptionRetrieveException; +import org.apache.airavata.workflow.model.wf.Workflow; +import org.apache.airavata.xbaya.model.registrybrowser.XBayaWorkflowTemplate; +import org.apache.airavata.xbaya.registry.RegistryAccesser; +import org.apache.airavata.xbaya.ui.actions.AbstractBrowserActionItem; +import org.apache.airavata.xbaya.ui.actions.registry.browser.DeleteAction; +import org.apache.airavata.xbaya.ui.actions.registry.browser.ImportAction; +import org.apache.airavata.xbaya.ui.graph.GraphCanvas; + +public class XBayaWorkflowTemplateNode extends AbstractAiravataTreeNode { + private XBayaWorkflowTemplate xbayaWorkflow; + + public XBayaWorkflowTemplateNode(XBayaWorkflowTemplate xbayaWorkflow, TreeNode parent) { + super(parent); + setXbayaWorkflow(xbayaWorkflow); + } + + @Override + protected List getChildren() { + return emptyList(); + } + + @Override + public String getCaption(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + return getXbayaWorkflow().getWorkflowName(); + } + + @Override + public Icon getIcon(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + return JCRBrowserIcons.WORKFLOW_TEMPLATE_ICON; + } + + public XBayaWorkflowTemplate getXbayaWorkflow() { + return xbayaWorkflow; + } + + public void setXbayaWorkflow(XBayaWorkflowTemplate xbayaWorkflow) { + this.xbayaWorkflow = xbayaWorkflow; + } + + @Override + public List getSupportedActions() { + return Arrays.asList(ImportAction.ID,DeleteAction.ID); + } + + public boolean triggerAction(JTree tree, String action) throws Exception { + if (action.equals(DeleteAction.ID)) { + deleteHostDescription(tree); + return true; + } else if (action.equals(ImportAction.ID)) { + Workflow workflow = new RegistryAccesser(getXBayaEngine()).getWorkflow(getXbayaWorkflow().getWorkflowName()); + GraphCanvas newGraphCanvas = getXBayaEngine().getGUI().newGraphCanvas(true); + newGraphCanvas.setWorkflow(workflow); + getXBayaEngine().getGUI().getGraphCanvas().setWorkflowFile(null); + return true; + } + return super.triggerAction(tree, action); + } + + private void deleteHostDescription(JTree tree) throws PathNotFoundException, ServiceDescriptionRetrieveException { + if (askQuestion("XBaya Workflow", "Are you sure that you want to remove the workflow \"" + + getXbayaWorkflow().getWorkflowName() + "\"?")) { + try { + getRegistry().getWorkflowManager().removeWorkflow(getXbayaWorkflow().getWorkflowName()); + ((AbstractAiravataTreeNode) getParent()).refresh(); + reloadTreeNode(tree, getParent()); + } catch (AiravataAPIInvocationException e) { + e.printStackTrace(); + } + } + } + + @Override + public String getActionCaption(AbstractBrowserActionItem action) { + if (action.getID().equals(DeleteAction.ID)) { + return "Remove"; + } else if (action.getID().equals(ImportAction.ID)) { + return "Import"; + } + return action.getDefaultCaption(); + } + + @Override + public Icon getActionIcon(AbstractBrowserActionItem action) { + return null; + } + + @Override + public String getActionDescription(AbstractBrowserActionItem action) { + return null; + } + + @Override + public String getDefaultAction() { + return ImportAction.ID; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowTemplatesNode.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowTemplatesNode.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowTemplatesNode.java new file mode 100644 index 0000000..f3b0c43 --- /dev/null +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/XBayaWorkflowTemplatesNode.java @@ -0,0 +1,99 @@ +/* + * + * 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.xbaya.registrybrowser.nodes; + +import java.util.Arrays; +import java.util.List; + +import javax.swing.Icon; +import javax.swing.JOptionPane; +import javax.swing.JTree; +import javax.swing.tree.TreeNode; + +import org.apache.airavata.xbaya.model.registrybrowser.XBayaWorkflowTemplates; +import org.apache.airavata.xbaya.ui.actions.AbstractBrowserActionItem; +import org.apache.airavata.xbaya.ui.actions.registry.browser.AddAction; +import org.apache.airavata.xbaya.ui.actions.registry.browser.RefreshAction; + +public class XBayaWorkflowTemplatesNode extends AbstractAiravataTreeNode { + private XBayaWorkflowTemplates xbayaWorkflows; + + public XBayaWorkflowTemplatesNode(XBayaWorkflowTemplates xbayaWorkflows, TreeNode parent) { + super(parent); + setXbayaWorkflows(xbayaWorkflows); + } + + @Override + protected List getChildren() { + return getTreeNodeList(getXbayaWorkflows().getWorkflows().toArray(), this); + } + + @Override + public String getCaption(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + return "Workflow Templates"; + } + + @Override + public Icon getIcon(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) { + return JCRBrowserIcons.WORKFLOW_TEMPLATES_ICON; + } + + public XBayaWorkflowTemplates getXbayaWorkflows() { + return xbayaWorkflows; + } + + public void setXbayaWorkflows(XBayaWorkflowTemplates xbayaWorkflows) { + this.xbayaWorkflows = xbayaWorkflows; + } + + @Override + public List getSupportedActions() { + return Arrays.asList(RefreshAction.ID); + } + + public boolean triggerAction(JTree tree, String action) throws Exception { + if (action.equals(AddAction.ID)) { + JOptionPane.showMessageDialog(null, "TODO"); + // TODO + return true; + } + return super.triggerAction(tree, action); + } + + @Override + public String getActionCaption(AbstractBrowserActionItem action) { + if (action.getID().equals(AddAction.ID)) { + return "New workflow..."; + } + return action.getDefaultCaption(); + } + + @Override + public Icon getActionIcon(AbstractBrowserActionItem action) { + return null; + } + + @Override + public String getActionDescription(AbstractBrowserActionItem action) { + return null; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/scufl/script/ScuflScript.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/scufl/script/ScuflScript.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/scufl/script/ScuflScript.java new file mode 100644 index 0000000..27442e4 --- /dev/null +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/scufl/script/ScuflScript.java @@ -0,0 +1,539 @@ +/* + * + * 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.xbaya.scufl.script; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +import javax.xml.namespace.QName; + +import org.apache.airavata.workflow.model.component.ws.WSComponent; +import org.apache.airavata.workflow.model.graph.DataPort; +import org.apache.airavata.workflow.model.graph.GraphException; +import org.apache.airavata.workflow.model.graph.Node; +import org.apache.airavata.workflow.model.graph.Port; +import org.apache.airavata.workflow.model.graph.impl.NodeImpl; +import org.apache.airavata.workflow.model.graph.system.ConstantNode; +import org.apache.airavata.workflow.model.graph.system.EndifNode; +import org.apache.airavata.workflow.model.graph.system.IfNode; +import org.apache.airavata.workflow.model.graph.system.InputNode; +import org.apache.airavata.workflow.model.graph.system.MemoNode; +import org.apache.airavata.workflow.model.graph.system.OutputNode; +import org.apache.airavata.workflow.model.graph.util.GraphUtil; +import org.apache.airavata.workflow.model.graph.ws.WSGraph; +import org.apache.airavata.workflow.model.graph.ws.WSNode; +import org.apache.airavata.workflow.model.wf.Workflow; +import org.apache.airavata.xbaya.XBayaConfiguration; +import org.xmlpull.infoset.impl.XmlElementWithViewsImpl; +import org.xmlpull.v1.builder.XmlBuilderException; +import org.xmlpull.v1.builder.XmlDocument; +import org.xmlpull.v1.builder.XmlElement; +import org.xmlpull.v1.builder.XmlInfosetBuilder; +import org.xmlpull.v1.builder.XmlNamespace; + +import xsul.XmlConstants; +import xsul5.wsdl.WsdlMessage; +import xsul5.wsdl.WsdlMessagePart; +import xsul5.wsdl.WsdlPort; +import xsul5.wsdl.WsdlPortType; +import xsul5.wsdl.WsdlPortTypeOperation; +import xsul5.wsdl.WsdlService; + +public class ScuflScript { + + private Workflow workflow; + + private XBayaConfiguration configuration; + + private WSGraph graph; + + private ArrayList arguments; + + private List inputNodes; + + private List outputNodes; + + private XmlInfosetBuilder builder = XmlConstants.BUILDER; + + private LinkedList notYetInvokedNodes; + + private LinkedList executingNodes; + + private XmlNamespace scuflNS = builder.newNamespace("s", "http://org.embl.ebi.escience/xscufl/0.1alpha"); + + private Map sources = new HashMap(); + + private List links = new ArrayList(); + + private List sinks = new ArrayList(); + + private XmlDocument script; + + public ScuflScript(Workflow workflow, XBayaConfiguration configuration) { + this.workflow = workflow; + this.configuration = configuration; + this.graph = this.workflow.getGraph(); + + this.arguments = new ArrayList(); + + this.notYetInvokedNodes = new LinkedList(); + for (Node node : this.graph.getNodes()) { + if (!(node instanceof MemoNode)) { + this.notYetInvokedNodes.add(node); + } + } + this.executingNodes = new LinkedList(); + this.inputNodes = GraphUtil.getInputNodes(this.graph); + this.outputNodes = GraphUtil.getOutputNodes(this.graph); + } + + public void create() throws GraphException { + + XmlDocument doc = builder.newDocument(); + + XmlElement scufl = doc.addDocumentElement(scuflNS, "scufl"); + scufl.addAttribute("version", "0.2"); + scufl.addAttribute("log", "0"); + XmlElement description = scufl.addElement(scuflNS, "workflowdescription"); + description.addAttribute("lsid", "urn:lsid:net.sf.taverna:wfDefinition:" + UUID.randomUUID()); + description.addAttribute("author", ""); + description.addAttribute("title", workflow.getName()); + writeServices(scufl); + + writeSplitors(scufl); + + // add links + for (XmlElement link : this.links) { + scufl.addElement(link); + } + + // add source + for (String key : this.sources.keySet()) { + scufl.addElement(this.sources.get(key)); + } + + // add sinks + for (XmlElement sink : this.sinks) { + scufl.addElement(sink); + } + + this.script = doc; + + } + + public String getScript() { + return builder.serializeToString(this.script); + } + + /** + * @param scufl + * @throws GraphException + */ + private void writeSplitors(XmlElement scufl) throws GraphException { + + Collection nextNodes = getNextNodes(); + while (nextNodes.size() > 0) { + for (Node node : nextNodes) { + + if (node instanceof WSNode) { + WSNode wsNode = (WSNode) node; + node.getInputPorts(); + writeSplitorPerService(scufl, wsNode); + + } else { + // TODO conditions, loops might come here. + } + this.notYetInvokedNodes.remove(node); + nextNodes = getNextNodes(); + } + } + } + + /** + * @param scufl + * @param node + * @throws GraphException + */ + private void writeSplitorPerService(XmlElement scufl, WSNode node) throws GraphException { + List inputPorts = node.getInputPorts(); + XmlElement processor = scufl.addElement(scuflNS, "processor"); + processor.addAttribute("name", getValidName(node) + "InputMessagePartXML"); + XmlElement local = processor.addElement(scuflNS, "local"); + local.addChild(0, "org.embl.ebi.escience.scuflworkers.java.XMLInputSplitter"); + XmlElement extensions = local.addElement(scuflNS, "extensions"); + + QName inputName = getInputElementName(node); + if (null == inputName) { + throw new GraphException("No Valid input type found for WS Node" + node.getName()); + } + if (node.getOutputPorts().size() != 1) { + throw new GraphException("Number of out ports in WS node " + node.getName() + "is invalid:" + + node.getOutputPorts().size()); + } + DataPort outputPort = node.getOutputPort(0); + + WSComponent component = node.getComponent(); + String inputPartName = component.getInputPartName(); + String inputTypeName = component.getInputTypeName(); + + XmlElement complexType = extensions.addElement(scuflNS, "complextype"); + complexType.addAttribute("optional", "false"); + complexType.addAttribute("unbounded", "false"); + complexType.addAttribute("typename", inputTypeName); + + String spliterName = inputPartName; + complexType.addAttribute("name", spliterName); + complexType.addAttribute("qname", inputName.toString()); + + XmlElement element = complexType.addElement(scuflNS, "elements"); + for (DataPort port : inputPorts) { + if ("http://www.w3.org/2001/XMLSchema".equals(port.getType().getNamespaceURI())) { + XmlElement baseType = element.addElement(scuflNS, "basetype"); + baseType.addAttribute("optional", "false"); + baseType.addAttribute("unbounded", "false"); + baseType.addAttribute("typename", port.getType().getLocalPart()); + baseType.addAttribute("name", port.getName()); + baseType.addAttribute("qname", inputTypeName + ">" + port.getName()); + + } + // all the sources are written here + // the links from input nodes to the spiters are done here + // links from the from node output splitter to the this service's + // inputsplitter is done here + + if (port.getFromNode() instanceof InputNode) { + XmlElement source = builder.newFragment(scuflNS, "source"); + source.addAttribute("name", port.getFromNode().getID()); + if (!sourceExist(port.getFromNode().getID())) { + this.sources.put(port.getFromNode().getID(), source); + } + XmlElement link = builder.newFragment(scuflNS, "link"); + link.addAttribute("source", port.getFromNode().getID()); + link.addAttribute("sink", getValidName(node) + "InputMessagePartXML:" + port.getName()); + this.links.add(link); + + } else if (port.getFromNode() instanceof WSNode) { + XmlElement link = builder.newFragment(scuflNS, "link"); + if (port.getFromNode().getOutputPorts().size() != 1) { + throw new GraphException("Number of out ports in from WS node " + port.getFromNode().getName() + + "is invalid:" + node.getOutputPorts().size()); + } + link.addAttribute("source", getValidName((WSNode) port.getFromNode()) + "OutputMessagePartXML:" + + port.getFromNode().getOutputPort(0).getName()); + link.addAttribute("sink", getValidName(node) + "InputMessagePartXML:" + port.getName()); + this.links.add(link); + } else { + throw new GraphException("Unhandled from node type:" + port.getFromNode() + " for node" + + node.getName()); + } + } + + // link from the spliter to the service + + XmlElement link = builder.newFragment(scuflNS, "link"); + link.addAttribute("source", getValidName(node) + "InputMessagePartXML:output"); + link.addAttribute("sink", getValidName(node) + ":" + spliterName); + this.links.add(link); + + // link from service out to the ouput spliter + + link = builder.newFragment(scuflNS, "link"); + link.addAttribute("source", getValidName(node) + ":" + node.getComponent().getOutputPartName()); + link.addAttribute("sink", getValidName(node) + "OutputMessagePartXML:input"); + this.links.add(link); + + // /outspiltor + XmlElement outProcessor = scufl.addElement(scuflNS, "processor"); + outProcessor.addAttribute("name", getValidName(node) + "OutputMessagePartXML"); + XmlElement outLocal = outProcessor.addElement(scuflNS, "local"); + outLocal.addChild(0, "org.embl.ebi.escience.scuflworkers.java.XMLOutputSplitter"); + XmlElement outExtensions = outLocal.addElement(scuflNS, "extensions"); + XmlElement outComplextype = outExtensions.addElement(scuflNS, "complextype"); + outComplextype.addAttribute("optional", "false"); + outComplextype.addAttribute("unbounded", "false"); + outComplextype.addAttribute("typename", component.getOutputTypeName()); + outComplextype.addAttribute("name", component.getOutputPartName()); + QName outputName = getOutputElementName(node); + if (null == outputName) { + throw new GraphException("No Valid output type found for WS Node" + node.getName()); + } + outComplextype.addAttribute("qname", outputName.toString()); + XmlElement elements = outComplextype.addElement(scuflNS, "elements"); + XmlElement outBaseType = elements.addElement(scuflNS, "basetype"); + outBaseType.addAttribute("optional", "false"); + outBaseType.addAttribute("unbounded", "false"); + + outBaseType.addAttribute("typename", outputPort.getType().getLocalPart()); + String Z = component.getOutputPort(0).getName(); + outBaseType.addAttribute("name", Z); + + outBaseType.addAttribute("qname", component.getOutputTypeName() + ">" + Z); + + List outputPorts = node.getOutputPorts(); + for (DataPort port : outputPorts) { + List toNodes = port.getToNodes(); + for (Node toNode : toNodes) { + if (toNode instanceof OutputNode) { + if ("http://www.w3.org/2001/XMLSchema".equals(port.getType().getNamespaceURI())) { + XmlElement sink = builder.newFragment(scuflNS, "sink"); + sink.addAttribute("name", toNode.getID()); + sinks.add(sink); + link = builder.newFragment(scuflNS, "link"); + link.addAttribute("source", getValidName(node) + "OutputMessagePartXML:" + outputPort.getName()); + link.addAttribute("sink", toNode.getID()); + this.links.add(link); + } + } + } + } + + } + + private boolean sourceExist(String name) { + Set keys = this.sources.keySet(); + for (String string : keys) { + if (name.equals(string)) + return true; + } + return false; + } + + /** + * @param node + * @return + * @throws GraphException + */ + private QName getInputElementName(WSNode node) throws GraphException { + WSComponent component = node.getComponent(); + String portTypeName = component.getPortTypeQName().getLocalPart(); + WsdlPortType portType = component.getWSDL().getPortType(portTypeName); + WsdlPortTypeOperation operation = portType.getOperation(component.getOperationName()); + QName message = operation.getInput().getMessage(); + WsdlMessage wsdlMessage = component.getWSDL().getMessage(message.getLocalPart()); + Iterator iterator = wsdlMessage.parts().iterator(); + QName inputName = null; + if (iterator.hasNext()) { + inputName = iterator.next().getElement(); + } else { + throw new GraphException("No input part found for WS Node" + node.getName()); + } + return inputName; + } + + private QName getOutputElementName(WSNode node) throws GraphException { + WSComponent component = node.getComponent(); + String portTypeName = component.getPortTypeQName().getLocalPart(); + WsdlPortType portType = component.getWSDL().getPortType(portTypeName); + WsdlPortTypeOperation operation = portType.getOperation(component.getOperationName()); + QName message = operation.getOutput().getMessage(); + WsdlMessage wsdlMessage = component.getWSDL().getMessage(message.getLocalPart()); + Iterator iterator = wsdlMessage.parts().iterator(); + QName inputName = null; + if (iterator.hasNext()) { + inputName = iterator.next().getElement(); + } else { + throw new GraphException("No output part found for WS Node" + node.getName()); + } + return inputName; + } + + private void writeServices(XmlElement scufl) throws GraphException { + + Collection nextNodes = this.graph.getNodes(); + for (NodeImpl node : nextNodes) { + if (node instanceof WSNode) { + WSNode wsNode = (WSNode) node; + createWSProcess(wsNode, scufl); + } + } + } + + private XmlElement createWSProcess(WSNode node, XmlElement scufl) throws GraphException, XmlBuilderException { + + XmlElement processor = scufl.addElement(scuflNS, "processor"); + String name = getValidName(node); + processor.addAttribute("name", name); + XmlElement description = processor.addElement(scuflNS, "description"); + String txt = node.getComponent().getDescription(); + if (null == txt) { + description.addChild(name); + } else { + description.addChild(txt); + } + + XmlElement arbitrarywsdl = processor.addElement(scuflNS, "arbitrarywsdl"); + XmlElement wsdl = arbitrarywsdl.addElement(scuflNS, "wsdl"); + + String epr = getEPR(node); + if (null == epr) { + throw new GraphException("EPR not found for the WS-node:" + builder.serializeToString(node)); + } + wsdl.addChild(epr + "?wsdl"); + + XmlElement operation = arbitrarywsdl.addElement(scuflNS, "operation"); + operation.addChild(node.getOperationName()); + + return processor; + + } + + /** + * @param node + * @return + */ + private String getValidName(WSNode node) { + return node.getID(); + // String name = node.getName(); + // if (name.indexOf(":") != -1) { + // name = name.substring(0, name.indexOf(":")); + // } + // return name; + } + + /** + * @param wsNode + */ + private String getEPR(WSNode wsNode) { + Iterable services = wsNode.getComponent().getWSDL().services(); + Iterator iterator = services.iterator(); + if (iterator.hasNext()) { + Iterable ports = iterator.next().ports(); + Iterator portIterator = ports.iterator(); + if (portIterator.hasNext()) { + WsdlPort port = portIterator.next(); + Iterable children = port.xml().children(); + Iterator childIterator = children.iterator(); + while (childIterator.hasNext()) { + Object next = childIterator.next(); + if (next instanceof XmlElementWithViewsImpl) { + org.xmlpull.infoset.XmlAttribute epr = ((XmlElementWithViewsImpl) next).attribute("location"); + return epr.getValue(); + } + } + } + } + return null; + } + + public boolean validate(List warnings) { + // Empty + if (this.graph.getNodes().size() == 0) { + String message = "The workflow is empty."; + warnings.add(message); + } + + // Input ports need to be connected. + Collection inputPorts = GraphUtil.getPorts(this.graph, Port.Kind.DATA_IN); + for (Port inputPort : inputPorts) { + Collection fromPorts = inputPort.getFromPorts(); + if (fromPorts.size() == 0) { + Node node = inputPort.getNode(); + String message = node.getID() + " has an unconnected input " + inputPort.getName(); + warnings.add(message); + } + } + + // Input nodes need to be connected. + for (InputNode inputNode : this.inputNodes) { + if (inputNode.getPort().getToPorts().size() == 0) { + String message = inputNode.getID() + " is not connected to any service."; + warnings.add(message); + } + } + + // Cycle + if (GraphUtil.containsCycle(this.graph)) { + String message = "There is a cycle in the workflow."; + warnings.add(message); + } + + // Constants are not supported. + List constantNodes = GraphUtil.getNodes(this.graph, ConstantNode.class); + if (constantNodes.size() > 0) { + String message = "Constants are not supported for Scufl scripts."; + warnings.add(message); + } + + // If/endif are not supported. + List ifNodes = GraphUtil.getNodes(this.graph, IfNode.class); + List endifNodes = GraphUtil.getNodes(this.graph, EndifNode.class); + if (ifNodes.size() > 0 || endifNodes.size() > 0) { + String message = "If/endif are not supported for Scufl scripts."; + warnings.add(message); + } + + if (warnings.size() > 0) { + return false; + } else { + // No error. + return true; + } + } + + private Collection getNextNodes() throws GraphException { + Collection nextNodes = new ArrayList(); + for (Node node : this.notYetInvokedNodes) { + if (isNextNode(node)) { + nextNodes.add(node); + } + } + return nextNodes; + } + + private boolean isNextNode(Node node) throws GraphException { + if (node instanceof OutputNode) { + return false; + } + for (Port port : node.getInputPorts()) { + Collection fromNodes = port.getFromNodes(); + if (fromNodes.isEmpty()) { + throw new GraphException("There is a port that is not connected to any."); + } else { + for (Node fromNode : fromNodes) { + if (this.notYetInvokedNodes.contains(fromNode)) { + // There is a node that should be executed before this + // node. + return false; + } + } + } + } + Port port = node.getControlInPort(); + if (port != null) { + Collection fromNodes = port.getFromNodes(); + for (Node fromNode : fromNodes) { + if (this.notYetInvokedNodes.contains(fromNode)) { + return false; + } + } + } + return true; + } + +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/BPELScriptTestCase.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/BPELScriptTestCase.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/BPELScriptTestCase.java new file mode 100644 index 0000000..bcfb604 --- /dev/null +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/BPELScriptTestCase.java @@ -0,0 +1,209 @@ +/* + * + * 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.xbaya.test; + +import java.io.File; +import java.io.IOException; + +import org.apache.airavata.common.utils.IOUtil; +import org.apache.airavata.common.utils.XMLUtil; +import org.apache.airavata.workflow.model.component.ComponentException; +import org.apache.airavata.workflow.model.component.ComponentRegistryException; +import org.apache.airavata.workflow.model.gpel.script.BPELScript; +import org.apache.airavata.workflow.model.gpel.script.BPELScriptType; +import org.apache.airavata.workflow.model.gpel.script.WorkflowWSDL; +import org.apache.airavata.workflow.model.graph.GraphException; +import org.apache.airavata.workflow.model.wf.Workflow; +import org.apache.airavata.xbaya.XBayaConstants; +import org.apache.airavata.xbaya.test.util.WorkflowCreator; +import org.gpel.model.GpelProcess; +import org.xmlpull.infoset.XmlElement; + +import xsul5.wsdl.WsdlDefinitions; + +public class BPELScriptTestCase extends XBayaTestCase { + + // private static final Logger logger = LoggerFactory.getLogger(); + + private WorkflowCreator workflowCreator; + + @Override + protected void setUp() throws Exception { + super.setUp(); + this.workflowCreator = new WorkflowCreator(); + } + + /** + * @throws ComponentException + * @throws IOException + * @throws GraphException + * @throws ComponentRegistryException + */ + public void testSimpleMath() throws ComponentException, IOException, GraphException, ComponentRegistryException { + Workflow workflow = this.workflowCreator.createSimpleMathWorkflow(); + testWrokflow(workflow, "simple-math"); + } + + /** + * @throws ComponentException + * @throws IOException + * @throws GraphException + * @throws ComponentRegistryException + */ + public void testMath() throws ComponentException, IOException, GraphException, ComponentRegistryException { + Workflow workflow = this.workflowCreator.createMathWorkflow(); + testWrokflow(workflow, "math"); + } + + /** + * @throws ComponentException + * @throws IOException + * @throws GraphException + * @throws ComponentRegistryException + */ + public void testComplexMath() throws ComponentException, IOException, GraphException, ComponentRegistryException { + Workflow workflow = this.workflowCreator.createComplexMathWorkflow(); + testWrokflow(workflow, "complex-math"); + } + + /** + * @throws ComponentException + * @throws IOException + * @throws GraphException + * @throws ComponentRegistryException + */ + public void testMathWithConstant() throws ComponentException, IOException, GraphException, + ComponentRegistryException { + Workflow workflow = this.workflowCreator.createMathWithConstWorkflow(); + testWrokflow(workflow, "constant-test"); + } + + /** + * @throws ComponentException + * @throws GraphException + * @throws IOException + * @throws ComponentRegistryException + */ + public void testArray() throws ComponentException, GraphException, IOException, ComponentRegistryException { + Workflow workflow = this.workflowCreator.createArrayWorkflow(); + testWrokflow(workflow, "array-test"); + } + + /** + * @throws ComponentException + * @throws GraphException + * @throws IOException + * @throws ComponentRegistryException + */ + public void testForEach() throws ComponentException, GraphException, IOException, ComponentRegistryException { + Workflow workflow = this.workflowCreator.createForEachWorkflow(); + testWrokflow(workflow, "foreach-test"); + } + + /** + * @throws ComponentException + * @throws GraphException + * @throws IOException + * @throws ComponentRegistryException + */ + public void testIf() throws ComponentException, GraphException, IOException, ComponentRegistryException { + Workflow workflow = this.workflowCreator.createIfWorkflow(); + testWrokflow(workflow, "if-test"); + } + + /** + * @throws GraphException + * @throws ComponentException + * @throws IOException + * @throws ComponentRegistryException + */ + public void testReceive() throws GraphException, ComponentException, IOException, ComponentRegistryException { + Workflow workflow = this.workflowCreator.createReceiveWorkflow(); + testWrokflow(workflow, "receive-test"); + } + + /** + * @throws GraphException + * @throws ComponentException + * @throws IOException + * @throws ComponentRegistryException + */ + public void testLoan() throws GraphException, ComponentException, IOException, ComponentRegistryException { + Workflow workflow = this.workflowCreator.createLoanWorkflow(); + testWrokflow(workflow, "loan"); + } + + private void testWrokflow(Workflow workflow, String filename) throws GraphException, IOException, + ComponentException { + + // This one is for debuggin in case something below fails. + XMLUtil.saveXML(workflow.toXML(), new File(this.temporalDirectory, filename + "-0.xwf")); + + // Create BPEL + BPELScript bpel = new BPELScript(workflow); + bpel.create(BPELScriptType.GPEL); + GpelProcess gpelProcess = bpel.getGpelProcess(); + WorkflowWSDL workflowWSDL = bpel.getWorkflowWSDL(); + WsdlDefinitions definitions = workflowWSDL.getWsdlDefinitions(); + + File bpelFile = new File(this.temporalDirectory, filename + XBayaConstants.BPEL_SUFFIX); + File wsdlFile = new File(this.temporalDirectory, filename + XBayaConstants.WSDL_SUFFIX); + XMLUtil.saveXML(gpelProcess.xml(), bpelFile); + XMLUtil.saveXML(definitions.xml(), wsdlFile); + + // Save the workflow + File workflowFile = new File(this.temporalDirectory, filename + XBayaConstants.WORKFLOW_FILE_SUFFIX); + XMLUtil.saveXML(workflow.toXML(), workflowFile); + + // Read the workflow + XmlElement workflowElement = XMLUtil.loadXML(workflowFile); + workflow = new Workflow(workflowElement); + + // Create BPEL again + bpel = new BPELScript(workflow); + bpel.create(BPELScriptType.GPEL); + gpelProcess = bpel.getGpelProcess(); + workflowWSDL = bpel.getWorkflowWSDL(); + definitions = workflowWSDL.getWsdlDefinitions(); + + File bpelFile2 = new File(this.temporalDirectory, filename + "-2" + XBayaConstants.BPEL_SUFFIX); + File wsdlFile2 = new File(this.temporalDirectory, filename + "-2" + XBayaConstants.WSDL_SUFFIX); + XMLUtil.saveXML(gpelProcess.xml(), bpelFile2); + XMLUtil.saveXML(definitions.xml(), wsdlFile2); + + File workflowFile2 = new File(this.temporalDirectory, filename + "-2" + XBayaConstants.WORKFLOW_FILE_SUFFIX); + XMLUtil.saveXML(workflow.toXML(), workflowFile2); + + // Compare + String workflowString = IOUtil.readFileToString(workflowFile); + String workflowString2 = IOUtil.readFileToString(workflowFile2); + assertEquals(workflowString, workflowString2); + + String bpelString = IOUtil.readFileToString(bpelFile); + String bpelString2 = IOUtil.readFileToString(bpelFile2); + assertEquals(bpelString, bpelString2); + + String wsdlString = IOUtil.readFileToString(wsdlFile); + String wsdlString2 = IOUtil.readFileToString(wsdlFile2); + assertEquals(wsdlString, wsdlString2); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/BrowserTestCase.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/BrowserTestCase.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/BrowserTestCase.java new file mode 100644 index 0000000..3d68557 --- /dev/null +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/BrowserTestCase.java @@ -0,0 +1,38 @@ +/* + * + * 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.xbaya.test; + +import junit.framework.TestCase; + +import org.apache.airavata.common.utils.BrowserLauncher; +import org.apache.airavata.workflow.model.exceptions.WorkflowException; + +public class BrowserTestCase extends TestCase { + + /** + * @throws WorkflowException + * + */ + public void testBrowserLauncher() throws Exception { + BrowserLauncher.openURL("http://www.google.com"); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/DSCTestCase.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/DSCTestCase.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/DSCTestCase.java new file mode 100644 index 0000000..e6ae107 --- /dev/null +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/DSCTestCase.java @@ -0,0 +1,131 @@ +/* + * + * 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.xbaya.test; + +import java.io.File; +import java.net.URI; + +import junit.framework.TestSuite; + +import org.apache.airavata.common.utils.XMLUtil; +import org.apache.airavata.workflow.model.gpel.DSCUtil; +import org.apache.airavata.xbaya.file.XBayaPathConstants; +import org.apache.airavata.xbaya.lead.LeadContextHeaderHelper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.xmlpull.v1.builder.XmlElement; + +import xsul.lead.LeadContextHeader; +import xsul.util.XsulUtil; +import xsul.wsif.WSIFMessage; +import xsul.wsif.WSIFOperation; +import xsul.wsif.WSIFPort; +import xsul.xhandler_soap_sticky_header.StickySoapHeaderHandler; +import xsul.xwsif_runtime.WSIFClient; +import xsul.xwsif_runtime.WSIFRuntime; +import xsul.xwsif_runtime_async.WSIFAsyncResponsesCorrelator; +import xsul.xwsif_runtime_async_http.XsulSoapHttpWsaResponsesCorrelator; +import xsul5.wsdl.WsdlDefinitions; +import xsul5.wsdl.WsdlException; +import xsul5.wsdl.WsdlResolver; + +public class DSCTestCase extends XBayaTestCase { + + private static final String SAMPLE_AWSDL = XBayaPathConstants.WSDL_DIRECTORY + "/test/TestCMD_Example1_AWSDL.xml"; + + private static final Logger logger = LoggerFactory.getLogger(DSCTestCase.class); + + /** + * @param args + */ + public static void main(String[] args) { + junit.textui.TestRunner.run(new TestSuite(DSCTestCase.class)); + } + + /** + * @see org.apache.airavata.xbaya.test.XBayaTestCase#setUp() + */ + @Override + protected void setUp() throws Exception { + super.setUp(); + } + + /** + * @throws WsdlException + */ + public void test() throws WsdlException { + WsdlDefinitions definitions = WsdlResolver.getInstance().loadWsdl(new File(".").toURI(), + new File(SAMPLE_AWSDL).toURI()); + URI dscURL = this.configuration.getDSCURL(); + logger.info("dscURL: " + dscURL); + DSCUtil.convertToCWSDL(definitions, dscURL); + + logger.info(definitions.xmlStringPretty()); + + // client + int clientPort = 0; + WSIFAsyncResponsesCorrelator correlator = new XsulSoapHttpWsaResponsesCorrelator(clientPort); + String serverLoc = ((XsulSoapHttpWsaResponsesCorrelator) correlator).getServerLocation(); + logger.info("client is waiting at " + serverLoc); + + // LEAD Context Header + // Create lead context. + LeadContextHeaderHelper leadContextHelper = new LeadContextHeaderHelper(); + leadContextHelper.setXBayaConfiguration(this.configuration); + LeadContextHeader leadContext = leadContextHelper.getLeadContextHeader(); + leadContext.setWorkflowId(URI.create("http://host/2005/11/09/workflowinstace")); + leadContext.setNodeId("decoder1"); + leadContext.setTimeStep("5"); + leadContext.setServiceInstanceId(URI.create("decoder-instance-10")); + + XmlElement element3 = XMLUtil.xmlElement5ToXmlElement3(definitions.xml()); + xsul.wsdl.WsdlDefinitions definitions3 = new xsul.wsdl.WsdlDefinitions(element3); + + WSIFClient wclient = WSIFRuntime.getDefault().newClientFor(definitions3, "TestCMD_Example1SoapPort"); + StickySoapHeaderHandler handler = new StickySoapHeaderHandler("use-lead-header", leadContext); + + wclient.addHandler(handler); + wclient.useAsyncMessaging(correlator); + wclient.setAsyncResponseTimeoutInMs(33000L); + + WSIFPort port = wclient.getPort(); + WSIFOperation operation = port.createOperation("Run"); + WSIFMessage inputMessage = operation.createInputMessage(); + WSIFMessage outputMessage = operation.createOutputMessage(); + WSIFMessage faultMessage = operation.createFaultMessage(); + + // inputMessage.setObjectPart("InputParam1", "Hello"); + inputMessage.setObjectPart("InputParam1", "100"); + + logger.info("inputMessage: " + XsulUtil.safeXmlToString((XmlElement) inputMessage)); + boolean success = operation.executeRequestResponseOperation(inputMessage, outputMessage, faultMessage); + + XmlElement result; + if (success) { + result = (XmlElement) outputMessage; + } else { + result = (XmlElement) faultMessage; + } + logger.info("result:\n" + XsulUtil.safeXmlToString(result)); + + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/DSCUtilTestCase.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/DSCUtilTestCase.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/DSCUtilTestCase.java new file mode 100644 index 0000000..866aa6a --- /dev/null +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/DSCUtilTestCase.java @@ -0,0 +1,79 @@ +/* + * + * 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.xbaya.test; + +import java.io.File; + +import org.apache.airavata.workflow.model.component.ComponentException; +import org.apache.airavata.workflow.model.component.ComponentRegistryException; +import org.apache.airavata.workflow.model.gpel.DSCUtil; +import org.apache.airavata.workflow.model.graph.GraphException; +import org.apache.airavata.workflow.model.wf.Workflow; +import org.apache.airavata.xbaya.file.XBayaPathConstants; +import org.apache.airavata.xbaya.test.util.WorkflowCreator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import xsul5.wsdl.WsdlDefinitions; +import xsul5.wsdl.WsdlException; +import xsul5.wsdl.WsdlResolver; + +public class DSCUtilTestCase extends XBayaTestCase { + + private static final String SAMPLE_AWSDL = XBayaPathConstants.WSDL_DIRECTORY + "/test/adder-awsdl.xml"; + + private static final String WSDL_WITH_MULTIPLE_PORT_TYPES = XBayaPathConstants.BPEL_SCRIPT_DIRECTORY + + File.separator + "receive-test-wsdl.xml"; + + private static final Logger logger = LoggerFactory.getLogger(DSCUtilTestCase.class); + + /** + * @throws WsdlException + */ + public void testConvertToCWSDL() throws WsdlException { + WsdlDefinitions definitions = WsdlResolver.getInstance().loadWsdl(new File(".").toURI(), + new File(SAMPLE_AWSDL).toURI()); + DSCUtil.convertToCWSDL(definitions, this.configuration.getDSCURL()); + logger.info(definitions.xmlStringPretty()); + } + + /** + * + */ + public void testMultiplePortTypes() { + WsdlDefinitions definitions = WsdlResolver.getInstance().loadWsdl(new File(".").toURI(), + new File(WSDL_WITH_MULTIPLE_PORT_TYPES).toURI()); + DSCUtil.convertToCWSDL(definitions, this.configuration.getDSCURL()); + logger.info(definitions.xmlStringPretty()); + } + + /** + * @throws ComponentException + * @throws GraphException + * @throws ComponentRegistryException + */ + public void testConvertToCWSDLs() throws ComponentException, GraphException, ComponentRegistryException { + WorkflowCreator creator = new WorkflowCreator(); + Workflow workflow = creator.createComplexMathWorkflow(); + DSCUtil.createCWSDLs(workflow, this.configuration.getDSCURL()); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/GFacServiceCreaterTestCase.java ---------------------------------------------------------------------- diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/GFacServiceCreaterTestCase.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/GFacServiceCreaterTestCase.java new file mode 100644 index 0000000..1dca11e --- /dev/null +++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/test/GFacServiceCreaterTestCase.java @@ -0,0 +1,120 @@ +/* + * + * 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.xbaya.test; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; + +import javax.xml.namespace.QName; + +import org.apache.airavata.common.utils.IOUtil; +import org.apache.airavata.common.utils.WSDLUtil; +import org.apache.airavata.common.utils.XMLUtil; +import org.apache.airavata.workflow.model.component.ComponentException; +import org.apache.airavata.workflow.model.component.ComponentRegistryException; +import org.apache.airavata.workflow.model.exceptions.WorkflowException; +import org.apache.airavata.workflow.model.graph.GraphException; +import org.apache.airavata.workflow.model.wf.Workflow; +import org.apache.airavata.xbaya.file.XBayaPathConstants; +import org.apache.airavata.xbaya.invoker.GenericInvoker; +import org.apache.airavata.xbaya.invoker.Invoker; +import org.apache.airavata.xbaya.jython.lib.GFacServiceCreator; +import org.apache.airavata.xbaya.jython.lib.NotificationSender; +import org.apache.airavata.xbaya.jython.script.JythonScript; +import org.apache.airavata.xbaya.test.util.WorkflowCreator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class GFacServiceCreaterTestCase extends XBayaTestCase { + + private static final String TEST_SERVICE_QNAME = "{http://www.extreme.indiana.edu/lead}TestCMD_Simple"; + + private static final String TEST_AWSDL = XBayaPathConstants.WSDL_DIRECTORY + File.separator + + WorkflowCreator.GFAC_TEST_AWSDL; + + private static final Logger logger = LoggerFactory.getLogger(GFacServiceCreaterTestCase.class); + + /** + * @throws WorkflowException + */ + public void testCreate() throws WorkflowException { + URI gFacURL = this.configuration.getGFacURL(); + URI gFacWSDLURL = WSDLUtil.appendWSDLQuary(gFacURL); + GFacServiceCreator creator = new GFacServiceCreator(gFacWSDLURL); + creator.createService(TEST_SERVICE_QNAME); + creator.shutdownService(); + } + + /** + * @throws WorkflowException + */ + public void testService() throws WorkflowException { + NotificationSender notifier = new NotificationSender(this.configuration.getBrokerURL(), "test-topic2"); + Invoker invoker = new GenericInvoker(QName.valueOf(TEST_SERVICE_QNAME), TEST_AWSDL, "test-node", null, + this.configuration.getGFacURL().toString(), notifier); + invoker.setup(); + invoker.setOperation("Run"); + invoker.setInput("inparam1", "test"); + invoker.invoke(); + Object output = invoker.getOutput("outparam1"); + logger.info("output: " + output); + } + + /** + * @throws ComponentException + * @throws IOException + * @throws GraphException + * @throws InterruptedException + * @throws ComponentRegistryException + */ + public void testWorkflow() throws ComponentException, IOException, GraphException, InterruptedException, + ComponentRegistryException { + WorkflowCreator creator = new WorkflowCreator(); + Workflow workflow = creator.createGFacWorkflow(); + + File workflowFile = new File("tmp/gfac-test.xwf"); + XMLUtil.saveXML(workflow.toXML(), workflowFile); + + JythonScript script = new JythonScript(workflow, this.configuration); + script.create(); + String jythonString = script.getJythonString(); + String filename = "tmp/gfac-test.py"; + IOUtil.writeToFile(jythonString, filename); + + // String[] argv = new String[] { filename, "-TestCMD_Simple_wsdl", + // GFAC_TEST_WSDL }; + // jython.main(argv); + + String[] commands = new String[] { "./jython.sh", filename, "-TestCMD_Simple_wsdl", TEST_AWSDL }; + Process process = Runtime.getRuntime().exec(commands); + int exitValue = process.waitFor(); + logger.info("Exit value: " + exitValue); + InputStream inputStream = process.getInputStream(); + String output = IOUtil.readToString(inputStream); + logger.info("output: " + output); + InputStream errorStream = process.getErrorStream(); + String error = IOUtil.readToString(errorStream); + logger.info("error: " + error); + } +} \ No newline at end of file