From 2aaef29da3e564c64af0db9ad6140881e8943934 Mon Sep 17 00:00:00 2001
From: "Barbara B. Frosik" <bfrosik@aps.anl.gov>
Date: Tue, 22 Sep 2015 23:07:17 +0000
Subject: [PATCH] modified to add another daq connection and modified dir
 structure

---
 .../gov/anl/dm/esafsync/ExperimentList.java   | 119 ++++++++++++------
 .../src/gov/anl/dm/esafsync/Gui.java          |  26 +++-
 .../src/gov/anl/dm/esafsync/LoginWindow.java  |  16 ++-
 .../gov/anl/dm/esafsync/OracleConnection.java |   1 +
 .../serviceconn/DaqServiceConnection.java     |  76 ++++++++++-
 .../serviceconn/ServiceConnection.java        |   3 +-
 .../serviceconn/StorageServiceConnection.java |   1 +
 7 files changed, 192 insertions(+), 50 deletions(-)

diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/ExperimentList.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/ExperimentList.java
index a1a0c9b4..c01f3dac 100644
--- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/ExperimentList.java
+++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/ExperimentList.java
@@ -9,7 +9,7 @@ import java.awt.Color;
 import java.awt.FlowLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-import java.sql.SQLException;
+import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -189,7 +189,7 @@ class ExperimentList extends JFrame
 	private ExperimentTableModel tableModel = null;
 	private	JScrollPane scrollPane;
 
-	ExperimentList(final String sector, final OracleConnection oconnection, final StorageServiceConnection sconnection, final DaqServiceConnection dconnection) {
+	ExperimentList(final String sector, final OracleConnection oconnection, final StorageServiceConnection sconnection, final DaqServiceConnection dconnection,  final DaqServiceConnection drconnection) {
 		this.sconnection = sconnection;
 		setTitle("Experiment Import"); 
 		setSize(1000, 500);
@@ -317,19 +317,11 @@ class ExperimentList extends JFrame
 			{
 				int[] selection = table.getSelectedRows();
 				if (selection.length > 0) {
-					if (dconnection.isSessionValid()) {
-						importAndStartExperiments(selection, dconnection);
-					} 
-					else if (dconnection.isInitialized()) {
+					if (dconnection.isSessionValid() && ((drconnection == null) || drconnection.isSessionValid())) {
+						importAndStartExperiments(selection, dconnection, drconnection);
+					}  else {
 						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);						
 					}
 				}
 			}
@@ -340,19 +332,11 @@ class ExperimentList extends JFrame
 			{
 				int[] selection = table.getSelectedRows();
 				if (selection.length > 0) {
-					if (dconnection.isSessionValid()) {
-						startExperiments(selection, dconnection);
-					} 
-					else if (dconnection.isInitialized()) {
+					if (dconnection.isSessionValid() && ((drconnection == null) || drconnection.isSessionValid())) {
+						startExperiments(selection, dconnection, drconnection);
+					}  else {
 						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);						
 					}
 				}
 			}
@@ -363,19 +347,11 @@ class ExperimentList extends JFrame
 			{
 				int[] selection = table.getSelectedRows();
 				if (selection.length > 0) {
-					if (dconnection.isSessionValid()) {
-						stopExperiments(selection, dconnection);
-					} 
-					else if (dconnection.isInitialized()) {
+					if (dconnection.isSessionValid() && ((drconnection == null) || drconnection.isSessionValid())) {
+						stopExperiments(selection, dconnection, drconnection);
+					}  else {
 						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);						
 					}
 				}
 			}
@@ -383,7 +359,7 @@ class ExperimentList extends JFrame
 
 	}
 
-	private void importAndStartExperiments(int[] selection, DaqServiceConnection dconnection) {
+	private void importAndStartExperiments(int[] selection, DaqServiceConnection dconnection, DaqServiceConnection drconnection) {
 		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());
@@ -396,7 +372,17 @@ class ExperimentList extends JFrame
 			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);						
+				// convert date
+				String startDateDir;
+				try {
+					startDateDir = convertDate2Dir(startDate);
+				} catch (ParseException e) {
+					startDateDir = startDate;
+				}
+				dconnection.startDaq(experimentName, startDateDir);
+				if (drconnection != null) {
+					drconnection.startDaq(experimentName, startDateDir);
+				}
 			} else {
 				JOptionPane.showMessageDialog(null,"The experiment "+ experimentName +" did not start",
 						"Info",JOptionPane.WARNING_MESSAGE);
@@ -405,18 +391,32 @@ class ExperimentList extends JFrame
 		table.clearSelection();		
 	}
 	
