diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/ExperimentList.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/ExperimentList.java index 1a8d1f4884de6fbff1613a891fc1ab97b7dadfa8..65789f2d2f344561418d921337e777deeb766abf 100644 --- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/ExperimentList.java +++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/ExperimentList.java @@ -226,13 +226,21 @@ class ExperimentList extends JFrame JPanel selectPanel = new JPanel(new FlowLayout()); topPanel.add(selectPanel, BorderLayout.SOUTH); - final JButton submitSelectionBtn = new JButton("select experiments and click the button to import"); - selectPanel.add(submitSelectionBtn); - submitSelectionBtn.setVisible(false); + final JButton importExperimentBtn = new JButton("import selected experiments"); + selectPanel.add(importExperimentBtn); + importExperimentBtn.setVisible(false); - final JButton submitSelectionStartExpBtn = new JButton("select experiments and click the button to import and start"); - selectPanel.add(submitSelectionStartExpBtn); - submitSelectionStartExpBtn.setVisible(false); + final JButton importAndStartExperimentBtn = new JButton("import and start selected experiments"); + selectPanel.add(importAndStartExperimentBtn); + importAndStartExperimentBtn.setVisible(false); + + final JButton startExperimentBtn = new JButton("start selected experiments"); + selectPanel.add(startExperimentBtn); + startExperimentBtn.setVisible(false); + + final JButton stopExperimentBtn = new JButton("stop selected experiments"); + selectPanel.add(stopExperimentBtn); + stopExperimentBtn.setVisible(false); submitDatesBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -240,8 +248,10 @@ class ExperimentList extends JFrame try { entryLabel.setVisible(true); submitDatesBtn.setVisible(true); - submitSelectionBtn.setVisible(true); - submitSelectionStartExpBtn.setVisible(true); + importExperimentBtn.setVisible(true); + importAndStartExperimentBtn.setVisible(true); + stopExperimentBtn.setVisible(true); + startExperimentBtn.setVisible(true); DateLabelFormatter df = new DateLabelFormatter(); final Date startSelectedDate = (Date) startDatePicker.getModel().getValue(); @@ -269,7 +279,7 @@ class ExperimentList extends JFrame } }); - submitSelectionBtn.addActionListener(new ActionListener() { + importExperimentBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int[] selection = table.getSelectedRows(); @@ -287,30 +297,111 @@ class ExperimentList extends JFrame } }); - submitSelectionStartExpBtn.addActionListener(new ActionListener() { + importAndStartExperimentBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int[] selection = table.getSelectedRows(); -// if ((selection.length > 0) && (dconnection.init() == ServiceConnectionStatus.SUCCESS) && (dconnection.login() == ServiceConnectionStatus.SUCCESS)) { - for (int i = 0; i < selection.length; i++) { - String experimentName = EXPERIMENT_PREFIX+(String)table.getModel().getValueAt(selection[i], Column.NAME.ordinal()); - String description = (String)table.getModel().getValueAt(selection[i], Column.DESCRIPTION.ordinal()); - if (sconnection.addExperiment(experimentName, description) != ServiceConnection.ServiceConnectionStatus.SUCCESS) { - continue; - } - addRole((String)table.getModel().getValueAt(selection[i], Column.MANAGER.ordinal()), experimentName, Role.MANAGER); - // addRole((String)table.getModel().getValueAt(selection[i], Column.PI.ordinal()), experimentName, Role.PI); - addRole((String)table.getModel().getValueAt(selection[i], Column.USER.ordinal()), experimentName, Role.USER); - if (sconnection.startExperiment(experimentName) == ServiceConnection.ServiceConnectionStatus.SUCCESS) { - dconnection.startDaq(experimentName, experimentName); - } else { - System.out.println("didn't start"); - } + if (selection.length > 0) { + if (dconnection.isSessionValid()) { + importAndStartExperiments(selection, dconnection); + } + else if (dconnection.isInitialized()) { + JOptionPane.showMessageDialog(null,"Session expired. Restart the tools.", + "Info",JOptionPane.WARNING_MESSAGE); + } + else if ((dconnection.init() == ServiceConnection.ServiceConnectionStatus.SUCCESS) + && (dconnection.login() == ServiceConnection.ServiceConnectionStatus.SUCCESS)) { + importAndStartExperiments(selection, dconnection); + } else { + JOptionPane.showMessageDialog(null,"Check Data acquisition service configuration, or invalid credentials.", + "Info",JOptionPane.WARNING_MESSAGE); } -// } - table.clearSelection(); + } + } + }); + + startExperimentBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + int[] selection = table.getSelectedRows(); + if (selection.length > 0) { + if (dconnection.isSessionValid()) { + startExperiments(selection, dconnection); + } + else if (dconnection.isInitialized()) { + JOptionPane.showMessageDialog(null,"Session expired. Restart the tools.", + "Info",JOptionPane.WARNING_MESSAGE); + } + else if ((dconnection.init() == ServiceConnection.ServiceConnectionStatus.SUCCESS) + && (dconnection.login() == ServiceConnection.ServiceConnectionStatus.SUCCESS)) { + startExperiments(selection, dconnection); + } else { + JOptionPane.showMessageDialog(null,"Check Data acquisition service configuration, or invalid credentials.", + "Info",JOptionPane.WARNING_MESSAGE); + } + } } }); + + stopExperimentBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + int[] selection = table.getSelectedRows(); + if (selection.length > 0) { + if (dconnection.isSessionValid()) { + stopExperiments(selection, dconnection); + } + else if (dconnection.isInitialized()) { + JOptionPane.showMessageDialog(null,"Session expired. Restart the tools.", + "Info",JOptionPane.WARNING_MESSAGE); + } + else if ((dconnection.init() == ServiceConnection.ServiceConnectionStatus.SUCCESS) + && (dconnection.login() == ServiceConnection.ServiceConnectionStatus.SUCCESS)) { + stopExperiments(selection, dconnection); + } else { + JOptionPane.showMessageDialog(null,"Check Data acquisition service configuration, or invalid credentials.", + "Info",JOptionPane.WARNING_MESSAGE); + } + } + } + }); + + } + + private void importAndStartExperiments(int[] selection, DaqServiceConnection dconnection) { + for (int i = 0; i < selection.length; i++) { + String experimentName = EXPERIMENT_PREFIX+(String)table.getModel().getValueAt(selection[i], Column.NAME.ordinal()); + String description = (String)table.getModel().getValueAt(selection[i], Column.DESCRIPTION.ordinal()); + if (sconnection.addExperiment(experimentName, description) != ServiceConnection.ServiceConnectionStatus.SUCCESS) { + continue; + } + addRole((String)table.getModel().getValueAt(selection[i], Column.MANAGER.ordinal()), experimentName, Role.MANAGER); + // addRole((String)table.getModel().getValueAt(selection[i], Column.PI.ordinal()), experimentName, Role.PI); + addRole((String)table.getModel().getValueAt(selection[i], Column.USER.ordinal()), experimentName, Role.USER); + if (sconnection.startExperiment(experimentName) == ServiceConnection.ServiceConnectionStatus.SUCCESS) { + dconnection.startDaq(experimentName); + } else { + JOptionPane.showMessageDialog(null,"The experiment "+ experimentName +" did not start", + "Info",JOptionPane.WARNING_MESSAGE); + } + } + table.clearSelection(); + } + + private void startExperiments(int[] selection, DaqServiceConnection dconnection) { + for (int i = 0; i < selection.length; i++) { + String experimentName = EXPERIMENT_PREFIX+(String)table.getModel().getValueAt(selection[i], Column.NAME.ordinal()); + dconnection.startDaq(experimentName); + } + table.clearSelection(); + } + + private void stopExperiments(int[] selection, DaqServiceConnection dconnection) { + for (int i = 0; i < selection.length; i++) { + String experimentName = EXPERIMENT_PREFIX+(String)table.getModel().getValueAt(selection[i], Column.NAME.ordinal()); + dconnection.stopDaq(experimentName); + } + table.clearSelection(); } private void addRole(String userList, String experimentName, Role role) { diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/Gui.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/Gui.java index 300f340a603486dcbc1d1b86bc331813cbcf750e..14a68ead15901fb0e0c31dd97f5ea25380083079 100644 --- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/Gui.java +++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/Gui.java @@ -20,7 +20,6 @@ class Gui { public static void main(String arg[]) { - String configFile = arg[0]; final Properties configProperties = new Properties(); setConfig(configFile, configProperties); @@ -46,7 +45,7 @@ class Gui if (sconnection.init(configProperties.getProperty("dm.storageServ.connection")) != ServiceConnection.ServiceConnectionStatus.SUCCESS) { System.exit(0); } - DaqServiceConnection dconnection = new DaqServiceConnection(configProperties.getProperty("dm.daqServ.connection")); + DaqServiceConnection dconnection = new DaqServiceConnection(configProperties); try { LoginWindow frame = new LoginWindow(sconnection, oconnection, dconnection); diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/DaqServiceConnection.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/DaqServiceConnection.java index 0c4da47e023b2d4260d87e40656c3f30c815eb1f..bc62267f1a2bc0357b5ffa3856a4060b6cd50751 100644 --- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/DaqServiceConnection.java +++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/DaqServiceConnection.java @@ -1,7 +1,11 @@ package gov.anl.dm.esafsync.serviceconn; +import java.io.File; import java.util.HashMap; import java.util.Map; +import java.util.Properties; + +import javax.swing.JOptionPane; public class DaqServiceConnection extends ServiceConnection{ @@ -12,23 +16,56 @@ public class DaqServiceConnection extends ServiceConnection{ class StorageServUrl { static final String START_DAQ = "/experiments/startDaq"; + static final String STOP_DAQ = "/experiments/stopDaq"; } - private final String url; + private final Properties config; - public DaqServiceConnection(String url) { - this.url = url; + public DaqServiceConnection(Properties configProperties) { + this.config = configProperties; } public final int init() { + String url = config.getProperty("dm.daqServ.connection"); return super.init(url); } - public void startDaq(String experimentName, String directory) { + public void startDaq(String experimentName) { + String dataDir = config.getProperty("dm.daq.datadir"); + String directory; + if (dataDir.endsWith("/")) { + directory = dataDir + experimentName; + } else { + directory = dataDir + "/" + experimentName; + } + Map<String, String> data = new HashMap<>(); data.put(Keyword.DAQ_EXPERIMENT_NAME, experimentName); data.put(Keyword.DAQ_DATA_DIRECTORY, directory); - invokeSessionPostRequest(StorageServUrl.START_DAQ, data); + + if ((new File(dataDir)).exists()) { + if ((new File(directory)).exists()) { + invokeSessionPostRequest(StorageServUrl.START_DAQ, data); + } else if (new File(directory).mkdir()) { + invokeSessionPostRequest(StorageServUrl.START_DAQ, data); + } else { + JOptionPane.showMessageDialog(null,"Can't start experiment " + experimentName + " in DAQ service. The experiment directory can't be created.", + "Warning",JOptionPane.WARNING_MESSAGE); + } + } else { + if ((new File(dataDir).mkdir()) && (new File(directory).mkdir())) { + invokeSessionPostRequest(StorageServUrl.START_DAQ, data); + } else { + JOptionPane.showMessageDialog(null,"Can't start experiment " + experimentName + " in DAQ service. The configured data directory does not exist and can't be created.", + "Error",JOptionPane.ERROR_MESSAGE); + } + } + } + + public void stopDaq(String experimentName) { + Map<String, String> data = new HashMap<>(); + data.put(Keyword.DAQ_EXPERIMENT_NAME, encode(experimentName)); + invokeSessionPostRequest(StorageServUrl.STOP_DAQ, data); } } diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/ServiceConnection.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/ServiceConnection.java index db8fa154a09eaa06b4d5ad8d1271d1d2386220a3..c9f10ada1e339ea3f5f477120feab265bbc7f425 100644 --- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/ServiceConnection.java +++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/ServiceConnection.java @@ -98,6 +98,7 @@ public class ServiceConnection { protected URL serviceUrl; private Session session = new Session(); private Login login; + private boolean initialized = false; public final int init(String serviceUrl) { if (serviceUrl == null) { @@ -120,8 +121,17 @@ public class ServiceConnection { HttpsURLConnection.setDefaultSSLSocketFactory(new NoServerVerificationSSLSocketFactory()); + initialized = true; return ServiceConnectionStatus.SUCCESS; } + + public boolean isInitialized() { + return initialized; + } + + public boolean isSessionValid() { + return session.isValid(); + } private URL getServiceUrl() { return serviceUrl; @@ -512,7 +522,6 @@ public class ServiceConnection { int resp = sendPostData(loginData, connection); if (resp != ServiceConnectionStatus.SUCCESS) { - System.out.println("here a"); return resp; } resp = checkHttpResponse(connection); diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/Session.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/Session.java index 3934f8df0dd9e9034b3a8b156c34110ddd901091..caa4dd50308be59554d081796bac222e24dad91a 100644 --- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/Session.java +++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/Session.java @@ -87,6 +87,18 @@ public class Session implements Serializable { } return cookie; } + + public boolean isValid() { + if (cookie == null) { + return false; + } else { + HttpCookie httpCookie = HttpCookie.parse(cookie).get(0); + if (httpCookie.hasExpired()) { + return false; + } + } + return true; + } public Role getRole() { return role;