You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2016/08/12 13:13:14 UTC

[26/46] incubator-taverna-plugin-gis git commit: Improve service discovery

Improve service discovery


Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-gis/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-gis/commit/dafb2793
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-gis/tree/dafb2793
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-gis/diff/dafb2793

Branch: refs/heads/taverna2
Commit: dafb279336d3693e3d93eb86171d98d76f5dcf4f
Parents: cd049a2
Author: edikaradumi <ed...@gmail.com>
Authored: Wed Aug 3 05:35:40 2016 +0100
Committer: edikaradumi <ed...@gmail.com>
Committed: Wed Aug 3 05:35:40 2016 +0100

----------------------------------------------------------------------
 .../ui/serviceprovider/GisServiceProvider.java  | 193 ++++++++++---------
 .../GisServiceProviderConfig.java               |  23 ++-
 .../gis/client/impl/GisClientNorthImpl.java     |  55 +++---
 3 files changed, 154 insertions(+), 117 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-gis/blob/dafb2793/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceProvider.java
----------------------------------------------------------------------
diff --git a/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceProvider.java b/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceProvider.java
index e53cfec..e63f069 100644
--- a/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceProvider.java
+++ b/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceProvider.java
@@ -6,14 +6,15 @@ import java.util.Arrays;
 import java.util.List;
 
 import javax.swing.Icon;
+import javax.swing.JOptionPane;
 
+import org.apache.log4j.Logger;
 import org.apache.taverna.gis.client.*;
 import org.apache.taverna.gis.client.impl.TypeDescriptor;
 
 import net.sf.taverna.t2.servicedescriptions.AbstractConfigurableServiceProvider;
 import net.sf.taverna.t2.servicedescriptions.ConfigurableServiceProvider;
 import net.sf.taverna.t2.servicedescriptions.CustomizedConfigurePanelProvider;
-import net.sf.taverna.t2.servicedescriptions.ServiceDescription;
 import net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean;
 import net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean;
 