-	private void startExperiments(int[] selection, DaqServiceConnection dconnection) {
+	private void startExperiments(int[] selection, DaqServiceConnection dconnection, DaqServiceConnection drconnection) {
 		for (int i = 0; i < selection.length; i++) {
+			String startDate = (String)table.getModel().getValueAt(selection[i], Column.START_DATE.ordinal());
+			// convert date
+			String startDateDir;
+			try {
+				startDateDir = convertDate2Dir(startDate);
+			} catch (ParseException e) {
+				startDateDir = startDate;
+			}
 			String experimentName = EXPERIMENT_PREFIX+(String)table.getModel().getValueAt(selection[i], Column.NAME.ordinal());
-			dconnection.startDaq(experimentName);						
+			dconnection.startDaq(experimentName, startDateDir);						
+			if (drconnection != null) {
+				drconnection.startDaq(experimentName, startDateDir);
+			}
 		}
 		table.clearSelection();		
 	}
 
-	private void stopExperiments(int[] selection, DaqServiceConnection dconnection) {
+	private void stopExperiments(int[] selection, DaqServiceConnection dconnection, DaqServiceConnection drconnection) {
 		for (int i = 0; i < selection.length; i++) {
 			String experimentName = EXPERIMENT_PREFIX+(String)table.getModel().getValueAt(selection[i], Column.NAME.ordinal());
 			dconnection.stopDaq(experimentName);
+			if (drconnection != null) {
+				drconnection.stopDaq(experimentName);
+			}
 		}
 		table.clearSelection();		
 	}
@@ -430,6 +430,45 @@ class ExperimentList extends JFrame
 			sconnection.addExperimentUser(users[i], experimentName, role.toString());
 		}
 	}
+	
+	private String convertDate2Dir(String startDate) throws ParseException {
+		String month = startDate.substring(0,3);
+		String numMonth = null;
+		if (month.equals("JAN")) {
+			numMonth = "01";
+		} else if (month.equals("FEB")) {
+			numMonth = "02";
+		} else if (month.equals("MAR")) {
+			numMonth = "03";
+		} else if (month.equals("APR")) {
+			numMonth = "04";
+		} else if (month.equals("MAY")) {
+			numMonth = "05";
+		} else if (month.equals("JUN")) {
+			numMonth = "06";
+		} else if (month.equals("JUL")) {
+			numMonth = "07";
+		} else if (month.equals("AUG")) {
+			numMonth = "08";
+		} else if (month.equals("SEP")) {
+			numMonth = "09";
+		} else if (month.equals("OCT")) {
+			numMonth = "10";
+		} else if (month.equals("NOV")) {
+			numMonth = "11";
+		} else if (month.equals("DEC")) {
+			numMonth = "12";
+		}
+		String agreableStartDate = numMonth + startDate.substring(3, startDate.length());
+		// parse the date
+		DateFormat f = new SimpleDateFormat("M-d-y");
+		Date d = f.parse(agreableStartDate);
+
+		// now print the date
+		DateFormat out = new SimpleDateFormat("yyyy-MM");
+		return out.format(d);
+	}
 
 }
 
+
diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/Gui.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/Gui.java
index 14a68ead..2a75d991 100644
--- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/Gui.java
+++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/Gui.java
@@ -10,6 +10,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.sql.SQLException;
+import java.text.ParseException;
 import java.util.Properties;
 
 import javax.swing.JFrame;
