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:08 UTC

[20/46] incubator-taverna-plugin-gis git commit: Improve GisServiceDialog

Improve GisServiceDialog

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/03f59647
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-gis/tree/03f59647
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-gis/diff/03f59647

Branch: refs/heads/taverna2
Commit: 03f596472f3c3119b6a96a8128d9f38e9a7ceedd
Parents: bf305ea
Author: edikaradumi <ed...@gmail.com>
Authored: Tue Aug 2 22:43:21 2016 +0100
Committer: edikaradumi <ed...@gmail.com>
Committed: Tue Aug 2 22:43:21 2016 +0100

----------------------------------------------------------------------
 .../ui/serviceprovider/AddGisServiceDialog.java | 233 ++++++++++++++++---
 1 file changed, 197 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-plugin-gis/blob/03f59647/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/AddGisServiceDialog.java
----------------------------------------------------------------------
diff --git a/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/AddGisServiceDialog.java b/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/AddGisServiceDialog.java
index e8e9c5c..63eccf7 100644
--- a/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/AddGisServiceDialog.java
+++ b/apache-taverna-plugin-gis-activity-ui/src/main/java/org/apache/taverna/gis/ui/serviceprovider/AddGisServiceDialog.java
@@ -10,10 +10,17 @@ import java.awt.Insets;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
+import java.io.IOException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
 
 import javax.swing.BorderFactory;
 import javax.swing.JButton;
 import javax.swing.JLabel;
+import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTable;
@@ -27,6 +34,10 @@ import javax.swing.event.DocumentListener;
 import javax.swing.table.DefaultTableModel;
 import javax.swing.table.TableRowSorter;
 
+import org.apache.log4j.Logger;
+import org.apache.taverna.gis.client.GisClientFactory;
+import org.apache.taverna.gis.client.IGisClient;
+
 import net.sf.taverna.t2.workbench.helper.HelpEnabledDialog;
 
 @SuppressWarnings("serial")
@@ -36,10 +47,11 @@ public class AddGisServiceDialog extends HelpEnabledDialog {
 	private TableRowSorter<DefaultTableModel> sorter;
 	private JFilterTable processesTable;
 	
+	private Logger logger = Logger.getLogger(AddGisServiceDialog.class);
+	
 	public AddGisServiceDialog(Frame frame) {
 		// null will call MainWindow.getMainWindow()
-		super(frame, "Add WPS service", true, null); // create a non-modal
-														// dialog
+		super(frame, "Add WPS service", true, null); // create a non-modal dialog
 		initComponents();
 	}
 
@@ -134,6 +146,22 @@ public class AddGisServiceDialog extends HelpEnabledDialog {
 		gbc.anchor = GridBagConstraints.EAST;
 		gbc.insets = new Insets(0, 10, 5, 5);
 
+		serviceLocationButton.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent evt) {
+				
+				String url = serviceLocationField.getText();
+				
+				url = url.trim();
+				
+				serviceLocationField.setText(url);
+				
+				if (isValidURL(url))
+				{
+					setProcessTableData(url);
+				}
+			}
+		});
+		
 		servicePanel.add(serviceLocationButton, gbc);
 	}
 
@@ -214,36 +242,8 @@ public class AddGisServiceDialog extends HelpEnabledDialog {
 
 		// Add Processes List
 
-		// TODO: Get processes from GWS
-
-		Object[] columnNames = { "", "Process" };
-		Object[][] data = { { false, "Checkbox1" }, { true, "Checkbox2" }, { true, "Checkbox3" },
-				{ false, "Checkbox4" }, { true, "Checkbox5" }, { true, "Checkbox6" }, { false, "Checkbox7" },
-				{ true, "Checkbox8" }, { true, "Checkbox9" }, { false, "Checkbox10" }, { true, "Checkbox11" },
-				{ true, "Checkbox12" } };
-
-		DefaultTableModel model = new DefaultTableModel(data, columnNames) {
-
-			@Override
-			public boolean isCellEditable(int row, int column) {
-				// Only the first column
-				return column == 0;
-			}
-
-		};
-
-		sorter = new TableRowSorter<DefaultTableModel>(model);
-
-		processesTable = new JFilterTable(model);
-		processesTable.setRowSorter(sorter);
-
-		processesTable.getColumnModel().getColumn(0).setPreferredWidth(20);
-		processesTable.getColumnModel().getColumn(1).setPreferredWidth(250);
-
-		processesTable.setPreferredScrollableViewportSize(new Dimension(300, 100));
-		processesTable.setFillsViewportHeight(true);
-		processesTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-
+		initProcessesTable();
+		
 		JScrollPane scrollPane = new JScrollPane(processesTable);
 
 		gbc.weighty = 1;
@@ -278,7 +278,7 @@ public class AddGisServiceDialog extends HelpEnabledDialog {
 		final JButton cancelServiceButton = new JButton("Cancel");
 		cancelServiceButton.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent evt) {
-				// TODO: Implement dispose
+				closeDialog();
 			}
 		});
 
@@ -291,18 +291,135 @@ public class AddGisServiceDialog extends HelpEnabledDialog {
 		addServiceButton.setMaximumSize(cancelServiceButton.getSize());
 
 	}
