You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sa...@apache.org on 2014/04/14 20:31:15 UTC
[73/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/model/registrybrowser/NodeParameter.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/NodeParameter.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/NodeParameter.java
new file mode 100644
index 0000000..acaa398
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/NodeParameter.java
@@ -0,0 +1,60 @@
+/*
+ *
+ * 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.model.registrybrowser;
+
+import org.apache.airavata.schemas.gfac.Parameter;
+
+
+public class NodeParameter {
+ private Parameter parameter;
+ private Object value;
+
+ public NodeParameter(Parameter parameter) {
+ this(parameter,null);
+ }
+
+ public NodeParameter(Parameter parameter, Object value) {
+ setParameter(parameter);
+ setValue(value);
+ }
+ public Parameter getParameter() {
+ return parameter;
+ }
+ public void setParameter(Parameter parameter) {
+ this.parameter = parameter;
+ }
+ public Object getValue() {
+ return value;
+ }
+ public void setValue(Object value) {
+ this.value = value;
+ }
+
+ public String getName(){
+ return getParameter().getParameterName();
+ }
+
+ public String getDescription(){
+ return getParameter().getParameterDescription();
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/OutputParameters.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/OutputParameters.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/OutputParameters.java
new file mode 100644
index 0000000..f3067e5
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/OutputParameters.java
@@ -0,0 +1,36 @@
+/*
+ *
+ * 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.model.registrybrowser;
+
+import org.apache.airavata.schemas.gfac.Parameter;
+
+public class OutputParameters extends ServiceParameters {
+
+ public OutputParameters(NodeParameter[] parameters) {
+ super(parameters);
+ }
+
+ public OutputParameters(Parameter[] parameters) {
+ super(parameters);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/ServiceDescriptions.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/ServiceDescriptions.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/ServiceDescriptions.java
new file mode 100644
index 0000000..dcef41f
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/ServiceDescriptions.java
@@ -0,0 +1,50 @@
+/*
+ *
+ * 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.model.registrybrowser;
+
+import java.util.List;
+
+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;
+
+public class ServiceDescriptions {
+ private AiravataAPI airavataAPI;
+
+ public ServiceDescriptions(AiravataAPI airavataAPI) {
+ setAiravataAPI(airavataAPI);
+ }
+
+ public AiravataAPI getAiravataAPI() {
+ return airavataAPI;
+ }
+
+ public void setAiravataAPI(AiravataAPI airavataAPI) {
+ this.airavataAPI = airavataAPI;
+ }
+
+ public List<ServiceDescription> getDescriptions() throws RegistryException, AiravataAPIInvocationException {
+ return getAiravataAPI().getApplicationManager().getAllServiceDescriptions();
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/ServiceParameters.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/ServiceParameters.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/ServiceParameters.java
new file mode 100644
index 0000000..a3ea981
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/ServiceParameters.java
@@ -0,0 +1,57 @@
+/*
+ *
+ * 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.model.registrybrowser;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.airavata.schemas.gfac.Parameter;
+
+public class ServiceParameters {
+ private List<NodeParameter> parameters;
+
+ public ServiceParameters(Parameter[] parameters) {
+ if (parameters!=null) {
+ List<NodeParameter> serviceParaList = new ArrayList<NodeParameter>();
+ for (Parameter parameter : parameters) {
+ serviceParaList.add(new NodeParameter(parameter));
+ }
+ setParameters(serviceParaList);
+ }
+ }
+
+ public ServiceParameters(NodeParameter[] parameters) {
+ if (parameters!=null) {
+ setParameters(Arrays.asList(parameters));
+ }
+ }
+ public List<NodeParameter> getParameters() {
+ if (parameters==null){
+ parameters=new ArrayList<NodeParameter>();
+ }
+ return parameters;
+ }
+ public void setParameters(List<NodeParameter> parameters) {
+ this.parameters = parameters;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflow.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflow.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflow.java
new file mode 100644
index 0000000..4b619b3
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflow.java
@@ -0,0 +1,94 @@
+/*
+ *
+ * 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.model.registrybrowser;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
+//import org.apache.airavata.registry.api.AiravataRegistry2;
+import org.apache.airavata.registry.api.exception.worker.ExperimentLazyLoadedException;
+import org.apache.airavata.registry.api.workflow.NodeExecutionData;
+import org.apache.airavata.registry.api.workflow.WorkflowExecution;
+import org.apache.airavata.registry.api.workflow.WorkflowExecutionData;
+
+public class XBayaWorkflow {
+ private List<XBayaWorkflowNodeElement> workflowServices;
+ private WorkflowExecution workflowInstance;
+ private AiravataAPI airavataAPI;
+
+ public XBayaWorkflow(WorkflowExecution workflowInstance, AiravataAPI airavataAPI) {
+ setWorkflowInstance(workflowInstance);
+ setAiravataAPI(airavataAPI);
+ }
+
+ public List<XBayaWorkflowNodeElement> getWorkflowServices() {
+ if (workflowServices==null){
+ workflowServices=new ArrayList<XBayaWorkflowNodeElement>();
+ try {
+ WorkflowExecutionData workflowInstanceData = getAiravataAPI().getProvenanceManager().getWorkflowInstanceData(getWorkflowId(), getWorkflowId());
+ List<NodeExecutionData> nodeDataList = workflowInstanceData.getNodeDataList();
+ for (NodeExecutionData nodeData : nodeDataList) {
+ workflowServices.add(new XBayaWorkflowNodeElement(nodeData.getWorkflowInstanceNode().getNodeId(), nodeData));
+ }
+ } catch (AiravataAPIInvocationException e) {
+ e.printStackTrace();
+ } catch (ExperimentLazyLoadedException e) {
+ e.printStackTrace();
+ }
+ }
+ return workflowServices;
+ }
+
+ public void setWorkflowNodes(List<XBayaWorkflowNodeElement> workflowServices) {
+ this.workflowServices = workflowServices;
+ }
+
+ public void add(XBayaWorkflowNodeElement workflowService){
+ getWorkflowServices().add(workflowService);
+ }
+
+ public String getWorkflowName() {
+ return getWorkflowInstance().getTemplateName();
+ }
+
+ public String getWorkflowId() {
+ return getWorkflowInstance().getWorkflowExecutionId();
+ }
+
+ public AiravataAPI getAiravataAPI() {
+ return airavataAPI;
+ }
+
+ public void setAiravataAPI(AiravataAPI airavataAPI) {
+ this.airavataAPI = airavataAPI;
+ }
+
+ public WorkflowExecution getWorkflowInstance() {
+ return workflowInstance;
+ }
+
+ public void setWorkflowInstance(WorkflowExecution workflowInstance) {
+ this.workflowInstance = workflowInstance;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowExperiment.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowExperiment.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowExperiment.java
new file mode 100644
index 0000000..04f6fae
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowExperiment.java
@@ -0,0 +1,81 @@
+/*
+ *
+ * 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.model.registrybrowser;
+
+import java.util.ArrayList;
+import java.util.List;
+
+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.registry.api.AiravataRegistry2;
+import org.apache.airavata.registry.api.workflow.WorkflowExecution;
+
+public class XBayaWorkflowExperiment {
+ private List<XBayaWorkflow> workflows;
+ private String experimentId;
+ private AiravataAPI airavataAPI;
+
+ public XBayaWorkflowExperiment(String experimentId, AiravataAPI airavataAPI) {
+ setExperimentId(experimentId);
+ setAiravataAPI(airavataAPI);
+ }
+
+ public List<XBayaWorkflow> getWorkflows() {
+ if (workflows==null){
+ workflows=new ArrayList<XBayaWorkflow>();
+ try {
+ List<WorkflowExecution> experimentWorkflowInstances = getAiravataAPI().getProvenanceManager().getExperimentWorkflowInstances(getExperimentId());
+ for (WorkflowExecution workflowInstance : experimentWorkflowInstances) {
+ workflows.add(new XBayaWorkflow(workflowInstance, getAiravataAPI()));
+ }
+ } catch (AiravataAPIInvocationException e) {
+ e.printStackTrace();
+ }
+ }
+ return workflows;
+ }
+
+ public void setWorkflows(List<XBayaWorkflow> workflows) {
+ this.workflows = workflows;
+ }
+
+ public void add(XBayaWorkflow workflow){
+ getWorkflows().add(workflow);
+ }
+
+ public String getExperimentId() {
+ return experimentId;
+ }
+
+ public void setExperimentId(String experimentId) {
+ this.experimentId = experimentId;
+ }
+
+ public AiravataAPI getAiravataAPI() {
+ return airavataAPI;
+ }
+
+ public void setAiravataAPI(AiravataAPI airavataAPI) {
+ this.airavataAPI = airavataAPI;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowExperiments.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowExperiments.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowExperiments.java
new file mode 100644
index 0000000..555aaf2
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowExperiments.java
@@ -0,0 +1,65 @@
+/*
+ *
+ * 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.model.registrybrowser;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+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.registry.api.AiravataRegistry2;
+
+public class XBayaWorkflowExperiments {
+ private AiravataAPI airavataAPI;
+
+ public XBayaWorkflowExperiments(AiravataAPI airavataAPI) {
+ setAiravataAPI(airavataAPI);
+ }
+
+ public List<XBayaWorkflowExperiment> getAllExperiments(){
+ Map<String, XBayaWorkflowExperiment> experiments=new HashMap<String,XBayaWorkflowExperiment>();
+ try {
+ initializeExperimentMap(experiments);
+ } catch (AiravataAPIInvocationException e) {
+ e.printStackTrace();
+ }
+ return Arrays.asList(experiments.values().toArray(new XBayaWorkflowExperiment[]{}));
+ }
+
+ public void initializeExperimentMap(Map<String, XBayaWorkflowExperiment> experiments) throws AiravataAPIInvocationException {
+ List<String> experimentIdByUser = getAiravataAPI().getProvenanceManager().getExperimentIdList();
+ for (String id : experimentIdByUser) {
+ experiments.put(id, new XBayaWorkflowExperiment(id, getAiravataAPI()));
+ }
+ }
+
+ public AiravataAPI getAiravataAPI() {
+ return airavataAPI;
+ }
+
+ public void setAiravataAPI(AiravataAPI airavataAPI) {
+ this.airavataAPI = airavataAPI;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowNodeElement.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowNodeElement.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowNodeElement.java
new file mode 100644
index 0000000..a3072e0
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowNodeElement.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.model.registrybrowser;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.airavata.registry.api.workflow.NodeExecutionData;
+import org.apache.airavata.registry.api.workflow.InputData;
+import org.apache.airavata.registry.api.workflow.OutputData;
+import org.apache.airavata.registry.api.workflow.WorkflowInstanceNodePortData;
+import org.apache.airavata.schemas.gfac.Parameter;
+
+public class XBayaWorkflowNodeElement {
+ private InputParameters inputParameters;
+ private OutputParameters outputParameters;
+ private NodeExecutionData nodeData;
+ private String nodeId;
+
+ public XBayaWorkflowNodeElement(String nodeId, NodeExecutionData nodeData) {
+ setNodeId(nodeId);
+ setNodeData(nodeData);
+ }
+
+ public OutputParameters getOutputParameters() {
+ if (outputParameters==null){
+ outputParameters=new OutputParameters((NodeParameter[])null);
+ outputParameters.getParameters().addAll(generateParameterListForOutput(nodeData.getOutputData()));
+ }
+ return outputParameters;
+ }
+
+ private List<NodeParameter> generateParameterListForInput(
+ List<InputData> list) {
+ List<NodeParameter> params=new ArrayList<NodeParameter>();
+ for (WorkflowInstanceNodePortData portData : list) {
+ Parameter parameter = Parameter.Factory.newInstance();
+ parameter.setParameterName(portData.getName());
+ NodeParameter serviceParameter = new NodeParameter(parameter, portData.getValue());
+ params.add(serviceParameter);
+ }
+ return params;
+ }
+
+ private List<NodeParameter> generateParameterListForOutput(
+ List<OutputData> list) {
+ List<NodeParameter> params=new ArrayList<NodeParameter>();
+ for (WorkflowInstanceNodePortData portData : list) {
+ Parameter parameter = Parameter.Factory.newInstance();
+ parameter.setParameterName(portData.getName());
+ NodeParameter serviceParameter = new NodeParameter(parameter, portData.getValue());
+ params.add(serviceParameter);
+ }
+ return params;
+ }
+
+ public void setOutputParameters(OutputParameters outputParameters) {
+ this.outputParameters = outputParameters;
+ }
+
+ public InputParameters getInputParameters() {
+ if (inputParameters==null){
+ inputParameters=new InputParameters((NodeParameter[])null);
+ inputParameters.getParameters().addAll(generateParameterListForInput(nodeData.getInputData()));
+ }
+ return inputParameters;
+ }
+
+ public void setInputParameters(InputParameters inputParameters) {
+ this.inputParameters = inputParameters;
+ }
+
+ public String getNodeId() {
+ return nodeId;
+ }
+
+ public void setNodeId(String nodeId) {
+ this.nodeId = nodeId;
+ }
+
+ public NodeExecutionData getNodeData() {
+ return nodeData;
+ }
+
+ public void setNodeData(NodeExecutionData nodeData) {
+ this.nodeData = nodeData;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowTemplate.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowTemplate.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowTemplate.java
new file mode 100644
index 0000000..63af7ac
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowTemplate.java
@@ -0,0 +1,50 @@
+/*
+ *
+ * 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.model.registrybrowser;
+
+
+public class XBayaWorkflowTemplate {
+ private String workflowGraph;
+ private String workflowName;
+
+ public XBayaWorkflowTemplate(String workflowName, String workflowGraph) {
+ setWorkflowGraph(workflowGraph);
+ setWorkflowName(workflowName);
+ }
+
+ public String getWorkflowGraph() {
+ return workflowGraph;
+ }
+
+ public void setWorkflowGraph(String workflowGraph) {
+ this.workflowGraph = workflowGraph;
+ }
+
+ public String getWorkflowName() {
+ return workflowName;
+ }
+
+ public void setWorkflowName(String workflowName) {
+ this.workflowName = workflowName;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowTemplates.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowTemplates.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowTemplates.java
new file mode 100644
index 0000000..318c3ac
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/model/registrybrowser/XBayaWorkflowTemplates.java
@@ -0,0 +1,63 @@
+/*
+ *
+ * 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.model.registrybrowser;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+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.workflow.model.wf.Workflow;
+//import org.apache.airavata.registry.api.AiravataRegistry2;
+
+public class XBayaWorkflowTemplates {
+ private AiravataAPI airavataAPI;
+
+ public XBayaWorkflowTemplates(AiravataAPI airavataAPI) {
+ setAiravataAPI(airavataAPI);
+ }
+
+ public AiravataAPI getAiravataAPI() {
+ return airavataAPI;
+ }
+
+ public void setAiravataAPI(AiravataAPI airavataAPI) {
+ this.airavataAPI = airavataAPI;
+ }
+
+ public List<XBayaWorkflowTemplate> getWorkflows() {
+ List<XBayaWorkflowTemplate> workflows = new ArrayList<XBayaWorkflowTemplate>();
+ try {
+ List<Workflow> list = getAiravataAPI().getWorkflowManager().getWorkflows();
+
+ for (Workflow workflow : list){
+ String workflowAsString = getAiravataAPI().getWorkflowManager().getWorkflowAsString(workflow.getName());
+ workflows.add(new XBayaWorkflowTemplate(workflow.getName(), workflowAsString));
+ }
+ } catch (AiravataAPIInvocationException e) {
+ e.printStackTrace();
+ }
+ return workflows;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/modifier/WorkflowModifier.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/modifier/WorkflowModifier.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/modifier/WorkflowModifier.java
new file mode 100644
index 0000000..5a0746c
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/modifier/WorkflowModifier.java
@@ -0,0 +1,260 @@
+/*
+ *
+ * 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.modifier;
+
+import java.awt.Color;
+import java.awt.Point;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.airavata.common.exception.UtilsException;
+import org.apache.airavata.common.utils.WSDLUtil;
+import org.apache.airavata.workflow.model.component.system.InputComponent;
+import org.apache.airavata.workflow.model.component.ws.WSComponent;
+import org.apache.airavata.workflow.model.exceptions.WorkflowRuntimeException;
+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.PortImpl;
+import org.apache.airavata.workflow.model.graph.system.InputNode;
+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.graph.ws.WSPort;
+import org.apache.airavata.workflow.model.wf.Workflow;
+import org.apache.airavata.ws.monitor.EventData;
+import org.apache.airavata.ws.monitor.EventDataRepository;
+import org.apache.airavata.ws.monitor.MonitorException;
+import org.apache.airavata.ws.monitor.MonitorUtil;
+import org.apache.airavata.ws.monitor.MonitorUtil.EventType;
+import org.apache.airavata.xbaya.graph.controller.NodeController;
+import org.apache.airavata.xbaya.ui.monitor.MonitorEventHandler.NodeState;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xmlpull.infoset.XmlElement;
+
+import xsul.XmlConstants;
+import xsul5.wsdl.WsdlPortTypeOperation;
+
+public class WorkflowModifier {
+
+ private static final Logger logger = LoggerFactory.getLogger(WorkflowModifier.class);
+
+ private Workflow modifiedWorkflow;
+
+ private EventDataRepository eventData;
+
+ /**
+ * Constructs a WorkflowModifier.
+ *
+ * @param modifiedWorkflow
+ * @param eventData
+ */
+ public WorkflowModifier(Workflow modifiedWorkflow, EventDataRepository eventData) {
+ this.modifiedWorkflow = modifiedWorkflow;
+ this.eventData = eventData;
+ }
+
+ /**
+ * @return The workflow that needs to be executed.
+ * @throws GraphException
+ * @throws MonitorException
+ */
+ public Workflow createDifference() throws GraphException, MonitorException {
+ WSGraph originalGraph = this.modifiedWorkflow.getGraph();
+ Workflow workflow = this.modifiedWorkflow.clone();
+ String name = workflow.getName();
+ name += " (diff)";
+ workflow.setName(name);
+ WSGraph graph = workflow.getGraph();
+
+ // Remove the finished node.
+ removeFinishedNodes(originalGraph, graph);
+
+ Set<WSPort> originalFromPorts = getFinalOutputPorts(originalGraph, graph);
+
+ // Create input nodes for unconnected input ports.
+ createInputNodes(graph, originalFromPorts);
+
+ // Set default values.
+ for (WSPort originalFromPort : originalFromPorts) {
+ // TODO handle the case that node is not WSNode.
+ Node originalFromNode = originalFromPort.getNode();
+ String fromNodeID = originalFromNode.getID();
+ String output;
+ if (originalFromNode instanceof InputNode) {
+ // notification that includes the input of the workflow.
+ output = getWorkflowInput(fromNodeID);
+ } else if (originalFromNode instanceof WSNode) {
+ // Retrieve input value from notification.
+ WSComponent component = ((WSNode) originalFromNode).getComponent();
+ String messageName = component.getOutputTypeName();
+ String parameterName = originalFromPort.getComponentPort().getName();
+ output = getOutput(fromNodeID, messageName, parameterName);
+ } else {
+ // This should not happen.
+ throw new WorkflowRuntimeException(originalFromNode.getClass().getName());
+ }
+ Port originalToPort = originalFromPort.getToPorts().get(0);
+ PortImpl toPort = graph.getPort(originalToPort.getID());
+ InputNode inputNode = (InputNode) toPort.getFromNode();
+ inputNode.setDefaultValue(output);
+ }
+
+ return workflow;
+ }
+
+ /**
+ * @param originalGraph
+ * @param graph
+ * @throws GraphException
+ */
+ private void removeFinishedNodes(WSGraph originalGraph, WSGraph graph) throws GraphException {
+ ArrayList<Node> finishedNodes = new ArrayList<Node>();
+ for (Node node : originalGraph.getNodes()) {
+ Color color = NodeController.getGUI(node).getBodyColor();
+ if (NodeState.FINISHED.color.equals(color)) {
+ finishedNodes.add(node);
+ }
+ }
+ for (Node finishedNode : finishedNodes) {
+ Node node = graph.getNode(finishedNode.getID());
+ graph.removeNode(node);
+ }
+ }
+
+ /**
+ * @param originalGraph
+ * @param graph
+ * @return The final output ports.
+ */
+ private Set<WSPort> getFinalOutputPorts(WSGraph originalGraph, WSGraph graph) {
+ Collection<Port> inputPorts = GraphUtil.getPorts(graph, Port.Kind.DATA_IN);
+ Set<WSPort> originalFromPorts = new HashSet<WSPort>();
+ for (Port inputPort : inputPorts) {
+ Port fromPort = inputPort.getFromPort();
+ if (fromPort == null) {
+ // This input port is not connected.
+ String inputPortID = inputPort.getID();
+ logger.debug("id: " + inputPortID);
+ Port originalInputPort = originalGraph.getPort(inputPortID);
+ // No duplicate in set.
+ Port originalFromPort = originalInputPort.getFromPort();
+ originalFromPorts.add((WSPort) originalFromPort);
+ }
+ }
+ return originalFromPorts;
+ }
+
+ /**
+ * @param graph
+ * @param originalFromPorts
+ * @throws GraphException
+ */
+ private void createInputNodes(WSGraph graph, Set<WSPort> originalFromPorts) throws GraphException {
+ InputComponent inputComponent = new InputComponent();
+ for (WSPort originalFromPort : originalFromPorts) {
+ InputNode inputNode = inputComponent.createNode(graph);
+ List<Port> originalToPorts = originalFromPort.getToPorts();
+ boolean first = true;
+ for (Port originalToPort : originalToPorts) {
+ String toPortID = originalToPort.getID();
+ Port toPort = graph.getPort(toPortID);
+ graph.addEdge(inputNode.getPort(), toPort);
+ if (first) {
+ first = false;
+ Point position = NodeController.getGUI(originalToPort).getPosition();
+ Point inputNodePosition = new Point(0, position.y);
+ inputNode.setPosition(inputNodePosition);
+ }
+ }
+ }
+ }
+
+ private String getWorkflowInput(String nodeID) throws MonitorException {
+ logger.debug("Node:" + nodeID);
+ List<EventData> events = this.eventData.getEvents();
+ for (EventData event : events) {
+ EventType type = event.getType();
+ // TODO change this to read from the notification from GPEL.
+ if (type != EventType.INVOKING_SERVICE) {
+ continue;
+ }
+ String id = event.getNodeID();
+ if (!"".equals(id)) {
+ continue;
+ }
+ // TODO null check
+ XmlElement eventElement = event.getEvent();
+ XmlElement result = eventElement.element(MonitorUtil.REQUEST);
+ XmlElement body = result.element(MonitorUtil.BODY);
+ XmlElement soapBody = body.element(XmlConstants.S_BODY);
+ WsdlPortTypeOperation wsdlPortTypeOperation;
+ try {
+ wsdlPortTypeOperation = WSDLUtil.getFirstOperation(this.modifiedWorkflow.getWorkflowWSDL());
+ } catch (UtilsException e) {
+ throw new MonitorException(e);
+ }
+ XmlElement part = soapBody.element(wsdlPortTypeOperation.getName());
+ XmlElement parameter = part.element(nodeID);
+ // TODO support complex type.
+ String value = parameter.requiredText();
+ return value;
+ }
+ // TODO
+ String message = "Couldn't find a notification of about the input with nodeID, " + nodeID;
+ throw new MonitorException(message);
+ }
+
+ private String getOutput(String nodeID, String messageName, String parameterName) throws MonitorException {
+ List<EventData> events = this.eventData.getEvents();
+ for (EventData event : events) {
+ // We need to find the notification that contains the output of the
+ // service invocation.
+ EventType type = event.getType();
+ if (!(type == EventType.SENDING_RESULT || type == EventType.RECEIVED_RESULT)) {
+ continue;
+ }
+ String id = event.getNodeID();
+ if (!nodeID.equals(id)) {
+ continue;
+ }
+ // TODO null check
+ XmlElement eventElement = event.getEvent();
+ XmlElement result = eventElement.element(MonitorUtil.RESULT);
+ XmlElement body = result.element(MonitorUtil.BODY);
+ XmlElement soapBody = body.element(XmlConstants.S_BODY);
+ XmlElement part = soapBody.element(messageName);
+ XmlElement parameter = part.element(parameterName);
+ // TODO support complex type.
+ String value = parameter.requiredText();
+ return value;
+ }
+ // TODO
+ String message = "Couldn't find a notification of the output from the service with nodeID, " + nodeID;
+ throw new MonitorException(message);
+ }
+
+}
\ 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/provenance/ProvenanceReader.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/ProvenanceReader.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/ProvenanceReader.java
new file mode 100644
index 0000000..cf6ce0c
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/ProvenanceReader.java
@@ -0,0 +1,64 @@
+/*
+ *
+ * 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.provenance;
+
+import java.util.List;
+
+//import org.apache.airavata.registry.api.AiravataRegistry2;
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.registry.api.workflow.ExperimentData;
+import org.apache.airavata.registry.api.workflow.NodeExecutionData;
+import org.apache.airavata.workflow.model.graph.Node;
+
+public class ProvenanceReader {
+
+ public String DEFAULT_LIBRARY_FOLDER_NAME = "provenance";
+
+ private String experimentId;
+
+ private AiravataAPI airavataAPI;
+
+ private Node node;
+
+ public ProvenanceReader(Node node,String experimentId,AiravataAPI airavataAPI) {
+ this.experimentId = experimentId;
+ this.airavataAPI = airavataAPI;
+ this.node = node;
+ }
+
+ public Object read() throws Exception {
+ try {
+ ExperimentData workflowExecution = airavataAPI.getProvenanceManager().getExperimentData(experimentId);
+ List<NodeExecutionData> nodeDataList = workflowExecution.getWorkflowExecutionDataList().get(0).getNodeDataList();
+ if (nodeDataList.size() == 0) {
+ return null;
+ }
+ for (NodeExecutionData data : nodeDataList) {
+ if (this.node.getID().equals(data.getWorkflowInstanceNode().getNodeId())) {
+ return data.getOutputData().get(0).getValue();
+ }
+ }
+ return null;
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/ProvenanceWrite.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/ProvenanceWrite.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/ProvenanceWrite.java
new file mode 100644
index 0000000..25401dc
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/ProvenanceWrite.java
@@ -0,0 +1,217 @@
+/*
+ *
+ * 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.provenance;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+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.common.utils.XMLUtil;
+//import org.apache.airavata.registry.api.AiravataRegistry2;
+import org.apache.airavata.registry.api.workflow.WorkflowExecution;
+import org.apache.airavata.registry.api.workflow.WorkflowInstanceNode;
+import org.apache.airavata.workflow.model.exceptions.WorkflowException;
+import org.apache.airavata.workflow.model.graph.DataPort;
+import org.apache.airavata.workflow.model.graph.ForEachExecutableNode;
+import org.apache.airavata.workflow.model.graph.Node;
+import org.apache.airavata.workflow.model.graph.system.EndForEachNode;
+import org.apache.airavata.workflow.model.graph.system.ForEachNode;
+import org.apache.airavata.workflow.model.graph.system.InputNode;
+import org.apache.airavata.workflow.model.graph.ws.WSNode;
+import org.apache.airavata.xbaya.concurrent.PredicatedExecutable;
+import org.apache.airavata.xbaya.graph.controller.NodeController;
+import org.apache.airavata.xbaya.invoker.Invoker;
+import org.apache.airavata.xbaya.util.XBayaUtil;
+import org.xmlpull.infoset.XmlElement;
+
+import xsul5.XmlConstants;
+
+/**
+ * @author Chathura Herath
+ */
+public final class ProvenanceWrite implements PredicatedExecutable {
+
+ private static final String PROVENANCE_DIR = "provenance";
+
+ private Node node;
+
+ private String workflowName;
+
+ private Map<Node, Invoker> invokerMap;
+
+ private String experimentId;
+
+ private AiravataAPI airavataAPI;
+
+ public ProvenanceWrite(Node node, String workflowName,
+ Map<Node, Invoker> invokerMap, String experimentId,AiravataAPI airavataAPI) {
+ this.node = node;
+ this.workflowName = workflowName;
+ this.invokerMap = invokerMap;
+ this.experimentId = experimentId;
+ this.airavataAPI = airavataAPI;
+ }
+
+ public void run() {
+
+ try {
+ saveNodeOutputs(node, invokerMap, workflowName);
+ } catch (WorkflowException e) {
+ // do nothing its a failure but go on
+ e.printStackTrace();
+ }
+
+ }
+
+ public boolean isReady() {
+ return NodeController.isFinished(this.node) && invokerMap.get(node) != null;
+ }
+
+ private void saveNodeOutputs(Node node,
+ Map<Node, Invoker> invokerMap, String workflowName)
+ throws WorkflowException {
+
+ if (null != node && !(node instanceof InputNode)) {
+ XmlElement elem = XmlConstants.BUILDER.newFragment("previousdat");
+ XmlElement inputs = null;
+ if (node instanceof WSNode) {
+ String nodeID = node.getComponent().getName();
+ XmlElement nodeElement = elem.newElement("wsnode");
+ elem.addChild(nodeElement);
+ nodeElement.addChild(nodeID);
+ inputs = elem.newElement("inputs");
+ elem.addChild(inputs);
+
+ List<DataPort> portsToBeSaved = node.getInputPorts();
+ for (DataPort savePort : portsToBeSaved) {
+
+ String portID = savePort.getName();
+ XmlElement portElem = inputs.newElement(portID);
+ inputs.addChild(portElem);
+ Object portInput = XBayaUtil.findInputFromPort(
+ savePort, invokerMap);
+ if (portInput instanceof org.xmlpull.v1.builder.XmlElement) {
+ portInput = XMLUtil
+ .xmlElement3ToXmlElement5((org.xmlpull.v1.builder.XmlElement) portInput);
+ }
+ portElem.addChild(portInput);
+
+ }
+
+ } else if (node instanceof EndForEachNode) {
+ // here we save the inputs for the entire foreach block
+ Node middleNode = node.getInputPort(0).getFromNode();
+ String nodeID = middleNode.getComponent().getName();
+ XmlElement nodeElement = elem.newElement("foreach");
+ elem.addChild(nodeElement);
+ nodeElement.addChild(nodeID);
+ inputs = elem.newElement("inputs");
+ elem.addChild(inputs);
+ XmlConstants.BUILDER.serializeToString(elem);
+ if (middleNode instanceof ForEachExecutableNode) {
+ List<DataPort> portsToBeSaved = middleNode.getInputPorts();
+ for (DataPort savePort : portsToBeSaved) {
+ // we will save all the inputs
+ // these are static inputs and
+ // input to the foreach node
+
+ if (savePort.getFromNode() instanceof ForEachNode) {
+ // this is the foreach node rest are simple
+ // inputs
+ Object value = XBayaUtil
+ .getInputsForForEachNode(
+ (ForEachNode) savePort
+ .getFromNode(),
+ new LinkedList<String>(),
+ invokerMap);
+ if (value instanceof org.xmlpull.v1.builder.XmlElement) {
+ value = XMLUtil
+ .xmlElement3ToXmlElement5((org.xmlpull.v1.builder.XmlElement) value);
+ }
+
+ XmlElement portElement = inputs.newElement(savePort
+ .getName());
+ inputs.addChild(portElement);
+ portElement.addChild(value);
+ } else {
+ String portID = savePort.getName();
+ XmlElement portElem = inputs.newElement(portID);
+ inputs.addChild(portElem);
+ Object portInput = XBayaUtil
+ .findInputFromPort(savePort, invokerMap);
+ if (portInput instanceof org.xmlpull.v1.builder.XmlElement) {
+ portInput = XMLUtil
+ .xmlElement3ToXmlElement5((org.xmlpull.v1.builder.XmlElement) portInput);
+ }
+
+ portElem.addChild(portInput);
+ }
+
+ }
+
+ } else {
+ // error but we will let it pass because it will be
+ // caught at higher level
+ }
+
+ }
+ if (inputs!=null) {
+ try {
+ this.airavataAPI.getProvenanceManager().setWorkflowInstanceNodeInput(new WorkflowInstanceNode(new WorkflowExecution(experimentId, experimentId), node.getID()), xsul5.XmlConstants.BUILDER.serializeToString(inputs));
+ } catch (AiravataAPIInvocationException e) {
+ throw new WorkflowException(e);
+ }
+ // deal with the outputs
+ }
+ XmlElement outputs = elem.newElement("outputs");
+ elem.addChild(outputs);
+
+ List<DataPort> outputPorts = node.getOutputPorts();
+ for (DataPort outputPort : outputPorts) {
+ String outputName = outputPort.getName();
+
+ XmlElement outputParamElement = outputs.newElement(outputName);
+ outputs.addChild(outputParamElement);
+ Object ouputParamValue = invokerMap.get(node).getOutput(
+ outputName);
+
+ if (ouputParamValue instanceof org.xmlpull.v1.builder.XmlElement) {
+ ouputParamValue = XMLUtil
+ .xmlElement3ToXmlElement5((org.xmlpull.v1.builder.XmlElement) ouputParamValue);
+ }
+
+ if (ouputParamValue != null) {
+ outputParamElement.addChild(ouputParamValue);
+ } else {
+ outputParamElement.addChild("null");
+ }
+ }
+ try {
+ this.airavataAPI.getProvenanceManager().setWorkflowInstanceNodeOutput(new WorkflowInstanceNode(new WorkflowExecution(experimentId,experimentId),node.getID()),xsul5.XmlConstants.BUILDER.serializeToString(outputs));
+ } catch (AiravataAPIInvocationException e) {
+ throw new WorkflowException(e);
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/WorkflowNodeStatusUpdater.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/WorkflowNodeStatusUpdater.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/WorkflowNodeStatusUpdater.java
new file mode 100644
index 0000000..de2d836
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/WorkflowNodeStatusUpdater.java
@@ -0,0 +1,135 @@
+/*
+ *
+ * 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.provenance;
+
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
+//import org.apache.airavata.registry.api.AiravataRegistry2;
+import org.apache.airavata.registry.api.workflow.WorkflowExecution;
+import org.apache.airavata.registry.api.workflow.WorkflowInstanceNode;
+import org.apache.airavata.registry.api.workflow.WorkflowExecutionStatus;
+import org.apache.airavata.registry.api.workflow.WorkflowNodeType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class WorkflowNodeStatusUpdater {
+ private static Logger logger = LoggerFactory.getLogger(WorkflowNodeStatusUpdater.class);
+
+ private AiravataAPI airavataAPI;
+
+ public WorkflowNodeStatusUpdater(AiravataAPI airavataAPI) {
+ this.airavataAPI = airavataAPI;
+ }
+
+ public boolean workflowNodeStarted(String workflowInstanceID,String nodeID,String inputs,String workflowID){
+ try {
+ //todo we currently save only service nodes
+ WorkflowNodeType workflowNodeType = new WorkflowNodeType();
+ workflowNodeType.setNodeType(WorkflowNodeType.WorkflowNode.SERVICENODE);
+ WorkflowInstanceNode node = new WorkflowInstanceNode(new WorkflowExecution(workflowInstanceID,workflowInstanceID), nodeID);
+ airavataAPI.getProvenanceManager().setWorkflowInstanceNodeInput(node, inputs);
+ airavataAPI.getProvenanceManager().setWorkflowNodeType(node, workflowNodeType);
+ airavataAPI.getProvenanceManager().setWorkflowInstanceNodeStatus(workflowInstanceID, workflowInstanceID, nodeID, WorkflowExecutionStatus.State.STARTED);
+ } catch (AiravataAPIInvocationException e) {
+ logger.error("Error updating Wokflow Node status !!");
+ return false;
+ }
+ return true;
+ }
+
+ public boolean workflowNodeFailed(String workflowInstanceID,String nodeID){
+ try {
+ airavataAPI.getProvenanceManager().setWorkflowInstanceNodeStatus(workflowInstanceID, workflowInstanceID, nodeID, WorkflowExecutionStatus.State.FAILED);
+ airavataAPI.getProvenanceManager().setWorkflowInstanceStatus(workflowInstanceID, workflowInstanceID, WorkflowExecutionStatus.State.FAILED);
+ } catch (AiravataAPIInvocationException e) {
+ logger.error("Error updating Wokflow Node status !!");
+ return false;
+ }
+ return true;
+ }
+
+ public boolean workflowNodeFinished(String workflowInstanceID,String nodeID,String inputs,String workflowID){
+ try {
+ WorkflowNodeType workflowNodeType = new WorkflowNodeType();
+ workflowNodeType.setNodeType(WorkflowNodeType.WorkflowNode.SERVICENODE);
+ WorkflowInstanceNode node = new WorkflowInstanceNode(new WorkflowExecution(workflowInstanceID,workflowInstanceID), nodeID);
+ airavataAPI.getProvenanceManager().setWorkflowInstanceNodeOutput(node, inputs);
+ airavataAPI.getProvenanceManager().setWorkflowNodeType(node,workflowNodeType);
+ airavataAPI.getProvenanceManager().setWorkflowInstanceNodeStatus(workflowInstanceID, workflowInstanceID, nodeID, WorkflowExecutionStatus.State.FINISHED);
+ } catch (AiravataAPIInvocationException e) {
+ logger.error("Error updating Wokflow Node status !!");
+ return false;
+ }
+ return true;
+ }
+
+ public boolean workflowNodeRunning(String workflowInstanceID,String nodeID){
+ try {
+ airavataAPI.getProvenanceManager().setWorkflowInstanceNodeStatus(workflowInstanceID, workflowInstanceID, nodeID, WorkflowExecutionStatus.State.RUNNING);
+ } catch (AiravataAPIInvocationException e) {
+ logger.error("Error updating Wokflow Node status !!");
+ return false;
+ }
+ return true;
+ }
+
+ public boolean workflowNodePaused(String workflowInstanceID,String nodeID){
+ try {
+ airavataAPI.getProvenanceManager().setWorkflowInstanceNodeStatus(workflowInstanceID, workflowInstanceID, nodeID, WorkflowExecutionStatus.State.PAUSED);
+ } catch (AiravataAPIInvocationException e) {
+ logger.error("Error updating Wokflow Node status !!");
+ return false;
+ }
+ return true;
+ }
+
+ public boolean workflowNodeStatusPending(String workflowInstanceID,String nodeID){
+ try {
+ airavataAPI.getProvenanceManager().setWorkflowInstanceNodeStatus(workflowInstanceID, workflowInstanceID, nodeID, WorkflowExecutionStatus.State.PENDING);
+ } catch (AiravataAPIInvocationException e) {
+ logger.error("Error updating Wokflow Node status !!");
+ return false;
+ }
+ return true;
+ }
+
+ public boolean workflowNodeStatusActive(String workflowInstanceID,String nodeID){
+ try {
+ airavataAPI.getProvenanceManager().setWorkflowInstanceNodeStatus(workflowInstanceID, workflowInstanceID, nodeID, WorkflowExecutionStatus.State.ACTIVE);
+ } catch (AiravataAPIInvocationException e) {
+ logger.error("Error updating Wokflow Node status !!");
+ return false;
+ }
+ return true;
+ }
+
+ public boolean workflowNodeStatusDone(String workflowInstanceID,String nodeID){
+ try {
+ airavataAPI.getProvenanceManager().setWorkflowInstanceNodeStatus(workflowInstanceID, workflowInstanceID, nodeID, WorkflowExecutionStatus.State.DONE);
+ } catch (AiravataAPIInvocationException e) {
+ logger.error("Error updating Wokflow Node status !!");
+ return false;
+ }
+ return true;
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/WorkflowStatusUpdater.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/WorkflowStatusUpdater.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/WorkflowStatusUpdater.java
new file mode 100644
index 0000000..cc444b0
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/provenance/WorkflowStatusUpdater.java
@@ -0,0 +1,103 @@
+/*
+ *
+ * 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.provenance;
+
+import java.sql.Timestamp;
+
+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.registry.api.AiravataRegistry2;
+import org.apache.airavata.registry.api.workflow.WorkflowExecution;
+import org.apache.airavata.registry.api.workflow.WorkflowExecutionStatus;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class WorkflowStatusUpdater {
+ private static Logger logger = LoggerFactory.getLogger(WorkflowStatusUpdater.class);
+
+ private AiravataAPI airavataAPI;
+
+ public WorkflowStatusUpdater(AiravataAPI airavataAPI) {
+ this.airavataAPI = airavataAPI;
+ }
+
+ public boolean workflowStarted(String experimentID){
+ try {
+ airavataAPI.getProvenanceManager().setWorkflowInstanceStatus(experimentID, experimentID, WorkflowExecutionStatus.State.STARTED);
+ } catch (AiravataAPIInvocationException e) {
+ logger.error("Error updating Wokflow Node status !!");
+ return false;
+ }
+ return true;
+ }
+
+ public boolean workflowFailed(String experimentID){
+ try {
+ airavataAPI.getProvenanceManager().setWorkflowInstanceStatus(experimentID, experimentID, WorkflowExecutionStatus.State.FAILED);
+ } catch (AiravataAPIInvocationException e) {
+ logger.error("Error updating Wokflow Node status !!");
+ return false;
+ }
+ return true;
+ }
+
+ public boolean workflowFinished(String experimentID){
+ try {
+ airavataAPI.getProvenanceManager().setWorkflowInstanceStatus(experimentID, experimentID, WorkflowExecutionStatus.State.FINISHED);
+ } catch (AiravataAPIInvocationException e) {
+ logger.error("Error updating Wokflow Node status !!");
+ return false;
+ }
+ return true;
+ }
+
+ public boolean workflowRunning(String experimentID){
+ try {
+ airavataAPI.getProvenanceManager().setWorkflowInstanceStatus(experimentID, experimentID, WorkflowExecutionStatus.State.RUNNING);
+ } catch (AiravataAPIInvocationException e) {
+ logger.error("Error updating Wokflow Node status !!");
+ return false;
+ }
+ return true;
+ }
+
+ public boolean workflowPaused(String experimentID){
+ try {
+ airavataAPI.getProvenanceManager().setWorkflowInstanceStatus(experimentID, experimentID, WorkflowExecutionStatus.State.PAUSED);
+ } catch (AiravataAPIInvocationException e) {
+ logger.error("Error updating Wokflow Node status !!");
+ return false;
+ }
+ return true;
+ }
+
+ public boolean saveWorkflowData(String experimentID,String workflowInstanceID,String workflowTemplateID) {
+ Timestamp currentTime = new Timestamp((new java.util.Date()).getTime());
+ try {
+ airavataAPI.getProvenanceManager().setWorkflowInstanceTemplateName(workflowInstanceID, workflowTemplateID);
+ airavataAPI.getProvenanceManager().setWorkflowInstanceStatus(new WorkflowExecutionStatus(new WorkflowExecution(experimentID, workflowInstanceID), WorkflowExecutionStatus.State.STARTED,currentTime));
+ } catch (AiravataAPIInvocationException e) {
+ logger.error("Error saving Workflow Data !!");
+ }
+ return true;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registry/PasswordCallbackImpl.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registry/PasswordCallbackImpl.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registry/PasswordCallbackImpl.java
new file mode 100644
index 0000000..da83cb2
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registry/PasswordCallbackImpl.java
@@ -0,0 +1,39 @@
+/*
+ *
+ * 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.registry;
+
+import org.apache.airavata.registry.api.PasswordCallback;
+
+public class PasswordCallbackImpl implements PasswordCallback {
+ private String username;
+ private String password;
+
+ public PasswordCallbackImpl(String username, String password) {
+ this.username = username;
+ this.password = password;
+ }
+
+ @Override
+ public String getPassword(String username) {
+ return password;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registry/RegistryAccesser.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registry/RegistryAccesser.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registry/RegistryAccesser.java
new file mode 100644
index 0000000..63c6948
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registry/RegistryAccesser.java
@@ -0,0 +1,212 @@
+/*
+ *
+ * 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.registry;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.jcr.RepositoryException;
+import javax.xml.namespace.QName;
+
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
+import org.apache.airavata.common.utils.StringUtil;
+import org.apache.airavata.common.utils.XMLUtil;
+import org.apache.airavata.registry.api.exception.RegistryException;
+import org.apache.airavata.workflow.model.component.ComponentException;
+import org.apache.airavata.workflow.model.graph.GraphException;
+import org.apache.airavata.workflow.model.wf.Workflow;
+import org.apache.airavata.xbaya.XBayaConfiguration;
+import org.apache.airavata.xbaya.XBayaConstants;
+import org.apache.airavata.xbaya.XBayaEngine;
+import org.apache.airavata.xbaya.jython.script.JythonScript;
+import org.apache.airavata.xbaya.ui.experiment.RegistryWorkflowPublisherWindow;
+import org.apache.airavata.xbaya.util.XBayaUtil;
+import org.ietf.jgss.GSSCredential;
+import org.xmlpull.infoset.XmlElement;
+//import org.apache.airavata.registry.api.AiravataRegistry2;
+
+public class RegistryAccesser {
+
+ /**
+ * PUBLIC_ACTOR
+ */
+ public static final String PUBLIC_ACTOR = "public";
+
+ private XBayaEngine engine;
+
+ private GSSCredential gssCredential;
+
+ /**
+ * Constructs a RegistryAccesser.
+ *
+ * @param engine
+ */
+ public RegistryAccesser(XBayaEngine engine) {
+ this.engine = engine;
+ }
+
+ private AiravataAPI connectToRegistry() {
+ return this.engine.getConfiguration().getAiravataAPI();
+ }
+
+ /**
+ *
+ * @return
+ * @throws RepositoryException
+ */
+ public Map<String, String> getOGCEWorkflowTemplateList() throws AiravataAPIInvocationException {
+ AiravataAPI airavataAPI = connectToRegistry();
+ List<Workflow> workflows = airavataAPI.getWorkflowManager().getWorkflows();
+ Map<String, String> workflowMap = new HashMap<String, String>();
+ for(Workflow workflow : workflows){
+ workflowMap.put(workflow.getName(), airavataAPI.getWorkflowManager().getWorkflowAsString(workflow.getName()));
+ }
+ return workflowMap;
+ }
+
+ /**
+ *
+ * @param workflowTemplateId
+ * @return
+ * @throws RepositoryException
+ * @throws GraphException
+ * @throws ComponentException
+ * @throws Exception
+ */
+ public Workflow getOGCEWorkflow(QName workflowTemplateId) throws RepositoryException, GraphException,
+ ComponentException, Exception {
+ AiravataAPI registry = connectToRegistry();
+ String xml = registry.getWorkflowManager().getWorkflowAsString(workflowTemplateId.getLocalPart());
+ XmlElement xwf = XMLUtil.stringToXmlElement(xml);
+ Workflow workflow = new Workflow(xwf);
+ return workflow;
+ }
+
+ /**
+ * Save workflow in to Registry
+ */
+ public boolean saveWorkflow() {
+ if (XBayaUtil.acquireJCRRegistry(this.engine)) {
+ try {
+
+ Workflow workflow = this.engine.getGUI().getWorkflow();
+ JythonScript script = new JythonScript(workflow, this.engine.getConfiguration());
+
+ // Check if there is any errors in the workflow first.
+ ArrayList<String> warnings = new ArrayList<String>();
+ if (!script.validate(warnings)) {
+ StringBuilder buf = new StringBuilder();
+ for (String warning : warnings) {
+ buf.append("- ");
+ buf.append(warning);
+ buf.append("\n");
+ }
+ this.engine.getGUI().getErrorWindow().warning(buf.toString());
+ return false;
+ }
+ RegistryWorkflowPublisherWindow registryPublishingWindow = new RegistryWorkflowPublisherWindow(
+ this.engine);
+ registryPublishingWindow.show();
+
+ String workflowId = workflow.getName();
+
+ workflowId = StringUtil.convertToJavaIdentifier(workflowId);
+
+ QName workflowQName = new QName(XBayaConstants.OGCE_WORKFLOW_NS, workflowId);
+
+ String workflowAsString = XMLUtil.xmlElementToString(workflow.toXML());
+ String owner = this.engine.getConfiguration().getRegistryUserName();
+
+ AiravataAPI registry = this.connectToRegistry();
+ if (registry.getWorkflowManager().isWorkflowExists(workflow.getName())){
+ registry.getWorkflowManager().updateWorkflow(workflow.getName(), workflowAsString);
+ }else{
+ registry.getWorkflowManager().saveWorkflow(workflowAsString);
+ }
+ if (registryPublishingWindow.isMakePublic()){
+
+ registry.getWorkflowManager().publishWorkflow(workflow.getName());
+ }
+ registryPublishingWindow.hide();
+ return true;
+ } catch (Exception e) {
+ this.engine.getGUI().getErrorWindow().error(e.getMessage(), e);
+ }
+ }
+ return false;
+ }
+
+ /**
+ *
+ * @param workflowTemplateId
+ * @throws RepositoryException
+ */
+ public void deleteOGCEWorkflow(QName workflowTemplateId) throws AiravataAPIInvocationException {
+ if (XBayaUtil.acquireJCRRegistry(this.engine)) {
+ AiravataAPI registry = connectToRegistry();
+ registry.getWorkflowManager().removeWorkflow(workflowTemplateId.getLocalPart());
+ }
+ }
+
+ /**
+ *
+ * @param qname
+ * @return
+ */
+ public Workflow getWorkflow(QName qname) throws AiravataAPIInvocationException {
+ AiravataAPI registry = connectToRegistry();
+ String xml = registry.getWorkflowManager().getWorkflowAsString(qname.getLocalPart());
+ Workflow workflow = null;
+ try {
+ XmlElement xwf = XMLUtil.stringToXmlElement(xml);
+ workflow = new Workflow(xwf);
+ } catch (GraphException e) {
+ e.printStackTrace(); // To change body of catch statement use File | Settings | File Templates.
+ } catch (ComponentException e) {
+ e.printStackTrace(); // To change body of catch statement use File | Settings | File Templates.
+ }
+ return workflow;
+ }
+
+ /**
+ *
+ * @param name
+ * @return
+ * @throws RegistryException
+ */
+ public Workflow getWorkflow(String name) throws AiravataAPIInvocationException {
+ return getWorkflow(new QName(XBayaConstants.LEAD_NS, name));
+ }
+
+ public void main() {
+
+ XBayaConfiguration config = new XBayaConfiguration();
+ config.setMyProxyServer("myproxy.teragrid.org");
+ config.setMyProxyUsername("USER");
+ config.setMyProxyPassphrase("PASSWORD");
+
+ new XBayaEngine(config);
+ }
+}
\ 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/registrybrowser/nodes/AbstractAiravataTreeNode.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/AbstractAiravataTreeNode.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/AbstractAiravataTreeNode.java
new file mode 100644
index 0000000..9203e01
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/AbstractAiravataTreeNode.java
@@ -0,0 +1,255 @@
+/*
+ *
+ * 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.Color;
+import java.awt.Component;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+
+import javax.swing.Icon;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JTree;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
+
+//import org.apache.airavata.registry.api.AiravataRegistry2;
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.xbaya.XBayaEngine;
+import org.apache.airavata.xbaya.ui.actions.AbstractBrowserActionItem;
+import org.apache.airavata.xbaya.ui.actions.registry.browser.RefreshAction;
+
+public abstract class AbstractAiravataTreeNode implements TreeNode {
+
+ private TreeNode parent;
+ private Color backgroundSelectionColor;
+ private DefaultTreeCellRenderer defaultCellRenderer = new DefaultTreeCellRenderer();
+ private List<TreeNode> children;
+
+ public AbstractAiravataTreeNode(TreeNode parent) {
+ setParent(parent);
+ }
+
+ protected XBayaEngine getXBayaEngine(){
+ TreeNode root=getRootNode();
+ if (root instanceof RegistryNode){
+ return ((RegistryNode)root).getEngine();
+ }
+ return null;
+ }
+
+ @SuppressWarnings("rawtypes")
+ @Override
+ public Enumeration children() {
+ this.children = listOfChildren();
+ Collections.enumeration(children);
+ return Collections.enumeration(children);
+ }
+
+ protected abstract List<TreeNode> getChildren();
+
+ private List<TreeNode> listOfChildren() {
+ children = (children == null) ? getChildren() : children;
+ return children;
+ }
+
+ @Override
+ public boolean getAllowsChildren() {
+ return listOfChildren().size() > 0;
+ }
+
+ @Override
+ public TreeNode getChildAt(int index) {
+ return listOfChildren().get(index);
+ }
+
+ @Override
+ public int getChildCount() {
+ return listOfChildren().size();
+ }
+
+ @Override
+ public int getIndex(TreeNode node) {
+ return listOfChildren().indexOf(node);
+ }
+
+ @Override
+ public TreeNode getParent() {
+ return parent;
+ }
+
+ @Override
+ public boolean isLeaf() {
+ return listOfChildren().size() == 0;
+ }
+
+ public void setParent(TreeNode parent) {
+ this.parent = parent;
+ }
+
+ public abstract String getCaption(boolean selected, boolean expanded, boolean leaf, boolean hasFocus);
+
+ public abstract Icon getIcon(boolean selected, boolean expanded, boolean leaf, boolean hasFocus);
+
+ public void setBackgroundSelectionColor(Color c) {
+ backgroundSelectionColor = c;
+ }
+
+ public Color getBackgroundSelectionColor() {
+ return backgroundSelectionColor;
+ }
+
+ public Component getNodeComponent(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) {
+ return null;
+ }
+
+ public Component getNodeComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf,
+ int row, boolean hasFocus) {
+ Component nodeComponent = getNodeComponent(selected, expanded, leaf, hasFocus);
+ if (nodeComponent == null) {
+ nodeComponent = getDefaultCellRenderer().getTreeCellRendererComponent(tree, value, selected, expanded,
+ leaf, row, hasFocus);
+ if (nodeComponent instanceof JLabel) {
+ JLabel lbl = (JLabel) nodeComponent;
+ lbl.setText(getCaption(selected, expanded, leaf, hasFocus));
+ lbl.setIcon(getIcon(selected, expanded, leaf, hasFocus));
+ }
+ }
+ return nodeComponent;
+ }
+
+ protected DefaultTreeCellRenderer getDefaultCellRenderer() {
+ return defaultCellRenderer;
+ }
+
+ protected List<TreeNode> getTreeNodeList(Object[] list, TreeNode parent) {
+ List<TreeNode> nodes = new ArrayList<TreeNode>();
+ for (Object o : list) {
+ nodes.add(AiravataTreeNodeFactory.getTreeNode(o, parent));
+ }
+ return nodes;
+ }
+
+ protected List<TreeNode> emptyList() {
+ return new ArrayList<TreeNode>();
+ }
+
+ public void refresh() {
+ this.children = null;
+ }
+
+ public abstract List<String> getSupportedActions();
+
+ public String getDefaultAction() {
+ return null;
+ }
+
+ public boolean isActionSupported(AbstractBrowserActionItem action) {
+ return getSupportedActions().contains(action.getID());
+ }
+
+ public boolean triggerAction(JTree tree, String action) throws Exception {
+ return triggerAction(tree, action, false);
+ }
+
+ public boolean triggerAction(JTree tree, String action, boolean force) throws Exception {
+ if (action.equals(RefreshAction.ID)) {
+ refresh();
+ ((DefaultTreeModel) tree.getModel()).reload(this);
+ return true;
+ }
+ return false;
+ }
+
+ protected TreeNode getRootNode() {
+ TreeNode rootNode = this;
+ while (rootNode.getParent() != null) {
+ rootNode = rootNode.getParent();
+ }
+ return rootNode;
+ }
+
+ public AiravataAPI getRegistry() {
+ TreeNode rootNode = getRootNode();
+ if (rootNode instanceof RegistryNode) {
+ return ((RegistryNode) rootNode).getRegistry();
+ }
+ return null;
+ }
+
+ protected boolean askQuestion(String title, String question) {
+ return JOptionPane.showConfirmDialog(null, question, title, JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION;
+ }
+
+ protected void reloadTreeNode(JTree tree, TreeNode node) {
+ TreePath selectionPath = tree.getSelectionPath();
+ ((DefaultTreeModel) tree.getModel()).nodeChanged(node);
+ ((DefaultTreeModel) tree.getModel()).reload(node);
+ tree.expandPath(selectionPath);
+ }
+
+ public abstract String getActionCaption(AbstractBrowserActionItem action);
+
+ public abstract Icon getActionIcon(AbstractBrowserActionItem action);
+
+ public abstract String getActionDescription(AbstractBrowserActionItem action);
+
+ protected String wrapAsHtml(String...data){
+ String result="<html>";
+ for (String item : data) {
+ result+=item;
+ }
+ result+="</html>";
+ return result;
+ }
+
+ public String createHTMLUrlTaggedString(String value) {
+ String urledString = "";
+ int lastIndex=0,index=0;
+ while(index!=-1){
+ index=value.toLowerCase().indexOf("://",lastIndex);
+ if (index!=-1){
+ int beginIndex=value.lastIndexOf(" ",index);
+ urledString+=value.substring(lastIndex,beginIndex+1);
+ int endIndex=value.indexOf(" ",index);
+ if (beginIndex==-1){
+ beginIndex=0;
+ }else{
+ beginIndex++;
+ }
+ if (endIndex==-1){
+ endIndex=value.length();
+ }
+ String url=value.substring(beginIndex, endIndex);
+ urledString+="<a href='"+url+"'>"+url+"</a>";
+ lastIndex=endIndex;
+ }
+ }
+ urledString+=value.substring(lastIndex, value.length());
+ return urledString;
+ }
+}
http://git-wip-us.apache.org/repos/asf/airavata/blob/9c47eec8/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/AiravataConfigurationsNode.java
----------------------------------------------------------------------
diff --git a/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/AiravataConfigurationsNode.java b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/AiravataConfigurationsNode.java
new file mode 100644
index 0000000..6a3bf87
--- /dev/null
+++ b/modules/xbaya-gui/src/main/java/org/apache/airavata/xbaya/registrybrowser/nodes/AiravataConfigurationsNode.java
@@ -0,0 +1,94 @@
+/*
+ *
+ * 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.tree.TreeNode;
+
+import org.apache.airavata.xbaya.model.registrybrowser.AiravataConfigurations;
+import org.apache.airavata.xbaya.model.registrybrowser.EventingServiceURLs;
+import org.apache.airavata.xbaya.model.registrybrowser.GFacURLs;
+import org.apache.airavata.xbaya.model.registrybrowser.InterpreterServiceURLs;
+import org.apache.airavata.xbaya.model.registrybrowser.MessageBoxURLs;
+import org.apache.airavata.xbaya.ui.actions.AbstractBrowserActionItem;
+import org.apache.airavata.xbaya.ui.actions.registry.browser.RefreshAction;
+
+public class AiravataConfigurationsNode extends AbstractAiravataTreeNode {
+ private AiravataConfigurations airavataConfigurations;
+
+ public AiravataConfigurationsNode(AiravataConfigurations airavataConfigurations, TreeNode parent) {
+ super(parent);
+ setAiravataConfigurations(airavataConfigurations);
+ }
+
+ @Override
+ protected List<TreeNode> getChildren() {
+ List<Object> children=new ArrayList<Object>();
+// children.add(new GFacURLs(getRegistry()));
+ children.add(new InterpreterServiceURLs(getRegistry()));
+ children.add(new MessageBoxURLs(getRegistry()));
+ children.add(new EventingServiceURLs(getRegistry()));
+ return getTreeNodeList(children.toArray(), this);
+ }
+
+ @Override
+ public String getCaption(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) {
+ return "Airavata Configuration";
+ }
+
+ @Override
+ public Icon getIcon(boolean selected, boolean expanded, boolean leaf, boolean hasFocus) {
+ return JCRBrowserIcons.AIRAVATA_CONFIG_ICON;
+ }
+
+ @Override
+ public List<String> getSupportedActions() {
+ return Arrays.asList(RefreshAction.ID);
+ }
+
+ @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 AiravataConfigurations getAiravataConfigurations() {
+ return airavataConfigurations;
+ }
+
+ public void setAiravataConfigurations(AiravataConfigurations airavataConfigurations) {
+ this.airavataConfigurations = airavataConfigurations;
+ }
+}