@@ -18,7 +19,7 @@ import javax.swing.SwingUtilities;
 
 class Gui
 {
-	public static void main(String arg[])
+	public static void main(String arg[]) throws ParseException
 	{
 		String configFile = arg[0];
 		final Properties configProperties = new Properties();
@@ -45,10 +46,28 @@ class Gui
 		if (sconnection.init(configProperties.getProperty("dm.storageServ.connection")) != ServiceConnection.ServiceConnectionStatus.SUCCESS) {
 			System.exit(0);
 		}
-		DaqServiceConnection dconnection = new DaqServiceConnection(configProperties);
+		String daqurl = configProperties.getProperty("dm.daq.connection");
+		String dataDir = configProperties.getProperty("dm.daq.datadir");
+		DaqServiceConnection dconnection = new DaqServiceConnection(daqurl, dataDir);
+		if (dconnection.init() != ServiceConnection.ServiceConnectionStatus.SUCCESS) {
+			System.exit(0);
+		}
+		DaqServiceConnection drconnection = null;
+		try {
+			String daqReceiverurl = configProperties.getProperty("dm.daqReciver.connection");
+			String dataReceiverDir = configProperties.getProperty("dm.daqReceiver.datadir");
+			if ((daqReceiverurl != null) && (dataReceiverDir != null)) {
+				drconnection = new DaqServiceConnection(daqReceiverurl, dataReceiverDir);
+				if (drconnection.init() != ServiceConnection.ServiceConnectionStatus.SUCCESS) {
+					System.exit(0);
+				}
+			}
+		} catch (Exception e) {
+			// possible null exception if property not defined
+		}
 		try
 		{
-			LoginWindow frame = new LoginWindow(sconnection, oconnection, dconnection);
+			LoginWindow frame = new LoginWindow(sconnection, oconnection, dconnection, drconnection);
 			frame.setSize(300,200);
 			frame.setVisible(true);
 			frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
@@ -91,3 +110,4 @@ class Gui
 		}
 	}
 }
