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/AcquisitionConfiguration.java similarity index 99% rename from ch.psi.fda/src/main/java/ch/psi/fda/aq/AcquisitionConfiguration.java rename to ch.psi.fda/src/main/java/ch/psi/fda/AcquisitionConfiguration.java index 6333582..423985c 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/aq/AcquisitionConfiguration.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/AcquisitionConfiguration.java @@ -17,7 +17,7 @@ * */ -package ch.psi.fda.aq; +package ch.psi.fda; import java.io.File; import java.io.FileNotFoundException; 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 4affe6e..ee1367e 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 @@ -59,7 +59,6 @@ import sun.misc.SignalHandler; import ch.psi.fda.edescriptor.EDescriptor; import ch.psi.fda.gui.ProgressPanel; import ch.psi.fda.gui.ScrollableFlowPanel; -import ch.psi.fda.install.ApplicationConfigurator; import ch.psi.fda.vdescriptor.VDescriptor; import ch.psi.fda.visualizer.Visualizer; import ch.psi.jcae.ChannelService; 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/ApplicationConfigurator.java similarity index 99% rename from ch.psi.fda/src/main/java/ch/psi/fda/install/ApplicationConfigurator.java rename to ch.psi.fda/src/main/java/ch/psi/fda/ApplicationConfigurator.java index 9e5703b..c760c00 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/install/ApplicationConfigurator.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/ApplicationConfigurator.java @@ -17,7 +17,7 @@ * */ -package ch.psi.fda.install; +package ch.psi.fda; import java.io.BufferedWriter; import java.io.File; @@ -33,8 +33,6 @@ import java.util.Enumeration; import java.util.List; import java.util.logging.Logger; -import ch.psi.fda.aq.AcquisitionConfiguration; - public class ApplicationConfigurator { private static final Logger logger = Logger.getLogger(ApplicationConfigurator.class.getName()); diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/rest/ControlClient.java b/ch.psi.fda/src/main/java/ch/psi/fda/ControlClient.java similarity index 77% rename from ch.psi.fda/src/main/java/ch/psi/fda/rest/ControlClient.java rename to ch.psi.fda/src/main/java/ch/psi/fda/ControlClient.java index 71e03ef..3527f0b 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/rest/ControlClient.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/ControlClient.java @@ -16,7 +16,7 @@ * along with this code. If not, see . * */ -package ch.psi.fda.rest; +package ch.psi.fda; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; @@ -33,22 +33,7 @@ public class ControlClient { private Client client = ClientBuilder.newClient().register(JacksonFeature.class); private WebTarget target = client.target("http://emac:8080").path("fda"); - - public String acquire(String trackingId, EDescriptor edescriptor){ - - // For testing purposes -// try { -// JAXBContext context = JAXBContext.newInstance(EDescriptor.class, XScanDescriptor.class); -// Marshaller m = context.createMarshaller(); -// m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); -// m.marshal( edescriptor, System.out ); -// } catch( JAXBException jbe ){ -// // ... -// jbe.printStackTrace(); -// } -// System.out.println("----"); - return target.path(trackingId).request().put(Entity.entity(edescriptor, MediaType.APPLICATION_XML), String.class); } diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/RemoteAcquisitionMain.java b/ch.psi.fda/src/main/java/ch/psi/fda/RemoteAcquisitionMain.java index 1ee78f8..1eb8bd0 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/RemoteAcquisitionMain.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/RemoteAcquisitionMain.java @@ -59,8 +59,6 @@ import sun.misc.SignalHandler; import ch.psi.fda.edescriptor.EDescriptor; import ch.psi.fda.gui.ProgressPanel; import ch.psi.fda.gui.ScrollableFlowPanel; -import ch.psi.fda.rest.ControlClient; -import ch.psi.fda.rest.StreamClient; import ch.psi.fda.vdescriptor.VDescriptor; import ch.psi.fda.visualizer.Visualizer; diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/rest/StreamClient.java b/ch.psi.fda/src/main/java/ch/psi/fda/StreamClient.java similarity index 99% rename from ch.psi.fda/src/main/java/ch/psi/fda/rest/StreamClient.java rename to ch.psi.fda/src/main/java/ch/psi/fda/StreamClient.java index ed13ad9..60dddf1 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/rest/StreamClient.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/StreamClient.java @@ -16,7 +16,7 @@ * along with this code. If not, see . * */ -package ch.psi.fda.rest; +package ch.psi.fda; import java.io.ByteArrayInputStream; import java.io.IOException; diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/ViewerMain.java b/ch.psi.fda/src/main/java/ch/psi/fda/ViewerMain.java index afbc32c..51318a4 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/ViewerMain.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/ViewerMain.java @@ -42,7 +42,6 @@ import com.google.common.eventbus.EventBus; import com.google.common.eventbus.Subscribe; import ch.psi.fda.gui.ScrollableFlowPanel; -import ch.psi.fda.rest.StreamClient; import ch.psi.fda.vdescriptor.VDescriptor; import ch.psi.fda.visualizer.Visualizer; 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 7530112..eb66c70 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 @@ -31,7 +31,7 @@ import java.util.logging.Logger; import javax.inject.Inject; -import ch.psi.fda.aq.AcquisitionConfiguration; +import ch.psi.fda.AcquisitionConfiguration; import ch.psi.fda.edescriptor.EDescriptor; import ch.psi.jcae.ChannelService; diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/rest/AcquisitionJob.java b/ch.psi.fda/src/main/java/ch/psi/fda/rest/AcquisitionJob.java index f06b9d6..4adc35c 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/rest/AcquisitionJob.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/rest/AcquisitionJob.java @@ -21,10 +21,10 @@ package ch.psi.fda.rest; import java.util.ServiceLoader; import java.util.logging.Logger; +import ch.psi.fda.AcquisitionConfiguration; import ch.psi.fda.EContainer; import ch.psi.fda.EContainerFactory; import ch.psi.fda.InjectionModule; -import ch.psi.fda.aq.AcquisitionConfiguration; import ch.psi.fda.edescriptor.EDescriptor; import ch.psi.jcae.ChannelService; diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/rest/FdaServer.java b/ch.psi.fda/src/main/java/ch/psi/fda/rest/FdaServer.java index 954e3cf..88e9f86 100644 --- a/ch.psi.fda/src/main/java/ch/psi/fda/rest/FdaServer.java +++ b/ch.psi.fda/src/main/java/ch/psi/fda/rest/FdaServer.java @@ -18,7 +18,7 @@ import org.glassfish.jersey.jackson.JacksonFeature; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.grizzly.http.server.HttpServer; -import ch.psi.fda.install.ApplicationConfigurator; +import ch.psi.fda.ApplicationConfigurator; import sun.misc.Signal; import sun.misc.SignalHandler; @@ -66,11 +66,8 @@ public class FdaServer { resourceConfig.register(JacksonFeature.class); - HttpServer server = GrizzlyHttpServerFactory.createHttpServer(baseUri, resourceConfig); - - // Static content // String home = System.getenv("FDA_BASE"); // if (home == null) { @@ -80,6 +77,7 @@ public class FdaServer { // server.getServerConfiguration().addHttpHandler(new StaticHttpHandler(home), "/static"); // logger.info(String.format("Management interface available at %sstatic/", baseUri)); + logger.info("Server started"); logger.info("Use ctrl+c to stop ..."); @@ -103,6 +101,11 @@ public class FdaServer { server.shutdownNow(); logger.info("Server terminated"); - System.exit(0); // TODO need to shutdown ChannelService correctly !!!! + + // Destroy global resources + binder.destroy(); + + // Using System.exit() to ensure that JVM is going down + System.exit(0); } } \ No newline at end of file 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 27238ae..76be0d3 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 @@ -6,25 +6,34 @@ import javax.inject.Singleton; import org.glassfish.hk2.utilities.binding.AbstractBinder; -import ch.psi.fda.aq.AcquisitionConfiguration; +import ch.psi.fda.AcquisitionConfiguration; //import ch.psi.fda.cdump.CdumpConfiguration; import ch.psi.jcae.ChannelService; import ch.psi.jcae.impl.DefaultChannelService; public class ResourceBinder extends AbstractBinder { + private ChannelService channelService = new DefaultChannelService(); + private ZMQDataService zmqService = new ZMQDataService(10000); + @Override protected void configure() { - bind(DefaultChannelService.class).to(ChannelService.class).in(Singleton.class); + bind(channelService).to(ChannelService.class); bind(AcquisitionConfiguration.class).to(AcquisitionConfiguration.class).in(Singleton.class); bind(AcquisitionEngine.class).to(AcquisitionEngine.class).in(Singleton.class); -// bind(FdaqEngine.class).to(FdaqEngine.class).in(Singleton.class); - - // ZMQ data service singleton - bind(new ZMQDataService(10000)).to(ZMQDataService.class); - -// bind(CdumpEngine.class).to(CdumpEngine.class).in(Singleton.class); -// bind(CdumpConfiguration.class).to(CdumpConfiguration.class).in(Singleton.class); + + bind(zmqService).to(ZMQDataService.class); + } + + /** + * Destroy the allocated global resource. + * Resources destroyed are: + * - ChannelService + * - ZMQDataService + */ + public void destroy(){ + channelService.destroy(); + zmqService.terminate(); } } \ No newline at end of file diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/CdumpRequest.java b/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/CdumpRequest.java deleted file mode 100644 index a483dca..0000000 --- a/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/CdumpRequest.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * - * Copyright 2014 Paul Scherrer Institute. All rights reserved. - * - * This code is free software: you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation, either version 3 of the License, or (at your option) any - * later version. - * - * This code is distributed in the hope that it will be useful, but without any - * warranty; without even the implied warranty of merchantability or fitness for - * a particular purpose. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this code. If not, see . - * - */ -package ch.psi.fda.rest.model; - -import javax.xml.bind.annotation.XmlRootElement; - -@XmlRootElement -public class CdumpRequest { - private String filename; - private Stream stream; - - private String samplingRate; - - public String getFilename() { - return filename; - } - public void setFilename(String filename) { - this.filename = filename; - } - public Stream getStream() { - return stream; - } - public void setStream(Stream stream) { - this.stream = stream; - } - public String getSamplingRate() { - return samplingRate; - } - public void setSamplingRate(String samplingRate) { - this.samplingRate = samplingRate; - } -} diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/ERequest.java b/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/ERequest.java deleted file mode 100644 index fd8f981..0000000 --- a/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/ERequest.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * - * Copyright 2014 Paul Scherrer Institute. All rights reserved. - * - * This code is free software: you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation, either version 3 of the License, or (at your option) any - * later version. - * - * This code is distributed in the hope that it will be useful, but without any - * warranty; without even the implied warranty of merchantability or fitness for - * a particular purpose. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this code. If not, see . - * - */ -package ch.psi.fda.rest.model; - -import javax.xml.bind.annotation.XmlRootElement; - -import org.codehaus.jackson.map.annotate.JsonDeserialize; - -/** - * Execution request - */ -@XmlRootElement -@JsonDeserialize(using = ERequestJsonDeserializer.class) -public class ERequest { - - /** - * List of ids to stream - */ - private Stream stream; - - /** - * Execution type: scan, fdaq, cdump - */ - private String etype; - - /** - * Json string holding the executions' configuration. It will interpreted differently based on the specified etype - * - * Use adapter ???? https://www.google.ch/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&cad=rja&ved=0CFgQFjAF&url=http%3A%2F%2Fblog.bdoughan.com%2F2012%2F01%2Fjaxb-and-inhertiance-using-xmladapter.html&ei=GfrMUtzTNsGp7AbykYDQDw&usg=AFQjCNG3xDZKYLYV6Ez-EvvJe_AIYE5EHA&sig2=ND5Epp90O-FWrJI4T3zyCw&bvm=bv.58187178,d.ZGU - */ - private String configuration; - - public Stream getStream() { - return stream; - } - - public void setStream(Stream stream) { - this.stream = stream; - } - - public String getEtype() { - return etype; - } - - public void setEtype(String etype) { - this.etype = etype; - } - - public String getConfiguration() { - return configuration; - } - - public void setConfiguration(String configuration) { - this.configuration = configuration; - } - - -} diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/ERequestJsonDeserializer.java b/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/ERequestJsonDeserializer.java deleted file mode 100644 index f94e3c9..0000000 --- a/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/ERequestJsonDeserializer.java +++ /dev/null @@ -1,30 +0,0 @@ -package ch.psi.fda.rest.model; - -import java.io.IOException; - -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.JsonParser; -import org.codehaus.jackson.JsonProcessingException; -import org.codehaus.jackson.map.DeserializationContext; -import org.codehaus.jackson.map.JsonDeserializer; - -class ERequestJsonDeserializer extends JsonDeserializer { - - @Override - public ERequest deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { - - ERequest request = new ERequest(); - - JsonNode node = jp.readValueAsTree(); - request.setEtype(node.get("etype").asText()); - request.setStream(jp.getCodec().treeToValue(node.get("stream"), Stream.class)); - - request.setConfiguration(node.get("configuration").toString()); - -// Class concreteType = determineConcreteType(node); //Implement -// return jp.getCodec().treeToValue(node, concreteType); -// -// return jp.readValueAsTree().toString(); - return request; - } -} \ No newline at end of file diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/FdaqRequest.java b/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/FdaqRequest.java deleted file mode 100644 index da52764..0000000 --- a/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/FdaqRequest.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * - * Copyright 2014 Paul Scherrer Institute. All rights reserved. - * - * This code is free software: you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation, either version 3 of the License, or (at your option) any - * later version. - * - * This code is distributed in the hope that it will be useful, but without any - * warranty; without even the implied warranty of merchantability or fitness for - * a particular purpose. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this code. If not, see . - * - */ -package ch.psi.fda.rest.model; - -import javax.xml.bind.annotation.XmlRootElement; - -@XmlRootElement -public class FdaqRequest { - private String filename; - private Stream stream; - - public String getFilename() { - return filename; - } - public void setFilename(String filename) { - this.filename = filename; - } - public Stream getStream() { - return stream; - } - public void setStream(Stream stream) { - this.stream = stream; - } -} diff --git a/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/Stream.java b/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/Stream.java deleted file mode 100644 index 3f61b00..0000000 --- a/ch.psi.fda/src/main/java/ch/psi/fda/rest/model/Stream.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * - * Copyright 2014 Paul Scherrer Institute. All rights reserved. - * - * This code is free software: you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation, either version 3 of the License, or (at your option) any - * later version. - * - * This code is distributed in the hope that it will be useful, but without any - * warranty; without even the implied warranty of merchantability or fitness for - * a particular purpose. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this code. If not, see . - * - */ -package ch.psi.fda.rest.model; - -public class Stream { - private String[] ids; - - public String[] getIds() { - return ids; - } - - public void setIds(String[] ids) { - this.ids = ids; - } -} diff --git a/ch.psi.fda/src/test/java/ch/psi/fda/install/ApplicationConfiguratorTest.java b/ch.psi.fda/src/test/java/ch/psi/fda/install/ApplicationConfiguratorTest.java index 88b7e82..cf4bd81 100644 --- a/ch.psi.fda/src/test/java/ch/psi/fda/install/ApplicationConfiguratorTest.java +++ b/ch.psi.fda/src/test/java/ch/psi/fda/install/ApplicationConfiguratorTest.java @@ -25,6 +25,8 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import ch.psi.fda.ApplicationConfigurator; + /** * @author ebner *