+	
+	private void initProcessesTable()
+	{
+		// setup columns
+		Vector<String> columnNames = new Vector<String>();
+		columnNames.addElement(""); 
+		columnNames.addElement("Processes");
+		
+		Vector<ProcessTableRow> data = null;
+
+		DefaultTableModel model = new DefaultTableModel(data, columnNames) {
+
+			@Override
+			public boolean isCellEditable(int row, int column) {
+				// Only the first column
+				return column == 0;
+			}
+
+		};
+
+		sorter = new TableRowSorter<DefaultTableModel>(model);
+
+		processesTable = new JFilterTable(model);
+		processesTable.setRowSorter(sorter);
+
+		processesTable.getColumnModel().getColumn(0).setPreferredWidth(20);
+		processesTable.getColumnModel().getColumn(1).setPreferredWidth(250);
+
+		processesTable.setPreferredScrollableViewportSize(new Dimension(300, 100));
+		processesTable.setFillsViewportHeight(true);
+		processesTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+		
+	}
 
+	private void setProcessTableData(String serviceURL)
+	{
+		DefaultTableModel model = (DefaultTableModel) processesTable.getModel();
+		
+		// discard existing rows
+		model.setRowCount(0);
+
+		List<ProcessTableRow> data = getServiceProcesses(serviceURL);
+		
+		for(ProcessTableRow iterator : data)
+		{
+			Object[] newRow = { iterator.isChecked(), iterator.getProcessID() };
+			model.addRow(newRow);
+		}
+		
+		model.fireTableDataChanged();
+		
+	}
+	
+	private List<ProcessTableRow> getServiceProcesses(String serviceURL)
+	{
+		List<ProcessTableRow> result = new ArrayList<ProcessTableRow>();
+		
+		IGisClient gisClient = GisClientFactory.getInstance().getGisClient(serviceURL);
+		
+		List<String> servicesList = null;
+		
+		try {
+			servicesList = gisClient.getProcessList();
+		} catch (Exception ex) {
+			JOptionPane.showMessageDialog(null,
+					"Could not read the service definition from "
+							+ serviceLocationField.getText() + ":\n" + ex,
+					"Could not add service service",
+					JOptionPane.ERROR_MESSAGE);
+
+			logger.error(
+					"Failed to list GWS processes for service: "
+							+ serviceLocationField.getText(), ex);
+		}
+		
+		for(String process : servicesList)
+		{
+			result.add(new ProcessTableRow(true, process));
+		}
+		
+		return result;
+		
+	}
+	
 	private void checkAllProcesses(boolean value) {
 		for (int i = 0; i < processesTable.getRowCount(); i++)
 			processesTable.getModel().setValueAt(value, i, 0);
-
 	}
 
 	private void addPressed() {
-		// TODO Auto-generated method stub
+		final String serviceURL = serviceLocationField.getText().trim();
+		new Thread("Adding Service " + serviceURL) {
+			public void run() {
+				try {
+					
+					URL url = new URL(serviceURL);
+					URLConnection connection = url.openConnection();
+					
+					try {
+						connection.connect(); // if this does not fail - add the service
+					} finally {
+						try {
+							connection.getInputStream().close();
+						} catch (IOException ex) {
+						}
+					}
+					
+				} catch (Exception ex) { // anything failed
+					JOptionPane.showMessageDialog(null,
+							"Could not read the service definition from "
+									+ serviceLocationField.getText() + ":\n" + ex,
+							"Could not add service service",
+							JOptionPane.ERROR_MESSAGE);
+
+					logger.error(
+							"Failed to list GWS processes for service: "
+									+ serviceLocationField.getText(), ex);
+				}
+			};
+		}.start();
+		closeDialog();
 
 	}
 
+	private void closeDialog() {
+		setVisible(false);
+		dispose();
+	}
+	
 	private JTextField createFilterTextField() {
 		final JTextField field = new JTextField();
 
@@ -343,6 +460,22 @@ public class AddGisServiceDialog extends HelpEnabledDialog {
 
 	}
 
+	private boolean isValidURL(String url)
+	{
+		
+		boolean result = true;
+		
+		url = url.trim();
+		
+		if (url.length()<=0)
+			return false;
+		
+		// other url checks
+		
+		return result;
+		
+	}
+	
 	private JButton createUrlButton(String buttonText) {
 		JButton button = new JButton();
 		button.setText("<HTML><FONT color=\"#000099\"><U>" + buttonText + "</U></FONT></HTML>");
@@ -354,7 +487,6 @@ public class AddGisServiceDialog extends HelpEnabledDialog {
 		return button;
 	}
 
-	@SuppressWarnings("serial")
 	public class JFilterTable extends JTable {
 
 		public JFilterTable(DefaultTableModel model) {
@@ -374,5 +506,34 @@ public class AddGisServiceDialog extends HelpEnabledDialog {
 			}
 		}
 	};
+	
+	public class ProcessTableRow {
+		private boolean isChecked;
+		private String processID;
+		
+		public ProcessTableRow()
+		{
+			
+		}
+		
+		public ProcessTableRow(boolean isChecked, String processID)
+		{
+			this.isChecked = isChecked;
+			this.processID = processID;
+		}
+		
+		public boolean isChecked() {
+			return isChecked;
+		}
+		public void setChecked(boolean isChecked) {
+			this.isChecked = isChecked;
+		}
+		public String getProcessID() {
+			return processID;
+		}
+		public void setProcessID(String processID) {
+			this.processID = processID;
+		}
+	}
 
 }