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; + } + } }
