From f2014ec4ad0c991692141c16635933e89ffac5d5 Mon Sep 17 00:00:00 2001 From: Constantin Jucovschi <jucovschi@gmail.com> Date: Thu, 17 Apr 2014 16:35:33 +0200 Subject: [PATCH] refactoring util classes into a separate project --- MathHubWorker/pom.xml | 10 ++- .../sally4/mathhubworker/MathHubWorker.java | 5 -- .../mathhubworker/MathHubWorkerManager.java | 8 ++ .../{WorkerWorkflow.java => LMHWorkflow.java} | 48 +++++++++--- .../impl/PlanetaryClientWorkflow.java | 74 +++++++++++++++++- .../mathhubworker/model/GetLMHFile.java | 6 -- .../{WorkerRoute.java => LMHRoute.java} | 21 +++-- ...ubRoute.java => PlanetaryClientRoute.java} | 32 +++++--- .../src/main/resources/mathhubworker.xsd | 16 ---- activemq/pom.xml | 1 - core/pom.xml | 17 ++--- .../sally/comm/core/Heartbeatrequest.java | 2 +- .../sally/comm/core/Heartbeatresponse.java | 2 +- .../kwarc/sally/comm/core/ObjectFactory.java | 2 +- .../kwarc/sally/comm/core/Onsallyframe.java | 2 +- .../sally/comm/core/Registerdocument.java | 48 +++++++++--- .../comm/core/Registerdocumentresponse.java | 2 +- .../kwarc/sally/comm/core/package-info.java | 2 +- .../sally4/core/FreeMarkerProcessor.java | 7 -- .../kwarc/sally4/core/FreeMarkerProvider.java | 6 -- .../core/impl/ClassLoaderTemplateLoader.java | 48 ------------ .../core/impl/FreeMarkerProcessorImpl.java | 32 -------- .../core/impl/FreeMarkerProviderImpl.java | 22 ------ core/src/main/resources/core.xsd | 3 +- docmanager/pom.xml | 10 ++- .../kwarc/sally4/docmanager/AlexRoute.java | 4 +- .../kwarc/sally4/docmanager/IDocWorkflow.java | 2 +- .../java/info/kwarc/sally4/docmanager/TT.java | 4 +- .../kwarc/sally4/docmanager/TestMain.java | 7 +- .../sally4/docmanager/impl/AlexRouteImpl.java | 45 +++++++++-- .../docmanager/impl/DocumentManagerImpl.java | 25 ++++-- .../sally4/docmanager/impl/DummyWorkflow.java | 36 --------- .../docmanager/routes/SallyAlexRoute.java | 19 ++--- .../docmanager/routes/SallyRegisterRoute.java | 4 +- .../src/main/resources/templates/test.html | 29 ++++++- mmt/pom.xml | 2 +- planetary/pom.xml | 4 +- .../comm/planetaryclient/GetServices.java | 2 +- .../planetaryclient/GetSessionIDRequest.java | 2 +- .../planetaryclient/GetSessionIDResponse.java | 2 +- .../comm/planetaryclient/ObjectFactory.java | 10 ++- .../comm/planetaryclient/package-info.java | 2 +- .../src/main/resources/planetaryclient.xsd | 14 +++- pom.xml | 4 +- servlet/pom.xml | 1 - .../sally4/servlet/impl/ServletImpl.java | 1 + utils/.classpath | 36 +++++++++ utils/.project | 23 ++++++ utils/.settings/org.eclipse.jdt.core.prefs | 5 ++ utils/.settings/org.eclipse.m2e.core.prefs | 4 + utils/pom.xml | 66 ++++++++++++++++ .../ProducerConsumerSplitterComponent.java | 2 +- .../components/TemplatingComponent.java | 76 +++++++++++++++++++ .../kwarc/sally4/marshalling}/CommUtils.java | 2 +- .../sally4/marshalling}/MarshallUtils.java | 10 +-- .../kwarc/sally4/predicates}/BodyHasType.java | 2 +- .../processors/EnrichMessageProperties.java | 19 ++--- .../sally4/processors/FileServeProcessor.java | 45 +++++++++++ 58 files changed, 634 insertions(+), 301 deletions(-) delete mode 100644 MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/MathHubWorker.java create mode 100644 MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/MathHubWorkerManager.java rename MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/impl/{WorkerWorkflow.java => LMHWorkflow.java} (53%) delete mode 100644 MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/model/GetLMHFile.java rename MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/{WorkerRoute.java => LMHRoute.java} (59%) rename MathHubWorker/src/main/java/info/kwarc/sally4/mathhubworker/routes/{MathHubRoute.java => PlanetaryClientRoute.java} (69%) delete mode 100644 core/src/main/java/info/kwarc/sally4/core/FreeMarkerProcessor.java delete mode 100644 core/src/main/java/info/kwarc/sally4/core/FreeMarkerProvider.java delete mode 100644 core/src/main/java/info/kwarc/sally4/core/impl/ClassLoaderTemplateLoader.java delete mode 100644 core/src/main/java/info/kwarc/sally4/core/impl/FreeMarkerProcessorImpl.java delete mode 100644 core/src/main/java/info/kwarc/sally4/core/impl/FreeMarkerProviderImpl.java delete mode 100644 docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/DummyWorkflow.java create mode 100644 utils/.classpath create mode 100644 utils/.project create mode 100644 utils/.settings/org.eclipse.jdt.core.prefs create mode 100644 utils/.settings/org.eclipse.m2e.core.prefs create mode 100644 utils/pom.xml rename {core/src/main/java/info/kwarc/sally4/core => utils/src/main/java/info/kwarc/sally4/components}/ProducerConsumerSplitterComponent.java (98%) create mode 100644 utils/src/main/java/info/kwarc/sally4/components/TemplatingComponent.java rename {core/src/main/java/info/kwarc/sally/comm => utils/src/main/java/info/kwarc/sally4/marshalling}/CommUtils.java (95%) rename {core/src/main/java/info/kwarc/sally/comm => utils/src/main/java/info/kwarc/sally4/marshalling}/MarshallUtils.java (82%) rename {core/src/main/java/info/kwarc/sally/comm => utils/src/main/java/info/kwarc/sally4/predicates}/BodyHasType.java (91%) rename docmanager/src/main/java/info/kwarc/sally4/docmanager/impl/AlexRouteMessageProcessor.java => utils/src/main/java/info/kwarc/sally4/processors/EnrichMessageProperties.java (63%) create mode 100644 utils/src/main/java/info/kwarc/sally4/processors/FileServeProcessor.java diff --git a/MathHubWorker/pom.xml b/MathHubWorker/pom.xml index 971061e..e37ff61 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 cca57cf..0000000 --- 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 0000000..6807809 --- /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 2542a90..c97e6b9 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 241630d..82ebce7 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 bf4d9ae..0000000 --- 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 19c7ed5..cde74a9 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 a0a092c..38f73f6 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 f511a6d..2f6b4d5 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 ebcda8c..82d88f4 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 4b36a57..2dc6034 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 6b83f96..8b226e0 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 22c3c3f..eac507c 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 0e6586a..1469041 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 7df4210..1a288bb 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 9814854..bf4a06f 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 9defce7..34e07e5 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 434b0e1..266de15 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 721299e..0000000 --- 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 fe2457a..0000000 --- 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 4b6e9be..0000000 --- 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 4debece..0000000 --- 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 452af07..0000000 --- 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 fe2373f..fbfdd0e 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 a1d1e5c..c9303c2 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 75912bd..b41d18c 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 b7e435b..009763a 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 bead341..6b9263b 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 a5f8526..4563d6a 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 9a74e04..51bac57 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 1ccf4c6..90edf98 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 4178bcc..0000000 --- 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 edb9724..b7251f4 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 70e671c..446b9a4 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 c2f9c04..7aae485 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 adddee5..a8f4ffe 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 a0c22c8..5a1bd54 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 e1bd8d3..d76cdb4 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 80fe528..bfabeb0 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 a232d3d..a3e4540 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 a8893b7..ff4bd41 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 0655923..a1f87af 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 6139dd4..4812246 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 fd93a17..6097288 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 8e66f8f..e14766b 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 abfa787..a9fab6c 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 0000000..efcf778 --- /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 0000000..e941e83 --- /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 0000000..60105c1 --- /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 0000000..f897a7f --- /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 0000000..129f33e --- /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 68662fd..f0746da 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 0000000..32820a1 --- /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 f8f7ebf..fb09930 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 3911b97..7497840 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 344b033..cca5ad6 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 31c965c..f56a355 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 0000000..0d5fb61 --- /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); + } + } +} -- GitLab