got first working version of REST server

This commit is contained in:
2013-10-24 08:38:33 +02:00
parent f4d5102ea3
commit 08cbd0bad0
8 changed files with 108 additions and 124 deletions
@@ -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
@@ -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<String, JythonGlobalVariable> jVariableDictionary = new HashMap<String, JythonGlobalVariable>();
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<Manipulation>();
}
@@ -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;
@@ -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;
}
@@ -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
@@ -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();
}
@@ -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);
}
}
@@ -31,7 +31,7 @@ import ch.psi.fda.rest.AcquisitionEngine;
@Path("fda")
public class ScanService {
@Inject
private AcquisitionEngine aengine;
@@ -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");