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 ().