diff --git a/MathHubWorker/pom.xml b/MathHubWorker/pom.xml index 971061e23fad1e03e474b4a98821bd885bf7a88f..e37ff619e9548136a90ba54faef14f7f03346585 100644 --- a/MathHubWorker/pom.xml +++ b/MathHubWorker/pom.xml @@ -46,7 +46,7 @@ <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> - <version>2.12.3</version> + <version>${camel.version}</version> </dependency> <dependency> @@ -68,6 +68,12 @@ <version>${sally4.version}</version> </dependency> + <dependency> + <groupId>info.kwarc.sally4</groupId> + <artifactId>servlet</artifactId> + <version>${sally4.version}</version> + </dependency> + </dependencies> <build> @@ -81,7 +87,7 @@ <instructions> <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> <Private-Package>info.kwarc.sally4.mathhubworker.impl*</Private-Package> - <Export-Package>info.kwarc.sally4.mathhubworker*;info.kwarc.sally.comm.mathhubworker*</Export-Package> + <Export-Package>info.kwarc.sally4.mathhubworker*;info.kwarc.sally.comm.mathhubworker*;libs*</Export-Package> </instructions> </configuration> </plugin> diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/MathHubWorker.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/MathHubWorker.java deleted file mode 100644 index cca57cf30b373ea73ac5b304d521fc4801caea11..0000000000000000000000000000000000000000 --- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/MathHubWorker.java +++ /dev/null @@ -1,5 +0,0 @@ -package info.kwarc.sally4.mathhubworker; - - -public interface MathHubWorker { -} diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/MathHubWorkerManager.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/MathHubWorkerManager.java new file mode 100644 index 0000000000000000000000000000000000000000..6807809ccc2bd3b6029c546e0dea2577d632dca0 --- /dev/null +++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/MathHubWorkerManager.java @@ -0,0 +1,8 @@ +package info.kwarc.sally4.mathhubworker; + +import info.kwarc.sally4.docmanager.AlexRoute; + + +public interface MathHubWorkerManager { + void addNewWorker(AlexRoute route); +} diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/WorkerWorkflow.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/LMHWorkflow.java similarity index 53% rename from MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/WorkerWorkflow.java rename to MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/LMHWorkflow.java index 2542a9016d55bf04e2ee370e517eb61dd4b62722..c97e6b97c474340874571f5c7fb265bed79293b2 100644 --- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/WorkerWorkflow.java +++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/LMHWorkflow.java @@ -1,9 +1,14 @@ package info.kwarc.sally4.mathhubworker.impl; import info.kwarc.sally4.core.CamelContextProvider; +import info.kwarc.sally4.core.SallyInteractionResultAcceptor; +import info.kwarc.sally4.core.SallyService; +import info.kwarc.sally4.core.SallyServiceProvider; import info.kwarc.sally4.docmanager.AlexRoute; import info.kwarc.sally4.docmanager.IDocWorkflow; -import info.kwarc.sally4.mathhubworker.routes.WorkerRoute; +import info.kwarc.sally4.mathhubworker.MathHubWorkerManager; +import info.kwarc.sally4.mathhubworker.internal.comm.GetLMHWorkers; +import info.kwarc.sally4.mathhubworker.routes.LMHRoute; import java.util.HashMap; import java.util.Map; @@ -21,22 +26,38 @@ import org.slf4j.LoggerFactory; @Component @Instantiate @Provides -public class WorkerWorkflow extends WorkflowCommon implements IDocWorkflow{ +public class LMHWorkflow extends WorkflowCommon implements IDocWorkflow, SallyServiceProvider { @Requires CamelContextProvider camelContextProvider; - Map<String, CamelContext> routeContexts; + @Requires + MathHubWorkerManager workerManager; + Map<String, CamelContext> routeContexts; + Map<String, String> routeWorkerIDs; + Logger log; - public WorkerWorkflow() { + public LMHWorkflow() { log = LoggerFactory.getLogger(getClass()); routeContexts = new HashMap<String, CamelContext>(); + routeWorkerIDs = new HashMap<String, String>(); } + public void setWorkerKey(String AlexRouteID, String workerID) { + routeWorkerIDs.put(AlexRouteID, workerID); + } + + @SallyService + public void getLMHWorkers(GetLMHWorkers click, SallyInteractionResultAcceptor acceptor, Exchange context) { + for (String s : routeWorkerIDs.values()) { + acceptor.acceptResult(s); + } + } + @Override public String[] getInterfaceRequirements() { - return new String[]{"mathhubworker"}; + return new String[]{"lmhworker"}; } @Override @@ -45,21 +66,28 @@ public class WorkerWorkflow extends WorkflowCommon implements IDocWorkflow{ } @Override - public boolean handleMessage(String namespace, String type, + public boolean handleMessage(AlexRoute route, String namespace, String type, Exchange exchange) { return false; } @Override - public void startRoutes(CamelContext camelContext, AlexRoute route) { - + public void startRoutes(CamelContext camelContext, final AlexRoute route) { + workerManager.addNewWorker(route); try { - camelContext.addRoutes(new WorkerRoute()); - log.info("MWH available at "+route.getAlexQueue()+ " and state "+route.getAlexStateQueue()); + camelContext.addRoutes(new LMHRoute(route, this)); camelContext.addComponent("mhw", route.getAlexComponent()); camelContext.start(); camelContext.createProducerTemplate().sendBody("direct:start", ""); + + route.addOnStopHandler(new Runnable() { + + @Override + public void run() { + routeWorkerIDs.remove(route.getID()); + } + }); } catch (Exception e) { e.printStackTrace(); } diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/PlanetaryClientWorkflow.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/PlanetaryClientWorkflow.java index 241630d8885701dc703fecb08e7f9d655613fd0e..82ebce787e221a117ae5f86272d5de4a6b802605 100644 --- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/PlanetaryClientWorkflow.java +++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/PlanetaryClientWorkflow.java @@ -1,13 +1,27 @@ package info.kwarc.sally4.mathhubworker.impl; +import info.kwarc.sally.comm.planetaryclient.NewService; import info.kwarc.sally4.core.CamelContextProvider; +import info.kwarc.sally4.core.SallyInteraction; import info.kwarc.sally4.docmanager.AlexRoute; import info.kwarc.sally4.docmanager.IDocWorkflow; -import info.kwarc.sally4.mathhubworker.routes.MathHubRoute; +import info.kwarc.sally4.marshalling.MarshallUtils; +import info.kwarc.sally4.mathhubworker.internal.comm.GetLMHWorkers; +import info.kwarc.sally4.mathhubworker.routes.PlanetaryClientRoute; import info.kwarc.sally4.planetary.PlanetaryConnection; +import info.kwarc.sally4.servlet.SallyServlet; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + +import javax.xml.ws.RequestWrapper; import org.apache.camel.CamelContext; import org.apache.camel.Exchange; +import org.apache.camel.Property; +import org.apache.camel.RecipientList; import org.apache.felix.ipojo.annotations.Component; import org.apache.felix.ipojo.annotations.Instantiate; import org.apache.felix.ipojo.annotations.Invalidate; @@ -19,13 +33,20 @@ import org.apache.felix.ipojo.annotations.Validate; @Instantiate @Provides public class PlanetaryClientWorkflow extends WorkflowCommon implements IDocWorkflow { + String planetaryClientNamespace = "http://kwarc.info/sally/comm/planetaryclient"; @Requires PlanetaryConnection conn; + + @Requires + SallyInteraction interact; @Requires CamelContextProvider camelContextProvider; + @Requires + SallyServlet t; + @Validate public void start() { } @@ -45,7 +66,7 @@ public class PlanetaryClientWorkflow extends WorkflowCommon implements IDocWorkf try { camelContext.start(); - camelContext.addRoutes(new MathHubRoute()); + camelContext.addRoutes(new PlanetaryClientRoute(this)); camelContext.createProducerTemplate().sendBody("direct:start", route); } catch (Exception e) { log.error(e.getMessage()); @@ -58,11 +79,56 @@ public class PlanetaryClientWorkflow extends WorkflowCommon implements IDocWorkf } public String[] getHandlingNamespaces() { - return new String[] {"http://kwarc.info/sally/comm/planetaryclient"}; + return new String[] { planetaryClientNamespace }; + } + + public List<String> getFreeAvailableKeys(Exchange e) { + @SuppressWarnings("unchecked") + List<HashMap<String, String>> takenKeys = (List<HashMap<String, String>>) e.getIn().getBody(List.class); + HashSet<String> taken = new HashSet<String>(); + for (HashMap<String, String> takenKey : takenKeys) { + taken.add(takenKey.get("key")); + } + List<String> result = new ArrayList<String>(); + List<String> availableKeys = interact.getPossibleInteractions(new GetLMHWorkers(), String.class, e); + for (String aKey : availableKeys) { + if (taken.contains(result)) + continue; + availableKeys.add(aKey); + } + return result; } - public boolean handleMessage(String namespace, String type, Exchange body) { + // very simple + public String getNewMHW(List<String> availableKeys, @Property("uid") Long uid) { + if (availableKeys.size()==0) + return null; + return availableKeys.get(0); + } + + public void addService(AlexRoute route, NewService serviceDesk) { + } + + public boolean handleMessage(AlexRoute route, String namespace, String type, Exchange exchange) { + CamelContext context = this.routeContexts.get(route.getID()); + if (context == null) // should not really happen + return false; + + log.info("responding to "+type); + if (type.equals("GetServices")) { + NewService serv = new NewService(); + String host = "http://localhost:8181/sally"; + serv.setIcon(host+"/planetary/libs/mhwsettings.png"); + serv.setId("mhwsettings"); + serv.setName("Math Hub Worker Settings"); + serv.setType("toolbar"); + serv.setUrl(host+"/planetary/mhwsettings?id="+route.getID()); + String xml = MarshallUtils.marshallToXML("planetaryclient", serv, getClass().getClassLoader()); + log.info("sending back"+xml); + exchange.getIn().setBody(xml); + return true; + } return false; } diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/model/GetLMHFile.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/model/GetLMHFile.java deleted file mode 100644 index bf4d9aed9c8135854b4a8c103de7abb94ec27bb8..0000000000000000000000000000000000000000 --- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/model/GetLMHFile.java +++ /dev/null @@ -1,6 +0,0 @@ -package info.kwarc.sally4.mathhubworker.model; - -public class GetLMHFile { - String session_id; - String filePath; -} diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/WorkerRoute.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/LMHRoute.java similarity index 59% rename from MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/WorkerRoute.java rename to MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/LMHRoute.java index 19c7ed508355eed4919fd7d412a720bb611f5f45..cde74a9dc2d17ba207711cb7b991b1b9f1fc2eb9 100644 --- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/WorkerRoute.java +++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/LMHRoute.java @@ -1,17 +1,28 @@ package info.kwarc.sally4.mathhubworker.routes; -import info.kwarc.sally.comm.CommUtils; import info.kwarc.sally.comm.mathhubworker.GetAuthKeyRequest; +import info.kwarc.sally.comm.mathhubworker.GetAuthKeyResponse; +import info.kwarc.sally4.docmanager.AlexRoute; +import info.kwarc.sally4.marshalling.CommUtils; +import info.kwarc.sally4.mathhubworker.impl.LMHWorkflow; import org.apache.camel.ExchangeTimedOutException; import org.apache.camel.LoggingLevel; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.spi.DataFormat; -public class WorkerRoute extends RouteBuilder { +public class LMHRoute extends RouteBuilder { - public WorkerRoute() { - + AlexRoute thisRoute; + LMHWorkflow thisWorklow; + + public LMHRoute(AlexRoute thisRoute, LMHWorkflow thisWorkflow) { + this.thisRoute = thisRoute; + this.thisWorklow = thisWorkflow; + } + + public void setWorkerKey(GetAuthKeyResponse response) { + thisWorklow.setWorkerKey(thisRoute.getID(), response.getAuthkey()); } @@ -33,7 +44,7 @@ public class WorkerRoute extends RouteBuilder { .stop() .doFinally() .unmarshal(worker) - .to("log:test>>>>"); + .bean(method(this, "setWorkerKey")); } } diff --git a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/MathHubRoute.java b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/PlanetaryClientRoute.java similarity index 69% rename from MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/MathHubRoute.java rename to MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/PlanetaryClientRoute.java index a0a092ce15f6c90b39c7eeb63faa00e0b1de1ce1..38f73f6306d78be5ba26b08d8dda7a8c4b0df5c5 100644 --- a/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/MathHubRoute.java +++ b/MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/PlanetaryClientRoute.java @@ -1,18 +1,22 @@ package info.kwarc.sally4.mathhubworker.routes; -import info.kwarc.sally.comm.CommUtils; import info.kwarc.sally.comm.planetaryclient.GetSessionIDRequest; import info.kwarc.sally.comm.planetaryclient.GetSessionIDResponse; +import info.kwarc.sally4.marshalling.CommUtils; +import info.kwarc.sally4.mathhubworker.impl.PlanetaryClientWorkflow; +import info.kwarc.sally4.processors.FileServeProcessor; import org.apache.camel.ExchangeTimedOutException; import org.apache.camel.LoggingLevel; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.spi.DataFormat; -public class MathHubRoute extends RouteBuilder { +public class PlanetaryClientRoute extends RouteBuilder { - public MathHubRoute() { - + PlanetaryClientWorkflow thisWorkflow; + + public PlanetaryClientRoute(PlanetaryClientWorkflow thisWorkflow) { + this.thisWorkflow = thisWorkflow; } public String getSessionID(GetSessionIDResponse response) { @@ -57,12 +61,22 @@ public class MathHubRoute extends RouteBuilder { .inOut("planetary:select 'key' from mhw_assignment where uid=#?outputType=SelectOne") .choice() .when(simple("${body} == null")) - .log(LoggingLevel.INFO, "MathHubRoute", ">>>> Need to assign a new MathHubWorker") - .to("direct:getNewMWH") +// .to("direct:getNewMHW") .endChoice(); - - from("direct:getNewMWH") - .log("Need to get some MathHubWorker .... "); + + /* + from("direct:getNewMHW") + // get already taken keys + .inOut("planetary:select 'key' from mhw_assignment") + // compute list of free and available keys + .bean(thisWorkflow, "getFreeAvailableKeys") + // choose one key based on user info + .bean(thisWorkflow, "getNewMHW") + .choice() + .when(simple("${body} == null")) + .end() + .endChoice() + */ } } diff --git a/MathHubWorker/src/main/resources/mathhubworker.xsd b/MathHubWorker/src/main/resources/mathhubworker.xsd index f511a6d2ade8c5c910a2d2814204167531fd3cfa..2f6b4d57192a4e1a89fff732351e92775240c91c 100644 --- a/MathHubWorker/src/main/resources/mathhubworker.xsd +++ b/MathHubWorker/src/main/resources/mathhubworker.xsd @@ -2,20 +2,4 @@ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://kwarc.info/sally/comm/mathhubworker" elementFormDefault="qualified"> - <xs:element name="GetAuthKeyRequest"> - <xs:complexType> - <xs:sequence> - </xs:sequence> - </xs:complexType> - </xs:element> - - - <xs:element name="GetAuthKeyResponse"> - <xs:complexType> - <xs:sequence> - <xs:element name="authkey" type="xs:string" /> - </xs:sequence> - </xs:complexType> - </xs:element> - </xs:schema> \ No newline at end of file diff --git a/activemq/pom.xml b/activemq/pom.xml index ebcda8c0ca916bba1676d01dac5c230c986a86d7..82d88f45eb19bfc82321e8468a08ca8ef129a0d6 100644 --- a/activemq/pom.xml +++ b/activemq/pom.xml @@ -30,7 +30,6 @@ <properties> <maven-bundle-plugin.version>2.4.0</maven-bundle-plugin.version> <osgi.version>5.0.0</osgi.version> - <camel.version>2.12.3</camel.version> </properties> <dependencies> diff --git a/core/pom.xml b/core/pom.xml index 4b36a5790de2e6a45929dd45663f3ceca407feb4..2dc6034557bf576922014c75521c3b1a97e5c97e 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -17,21 +17,9 @@ <properties> <maven-bundle-plugin.version>2.4.0</maven-bundle-plugin.version> <osgi.version>5.0.0</osgi.version> - <camel.version>2.12.3</camel.version> </properties> <dependencies> - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-freemarker</artifactId> - <version>${camel.version}</version> - </dependency> - - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-jaxb</artifactId> - <version>${camel.version}</version> - </dependency> <dependency> <groupId>org.apache.felix</groupId> @@ -46,6 +34,11 @@ <scope>provided</scope> </dependency> + <dependency> + <groupId>info.kwarc.sally4</groupId> + <artifactId>utils</artifactId> + <version>0.0.1-SNAPSHOT</version> + </dependency> </dependencies> diff --git a/core/src/main/java/info/kwarc/sally/comm/core/Heartbeatrequest.java b/core/src/main/java/info/kwarc/sally/comm/core/Heartbeatrequest.java index 6b83f96f8ac0c3c6dc7d58429d213860b6581dfe..8b226e056a980a36649a7a87cb8e14f35375656e 100644 --- a/core/src/main/java/info/kwarc/sally/comm/core/Heartbeatrequest.java +++ b/core/src/main/java/info/kwarc/sally/comm/core/Heartbeatrequest.java @@ -2,7 +2,7 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2014.04.13 at 10:53:19 PM CEST +// Generated on: 2014.04.17 at 03:49:09 PM CEST // diff --git a/core/src/main/java/info/kwarc/sally/comm/core/Heartbeatresponse.java b/core/src/main/java/info/kwarc/sally/comm/core/Heartbeatresponse.java index 22c3c3f21432747f32f4c8ebc374239117bb29ac..eac507c9b883d5e4d1093949fc77b14bf29ada6d 100644 --- a/core/src/main/java/info/kwarc/sally/comm/core/Heartbeatresponse.java +++ b/core/src/main/java/info/kwarc/sally/comm/core/Heartbeatresponse.java @@ -2,7 +2,7 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2014.04.13 at 10:53:19 PM CEST +// Generated on: 2014.04.17 at 03:49:09 PM CEST // diff --git a/core/src/main/java/info/kwarc/sally/comm/core/ObjectFactory.java b/core/src/main/java/info/kwarc/sally/comm/core/ObjectFactory.java index 0e6586a5305c229af5251d7adbf63d2c84792737..1469041bb77e14ae4adf6ec41e034e0890b1be50 100644 --- a/core/src/main/java/info/kwarc/sally/comm/core/ObjectFactory.java +++ b/core/src/main/java/info/kwarc/sally/comm/core/ObjectFactory.java @@ -2,7 +2,7 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2014.04.13 at 10:53:19 PM CEST +// Generated on: 2014.04.17 at 03:49:09 PM CEST // diff --git a/core/src/main/java/info/kwarc/sally/comm/core/Onsallyframe.java b/core/src/main/java/info/kwarc/sally/comm/core/Onsallyframe.java index 7df42101fc26919aebc8af2082009f8353d5a87f..1a288bb1f548e3271ec4c1920b106cfd412b9512 100644 --- a/core/src/main/java/info/kwarc/sally/comm/core/Onsallyframe.java +++ b/core/src/main/java/info/kwarc/sally/comm/core/Onsallyframe.java @@ -2,7 +2,7 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2014.04.13 at 10:53:19 PM CEST +// Generated on: 2014.04.17 at 03:49:09 PM CEST // diff --git a/core/src/main/java/info/kwarc/sally/comm/core/Registerdocument.java b/core/src/main/java/info/kwarc/sally/comm/core/Registerdocument.java index 9814854c64e86ef57f37f9343d725ea45b93ab1a..bf4a06f5ee3b378ee1f9de0f586111672cfe75f1 100644 --- a/core/src/main/java/info/kwarc/sally/comm/core/Registerdocument.java +++ b/core/src/main/java/info/kwarc/sally/comm/core/Registerdocument.java @@ -2,7 +2,7 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2014.04.13 at 10:53:19 PM CEST +// Generated on: 2014.04.17 at 03:49:09 PM CEST // @@ -29,7 +29,8 @@ import javax.xml.bind.annotation.XmlType; * <sequence> * <element name="documentqueue" type="{http://www.w3.org/2001/XMLSchema}string"/> * <element name="interfaces" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/> - * <element name="theoqueue" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="environmentid" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="userid" type="{http://www.w3.org/2001/XMLSchema}string"/> * </sequence> * </restriction> * </complexContent> @@ -42,7 +43,8 @@ import javax.xml.bind.annotation.XmlType; @XmlType(name = "", propOrder = { "documentqueue", "interfaces", - "theoqueue" + "environmentid", + "userid" }) @XmlRootElement(name = "registerdocument") public class Registerdocument { @@ -52,7 +54,9 @@ public class Registerdocument { @XmlElement(required = true) protected List<String> interfaces; @XmlElement(required = true) - protected String theoqueue; + protected String environmentid; + @XmlElement(required = true) + protected String userid; /** * Gets the value of the documentqueue property. @@ -108,27 +112,51 @@ public class Registerdocument { } /** - * Gets the value of the theoqueue property. + * Gets the value of the environmentid property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getEnvironmentid() { + return environmentid; + } + + /** + * Sets the value of the environmentid property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setEnvironmentid(String value) { + this.environmentid = value; + } + + /** + * Gets the value of the userid property. * * @return * possible object is * {@link String } * */ - public String getTheoqueue() { - return theoqueue; + public String getUserid() { + return userid; } /** - * Sets the value of the theoqueue property. + * Sets the value of the userid property. * * @param value * allowed object is * {@link String } * */ - public void setTheoqueue(String value) { - this.theoqueue = value; + public void setUserid(String value) { + this.userid = value; } } diff --git a/core/src/main/java/info/kwarc/sally/comm/core/Registerdocumentresponse.java b/core/src/main/java/info/kwarc/sally/comm/core/Registerdocumentresponse.java index 9defce7abc31e4c7ad5151b0a676f0e4d088c285..34e07e52d38889b2dedcd96331e5761e561a0a21 100644 --- a/core/src/main/java/info/kwarc/sally/comm/core/Registerdocumentresponse.java +++ b/core/src/main/java/info/kwarc/sally/comm/core/Registerdocumentresponse.java @@ -2,7 +2,7 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2014.04.13 at 10:53:19 PM CEST +// Generated on: 2014.04.17 at 03:49:09 PM CEST // diff --git a/core/src/main/java/info/kwarc/sally/comm/core/package-info.java b/core/src/main/java/info/kwarc/sally/comm/core/package-info.java index 434b0e10a9662d19db6b012e8e3640f5a9379504..266de15f4d00aefe675e229b806ecdd802f476f2 100644 --- a/core/src/main/java/info/kwarc/sally/comm/core/package-info.java +++ b/core/src/main/java/info/kwarc/sally/comm/core/package-info.java @@ -2,7 +2,7 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2014.04.13 at 10:53:19 PM CEST +// Generated on: 2014.04.17 at 03:49:09 PM CEST // @javax.xml.bind.annotation.XmlSchema(namespace = "http://kwarc.info/sally/comm/core", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) diff --git a/core/src/main/java/info/kwarc/sally4/core/FreeMarkerProcessor.java b/core/src/main/java/info/kwarc/sally4/core/FreeMarkerProcessor.java deleted file mode 100644 index 721299ebae42c4dfa223da6415316ca51e0d4a61..0000000000000000000000000000000000000000 --- a/core/src/main/java/info/kwarc/sally4/core/FreeMarkerProcessor.java +++ /dev/null @@ -1,7 +0,0 @@ -package info.kwarc.sally4.core; - -import org.apache.camel.Processor; - -public interface FreeMarkerProcessor { - Processor template(String path); -} diff --git a/core/src/main/java/info/kwarc/sally4/core/FreeMarkerProvider.java b/core/src/main/java/info/kwarc/sally4/core/FreeMarkerProvider.java deleted file mode 100644 index fe2457a6d349d2382e601c120cfcf267840a3a42..0000000000000000000000000000000000000000 --- a/core/src/main/java/info/kwarc/sally4/core/FreeMarkerProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package info.kwarc.sally4.core; - - -public interface FreeMarkerProvider { - FreeMarkerProcessor createFreeMarkerProcessor(ClassLoader classLoader, String prefix); -} diff --git a/core/src/main/java/info/kwarc/sally4/core/impl/ClassLoaderTemplateLoader.java b/core/src/main/java/info/kwarc/sally4/core/impl/ClassLoaderTemplateLoader.java deleted file mode 100644 index 4b6e9bedb016e059a3bb028b0fd8200dbc9fbc4c..0000000000000000000000000000000000000000 --- a/core/src/main/java/info/kwarc/sally4/core/impl/ClassLoaderTemplateLoader.java +++ /dev/null @@ -1,48 +0,0 @@ -package info.kwarc.sally4.core.impl; - -import java.net.URL; - -import freemarker.cache.URLTemplateLoader; - -public class ClassLoaderTemplateLoader extends URLTemplateLoader { - - ClassLoader classLoader; - String path; - - public ClassLoaderTemplateLoader(ClassLoader classLoader, String path) - { - this.classLoader = classLoader; - this.path = path; - } - - private static boolean isSchemeless(String fullPath) { - int i = 0; - int ln = fullPath.length(); - - // Skip a single initial /, as things like "/file:/..." might work: - if (i < ln && fullPath.charAt(i) == '/') i++; - - // Check if there's no ":" earlier than a '/', as the URLClassLoader - // could interpret that as an URL scheme: - while (i < ln) { - char c = fullPath.charAt(i); - if (c == '/') return true; - if (c == ':') return false; - i++; - } - return true; - } - - @Override - protected URL getURL(String name) { - String fullPath = path + name; - - // Block java.net.URLClassLoader exploits: - if (path.equals("/") && !isSchemeless(fullPath)) { - return null; - } - - return classLoader.getResource(fullPath); - } - -} diff --git a/core/src/main/java/info/kwarc/sally4/core/impl/FreeMarkerProcessorImpl.java b/core/src/main/java/info/kwarc/sally4/core/impl/FreeMarkerProcessorImpl.java deleted file mode 100644 index 4debecec308c6711eee02c395ddcd55a68d457ff..0000000000000000000000000000000000000000 --- a/core/src/main/java/info/kwarc/sally4/core/impl/FreeMarkerProcessorImpl.java +++ /dev/null @@ -1,32 +0,0 @@ -package info.kwarc.sally4.core.impl; - -import java.io.StringWriter; - -import freemarker.template.Configuration; -import freemarker.template.Template; -import info.kwarc.sally4.core.FreeMarkerProcessor; - -import org.apache.camel.Exchange; -import org.apache.camel.Processor; - -class FreeMarkerProcessorImpl implements FreeMarkerProcessor { - Configuration freeMarkerConfig; - String prefix; - - public FreeMarkerProcessorImpl(ClassLoader loader, String prefix) { - freeMarkerConfig = new Configuration(); - freeMarkerConfig .setTemplateLoader(new ClassLoaderTemplateLoader(loader, prefix)); - } - - public Processor template(final String path) { - return new Processor() { - - public void process(Exchange exchange) throws Exception { - Template template = freeMarkerConfig.getTemplate(path); - StringWriter writer = new StringWriter(); - template.process(exchange.getIn().getBody(), writer); - exchange.getOut().setBody(writer); - } - }; - } -} \ No newline at end of file diff --git a/core/src/main/java/info/kwarc/sally4/core/impl/FreeMarkerProviderImpl.java b/core/src/main/java/info/kwarc/sally4/core/impl/FreeMarkerProviderImpl.java deleted file mode 100644 index 452af079b5f33d78726ad58fa7fcbca16f289900..0000000000000000000000000000000000000000 --- a/core/src/main/java/info/kwarc/sally4/core/impl/FreeMarkerProviderImpl.java +++ /dev/null @@ -1,22 +0,0 @@ -package info.kwarc.sally4.core.impl; - -import info.kwarc.sally4.core.FreeMarkerProcessor; -import info.kwarc.sally4.core.FreeMarkerProvider; - -import org.apache.felix.ipojo.annotations.Component; -import org.apache.felix.ipojo.annotations.Instantiate; -import org.apache.felix.ipojo.annotations.Provides; - -@Component -@Provides -@Instantiate -public class FreeMarkerProviderImpl implements FreeMarkerProvider{ - - public FreeMarkerProviderImpl() { - } - - public FreeMarkerProcessor createFreeMarkerProcessor(ClassLoader classLoader, String prefix) { - return new FreeMarkerProcessorImpl(classLoader, prefix); - } - -} diff --git a/core/src/main/resources/core.xsd b/core/src/main/resources/core.xsd index fe2373f4446fca2c8f055abf80dabb6aee051687..fbfdd0ead40918f577836a2cd130ceac0014c1ac 100644 --- a/core/src/main/resources/core.xsd +++ b/core/src/main/resources/core.xsd @@ -8,7 +8,8 @@ <xs:element name="documentqueue" type="xs:string" /> <xs:element name="interfaces" type="xs:string" maxOccurs="unbounded" minOccurs="1"></xs:element> - <xs:element name="theoqueue" type="xs:string" /> + <xs:element name="environmentid" type="xs:string" /> + <xs:element name="userid" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> diff --git a/docmanager/pom.xml b/docmanager/pom.xml index a1d1e5c876a25e4be96c1f3e2e5a9d85c37365da..c9303c21a576834f3143d3dd4538de4bd8f4ea18 100644 --- a/docmanager/pom.xml +++ b/docmanager/pom.xml @@ -42,6 +42,12 @@ <artifactId>activemq</artifactId> <version>${sally4.version}</version> </dependency> + + <dependency> + <groupId>info.kwarc.sally4</groupId> + <artifactId>utils</artifactId> + <version>${sally4.version}</version> + </dependency> <dependency> <groupId>org.apache.felix</groupId> @@ -52,13 +58,13 @@ <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> - <version>2.12.3</version> + <version>${camel.version}</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-test</artifactId> - <version>2.12.3</version> + <version>${camel.version}</version> </dependency> <dependency> diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/AlexRoute.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/AlexRoute.java index 75912bdb07517c2b8701cc9374e0f400187897a8..b41d18c2521459f18cfafc3178ce50fa89649d54 100644 --- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/AlexRoute.java +++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/AlexRoute.java @@ -1,12 +1,14 @@ package info.kwarc.sally4.docmanager; -import info.kwarc.sally4.core.ProducerConsumerSplitterComponent; +import info.kwarc.sally4.components.ProducerConsumerSplitterComponent; public interface AlexRoute { public String getID(); public String getAlexStateQueue(); public String getAlexQueue(); + public String getEnvironmentID(); + public String getUserID(); public ProducerConsumerSplitterComponent getAlexComponent(); public void addOnStopHandler(Runnable r); diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/IDocWorkflow.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/IDocWorkflow.java index b7e435b3949c838233d8519e876ff946374e2dd8..009763aef063b4ae363f0866b3a38d7f030cc099 100644 --- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/IDocWorkflow.java +++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/IDocWorkflow.java @@ -6,6 +6,6 @@ public interface IDocWorkflow { String [] getInterfaceRequirements(); String [] getHandlingNamespaces(); - boolean handleMessage(String namespace, String type, Exchange exchange); + boolean handleMessage(AlexRoute route, String namespace, String type, Exchange exchange); void onNewDocument(AlexRoute route); } diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/TT.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/TT.java index bead3411bd2763140aadcbfc7dabf79533fb33bb..6b9263b7edd01b3c3bf75f33331595da2004fcc0 100644 --- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/TT.java +++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/TT.java @@ -1,7 +1,7 @@ package info.kwarc.sally4.docmanager; import info.kwarc.sally.comm.core.Registerdocument; -import info.kwarc.sally4.core.ProducerConsumerSplitterComponent; +import info.kwarc.sally4.components.ProducerConsumerSplitterComponent; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.camel.component.ActiveMQComponent; @@ -41,7 +41,7 @@ public class TT extends RouteBuilder { System.out.println("starting my stuff"); Registerdocument reg = new Registerdocument(); reg.setDocumentqueue("client123"); - reg.setTheoqueue("theo"); + reg.setEnvironmentid("theo"); reg.getInterfaces().add("test"); temp.sendBody("direct:client-register", reg); } diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/TestMain.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/TestMain.java index a5f852608a6aa6e8b10172352710e31314f44eed..4563d6a20c83d75bc1523268a351d44ada5a27af 100644 --- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/TestMain.java +++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/TestMain.java @@ -1,12 +1,12 @@ package info.kwarc.sally4.docmanager; -import info.kwarc.sally.comm.BodyHasType; -import info.kwarc.sally.comm.CommUtils; import info.kwarc.sally.comm.core.Heartbeatrequest; import info.kwarc.sally.comm.core.Heartbeatresponse; import info.kwarc.sally.comm.core.Registerdocument; import info.kwarc.sally.comm.core.Registerdocumentresponse; import info.kwarc.sally4.docmanager.routes.SallyRegisterRoute; +import info.kwarc.sally4.marshalling.CommUtils; +import info.kwarc.sally4.predicates.BodyHasType; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.camel.component.ActiveMQComponent; @@ -47,7 +47,8 @@ public class TestMain extends RouteBuilder { System.out.println("starting my stuff"); Registerdocument reg = new Registerdocument(); reg.setDocumentqueue("client123"); - reg.setTheoqueue("theo"); + reg.setEnvironmentid("1234"); + reg.setUserid("myuser"); reg.getInterfaces().add("planetaryclient"); temp.sendBody("direct:client-register", reg); } diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/AlexRouteImpl.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/AlexRouteImpl.java index 9a74e0436855c4a6055ae483e82d501d23d566b3..51bac57e6aa13cf5044a07e026e2f206f1b7679e 100644 --- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/AlexRouteImpl.java +++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/AlexRouteImpl.java @@ -1,8 +1,9 @@ package info.kwarc.sally4.docmanager.impl; -import info.kwarc.sally4.core.ProducerConsumerSplitterComponent; +import info.kwarc.sally4.components.ProducerConsumerSplitterComponent; import info.kwarc.sally4.docmanager.AlexRoute; import info.kwarc.sally4.docmanager.IDocWorkflow; +import info.kwarc.sally4.processors.EnrichMessageProperties; import java.util.ArrayDeque; import java.util.ArrayList; @@ -14,6 +15,7 @@ import java.util.Queue; import java.util.UUID; import org.apache.camel.Exchange; +import org.apache.camel.Header; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,11 +23,14 @@ import org.slf4j.LoggerFactory; public class AlexRouteImpl implements AlexRoute { String alexQueue; - String theoQueue; + String environmentid; + String userid; + HashSet<String> interfaces; List<Runnable> stopHandlers; Queue<IDocWorkflow> workflows; + String ID; Logger log; @@ -35,14 +40,25 @@ public class AlexRouteImpl implements AlexRoute { //"/queue/sally_doc_"+UUID.randomUUID().toString() return "sally_doc_"+doc_queue; } + + public String getEnvironmentid() { + return environmentid; + } - protected void forwardMessage(String namespace, String msgType, Exchange e) { + public String getUserid() { + return userid; + } + + public void forwardMessage(Exchange e, + @Header(EnrichMessageProperties.MessageNamespace) String namespace, + @Header(EnrichMessageProperties.MessageType) String msgType) { + Iterator<IDocWorkflow> iter = workflows.iterator(); while (iter.hasNext()) { IDocWorkflow work = iter.next(); for (String s : work.getHandlingNamespaces()) { if (s.equals(namespace)) { - if (work.handleMessage(namespace, msgType, e)) { + if (work.handleMessage(this, namespace, msgType, e)) { return; } } @@ -50,14 +66,17 @@ public class AlexRouteImpl implements AlexRoute { } } - public AlexRouteImpl(String alexQueue, String theoQueue, Collection<String> interfaces) { + public AlexRouteImpl(String alexQueue, String environmentid, String userid, Collection<String> interfaces) { log = LoggerFactory.getLogger(getClass()); this.alexQueue = alexQueue; - this.theoQueue = theoQueue; + this.environmentid = environmentid; + this.userid = userid; + this.interfaces = new HashSet<String>(interfaces); this.alexStateQueue = generateUUID(alexQueue); stopHandlers = new ArrayList<Runnable>(); workflows = new ArrayDeque<IDocWorkflow>(); + ID = UUID.randomUUID().toString(); } public void addDocumentWorkflow(IDocWorkflow workflow) { @@ -97,11 +116,23 @@ public class AlexRouteImpl implements AlexRoute { @Override public String getID() { - return UUID.randomUUID().toString(); + return ID; } @Override public ProducerConsumerSplitterComponent getAlexComponent() { return new ProducerConsumerSplitterComponent("activemq:queue:"+alexStateQueue, "activemq:queue:"+alexQueue); } + + @Override + public String getEnvironmentID() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getUserID() { + // TODO Auto-generated method stub + return null; + } } diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DocumentManagerImpl.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DocumentManagerImpl.java index 1ccf4c6d6ba6b6c2d6d8c2f2bd1d409c937b6a8d..90edf9894c00e452426661ac5534e9b8f9c5f41d 100644 --- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DocumentManagerImpl.java +++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DocumentManagerImpl.java @@ -6,6 +6,7 @@ import info.kwarc.sally4.core.CamelContextProvider; import info.kwarc.sally4.docmanager.AlexRoute; import info.kwarc.sally4.docmanager.DocumentManager; import info.kwarc.sally4.docmanager.IDocWorkflow; +import info.kwarc.sally4.docmanager.routes.DocumentManagementRoute; import info.kwarc.sally4.docmanager.routes.SallyRegisterRoute; import java.util.Arrays; @@ -31,7 +32,7 @@ import org.slf4j.LoggerFactory; @Provides public class DocumentManagerImpl implements DocumentManager { - @Requires + @Requires(optional=true) IDocWorkflow[] workflows; @Requires @@ -58,8 +59,14 @@ public class DocumentManagerImpl implements DocumentManager { if (docs.containsKey(doc.getDocumentqueue())) return docs.get(doc.getDocumentqueue()); - AlexRouteImpl route = new AlexRouteImpl(doc.getDocumentqueue(), doc.getTheoqueue(), doc.getInterfaces()); - + final AlexRouteImpl route = new AlexRouteImpl(doc.getDocumentqueue(), doc.getEnvironmentid(), doc.getUserid(), doc.getInterfaces()); + route.addOnStopHandler(new Runnable() { + + @Override + public void run() { + docs.remove(route.getAlexQueue()); + } + }); docs.put(doc.getDocumentqueue(), route); return route; @@ -73,9 +80,15 @@ public class DocumentManagerImpl implements DocumentManager { } } } + + public HashMap<String, Object> prepareDocManagement() { + HashMap<String, Object> result = new HashMap<String, Object>(); + result.put("routes", docs.values()); + return result; + } - @Bind(aggregate=true) + @Bind(aggregate=true, optional=true) private void bindWorkflow(IDocWorkflow workflow) { HashSet<String> required = new HashSet<String>(Arrays.asList(workflow.getInterfaceRequirements())); @@ -86,7 +99,7 @@ public class DocumentManagerImpl implements DocumentManager { } } - @Unbind + @Unbind(aggregate=true, optional=true) private void unbindWorkflow(IDocWorkflow workflow) { for (AlexRouteImpl route : docs.values()) { @@ -100,7 +113,9 @@ public class DocumentManagerImpl implements DocumentManager { try { camelContext = new DefaultCamelContext(); camelContext.addComponent("activemq", camelContextProvider.getComponent("activemq")); + camelContext.addComponent("sallyservlet", camelContextProvider.getComponent("sallyservlet")); camelContext.addRoutes(registerRoute); + camelContext.addRoutes(new DocumentManagementRoute(this)); camelContext.start(); } catch (Exception e) { log.info(e.getMessage()); diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DummyWorkflow.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DummyWorkflow.java deleted file mode 100644 index 4178bcc0bb0f0d16b04ef2eaa73fe6fc34430e0e..0000000000000000000000000000000000000000 --- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DummyWorkflow.java +++ /dev/null @@ -1,36 +0,0 @@ -package info.kwarc.sally4.docmanager.impl; - -import info.kwarc.sally4.docmanager.AlexRoute; -import info.kwarc.sally4.docmanager.IDocWorkflow; - -import org.apache.camel.Exchange; -import org.apache.felix.ipojo.annotations.Component; -import org.apache.felix.ipojo.annotations.Instantiate; -import org.apache.felix.ipojo.annotations.Provides; - -@Component -@Instantiate -@Provides -public class DummyWorkflow implements IDocWorkflow { - - @Override - public String[] getInterfaceRequirements() { - return new String[]{"SomeNearlyImpossibleInterfaceRequirement"}; - } - - @Override - public String[] getHandlingNamespaces() { - return new String[]{}; - } - - @Override - public boolean handleMessage(String namespace, String type, - Exchange exchange) { - return false; - } - - @Override - public void onNewDocument(AlexRoute route) { - } - -} diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/routes/SallyAlexRoute.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/routes/SallyAlexRoute.java index edb9724f72964f6a166b1d3ae1ddf9f0412a467a..b7251f4676e26f476e293c565daca4024b5edac9 100644 --- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/routes/SallyAlexRoute.java +++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/routes/SallyAlexRoute.java @@ -1,10 +1,10 @@ package info.kwarc.sally4.docmanager.routes; -import info.kwarc.sally.comm.CommUtils; import info.kwarc.sally.comm.core.Heartbeatrequest; import info.kwarc.sally4.docmanager.impl.AlexRouteImpl; -import info.kwarc.sally4.docmanager.impl.AlexRouteMessageProcessor; import info.kwarc.sally4.docmanager.impl.DocumentManagerImpl; +import info.kwarc.sally4.marshalling.CommUtils; +import info.kwarc.sally4.processors.EnrichMessageProperties; import org.apache.camel.ExchangeTimedOutException; import org.apache.camel.builder.RouteBuilder; @@ -15,7 +15,7 @@ import org.slf4j.LoggerFactory; public class SallyAlexRoute extends RouteBuilder { Logger log; - AlexRouteImpl route; + AlexRouteImpl thisAlexRoute; DocumentManagerImpl docManager; public Heartbeatrequest generateHeartbeat() { @@ -23,17 +23,17 @@ public class SallyAlexRoute extends RouteBuilder { } public void stopSallyRoute() { - route.stop(); + thisAlexRoute.stop(); } - SallyAlexRoute(AlexRouteImpl route) { + SallyAlexRoute(AlexRouteImpl thisAlexRoute) { log = LoggerFactory.getLogger(getClass()); - this.route = route; + this.thisAlexRoute = thisAlexRoute; } @Override public void configure() throws Exception { - DataFormat core = CommUtils.getDataFormat("core"); + DataFormat core = CommUtils.getDataFormat("core", getClass().getClassLoader()); /** * Sends a Heartbeat message to the Alex. if it does not respond after 20sec, this route will shutdown. @@ -51,8 +51,9 @@ public class SallyAlexRoute extends RouteBuilder { */ from("alex:defaultin") .convertBodyTo(String.class) - .process(new AlexRouteMessageProcessor(route)) - .to("alex:defaultout"); + .process(new EnrichMessageProperties()) + .bean(thisAlexRoute, "forwardMessage"); + //.to("alex:defaultout"); } diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/routes/SallyRegisterRoute.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/routes/SallyRegisterRoute.java index 70e671ca3815d8e2529708279ba24622436b9a3e..446b9a4fa71f8313969331ad09344ba4e39d3e9b 100644 --- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/routes/SallyRegisterRoute.java +++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/routes/SallyRegisterRoute.java @@ -1,9 +1,9 @@ package info.kwarc.sally4.docmanager.routes; -import info.kwarc.sally.comm.CommUtils; import info.kwarc.sally.comm.core.Registerdocumentresponse; import info.kwarc.sally4.docmanager.impl.AlexRouteImpl; import info.kwarc.sally4.docmanager.impl.DocumentManagerImpl; +import info.kwarc.sally4.marshalling.CommUtils; import org.apache.camel.CamelContext; import org.apache.camel.ExchangePattern; @@ -50,7 +50,7 @@ public class SallyRegisterRoute extends RouteBuilder { @Override public void configure() throws Exception { - DataFormat core = CommUtils.getDataFormat("core"); + DataFormat core = CommUtils.getDataFormat("core", getClass().getClassLoader()); from("activemq:queue:"+sallyRegisterQueue) .unmarshal(core) diff --git a/docmanager/src/main/resources/templates/test.html b/docmanager/src/main/resources/templates/test.html index c2f9c04f51487c7041c02c1f296dcdbdbff7e81d..7aae485c80c5adb707456880417421c1f88ef0ef 100644 --- a/docmanager/src/main/resources/templates/test.html +++ b/docmanager/src/main/resources/templates/test.html @@ -1 +1,28 @@ -Hello from template \ No newline at end of file +<h1>Document Manager</h1> + +List of Alexes +<table> + <thead> + <tr><th>AlexQueue</th><th>Interfaces</th><th>environment id</th><th>user id</th></tr> + </thead> + <tbody> + <#list body.routes as route> + <tr> + <td> + ${route.getAlexQueue()} + </td> + <td> + <#list route.getInterfaces() as iface> + ${iface} + </#list> + </td> + <td> + ${route.getEnvironmentid()!"missing environment"} + </td> + <td> + ${route.getUserid()!"missing user id"} + </td> + </tr> + </#list> + </tbody> +</table> diff --git a/mmt/pom.xml b/mmt/pom.xml index adddee541687acc27a446bccd0e3ed07e3e302ee..a8f4ffe777d793e7432a750c6900ebf9486b819b 100644 --- a/mmt/pom.xml +++ b/mmt/pom.xml @@ -39,7 +39,7 @@ <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> - <version>2.12.3</version> + <version>${camel.version}</version> </dependency> <dependency> diff --git a/planetary/pom.xml b/planetary/pom.xml index a0c22c8af16151932ed4f754269db989858b2915..5a1bd54aaa0381dc3f294d6c5771e7176e35eb99 100644 --- a/planetary/pom.xml +++ b/planetary/pom.xml @@ -45,7 +45,7 @@ <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> - <version>2.12.3</version> + <version>${camel.version}</version> </dependency> <dependency> @@ -63,7 +63,7 @@ <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-sql</artifactId> - <version>2.12.3</version> + <version>${camel.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> diff --git a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetServices.java b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetServices.java index e1bd8d3b63413f2e86c66cb4a60982a3ddd585f6..d76cdb4d10b30effdc077057f71c1e807d4c9700 100644 --- a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetServices.java +++ b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetServices.java @@ -2,7 +2,7 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2014.04.14 at 11:27:21 PM CEST +// Generated on: 2014.04.17 at 11:52:15 AM CEST // diff --git a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDRequest.java b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDRequest.java index 80fe5284f4a332f6fe44608cb58373d3a7ca35ae..bfabeb09cb9e90fd6f5cc4d85447f860449b0ffb 100644 --- a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDRequest.java +++ b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDRequest.java @@ -2,7 +2,7 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2014.04.14 at 11:27:21 PM CEST +// Generated on: 2014.04.17 at 11:52:15 AM CEST // diff --git a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDResponse.java b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDResponse.java index a232d3d29036cdae1f46cbfd54d2f01f05f0d4f6..a3e4540aca15f4f5c14987742235fe92851c3085 100644 --- a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDResponse.java +++ b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/GetSessionIDResponse.java @@ -2,7 +2,7 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2014.04.14 at 11:27:21 PM CEST +// Generated on: 2014.04.17 at 11:52:15 AM CEST // diff --git a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/ObjectFactory.java b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/ObjectFactory.java index a8893b7aae3824700c2aca42eb02ef497812e69d..ff4bd416ccf3738f5ccbb1f9f89b22438356127d 100644 --- a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/ObjectFactory.java +++ b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/ObjectFactory.java @@ -2,7 +2,7 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2014.04.14 at 11:27:21 PM CEST +// Generated on: 2014.04.17 at 11:52:15 AM CEST // @@ -52,6 +52,14 @@ public class ObjectFactory { return new GetSessionIDRequest(); } + /** + * Create an instance of {@link NewService } + * + */ + public NewService createNewService() { + return new NewService(); + } + /** * Create an instance of {@link GetServices } * diff --git a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/package-info.java b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/package-info.java index 0655923e04b4829a7dbc5d06e302bd27f6fdfd22..a1f87af04a92f21603565140175e3cc0efdee428 100644 --- a/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/package-info.java +++ b/planetary/src/main/java/info/kwarc/sally/comm/planetaryclient/package-info.java @@ -2,7 +2,7 @@ // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> // Any modifications to this file will be lost upon recompilation of the source schema. -// Generated on: 2014.04.14 at 11:27:21 PM CEST +// Generated on: 2014.04.17 at 11:52:15 AM CEST // @javax.xml.bind.annotation.XmlSchema(namespace = "http://kwarc.info/sally/comm/planetaryclient", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) diff --git a/planetary/src/main/resources/planetaryclient.xsd b/planetary/src/main/resources/planetaryclient.xsd index 6139dd48440599a50c2ac332f73d5e32bb49ed59..4812246922d6c6694921c14bccd033277815a240 100644 --- a/planetary/src/main/resources/planetaryclient.xsd +++ b/planetary/src/main/resources/planetaryclient.xsd @@ -1,6 +1,7 @@ <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" - targetNamespace="http://kwarc.info/sally/comm/planetaryclient" elementFormDefault="qualified"> + targetNamespace="http://kwarc.info/sally/comm/planetaryclient" + elementFormDefault="qualified"> <xs:element name="GetSessionIDRequest"> <xs:complexType> @@ -23,5 +24,16 @@ </xs:complexType> </xs:element> + <xs:element name="NewService"> + <xs:complexType> + <xs:sequence> + <xs:element name="id" type="xs:string"></xs:element> + <xs:element name="type" type="xs:string"></xs:element> + <xs:element name="name" type="xs:string"></xs:element> + <xs:element name="icon" type="xs:string"></xs:element> + <xs:element name="url" type="xs:string"></xs:element> + </xs:sequence> + </xs:complexType> + </xs:element> </xs:schema> \ No newline at end of file diff --git a/pom.xml b/pom.xml index fd93a17a8c460a1e61143aa97d953a36c45cd2d0..609728856f6827f94d00d5e2728f2dc4041a09f9 100644 --- a/pom.xml +++ b/pom.xml @@ -10,10 +10,12 @@ <name>Sally Project</name> <properties> - <sally4.version>0.0.2-SNAPSHOT</sally4.version> + <sally4.version>0.0.3-SNAPSHOT</sally4.version> + <camel.version>2.12.3</camel.version> </properties> <modules> + <module>utils</module> <module>core</module> <module>docmanager</module> <module>planetary</module> diff --git a/servlet/pom.xml b/servlet/pom.xml index 8e66f8ff86f10b096045cedf32d0ac883da3245e..e14766bface298a8b76d7518fea0f7f9751e6ad7 100644 --- a/servlet/pom.xml +++ b/servlet/pom.xml @@ -32,7 +32,6 @@ <properties> <maven-bundle-plugin.version>2.4.0</maven-bundle-plugin.version> <osgi.version>5.0.0</osgi.version> - <camel.version>2.12.3</camel.version> </properties> <dependencies> diff --git a/servlet/src/main/java/info/kwarc/sally4/servlet/impl/ServletImpl.java b/servlet/src/main/java/info/kwarc/sally4/servlet/impl/ServletImpl.java index abfa7876de7bc27556a8741543894da7a3b39c5d..a9fab6c4f7166b29552237b1f5ef8e90f5ef423c 100644 --- a/servlet/src/main/java/info/kwarc/sally4/servlet/impl/ServletImpl.java +++ b/servlet/src/main/java/info/kwarc/sally4/servlet/impl/ServletImpl.java @@ -34,6 +34,7 @@ public class ServletImpl implements SallyServlet { ServletComponent servletComponent = new ServletComponent(); servletComponent.setServletName(srvlet.getServletName()); camelContextProvider.registerGlobalComponent("sallyservlet", servletComponent); + } @Invalidate diff --git a/utils/.classpath b/utils/.classpath new file mode 100644 index 0000000000000000000000000000000000000000..efcf778ba09971dc34cdd589c088c9710e5a5ad4 --- /dev/null +++ b/utils/.classpath @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" output="target/classes" path="src/main/java"> + <attributes> + <attribute name="optional" value="true"/> + <attribute name="maven.pomderived" value="true"/> + </attributes> + </classpathentry> + <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> + <attributes> + <attribute name="maven.pomderived" value="true"/> + </attributes> + </classpathentry> + <classpathentry kind="src" output="target/test-classes" path="src/test/java"> + <attributes> + <attribute name="optional" value="true"/> + <attribute name="maven.pomderived" value="true"/> + </attributes> + </classpathentry> + <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> + <attributes> + <attribute name="maven.pomderived" value="true"/> + </attributes> + </classpathentry> + <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> + <attributes> + <attribute name="maven.pomderived" value="true"/> + </attributes> + </classpathentry> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"> + <attributes> + <attribute name="maven.pomderived" value="true"/> + </attributes> + </classpathentry> + <classpathentry kind="output" path="target/classes"/> +</classpath> diff --git a/utils/.project b/utils/.project new file mode 100644 index 0000000000000000000000000000000000000000..e941e834aa95991d954f101f4a4e38150f46e35a --- /dev/null +++ b/utils/.project @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>utils</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.m2e.core.maven2Builder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.eclipse.m2e.core.maven2Nature</nature> + </natures> +</projectDescription> diff --git a/utils/.settings/org.eclipse.jdt.core.prefs b/utils/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..60105c1b9516ec7dc540970605e57f7ffe09e368 --- /dev/null +++ b/utils/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/utils/.settings/org.eclipse.m2e.core.prefs b/utils/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65 --- /dev/null +++ b/utils/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/utils/pom.xml b/utils/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..129f33e855fdd17387c7aeda3baf0e2cb0519298 --- /dev/null +++ b/utils/pom.xml @@ -0,0 +1,66 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>info.kwarc.sally4</groupId> + <artifactId>utils</artifactId> + <version>${sally4.version}</version> + <packaging>bundle</packaging> + + <parent> + <groupId>info.kwarc.sally</groupId> + <artifactId>sally</artifactId> + <version>1.0</version> + <relativePath>..</relativePath> + </parent> + + <dependencies> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-freemarker</artifactId> + <version>${camel.version}</version> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + <version>1.7.7</version> + </dependency> + + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-jaxb</artifactId> + <version>${camel.version}</version> + </dependency> + + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <version>2.4.0</version> + <extensions>true</extensions> + <configuration> + <instructions> + <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> + <Export-Package>info.kwarc.sally4*</Export-Package> + <Import-Package>*;</Import-Package> + </instructions> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-ipojo-plugin</artifactId> + <version>1.11.2</version> + <executions> + <execution> + <goals> + <goal>ipojo-bundle</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file diff --git a/core/src/main/java/info/kwarc/sally4/core/ProducerConsumerSplitterComponent.java b/utils/src/main/java/info/kwarc/sally4/components/ProducerConsumerSplitterComponent.java similarity index 98% rename from core/src/main/java/info/kwarc/sally4/core/ProducerConsumerSplitterComponent.java rename to utils/src/main/java/info/kwarc/sally4/components/ProducerConsumerSplitterComponent.java index 68662fde27bffddeb9d060c170878b8e6634bfa6..f0746da09b3015a41552a37a5b589dad1254265e 100644 --- a/core/src/main/java/info/kwarc/sally4/core/ProducerConsumerSplitterComponent.java +++ b/utils/src/main/java/info/kwarc/sally4/components/ProducerConsumerSplitterComponent.java @@ -1,4 +1,4 @@ -package info.kwarc.sally4.core; +package info.kwarc.sally4.components; import java.util.Map; diff --git a/utils/src/main/java/info/kwarc/sally4/components/TemplatingComponent.java b/utils/src/main/java/info/kwarc/sally4/components/TemplatingComponent.java new file mode 100644 index 0000000000000000000000000000000000000000..32820a187454cb0105c3461e37fd78d235984b8e --- /dev/null +++ b/utils/src/main/java/info/kwarc/sally4/components/TemplatingComponent.java @@ -0,0 +1,76 @@ +package info.kwarc.sally4.components; + +import java.net.URL; + +import org.apache.camel.component.freemarker.FreemarkerComponent; + +import freemarker.cache.URLTemplateLoader; +import freemarker.template.Configuration; + +public class TemplatingComponent extends FreemarkerComponent { + String prefix; + ClassLoader classLoader; + Configuration freeMarkerConfig; + + public static class ClassLoaderTemplateLoader extends URLTemplateLoader { + + ClassLoader classLoader; + String path; + + public ClassLoaderTemplateLoader(ClassLoader classLoader, String path) + { + this.classLoader = classLoader; + this.path = path; + } + + private static boolean isSchemeless(String fullPath) { + int i = 0; + int ln = fullPath.length(); + + // Skip a single initial /, as things like "/file:/..." might work: + if (i < ln && fullPath.charAt(i) == '/') i++; + + // Check if there's no ":" earlier than a '/', as the URLClassLoader + // could interpret that as an URL scheme: + while (i < ln) { + char c = fullPath.charAt(i); + if (c == '/') return true; + if (c == ':') return false; + i++; + } + return true; + } + + @Override + protected URL getURL(String name) { + String fullPath = path + name; + + // Block java.net.URLClassLoader exploits: + if (path.equals("/") && !isSchemeless(fullPath)) { + return null; + } + + return classLoader.getResource(fullPath); + } + + } + + public TemplatingComponent(String prefix, ClassLoader classLoader) { + this.prefix = prefix; + this.classLoader = classLoader; + init(); + } + + public TemplatingComponent(String prefix) { + this.prefix = prefix; + this.classLoader = getClass().getClassLoader(); + init(); + } + + private void init() { + freeMarkerConfig = new Configuration(); + freeMarkerConfig .setTemplateLoader(new ClassLoaderTemplateLoader(classLoader, prefix)); + setConfiguration(freeMarkerConfig); + } + +} diff --git a/core/src/main/java/info/kwarc/sally/comm/CommUtils.java b/utils/src/main/java/info/kwarc/sally4/marshalling/CommUtils.java similarity index 95% rename from core/src/main/java/info/kwarc/sally/comm/CommUtils.java rename to utils/src/main/java/info/kwarc/sally4/marshalling/CommUtils.java index f8f7ebfa1825f0797ed0ec83ac946dd956fc57c1..fb0993098e0adaa1be84c5b6c5b291fa3a9a1440 100644 --- a/core/src/main/java/info/kwarc/sally/comm/CommUtils.java +++ b/utils/src/main/java/info/kwarc/sally4/marshalling/CommUtils.java @@ -1,4 +1,4 @@ -package info.kwarc.sally.comm; +package info.kwarc.sally4.marshalling; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; diff --git a/core/src/main/java/info/kwarc/sally/comm/MarshallUtils.java b/utils/src/main/java/info/kwarc/sally4/marshalling/MarshallUtils.java similarity index 82% rename from core/src/main/java/info/kwarc/sally/comm/MarshallUtils.java rename to utils/src/main/java/info/kwarc/sally4/marshalling/MarshallUtils.java index 3911b9796d46e6cdce704e3f78ef4156bfc05e4a..749784052fc0024025e43283d8ecb731b6cad052 100644 --- a/core/src/main/java/info/kwarc/sally/comm/MarshallUtils.java +++ b/utils/src/main/java/info/kwarc/sally4/marshalling/MarshallUtils.java @@ -1,4 +1,4 @@ -package info.kwarc.sally.comm; +package info.kwarc.sally4.marshalling; import java.io.StringReader; @@ -15,10 +15,10 @@ public class MarshallUtils { public MarshallUtils() { } - public static String marshallToXML(String iFace, Object obj) { + public static String marshallToXML(String iFace, Object obj, ClassLoader loader) { try { StringWriter writer = new StringWriter(); - JAXBContext jc = JAXBContext.newInstance( "info.kwarc.sally.comm."+iFace ); + JAXBContext jc = JAXBContext.newInstance( "info.kwarc.sally.comm."+iFace, loader); Marshaller m = jc.createMarshaller(); m.marshal(obj, writer); return writer.toString(); @@ -28,10 +28,10 @@ public class MarshallUtils { } } - public static Object unmarshallFromXML(String iFace, String xml) { + public static Object unmarshallFromXML(String iFace, String xml, ClassLoader loader) { try { StringReader reader = new StringReader(xml); - JAXBContext jc = JAXBContext.newInstance( "info.kwarc.sally.comm."+iFace ); + JAXBContext jc = JAXBContext.newInstance( "info.kwarc.sally.comm."+iFace, loader); Unmarshaller m = jc.createUnmarshaller(); return m.unmarshal(reader); } catch (JAXBException e) { diff --git a/core/src/main/java/info/kwarc/sally/comm/BodyHasType.java b/utils/src/main/java/info/kwarc/sally4/predicates/BodyHasType.java similarity index 91% rename from core/src/main/java/info/kwarc/sally/comm/BodyHasType.java rename to utils/src/main/java/info/kwarc/sally4/predicates/BodyHasType.java index 344b033c17cfaad01a46aa2961969f75bcdffbe6..cca5ad645577f808076a72a2bb2de51d1fc669a5 100644 --- a/core/src/main/java/info/kwarc/sally/comm/BodyHasType.java +++ b/utils/src/main/java/info/kwarc/sally4/predicates/BodyHasType.java @@ -1,4 +1,4 @@ -package info.kwarc.sally.comm; +package info.kwarc.sally4.predicates; import org.apache.camel.Exchange; import org.apache.camel.Predicate; diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/AlexRouteMessageProcessor.java b/utils/src/main/java/info/kwarc/sally4/processors/EnrichMessageProperties.java similarity index 63% rename from docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/AlexRouteMessageProcessor.java rename to utils/src/main/java/info/kwarc/sally4/processors/EnrichMessageProperties.java index 31c965caf1034c4c26b573ac637dda0515000d6e..f56a3550bc591e5cae7391e9548a3380ad58f7fd 100644 --- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/AlexRouteMessageProcessor.java +++ b/utils/src/main/java/info/kwarc/sally4/processors/EnrichMessageProperties.java @@ -1,4 +1,4 @@ -package info.kwarc.sally4.docmanager.impl; +package info.kwarc.sally4.processors; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -6,26 +6,23 @@ import java.util.regex.Pattern; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -public class AlexRouteMessageProcessor implements Processor { - AlexRouteImpl route; +public class EnrichMessageProperties implements Processor { + + static final public String MessageType = "XMLMessageType"; + static final public String MessageNamespace = "XMLMessageNamespace"; Logger log; Pattern xmlNamespace = Pattern.compile("<(\\w+)\\s+xmlns=\"([\\w/:.]+)\"/>"); - - public AlexRouteMessageProcessor(AlexRouteImpl route) { - this.route = route; - log = LoggerFactory.getLogger(getClass()); - } - + public void process(Exchange exchange) throws Exception { Matcher m = xmlNamespace.matcher(exchange.getIn().getBody(String.class)); if (m.find()) { String msgType = m.group(1); String namespace = m.group(2); - route.forwardMessage(namespace, msgType, exchange); + exchange.getIn().setHeader(MessageType, msgType); + exchange.getIn().setHeader(MessageNamespace, namespace); } else { exchange.setException(new Exception("Could not detect namespace in incoming message")); } diff --git a/utils/src/main/java/info/kwarc/sally4/processors/FileServeProcessor.java b/utils/src/main/java/info/kwarc/sally4/processors/FileServeProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..0d5fb610dcadfd4aafd7d7b4dd1cfa39d72da1fe --- /dev/null +++ b/utils/src/main/java/info/kwarc/sally4/processors/FileServeProcessor.java @@ -0,0 +1,45 @@ +package info.kwarc.sally4.processors; + +import java.io.InputStream; +import java.net.URLConnection; +import java.util.regex.Pattern; + +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class FileServeProcessor implements Processor { + ClassLoader loader; + Pattern p = Pattern.compile("[\\w_/]+\\.[\\w_]+"); + String prefix; + Logger log; + + public FileServeProcessor(String prefix, ClassLoader loader) { + this.loader = loader; + this.prefix = prefix; + log = LoggerFactory.getLogger(getClass()); + } + + void setFileNotfound(Exchange exchange) { + exchange.getOut().setHeader(Exchange.CONTENT_TYPE, "text/plain; charset=UTF-8"); + exchange.getOut().setBody("File not found"); + } + + @Override + public void process(Exchange exchange) throws Exception { + String path = exchange.getIn().getHeader(Exchange.HTTP_PATH, String.class); + if (p.matcher(path).matches()) { + String resContentType = URLConnection.guessContentTypeFromName(prefix+path); + InputStream stream = loader.getResourceAsStream(prefix+path); + if (stream == null) { + setFileNotfound(exchange); + return; + } + exchange.getOut().setHeader(Exchange.CONTENT_TYPE, resContentType); + exchange.getOut().setBody(stream); + } else { + setFileNotfound(exchange); + } + } +}