From 45a825b63075f3dff958c38f72d0a2290bd51f91 Mon Sep 17 00:00:00 2001 From: Constantin Jucovschi <jucovschi@gmail.com> Date: Mon, 14 Apr 2014 16:57:22 +0200 Subject: [PATCH] adding MMT and updates to docmanager --- .../sally/comm/core/Heartbeatrequest.java | 39 +++++ .../sally/comm/core/Heartbeatresponse.java | 39 +++++ .../kwarc/sally/comm/core/ObjectFactory.java | 18 ++- .../kwarc/sally/comm/core/Onsallyframe.java | 2 +- .../sally/comm/core/Registerdocument.java | 2 +- .../comm/core/Registerdocumentresponse.java | 2 +- .../kwarc/sally/comm/core/package-info.java | 2 +- .../sally4/core/CamelContextProvider.java | 7 +- .../kwarc/sally4/core/impl/Activator.java | 18 +++ core/src/main/resources/core.xsd | 10 ++ docmanager/pom.xml | 22 ++- .../kwarc/sally4/docmanager/AlexRoute.java | 7 + .../sally4/docmanager/DocumentManager.java | 2 +- .../java/info/kwarc/sally4/docmanager/TT.java | 71 ++++++++++ .../kwarc/sally4/docmanager/TestMain.java | 93 ++++++++++++ .../docmanager/component/AlexComponent.java | 134 ++++++++++++++++++ .../sally4/docmanager/impl/AlexRouteImpl.java | 34 ++++- .../docmanager/impl/DocumentManagerImpl.java | 84 +++++++---- .../docmanager/routes/SallyAlexRoute.java | 48 +++++++ .../docmanager/routes/SallyRegisterRoute.java | 59 +++++--- mmt/.classpath | 27 ++++ mmt/.project | 23 +++ mmt/.settings/org.eclipse.jdt.core.prefs | 5 + mmt/.settings/org.eclipse.m2e.core.prefs | 4 + mmt/pom.xml | 127 +++++++++++++++++ .../main/java/info/kwarc/sally4/mmt/MMT.java | 5 + .../java/info/kwarc/sally4/mmt/TestMain.java | 23 +++ .../mmt/PlanetaryConnectionImpl.java | 29 ++++ start.sh | 1 + 29 files changed, 876 insertions(+), 61 deletions(-) create mode 100644 core/src/main/java/info/kwarc/sally/comm/core/Heartbeatrequest.java create mode 100644 core/src/main/java/info/kwarc/sally/comm/core/Heartbeatresponse.java create mode 100644 docmanager/src/main/java/info/kwarc/sally4/docmanager/TT.java create mode 100644 docmanager/src/main/java/info/kwarc/sally4/docmanager/TestMain.java create mode 100644 docmanager/src/main/java/info/kwarc/sally4/docmanager/component/AlexComponent.java create mode 100644 docmanager/src/main/java/info/kwarc/sally4/docmanager/routes/SallyAlexRoute.java create mode 100644 mmt/.classpath create mode 100644 mmt/.project create mode 100644 mmt/.settings/org.eclipse.jdt.core.prefs create mode 100644 mmt/.settings/org.eclipse.m2e.core.prefs create mode 100644 mmt/pom.xml create mode 100644 mmt/src/main/java/info/kwarc/sally4/mmt/MMT.java create mode 100644 mmt/src/main/java/info/kwarc/sally4/mmt/TestMain.java create mode 100644 mmt/src/main/java/info/kwarc/sally4/planetary/mmt/PlanetaryConnectionImpl.java create mode 120000 start.sh 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 new file mode 100644 index 0000000..6b83f96 --- /dev/null +++ b/core/src/main/java/info/kwarc/sally/comm/core/Heartbeatrequest.java @@ -0,0 +1,39 @@ +// +// 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 +// + + +package info.kwarc.sally.comm.core; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "heartbeatrequest") +public class Heartbeatrequest { + + +} 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 new file mode 100644 index 0000000..22c3c3f --- /dev/null +++ b/core/src/main/java/info/kwarc/sally/comm/core/Heartbeatresponse.java @@ -0,0 +1,39 @@ +// +// 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 +// + + +package info.kwarc.sally.comm.core; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; + + +/** + * <p>Java class for anonymous complex type. + * + * <p>The following schema fragment specifies the expected content contained within this class. + * + * <pre> + * <complexType> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * </restriction> + * </complexContent> + * </complexType> + * </pre> + * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "") +@XmlRootElement(name = "heartbeatresponse") +public class Heartbeatresponse { + + +} 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 cdc0ee6..0e6586a 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.10 at 09:55:55 AM CEST +// Generated on: 2014.04.13 at 10:53:19 PM CEST // @@ -60,4 +60,20 @@ public class ObjectFactory { return new Onsallyframe(); } + /** + * Create an instance of {@link Heartbeatrequest } + * + */ + public Heartbeatrequest createHeartbeatrequest() { + return new Heartbeatrequest(); + } + + /** + * Create an instance of {@link Heartbeatresponse } + * + */ + public Heartbeatresponse createHeartbeatresponse() { + return new Heartbeatresponse(); + } + } 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 a7a8084..7df4210 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.10 at 09:55:55 AM CEST +// Generated on: 2014.04.13 at 10:53:19 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 b11db39..9814854 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.10 at 09:55:55 AM CEST +// Generated on: 2014.04.13 at 10:53:19 PM CEST // 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 64f2ada..9defce7 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.10 at 09:55:55 AM CEST +// Generated on: 2014.04.13 at 10:53:19 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 f079079..434b0e1 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.10 at 09:55:55 AM CEST +// Generated on: 2014.04.13 at 10:53:19 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/CamelContextProvider.java b/core/src/main/java/info/kwarc/sally4/core/CamelContextProvider.java index 96ee3aa..3a03da2 100644 --- a/core/src/main/java/info/kwarc/sally4/core/CamelContextProvider.java +++ b/core/src/main/java/info/kwarc/sally4/core/CamelContextProvider.java @@ -1,7 +1,10 @@ package info.kwarc.sally4.core; -import org.apache.camel.CamelContext; +import org.apache.camel.Component; public interface CamelContextProvider { - CamelContext getSallyCamelContext(); + Component getComponent(String componentName); + void registerGlobalComponent(String componentName, Component component); + void unregisterGlobalComponent(String componentName); + String getName(); } diff --git a/core/src/main/java/info/kwarc/sally4/core/impl/Activator.java b/core/src/main/java/info/kwarc/sally4/core/impl/Activator.java index 9800767..6a99ce7 100644 --- a/core/src/main/java/info/kwarc/sally4/core/impl/Activator.java +++ b/core/src/main/java/info/kwarc/sally4/core/impl/Activator.java @@ -25,6 +25,7 @@ public class Activator implements BundleActivator, CamelContextProvider { } public void start(BundleContext context) throws Exception { + log.info("Starting SallyCore"); ServiceReference<?> serviceRef = context.getServiceReference(CamelContext.class.getName()); if (serviceRef == null) { camelContext = new DefaultCamelContext(); @@ -41,4 +42,21 @@ public class Activator implements BundleActivator, CamelContextProvider { return camelContext; } + public org.apache.camel.Component getComponent(String componentName) { + return camelContext.getComponent(componentName); + } + + public void registerGlobalComponent(String componentName, + org.apache.camel.Component component) { + camelContext.addComponent(componentName, component); + } + + public void unregisterGlobalComponent(String componentName) { + camelContext.removeComponent(componentName); + } + + public String getName() { + return camelContext.getName(); + } + } diff --git a/core/src/main/resources/core.xsd b/core/src/main/resources/core.xsd index 36edc8f..fe2373f 100644 --- a/core/src/main/resources/core.xsd +++ b/core/src/main/resources/core.xsd @@ -31,5 +31,15 @@ </xs:complexType> </xs:element> + <xs:element name="heartbeatrequest"> + <xs:complexType> + </xs:complexType> + </xs:element> + + <xs:element name="heartbeatresponse"> + <xs:complexType> + </xs:complexType> + </xs:element> + </xs:schema> \ No newline at end of file diff --git a/docmanager/pom.xml b/docmanager/pom.xml index 42ba0b7..49079f2 100644 --- a/docmanager/pom.xml +++ b/docmanager/pom.xml @@ -30,6 +30,18 @@ <scope>provided</scope> </dependency> + <dependency> + <groupId>info.kwarc.sally4</groupId> + <artifactId>activemq</artifactId> + <version>0.0.1-SNAPSHOT</version> + </dependency> + + <dependency> + <groupId>info.kwarc.sally4</groupId> + <artifactId>docmanager</artifactId> + <version>0.0.1-SNAPSHOT</version> + </dependency> + <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.ipojo.annotations</artifactId> @@ -48,6 +60,11 @@ <version>0.0.1-SNAPSHOT</version> </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-simple</artifactId> + <version>1.7.7</version> + </dependency> </dependencies> <build> @@ -60,8 +77,9 @@ <configuration> <instructions> <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName> - <Private-Package>info.kwarc.sally4.docmanager</Private-Package> - <Export-Package></Export-Package> + <Private-Package>info.kwarc.sally4.docmanager.impl</Private-Package> + <Import-Package>*;</Import-Package> + <Export-Package>info.kwarc.sally4.docmanager*</Export-Package> </instructions> </configuration> </plugin> 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 d4fae0f..d612b62 100644 --- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/AlexRoute.java +++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/AlexRoute.java @@ -1,5 +1,12 @@ package info.kwarc.sally4.docmanager; + + public interface AlexRoute { + public String getAlexStateQueue(); + public String getAlexQueue(); + + public void addOnStopHandler(Runnable r); + public void stop(); } diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/DocumentManager.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/DocumentManager.java index f3ee254..1e48541 100644 --- a/docmanager/src/main/java/info/kwarc/sally4/docmanager/DocumentManager.java +++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/DocumentManager.java @@ -3,5 +3,5 @@ package info.kwarc.sally4.docmanager; import info.kwarc.sally.comm.core.Registerdocument; public interface DocumentManager { - void registerDocument(Registerdocument doc); + AlexRoute registerDocument(Registerdocument doc); } diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/TT.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/TT.java new file mode 100644 index 0000000..7d6bc4c --- /dev/null +++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/TT.java @@ -0,0 +1,71 @@ +package info.kwarc.sally4.docmanager; + +import info.kwarc.sally.comm.core.Registerdocument; +import info.kwarc.sally4.docmanager.component.AlexComponent; + +import org.apache.activemq.ActiveMQConnectionFactory; +import org.apache.activemq.camel.component.ActiveMQComponent; +import org.apache.activemq.camel.component.ActiveMQConfiguration; +import org.apache.camel.CamelContext; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.DefaultCamelContext; + +public class TT extends RouteBuilder { + String sally_queue; + + public String getSally_queue() { + return "activemq:queue:"+sally_queue; + } + + public static void main(String[] args) throws Exception { + CamelContext context = new DefaultCamelContext(); + + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); + connectionFactory.setUserName("webclient"); + connectionFactory.setPassword("webclient"); + + ActiveMQConfiguration config = new ActiveMQConfiguration(); + config.setConnectionFactory(connectionFactory); + + ActiveMQComponent comp = new ActiveMQComponent(config); + context.addComponent("activemq", comp); + context.addComponent("alex", new AlexComponent(new AlexRoute() { + + public String getAlexStateQueue() { + return "sally_alex"; + } + + public String getAlexQueue() { + return "alex"; + } + + public void addOnStopHandler(Runnable r) { + + } + + public void stop() { + + } + })); + + context.addRoutes(new TT()); + context.start(); + + + ProducerTemplate temp = context.createProducerTemplate(); + + System.out.println("starting my stuff"); + Registerdocument reg = new Registerdocument(); + reg.setDocumentqueue("client123"); + reg.setTheoqueue("theo"); + reg.getInterfaces().add("test"); + temp.sendBody("direct:client-register", reg); + } + + @Override + public void configure() throws Exception { + from("direct:client-register") + .to("alex:default"); + } +} diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/TestMain.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/TestMain.java new file mode 100644 index 0000000..85d49fe --- /dev/null +++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/TestMain.java @@ -0,0 +1,93 @@ +package info.kwarc.sally4.docmanager; + +import info.kwarc.sally.comm.CommUtils; +import info.kwarc.sally.comm.core.Onsallyframe; +import info.kwarc.sally.comm.core.Registerdocument; +import info.kwarc.sally.comm.core.Registerdocumentresponse; +import info.kwarc.sally4.docmanager.routes.SallyRegisterRoute; + +import org.apache.activemq.ActiveMQConnectionFactory; +import org.apache.activemq.camel.component.ActiveMQComponent; +import org.apache.activemq.camel.component.ActiveMQConfiguration; +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.Processor; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.spi.DataFormat; + +public class TestMain extends RouteBuilder { + String sally_queue; + + public String getSally_queue() { + return "activemq:queue:"+sally_queue; + } + + public static void main(String[] args) throws Exception { + CamelContext context = new DefaultCamelContext(); + + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); + connectionFactory.setUserName("webclient"); + connectionFactory.setPassword("webclient"); + + ActiveMQConfiguration config = new ActiveMQConfiguration(); + config.setConnectionFactory(connectionFactory); + + ActiveMQComponent comp = new ActiveMQComponent(config); + context.addComponent("activemq", comp); + + context.addRoutes(new TestMain()); + context.start(); + + ProducerTemplate temp = context.createProducerTemplate(); + + System.out.println("starting my stuff"); + Registerdocument reg = new Registerdocument(); + reg.setDocumentqueue("client123"); + reg.setTheoqueue("theo"); + reg.getInterfaces().add("test"); + temp.sendBody("direct:client-register", reg); + } + + @Override + public void configure() throws Exception { + DataFormat core = CommUtils.getDataFormat("core"); + + from("direct:client-register") + .marshal(core) + .inOut("activemq:queue:"+SallyRegisterRoute.sallyRegisterQueue) + .to("log:msg") + .unmarshal(core) + .process(new Processor() { + public void process(Exchange exchange) throws Exception { + Registerdocumentresponse resp = exchange.getIn().getBody(Registerdocumentresponse.class); + sally_queue = resp.getSallyqueue(); + } + }) + .process(new Processor() { + + public void process(Exchange exchange) throws Exception { + ProducerTemplate temp = exchange.getContext().createProducerTemplate(); + Onsallyframe onSallyFrame = new Onsallyframe(); + onSallyFrame.setPosx(100); + onSallyFrame.setPosy(100); + temp.sendBody("direct:send_sally_doc", onSallyFrame); + } + }); + + from("direct:send_sally_doc").marshal(core).inOut("activemq:queue:sally_doc_client123").to("log:asd"); + + from("activemq:queue:client123") + .to("log:test") + .unmarshal(core) + .process(new Processor() { + + public void process(Exchange exchange) throws Exception { + System.out.println(exchange.getIn().getBody()); + } + }); + } + + +} diff --git a/docmanager/src/main/java/info/kwarc/sally4/docmanager/component/AlexComponent.java b/docmanager/src/main/java/info/kwarc/sally4/docmanager/component/AlexComponent.java new file mode 100644 index 0000000..f279e64 --- /dev/null +++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/component/AlexComponent.java @@ -0,0 +1,134 @@ +package info.kwarc.sally4.docmanager.component; + +import info.kwarc.sally4.docmanager.AlexRoute; + +import java.util.Map; + +import org.apache.activemq.camel.component.ActiveMQComponent; +import org.apache.camel.CamelContext; +import org.apache.camel.Component; +import org.apache.camel.Consumer; +import org.apache.camel.Endpoint; +import org.apache.camel.EndpointConfiguration; +import org.apache.camel.Exchange; +import org.apache.camel.ExchangePattern; +import org.apache.camel.PollingConsumer; +import org.apache.camel.Processor; +import org.apache.camel.Producer; +import org.apache.camel.impl.DefaultComponent; + +/** + * + * @author Constantin Jucovschi + * + * This component allows to write Camel routes like from("alex") or to("alex") + * and these will be resolved to the necessary + */ +public class AlexComponent extends DefaultComponent { + AlexRoute route; + + DefaultComponent tt; + + CamelContext camelContext; + + Endpoint alexProducer; + Endpoint alexConsumer; + + + public AlexComponent(AlexRoute route) { + super(); + this.route = route; + } + + @Override + protected Endpoint createEndpoint(String uri, String remaining, + Map<String, Object> parameters) throws Exception { + ActiveMQComponent activeMQComponent = (ActiveMQComponent) getCamelContext().getComponent("activemq"); + alexConsumer = activeMQComponent.createEndpoint("activemq:queue:"+route.getAlexStateQueue()); + alexProducer = activeMQComponent.createEndpoint("activemq:queue:"+route.getAlexQueue()); + return new AlexComponentEndpoint(uri, this); + } + + class AlexComponentEndpoint implements Endpoint { + + String endPoint; + Component comp; + CamelContext context; + + AlexComponentEndpoint(String endPoint, Component comp) { + this.endPoint = endPoint; + this.comp = comp; + this.context = comp.getCamelContext(); + } + + public boolean isSingleton() { + return false; + } + + public void start() throws Exception { + alexConsumer.start(); + alexProducer.start(); + } + + public void stop() throws Exception { + alexConsumer.stop(); + alexProducer.stop(); + } + + public String getEndpointUri() { + return endPoint; + } + + public EndpointConfiguration getEndpointConfiguration() { + return null; + } + + public String getEndpointKey() { + return "alex"; + } + + public Exchange createExchange() { + return alexConsumer.createExchange(); + } + + public Exchange createExchange(ExchangePattern pattern) { + return alexConsumer.createExchange(pattern); + } + + @Deprecated + public Exchange createExchange(Exchange exchange) { + return alexConsumer.createExchange(exchange); + } + + public CamelContext getCamelContext() { + return comp.getCamelContext(); + } + + public Producer createProducer() throws Exception { + return alexProducer.createProducer(); + } + + public Consumer createConsumer(Processor processor) throws Exception { + return alexConsumer.createConsumer(processor); + } + + public PollingConsumer createPollingConsumer() throws Exception { + return alexConsumer.createPollingConsumer(); + } + + public void configureProperties(Map<String, Object> options) { + + } + + public void setCamelContext(CamelContext context) { + this.context = context; + } + + public boolean isLenientProperties() { + return false; + } + + + } + +} 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 f67a22c..e4552d2 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 @@ -2,8 +2,10 @@ package info.kwarc.sally4.docmanager.impl; import info.kwarc.sally4.docmanager.AlexRoute; +import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; +import java.util.List; public class AlexRouteImpl implements AlexRoute { @@ -11,10 +13,10 @@ public class AlexRouteImpl implements AlexRoute { String alexQueue; String theoQueue; HashSet<String> interfaces; - - String alexStateRoute; - + List<Runnable> stopHandlers; + String alexStateQueue; + String generateUUID(String doc_queue) { //"/queue/sally_doc_"+UUID.randomUUID().toString() return "sally_doc_"+doc_queue; @@ -23,12 +25,30 @@ public class AlexRouteImpl implements AlexRoute { public AlexRouteImpl(String alexQueue, String theoQueue, Collection<String> interfaces) { this.alexQueue = alexQueue; this.theoQueue = theoQueue; - this.interfaces = new HashSet<String>(this.interfaces); - this.alexStateRoute = generateUUID(alexQueue); + this.interfaces = new HashSet<String>(interfaces); + this.alexStateQueue = generateUUID(alexQueue); + stopHandlers = new ArrayList<Runnable>(); } - public String getAlexStateRoute() { - return alexStateRoute; + public String getAlexStateQueue() { + return alexStateQueue; } + public String getAlexQueue() { + return alexQueue; + } + + public void addOnStopHandler(Runnable stopHandler) { + stopHandlers.add(stopHandler); + } + + public void stop() { + for (Runnable r : stopHandlers) { + try { + r.run(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } } 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 6c25385..1af2e17 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 @@ -1,51 +1,85 @@ package info.kwarc.sally4.docmanager.impl; import info.kwarc.sally.comm.core.Registerdocument; +import info.kwarc.sally4.activemq.ActiveMQService; +import info.kwarc.sally4.core.CamelContextProvider; +import info.kwarc.sally4.docmanager.AlexRoute; import info.kwarc.sally4.docmanager.DocumentManager; +import info.kwarc.sally4.docmanager.routes.SallyRegisterRoute; import java.util.HashMap; import java.util.Map; +import org.apache.camel.CamelContext; +import org.apache.camel.impl.DefaultCamelContext; import org.apache.felix.ipojo.annotations.Component; import org.apache.felix.ipojo.annotations.Instantiate; +import org.apache.felix.ipojo.annotations.Invalidate; +import org.apache.felix.ipojo.annotations.Provides; +import org.apache.felix.ipojo.annotations.Requires; +import org.apache.felix.ipojo.annotations.Validate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @Component @Instantiate +@Provides public class DocumentManagerImpl implements DocumentManager { - - Map<String, Registerdocument> docs; - Map<String, String> sallyDocQueue; + + Map<String, AlexRoute> docs; + SallyRegisterRoute registerRoute; + + CamelContext camelContext; + + Logger log; + + @Requires + ActiveMQService activeMQ; + + @Requires + CamelContextProvider camelContextProvider; public DocumentManagerImpl() { - docs = new HashMap<String, Registerdocument>(); - sallyDocQueue = new HashMap<String, String>(); + docs = new HashMap<String, AlexRoute>(); + registerRoute = new SallyRegisterRoute(this); + log = LoggerFactory.getLogger(getClass()); } - - String generateUUID(String doc_queue) { - //"/queue/sally_doc_"+UUID.randomUUID().toString() - return "sally_doc_"+doc_queue; + + public AlexRoute registerDocument(Registerdocument doc) { + if (docs.containsKey(doc.getDocumentqueue())) + return docs.get(doc.getDocumentqueue()); + + AlexRouteImpl route = new AlexRouteImpl(doc.getDocumentqueue(), doc.getTheoqueue(), doc.getInterfaces()); + + docs.put(doc.getDocumentqueue(), route); + return route; } - - public void registerDocument(Registerdocument doc) { - docs.put(doc.getDocumentqueue(), doc); - if (sallyDocQueue.containsKey(doc.getDocumentqueue())) - return; - String sally_doc_queue = generateUUID(doc.getDocumentqueue()); - sallyDocQueue.put(doc.getDocumentqueue(), sally_doc_queue); - /* + + @Validate + public void start() { try { - context.addRoutes(sallyDocRouteFactory.create(networkProvider, doc.getDocumentqueue(), sally_doc_queue, doc.getTheoqueue())); + log.info(camelContextProvider.getName()); + camelContext = new DefaultCamelContext(); + camelContext.addComponent("activemq", camelContextProvider.getComponent("activemq")); + camelContext.addRoutes(registerRoute); + camelContext.start(); } catch (Exception e) { + log.info(e.getMessage()); e.printStackTrace(); } - */ + } - public final Map<String, Registerdocument> getDocs() { - return docs; - } - - public String getSallyDocumentQueue(String docQueue) { - return sallyDocQueue.get(docQueue); + @Invalidate + public void stop() { + try { + camelContext.stop(); + for (AlexRoute route : docs.values()) { + route.stop(); + } + } catch (Exception e) { + e.printStackTrace(); + } } + } 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 new file mode 100644 index 0000000..fc75b86 --- /dev/null +++ b/docmanager/src/main/java/info/kwarc/sally4/docmanager/routes/SallyAlexRoute.java @@ -0,0 +1,48 @@ +package info.kwarc.sally4.docmanager.routes; + +import info.kwarc.sally.comm.CommUtils; +import info.kwarc.sally.comm.core.Heartbeatrequest; +import info.kwarc.sally4.docmanager.AlexRoute; + +import org.apache.camel.ExchangeTimedOutException; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.spi.DataFormat; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class SallyAlexRoute extends RouteBuilder { + + Logger log; + AlexRoute route; + + public Heartbeatrequest generateHeartbeat() { + return new Heartbeatrequest(); + } + + public void stopSallyRoute() { + route.stop(); + } + + SallyAlexRoute(AlexRoute route) { + log = LoggerFactory.getLogger(getClass()); + this.route = route; + } + + @Override + public void configure() throws Exception { + DataFormat core = CommUtils.getDataFormat("core"); + + from("timer://foo?fixedRate=true&period=60000") + .bean(method(this, "generateHeartbeat")) + .marshal(core) + .doTry() + .inOut("alex:default") + .doCatch(ExchangeTimedOutException.class) + .bean(method(this, "stopSallyRoute")); + + from("alex:default") + .to("log:test") + .to("alex:default"); + } + +} 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 30b5ca4..5aeb204 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,40 +1,61 @@ -package info.kwarc.sally4.docmanager.impl; +package info.kwarc.sally4.docmanager.routes; import info.kwarc.sally.comm.CommUtils; +import info.kwarc.sally.comm.core.Registerdocumentresponse; +import info.kwarc.sally4.docmanager.AlexRoute; +import info.kwarc.sally4.docmanager.component.AlexComponent; +import info.kwarc.sally4.docmanager.impl.DocumentManagerImpl; +import org.apache.camel.CamelContext; import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.spi.DataFormat; -public class DocumentManagerRoutes extends RouteBuilder { +public class SallyRegisterRoute extends RouteBuilder { public static final String sallyRegisterQueue = "sally_register"; public static final String directSallyRegisterQueue = "direct:/queue/sally_register"; public static final String mockSallyRegisterQueueOutput = "mock:/queue/sally_register_out"; - /* - RegisterProcessor registerProcessor; - - public SallyRegisterRoute(RegisterProcessor registerProcessor) { - this.registerProcessor = registerProcessor; + DocumentManagerImpl docManager; + + public SallyRegisterRoute(DocumentManagerImpl docManager) { + this.docManager = docManager; } - */ + public Registerdocumentresponse createRouteContext(AlexRoute route) throws Exception { + final CamelContext alexRouteContext = new DefaultCamelContext(); + alexRouteContext.addComponent("activemq", getContext().getComponent("activemq")); + alexRouteContext.addComponent("alex", new AlexComponent(route)); + alexRouteContext.addRoutes(new SallyAlexRoute(route)); + alexRouteContext.getShutdownStrategy().setTimeout(1); + alexRouteContext.start(); + + route.addOnStopHandler(new Runnable() { + + public void run() { + try { + alexRouteContext.stop(); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + + Registerdocumentresponse response = new Registerdocumentresponse(); + response.setSallyqueue(route.getAlexStateQueue()); + return response; + } + @Override public void configure() throws Exception { DataFormat core = CommUtils.getDataFormat("core"); from("activemq:queue:"+sallyRegisterQueue) - .unmarshal(core) - .inOut(directSallyRegisterQueue) - .marshal(core); - - from("sallyservlet:///test") - .to("log:test") - .to("freemarker:templates/theo.html"); - - from(directSallyRegisterQueue) - - .to(mockSallyRegisterQueueOutput); + .unmarshal(core) + .bean(docManager, "registerDocument") + .bean(method(this, "createRouteContext")) + .marshal(core); } } diff --git a/mmt/.classpath b/mmt/.classpath new file mode 100644 index 0000000..395dbde --- /dev/null +++ b/mmt/.classpath @@ -0,0 +1,27 @@ +<?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 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 including="**/*.java" kind="src" path="src/main/resources"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"> + <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="output" path="target/classes"/> +</classpath> diff --git a/mmt/.project b/mmt/.project new file mode 100644 index 0000000..619dce5 --- /dev/null +++ b/mmt/.project @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>mmt</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/mmt/.settings/org.eclipse.jdt.core.prefs b/mmt/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..abec6ca --- /dev/null +++ b/mmt/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/mmt/.settings/org.eclipse.m2e.core.prefs b/mmt/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/mmt/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/mmt/pom.xml b/mmt/pom.xml new file mode 100644 index 0000000..3d38fe7 --- /dev/null +++ b/mmt/pom.xml @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="UTF-8"?> +<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"> + + <!-- Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with this + work for additional information regarding copyright ownership. The ASF licenses + this file to You under the Apache License, Version 2.0 (the "License"); you + may not use this file except in compliance with the License. You may obtain + a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless + required by applicable law or agreed to in writing, software distributed + under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES + OR CONDITIONS OF ANY KIND, either express or implied. See the License for + the specific language governing permissions and limitations under the License. --> + + <modelVersion>4.0.0</modelVersion> + + <packaging>bundle</packaging> + + <groupId>info.kwarc.sally4</groupId> + <artifactId>mmt</artifactId> + <version>0.0.1-SNAPSHOT</version> + + + <dependencies> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.core</artifactId> + <version>4.3.1</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>org.apache.felix</groupId> + <artifactId>org.apache.felix.ipojo.annotations</artifactId> + <version>1.11.2</version> + </dependency> + + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-core</artifactId> + <version>2.12.3</version> + </dependency> + + <dependency> + <groupId>info.kwarc.sally4</groupId> + <artifactId>core</artifactId> + <version>0.0.1-SNAPSHOT</version> + </dependency> + + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-simple</artifactId> + <version>1.7.7</version> + </dependency> + + <dependency> + <groupId>info.kwarc.mmt</groupId> + <artifactId>immt</artifactId> + <version>1.0.0-alpha</version> + </dependency> + + <dependency> + <groupId>info.kwarc.mmt</groupId> + <artifactId>mmt-planetary</artifactId> + <version>1.0.0-alpha</version> + </dependency> + + <dependency> + <groupId>info.kwarc.mmt</groupId> + <artifactId>mmt-stex</artifactId> + <version>1.0.0-alpha</version> + </dependency> + + + <dependency> + <groupId>org.scala-lang</groupId> + <artifactId>scala-library</artifactId> + <version>2.10.3</version> + </dependency> + + <dependency> + <groupId>org.scala-lang.modules</groupId> + <artifactId>scala-xml_2.11.0-RC4</artifactId> + <version>1.0.1</version> + </dependency> + + <dependency> + <groupId>org.gnieh</groupId> + <artifactId>tiscaf</artifactId> + <version>0.8-SNAPSHOT</version> + </dependency> + + </dependencies> + + <build> + <plugins> + <!-- BND Maven Plugin Configuration --> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <extensions>true</extensions> + <configuration> + <instructions> + <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName> + <Private-Package>info.kwarc.sally4.mmt.impl</Private-Package> + <Import-Package>*;</Import-Package> + <Export-Package>info.kwarc.sally4.mmt*</Export-Package> + </instructions> + </configuration> + </plugin> + <!-- iPOJO Maven Plugin Configuration : nothing to do --> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-ipojo-plugin</artifactId> + <version>1.6.0</version> + <executions> + <execution> + <goals> + <goal>ipojo-bundle</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> diff --git a/mmt/src/main/java/info/kwarc/sally4/mmt/MMT.java b/mmt/src/main/java/info/kwarc/sally4/mmt/MMT.java new file mode 100644 index 0000000..d3c5a2e --- /dev/null +++ b/mmt/src/main/java/info/kwarc/sally4/mmt/MMT.java @@ -0,0 +1,5 @@ +package info.kwarc.sally4.mmt; + + +public interface MMT { +} diff --git a/mmt/src/main/java/info/kwarc/sally4/mmt/TestMain.java b/mmt/src/main/java/info/kwarc/sally4/mmt/TestMain.java new file mode 100644 index 0000000..8a2b962 --- /dev/null +++ b/mmt/src/main/java/info/kwarc/sally4/mmt/TestMain.java @@ -0,0 +1,23 @@ +package info.kwarc.sally4.mmt; + +import scala.collection.JavaConversions; +import info.kwarc.mmt.api.archives.Archive; +import info.kwarc.mmt.api.frontend.Controller; + +public class TestMain { + public static void main(String[] args) throws Exception { + Controller controller = new Controller(); + controller.handleLine("extension info.kwarc.mmt.planetary.PlanetaryPlugin"); + controller.handleLine("extension info.kwarc.mmt.stex.STeXImporter"); + controller.handleLine("archive add /home/costea/localmh/MathHub/smglom/mv"); + + //controller.handleLine("build smglom/mv stex-omdoc"); + //controller.handleLine("build smglom/mv index"); + //controller.handleLine("build smglom/mv narration_presentation_html"); + + for (Archive a : JavaConversions.asJavaCollection(controller.backend().getArchives())) { + System.out.println(a.id()); + } + + } +} diff --git a/mmt/src/main/java/info/kwarc/sally4/planetary/mmt/PlanetaryConnectionImpl.java b/mmt/src/main/java/info/kwarc/sally4/planetary/mmt/PlanetaryConnectionImpl.java new file mode 100644 index 0000000..c32376e --- /dev/null +++ b/mmt/src/main/java/info/kwarc/sally4/planetary/mmt/PlanetaryConnectionImpl.java @@ -0,0 +1,29 @@ +package info.kwarc.sally4.planetary.mmt; + +import info.kwarc.sally4.core.CamelContextProvider; +import info.kwarc.sally4.mmt.MMT; + +import org.apache.felix.ipojo.annotations.Component; +import org.apache.felix.ipojo.annotations.Instantiate; +import org.apache.felix.ipojo.annotations.Invalidate; +import org.apache.felix.ipojo.annotations.Provides; +import org.apache.felix.ipojo.annotations.Requires; +import org.apache.felix.ipojo.annotations.Validate; + +@Component +@Provides +@Instantiate +public class PlanetaryConnectionImpl implements MMT { + @Requires + CamelContextProvider camelContextProvider; + + + @Validate + public void start() { + } + + @Invalidate + public void stop() { + } + +} diff --git a/start.sh b/start.sh new file mode 120000 index 0000000..74e44f4 --- /dev/null +++ b/start.sh @@ -0,0 +1 @@ +/home/costea/workspace_sally4/Felix/start.sh \ No newline at end of file -- GitLab