@@ -22,83 +23,100 @@ public class GisServiceProvider extends AbstractConfigurableServiceProvider<GisS
 		CustomizedConfigurePanelProvider<GisServiceProviderConfig> {
 
 	public GisServiceProvider() {
-		super(new GisServiceProviderConfig());
+		super(new GisServiceProviderConfig("", new ArrayList<String>()));
 	}
 
 	private static final URI providerId = URI
 			.create("http://cs.man.ac.uk/2016/service-provider/apache-taverna2-plugin-gis");
-
+	
+	private Logger logger = Logger.getLogger(AddGisServiceDialog.class);
+	
+	
 	/**
 	 * Do the actual search for services. Return using the callBack parameter.
 	 */
-	@SuppressWarnings("unchecked")
 	public void findServiceDescriptionsAsync(FindServiceDescriptionsCallBack callBack) {
 		// Use callback.status() for long-running searches
-		callBack.status("Resolving GIS services");
-
-		List<ServiceDescription> results = new ArrayList<ServiceDescription>();
-
-		GisServiceDesc service = new GisServiceDesc();
-		// Populate the service description bean
-		service.setOgcServiceUri(getConfiguration().getOgcServiceUri());
-		service.setProcessIdentifier(getConfiguration().getProcessIdentifier());
 
-		// TODO: Optional: set description (Set a better description
-		service.setDescription(getConfiguration().getProcessIdentifier());
+		URI serviceURI = serviceProviderConfig.getOgcServiceUri();
 
-		// Get input ports
+		callBack.status("Resolving service: " + serviceURI);
 		
+		List<GisServiceDesc> results = new ArrayList<GisServiceDesc>();
+
 		IGisClient gisServiceClient = GisClientFactory.getInstance().getGisClient(getConfiguration().getOgcServiceUri().toASCIIString());
 		 
+		List<String> processIdentifiers = serviceProviderConfig.getProcessIdentifiers();
+		
 		try {
 			
-			List<TypeDescriptor> inputList = gisServiceClient.getTaverna2InputPorts(getConfiguration().getProcessIdentifier());
-
-	        List<ActivityInputPortDefinitionBean> inputPortDefinitions = new ArrayList<ActivityInputPortDefinitionBean>();
-
-	        for (TypeDescriptor input : inputList) {
-	    		ActivityInputPortDefinitionBean newInputPort = new ActivityInputPortDefinitionBean();
-	    		newInputPort.setName(input.getName());
-	    		newInputPort.setDepth(input.getDepth());
-	    		newInputPort.setAllowsLiteralValues(input.isAllowLiteralValues());
-	    		newInputPort.setHandledReferenceSchemes(null);
-	    		newInputPort.setTranslatedElementType(input.getTranslatedElementType());
-	    		
-	    		inputPortDefinitions.add(newInputPort);
-	    		
-	        }
-	        
-	        service.setInputPortDefinitions(inputPortDefinitions);
-			
-	        
-	        // Get output ports
-	        
-	        List<TypeDescriptor> outputList = gisServiceClient.getTaverna2OutputPorts(getConfiguration().getProcessIdentifier());
-	        List<ActivityOutputPortDefinitionBean> outputPortDefinitions = new ArrayList<ActivityOutputPortDefinitionBean>();
-	        
-	        for( TypeDescriptor output : outputList )
-	        {
-	        	ActivityOutputPortDefinitionBean newOutputPort = new ActivityOutputPortDefinitionBean();
-	        	newOutputPort.setName(output.getName());
-	        	newOutputPort.setDepth(output.getDepth());
-	        	
-	        	outputPortDefinitions.add(newOutputPort);
-	        	
-	        }
+			for (String processID : processIdentifiers)
+			{
+				GisServiceDesc service = new GisServiceDesc();
+
+				// Populate the service description bean
+				service.setOgcServiceUri(getConfiguration().getOgcServiceUri());
+				service.setProcessIdentifier(processID);
 		
-	        service.setOutputPortDefinitions(outputPortDefinitions);
-	        
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+				// TODO: Optional: set description (Set a better description)
+				service.setDescription(processID);
+				
+				// Get input ports
+				List<TypeDescriptor> inputList = gisServiceClient.getTaverna2InputPorts(processID);
+
+		        List<ActivityInputPortDefinitionBean> inputPortDefinitions = new ArrayList<ActivityInputPortDefinitionBean>();
+
+		        for (TypeDescriptor input : inputList) {
+		    		ActivityInputPortDefinitionBean newInputPort = new ActivityInputPortDefinitionBean();
+		    		newInputPort.setName(input.getName());
+		    		newInputPort.setDepth(input.getDepth());
+		    		newInputPort.setAllowsLiteralValues(input.isAllowLiteralValues());
+		    		newInputPort.setHandledReferenceSchemes(null);
+		    		newInputPort.setTranslatedElementType(input.getTranslatedElementType());
+		    		
+		    		inputPortDefinitions.add(newInputPort);
+		    		
+		        }
+		        
+		        service.setInputPortDefinitions(inputPortDefinitions);
+				
+		        // Get output ports
+		        
+		        List<TypeDescriptor> outputList = gisServiceClient.getTaverna2OutputPorts(processID);
+		        List<ActivityOutputPortDefinitionBean> outputPortDefinitions = new ArrayList<ActivityOutputPortDefinitionBean>();
+		        
+		        for( TypeDescriptor output : outputList )
+		        {
+		        	ActivityOutputPortDefinitionBean newOutputPort = new ActivityOutputPortDefinitionBean();
+		        	newOutputPort.setName(output.getName());
+		        	newOutputPort.setDepth(output.getDepth());
+		        	
+		        	outputPortDefinitions.add(newOutputPort);
+		        	
+		        }
+			
+		        service.setOutputPortDefinitions(outputPortDefinitions);
+		        
+		        results.add(service);
+
+				// partialResults() can also be called several times from inside
+				// for-loop if the full search takes a long time
+				callBack.partialResults(results);
+				
+			}
+			
+		} catch (Exception ex) {
+			JOptionPane.showMessageDialog(null,
+					"Could not read the service definition from "
+							+ serviceURI + ":\n" + ex,
+					"Could not add service service",
+					JOptionPane.ERROR_MESSAGE);
+
+			logger.error(
+					"Failed to list GWS processes for service: "
+							+ serviceURI, ex);
 		}
         
-		results.add(service);
-
-		// partialResults() can also be called several times from inside
-		// for-loop if the full search takes a long time
-		callBack.partialResults(results);
-
 		// No more results will be coming
 		callBack.finished();
 	}
@@ -120,7 +138,7 @@ public class GisServiceProvider extends AbstractConfigurableServiceProvider<GisS
 
 	@Override
 	public String toString() {
-		return "Geospatial Web Services " + getConfiguration().getProcessIdentifier();
+		return "Geospatial Web Services " + getConfiguration().getOgcServiceUri();
 	}
 
 	public String getId() {
@@ -129,49 +147,52 @@ public class GisServiceProvider extends AbstractConfigurableServiceProvider<GisS
 
 	@Override
 	protected List<? extends Object> getIdentifyingData() {
-		return Arrays.asList(getConfiguration().getOgcServiceUri(), getConfiguration().getProcessIdentifier());
+		List<String> result = new ArrayList<String>();
+		
+		List<String> processIdentifiers = getConfiguration().getProcessIdentifiers();
+		
+		for (String processID : processIdentifiers)
+		{
+			result.add(getConfiguration().getOgcServiceUri() + processID);
+			
+		}
+		
+		//return Arrays.asList(getConfiguration().getOgcServiceUri(), getConfiguration().getProcessIdentifier());
+		//return Arrays.asList(getConfiguration().getOgcServiceUri());
+		return result;
+		
 	}
 
 
 	@Override
 	public List<GisServiceProviderConfig> getDefaultConfigurations(){
 		
-		GisServiceProviderConfig myConfig = new GisServiceProviderConfig();
+		List<GisServiceProviderConfig> myDefaultConfigs = new ArrayList<GisServiceProviderConfig>();
 		
-		myConfig.setOgcServiceUri(URI.create("http://localhost:8080/geoserver/ows"));
-		myConfig.setProcessIdentifier("gs:StringConcatWPS");
-		
-		return Arrays.asList(myConfig);
+		myDefaultConfigs.add(new GisServiceProviderConfig("http://localhost:8080/geoserver/ows", 
+				Arrays.asList("gs:StringConcatWPS")));
 		
+		return myDefaultConfigs;
 		
 	}
 
 	@Override
 	public void createCustomizedConfigurePanel(
-			net.sf.taverna.t2.servicedescriptions.CustomizedConfigurePanelProvider.CustomizedConfigureCallBack<GisServiceProviderConfig> callBack) {
+			final net.sf.taverna.t2.servicedescriptions.CustomizedConfigurePanelProvider.CustomizedConfigureCallBack<GisServiceProviderConfig> callBack) {
 
+		@SuppressWarnings("serial")
+		AddGisServiceDialog addGISServiceDialog = new AddGisServiceDialog(null) {
 
-		AddGisServiceDialog addGISServiceDialog = new AddGisServiceDialog(null);
+			@Override
+			protected void addRegistry(String serviceURL, List<String> processIdentifiers) {
+				GisServiceProviderConfig providerConfig = new GisServiceProviderConfig(serviceURL, processIdentifiers);					
+				callBack.newProviderConfiguration(providerConfig);
+				
+			}
+			
+		};
 
 		addGISServiceDialog.setVisible(true);
-//		
-//		
-//		// Possible choices for drop-down box
-//	    URI[] uris = new URI[3];
-//	    uris[0] = URI.create("http://example.com/serviceA");
-//	    uris[1] = URI.create("http://example.com/serviceB");
-//	    uris[2] = URI.create("http://example.com/serviceC");
-//	 
-//	    // Dialogue with drop-down
-//	    String message = "Choose the example service URI";
-//	    String title = "Which service?";
-//	    Object uri = JOptionPane.showInputDialog(null, message, title,
-//	            JOptionPane.PLAIN_MESSAGE, null, uris, uris[0]);
-//	 
-//	    // Return a new provider configuration
-//	    GisServiceProviderConfig config = new GisServiceProviderConfig();
-//	    config.setOgcServiceUri((URI) uri);
-//	    callBack.newProviderConfiguration(config);
 		
 	}
 	

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-gis/blob/dafb2793/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceProviderConfig.java
----------------------------------------------------------------------
diff --git a/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceProviderConfig.java b/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceProviderConfig.java
index 32cbfcb..ca85f87 100644
--- a/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceProviderConfig.java
+++ b/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/GisServiceProviderConfig.java
@@ -1,13 +1,24 @@
 package org.apache.taverna.gis.ui.serviceprovider;
 
 import java.net.URI;
+import java.util.Arrays;
+import java.util.List;
 
 import net.sf.taverna.t2.lang.beans.PropertyAnnotated;
 import net.sf.taverna.t2.lang.beans.PropertyAnnotation;
 
 public class GisServiceProviderConfig extends PropertyAnnotated {
-	private URI ogcServiceUri = URI.create("http://localhost:8080/geoserver/ows");
-	private String processIdentifier = "gs:StringConcatWPS";
+	private URI ogcServiceUri = URI.create("");
+	private List<String> processIdentifiers = Arrays.asList("");
+	
+	public GisServiceProviderConfig() {
+		
+	}
+	
+	public GisServiceProviderConfig(String serviceURL, List<String> processIdentifiers ) {
+		this.ogcServiceUri = URI.create(serviceURL);
+		this.processIdentifiers = processIdentifiers;
+	}
 	
 	@PropertyAnnotation(displayName="OGC Web Service URI", preferred=true)
 	public URI getOgcServiceUri() {
@@ -18,11 +29,11 @@ public class GisServiceProviderConfig extends PropertyAnnotated {
 	}
 	
 	@PropertyAnnotation(displayName="Process Identifier")
-	public String getProcessIdentifier() {
-		return processIdentifier;
+	public List<String> getProcessIdentifiers() {
+		return processIdentifiers;
 	}
-	public void setProcessIdentifier(String processIdentifier) {
-		this.processIdentifier = processIdentifier;
+	public void setProcessIdentifiers(List<String> processIdentifiers) {
+		this.processIdentifiers = processIdentifiers;
 	}
 	
 }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-gis/blob/dafb2793/apache-taverna-plugin-gis-client/src/main/java/org/apache/taverna/gis/client/impl/GisClientNorthImpl.java
----------------------------------------------------------------------
diff --git a/apache-taverna-plugin-gis-client/src/main/java/org/apache/taverna/gis/client/impl/GisClientNorthImpl.java b/apache-taverna-plugin-gis-client/src/main/java/org/apache/taverna/gis/client/impl/GisClientNorthImpl.java
index ed92332..84c85c3 100644
--- a/apache-taverna-plugin-gis-client/src/main/java/org/apache/taverna/gis/client/impl/GisClientNorthImpl.java
+++ b/apache-taverna-plugin-gis-client/src/main/java/org/apache/taverna/gis/client/impl/GisClientNorthImpl.java
@@ -27,25 +27,25 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 
+import org.apache.log4j.Logger;
 import org.apache.taverna.gis.client.IGisClient;
 import org.n52.wps.client.WPSClientException;
 import org.n52.wps.client.WPSClientSession;
 
-import com.google.common.util.concurrent.UncaughtExceptionHandlers;
-
 import net.opengis.ows.x11.LanguageStringType;
 import net.opengis.wps.x100.CapabilitiesDocument;
 import net.opengis.wps.x100.InputDescriptionType;
 import net.opengis.wps.x100.OutputDescriptionType;
 import net.opengis.wps.x100.ProcessBriefType;
 import net.opengis.wps.x100.ProcessDescriptionType;
+import net.opengis.wps.x100.ProcessDescriptionType.DataInputs;
 import net.opengis.wps.x100.WPSCapabilitiesType;
 
-// TODO: Change name to a more descriptive one like GisServiceParser
 public class GisClientNorthImpl implements IGisClient {
 
+	private Logger logger = Logger.getLogger(GisClientNorthImpl.class);
+	
 	private URI serviceURI = null;
-
 	private WPSClientSession wpsClient;
 	
 	public GisClientNorthImpl(String serviceURL) {
@@ -54,9 +54,8 @@ public class GisClientNorthImpl implements IGisClient {
 		
 		try {
 			wpsClient.connect(serviceURI.toString());
-		} catch (WPSClientException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+		} catch (WPSClientException ex) {
+			logger.error("Failed to connect to service: " + serviceURI, ex);
 		}
 		
 	}
@@ -83,15 +82,19 @@ public class GisClientNorthImpl implements IGisClient {
 		
 		try {
 			processDescription = wpsClient.getProcessDescription(serviceURI.toString(), processID);
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+		} catch (IOException ex) {
+			logger.error("Failed to list input ports for process: " + processID, ex);
 		}
 
 		if (processDescription==null)
-			return null;
+			return inputPorts;
+		
+		DataInputs dataInputs = processDescription.getDataInputs();
 		
-		InputDescriptionType[] inputList = processDescription.getDataInputs().getInputArray();
+		if (dataInputs == null)
+			return inputPorts;
+		
+		InputDescriptionType[] inputList = dataInputs.getInputArray();
 
 		for (InputDescriptionType input : inputList) {
 
@@ -113,13 +116,12 @@ public class GisClientNorthImpl implements IGisClient {
 		
 		try {
 			processDescription = wpsClient.getProcessDescription(serviceURI.toString(), processID);
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+		} catch (IOException ex) {
+			logger.error("Failed to list processe output port for process: " + processID, ex);
 		}
 
 		if (processDescription==null)
-			return null;
+			return outputPorts;
 		
 		OutputDescriptionType[] outputList = processDescription.getProcessOutputs().getOutputArray();
 
@@ -143,15 +145,19 @@ public class GisClientNorthImpl implements IGisClient {
 		
 		try {
 			processDescription = wpsClient.getProcessDescription(serviceURI.toString(), processID);
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+		} catch (IOException ex) {
+			logger.error("Failed to get process description for process: " + processID, ex);
 		}
 
 		if (processDescription==null)
-			return null;
+			return inputPorts;
 		
-		InputDescriptionType[] inputList = processDescription.getDataInputs().getInputArray();
+		DataInputs dataInputs = processDescription.getDataInputs();
+		
+		if (dataInputs == null)
+			return inputPorts;
+					
+		InputDescriptionType[] inputList = dataInputs.getInputArray();
 
 		for (InputDescriptionType input : inputList) {
 			TypeDescriptor myNewInputPort = new TypeDescriptor();
@@ -191,13 +197,12 @@ public class GisClientNorthImpl implements IGisClient {
 
 		try {
 			processDescription = wpsClient.getProcessDescription(serviceURI.toString(), processID);
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+		} catch (IOException ex) {
+			logger.error("Failed to list output ports for process: " + processID, ex);
 		}
 
 		if (processDescription == null)
-			return null;
+			return outputPorts;
 
 		OutputDescriptionType[] outputList = processDescription.getProcessOutputs().getOutputArray();