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;
+    }
+}