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 <[email protected]>
Authored: Tue Aug 2 22:43:21 2016 +0100
Committer: edikaradumi <[email protected]>
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;
+               }
+       }
 
 }

Reply via email to