diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/AcquisitionMain.java b/ch.psi.fda/src/main/java/ch/psi/fda/AcquisitionMain.java index 499621f..299e3ef 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/AcquisitionMain.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/AcquisitionMain.java @@ -54,6 +54,7 @@ import com.google.common.eventbus.EventBus; import sun.misc.Signal; import sun.misc.SignalHandler; import ch.psi.fda.aq.Acquisition; +import ch.psi.fda.aq.AcquisitionConfiguration; import ch.psi.fda.aq.VisualizationMapper; import ch.psi.fda.gui.ProgressPanel; import ch.psi.fda.gui.ScrollableFlowPanel; @@ -245,7 +246,7 @@ public class AcquisitionMain { } // Create/get acquisition engine - final Acquisition acquisition = new Acquisition(new DefaultChannelService()); + final Acquisition acquisition = new Acquisition(new DefaultChannelService(), new AcquisitionConfiguration()); boolean vis = false; // Only register data visualization task/processor if there are visualizations diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/aq/Acquisition.java b/ch.psi.fda/src/main/java/ch/psi/fda/aq/Acquisition.java index 3222c58..7712ff2 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/aq/Acquisition.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/aq/Acquisition.java @@ -126,7 +126,7 @@ public class Acquisition { private static Logger logger = Logger.getLogger(Acquisition.class.getName()); - private AcquisitionConfiguration configuration; + private final AcquisitionConfiguration configuration; private ActionLoop actionLoop; private Manipulator manipulator; @@ -139,7 +139,6 @@ public class Acquisition { private Handler logHandler = null; -// private Collector col; private File datafile; @@ -152,9 +151,9 @@ public class Acquisition { private HashMap jVariableDictionary = new HashMap(); - public Acquisition(ChannelService cservice){ + public Acquisition(ChannelService cservice, AcquisitionConfiguration configuration){ this.cservice = cservice; - this.configuration = AcquisitionConfiguration.getInstance(); + this.configuration = configuration; this.actionLoop = null; this.manipulations = new ArrayList(); } @@ -652,7 +651,7 @@ public class Acquisition { // Mapping dimension pre-actions aLoop.getPreActions().addAll(mapActions(dimension.getPreAction())); - Long moveTimeout = AcquisitionConfiguration.getInstance().getActorMoveTimeout(); + Long moveTimeout = this.configuration.getActorMoveTimeout(); // Mapping positioners Double stime = 0d; diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/aq/AcquisitionConfiguration.java b/ch.psi.fda/src/main/java/ch/psi/fda/aq/AcquisitionConfiguration.java index c300fef..b108d1e 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/aq/AcquisitionConfiguration.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/aq/AcquisitionConfiguration.java @@ -39,7 +39,8 @@ public class AcquisitionConfiguration { private static final Logger logger = Logger.getLogger(AcquisitionConfiguration.class.getName()); - private static final AcquisitionConfiguration instance = new AcquisitionConfiguration(); + + public final static String FDA_CONFIG_FILE = "ch.psi.fda.config.file"; private String otfChannelPrefix; private String otfNfsServer; @@ -70,37 +71,37 @@ public class AcquisitionConfiguration { private String smptServer; + /** * Default Constructor * The constructor will read the configuration from the /fda.properties file (resource) located in the classpath. */ - private AcquisitionConfiguration(){ + public AcquisitionConfiguration(){ loadConfiguration(); } - /** - * Get instance of this configuration - * @return configuration - */ - public static AcquisitionConfiguration getInstance(){ - return(instance); + + public void loadConfiguration(){ + loadConfiguration(null); } /** * Load configuration from properties file */ - private void loadConfiguration() { - String config = System.getProperty(ApplicationConfigurator.FDA_CONFIG_FILE_ARGUMENT); - + public void loadConfiguration(String file) { + if(file == null){ + file = System.getProperty(FDA_CONFIG_FILE); + } Properties properties = new Properties(); - if(config != null){ + // Only read in the property file if a file is specified + if(file != null){ try { - properties.load(new FileReader(config)); + properties.load(new FileReader(file)); } catch (FileNotFoundException e) { - throw new RuntimeException("Configuration file "+config+" not found", e); + throw new RuntimeException("Configuration file "+file+" not found", e); } catch (IOException e) { - throw new RuntimeException("Cannot read configuration file "+config, e); + throw new RuntimeException("Cannot read configuration file "+file, e); } } else{ @@ -113,13 +114,12 @@ public class AcquisitionConfiguration { otfNfsServer = properties.getProperty(AcquisitionConfiguration.class.getPackage().getName()+".otf.nfsServer", ""); otfNfsShare = properties.getProperty(AcquisitionConfiguration.class.getPackage().getName()+".otf.nfsShare", ""); otfSmbShare = properties.getProperty(AcquisitionConfiguration.class.getPackage().getName()+".otf.smbShare", ""); + otfUseCrlogic = new Boolean(properties.getProperty(AcquisitionConfiguration.class.getPackage().getName()+".otf.useCrlogic", "false")); otfCrlogicPrefix = properties.getProperty(AcquisitionConfiguration.class.getPackage().getName()+".otf.crlogicPrefix", ""); otfCrlogicKeepTmpFiles = new Boolean(properties.getProperty(AcquisitionConfiguration.class.getPackage().getName()+".otf.crlogicKeepTmpFiles", "false")); - // Workaround -// dataBaseDirectory = properties.getProperty(AcquisitionEngineConfiguration.class.getPackage().getName()+".data.baseDirectory", "."); - if(System.getProperty(ApplicationConfigurator.FDA_HOME_ARGUMENT)!=null){ + if(System.getProperty(ApplicationConfigurator.FDA_HOME_ARGUMENT)!=null){ // TODO remove dataBaseDirectory = System.getProperty(ApplicationConfigurator.FDA_HOME_ARGUMENT)+"/data"; } else{ @@ -135,98 +135,12 @@ public class AcquisitionConfiguration { } /** - * Reload this configuration from the corresponding properties file - * @throws IOException + * Replace ${name} and ${date} macro given string + * @param string + * @param date + * @param name + * @return */ - public void reloadConfiguration() throws IOException{ - loadConfiguration(); - } - - /** - * @return the otfChannelPrefix - */ - public String getOtfChannelPrefix() { - return otfChannelPrefix; - } - - /** - * @return the otfScalerPrefix - */ - public String getOtfScalerPrefix() { - return otfScalerPrefix; - } - - /** - * @return the otfNfsServer - */ - public String getOtfNfsServer() { - return otfNfsServer; - } - - /** - * @return the otfNfsShare - */ - public String getOtfNfsShare() { - return otfNfsShare; - } - - /** - * @return the otfSmbShare - */ - public String getOtfSmbShare() { - return otfSmbShare; - } - - /** - * @return the otfUseCrlogic - */ - public boolean isOtfUseCrlogic() { - return otfUseCrlogic; - } - - /** - * @return the dataBaseDirectory - */ - public String getDataBaseDirectory() { - return dataBaseDirectory; - } - - /** - * @return the dataFilePrefix - */ - public String getDataFilePrefix() { - return dataFilePrefix; - } - - /** - * @return the smptServer - */ - public String getSmptServer() { - return smptServer; - } - - - /** - * @return the otfCrlogicPrefix - */ - public String getOtfCrlogicPrefix() { - return otfCrlogicPrefix; - } - - /** - * @return the otfCrlogicKeepTmpFiles - */ - public boolean isOtfCrlogicKeepTmpFiles() { - return otfCrlogicKeepTmpFiles; - } - - /** - * @return the actorMoveTimeout - */ - public Long getActorMoveTimeout() { - return actorMoveTimeout; - } - public String replaceMacros(String string, Date date, String name){ String newString = string; @@ -248,50 +162,100 @@ public class AcquisitionConfiguration { return newString; } + // Getter and setter functions + + public String getOtfChannelPrefix() { + return otfChannelPrefix; + } + public void setOtfChannelPrefix(String otfChannelPrefix) { this.otfChannelPrefix = otfChannelPrefix; } + public String getOtfNfsServer() { + return otfNfsServer; + } + public void setOtfNfsServer(String otfNfsServer) { this.otfNfsServer = otfNfsServer; } + public String getOtfNfsShare() { + return otfNfsShare; + } + public void setOtfNfsShare(String otfNfsShare) { this.otfNfsShare = otfNfsShare; } + public String getOtfSmbShare() { + return otfSmbShare; + } + public void setOtfSmbShare(String otfSmbShare) { this.otfSmbShare = otfSmbShare; } + public String getOtfScalerPrefix() { + return otfScalerPrefix; + } + public void setOtfScalerPrefix(String otfScalerPrefix) { this.otfScalerPrefix = otfScalerPrefix; } + public boolean isOtfUseCrlogic() { + return otfUseCrlogic; + } + public void setOtfUseCrlogic(boolean otfUseCrlogic) { this.otfUseCrlogic = otfUseCrlogic; } + public String getOtfCrlogicPrefix() { + return otfCrlogicPrefix; + } + public void setOtfCrlogicPrefix(String otfCrlogicPrefix) { this.otfCrlogicPrefix = otfCrlogicPrefix; } + public boolean isOtfCrlogicKeepTmpFiles() { + return otfCrlogicKeepTmpFiles; + } + public void setOtfCrlogicKeepTmpFiles(boolean otfCrlogicKeepTmpFiles) { this.otfCrlogicKeepTmpFiles = otfCrlogicKeepTmpFiles; } + public String getDataBaseDirectory() { + return dataBaseDirectory; + } + public void setDataBaseDirectory(String dataBaseDirectory) { this.dataBaseDirectory = dataBaseDirectory; } + public String getDataFilePrefix() { + return dataFilePrefix; + } + public void setDataFilePrefix(String dataFilePrefix) { this.dataFilePrefix = dataFilePrefix; } + public Long getActorMoveTimeout() { + return actorMoveTimeout; + } + public void setActorMoveTimeout(Long actorMoveTimeout) { this.actorMoveTimeout = actorMoveTimeout; } + public String getSmptServer() { + return smptServer; + } + public void setSmptServer(String smptServer) { this.smptServer = smptServer; } diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/install/ApplicationConfigurator.java b/ch.psi.fda/src/main/java/ch/psi/fda/install/ApplicationConfigurator.java index d08d88c..e5075aa 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/install/ApplicationConfigurator.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/install/ApplicationConfigurator.java @@ -33,6 +33,8 @@ import java.util.Enumeration; import java.util.List; import java.util.logging.Logger; +import ch.psi.fda.aq.AcquisitionConfiguration; + /** * @author ebner * @@ -42,7 +44,6 @@ public class ApplicationConfigurator { private static final Logger logger = Logger.getLogger(ApplicationConfigurator.class.getName()); public final static String FDA_HOME_ARGUMENT = "ch.psi.fda.home"; - public final static String FDA_CONFIG_FILE_ARGUMENT = "ch.psi.fda.config.file"; private final File home; private final File configdir; @@ -88,9 +89,9 @@ public class ApplicationConfigurator { } // Set FDA configuration argument -Dch.psi.fda.config.file=... - property = System.getProperty(FDA_CONFIG_FILE_ARGUMENT); + property = System.getProperty(AcquisitionConfiguration.FDA_CONFIG_FILE); if(property==null){ - System.setProperty(FDA_CONFIG_FILE_ARGUMENT, fdaProperties.getAbsolutePath()); + System.setProperty(AcquisitionConfiguration.FDA_CONFIG_FILE, fdaProperties.getAbsolutePath()); } // Set jcae.properties file diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/rest/AcquisitionEngine.java b/ch.psi.fda/src/main/java/ch/psi/fda/rest/AcquisitionEngine.java index 89c2b66..281ea4e 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/rest/AcquisitionEngine.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/rest/AcquisitionEngine.java @@ -20,9 +20,12 @@ package ch.psi.fda.rest; import java.util.logging.Logger; +import javax.inject.Inject; + import com.google.common.eventbus.EventBus; import ch.psi.fda.aq.Acquisition; +import ch.psi.fda.aq.AcquisitionConfiguration; import ch.psi.fda.model.v1.Configuration; import ch.psi.jcae.ChannelService; @@ -34,11 +37,20 @@ public class AcquisitionEngine { private static final Logger logger = Logger.getLogger(AcquisitionEngine.class.getName()); - private Acquisition acquisition; + @Inject + private AcquisitionConfiguration config; + @Inject private ChannelService cservice; - public AcquisitionEngine(ChannelService cservice){ + private Acquisition acquisition; + + public AcquisitionEngine(){ + } + + @Inject + public AcquisitionEngine(ChannelService cservice, AcquisitionConfiguration config){ this.cservice=cservice; + this.config = config; } public void scan(Configuration configuration){ @@ -48,7 +60,7 @@ public class AcquisitionEngine { try{ EventBus ebus = new EventBus(); - acquisition = new Acquisition(cservice); + acquisition = new Acquisition(cservice, config); acquisition.initalize(ebus, configuration); acquisition.execute(); } diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/rest/ResourceBinder.java b/ch.psi.fda/src/main/java/ch/psi/fda/rest/ResourceBinder.java index a67216b..2156118 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/rest/ResourceBinder.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/rest/ResourceBinder.java @@ -1,14 +1,21 @@ package ch.psi.fda.rest; + +import javax.inject.Singleton; + import org.glassfish.hk2.utilities.binding.AbstractBinder; +import ch.psi.fda.aq.AcquisitionConfiguration; +import ch.psi.jcae.ChannelService; import ch.psi.jcae.impl.DefaultChannelService; public class ResourceBinder extends AbstractBinder { @Override protected void configure() { - bind(new AcquisitionEngine(new DefaultChannelService())).to(AcquisitionEngine.class); + bind(DefaultChannelService.class).to(ChannelService.class).in(Singleton.class); + bind(AcquisitionConfiguration.class).to(AcquisitionConfiguration.class).in(Singleton.class); + bind(AcquisitionEngine.class).to(AcquisitionEngine.class).in(Singleton.class); } } \ No newline at end of file diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/rest/services/ScanService.java b/ch.psi.fda/src/main/java/ch/psi/fda/rest/services/ScanService.java index 9bcb493..adf22af 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/rest/services/ScanService.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/rest/services/ScanService.java @@ -31,7 +31,7 @@ import ch.psi.fda.rest.AcquisitionEngine; @Path("fda") public class ScanService { - + @Inject private AcquisitionEngine aengine; diff --git a/ch.psi.fda/src/test/java/ch/psi/fda/aq/AcquisitionConfigurationTest.java b/ch.psi.fda/src/test/java/ch/psi/fda/aq/AcquisitionConfigurationTest.java index 4d6c555..6d664ef 100644 --- a/ch.psi.fda/src/test/java/ch/psi/fda/aq/AcquisitionConfigurationTest.java +++ b/ch.psi.fda/src/test/java/ch/psi/fda/aq/AcquisitionConfigurationTest.java @@ -64,7 +64,7 @@ public class AcquisitionConfigurationTest { */ @Test public void testGetConfiguration() { - AcquisitionConfiguration configuration = AcquisitionConfiguration.getInstance(); + AcquisitionConfiguration configuration = new AcquisitionConfiguration(); String s = configuration.getDataFilePrefix(); if(s==null){ Assert.fail("No configuration returned for data file prefix");