+
diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/LoginWindow.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/LoginWindow.java
index d4c47e71..ab7aed25 100644
--- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/LoginWindow.java
+++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/LoginWindow.java
@@ -17,7 +17,7 @@ public final class LoginWindow extends JFrame {
 	OracleConnection oconnection;
 	JPanel panel;
 
-	LoginWindow(final StorageServiceConnection sconnection, final OracleConnection oconnection, final DaqServiceConnection dconnection) {
+	LoginWindow(final StorageServiceConnection sconnection, final OracleConnection oconnection, final DaqServiceConnection dconnection, final DaqServiceConnection drconnection) {
 		this.sconnection = sconnection;
 		this.oconnection = oconnection;
 
@@ -64,13 +64,18 @@ public final class LoginWindow extends JFrame {
 					JOptionPane.showMessageDialog(null,"enter login and password",
 							"Error",JOptionPane.ERROR_MESSAGE);					
 				} else {
-					sconnection.setLogin(user, pass);
-					dconnection.setLogin(user, pass);
-					int aaResult = sconnection.login();
+//					sconnection.setLogin(user, pass);
+//					dconnection.setLogin(user, pass);
+					int aaResult = sconnection.login(user, pass);
+					if ((dconnection.login(user, pass) != aaResult) || (dconnection.login(user, pass) != aaResult)) {
+						JOptionPane.showMessageDialog(null,"inconsistent login response",
+								"Error",JOptionPane.ERROR_MESSAGE);	
+						return;
+					}						
 					switch (aaResult) {
 					case ServiceConnection.ServiceConnectionStatus.SUCCESS:
 						setVisible(false);
-						ExperimentList page=new ExperimentList(sectorText.getText().trim(), oconnection, sconnection, dconnection);
+						ExperimentList page=new ExperimentList(sectorText.getText().trim(), oconnection, sconnection, dconnection, drconnection);
 						page.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
 						page.addWindowListener(new WindowAdapter() {
 							@Override	 
@@ -102,3 +107,4 @@ public final class LoginWindow extends JFrame {
 		});
 	}
 }
+
diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/OracleConnection.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/OracleConnection.java
index f5d7e0e7..05fe0c05 100644
--- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/OracleConnection.java
+++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/OracleConnection.java
@@ -49,3 +49,4 @@ public class OracleConnection {
     }
 }
 
+
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 2e096277..6c02f70c 100644
--- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/DaqServiceConnection.java
+++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/DaqServiceConnection.java
@@ -38,7 +38,81 @@ public class DaqServiceConnection extends ServiceConnection{
 		} else {
 			directory = dataDir + "/" + experimentName;
 		}
-		
+		package gov.anl.dm.esafsync.serviceconn;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.swing.JOptionPane;
+
+public class DaqServiceConnection extends ServiceConnection{
+
+	class Keyword {
+		static final String DAQ_EXPERIMENT_NAME = "experimentName";
+		static final String DAQ_DATA_DIRECTORY = "dataDirectory";
+	}
+	
+	class StorageServUrl {
+		static final String START_DAQ = "/experiments/startDaq";
+		static final String STOP_DAQ = "/experiments/stopDaq";
+	}
+
+	private String url;
+	private String dataDir;
+
+	public DaqServiceConnection(String url, String dataDir) {
+		this.url = url;
+		this.dataDir = dataDir;
+	}
+	
+    public final int init() {
+		return super.init(url);
+	}
+
+    public void startDaq(String experimentName, String startDateDir) {
+    	String directory;
+    	String dateDirectory;
+    	if (dataDir.endsWith("/")) {
+    		dateDirectory = dataDir + "/" + startDateDir;
+    		directory = dataDir + startDateDir + "/" + experimentName;
+    	} else {
+    		dateDirectory = dataDir + startDateDir;
+    		directory = dataDir + "/" + startDateDir + "/" + experimentName;
+    	}
+
+    	Map<String, String> data = new HashMap<>();
+    	data.put(Keyword.DAQ_EXPERIMENT_NAME, encode(experimentName));
+    	data.put(Keyword.DAQ_DATA_DIRECTORY, encode(directory));
+
+    	if ((new File(directory)).exists()) {
+    		invokeSessionPostRequest(StorageServUrl.START_DAQ, data);    					
+    	} else if ((new File(dateDirectory)).exists()) {
+    		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(dateDirectory).mkdir()) && (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);									
+    		}
+    	}
+    }
+
+	public void stopDaq(String experimentName) {
+    	Map<String, String> data = new HashMap<>();
+    	data.put(Keyword.DAQ_EXPERIMENT_NAME, encode(experimentName));
+		invokeSessionPostRequest(StorageServUrl.STOP_DAQ, data); 
+    }
+    
+}
+
+
     	Map<String, String> data = new HashMap<>();
     	data.put(Keyword.DAQ_EXPERIMENT_NAME, encode(experimentName));
     	data.put(Keyword.DAQ_DATA_DIRECTORY, encode(directory));
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 18698811..93286908 100644
--- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/ServiceConnection.java
+++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/ServiceConnection.java
@@ -508,7 +508,7 @@ public class ServiceConnection {
     	return login.login();
     }
 
-     private final int login(String username, String password) {
+     public final int login(String username, String password) {
         HttpsURLConnection connection = null;
         try {
             String urlString = getFullRequestUrl(StorageServUrl.LOGIN_REQUEST);
@@ -552,3 +552,4 @@ public class ServiceConnection {
     
 }
 
+
diff --git a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/StorageServiceConnection.java b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/StorageServiceConnection.java
index 43a4961c..b7f57db0 100644
--- a/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/StorageServiceConnection.java
+++ b/tools/ExperimentSynchronizer/src/gov/anl/dm/esafsync/serviceconn/StorageServiceConnection.java
@@ -59,3 +59,4 @@ public class StorageServiceConnection extends ServiceConnection{
     }
 }
 
+
-- 
GitLab