You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by en...@apache.org on 2011/04/01 15:01:46 UTC
svn commit: r1087691 [2/13] - in /incubator/stanbol/trunk/reengineer: ./
base/ base/.settings/ base/src/ base/src/main/ base/src/main/java/
base/src/main/java/org/ base/src/main/java/org/apache/
base/src/main/java/org/apache/stanbol/ base/src/main/java...
Added: incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/api/util/ReengineerUriRefGenerator.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/api/util/ReengineerUriRefGenerator.java?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/api/util/ReengineerUriRefGenerator.java (added)
+++ incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/api/util/ReengineerUriRefGenerator.java Fri Apr 1 13:01:38 2011
@@ -0,0 +1,105 @@
+package org.apache.stanbol.reengineer.base.api.util;
+
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLClass;
+import org.semanticweb.owlapi.model.OWLClassAssertionAxiom;
+import org.semanticweb.owlapi.model.OWLDataFactory;
+import org.semanticweb.owlapi.model.OWLDataProperty;
+import org.semanticweb.owlapi.model.OWLDataPropertyAssertionAxiom;
+import org.semanticweb.owlapi.model.OWLNamedIndividual;
+import org.semanticweb.owlapi.model.OWLObjectProperty;
+import org.semanticweb.owlapi.model.OWLObjectPropertyAssertionAxiom;
+
+public class ReengineerUriRefGenerator {
+
+ // // Unused protected method that relies on a specific reengineer implementation
+ // protected UriRef createTypedResource(MGraph mGraph, String resourceURI, UriRef type){
+ // UriRef uriRef = new UriRef(resourceURI);
+ // if(type != null){
+ // mGraph.add(new TripleImpl(uriRef, DBS_L1.RDF_TYPE, type));
+ // }
+ //
+ // return uriRef;
+ // }
+
+ protected OWLClassAssertionAxiom createOWLClassAssertionAxiom(OWLDataFactory factory,
+ IRI owlClassIRI,
+ IRI individualIRI) {
+
+ OWLClass owlClass = factory.getOWLClass(owlClassIRI);
+ OWLNamedIndividual individual = factory.getOWLNamedIndividual(individualIRI);
+
+ OWLClassAssertionAxiom classAssertion = factory.getOWLClassAssertionAxiom(owlClass, individual);
+
+ return classAssertion;
+ }
+
+ protected OWLObjectPropertyAssertionAxiom createOWLObjectPropertyAssertionAxiom(OWLDataFactory factory,
+ IRI objectPropertyIRI,
+ IRI subjectIndividualIRI,
+ IRI objectIndividualIRI) {
+
+ OWLObjectProperty objectProperty = factory.getOWLObjectProperty(objectPropertyIRI);
+ OWLNamedIndividual subjectIndividual = factory.getOWLNamedIndividual(subjectIndividualIRI);
+ OWLNamedIndividual objectIndividual = factory.getOWLNamedIndividual(objectIndividualIRI);
+
+ return factory
+ .getOWLObjectPropertyAssertionAxiom(objectProperty, subjectIndividual, objectIndividual);
+ }
+
+ protected OWLDataPropertyAssertionAxiom createOWLDataPropertyAssertionAxiom(OWLDataFactory factory,
+ IRI dataPropertyIRI,
+ IRI subjectIndividualIRI,
+ int data) {
+
+ OWLDataProperty dataProperty = factory.getOWLDataProperty(dataPropertyIRI);
+ OWLNamedIndividual subjectIndividual = factory.getOWLNamedIndividual(subjectIndividualIRI);
+
+ return factory.getOWLDataPropertyAssertionAxiom(dataProperty, subjectIndividual, data);
+ }
+
+ protected OWLDataPropertyAssertionAxiom createOWLDataPropertyAssertionAxiom(OWLDataFactory factory,
+ IRI dataPropertyIRI,
+ IRI subjectIndividualIRI,
+ double data) {
+
+ OWLDataProperty dataProperty = factory.getOWLDataProperty(dataPropertyIRI);
+ OWLNamedIndividual subjectIndividual = factory.getOWLNamedIndividual(subjectIndividualIRI);
+
+ return factory.getOWLDataPropertyAssertionAxiom(dataProperty, subjectIndividual, data);
+ }
+
+ protected OWLDataPropertyAssertionAxiom createOWLDataPropertyAssertionAxiom(OWLDataFactory factory,
+ IRI dataPropertyIRI,
+ IRI subjectIndividualIRI,
+ float data) {
+
+ OWLDataProperty dataProperty = factory.getOWLDataProperty(dataPropertyIRI);
+ OWLNamedIndividual subjectIndividual = factory.getOWLNamedIndividual(subjectIndividualIRI);
+
+ return factory.getOWLDataPropertyAssertionAxiom(dataProperty, subjectIndividual, data);
+ }
+
+ protected OWLDataPropertyAssertionAxiom createOWLDataPropertyAssertionAxiom(OWLDataFactory factory,
+ IRI dataPropertyIRI,
+ IRI subjectIndividualIRI,
+ boolean data) {
+
+ OWLDataProperty dataProperty = factory.getOWLDataProperty(dataPropertyIRI);
+ OWLNamedIndividual subjectIndividual = factory.getOWLNamedIndividual(subjectIndividualIRI);
+
+ return factory.getOWLDataPropertyAssertionAxiom(dataProperty, subjectIndividual, data);
+ }
+
+ protected OWLDataPropertyAssertionAxiom createOWLDataPropertyAssertionAxiom(OWLDataFactory factory,
+ IRI dataPropertyIRI,
+ IRI subjectIndividualIRI,
+ String data) {
+
+ OWLDataProperty dataProperty = factory.getOWLDataProperty(dataPropertyIRI);
+ OWLNamedIndividual subjectIndividual = factory.getOWLNamedIndividual(subjectIndividualIRI);
+
+ return factory.getOWLDataPropertyAssertionAxiom(dataProperty, subjectIndividual, data);
+ }
+
+}
Added: incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/api/util/URIGenerator.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/api/util/URIGenerator.java?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/api/util/URIGenerator.java (added)
+++ incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/api/util/URIGenerator.java Fri Apr 1 13:01:38 2011
@@ -0,0 +1,87 @@
+package org.apache.stanbol.reengineer.base.api.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class URIGenerator {
+
+
+ public static final String SHA1 = "SHA1";
+
+ public static final int MIN_BUF_SIZE = 8 * 1024; // 8 kB
+
+ public static final int MAX_BUF_SIZE = 64 * 1024; // 64 kB
+
+ private static final char[] HEX_DIGITS = "0123456789abcdef".toCharArray();
+
+
+ public static String createID(String baseUri, byte[] content) {
+
+
+ // calculate an ID based on the digest of the content
+ String hexDigest = "";
+ if (!baseUri.startsWith("urn:") && !baseUri.endsWith("/")) {
+ baseUri = baseUri + "/";
+ }
+ try {
+ hexDigest = streamDigest(
+ new ByteArrayInputStream(content), null, SHA1);
+ } catch (IOException e) {
+ // this is not going to happen since output stream is null and the
+ // input data is already loaded in memory
+ }
+
+ return baseUri + SHA1.toLowerCase() + "-" + hexDigest;
+ }
+
+
+
+
+ public static String streamDigest(InputStream in, OutputStream out,
+ String digestAlgorithm) throws IOException {
+ MessageDigest digest;
+ try {
+ digest = MessageDigest.getInstance(digestAlgorithm);
+ } catch (NoSuchAlgorithmException e) {
+ throw (IOException) new IOException().initCause(e);
+ }
+
+ int size = in.available();
+ if (size == 0) {
+ size = MAX_BUF_SIZE;
+ } else if (size < MIN_BUF_SIZE) {
+ size = MIN_BUF_SIZE;
+ } else if (size > MAX_BUF_SIZE) {
+ size = MAX_BUF_SIZE;
+ }
+ byte[] buf = new byte[size];
+
+ /*
+ * Copy and digest.
+ */
+ int n;
+ while ((n = in.read(buf)) != -1) {
+ if (out != null) {
+ out.write(buf, 0, n);
+ }
+ digest.update(buf, 0, n);
+ }
+ if (out != null) {
+ out.flush();
+ }
+ return toHexString(digest.digest());
+ }
+
+ public static String toHexString(byte[] data) {
+ StringBuilder buf = new StringBuilder(2 * data.length);
+ for (byte b : data) {
+ buf.append(HEX_DIGITS[(0xF0 & b) >> 4]);
+ buf.append(HEX_DIGITS[0x0F & b]);
+ }
+ return buf.toString();
+ }
+}
Added: incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/api/util/UnsupportedReengineerException.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/api/util/UnsupportedReengineerException.java?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/api/util/UnsupportedReengineerException.java (added)
+++ incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/api/util/UnsupportedReengineerException.java Fri Apr 1 13:01:38 2011
@@ -0,0 +1,20 @@
+package org.apache.stanbol.reengineer.base.api.util;
+
+public class UnsupportedReengineerException extends Exception {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private String reenginner;
+
+ public UnsupportedReengineerException(String reenginner) {
+ this.reenginner = reenginner;
+ }
+
+ public String getReenginner() {
+ return reenginner;
+ }
+
+}
Propchange: incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/impl/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Added: incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/impl/NoSuchOntologyInStoreException.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/impl/NoSuchOntologyInStoreException.java?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/impl/NoSuchOntologyInStoreException.java (added)
+++ incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/impl/NoSuchOntologyInStoreException.java Fri Apr 1 13:01:38 2011
@@ -0,0 +1,22 @@
+package org.apache.stanbol.reengineer.base.impl;
+
+import org.semanticweb.owlapi.model.IRI;
+
+public class NoSuchOntologyInStoreException extends Exception {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private IRI ontologyIRI;
+
+ public NoSuchOntologyInStoreException(IRI ontologyIRI) {
+ this.ontologyIRI = ontologyIRI;
+ }
+
+ public IRI getOntologyIRI() {
+ return ontologyIRI;
+ }
+
+}
Added: incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/impl/OntologyStorage.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/impl/OntologyStorage.java?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/impl/OntologyStorage.java (added)
+++ incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/impl/OntologyStorage.java Fri Apr 1 13:01:38 2011
@@ -0,0 +1,201 @@
+package org.apache.stanbol.reengineer.base.impl;
+
+import java.util.Dictionary;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Set;
+
+import org.apache.clerezza.rdf.core.MGraph;
+import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.access.TcManager;
+import org.apache.clerezza.rdf.core.access.WeightedTcProvider;
+import org.apache.clerezza.rdf.core.impl.SimpleGraph;
+import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
+import org.apache.clerezza.rdf.core.sparql.ParseException;
+import org.apache.clerezza.rdf.core.sparql.QueryParser;
+import org.apache.clerezza.rdf.core.sparql.query.Query;
+import org.apache.stanbol.ontologymanager.ontonet.impl.ontology.NoSuchStoreException;
+import org.osgi.service.component.ComponentContext;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.hp.hpl.jena.ontology.OntModel;
+import com.hp.hpl.jena.ontology.OntModelSpec;
+import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.rdf.model.ModelFactory;
+import com.hp.hpl.jena.util.FileManager;
+
+import org.apache.stanbol.owl.trasformation.JenaToClerezzaConverter;
+import org.apache.stanbol.owl.trasformation.JenaToOwlConvert;
+
+/**
+ * Copied to avoid cross-dependencies
+ *
+ * @author alessandro
+ *
+ */
+public class OntologyStorage {
+
+ private static Logger log = LoggerFactory.getLogger(OntologyStorage.class);
+
+ public static final String URI = "http://ontologydesignpatterns.org/ont/iks/oxml.owl";
+
+ TcManager tcManager;
+
+ WeightedTcProvider weightedTcProvider;
+
+ /**
+ * This default constructor is <b>only</b> intended to be used by the OSGI
+ * environment with Service Component Runtime support.
+ * <p>
+ * DO NOT USE to manually create instances - the ClerezzaStorage instances
+ * do need to be configured! YOU NEED TO USE
+ * {@link #ClerezzaStorage(TcManager, WeightedTcProvider, OntologyStoreProvider)}
+ * or its overloads, to parse the configuration and then initialise the rule
+ * store if running outside a OSGI environment.
+ */
+ private OntologyStorage() {
+
+ }
+
+ /**
+ * Basic constructor to be used if outside of an OSGi environment. Invokes
+ * default constructor.
+ *
+ * @param tcManager
+ * @param wtcProvider
+ * @param osProvider
+ */
+ public OntologyStorage(TcManager tcManager, WeightedTcProvider wtcProvider) {
+ this();
+ this.tcManager = tcManager;
+ this.weightedTcProvider = wtcProvider;
+ activate(new Hashtable<String, Object>());
+ }
+
+ @SuppressWarnings("unchecked")
+ protected void activate(ComponentContext context) {
+ log.info("in " + OntologyStorage.class + " activate with context "
+ + context);
+ if (context == null) {
+ throw new IllegalStateException("No valid" + ComponentContext.class
+ + " parsed in activate!");
+ }
+ activate((Dictionary<String, Object>) context.getProperties());
+ }
+
+ protected void activate(Dictionary<String, Object> configuration) {
+
+ }
+
+ public void clear() {
+ // TODO Auto-generated method stub
+ }
+
+ protected void deactivate(ComponentContext context) {
+ log.info("in " + OntologyStorage.class + " deactivate with context "
+ + context);
+ tcManager = null;
+ weightedTcProvider = null;
+ }
+
+ public void delete(IRI ontologyId) {
+ // TODO Auto-generated method stub
+ }
+
+ public void deleteAll(Set<IRI> ontologyIds) {
+ // TODO Auto-generated method stub
+ }
+
+ public OWLOntology getGraph(IRI ontologyID) throws NoSuchStoreException {
+ OWLOntology ontology = null;
+
+ if (tcManager != null) {
+ MGraph mGraph = tcManager.getMGraph(new UriRef(ontologyID
+ .toString()));
+ JenaToOwlConvert jowl = new JenaToOwlConvert();
+ OntModel ontModel = ModelFactory.createOntologyModel(
+ OntModelSpec.OWL_DL_MEM, FileManager.get().loadModel(
+ URI));
+ ontModel.add(JenaToClerezzaConverter
+ .clerezzaMGraphToJenaModel(mGraph));
+ ontology = jowl.ModelJenaToOwlConvert(ontModel, "RDF/XML");
+ // ontology =
+ // OWLAPIToClerezzaConverter.clerezzaMGraphToOWLOntology(mGraph);
+
+ } else {
+ throw new NoSuchStoreException(
+ "No store registered or activated in the environment.");
+ }
+ return ontology;
+ }
+
+ public Set<IRI> listGraphs() {
+
+ Set<IRI> iris = null;
+ Set<UriRef> uriRefs = tcManager.listTripleCollections();
+ if (uriRefs != null) {
+ iris = new HashSet<IRI>();
+ for (UriRef uriRef : uriRefs) {
+ iris.add(IRI.create(uriRef.toString()));
+ }
+ }
+ return iris;
+
+ }
+
+ public OWLOntology load(IRI ontologyId) {
+ MGraph triples = TcManager.getInstance().getMGraph(
+ new UriRef(ontologyId.toString()));
+ Model om = JenaToClerezzaConverter.clerezzaMGraphToJenaModel(triples);
+ JenaToOwlConvert converter = new JenaToOwlConvert();
+ return converter.ModelJenaToOwlConvert(om, "RDF/XML");
+ }
+
+ public OWLOntology sparqlConstruct(String sparql, String datasetURI) {
+
+ Query query;
+
+ MGraph mGraph = new SimpleMGraph();
+ try {
+ query = QueryParser.getInstance().parse(sparql);
+
+ UriRef datasetUriRef = new UriRef(datasetURI);
+ MGraph dataset = weightedTcProvider.getMGraph(datasetUriRef);
+
+ mGraph.addAll((SimpleGraph) tcManager.executeSparqlQuery(query,
+ dataset));
+
+ } catch (ParseException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ Model om = JenaToClerezzaConverter.clerezzaMGraphToJenaModel(mGraph);
+ JenaToOwlConvert converter = new JenaToOwlConvert();
+ return converter.ModelJenaToOwlConvert(om, "RDF/XML");
+ }
+
+ public void store(OWLOntology o) {
+
+ JenaToOwlConvert converter = new JenaToOwlConvert();
+ OntModel om = converter.ModelOwlToJenaConvert(o, "RDF/XML");
+ MGraph mg = JenaToClerezzaConverter.jenaModelToClerezzaMGraph(om);
+ // MGraph mg = OWLAPIToClerezzaConverter.owlOntologyToClerezzaMGraph(o);
+ MGraph mg2 = tcManager.createMGraph(new UriRef(o.getOntologyID()
+ .getOntologyIRI().toString()));
+ mg2.addAll(mg);
+ }
+
+ public void store(OWLOntology o, IRI ontologyID) {
+
+ JenaToOwlConvert converter = new JenaToOwlConvert();
+ OntModel om = converter.ModelOwlToJenaConvert(o, "RDF/XML");
+ MGraph mg = JenaToClerezzaConverter.jenaModelToClerezzaMGraph(om);
+ // MGraph mg = OWLAPIToClerezzaConverter.owlOntologyToClerezzaMGraph(o);
+ MGraph mg2 = tcManager.createMGraph(new UriRef(ontologyID.toString()));
+ mg2.addAll(mg);
+ }
+}
Added: incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/impl/ReengineerManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/impl/ReengineerManagerImpl.java?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/impl/ReengineerManagerImpl.java (added)
+++ incubator/stanbol/trunk/reengineer/base/src/main/java/org/apache/stanbol/reengineer/base/impl/ReengineerManagerImpl.java Fri Apr 1 13:01:38 2011
@@ -0,0 +1,289 @@
+package org.apache.stanbol.reengineer.base.impl;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.Iterator;
+
+import org.apache.clerezza.rdf.core.access.TcManager;
+import org.apache.clerezza.rdf.core.access.WeightedTcProvider;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
+import org.apache.stanbol.ontologymanager.ontonet.impl.io.ClerezzaOntologyStorage;
+import org.apache.stanbol.reengineer.base.api.DataSource;
+import org.apache.stanbol.reengineer.base.api.ReengineeringException;
+import org.apache.stanbol.reengineer.base.api.ReengineerManager;
+import org.apache.stanbol.reengineer.base.api.Reengineer;
+import org.osgi.service.component.ComponentContext;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Concrete implementation of the
+ * {@link org.apache.stanbol.reengineer.base.api.ReengineerManager} interface defined in the
+ * KReS APIs.
+ *
+ * @author andrea.nuzzolese
+ *
+ */
+
+@Component(immediate = true, metatype = true)
+@Service(ReengineerManager.class)
+public class ReengineerManagerImpl implements ReengineerManager{
+
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ @Reference
+ private TcManager tcm;
+
+ @Reference
+ private WeightedTcProvider wtcp;
+
+ private ClerezzaOntologyStorage storage;
+
+ private ArrayList<Reengineer> reengineers;
+//
+// private SemionRefactorer semionRefactorer;
+
+ /**
+ * This default constructor is <b>only</b> intended to be used by the OSGI
+ * environment with Service Component Runtime support.
+ * <p>
+ * DO NOT USE to manually create instances - the ReengineerManagerImpl instances
+ * do need to be configured! YOU NEED TO USE
+ * {@link #ReengineerManagerImpl(ONManager)} or its overloads, to parse the
+ * configuration and then initialise the rule store if running outside a
+ * OSGI environment.
+ */
+ public ReengineerManagerImpl() {
+ reengineers = new ArrayList<Reengineer>();
+ }
+
+ /**
+ * Basic constructor to be used if outside of an OSGi environment. Invokes
+ * default constructor.
+ *
+ * @param onm
+ */
+ public ReengineerManagerImpl(TcManager tcm, WeightedTcProvider wtcp) {
+ this();
+ storage = new ClerezzaOntologyStorage(tcm, wtcp);
+ activate(new Hashtable<String, Object>());
+ }
+
+ /**
+ * Used to configure an instance within an OSGi container.
+ *
+ * @throws IOException
+ */
+ @SuppressWarnings("unchecked")
+ @Activate
+ protected void activate(ComponentContext context) throws IOException {
+ log.info("in " + ReengineerManagerImpl.class + " activate with context "
+ + context);
+ if (context == null) {
+ throw new IllegalStateException("No valid" + ComponentContext.class
+ + " parsed in activate!");
+ }
+ activate((Dictionary<String, Object>) context.getProperties());
+ }
+
+ protected void activate(Dictionary<String, Object> configuration) {
+ if (storage == null) storage = new ClerezzaOntologyStorage(this.tcm, this.wtcp);
+ reengineers = new ArrayList<Reengineer>();
+ }
+
+ /**
+ * @param semionReengineer
+ * {@link org.apache.stanbol.reengineer.base.api.Reengineer}
+ * @return true if the reengineer is bound, false otherwise
+ */
+ @Override
+ public boolean bindReengineer(Reengineer semionReengineer) {
+ boolean found = false;
+ Iterator<Reengineer> it = reengineers.iterator();
+ while(it.hasNext() && !found){
+ Reengineer reengineer = it.next();
+ if (reengineer.getReengineerType() == semionReengineer
+ .getReengineerType()) {
+ found = true;
+ }
+ }
+
+ if(!found){
+ reengineers.add(semionReengineer);
+ String info = "Reengineering Manager : " + reengineers.size()
+ + " reengineers";
+ log.info(info);
+ return true;
+ } else {
+ log.info("Reengineer already existing");
+ return false;
+ }
+
+ }
+
+ @Override
+ public int countReengineers() {
+ return reengineers.size();
+ }
+
+ @Deactivate
+ protected void deactivate(ComponentContext context) {
+ log.info("in " + ReengineerManagerImpl.class + " deactivate with context "
+ + context);
+ reengineers = null;
+ }
+
+// @Override
+// public SemionRefactorer getRegisteredRefactorer() {
+// return semionRefactorer;
+// }
+
+ @Override
+ public Collection<Reengineer> listReengineers() {
+ return reengineers;
+ }
+
+ @Override
+ public OWLOntology performDataReengineering(String graphNS, IRI outputIRI,
+ DataSource dataSource, IRI schemaOntologyIRI)
+ throws ReengineeringException, NoSuchOntologyInStoreException {
+
+ OWLOntology reengineeredDataOntology = null;
+
+// OntologyStorage ontologyStorage = onManager.getOntologyStore();
+
+ OWLOntology schemaOntology = storage.load(schemaOntologyIRI);
+
+ if(schemaOntology == null){
+ throw new NoSuchOntologyInStoreException(schemaOntologyIRI);
+ } else {
+
+ boolean reengineered = false;
+ Iterator<Reengineer> it = reengineers.iterator();
+ while(it.hasNext() && !reengineered){
+ Reengineer semionReengineer = it.next();
+ if(semionReengineer.canPerformReengineering(schemaOntology)){
+ reengineeredDataOntology = semionReengineer
+ .dataReengineering(graphNS, outputIRI, dataSource,
+ schemaOntology);
+ reengineered = true;
+ }
+ }
+ }
+
+ return reengineeredDataOntology;
+ }
+
+ @Override
+ public OWLOntology performDataReengineering(String graphNS, IRI outputIRI,
+ DataSource dataSource, OWLOntology schemaOntology)
+ throws ReengineeringException {
+
+ OWLOntology reengineeredDataOntology = null;
+
+ boolean reengineered = false;
+ Iterator<Reengineer> it = reengineers.iterator();
+ while(it.hasNext() && !reengineered){
+ Reengineer semionReengineer = it.next();
+ if(semionReengineer.canPerformReengineering(schemaOntology)){
+ reengineeredDataOntology = semionReengineer.dataReengineering(
+ graphNS, outputIRI, dataSource, schemaOntology);
+ reengineered = true;
+ }
+ }
+
+ return reengineeredDataOntology;
+ }
+
+ public OWLOntology performReengineering(String graphNS, IRI outputIRI,
+ DataSource dataSource) throws ReengineeringException {
+
+ OWLOntology reengineeredOntology = null;
+
+ boolean reengineered = false;
+ Iterator<Reengineer> it = reengineers.iterator();
+ while (it.hasNext() && !reengineered) {
+ Reengineer semionReengineer = it.next();
+ if (semionReengineer.canPerformReengineering(dataSource)) {
+ log.debug(semionReengineer.getClass().getCanonicalName()
+ + " can perform the reengineering");
+ reengineeredOntology = semionReengineer.reengineering(graphNS,
+ outputIRI, dataSource);
+ reengineered = true;
+ } else {
+ log.debug(semionReengineer.getClass().getCanonicalName()
+ + " cannot perform the reengineering");
+ }
+ }
+
+ return reengineeredOntology;
+ }
+
+ public OWLOntology performSchemaReengineering(String graphNS,
+ IRI outputIRI, DataSource dataSource) throws ReengineeringException {
+
+ OWLOntology reengineeredSchemaOntology = null;
+
+ boolean reengineered = false;
+ Iterator<Reengineer> it = reengineers.iterator();
+ while (it.hasNext() && !reengineered) {
+ Reengineer semionReengineer = it.next();
+ if (semionReengineer.canPerformReengineering(dataSource)) {
+ reengineeredSchemaOntology = semionReengineer
+ .schemaReengineering(graphNS, outputIRI, dataSource);
+ if (reengineeredSchemaOntology == null) {
+ throw new ReengineeringException();
+ }
+ reengineered = true;
+ }
+ }
+
+ return reengineeredSchemaOntology;
+ }
+
+// @Override
+// public void registerRefactorer(SemionRefactorer semionRefactorer) {
+// this.semionRefactorer = semionRefactorer;
+// }
+
+ @Override
+ public boolean unbindReengineer(int reenginnerType) {
+ boolean found = false;
+ for(int i=0, j=reengineers.size(); i<j && !found; i++){
+ Reengineer reengineer = reengineers.get(i);
+ if(reengineer.getReengineerType() == reenginnerType){
+ reengineers.remove(i);
+ found = true;
+ }
+ }
+ return found;
+ }
+
+ @Override
+ public boolean unbindReengineer(Reengineer semionReengineer) {
+ boolean found = false;
+ for (int i = 0, j = reengineers.size(); i < j && !found; i++) {
+ if (semionReengineer.equals(reengineers.get(i))) {
+ reengineers.remove(i);
+ found = true;
+ }
+ }
+ return found;
+ }
+
+// @Override
+// public void unregisterRefactorer() {
+// this.semionRefactorer = null;
+// }
+
+}
Propchange: incubator/stanbol/trunk/reengineer/base/src/main/resources/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Propchange: incubator/stanbol/trunk/reengineer/base/src/test/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Propchange: incubator/stanbol/trunk/reengineer/base/src/test/java/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Propchange: incubator/stanbol/trunk/reengineer/base/src/test/java/org/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Propchange: incubator/stanbol/trunk/reengineer/base/src/test/java/org/apache/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Propchange: incubator/stanbol/trunk/reengineer/base/src/test/java/org/apache/stanbol/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Propchange: incubator/stanbol/trunk/reengineer/base/src/test/java/org/apache/stanbol/rengineer/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Propchange: incubator/stanbol/trunk/reengineer/base/src/test/java/org/apache/stanbol/rengineer/base/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Added: incubator/stanbol/trunk/reengineer/base/src/test/java/org/apache/stanbol/rengineer/base/ReengineerManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/base/src/test/java/org/apache/stanbol/rengineer/base/ReengineerManagerTest.java?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/base/src/test/java/org/apache/stanbol/rengineer/base/ReengineerManagerTest.java (added)
+++ incubator/stanbol/trunk/reengineer/base/src/test/java/org/apache/stanbol/rengineer/base/ReengineerManagerTest.java Fri Apr 1 13:01:38 2011
@@ -0,0 +1,108 @@
+package org.apache.stanbol.rengineer.base;
+
+import static org.junit.Assert.fail;
+
+import org.apache.stanbol.reengineer.base.api.DataSource;
+import org.apache.stanbol.reengineer.base.api.ReengineeringException;
+import org.apache.stanbol.reengineer.base.api.ReengineerManager;
+import org.apache.stanbol.reengineer.base.api.Reengineer;
+import org.apache.stanbol.reengineer.base.api.util.ReengineerType;
+import org.apache.stanbol.reengineer.base.api.util.UnsupportedReengineerException;
+import org.apache.stanbol.reengineer.base.impl.ReengineerManagerImpl;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLOntology;
+
+
+public class ReengineerManagerTest {
+
+ public static Reengineer semionReengineer;
+
+ @BeforeClass
+ public static void setup(){
+ semionReengineer = new Reengineer() {
+
+ @Override
+ public OWLOntology schemaReengineering(String graphNS, IRI outputIRI,
+ DataSource dataSource) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public OWLOntology reengineering(String graphNS, IRI outputIRI,
+ DataSource dataSource) throws ReengineeringException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public int getReengineerType() {
+ // TODO Auto-generated method stub
+ return ReengineerType.XML;
+ }
+
+ @Override
+ public OWLOntology dataReengineering(String graphNS, IRI outputIRI,
+ DataSource dataSource, OWLOntology schemaOntology)
+ throws ReengineeringException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean canPerformReengineering(String dataSourceType)
+ throws UnsupportedReengineerException {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean canPerformReengineering(OWLOntology schemaOntology) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean canPerformReengineering(int dataSourceType) {
+ if(dataSourceType == ReengineerType.XML){
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean canPerformReengineering(DataSource dataSource) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+ };
+ }
+
+ @Test
+ public void bindTest(){
+ ReengineerManager semionManager = new ReengineerManagerImpl();
+ if(!semionManager.bindReengineer(semionReengineer)){
+ fail("Bind test failed for SemionManager");
+ }
+ }
+
+ @Test
+ public void unbindByReengineerTypeTest(){
+ ReengineerManager semionManager = new ReengineerManagerImpl();
+ semionManager.bindReengineer(semionReengineer);
+ if(!semionManager.unbindReengineer(ReengineerType.XML)){
+ fail("Unbind by reengineer type test failed for SemionManager");
+ }
+ }
+
+ @Test
+ public void unbindByReengineerInstanceTest(){
+ ReengineerManager semionManager = new ReengineerManagerImpl();
+ semionManager.bindReengineer(semionReengineer);
+ if(!semionManager.unbindReengineer(semionReengineer)){
+ fail("Unbind by reengineer instance test failed for SemionManager");
+ }
+ }
+}
Propchange: incubator/stanbol/trunk/reengineer/db/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Added: incubator/stanbol/trunk/reengineer/db/.classpath
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/db/.classpath?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/db/.classpath (added)
+++ incubator/stanbol/trunk/reengineer/db/.classpath Fri Apr 1 13:01:38 2011
@@ -0,0 +1,62 @@
+<classpath>
+ <classpathentry kind="src" path="src/test/java" output="target/test-classes" including="**/*.java"/>
+ <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
+ <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+ <classpathentry kind="output" path="target/classes"/>
+ <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar" sourcepath="M2_REPO/javax/activation/activation/1.1/activation-1.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/hp/hpl/jena/arq/2.8.3/arq-2.8.3.jar" sourcepath="M2_REPO/com/hp/hpl/jena/arq/2.8.3/arq-2.8.3-sources.jar">
+ <attributes>
+ <attribute value="jar:file:/home/x-marley/.m2/repository/com/hp/hpl/jena/arq/2.8.3/arq-2.8.3-javadoc.jar!/" name="javadoc_location"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/httpcomponents/httpcore/4.0/httpcore-4.0.jar" sourcepath="M2_REPO/org/apache/httpcomponents/httpcore/4.0/httpcore-4.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/ibm/icu/icu4j/3.4.4/icu4j-3.4.4.jar" sourcepath="M2_REPO/com/ibm/icu/icu4j/3.4.4/icu4j-3.4.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/hp/hpl/jena/iri/0.8/iri-0.8.jar" sourcepath="M2_REPO/com/hp/hpl/jena/iri/0.8/iri-0.8-sources.jar">
+ <attributes>
+ <attribute value="jar:file:/home/x-marley/.m2/repository/com/hp/hpl/jena/iri/0.8/iri-0.8-javadoc.jar!/" name="javadoc_location"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="var" path="M2_REPO/com/hp/hpl/jena/jena/2.6.2/jena-2.6.2.jar" sourcepath="M2_REPO/com/hp/hpl/jena/jena/2.6.2/jena-2.6.2-sources.jar">
+ <attributes>
+ <attribute value="jar:file:/home/x-marley/.m2/repository/com/hp/hpl/jena/jena/2.6.2/jena-2.6.2-javadoc.jar!/" name="javadoc_location"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/4.4/junit-4.4.jar" sourcepath="M2_REPO/junit/junit/4.4/junit-4.4-sources.jar">
+ <attributes>
+ <attribute value="jar:file:/home/x-marley/.m2/repository/junit/junit/4.4/junit-4.4-javadoc.jar!/" name="javadoc_location"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar" sourcepath="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-core/2.9.4/lucene-core-2.9.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.core/0.12-incubating-SNAPSHOT/org.apache.clerezza.rdf.core-0.12-incubating-SNAPSHOT.jar" sourcepath="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.core/0.12-incubating-SNAPSHOT/org.apache.clerezza.rdf.core-0.12-incubating-SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.jena.commons/0.5-incubating-SNAPSHOT/org.apache.clerezza.rdf.jena.commons-0.5-incubating-SNAPSHOT.jar" sourcepath="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.jena.commons/0.5-incubating-SNAPSHOT/org.apache.clerezza.rdf.jena.commons-0.5-incubating-SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.jena.facade/0.12-incubating-SNAPSHOT/org.apache.clerezza.rdf.jena.facade-0.12-incubating-SNAPSHOT.jar" sourcepath="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.jena.facade/0.12-incubating-SNAPSHOT/org.apache.clerezza.rdf.jena.facade-0.12-incubating-SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.jena.parser/0.10-incubating-SNAPSHOT/org.apache.clerezza.rdf.jena.parser-0.10-incubating-SNAPSHOT.jar" sourcepath="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.jena.parser/0.10-incubating-SNAPSHOT/org.apache.clerezza.rdf.jena.parser-0.10-incubating-SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.jena.serializer/0.9-incubating-SNAPSHOT/org.apache.clerezza.rdf.jena.serializer-0.9-incubating-SNAPSHOT.jar" sourcepath="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.jena.serializer/0.9-incubating-SNAPSHOT/org.apache.clerezza.rdf.jena.serializer-0.9-incubating-SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.jena.sparql/0.5-incubating-SNAPSHOT/org.apache.clerezza.rdf.jena.sparql-0.5-incubating-SNAPSHOT.jar" sourcepath="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.jena.sparql/0.5-incubating-SNAPSHOT/org.apache.clerezza.rdf.jena.sparql-0.5-incubating-SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.jena.storage/0.5-incubating-SNAPSHOT/org.apache.clerezza.rdf.jena.storage-0.5-incubating-SNAPSHOT.jar" sourcepath="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.jena.storage/0.5-incubating-SNAPSHOT/org.apache.clerezza.rdf.jena.storage-0.5-incubating-SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.simple.storage/0.7-incubating-SNAPSHOT/org.apache.clerezza.rdf.simple.storage-0.7-incubating-SNAPSHOT.jar" sourcepath="M2_REPO/org/apache/clerezza/org.apache.clerezza.rdf.simple.storage/0.7-incubating-SNAPSHOT/org.apache.clerezza.rdf.simple.storage-0.7-incubating-SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/clerezza/org.apache.clerezza.utils/0.1-incubating-SNAPSHOT/org.apache.clerezza.utils-0.1-incubating-SNAPSHOT.jar" sourcepath="M2_REPO/org/apache/clerezza/org.apache.clerezza.utils/0.1-incubating-SNAPSHOT/org.apache.clerezza.utils-0.1-incubating-SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/felix/org.apache.felix.scr.annotations/1.2.0/org.apache.felix.scr.annotations-1.2.0.jar" sourcepath="M2_REPO/org/apache/felix/org.apache.felix.scr.annotations/1.2.0/org.apache.felix.scr.annotations-1.2.0-sources.jar"/>
+ <classpathentry kind="src" path="/org.apache.stanbol.ontologymanager.ontonet"/>
+ <classpathentry kind="src" path="/org.apache.stanbol.owlapi"/>
+ <classpathentry kind="src" path="/org.apache.stanbol.reengineer.base"/>
+ <classpathentry kind="var" path="M2_REPO/org/osgi/org.osgi.compendium/4.1.0/org.osgi.compendium-4.1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/felix/org.osgi.core/1.4.0/org.osgi.core-1.4.0.jar" sourcepath="M2_REPO/org/apache/felix/org.osgi.core/1.4.0/org.osgi.core-1.4.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/osgi/org.osgi.core/4.1.0/org.osgi.core-4.1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/owlapi/owlapi/3.0.0/owlapi-3.0.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.5.2/slf4j-api-1.5.2.jar" sourcepath="M2_REPO/org/slf4j/slf4j-api/1.5.2/slf4j-api-1.5.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-simple/1.5.2/slf4j-simple-1.5.2.jar" sourcepath="M2_REPO/org/slf4j/slf4j-simple/1.5.2/slf4j-simple-1.5.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/stax/stax-api/1.0.1/stax-api-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/woodstox/stax2-api/2.9.9-3/stax2-api-2.9.9-3.jar" sourcepath="M2_REPO/org/codehaus/woodstox/stax2-api/2.9.9-3/stax2-api-2.9.9-3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/hp/hpl/jena/tdb/0.8.5/tdb-0.8.5.jar" sourcepath="M2_REPO/com/hp/hpl/jena/tdb/0.8.5/tdb-0.8.5-sources.jar">
+ <attributes>
+ <attribute value="jar:file:/home/x-marley/.m2/repository/com/hp/hpl/jena/tdb/0.8.5/tdb-0.8.5-javadoc.jar!/" name="javadoc_location"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/woodstox/wstx-asl/3.9.9-3/wstx-asl-3.9.9-3.jar" sourcepath="M2_REPO/org/codehaus/woodstox/wstx-asl/3.9.9-3/wstx-asl-3.9.9-3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/wymiwyg/wymiwyg-commons-core/0.7.5/wymiwyg-commons-core-0.7.5.jar" sourcepath="M2_REPO/org/wymiwyg/wymiwyg-commons-core/0.7.5/wymiwyg-commons-core-0.7.5-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.7.1/xercesImpl-2.7.1.jar"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+</classpath>
\ No newline at end of file
Added: incubator/stanbol/trunk/reengineer/db/.project
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/db/.project?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/db/.project (added)
+++ incubator/stanbol/trunk/reengineer/db/.project Fri Apr 1 13:01:38 2011
@@ -0,0 +1,27 @@
+<projectDescription>
+ <name>org.apache.stanbol.reengineer.db</name>
+ <comment>Provides functionality for reengineering database
+ into ontologies. NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
+ <projects>
+ <project>org.apache.stanbol.ontologymanager.ontonet</project>
+ <project>org.apache.stanbol.owlapi</project>
+ <project>org.apache.stanbol.reengineer.base</project>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.m2e.core.maven2Builder</name>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.m2e.core.maven2Nature</nature>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
\ No newline at end of file
Propchange: incubator/stanbol/trunk/reengineer/db/.settings/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Added: incubator/stanbol/trunk/reengineer/db/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/db/.settings/org.eclipse.jdt.core.prefs?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/db/.settings/org.eclipse.jdt.core.prefs (added)
+++ incubator/stanbol/trunk/reengineer/db/.settings/org.eclipse.jdt.core.prefs Fri Apr 1 13:01:38 2011
@@ -0,0 +1,6 @@
+#Fri Mar 18 11:28:59 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.6
Added: incubator/stanbol/trunk/reengineer/db/.settings/org.eclipse.m2e.core.prefs
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/db/.settings/org.eclipse.m2e.core.prefs?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/db/.settings/org.eclipse.m2e.core.prefs (added)
+++ incubator/stanbol/trunk/reengineer/db/.settings/org.eclipse.m2e.core.prefs Fri Apr 1 13:01:38 2011
@@ -0,0 +1,5 @@
+#Wed Mar 23 17:37:32 GMT 2011
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
Added: incubator/stanbol/trunk/reengineer/db/.settings/org.maven.ide.eclipse.prefs
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/db/.settings/org.maven.ide.eclipse.prefs?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/db/.settings/org.maven.ide.eclipse.prefs (added)
+++ incubator/stanbol/trunk/reengineer/db/.settings/org.maven.ide.eclipse.prefs Fri Apr 1 13:01:38 2011
@@ -0,0 +1,9 @@
+#Thu Mar 17 16:08:39 CET 2011
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
Added: incubator/stanbol/trunk/reengineer/db/pom.xml
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/db/pom.xml?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/db/pom.xml (added)
+++ incubator/stanbol/trunk/reengineer/db/pom.xml Fri Apr 1 13:01:38 2011
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.stanbol</groupId>
+ <artifactId>stanbol-parent</artifactId>
+ <version>${stanbol-version}</version>
+ <relativePath>../../../parent</relativePath>
+ </parent>
+
+ <groupId>org.apache.stanbol</groupId>
+ <artifactId>org.apache.stanbol.reengineer.db</artifactId>
+ <packaging>bundle</packaging>
+ <version>${stanbol-version}</version>
+
+ <name>Apache Stanbol DB Reegineer</name>
+ <description>
+ Provides functionality for reengineering database
+ into ontologies.
+ </description>
+
+ <inceptionYear>2010</inceptionYear>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Bundle-ClassPath>
+ .,
+ mysql-connector-java-5.1.10.jar,
+ OSGI-INF
+ </Bundle-ClassPath>
+ <Export-Package>
+ org.apache.stanbol.reengineer.db.*;version=${stanbol-version}
+ </Export-Package>
+ <Import-Package>
+ !org.jboss.resource.adapter.jdbc.*,
+ !com.mchange.*,
+ com.hp.hpl.jena.*,
+ org.slf4j.*;version=1.5.2,
+ org.xml.sax.*,
+ *
+ </Import-Package>
+ <_nouses>true</_nouses>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ <dependencies>
+ <dependency>
+ <groupId>com.hp.hpl.jena</groupId>
+ <artifactId>jena</artifactId>
+ <version>2.6.2</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-scr-plugin</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>com.hp.hpl.jena</groupId>
+ <artifactId>jena</artifactId>
+ <version>2.6.2</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+
+ <!-- OSGi deps -->
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.scr.annotations</artifactId>
+ <version>1.2.0</version>
+ </dependency>
+
+
+ <!-- Stanbol deps -->
+ <dependency>
+ <groupId>org.apache.stanbol</groupId>
+ <artifactId>org.apache.stanbol.ontologymanager.ontonet</artifactId>
+ <version>${stanbol-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.stanbol</groupId>
+ <artifactId>org.apache.stanbol.reengineer.base</artifactId>
+ <version>${stanbol-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.stanbol</groupId>
+ <artifactId>org.apache.stanbol.owl</artifactId>
+ <version>${stanbol-version}</version>
+ </dependency>
+
+ <!-- OWL deps -->
+ <dependency>
+ <groupId>com.hp.hpl.jena</groupId>
+ <artifactId>iri</artifactId>
+ <version>0.8</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.hp.hpl.jena</groupId>
+ <artifactId>jena</artifactId>
+ <version>2.6.2</version>
+ <scope>provided</scope>
+ <exclusions>
+ <exclusion>
+ <artifactId>slf4j-log4j12</artifactId>
+ <groupId>org.slf4j</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>com.hp.hpl.jena</groupId>
+ <artifactId>arq</artifactId>
+ <version>2.8.3</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.hp.hpl.jena</groupId>
+ <artifactId>tdb</artifactId>
+ <version>0.8.5</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>owlapi</groupId>
+ <artifactId>owlapi</artifactId>
+ <version>3.0.0</version>
+ </dependency>
+
+ <!-- Clerezza deps -->
+ <dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>org.apache.clerezza.rdf.core</artifactId>
+ <version>0.12-incubating-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>org.apache.clerezza.rdf.jena.serializer</artifactId>
+ <version>0.9-incubating-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>org.apache.clerezza.rdf.jena.sparql</artifactId>
+ <version>0.5-incubating-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>org.apache.clerezza.rdf.simple.storage</artifactId>
+ <version>0.7-incubating-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- XML deps -->
+ <dependency>
+ <groupId>stax</groupId>
+ <artifactId>stax-api</artifactId>
+ <version>1.0.1</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>wstx-asl</artifactId>
+ <version>3.9.9-3</version>
+ </dependency>
+ <dependency>
+ <groupId>com.ibm.icu</groupId>
+ <artifactId>icu4j</artifactId>
+ <version>3.4.4</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xercesImpl</artifactId>
+ <version>2.7.1</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <!-- Diagnostics deps -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.5.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.13</version>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Testing deps -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.4</version>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-simple</artifactId>
+ <version>1.5.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>org.apache.clerezza.rdf.jena.parser</artifactId>
+ <version>0.10-incubating-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+
+ </dependencies>
+
+
+ <repositories />
+
+</project>
Propchange: incubator/stanbol/trunk/reengineer/db/src/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Propchange: incubator/stanbol/trunk/reengineer/db/src/main/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Propchange: incubator/stanbol/trunk/reengineer/db/src/main/java/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Propchange: incubator/stanbol/trunk/reengineer/db/src/main/java/org/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Propchange: incubator/stanbol/trunk/reengineer/db/src/main/java/org/apache/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Propchange: incubator/stanbol/trunk/reengineer/db/src/main/java/org/apache/stanbol/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Propchange: incubator/stanbol/trunk/reengineer/db/src/main/java/org/apache/stanbol/reengineer/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Propchange: incubator/stanbol/trunk/reengineer/db/src/main/java/org/apache/stanbol/reengineer/db/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 1 13:01:38 2011
@@ -0,0 +1 @@
+target
Added: incubator/stanbol/trunk/reengineer/db/src/main/java/org/apache/stanbol/reengineer/db/DBDataTransformer.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/db/src/main/java/org/apache/stanbol/reengineer/db/DBDataTransformer.java?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/db/src/main/java/org/apache/stanbol/reengineer/db/DBDataTransformer.java (added)
+++ incubator/stanbol/trunk/reengineer/db/src/main/java/org/apache/stanbol/reengineer/db/DBDataTransformer.java Fri Apr 1 13:01:38 2011
@@ -0,0 +1,315 @@
+package org.apache.stanbol.reengineer.db;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.Set;
+
+import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
+import org.apache.stanbol.reengineer.base.api.ReengineeringException;
+import org.apache.stanbol.reengineer.base.api.util.ReengineerUriRefGenerator;
+import org.apache.stanbol.reengineer.db.connection.DatabaseConnection;
+import org.apache.stanbol.reengineer.db.vocab.DBS_L1;
+import org.apache.stanbol.reengineer.db.vocab.DBS_L1_OWL;
+import org.semanticweb.owlapi.model.AddAxiom;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLClass;
+import org.semanticweb.owlapi.model.OWLClassAssertionAxiom;
+import org.semanticweb.owlapi.model.OWLDataFactory;
+import org.semanticweb.owlapi.model.OWLDataProperty;
+import org.semanticweb.owlapi.model.OWLIndividual;
+import org.semanticweb.owlapi.model.OWLLiteral;
+import org.semanticweb.owlapi.model.OWLObjectProperty;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.semanticweb.owlapi.model.OWLOntologyCreationException;
+import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.semanticweb.owlapi.model.OWLOntologyRenameException;
+
+import com.hp.hpl.jena.ontology.OntModel;
+import com.hp.hpl.jena.query.Query;
+import com.hp.hpl.jena.query.QueryExecution;
+import com.hp.hpl.jena.query.QueryExecutionFactory;
+import com.hp.hpl.jena.query.QueryFactory;
+import com.hp.hpl.jena.query.QuerySolution;
+import com.hp.hpl.jena.rdf.model.Resource;
+
+import org.apache.stanbol.owl.trasformation.JenaToOwlConvert;
+
+public class DBDataTransformer extends ReengineerUriRefGenerator {
+
+ private ONManager onManager;
+ private OWLOntology schemaOntology;
+ private DatabaseConnection databaseConnection;
+
+
+ public DBDataTransformer(ONManager onManager, OWLOntology schemaOntology) {
+ this.onManager = onManager;
+ this.schemaOntology = schemaOntology;
+ this.databaseConnection = new DatabaseConnection(schemaOntology);
+ }
+
+ public OWLOntology transformData(String graphNS, IRI ontologyIRI) throws ReengineeringException {
+
+ OWLOntology dataOntology = null;
+
+ if(schemaOntology != null){
+
+ OWLOntologyManager manager = onManager.getOwlCacheManager();
+ OWLDataFactory factory = onManager.getOwlFactory();
+
+ graphNS = graphNS.replace("#", "");
+ String schemaNS = graphNS + "/schema#";
+
+
+ if(ontologyIRI != null){
+ try {
+ dataOntology = manager.createOntology(ontologyIRI);
+ } catch (OWLOntologyCreationException e) {
+ throw new ReengineeringException();
+ }
+
+ }
+ else{
+ try {
+ dataOntology = manager.createOntology();
+ } catch (OWLOntologyCreationException e) {
+ throw new ReengineeringException();
+ }
+
+ }
+
+
+ graphNS += "#";
+
+ Hashtable<String, ArrayList<DBColumn>> tableColumnHash = new Hashtable<String, ArrayList<DBColumn>>();
+
+
+
+ OWLClass databaseConnectionClass = factory.getOWLClass(DBS_L1_OWL.DatabaseConnection);
+ Set<OWLIndividual> databaseConnections = databaseConnectionClass.getIndividuals(schemaOntology);
+ if(databaseConnections!=null && databaseConnections.size()==1){
+
+ ArrayList<DBColumn> columnList = new ArrayList<DBColumn>();
+
+ for(OWLIndividual dbConnection : databaseConnections){
+ OWLObjectProperty hasTable = factory.getOWLObjectProperty(DBS_L1_OWL.hasTable);
+ Set<OWLIndividual> tables = dbConnection.getObjectPropertyValues(hasTable, schemaOntology);
+ for(OWLIndividual tableIndividual : tables){
+ OWLDataProperty hasName = factory.getOWLDataProperty(DBS_L1_OWL.hasName);
+ Set<OWLLiteral> tableNames = tableIndividual.getDataPropertyValues(hasName, schemaOntology);
+
+ String tableName = null;
+ if(tableNames!=null && tableNames.size()==1){
+ for(OWLLiteral tableNameLiteral : tableNames){
+ tableName = tableNameLiteral.getLiteral();
+ }
+ }
+
+ OWLObjectProperty hasColumn = factory.getOWLObjectProperty(DBS_L1_OWL.hasColumn);
+ Set<OWLIndividual> tableColumns = tableIndividual.getObjectPropertyValues(hasColumn, schemaOntology);
+
+
+
+ if(tableColumns != null){
+ for(OWLIndividual tableColumn : tableColumns){
+
+ String columnName = null;
+ String columnType = null;
+
+ Set<OWLLiteral> columnNameLiterals = tableColumn.getDataPropertyValues(hasName, schemaOntology);
+ if(columnNameLiterals!=null && columnNameLiterals.size()==1){
+ for(OWLLiteral columnNameLiteral : columnNameLiterals){
+ columnName = columnNameLiteral.getLiteral();
+ }
+ }
+
+ OWLDataProperty hasSQLType = factory.getOWLDataProperty(DBS_L1_OWL.hasSQLType);
+ Set<OWLLiteral> columnTypeLiterals = tableColumn.getDataPropertyValues(hasSQLType, schemaOntology);
+ if(columnTypeLiterals!=null && columnNameLiterals.size()==1){
+ for(OWLLiteral columnTypeLiteral : columnNameLiterals){
+ columnType = columnTypeLiteral.getLiteral();
+ }
+ }
+
+ if(columnName!=null && columnType!=null){
+ columnList.add(new DBColumn(columnName, columnType));
+ }
+ }
+ }
+
+ tableColumnHash.put(tableName, columnList);
+ }
+ }
+ }
+
+
+ Set<String> tableNames = tableColumnHash.keySet();
+ for(String tableName : tableNames){
+ databaseConnection.openDBConnection();
+
+ String sqlQuery = "SELECT * FROM "+tableName;
+
+ ResultSet resultSetSQL = databaseConnection.executeQuerySafeMemory(sqlQuery);
+
+
+ try {
+ for(int z=0; resultSetSQL.next(); z++){
+
+ IRI recordIRI = IRI.create(graphNS + tableName+"_record_"+z);
+ OWLClassAssertionAxiom record = createOWLClassAssertionAxiom(factory, DBS_L1_OWL.Row, recordIRI);
+ manager.applyChange(new AddAxiom(dataOntology, record));
+
+ Hashtable<Integer, String> foreignKeys = new Hashtable<Integer, String>();
+ ArrayList<Integer> notForeignKeys = new ArrayList<Integer>();
+
+ ArrayList<Integer> primaryKeys = new ArrayList<Integer>();
+ ArrayList<Integer> notPrimaryKeys = new ArrayList<Integer>();
+
+ ArrayList<DBColumn> dbColumns = tableColumnHash.get(tableName);
+
+ for(int j=0, k=dbColumns.size(); j<k; j++){
+ DBColumn dbColumn = dbColumns.get(j);
+ String dbColumnName = dbColumn.getName();
+ String dbColumnSQLType = dbColumn.getSqlType();
+
+ String value = resultSetSQL.getString(dbColumnName);
+
+ IRI valueResIRI;
+ String content = null;
+
+ if(primaryKeys.contains(Integer.valueOf(j))){
+ valueResIRI = IRI.create(graphNS + tableName+"_"+dbColumnName+"_"+value);
+ OWLClassAssertionAxiom valueRes = createOWLClassAssertionAxiom(factory, DBS_L1_OWL.Datum, valueResIRI);
+ manager.applyChange(new AddAxiom(dataOntology, valueRes));
+ }
+ else if(notPrimaryKeys.contains(Integer.valueOf(j))){
+ valueResIRI = IRI.create(graphNS + tableName+"_record_"+z+"_datum_"+j);
+ OWLClassAssertionAxiom valueRes = createOWLClassAssertionAxiom(factory, DBS_L1_OWL.Datum, valueResIRI);
+ manager.applyChange(new AddAxiom(dataOntology, valueRes));
+ }
+ else{
+
+ JenaToOwlConvert jenaToOwlConvert = new JenaToOwlConvert();
+ OntModel ontModel = jenaToOwlConvert.ModelOwlToJenaConvert(schemaOntology, "RDF/XML");
+
+
+ String sparql = "SELECT ?c WHERE { " +
+ "?c <"+DBS_L1.hasName+"> \""+tableName+"-column_"+dbColumnName+"\"^^xsd:string . "+
+ "?c <"+DBS_L1.isPrimaryKeyMemberOf+"> ?p "+
+ "}";
+
+ Query sparqlQuery = QueryFactory.create(sparql);
+ QueryExecution qexec = QueryExecutionFactory.create(sparqlQuery, ontModel) ;
+ com.hp.hpl.jena.query.ResultSet jenaRs = qexec.execSelect();
+ if(jenaRs!=null && jenaRs.hasNext()){
+ valueResIRI = IRI.create(graphNS+tableName+"_"+dbColumnName+"_"+value);
+ OWLClassAssertionAxiom valueRes = createOWLClassAssertionAxiom(factory, DBS_L1_OWL.Datum, valueResIRI);
+ manager.applyChange(new AddAxiom(dataOntology, valueRes));
+ primaryKeys.add(Integer.valueOf(j));
+ }
+ else{
+ valueResIRI = IRI.create(graphNS+tableName+"_record_"+z+"_datum_"+j);
+ OWLClassAssertionAxiom valueRes = createOWLClassAssertionAxiom(factory, DBS_L1_OWL.Datum, valueResIRI);
+ manager.applyChange(new AddAxiom(dataOntology, valueRes));
+ notPrimaryKeys.add(Integer.valueOf(j));
+ }
+
+
+ IRI joinIRI;
+ String joinName;
+ if((joinName=foreignKeys.get(Integer.valueOf(j))) != null){
+ joinIRI = IRI.create(graphNS + tableName+"_"+joinName+"_"+value);
+ OWLClassAssertionAxiom join = createOWLClassAssertionAxiom(factory, DBS_L1_OWL.Datum, joinIRI);
+ manager.applyChange(new AddAxiom(dataOntology, join));
+
+ manager.applyChange(new AddAxiom(dataOntology, createOWLObjectPropertyAssertionAxiom(factory, DBS_L1_OWL.hasContent, valueResIRI, joinIRI)));
+ }
+ else if(notForeignKeys.contains(Integer.valueOf(j))){
+ if(value!=null && !value.toLowerCase().equals("null")){
+ manager.applyChange(new AddAxiom(dataOntology, createOWLDataPropertyAssertionAxiom(factory, DBS_L1_OWL.hasContent, valueResIRI, value)));
+ }
+ }
+ else{
+
+ sparql = "SELECT ?p ?n WHERE { " +
+ "?c <"+DBS_L1.hasName+"> \""+tableName+"-column_"+dbColumnName+"\"^^xsd:string . "+
+ "?c <"+DBS_L1.joinsOn+"> ?p . "+
+ "?p <"+DBS_L1.hasName+"> ?n "+
+ "}";
+
+
+ Query sparqlQuery2 = QueryFactory.create(sparql);
+ QueryExecution qexec2 = QueryExecutionFactory.create(sparqlQuery2, ontModel) ;
+ com.hp.hpl.jena.query.ResultSet jenaRs2 = qexec.execSelect();
+
+ if(jenaRs2.hasNext()){
+ QuerySolution qs = jenaRs2.next();
+ Resource joinColumn = qs.getResource("?p");
+ com.hp.hpl.jena.rdf.model.Literal joinNameNode = qs.getLiteral("?n");
+
+ joinName = joinNameNode.getLexicalForm();
+
+ joinIRI = IRI.create(graphNS + joinName+"_datum_"+value);
+
+ OWLClassAssertionAxiom join = createOWLClassAssertionAxiom(factory, DBS_L1_OWL.Datum, joinIRI);
+ manager.applyChange(new AddAxiom(dataOntology, join));
+
+ manager.applyChange(new AddAxiom(dataOntology, createOWLObjectPropertyAssertionAxiom(factory, DBS_L1_OWL.hasContent, valueResIRI, joinIRI)));
+ foreignKeys.put(Integer.valueOf(j), joinName);
+
+ }
+ else{
+ notForeignKeys.add(Integer.valueOf(j));
+ if(value!=null && !value.toLowerCase().equals("null")){
+ manager.applyChange(new AddAxiom(dataOntology, createOWLDataPropertyAssertionAxiom(factory, DBS_L1_OWL.hasContent, valueResIRI, value)));
+ }
+ }
+
+ }
+
+
+ manager.applyChange(new AddAxiom(dataOntology, createOWLObjectPropertyAssertionAxiom(factory, DBS_L1_OWL.hasDatum, recordIRI, valueResIRI)));
+
+ }
+
+ IRI tableIRI = IRI.create(schemaNS + "table_"+tableName);
+ manager.applyChange(new AddAxiom(dataOntology, createOWLObjectPropertyAssertionAxiom(factory, DBS_L1_OWL.isRowOf, recordIRI, tableIRI)));
+
+
+ }
+
+
+ }
+ } catch (OWLOntologyRenameException e) {
+ throw new ReengineeringException();
+ } catch (SQLException e) {
+ throw new ReengineeringException();
+ }
+ }
+ }
+
+ return dataOntology;
+ }
+
+
+
+}
+
+class DBColumn {
+ private String name;
+ private String sqlType;
+
+ public DBColumn(String name, String sqlType) {
+ this.name = name;
+ this.sqlType = sqlType;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getSqlType() {
+ return sqlType;
+ }
+}
Added: incubator/stanbol/trunk/reengineer/db/src/main/java/org/apache/stanbol/reengineer/db/DBExtractor.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/reengineer/db/src/main/java/org/apache/stanbol/reengineer/db/DBExtractor.java?rev=1087691&view=auto
==============================================================================
--- incubator/stanbol/trunk/reengineer/db/src/main/java/org/apache/stanbol/reengineer/db/DBExtractor.java (added)
+++ incubator/stanbol/trunk/reengineer/db/src/main/java/org/apache/stanbol/reengineer/db/DBExtractor.java Fri Apr 1 13:01:38 2011
@@ -0,0 +1,355 @@
+package org.apache.stanbol.reengineer.db;
+
+import java.io.IOException;
+import java.util.Dictionary;
+
+import org.apache.clerezza.rdf.core.MGraph;
+import org.apache.clerezza.rdf.core.access.TcManager;
+import org.apache.clerezza.rdf.core.access.WeightedTcProvider;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.stanbol.ontologymanager.ontonet.api.DuplicateIDException;
+import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
+import org.apache.stanbol.ontologymanager.ontonet.api.io.RootOntologyIRISource;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScope;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScopeFactory;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpaceFactory;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.ScopeRegistry;
+import org.apache.stanbol.ontologymanager.ontonet.api.session.Session;
+import org.apache.stanbol.ontologymanager.ontonet.api.session.SessionManager;
+import org.apache.stanbol.reengineer.base.api.DataSource;
+import org.apache.stanbol.reengineer.base.api.ReengineeringException;
+import org.apache.stanbol.reengineer.base.api.ReengineerManager;
+import org.apache.stanbol.reengineer.base.api.Reengineer;
+import org.apache.stanbol.reengineer.base.api.settings.ConnectionSettings;
+import org.apache.stanbol.reengineer.base.api.util.ReengineerType;
+import org.apache.stanbol.reengineer.base.api.util.UnsupportedReengineerException;
+import org.apache.stanbol.reengineer.db.vocab.DBS_L1;
+import org.osgi.service.component.ComponentContext;
+import org.semanticweb.owlapi.apibinding.OWLManager;
+import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLDataFactory;
+import org.semanticweb.owlapi.model.OWLOntology;
+import org.semanticweb.owlapi.model.OWLOntologyCreationException;
+import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * The {@code DBExtractor} is an implementation of the {@link Reengineer} for relational databases.
+ *
+ * @author andrea.nuzzolese
+ *
+ */
+
+@Component(immediate = true, metatype = true)
+@Service(Reengineer.class)
+public class DBExtractor implements Reengineer {
+
+ public static final String _DB_DATA_REENGINEERING_SESSION_DEFAULT = "/db-data-reengineering-session";
+ public static final String _DB_DATA_REENGINEERING_SESSION_SPACE_DEFAULT = "/db-data-reengineering-session-space";
+ public static final String _DB_REENGINEERING_SESSION_SPACE_DEFAULT = "/db-schema-reengineering-session-space";
+ public static final String _DB_SCHEMA_REENGINEERING_ONTOLOGY_SPACE_DEFAULT = "/db-schema-reengineering-ontology-space";
+ public static final String _DB_SCHEMA_REENGINEERING_SESSION_DEFAULT = "/db-schema-reengineering-session";
+ public static final String _HOST_NAME_AND_PORT_DEFAULT = "localhost:8080";
+ public static final String _REENGINEERING_SCOPE_DEFAULT = "db_reengineering";
+
+ @Property(value = _DB_DATA_REENGINEERING_SESSION_DEFAULT)
+ public static final String DB_DATA_REENGINEERING_SESSION = "org.apache.stanbol.reengineer.db.data";
+
+ @Property(value = _DB_DATA_REENGINEERING_SESSION_SPACE_DEFAULT)
+ public static final String DB_DATA_REENGINEERING_SESSION_SPACE = "org.apache.stanbol.reengineer.space.db.data";
+
+ @Property(value = _DB_REENGINEERING_SESSION_SPACE_DEFAULT)
+ public static final String DB_REENGINEERING_SESSION_SPACE = "http://kres.iks-project.eu/space/reengineering/db";
+
+ @Property(value = _DB_SCHEMA_REENGINEERING_ONTOLOGY_SPACE_DEFAULT)
+ public static final String DB_SCHEMA_REENGINEERING_ONTOLOGY_SPACE = "org.apache.stanbol.reengineer.ontology.space.db";
+
+ @Property(value = _DB_SCHEMA_REENGINEERING_SESSION_DEFAULT)
+ public static final String DB_SCHEMA_REENGINEERING_SESSION = "org.apache.stanbol.reengineer.db.schema";
+
+ @Property(value = _HOST_NAME_AND_PORT_DEFAULT)
+ public static final String HOST_NAME_AND_PORT = "host.name.port";
+
+ @Property(value = _REENGINEERING_SCOPE_DEFAULT)
+ public static final String REENGINEERING_SCOPE = "db.reengineering.scope";
+
+ ConnectionSettings connectionSettings;
+
+ String databaseURI;
+
+ private IRI kReSSessionID;
+
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ @Reference
+ ONManager onManager;
+
+ @Reference
+ ReengineerManager reengineeringManager;
+
+ private IRI reengineeringScopeIRI;
+
+ private IRI reengineeringSpaceIRI;
+
+ MGraph schemaGraph;
+ protected OntologyScope scope;
+
+ @Reference
+ TcManager tcManager;
+
+ @Reference
+ WeightedTcProvider weightedTcProvider;
+
+ /**
+ * This default constructor is <b>only</b> intended to be used by the OSGI environment with Service
+ * Component Runtime support.
+ * <p>
+ * DO NOT USE to manually create instances - the DBExtractor instances do need to be configured! YOU NEED
+ * TO USE {@link #DBExtractor(ONManager)} or its overloads, to parse the configuration and then
+ * initialise the rule store if running outside a OSGI environment.
+ */
+ public DBExtractor() {
+
+ }
+
+ /**
+ *
+ * Create a new {@link DBExtractor} that is formally a {@link Reengineer}.
+ *
+ */
+ public DBExtractor(ReengineerManager reengineeringManager,
+ ONManager onManager,
+ TcManager tcManager,
+ WeightedTcProvider weightedTcProvider,
+ Dictionary<String,Object> configuration) {
+ this();
+ this.reengineeringManager = reengineeringManager;
+ this.onManager = onManager;
+ this.tcManager = tcManager;
+ this.weightedTcProvider = weightedTcProvider;
+ activate(configuration);
+ }
+
+ /**
+ * Create a new {@link DBExtractor} that is formally a {@link Reengineer}.
+ *
+ * @param databaseURI
+ * {@link String}
+ * @param schemaGraph
+ * {@link MGraph}
+ * @param connectionSettings
+ * {@link ConnectionSettings}
+ */
+ public DBExtractor(ReengineerManager reengineeringManager,
+ ONManager onManager,
+ TcManager tcManager,
+ WeightedTcProvider weightedTcProvider,
+ Dictionary<String,Object> configuration,
+ String databaseURI,
+ MGraph schemaGraph,
+ ConnectionSettings connectionSettings) {
+ // Copy code from overloaded constructor, except that the call to
+ // activate() goes at the end.
+ this();
+ this.reengineeringManager = reengineeringManager;
+ this.onManager = onManager;
+ this.tcManager = tcManager;
+ this.weightedTcProvider = weightedTcProvider;
+ this.databaseURI = databaseURI;
+ this.schemaGraph = schemaGraph;
+ this.connectionSettings = connectionSettings;
+ activate(configuration);
+ }
+
+ /**
+ * Used to configure an instance within an OSGi container.
+ *
+ * @throws IOException
+ */
+ @SuppressWarnings("unchecked")
+ @Activate
+ protected void activate(ComponentContext context) throws IOException {
+ log.info("in " + DBExtractor.class + " activate with context " + context);
+ if (context == null) {
+ throw new IllegalStateException("No valid" + ComponentContext.class + " parsed in activate!");
+ }
+ activate((Dictionary<String,Object>) context.getProperties());
+ }
+
+ protected void activate(Dictionary<String,Object> configuration) {
+
+ String reengineeringScopeID = (String) configuration.get(REENGINEERING_SCOPE);
+ if (reengineeringScopeID == null) reengineeringScopeID = _REENGINEERING_SCOPE_DEFAULT;
+ String hostNameAndPort = (String) configuration.get(HOST_NAME_AND_PORT);
+ if (hostNameAndPort == null) hostNameAndPort = _HOST_NAME_AND_PORT_DEFAULT;
+ // TODO: Manage the other properties
+
+ hostNameAndPort = "http://" + hostNameAndPort;
+
+ reengineeringScopeIRI = IRI.create(hostNameAndPort + "/kres/ontoman/ontology/ontology/" + reengineeringScopeID);
+ reengineeringSpaceIRI = IRI.create(DB_REENGINEERING_SESSION_SPACE);
+
+ reengineeringManager.bindReengineer(this);
+
+ SessionManager kReSSessionManager = onManager.getSessionManager();
+ Session kReSSession = kReSSessionManager.createSession();
+
+ kReSSessionID = kReSSession.getID();
+
+ OntologyScopeFactory ontologyScopeFactory = onManager.getOntologyScopeFactory();
+
+ ScopeRegistry scopeRegistry = onManager.getScopeRegistry();
+
+ OntologySpaceFactory ontologySpaceFactory = onManager.getOntologySpaceFactory();
+
+ scope = null;
+ try {
+ log.info("Semion DBExtractor : created scope with IRI " + REENGINEERING_SCOPE);
+ IRI iri = IRI.create(DBS_L1.URI);
+ OWLOntologyManager ontologyManager = OWLManager.createOWLOntologyManager();
+ OWLOntology owlOntology = ontologyManager.createOntology(iri);
+
+ System.out.println("Created ONTOLOGY OWL");
+
+ scope = ontologyScopeFactory.createOntologyScope(reengineeringScopeIRI,
+ new RootOntologyIRISource(IRI.create(DBS_L1.URI)));
+
+ // scope.setUp();
+
+ scopeRegistry.registerScope(scope);
+
+ } catch (DuplicateIDException e) {
+ log.info("Semion DBExtractor : already existing scope for IRI " + REENGINEERING_SCOPE);
+ scope = scopeRegistry.getScope(reengineeringScopeIRI);
+ } catch (OWLOntologyCreationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (Exception e) {
+ log.error("Semion DBExtractor : No OntologyInputSource for ONManager.");
+ }
+
+ if (scope != null) {
+ scope.addSessionSpace(ontologySpaceFactory.createSessionOntologySpace(reengineeringSpaceIRI),
+ kReSSession.getID());
+
+ scopeRegistry.setScopeActive(reengineeringScopeIRI, true);
+ }
+
+ log.info("Activated KReS Semion RDB Reengineer");
+ }
+
+ @Override
+ public boolean canPerformReengineering(DataSource dataSource) {
+ if (dataSource.getDataSourceType() == getReengineerType()) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public boolean canPerformReengineering(int dataSourceType) {
+ if (dataSourceType == getReengineerType()) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public boolean canPerformReengineering(OWLOntology schemaOntology) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean canPerformReengineering(String dataSourceType) throws UnsupportedReengineerException {
+ return canPerformReengineering(ReengineerType.getType(dataSourceType));
+ }
+
+ @Override
+ public OWLOntology dataReengineering(String graphNS,
+ IRI outputIRI,
+ DataSource dataSource,
+ OWLOntology schemaOntology) throws ReengineeringException {
+
+ DBDataTransformer semionDBDataTransformer = new DBDataTransformer(onManager,
+ schemaOntology);
+ return semionDBDataTransformer.transformData(graphNS, outputIRI);
+
+ }
+
+ @Deactivate
+ protected void deactivate(ComponentContext context) {
+ log.info("in " + DBExtractor.class + " deactivate with context " + context);
+ reengineeringManager.unbindReengineer(this);
+ }
+
+ @Override
+ public int getReengineerType() {
+ return ReengineerType.RDB;
+ }
+
+ private OntologyScope getScope() {
+ OntologyScope ontologyScope = null;
+
+ ScopeRegistry scopeRegistry = onManager.getScopeRegistry();
+
+ if (scopeRegistry.isScopeActive(reengineeringScopeIRI)) {
+ ontologyScope = scopeRegistry.getScope(reengineeringScopeIRI);
+ }
+
+ return ontologyScope;
+ }
+
+ @Override
+ public OWLOntology reengineering(String graphNS, IRI outputIRI, DataSource dataSource) throws ReengineeringException {
+ IRI schemaIRI;
+ if (outputIRI != null) {
+ schemaIRI = IRI.create(outputIRI.toString() + "/schema");
+ } else {
+ schemaIRI = IRI.create("/schema");
+ }
+ OWLOntology schemaOntology = schemaReengineering(graphNS + "/schema", schemaIRI, dataSource);
+
+ return dataReengineering(graphNS, outputIRI, dataSource, schemaOntology);
+ }
+
+ @Override
+ public OWLOntology schemaReengineering(String graphNS, IRI outputIRI, DataSource dataSource) {
+ OWLOntology schemaOntology = null;
+
+ if (outputIRI != null) {
+ log.info("Semion DBExtractor : starting to generate RDF graph with URI " + outputIRI.toString()
+ + " of a db schema ");
+ } else {
+ log.info("Semion DBExtractor : starting to generate RDF graph of a db schema ");
+ }
+
+ OntologyScope reengineeringScope = getScope();
+ if (reengineeringScope != null) {
+ ConnectionSettings connectionSettings = (ConnectionSettings) dataSource.getDataSource();
+ DBSchemaGenerator schemaGenerator = new DBSchemaGenerator(outputIRI,
+ connectionSettings);
+
+ System.out.println("OWL MANAGER IN SEMION: " + onManager);
+ OWLOntologyManager ontologyManager = onManager.getOwlCacheManager();
+ OWLDataFactory dataFactory = onManager.getOwlFactory();
+ schemaOntology = schemaGenerator.getSchema(ontologyManager, dataFactory);
+
+ if (outputIRI != null) {
+ log.info("Created graph with URI " + outputIRI.toString() + " of DB Schema.");
+ } else {
+ log.info("Created graph of DB Schema.");
+ }
+
+ }
+ return schemaOntology;
+ }
+}