diff --git a/Common.iml b/scorpio4core.iml
similarity index 99%
rename from Common.iml
rename to scorpio4core.iml
index b45d2ce..8bf9678 100644
--- a/Common.iml
+++ b/scorpio4core.iml
@@ -7,6 +7,7 @@
+
diff --git a/src/main/java/com/factcore/iq/exec/Executor.java b/src/main/java/com/factcore/iq/exec/Executor.java
index 5202620..4ba01d6 100644
--- a/src/main/java/com/factcore/iq/exec/Executor.java
+++ b/src/main/java/com/factcore/iq/exec/Executor.java
@@ -109,7 +109,7 @@ public Map execute(String listURI, Map bindings) throws Reposito
protected Map doExecutables(URI execURI, Map bindings) throws RepositoryException, ExecutionException, IQException, InterruptedException, IOException, AssetNotSupported {
RepositoryConnection connection = factSpace.getConnection();
- Map beans = findBeans(connection, (URI) execURI);
+ Map beans = findBeans(connection, execURI);
if (beans==null|beans.isEmpty()) return null;
Asset asset = assetRegister.getAsset(execURI.stringValue(), null);
if (asset==null) return null; //throw new IQException("Missing asset: "+execURI);
diff --git a/src/main/java/com/factcore/iq/exec/Publishing.java b/src/main/java/com/factcore/iq/exec/Templating.java
similarity index 94%
rename from src/main/java/com/factcore/iq/exec/Publishing.java
rename to src/main/java/com/factcore/iq/exec/Templating.java
index 9713d69..a40038b 100644
--- a/src/main/java/com/factcore/iq/exec/Publishing.java
+++ b/src/main/java/com/factcore/iq/exec/Templating.java
@@ -24,10 +24,10 @@
* Date : 17/06/2014
* Time : 9:56 PM
*/
-public class Publishing implements Executable {
+public class Templating implements Executable {
private final Logger log = LoggerFactory.getLogger(this.getClass());
- public Publishing() {
+ public Templating() {
}
@Override
@@ -45,7 +45,7 @@ public Future execute(Asset asset, Map bindings) throws IQException {
}
class NotFutureTemplate implements Future {
- private final Logger log = LoggerFactory.getLogger(Publishing.class);
+ private final Logger log = LoggerFactory.getLogger(Templating.class);
SimpleTemplateEngine templateEngine = new SimpleTemplateEngine();
Object result = null;
diff --git a/src/main/java/com/factcore/vendor/camel/RDFRoutePlanner.java b/src/main/java/com/factcore/vendor/camel/RDFRoutePlanner.java
deleted file mode 100644
index 41f2cd8..0000000
--- a/src/main/java/com/factcore/vendor/camel/RDFRoutePlanner.java
+++ /dev/null
@@ -1,164 +0,0 @@
-package com.factcore.vendor.camel;
-
-import com.factcore.assets.AssetRegister;
-import com.factcore.assets.SesameAssetRegister;
-import com.factcore.fact.FactSpace;
-import com.factcore.vendor.sesame.util.RDFList;
-import com.factcore.vocab.COMMON;
-import org.apache.camel.*;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.model.ChoiceDefinition;
-import org.apache.camel.model.PipelineDefinition;
-import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.spi.EndpointStrategy;
-import org.openrdf.model.BNode;
-import org.openrdf.model.Statement;
-import org.openrdf.model.Value;
-import org.openrdf.model.ValueFactory;
-import org.openrdf.repository.RepositoryConnection;
-import org.openrdf.repository.RepositoryException;
-import org.openrdf.repository.RepositoryResult;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Collection;
-
-/**
- * Scorpio (c) 2014
- * Module: com.factcore.vendor.camel
- * User : lee
- * Date : 21/06/2014
- * Time : 5:58 PM
- */
-public class RDFRoutePlanner extends RoutePlanner {
- static private final Logger log = LoggerFactory.getLogger(RDFRoutePlanner.class);
-
- public static final String CAMEL_FROM = COMMON.CAMEL+"from";
- public static final String CAMEL_TO = COMMON.CAMEL+"to";
- FactSpace factSpace = null;
- int count = 0;
- AssetRegister assetRegister = null;
-
- public RDFRoutePlanner(FactSpace factSpace) throws Exception {
- super();
- this.factSpace=factSpace;
- assetRegister = new SesameAssetRegister(factSpace.getConnection());
- }
-
- public RDFRoutePlanner(CamelContext camelContext, FactSpace factSpace) throws Exception {
- super(camelContext);
- this.factSpace=factSpace;
- assetRegister = new SesameAssetRegister(factSpace.getConnection());
- }
-
- public int plan() throws Exception {
- plan(factSpace);
- context.addRegisterEndpointCallback(new EndpointStrategy() {
- @Override
- public Endpoint registerEndpoint(String uri, Endpoint endpoint) {
- log.debug("Register: "+uri+" -> "+endpoint);
- return endpoint;
- }
- });
- return count;
- }
-
- public int plan(FactSpace space) throws Exception {
- plan(space,space.getIdentity());
- return count;
- }
-
- public void plan(FactSpace space, String routeURI) throws Exception {
- final RepositoryConnection connection = space.getConnection();
- final ValueFactory vf = connection.getValueFactory();
- log.debug("Route: "+routeURI+" -> "+CAMEL_FROM);
- RepositoryResult froms = connection.getStatements(vf.createURI(routeURI), vf.createURI(CAMEL_FROM), null, false);
- while(froms.hasNext()){
- Statement next = froms.next();
- final Value _from = next.getObject();
- log.debug("From: "+_from);
- RouteBuilder routing = new org.apache.camel.builder.RouteBuilder() {
- @Override
- public void configure() throws Exception {
- String from = _from.stringValue();
- log.debug("\t"+from);
- RouteDefinition route = plan(connection, vf, from, from(from));
- log.debug("\t" + route);
- ProcessorDefinition> end = route.end();
- count++;
- }
- };
- context.addRoutes(routing);
- }
- }
-
- static RouteDefinition plan(final RepositoryConnection connection, final ValueFactory vf, final String from, final ProcessorDefinition _route) throws RepositoryException, CamelException {
- ProcessorDefinition route = _route;
- RepositoryResult plannedRoutes = connection.getStatements(vf.createURI(from), null, null, false);
- if (!plannedRoutes.hasNext()) {
- return (RouteDefinition)route.to("log:from-missing-to");
- }
- while(plannedRoutes.hasNext()) {
- plan(connection, vf, _route, plannedRoutes.next());
- }
- return (RouteDefinition)route;
- }
-
- private static void plan(RepositoryConnection connection, ValueFactory vf, ProcessorDefinition route, Statement endpoint) throws CamelException, RepositoryException {
- String action = endpoint.getPredicate().stringValue();
- if (action.startsWith(COMMON.CAMEL)) {
- action = action.substring(COMMON.CAMEL.length());
-
- Value _to = endpoint.getObject();
- if (_to instanceof BNode) {
- RepositoryResult statements = connection.getStatements((BNode)_to, null, null, false);
- while(statements.hasNext()) {
- plan(connection,vf,route,statements.next());
- }
- return;
- }
- String to = _to.stringValue();
- log.debug("\t\t"+action+" -> "+to);
- if (action.equals("to")) {
- route = route.to(to);
- } else if (action.equals("bean")) {
- to = to.substring(5);
- log.info("BeanRoute: "+to);
- route = route.beanRef(to);
- } else if (action.equals("pipeline")) {
- to = to.substring(9);
- RDFList rdfList = new RDFList(connection);
- Collection pipeTo = rdfList.getList(to, COMMON.CAMEL + "pipeline");
- PipelineDefinition pipe = route.pipeline();
- log.info("PipelineRoute: "+pipeTo);
- for(Value piped:pipeTo) pipe.to(piped.stringValue());
- }else if (action.equals("try")||action.equals("catch")||action.equals("finally")) {
- log.info("TryRoute: "+to);
- log.warn("TRY/CATCH not implemented");
- }
- else if (action.equals("choice")) {
- ChoiceDefinition choice = route.choice();
- choice.when(new RDFCamelChoice(connection, to));
- }
- else throw new CamelException("Unknown Camel Action: "+action);
-
- plan(connection, vf, to, route);
- }
- }
-
-}
-class RDFCamelChoice implements Predicate {
- RepositoryConnection connection;
- String to;
-
- public RDFCamelChoice(RepositoryConnection connection, String to) {
- this.connection=connection;
- this.to=to;
- }
-
- @Override
- public boolean matches(Exchange exchange) {
- return false;
- }
-}
diff --git a/src/main/java/com/factcore/vendor/camel/component/SesameComponent.java b/src/main/java/com/factcore/vendor/camel/component/SesameComponent.java
index 07c4a6c..90ef753 100644
--- a/src/main/java/com/factcore/vendor/camel/component/SesameComponent.java
+++ b/src/main/java/com/factcore/vendor/camel/component/SesameComponent.java
@@ -42,13 +42,14 @@ protected Endpoint createEndpoint(String uri, String remaining, Map headers = in.getHeaders();
- Message out = exchange.getOut();
- out.setHeaders(headers);
-
- String contentType = ExchangeHelper.getContentType(exchange);
- String mimeType = COMMON.MIME_TYPE+contentType;
-
- if (asset==null) {
- asset = coreComponent.getAssetRegister().getAsset(uri,mimeType);
- if (asset==null) {
- log.debug("Missing (" + contentType + ") Raw Asset: " + getClass().getSimpleName() + " -> " + uri);
- out.setBody(in.getBody());
- return;
- }
- }
- if (asset!=null) {
- asset = AssetHelper.getAsset(asset, headers);
- log.debug("Asset: "+getClass().getSimpleName()+" -> "+uri);
- out.setBody(asset.getContent());
- }
+ super.execute(exchange);
}
}
diff --git a/src/main/java/com/factcore/vendor/camel/component/core/Base.java b/src/main/java/com/factcore/vendor/camel/component/core/Base.java
index 346b702..8cf2375 100644
--- a/src/main/java/com/factcore/vendor/camel/component/core/Base.java
+++ b/src/main/java/com/factcore/vendor/camel/component/core/Base.java
@@ -1,6 +1,7 @@
package com.factcore.vendor.camel.component.core;
import com.factcore.assets.Asset;
+import com.factcore.assets.AssetHelper;
import com.factcore.iq.exec.Executable;
import com.factcore.oops.AssetNotSupported;
import com.factcore.oops.IQException;
@@ -8,12 +9,14 @@
import com.factcore.vocab.COMMON;
import org.apache.camel.Exchange;
import org.apache.camel.Handler;
+import org.apache.camel.Message;
import org.apache.camel.util.ExchangeHelper;
import org.openrdf.repository.RepositoryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
+import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
@@ -36,32 +39,50 @@ public Base(CoreComponent coreComponent, String uri) throws IOException {
this.uri=uri;
asset = coreComponent.getAssetRegister().getAsset(uri,null);
- log.info(getClass().getSimpleName()+"Asset -> "+asset==null?"":asset.getMimeType()+" -> "+uri+"\n"+asset);
+ log.info(getClass().getSimpleName()+":Asset -> "+(asset==null?"not found: ":asset.getMimeType())+" -> "+uri+"\n"+asset);
}
public abstract Executable getExecutable();
-
@Handler
public void execute(Exchange exchange) throws RepositoryException, ExecutionException, IQException, InterruptedException, IOException, AssetNotSupported {
- Executable exec = getExecutable();
- Map headers = exchange.getIn().getHeaders();
- Map body = exchange.getIn().getBody(Map.class);
- body = body==null?headers:body;
+ Message in = exchange.getIn();
+ Message out = exchange.getOut();
+
+ Map headers = in.getHeaders();
+ Map body = in.getBody(Map.class);
String contentType = ExchangeHelper.getContentType(exchange);
- if (asset!=null) {
- log.debug("Asset: "+getClass().getSimpleName()+" -> "+uri+"\n\t"+asset.getMimeType());
- if (asset.getMimeType()==null) asset.setMimeType(COMMON.MIME_TYPE+contentType);
- Future done = exec.execute(asset, body);
- exchange.getOut().setBody(done.get());
- exchange.getOut().setHeaders(headers);
+ String mimeType = COMMON.MIME_TYPE+contentType;
+
+ if (asset==null) {
+ asset = coreComponent.getAssetRegister().getAsset(uri,mimeType);
+ if (asset==null) {
+ log.debug("Missing (" + contentType + ") Raw Asset: " + getClass().getSimpleName() + " -> " + uri);
+ out.setBody(in.getBody());
+ out.setFault(true);
+ return;
+ }
+ }
+ String endpointUri = exchange.getFromEndpoint().getEndpointUri();
+ asset = AssetHelper.getAsset(asset, headers);
+ log.debug("Asset: " + getClass().getSimpleName() + " -> " + uri);
+
+ out.setHeaders(headers);
+ out.setAttachments(in.getAttachments());
+
+ Executable exec = getExecutable();
+ if (exec!=null) {
+ log.debug("Executing: "+ endpointUri);
+ Map parameters = new HashMap();
+ parameters.put("exchange", exchange);
+ parameters.put("header", headers);
+ parameters.put("body", body);
+ Future done = exec.execute(asset, parameters);
+ out.setBody(done.get());
} else {
- asset = coreComponent.getAssetRegister().getAsset(uri,COMMON.MIME_TYPE+contentType);
- if (asset!=null) log.debug("Found !!");
- log.debug("Missing ("+contentType+") Asset: "+getClass().getSimpleName()+" -> "+uri);
- log.debug("\t{}", headers);
- exchange.getOut().setBody(exchange.getIn().getBody());
- exchange.getOut().setHeaders(headers);
+ log.debug("Asset Only: "+ endpointUri);
+ out.setBody(asset.getContent());
}
}
+
}
diff --git a/src/main/java/com/factcore/vendor/camel/component/core/Execute.java b/src/main/java/com/factcore/vendor/camel/component/core/Execute.java
index 7fe5d29..e0efa8a 100644
--- a/src/main/java/com/factcore/vendor/camel/component/core/Execute.java
+++ b/src/main/java/com/factcore/vendor/camel/component/core/Execute.java
@@ -2,7 +2,7 @@
import com.factcore.iq.exec.Executor;
import com.factcore.iq.exec.Inferring;
-import com.factcore.iq.exec.Publishing;
+import com.factcore.iq.exec.Templating;
import com.factcore.iq.exec.Scripting;
import com.factcore.oops.AssetNotSupported;
import com.factcore.oops.FactException;
@@ -44,7 +44,7 @@ public void execute(Exchange exchange) throws RepositoryException, ExecutionExce
Executor executor = new Executor(coreComponent.getFactSpace());
executor.addExecutable(new Scripting());
- executor.addExecutable(new Publishing());
+ executor.addExecutable(new Templating());
executor.addExecutable(new Inferring(coreComponent.getFactSpace()));
Map executed = executor.execute(uri, headers);
diff --git a/src/main/java/com/factcore/vendor/camel/component/core/Publish.java b/src/main/java/com/factcore/vendor/camel/component/core/Publish.java
index 6b96792..3393dec 100644
--- a/src/main/java/com/factcore/vendor/camel/component/core/Publish.java
+++ b/src/main/java/com/factcore/vendor/camel/component/core/Publish.java
@@ -1,7 +1,7 @@
package com.factcore.vendor.camel.component.core;
import com.factcore.iq.exec.Executable;
-import com.factcore.iq.exec.Publishing;
+import com.factcore.iq.exec.Templating;
import com.factcore.vendor.camel.component.CoreComponent;
import java.io.IOException;
@@ -21,6 +21,6 @@ public Publish(CoreComponent coreComponent, String substring) throws IOException
@Override
public Executable getExecutable() {
- return new Publishing();
+ return new Templating();
}
}
diff --git a/src/main/java/com/factcore/vendor/camel/planner/RDFRoutePlanner.java b/src/main/java/com/factcore/vendor/camel/planner/RDFRoutePlanner.java
new file mode 100644
index 0000000..a5bada6
--- /dev/null
+++ b/src/main/java/com/factcore/vendor/camel/planner/RDFRoutePlanner.java
@@ -0,0 +1,274 @@
+package com.factcore.vendor.camel.planner;
+
+import com.factcore.assets.AssetRegister;
+import com.factcore.assets.SesameAssetRegister;
+import com.factcore.fact.FactSpace;
+import com.factcore.vendor.sesame.util.RDFList;
+import com.factcore.vocab.COMMON;
+import org.apache.camel.*;
+import org.apache.camel.builder.DataFormatClause;
+import org.apache.camel.builder.ExpressionBuilder;
+import org.apache.camel.builder.PredicateBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.ChoiceDefinition;
+import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.model.RouteDefinition;
+import org.openrdf.model.*;
+import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.repository.RepositoryException;
+import org.openrdf.repository.RepositoryResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collection;
+
+/**
+ * Scorpio (c) 2014
+ * Module: com.factcore.vendor.camel
+ * User : lee
+ * Date : 21/06/2014
+ * Time : 5:58 PM
+ */
+public class RDFRoutePlanner extends RoutePlanner {
+ static protected final Logger log = LoggerFactory.getLogger(RDFRoutePlanner.class);
+
+ FactSpace factSpace = null;
+ int count = 0;
+ AssetRegister assetRegister = null;
+ String baseURI = COMMON.CAMEL;
+ URI TO = null;
+
+ public RDFRoutePlanner(FactSpace factSpace) throws Exception {
+ super();
+ init(factSpace);
+ }
+
+ public RDFRoutePlanner(CamelContext camelContext, FactSpace factSpace) throws Exception {
+ super(camelContext);
+ init(factSpace);
+ }
+
+ private void init(FactSpace factSpace) {
+ this.factSpace=factSpace;
+ assetRegister = new SesameAssetRegister(factSpace.getConnection());
+ TO = factSpace.getConnection().getValueFactory().createURI(getBaseURI() + "to");
+ }
+
+ public void setBaseURI(String prefix) {
+ this.baseURI = prefix;
+ }
+
+ public String getBaseURI() {
+ return baseURI;
+ }
+
+ public int plan() throws Exception {
+ return plan(factSpace);
+ }
+
+ public int plan(FactSpace space) throws Exception {
+ plan(space,space.getIdentity());
+ return count;
+ }
+
+ public void plan(FactSpace space, final String routeURI) throws Exception {
+ final RepositoryConnection connection = space.getConnection();
+ final ValueFactory vf = connection.getValueFactory();
+ String FROM = getBaseURI()+"from";
+ log.debug("Plan Route: "+routeURI+" -> "+FROM);
+ RepositoryResult froms = connection.getStatements(vf.createURI(routeURI), vf.createURI(FROM), null, false);
+
+ while(froms.hasNext()){
+ Statement next = froms.next();
+ final Value _routeID = next.getSubject();
+ final Value _from = next.getObject();
+ RouteBuilder routing = new org.apache.camel.builder.RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+// errorHandler(deadLetterChannel("mock:error"));
+ log.debug("Configure Route ("+_routeID+") -> "+_from);
+ String from = _from.stringValue();
+ log.debug("\troute:"+from+" @ "+_routeID);
+ RouteDefinition tried = from(from);
+// tried.doTry();
+
+ log.debug("\ttry:" + tried);
+ ProcessorDefinition ended = tryResource(connection, tried, (Resource) _from);
+
+ if (ended.getOutputs().isEmpty()) {
+ log.warn("NO ENDPOINT: "+_from);
+ ended.to("log:missing-endpoint");
+ }
+ log.debug("\tended:" + ended+" <- "+tried);
+
+// tried.doCatch(Exception.class).to("log:catch:" + routeURI).
+// doFinally().to("log:finally:" + routeURI).
+ ended.end();
+ log.debug("\tfinally:" + ended);
+ count++;
+ }
+ };
+ context.addRoutes(routing);
+ }
+ }
+
+ protected ProcessorDefinition tryResource(final RepositoryConnection connection, final ProcessorDefinition fromRoute, final Resource from) throws RepositoryException, CamelException {
+ log.debug("Plan From: "+from+" -> "+fromRoute);
+
+ RepositoryResult plannedRoutes = connection.getStatements(from, null, null, false);
+ while(plannedRoutes.hasNext()) {
+ Statement next = plannedRoutes.next();
+ String action = next.getPredicate().stringValue();
+ Value to = next.getObject();
+ if (to instanceof BNode) {
+ tryResource(connection, fromRoute, (BNode) to);
+ } else if (action.startsWith(getBaseURI()) && (to instanceof Resource)) {
+ tryAction(connection, fromRoute, (Resource) to, next.getPredicate(), action.substring(getBaseURI().length()));
+ }
+ }
+ return fromRoute;
+ }
+
+ protected ProcessorDefinition tryAction(RepositoryConnection connection, ProcessorDefinition from, Resource _to, URI predicate, String action) throws RepositoryException, CamelException {
+ String to = _to.stringValue();
+ log.debug(action+" action: -> "+to);
+
+ if (action.equals("to") || action.equals("do")) {
+ doAction(connection,from,_to, predicate);
+ } else if (action.equals("bean")) {
+ to = to.substring(5);
+ log.info("BeanRoute: "+to);
+ from = from.beanRef(to);
+ } else if (action.equals("validate")) {
+ from = from.validate(new RDFBasedExpression(connection, to));
+ } else if (action.equals("split")) {
+ from = from.split(new RDFBasedExpression(connection,to));
+ } else if (action.startsWith("marshal:")) {
+ String type = action.substring("marshal:".length());
+ DataFormatClause marshal = from.marshal();
+ log.info("Marshall: "+type+" -> "+marshal);
+ switch(type) {
+ case "csv": from = marshal.csv(); break;
+ case "avro": from = marshal.avro(); break;
+ case "base64": from = marshal.base64(); break;
+ case "castor": from = marshal.castor(); break;
+ case "gzip": from = marshal.gzip(); break;
+ case "jaxb": from = marshal.jaxb(); break;
+ case "hl7": from = marshal.hl7(); break;
+ case "jibx": from = marshal.jibx(); break;
+ case "protobuf": from = marshal.protobuf(); break;
+ case "rss": from = marshal.rss(); break;
+ case "secureXML": from = marshal.secureXML(); break;
+ case "serialization": from = marshal.serialization(); break;
+ case "soapjaxb": from = marshal.soapjaxb(); break;
+ case "string": from = marshal.string(); break;
+ case "syslog": from = marshal.syslog(); break;
+ case "tidyMarkup": from = marshal.tidyMarkup(); break;
+ case "xmlBeans": from = marshal.xmlBeans(); break;
+ case "xmljson": from = marshal.xmljson(); break;
+ case "zip": from = marshal.zip(); break;
+ case "zipFile": from = marshal.zipFile(); break;
+ }
+ } else if (action.startsWith("unmarshal:")) {
+ String type = action.substring("unmarshal:".length());
+ DataFormatClause unmarshal = from.unmarshal();
+ log.info("Marshall: "+type+" -> "+unmarshal);
+ switch(type) {
+ case "csv": from = unmarshal.csv(); break;
+ case "avro": from = unmarshal.avro(); break;
+ case "base64": from = unmarshal.base64(); break;
+ case "castor": from = unmarshal.castor(); break;
+ case "gzip": from = unmarshal.gzip(); break;
+ case "jaxb": from = unmarshal.jaxb(); break;
+ case "hl7": from = unmarshal.hl7(); break;
+ case "jibx": from = unmarshal.jibx(); break;
+ case "protobuf": from = unmarshal.protobuf(); break;
+ case "rss": from = unmarshal.rss(); break;
+ case "secureXML": from = unmarshal.secureXML(); break;
+ case "serialization": from = unmarshal.serialization(); break;
+ case "soapjaxb": from = unmarshal.soapjaxb(); break;
+ case "string": from = unmarshal.string(); break;
+ case "syslog": from = unmarshal.syslog(); break;
+ case "tidyMarkup": from = unmarshal.tidyMarkup(); break;
+ case "xmlBeans": from = unmarshal.xmlBeans(); break;
+ case "xmljson": from = unmarshal.xmljson(); break;
+ case "zip": from = unmarshal.zip(); break;
+ case "zipFile": from = unmarshal.zipFile(); break;
+ }
+ } else if (action.equals("filter")) {
+ from = from.filter(new RDFBasedPredicate(connection, to));
+ } else if (action.equals("sort")) {
+ from = from.sort(new RDFBasedExpression(connection, to));
+ } else if (action.equals("resequence")) {
+ from = from.resequence(new RDFBasedExpression(connection, to));
+ } else if (action.equals("recipientList")) {
+ from = from.recipientList(new RDFBasedExpression(connection, to));
+ } else if (action.equals("loop")) {
+ from = from.loop(new RDFBasedExpression(connection, to));
+ } else if (action.equals("delay")) {
+ from = from.delay(new RDFBasedExpression(connection,to));
+ } else if (action.equals("choice")) {
+ return tryResource(connection, from.choice(), _to).endChoice();
+ } else if (action.equals("when") && from instanceof ChoiceDefinition) {
+ ChoiceDefinition choice = (ChoiceDefinition)from;
+ from = choice.when(new RDFBasedPredicate(connection, to));
+ } else if (action.equals("otherwise") && from instanceof ChoiceDefinition) {
+ ChoiceDefinition choice = (ChoiceDefinition)from;
+ from = choice.otherwise();
+ } else if (action.equals("transform")) {
+ from = from.transform(new RDFBasedExpression(connection,to));
+ } else log.warn("??? action: " + action);
+
+ return from;
+ }
+
+ private ProcessorDefinition doAction(RepositoryConnection connection, ProcessorDefinition from, Resource _to, URI predicate) throws RepositoryException, CamelException {
+ RDFList toList = new RDFList(connection);
+ Collection pipeline = toList.getList(_to , predicate);
+ if (pipeline.isEmpty()) {
+ return from.to(_to.stringValue());
+ } else {
+ for(Value pipe: pipeline) {
+ if (pipe instanceof Resource) from = tryResource(connection, from, (BNode) pipe);
+ }
+ }
+ return from;
+ }
+
+}
+class RDFBasedPredicate implements Predicate {
+ RepositoryConnection connection;
+ Expression refExpression;
+
+ public RDFBasedPredicate(RepositoryConnection connection, String to) {
+ this.connection=connection;
+ refExpression = ExpressionBuilder.refExpression(to);
+ RDFRoutePlanner.log.debug("Predicate: "+to+" -> "+refExpression);
+ }
+
+ @Override
+ public boolean matches(Exchange exchange) {
+ RDFRoutePlanner.log.debug("refExpression: "+refExpression);
+ if (refExpression==null) return false;
+ Predicate predicate = PredicateBuilder.toPredicate(refExpression);
+ RDFRoutePlanner.log.debug("Predicate: "+predicate);
+ return predicate==null?false:predicate.matches(exchange);
+ }
+}
+
+class RDFBasedExpression implements Expression {
+ RepositoryConnection connection;
+ Expression expression = null;
+
+ public RDFBasedExpression(RepositoryConnection connection, String to) {
+ this.connection=connection;
+ expression = ExpressionBuilder.refExpression(to);
+ }
+
+ @Override
+ public T evaluate(Exchange exchange, Class tClass) {
+ RDFRoutePlanner.log.debug("Expression: "+expression+" -> "+expression.getClass()+" -> "+tClass);
+ if (expression==null) return null;
+ return expression.evaluate(exchange,tClass);
+ }
+}
diff --git a/src/main/java/com/factcore/vendor/camel/RoutePlanner.java b/src/main/java/com/factcore/vendor/camel/planner/RoutePlanner.java
similarity index 97%
rename from src/main/java/com/factcore/vendor/camel/RoutePlanner.java
rename to src/main/java/com/factcore/vendor/camel/planner/RoutePlanner.java
index 703f47f..a3cd41e 100644
--- a/src/main/java/com/factcore/vendor/camel/RoutePlanner.java
+++ b/src/main/java/com/factcore/vendor/camel/planner/RoutePlanner.java
@@ -1,4 +1,4 @@
-package com.factcore.vendor.camel;
+package com.factcore.vendor.camel.planner;
import org.apache.camel.CamelContext;
import org.apache.camel.ProducerTemplate;
diff --git a/src/main/java/com/factcore/vendor/sesame/util/RDFList.java b/src/main/java/com/factcore/vendor/sesame/util/RDFList.java
index 971501a..f3f2829 100644
--- a/src/main/java/com/factcore/vendor/sesame/util/RDFList.java
+++ b/src/main/java/com/factcore/vendor/sesame/util/RDFList.java
@@ -22,7 +22,7 @@ public class RDFList {
private static final Logger log = LoggerFactory.getLogger(RDFList.class);
RepositoryConnection connection = null;
- URI rdfFirst = null, rdfRest = null, rdfNil = null, context = null;
+ URI LIST = null, rdfFirst = null, rdfRest = null, rdfNil = null, context = null;
boolean useInferred = true;
Map seen = new HashMap();
@@ -39,20 +39,24 @@ public RDFList(RepositoryConnection connection, String context) {
if (context!=null) this.context = vf.createURI(context);
}
- public Collection getList(String head, String predicate) throws RepositoryException {
+ public Collection getList(String head, String predicate) throws RepositoryException {
ValueFactory vf = connection.getValueFactory();
return getList(vf.createURI(head),vf.createURI(predicate));
}
public Collection getList(Resource head, URI predicate) throws RepositoryException {
List list = new ArrayList();
- log.debug("getList: "+head+" -> "+predicate+" @ "+context);
- RepositoryResult statements = connection.getStatements(head, predicate, null, useInferred, context);
- while (statements.hasNext()) {
+ log.debug("\tgetList: "+head+" -> "+predicate+" @ "+context);
+ RepositoryResult statements = null;
+
+ if (context==null) statements = connection.getStatements(head, predicate, LIST, useInferred);
+ else statements = connection.getStatements(head, predicate, LIST, useInferred, context);
+
+ while (statements.hasNext()) {
Statement statement = statements.next();
- log.debug("Found: "+statement);
Object object = statement.getObject();
if (object instanceof Resource) {
+ log.trace("\t\titem: "+statement);
addToList(list, (Resource) object);
}
}
@@ -62,12 +66,14 @@ public Collection getList(Resource head, URI predicate) throws Repository
protected void addToList(Collection list, Resource head) throws RepositoryException {
if (seen.containsKey(head.stringValue())) return;
seen.put(head.stringValue(), true);
- RepositoryResult statements = connection.getStatements(head, rdfFirst, null, useInferred, context);
+
+ RepositoryResult statements = getStatements(head,rdfFirst);
while (statements.hasNext()) {
Statement statement = statements.next();
list.add(statement.getObject());
+ log.trace("\t\t\t+"+statement);
}
- RepositoryResult nexts = connection.getStatements(head, rdfRest, null, useInferred, context);
+ RepositoryResult nexts = getStatements(head,rdfRest);
while (nexts.hasNext()) {
Statement statement = nexts.next();
Object object = statement.getObject();
@@ -77,4 +83,11 @@ protected void addToList(Collection list, Resource head) throws Repositor
}
}
+ protected RepositoryResult getStatements(Resource head, URI predicate) throws RepositoryException {
+ if (context==null)
+ return connection.getStatements(head, predicate, null, useInferred);
+ else
+ return connection.getStatements(head, predicate, null, useInferred, context);
+ }
+
}
diff --git a/src/main/java/com/factcore/vendor/sesame/util/RDFScalars.java b/src/main/java/com/factcore/vendor/sesame/util/RDFScalars.java
new file mode 100644
index 0000000..360d326
--- /dev/null
+++ b/src/main/java/com/factcore/vendor/sesame/util/RDFScalars.java
@@ -0,0 +1,68 @@
+package com.factcore.vendor.sesame.util;
+
+import org.openrdf.model.*;
+import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.repository.RepositoryException;
+import org.openrdf.repository.RepositoryResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Scorpio (c) 2014
+ * Module: com.factcore.vendor.sesame.util
+ * User : lee
+ * Date : 30/06/2014
+ * Time : 10:53 PM
+ */
+public class RDFScalars {
+ private static final Logger log = LoggerFactory.getLogger(RDFScalars.class);
+
+ RepositoryConnection connection = null;
+ ValueFactory vf = null;
+ URI context = null;
+ boolean useInferred = true;
+
+ public RDFScalars(RepositoryConnection connection) {
+ this(connection, null);
+ }
+
+ public RDFScalars(RepositoryConnection connection, String context) {
+ this.connection=connection;
+ vf = connection.getValueFactory();
+ if (context!=null) this.context = vf.createURI(context);
+ }
+
+ public Literal getLiteral(Resource s, URI p, String xsdType) throws RepositoryException {
+ Literal found = null;
+ RepositoryResult statements = connection.getStatements(s, p, null, useInferred, context);
+ URI xsdURI = vf.createURI(xsdType);
+ while(statements.hasNext()) {
+ Statement statement = statements.next();
+ Value o = statement.getObject();
+ if (o instanceof Literal) {
+ Literal l = (Literal)o;
+ if (l.getDatatype()==null && found == null) found = l;
+ else if (l.getDatatype().equals(xsdURI)) found = l;
+ }
+ }
+ return found;
+ }
+
+ public URI getURI(Resource s, URI p) throws RepositoryException {
+ RepositoryResult statements = connection.getStatements(s, p, null, useInferred, context);
+ while(statements.hasNext()) {
+ Statement statement = statements.next();
+ if (statement.getObject() instanceof URI) return (URI)statement.getObject();
+ }
+ return null;
+ }
+
+ public Value getValue(Resource s, URI p) throws RepositoryException {
+ RepositoryResult statements = connection.getStatements(s, p, null, useInferred, context);
+ while(statements.hasNext()) {
+ Statement statement = statements.next();
+ return statement.getObject();
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/factcore/vendor/spring/RDFBeanDefinitionReader.java b/src/main/java/com/factcore/vendor/spring/RDFBeanDefinitionReader.java
new file mode 100644
index 0000000..1cbcb86
--- /dev/null
+++ b/src/main/java/com/factcore/vendor/spring/RDFBeanDefinitionReader.java
@@ -0,0 +1,256 @@
+package com.factcore.vendor.spring;
+
+import com.factcore.iq.bean.BeanConverter;
+import com.factcore.util.Identifiable;
+import com.factcore.vendor.sesame.util.RDFList;
+import com.factcore.vendor.sesame.util.RDFScalars;
+import com.factcore.vocab.COMMON;
+import org.openrdf.model.*;
+import org.openrdf.model.vocabulary.RDF;
+import org.openrdf.repository.RepositoryConnection;
+import org.openrdf.repository.RepositoryException;
+import org.openrdf.repository.RepositoryResult;
+import org.semarglproject.vocab.XSD;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.MutablePropertyValues;
+import org.springframework.beans.factory.BeanDefinitionStoreException;
+import org.springframework.beans.factory.config.ConstructorArgumentValues;
+import org.springframework.beans.factory.config.RuntimeBeanReference;
+import org.springframework.beans.factory.support.AbstractBeanDefinition;
+import org.springframework.beans.factory.support.AbstractBeanDefinitionReader;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.beans.factory.support.GenericBeanDefinition;
+import org.springframework.core.io.Resource;
+import org.springframework.util.Assert;
+
+import java.io.IOException;
+import java.util.Collection;
+
+/**
+ * Scorpio (c) 2014
+ * Module: com.factcore.vendor.spring
+ * User : lee
+ * Date : 18/06/2014
+ * Time : 9:27 AM
+ */
+public class RDFBeanDefinitionReader extends AbstractBeanDefinitionReader implements Identifiable {
+ static protected final Logger log = LoggerFactory.getLogger(RDFBeanDefinitionReader.class);
+
+ String NS = COMMON.CORE+"bean/";
+ String BEAN = NS +"Bean";
+ String ontology = NS;
+ RepositoryConnection connection;
+ ValueFactory vf = null;
+ BeanConverter converter = new BeanConverter();
+
+ public RDFBeanDefinitionReader(RepositoryConnection connection, BeanDefinitionRegistry registry) {
+ super(registry);
+ Assert.notNull(connection, "RepositoryConnection can't be NULL");
+ this.connection=connection;
+ vf = connection.getValueFactory();
+ setBeanClassLoader(Thread.currentThread().getContextClassLoader());
+ }
+
+ public void setIdentity(String ontology) {
+ this.ontology=ontology;
+ }
+
+
+ public void alias(String name, String alias) {
+ getRegistry().registerAlias(name, alias);
+ }
+
+
+ @Override
+ public int loadBeanDefinitions(String resource) throws BeanDefinitionStoreException {
+ try {
+ return read(connection, resource);
+ } catch (RepositoryException e) {
+ throw new BeanDefinitionStoreException("Repository Error: "+e.getMessage(),e);
+ } catch (ClassNotFoundException e) {
+ throw new BeanDefinitionStoreException("Class Not Found: "+e.getMessage(),e);
+ }
+ }
+
+ @Override
+ public int loadBeanDefinitions(Resource resource) throws BeanDefinitionStoreException {
+ try {
+ return read(connection, resource);
+ } catch (RepositoryException e) {
+ throw new BeanDefinitionStoreException("Repository Error: "+e.getMessage(),e);
+ } catch (IOException e) {
+ throw new BeanDefinitionStoreException("IO Error: "+e.getMessage(),e);
+ } catch (ClassNotFoundException e) {
+ throw new BeanDefinitionStoreException("Class Not Found: "+e.getMessage(),e);
+ }
+ }
+
+ public int read(RepositoryConnection connection, Resource resource) throws RepositoryException, IOException, ClassNotFoundException {
+ Assert.notNull(connection, "RepositoryConnection must not be null");
+ return read(connection, resource.getURI().toString());
+ }
+
+ private int read(RepositoryConnection connection, String resource) throws RepositoryException, ClassNotFoundException {
+ int count = 0;
+ URI resourceURI = resource==null?null:vf.createURI(resource);
+ log.debug("RDF Bean: "+resource);
+ RepositoryResult beans = connection.getStatements( resourceURI, RDF.TYPE, vf.createURI(BEAN), true);
+ while(beans.hasNext()) {
+ Statement bean = beans.next();
+ String beanClass = bean.getSubject().stringValue();
+ AbstractBeanDefinition beanDefinition = defineBean(bean);
+ getRegistry().registerBeanDefinition(beanClass, beanDefinition);
+ log.debug("Register: "+beanClass+" -> "+beanDefinition);
+ if (beanDefinition!=null) count++;
+ }
+ return count;
+
+ }
+
+ private AbstractBeanDefinition defineBean(Statement bean) throws RepositoryException, ClassNotFoundException {
+ String beanClass = bean.getSubject().stringValue();
+ AbstractBeanDefinition defineBean = defineBean(beanClass);
+
+ /*
+ * Scalar Definitions
+ */
+
+ org.openrdf.model.Resource beanURI = bean.getSubject();
+ RDFScalars rdfScalars= new RDFScalars(connection);
+
+ Literal lazyInit = rdfScalars.getLiteral(beanURI, createURI( "lazyInit"), XSD.BOOLEAN);
+ if (lazyInit!=null) defineBean.setLazyInit(lazyInit.booleanValue());
+
+ Literal initMethod = rdfScalars.getLiteral(beanURI, createURI( "initMethod"), XSD.STRING);
+ if (initMethod!=null) defineBean.setInitMethodName(initMethod.stringValue());
+
+ Literal destroyMethod = rdfScalars.getLiteral(beanURI, createURI( "destroyMethod"), XSD.STRING);
+ if (destroyMethod!=null) defineBean.setDestroyMethodName(destroyMethod.stringValue());
+
+ Literal lenient = rdfScalars.getLiteral(beanURI, createURI( "lenient"), XSD.BOOLEAN);
+ if (lenient!=null) defineBean.setLenientConstructorResolution(lenient.booleanValue());
+
+ Literal enforceInit = rdfScalars.getLiteral(beanURI, createURI( "enforceInit"), XSD.BOOLEAN);
+ if (enforceInit!=null) defineBean.setEnforceInitMethod(enforceInit.booleanValue());
+
+ Literal enforceDestroy = rdfScalars.getLiteral(beanURI, createURI( "enforceDestroy"), XSD.BOOLEAN);
+ if (enforceDestroy!=null) defineBean.setEnforceDestroyMethod(enforceDestroy.booleanValue());
+
+ Literal primary = rdfScalars.getLiteral(beanURI, createURI( "primary"), XSD.BOOLEAN);
+ if (primary!=null) defineBean.setPrimary(primary.booleanValue());
+
+ Literal autoWire = rdfScalars.getLiteral(beanURI, createURI( "autoWire"), XSD.BOOLEAN);
+ if (autoWire!=null) defineBean.setAutowireCandidate(autoWire.booleanValue());
+
+ Literal description = rdfScalars.getLiteral(beanURI, createURI( "description"), XSD.STRING);
+ if (description!=null) defineBean.setDescription(description.stringValue());
+
+ defineBean.setDependencyCheck(AbstractBeanDefinition.DEPENDENCY_CHECK_ALL);
+
+ /*
+ * Vector Definitions
+ */
+
+ RDFList rdfList = new RDFList(connection);
+ // constructor arguments
+ int i=0;
+ URI newPredicate = createURI( "new");
+ ConstructorArgumentValues argValues = new ConstructorArgumentValues();
+ Collection initArgs = rdfList.getList(beanURI, newPredicate);
+ for(Value initValue: initArgs) {
+ i = addToArguments(argValues, i, initValue);
+ }
+ if (i==0) {
+ // handle single scalar reference
+ Value arg = rdfScalars.getValue(beanURI, newPredicate);
+ if (arg!=null) addToArguments(argValues, 0, arg);
+ }
+ defineBean.setConstructorArgumentValues(argValues);
+
+ // dependsOn
+ Collection dependsList = rdfList.getList(beanURI, createURI( "dependsOn"));
+ String[] dependsOn = new String[dependsList.size()];
+ i=0;
+ for(Value depends: dependsList) {
+ dependsOn[i++]=depends.stringValue();
+ }
+ if (i>0) {
+ log.debug("\tDepends On: "+dependsOn);
+ defineBean.setDependsOn(dependsOn);
+ }
+
+ // properties
+ MutablePropertyValues propertyValues = defineBean.getPropertyValues();
+ RepositoryResult statements = connection.getStatements(beanURI, null, null, false);
+ while(statements.hasNext()) {
+ Statement next = statements.next();
+ URI pURI = next.getPredicate();
+ if (pURI.toString().startsWith(getIdentity())) {
+ addToProperties(propertyValues, pURI.getLocalName(), next.getObject());
+ }
+ }
+ log.debug("Defined: "+beanClass+" @ "+defineBean);
+ return defineBean;
+ }
+
+ private URI createURI(String localPart) {
+ return vf.createURI(getBaseURI() + localPart);
+ }
+
+ private int addToArguments(ConstructorArgumentValues argValues, int ix, Value value) {
+ if (value instanceof URI) {
+ String uri = value.stringValue();
+ log.debug("\tRef: "+uri);
+ argValues.addIndexedArgumentValue(ix++, new RuntimeBeanReference(uri));
+ } else if (value instanceof Literal) {
+ Literal literal = (Literal)value;
+ log.debug("\tNew: "+literal);
+ Object o = converter.convertToType(literal.stringValue(), literal.getDatatype().toString());
+ argValues.addIndexedArgumentValue(ix++, o, o.getClass().getCanonicalName());
+ } else {
+ log.debug("\tinit? "+value);
+ }
+ return ix;
+ }
+
+ private void addToProperties(MutablePropertyValues propertyValues, String local, Value value) {
+ if (value instanceof URI) {
+ String uri = value.stringValue();
+ log.debug("\tRef: "+uri);
+ propertyValues.add(local, new RuntimeBeanReference(uri));
+ } else if (value instanceof Literal) {
+ Literal literal = (Literal)value;
+ log.debug("\tNew: "+literal);
+ Object o = converter.convertToType(literal.stringValue(), literal.getDatatype().toString());
+ propertyValues.add(local, o);
+ } else {
+ log.debug("\tinit? "+value);
+ }
+ }
+
+ protected AbstractBeanDefinition defineBean(String beanClass) throws ClassNotFoundException {
+ if (beanClass.startsWith("bean:")) beanClass = beanClass.substring(5);
+ GenericBeanDefinition beanDef = new GenericBeanDefinition();
+ beanDef.setBeanClassName(beanClass);
+ beanDef.setPropertyValues(new MutablePropertyValues());
+ beanDef.setScope(beanDef.SCOPE_DEFAULT);
+ beanDef.setLazyInit(true);
+ beanDef.setSynthetic(false);
+ beanDef.setAbstract(false);
+ beanDef.setAutowireCandidate(true);
+ log.debug("Resolving: "+beanClass);
+ beanDef.resolveBeanClass(getBeanClassLoader());
+ return beanDef;
+ }
+
+
+ public String getBaseURI() {
+ return NS;
+ }
+
+ @Override
+ public String getIdentity() {
+ return ontology;
+ }
+}
diff --git a/src/main/java/com/factcore/vendor/spring/RDFBeanFactory.java b/src/main/java/com/factcore/vendor/spring/RDFBeanFactory.java
deleted file mode 100644
index 96a2a91..0000000
--- a/src/main/java/com/factcore/vendor/spring/RDFBeanFactory.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.factcore.vendor.spring;
-
-import com.factcore.fact.FactSpace;
-import org.openrdf.repository.RepositoryConnection;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
-import org.springframework.context.support.GenericApplicationContext;
-
-/**
- * Fact:Core (c) 2014
- * Module: com.factcore.vendor.spring
- * User : lee
- * Date : 18/06/2014
- * Time : 9:27 AM
- */
-public class RDFBeanFactory extends GenericApplicationContext {
- FactSpace factSpace = null;
-
- public RDFBeanFactory(RepositoryConnection repositoryConnection, String context) {
- this.factSpace = new FactSpace(repositoryConnection, context);
- }
-
- public RDFBeanFactory(FactSpace factSpace) {
- this.factSpace = factSpace;
- }
-
- @Override
- public Object getBean(String name) throws BeansException {
- return null;
- }
-
- @Override
- public T getBean(String name, Class requiredType) throws BeansException {
- return null;
- }
-
- @Override
- public T getBean(Class requiredType) throws BeansException {
- return null;
- }
-
- @Override
- public Object getBean(String name, Object... args) throws BeansException {
- return null;
- }
-
- @Override
- public boolean containsBean(String name) {
- return false;
- }
-
- @Override
- public boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
- return name.startsWith("bean:");
- }
-
- @Override
- public boolean isPrototype(String name) throws NoSuchBeanDefinitionException {
- return false;
- }
-
- @Override
- public boolean isTypeMatch(String name, Class> targetType) throws NoSuchBeanDefinitionException {
- return false;
- }
-
- @Override
- public Class> getType(String name) throws NoSuchBeanDefinitionException {
- return null;
- }
-
- @Override
- public String[] getAliases(String name) {
- return new String[0];
- }
-}
diff --git a/src/test/java/com/factcore/iq/PublishingTest.groovy b/src/test/java/com/factcore/iq/PublishingTest.groovy
index 0eb77c8..1be81ed 100644
--- a/src/test/java/com/factcore/iq/PublishingTest.groovy
+++ b/src/test/java/com/factcore/iq/PublishingTest.groovy
@@ -1,7 +1,7 @@
package com.factcore.iq
import com.factcore.assets.Asset
-import com.factcore.iq.exec.Publishing
+import com.factcore.iq.exec.Templating
/**
* Fact:Core (c) 2014
@@ -12,10 +12,10 @@ import com.factcore.iq.exec.Publishing
*
*
*/
-class PublishingTest extends GroovyTestCase {
+class TemplatingTest extends GroovyTestCase {
void testWith() {
- def publisher = new Publishing(new Asset("hello \${greeting}"));
+ def publisher = new Templating(new Asset("hello \${greeting}"));
def future = publisher.with([ "greeting": "world"])
assert future!=null;
Writable template = future.get();
diff --git a/src/test/java/com/factcore/vendor/camel/RoutePlannerTest.groovy b/src/test/java/com/factcore/vendor/camel/RoutePlannerTest.groovy
index e1bbf8e..452b802 100644
--- a/src/test/java/com/factcore/vendor/camel/RoutePlannerTest.groovy
+++ b/src/test/java/com/factcore/vendor/camel/RoutePlannerTest.groovy
@@ -1,5 +1,6 @@
package com.factcore.vendor.camel
+import com.factcore.vendor.camel.planner.RoutePlanner
import org.junit.Test
/**
* Scorpio (c) 2014
diff --git a/src/test/java/com/factcore/vendor/spring/GreetingsEarthling.java b/src/test/java/com/factcore/vendor/spring/GreetingsEarthling.java
new file mode 100644
index 0000000..a5f8646
--- /dev/null
+++ b/src/test/java/com/factcore/vendor/spring/GreetingsEarthling.java
@@ -0,0 +1,18 @@
+package com.factcore.vendor.spring;
+
+/**
+ * Scorpio (c) 2014
+ * Module: com.factcore.vendor.spring
+ * User : lee
+ * Date : 1/07/2014
+ * Time : 1:23 AM
+ */
+public class GreetingsEarthling {
+
+ public GreetingsEarthling() {
+ }
+
+ public String toString() {
+ return "greetings earthling";
+ }
+}
diff --git a/src/test/java/com/factcore/vendor/spring/HelloWorld.java b/src/test/java/com/factcore/vendor/spring/HelloWorld.java
new file mode 100644
index 0000000..af3715f
--- /dev/null
+++ b/src/test/java/com/factcore/vendor/spring/HelloWorld.java
@@ -0,0 +1,33 @@
+package com.factcore.vendor.spring;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Scorpio (c) 2014
+ * Module: com.factcore.vendor.spring
+ * User : lee
+ * Date : 1/07/2014
+ * Time : 12:47 AM
+ */
+public class HelloWorld {
+ static protected final Logger log = LoggerFactory.getLogger(HelloWorld.class);
+ GreetingsEarthling greetingsEarthling;
+
+ public HelloWorld() {
+ log.debug("Hello Spring");
+ }
+
+ public HelloWorld(GreetingsEarthling earthling) {
+ this.greetingsEarthling=earthling;
+ log.debug(earthling.toString());
+ }
+
+ public boolean isWelcomed() {
+ return greetingsEarthling!=null;
+ }
+
+ public String toString() {
+ return isWelcomed()?greetingsEarthling.toString():"Who are?";
+ }
+}
diff --git a/src/test/java/com/factcore/vendor/spring/RDFBeanDefinitionReaderTest.groovy b/src/test/java/com/factcore/vendor/spring/RDFBeanDefinitionReaderTest.groovy
new file mode 100644
index 0000000..88f4f1d
--- /dev/null
+++ b/src/test/java/com/factcore/vendor/spring/RDFBeanDefinitionReaderTest.groovy
@@ -0,0 +1,70 @@
+package com.factcore.vendor.spring
+
+import org.junit.Before
+import org.openrdf.repository.RepositoryConnection
+import org.openrdf.repository.sail.SailRepository
+import org.openrdf.rio.RDFFormat
+import org.openrdf.sail.inferencer.fc.ForwardChainingRDFSInferencer
+import org.openrdf.sail.memory.MemoryStore
+import org.springframework.beans.factory.config.BeanDefinition
+import org.springframework.context.ApplicationContext
+import org.springframework.context.support.GenericApplicationContext
+
+/**
+ * Scorpio (c) 2014
+ * Module: com.factcore.vendor.spring
+ * User : lee
+ * Date : 30/06/2014
+ * Time : 11:33 PM
+ *
+ *
+ */
+class RDFBeanDefinitionReaderTest extends GroovyTestCase {
+ RepositoryConnection connection;
+
+ @Before
+ void init() {
+ if (connection!=null) return;
+ def store = new SailRepository(new ForwardChainingRDFSInferencer(new MemoryStore()));
+ store.initialize();
+ connection = store.getConnection();
+ connection.begin()
+ def stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("com/factcore/vendor/spring/HelloWorld.n3");
+ assert stream!=null;
+ connection.add(stream, "urn:test", RDFFormat.N3);
+ connection.commit()
+ }
+
+ void testRegister() {
+ init()
+ ApplicationContext applicationContext = new GenericApplicationContext();
+
+ RDFBeanDefinitionReader beanie = new RDFBeanDefinitionReader(connection, applicationContext);
+ BeanDefinition beanDef = beanie.register("bean:com.factcore.vendor.spring.HelloWorld");
+ println "Registered: "+beanDef;
+ }
+
+ void testDefineBean() {
+ init()
+ ApplicationContext applicationContext = new GenericApplicationContext();
+
+ RDFBeanDefinitionReader beanie = new RDFBeanDefinitionReader(connection, applicationContext);
+ BeanDefinition beanDef = beanie.defineBean("com.factcore.vendor.spring.HelloWorld");
+ println "Defined: "+beanDef;
+ }
+
+ void testLoadDefinitions() {
+ init()
+ ApplicationContext applicationContext = new GenericApplicationContext();
+
+ RDFBeanDefinitionReader beanie = new RDFBeanDefinitionReader(connection, applicationContext);
+ def loaded = beanie.loadBeanDefinitions("bean:com.factcore.vendor.spring.HelloWorld");
+ loaded+= beanie.loadBeanDefinitions("bean:com.factcore.vendor.spring.GreetingsEarthling");
+ println "Loaded: "+loaded;
+ def bean = applicationContext.getBean("bean:com.factcore.vendor.spring.HelloWorld");
+ assert bean!=null;
+ assert com.factcore.vendor.spring.HelloWorld.isInstance(bean);
+ assert bean.isWelcomed();
+ println "Hello Bean: "+bean;
+ }
+}
diff --git a/src/test/resources/com/factcore/vendor/spring/HelloWorld.n3 b/src/test/resources/com/factcore/vendor/spring/HelloWorld.n3
new file mode 100644
index 0000000..9c898e3
--- /dev/null
+++ b/src/test/resources/com/factcore/vendor/spring/HelloWorld.n3
@@ -0,0 +1,23 @@
+
+@prefix rdf: .
+@prefix rdfs: .
+@prefix owl: .
+@prefix dc: .
+@prefix eg: .
+@prefix xsd: .
+@prefix acl: .
+
+@prefix test: .
+@prefix flo: .
+@prefix bean: .
+@prefix : .
+
+
+ a .
+ "greetings".
+
+ a bean:Bean.
+
+ a bean:Bean.
+
+ bean:new ().