You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by ci...@apache.org on 2011/03/30 15:44:01 UTC
svn commit: r1086954 [8/16] - in
/incubator/stanbol/trunk/kres/ontologymanager/store: ./ api/ api/src/
api/src/main/ api/src/main/java/ api/src/main/java/org/
api/src/main/java/org/apache/ api/src/main/java/org/apache/stanbol/
api/src/main/java/org/apa...
Added: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/JAXBProvider.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/JAXBProvider.java?rev=1086954&view=auto
==============================================================================
--- incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/JAXBProvider.java (added)
+++ incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/JAXBProvider.java Wed Mar 30 13:43:53 2011
@@ -0,0 +1,168 @@
+package org.apache.stanbol.ontologymanager.store.rest;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.List;
+import java.util.Vector;
+
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.MessageBodyReader;
+import javax.ws.rs.ext.MessageBodyWriter;
+import javax.ws.rs.ext.Provider;
+import javax.xml.XMLConstants;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+
+import org.apache.stanbol.ontologymanager.store.model.AdministeredOntologies;
+import org.apache.stanbol.ontologymanager.store.model.BuiltInResource;
+import org.apache.stanbol.ontologymanager.store.model.ClassConstraint;
+import org.apache.stanbol.ontologymanager.store.model.ClassContext;
+import org.apache.stanbol.ontologymanager.store.model.ClassMetaInformation;
+import org.apache.stanbol.ontologymanager.store.model.ClassesForOntology;
+import org.apache.stanbol.ontologymanager.store.model.ConstraintType;
+import org.apache.stanbol.ontologymanager.store.model.ContainerClasses;
+import org.apache.stanbol.ontologymanager.store.model.DatatypePropertiesForOntology;
+import org.apache.stanbol.ontologymanager.store.model.DatatypePropertyContext;
+import org.apache.stanbol.ontologymanager.store.model.DisjointClasses;
+import org.apache.stanbol.ontologymanager.store.model.Domain;
+import org.apache.stanbol.ontologymanager.store.model.EquivalentClasses;
+import org.apache.stanbol.ontologymanager.store.model.EquivalentProperties;
+import org.apache.stanbol.ontologymanager.store.model.IndividualContext;
+import org.apache.stanbol.ontologymanager.store.model.IndividualMetaInformation;
+import org.apache.stanbol.ontologymanager.store.model.IndividualsForOntology;
+import org.apache.stanbol.ontologymanager.store.model.ObjectFactory;
+import org.apache.stanbol.ontologymanager.store.model.ObjectPropertiesForOntology;
+import org.apache.stanbol.ontologymanager.store.model.ObjectPropertyContext;
+import org.apache.stanbol.ontologymanager.store.model.OntologyMetaInformation;
+import org.apache.stanbol.ontologymanager.store.model.PropertyAssertions;
+import org.apache.stanbol.ontologymanager.store.model.PropertyMetaInformation;
+import org.apache.stanbol.ontologymanager.store.model.Range;
+import org.apache.stanbol.ontologymanager.store.model.ResourceMetaInformationType;
+import org.apache.stanbol.ontologymanager.store.model.SuperProperties;
+import org.apache.stanbol.ontologymanager.store.model.Superclasses;
+import org.apache.stanbol.ontologymanager.store.rest.util.XMLUtil;
+import org.xml.sax.SAXException;
+
+import com.sun.jersey.spi.resource.Singleton;
+
+@Singleton
+@Provider
+@Produces(MediaType.APPLICATION_XML)
+public class JAXBProvider implements MessageBodyReader, MessageBodyWriter {
+
+ private Marshaller marshaller;
+
+ private Unmarshaller unmarshaller;
+
+ public JAXBProvider() throws JAXBException, SAXException {
+ ClassLoader cl = ObjectFactory.class.getClassLoader();
+ JAXBContext jc = JAXBContext.newInstance("org.apache.stanbol.ontologymanager.store.model", cl);
+ marshaller = jc.createMarshaller();
+ unmarshaller = jc.createUnmarshaller();
+ String schemaLocations[] = {"model/xlinks.xsd", "model/PersistenceStoreRESTfulInterface.xsd",
+ "model/SearchRESTfulInterface.xsd"};
+ SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI,
+ "com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory",
+ XMLUtil.class.getClassLoader());
+
+ List<StreamSource> streamSourceList = new Vector<StreamSource>();
+ for (int i = 0; i < schemaLocations.length; i++) {
+ InputStream is = cl.getResourceAsStream(schemaLocations[i]);
+ StreamSource streamSource = new StreamSource(is);
+ streamSourceList.add(streamSource);
+ }
+ StreamSource sources[] = new StreamSource[streamSourceList.size()];
+ Schema schema = schemaFactory.newSchema(streamSourceList.toArray(sources));
+ marshaller.setSchema(schema);
+ marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+ unmarshaller.setSchema(schema);
+ }
+
+ @Override
+ public long getSize(Object t, Class type, Type genericType, Annotation[] annotations, MediaType mediaType) {
+ return -1;
+ }
+
+ @Override
+ public boolean isWriteable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) {
+ if (type.equals(AdministeredOntologies.class) || type.equals(BuiltInResource.class)
+ || type.equals(ClassConstraint.class) || type.equals(ClassContext.class)
+ || type.equals(ClassesForOntology.class) || type.equals(ClassMetaInformation.class)
+ || type.equals(ConstraintType.class) || type.equals(ContainerClasses.class)
+ || type.equals(DatatypePropertiesForOntology.class) || type.equals(DatatypePropertyContext.class)
+ || type.equals(DisjointClasses.class) || type.equals(Domain.class)
+ || type.equals(EquivalentClasses.class) || type.equals(EquivalentProperties.class)
+ || type.equals(IndividualContext.class) || type.equals(IndividualMetaInformation.class)
+ || type.equals(IndividualsForOntology.class) || type.equals(ObjectPropertiesForOntology.class)
+ || type.equals(ObjectPropertyContext.class) || type.equals(OntologyMetaInformation.class)
+ || type.equals(PropertyAssertions.class) || type.equals(PropertyMetaInformation.class)
+ || type.equals(Range.class) || type.equals(ResourceMetaInformationType.class)
+ || type.equals(Superclasses.class) || type.equals(SuperProperties.class)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public void writeTo(Object t,
+ Class type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType,
+ MultivaluedMap httpHeaders,
+ OutputStream entityStream) throws IOException, WebApplicationException {
+ try {
+ marshaller.marshal(t, entityStream);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public boolean isReadable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) {
+ if (type.equals(AdministeredOntologies.class) || type.equals(BuiltInResource.class)
+ || type.equals(ClassConstraint.class) || type.equals(ClassContext.class)
+ || type.equals(ClassesForOntology.class) || type.equals(ClassMetaInformation.class)
+ || type.equals(ConstraintType.class) || type.equals(ContainerClasses.class)
+ || type.equals(DatatypePropertiesForOntology.class) || type.equals(DatatypePropertyContext.class)
+ || type.equals(DisjointClasses.class) || type.equals(Domain.class)
+ || type.equals(EquivalentClasses.class) || type.equals(EquivalentProperties.class)
+ || type.equals(IndividualContext.class) || type.equals(IndividualMetaInformation.class)
+ || type.equals(IndividualsForOntology.class) || type.equals(ObjectPropertiesForOntology.class)
+ || type.equals(ObjectPropertyContext.class) || type.equals(OntologyMetaInformation.class)
+ || type.equals(PropertyAssertions.class) || type.equals(PropertyMetaInformation.class)
+ || type.equals(Range.class) || type.equals(ResourceMetaInformationType.class)
+ || type.equals(Superclasses.class) || type.equals(SuperProperties.class)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public Object readFrom(Class type,
+ Type genericType,
+ Annotation[] annotations,
+ MediaType mediaType,
+ MultivaluedMap httpHeaders,
+ InputStream entityStream) throws IOException, WebApplicationException {
+ try {
+ return unmarshaller.unmarshal(entityStream);
+ } catch (JAXBException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
Propchange: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/JAXBProvider.java
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/JerseyApplication.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/JerseyApplication.java?rev=1086954&view=auto
==============================================================================
--- incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/JerseyApplication.java (added)
+++ incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/JerseyApplication.java Wed Mar 30 13:43:53 2011
@@ -0,0 +1,72 @@
+package org.apache.stanbol.ontologymanager.store.rest;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.ws.rs.core.Application;
+
+import org.apache.stanbol.ontologymanager.store.rest.resources.Ontologies;
+import org.apache.stanbol.ontologymanager.store.rest.resources.OntologyClasses;
+import org.apache.stanbol.ontologymanager.store.rest.resources.OntologyDatatypeProperties;
+import org.apache.stanbol.ontologymanager.store.rest.resources.OntologyDump;
+import org.apache.stanbol.ontologymanager.store.rest.resources.OntologyIndividuals;
+import org.apache.stanbol.ontologymanager.store.rest.resources.OntologyObjectProperties;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularClass;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularClassDisjointClasses;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularClassEquivalentClasses;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularClassSuperClasses;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularDatatypeProperty;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularDatatypePropertyDomains;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularDatatypePropertyRanges;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularDatatypePropertySuperProperties;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularIndividual;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularIndividualPropertyAssertions;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularIndividualTypes;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularObjectProperty;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularObjectPropertyDomains;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularObjectPropertyRanges;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularObjectPropertySuperProperties;
+import org.apache.stanbol.ontologymanager.store.rest.resources.ParticularOntology;
+
+public class JerseyApplication extends Application {
+
+ @Override
+ public Set<Class<?>> getClasses() {
+
+ Set<Class<?>> classes = new HashSet<Class<?>>();
+ classes.add(Ontologies.class);
+ classes.add(OntologyClasses.class);
+ classes.add(OntologyDatatypeProperties.class);
+ classes.add(OntologyObjectProperties.class);
+ classes.add(OntologyIndividuals.class);
+ classes.add(ParticularClass.class);
+ classes.add(ParticularDatatypeProperty.class);
+ classes.add(ParticularOntology.class);
+ classes.add(ParticularObjectProperty.class);
+ classes.add(ParticularIndividual.class);
+ classes.add(OntologyDump.class);
+ classes.add(ParticularClassSuperClasses.class);
+ classes.add(ParticularClassDisjointClasses.class);
+ classes.add(ParticularClassEquivalentClasses.class);
+ classes.add(ParticularObjectPropertyRanges.class);
+ classes.add(ParticularObjectPropertyDomains.class);
+ classes.add(ParticularObjectPropertySuperProperties.class);
+ classes.add(ParticularDatatypePropertyDomains.class);
+ classes.add(ParticularDatatypePropertyRanges.class);
+ classes.add(ParticularDatatypePropertySuperProperties.class);
+ classes.add(ParticularIndividualTypes.class);
+ classes.add(ParticularIndividualPropertyAssertions.class);
+
+ classes.add(JAXBProvider.class);
+
+ return classes;
+ }
+
+ @Override
+ public Set<Object> getSingletons() {
+ Set<Object> singletons = new HashSet<Object>();
+ // view processors
+ singletons.add(new FreemarkerViewProcessor());
+ return singletons;
+ }
+}
Propchange: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/JerseyApplication.java
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/LockManagerImp.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/LockManagerImp.java?rev=1086954&view=auto
==============================================================================
--- incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/LockManagerImp.java (added)
+++ incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/LockManagerImp.java Wed Mar 30 13:43:53 2011
@@ -0,0 +1,120 @@
+package org.apache.stanbol.ontologymanager.store.rest;
+
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Vector;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.stanbol.ontologymanager.store.api.LockManager;
+
+@Component
+@Service
+public class LockManagerImp implements LockManager {
+
+ private Lock internalLock = null;
+ private ReentrantReadWriteLock globalSpaceLock = null;
+ private List<ReentrantReadWriteLock> rwlockList = null;
+ private Hashtable<String,ReentrantReadWriteLock> index = null;
+
+ public LockManagerImp() {
+ rwlockList = new Vector<ReentrantReadWriteLock>();
+ index = new Hashtable<String,ReentrantReadWriteLock>();
+ internalLock = new ReentrantLock();
+ globalSpaceLock = new ReentrantReadWriteLock();
+ }
+
+ private static LockManager instance = null;
+
+ public static LockManager getInstance() {
+ if (instance == null) {
+ instance = new LockManagerImp();
+ }
+ return instance;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.stanbol.ontologymanager.store.rest.ILockManager#obtainReadLockFor(java.lang.String)
+ */
+ public void obtainReadLockFor(String ontologyPath) {
+ if (ontologyPath.equalsIgnoreCase(GLOBAL_SPACE)) {
+ globalSpaceLock.readLock().lock();
+ } else {
+ String closureID = getClosureIDFor(ontologyPath);
+ internalLock.lock();
+ if (!index.containsKey(closureID)) {
+ ReentrantReadWriteLock rrwl = new ReentrantReadWriteLock();
+ rwlockList.add(rrwl);
+ index.put(closureID, rrwl);
+ }
+ internalLock.unlock();
+ ReentrantReadWriteLock rrwl = index.get(closureID);
+ globalSpaceLock.readLock().lock();
+ rrwl.readLock().lock();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.stanbol.ontologymanager.store.rest.ILockManager#releaseReadLockFor(java.lang.String)
+ */
+ public void releaseReadLockFor(String ontologyPath) {
+ if (ontologyPath.equalsIgnoreCase(GLOBAL_SPACE)) {
+ globalSpaceLock.readLock().unlock();
+ } else {
+ String closureID = getClosureIDFor(ontologyPath);
+ ReentrantReadWriteLock rrwl = index.get(closureID);
+ rrwl.readLock().unlock();
+ globalSpaceLock.readLock().unlock();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.stanbol.ontologymanager.store.rest.ILockManager#obtainWriteLockFor(java.lang.String)
+ */
+ public void obtainWriteLockFor(String ontologyPath) {
+ if (ontologyPath.equalsIgnoreCase(GLOBAL_SPACE)) {
+ globalSpaceLock.writeLock().lock();
+ } else {
+ String closureID = getClosureIDFor(ontologyPath);
+ internalLock.lock();
+ if (!index.containsKey(closureID)) {
+ ReentrantReadWriteLock rrwl = new ReentrantReadWriteLock();
+ rwlockList.add(rrwl);
+ index.put(closureID, rrwl);
+ }
+ internalLock.unlock();
+ ReentrantReadWriteLock rrwl = index.get(closureID);
+ globalSpaceLock.readLock().lock();
+ rrwl.writeLock().lock();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.stanbol.ontologymanager.store.rest.ILockManager#releaseWriteLockFor(java.lang.String)
+ */
+ public void releaseWriteLockFor(String ontologyPath) {
+ if (ontologyPath.equalsIgnoreCase(GLOBAL_SPACE)) {
+ globalSpaceLock.writeLock().unlock();
+ } else {
+ String closureID = getClosureIDFor(ontologyPath);
+ ReentrantReadWriteLock rrwl = index.get(closureID);
+ rrwl.writeLock().unlock();
+ globalSpaceLock.readLock().unlock();
+ }
+ }
+
+ private String getClosureIDFor(String ontologyPath) {
+ return ontologyPath;
+ }
+}
Propchange: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/LockManagerImp.java
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/ResourceManagerImp.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/ResourceManagerImp.java?rev=1086954&view=auto
==============================================================================
--- incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/ResourceManagerImp.java (added)
+++ incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/ResourceManagerImp.java Wed Mar 30 13:43:53 2011
@@ -0,0 +1,665 @@
+package org.apache.stanbol.ontologymanager.store.rest;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.Vector;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.stanbol.ontologymanager.store.api.ResourceManager;
+import org.osgi.service.component.ComponentContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Class that relates URL(Path)s used by the RESTful interface with the URIs used by the underlying triple
+ * store
+ *
+ * @author gunes
+ */
+
+@Component(enabled = true)
+@Service
+public class ResourceManagerImp implements ResourceManager {
+
+ private static final String DB_URL = "jdbc:derby:ps_db;create=true";
+
+ private String DB_DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
+
+ private static String ontologyPathPrefix = "ontologies/";
+
+ private static String classPathPrefix = "classes/";
+
+ private static String dataPropertyPathPrefix = "datatypeProperties/";
+
+ private static String objectPropertyPathPrefix = "objectProperties/";
+
+ private static String individualPathPrefix = "individuals/";
+
+ private static String ontologiesTable = "resource_manager_ontologies";
+
+ private static String resourcesTable = "resource_manager_resources";
+
+ public static String CLASS_RESOURCE = "CLASS";
+
+ public static String DATA_PROPERTY_RESOURCE = "DATA_PROPERTY";
+
+ public static String OBJECT_PROPERTY_RESOURCE = "OBJECT_PROPERTY";
+
+ public static String INDIVIDUAL_RESOURCE = "INDIVIDUAL";
+
+ Dictionary<String,String> properties = null;
+
+ /** Logger instance **/
+ private static Logger logger = LoggerFactory.getLogger(ResourceManagerImp.class);
+
+ /* private variables to store ontology-path (URI-URL) relations */
+ /* ontologyURI --> ontologyPath */
+ private Hashtable<String,String> ontologies = null;
+
+ /* ontologyPath --> ontologyURI */
+ private Hashtable<String,String> ontologiesInverted = null;
+
+ /*
+ * private varibles to store resource(class/property/individual)-path (resource URI - resource URL)
+ * relations
+ */
+ /* resourceURI --> resourcePath */
+ private Hashtable<String,String> resources = null;
+
+ /* resourcePath --> resourceURI */
+ private Hashtable<String,String> resourcesInverted = null;
+
+ /*
+ * the type of the resource could be values attributed by the static variables: CLASS_RESOURCE,
+ * DATA_PROPERTY_RESOURCE, OBJECT_PROPERTY_RESOURCE and INDIVIDUAL_RESOURCE
+ */
+ /* resourceURI --> resourceType */
+ private Hashtable<String,String> resourcesTypes = null;
+
+ /*
+ * private variable to store the mapping between resource URI - ontology URI, where the resource belongs
+ * to that ontology
+ */
+ /* resourceURI --> ontologyURI */
+ private Hashtable<String,String> resourceToOntologyURIs = null;
+
+ private static ResourceManagerImp INSTANCE = null;
+
+ private void restore() throws IOException {
+ try {
+ Connection con = obtainConnection();
+ Statement statement = con.createStatement();
+
+ boolean ontologiesTableExist = checkTableExists(con, ontologiesTable);
+ boolean resourceTableExist = checkTableExists(con, resourcesTable);
+
+ if (!ontologiesTableExist) {
+ Statement stmt = con.createStatement();
+ String sql = "CREATE TABLE resource_manager_ontologies ("
+ + "id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),"
+ + "ontologyURI varchar(255) DEFAULT NULL,"
+ + "ontologyPath varchar(255) DEFAULT NULL," + "PRIMARY KEY (id)" + ")";
+ stmt.executeUpdate(sql);
+ }
+
+ if (!resourceTableExist) {
+ // the table does not exist
+ Statement stmt = con.createStatement();
+ String sql = "CREATE TABLE resource_manager_resources (" + "id INTEGER DEFAULT NULL,"
+ + "resourceURI varchar(255) DEFAULT NULL,"
+ + "resourcePath varchar(255) DEFAULT NULL,"
+ + "resourceType varchar(255) DEFAULT NULL" + ") ";
+ stmt.executeUpdate(sql);
+ }
+
+ ResultSet rSet = statement.executeQuery("SELECT * FROM " + ontologiesTable);
+ while (rSet.next()) {
+ String ontologyURI = rSet.getString("ontologyURI");
+ String ontologyPath = rSet.getString("ontologyPath");
+ ontologies.put(ontologyURI, ontologyPath);
+ ontologiesInverted.put(ontologyPath, ontologyURI);
+ }
+ Statement statement2 = con.createStatement();
+ ResultSet rSet2 = statement2.executeQuery("SELECT * from " + resourcesTable);
+ while (rSet2.next()) {
+ String resourceURI = rSet2.getString("resourceURI");
+ String resourcePath = rSet2.getString("resourcePath");
+ String resourceType = rSet2.getString("resourceType");
+ String ontologyTableRowRef = rSet2.getString("id");
+ Statement statement3 = con.createStatement();
+ ResultSet rSet3 = statement3.executeQuery("SELECT * from " + ontologiesTable + " WHERE id="
+ + ontologyTableRowRef);
+ if (rSet3.next()) {
+ String ontologyURIForResource = rSet3.getString("ontologyURI");
+ String ontologyPathForResource = rSet3.getString("ontologyPath");
+ resources.put(ontologyURIForResource + "#" + resourceURI, resourcePath);
+ resourcesInverted.put(ontologyPathForResource + "#" + resourcePath, resourceURI);
+ resourceToOntologyURIs.put(resourceURI, ontologyURIForResource);
+ resourcesTypes.put(ontologyURIForResource + "#" + resourceURI, resourceType);
+ }
+ }
+ con.close();
+ } catch (Exception e) {
+ throw new RuntimeException("Resource manager can not restore ", e);
+ }
+ }
+
+ private boolean checkTableExists(Connection con, String tableName) throws SQLException {
+ // FIXME This should be done by jdbc's table functionality but it does
+ // not seem to work with Apache Derby
+ Statement stmt = con.createStatement();
+ String stmtString = "SELECT COUNT(*) FROM " + tableName;
+ boolean exists = true;
+ try {
+ stmt.execute(stmtString);
+ } catch (SQLException e) {
+ String state = (e).getSQLState();
+ if ("42X05".equals(state)) exists = false;
+ } finally {
+ stmt.close();
+ }
+ return exists;
+ }
+
+ @Activate
+ public void activate(ComponentContext cc) {
+ try {
+ this.restore();
+ } catch (IOException e) {
+ throw new RuntimeException("Can not restore stored information", e);
+ }
+ logger.info("Resource Manager properties are set");
+ }
+
+ public ResourceManagerImp() {
+ INSTANCE = this;
+ ontologies = new Hashtable<String,String>();
+ ontologiesInverted = new Hashtable<String,String>();
+ resources = new Hashtable<String,String>();
+ resourcesInverted = new Hashtable<String,String>();
+ resourceToOntologyURIs = new Hashtable<String,String>();
+ resourcesTypes = new Hashtable<String,String>();
+ }
+
+ public static ResourceManagerImp getInstance() {
+ if (INSTANCE == null) {
+ INSTANCE = new ResourceManagerImp();
+ // logger.warn("Creating Resource Manager: Properties must be set");
+ } else {}
+
+ return INSTANCE;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager#
+ * registerOntology(java.lang.String)
+ */
+ public void registerOntology(String ontologyURI) {
+ try {
+ if (!ontologies.containsKey(ontologyURI)) {
+ String ontologyPath = normalizeURI(ontologyURI);
+ ontologies.put(ontologyURI, ontologyPath);
+ ontologiesInverted.put(ontologyPath, ontologyURI);
+
+ Connection con = obtainConnection();
+ Statement statement = con.createStatement();
+ statement.executeUpdate("INSERT INTO " + ontologiesTable
+ + " (ontologyURI, ontologyPath) VALUES ('" + ontologyURI + "', '"
+ + ontologyPath + "')");
+ con.close();
+ }
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager# registerClass(java.lang.String,
+ * java.lang.String)
+ */
+ public void registerClass(String ontologyURI, String classURI) {
+ try {
+ if (!resources.containsKey(ontologyURI + "#" + classURI)) {
+ String classPath = normalizeURI(classURI);
+ resources.put(ontologyURI + "#" + classURI, classPath);
+ resourcesInverted.put(ontologies.get(ontologyURI) + "#" + classPath, classURI);
+ resourceToOntologyURIs.put(classURI, ontologyURI);
+ resourcesTypes.put(ontologyURI + "#" + classURI, CLASS_RESOURCE);
+ Connection con = obtainConnection();
+ Statement statement = con.createStatement();
+ ResultSet rSet = statement.executeQuery("SELECT id from " + ontologiesTable
+ + " WHERE ontologyURI='" + ontologyURI + "'");
+ if (rSet.next()) {
+ String ontologyRowID = rSet.getString("id");
+ statement.executeUpdate("INSERT INTO " + resourcesTable
+ + " (id, resourceURI, resourcePath, resourceType) VALUES ("
+ + ontologyRowID + ", '" + classURI + "', '" + classPath + "', '"
+ + CLASS_RESOURCE + "')");
+ }
+ con.close();
+ // logger.info("Connection Closed");
+ }
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager#
+ * registerDatatypeProperty(java.lang.String, java.lang.String)
+ */
+ public void registerDatatypeProperty(String ontologyURI, String dataPropertyURI) {
+ try {
+ if (!resources.containsKey(ontologyURI + "#" + dataPropertyURI)) {
+ String dataPropertyPath = normalizeURI(dataPropertyURI);
+ resources.put(ontologyURI + "#" + dataPropertyURI, dataPropertyPath);
+ resourcesInverted.put(ontologies.get(ontologyURI) + "#" + dataPropertyPath, dataPropertyURI);
+ resourceToOntologyURIs.put(dataPropertyURI, ontologyURI);
+ resourcesTypes.put(ontologyURI + "#" + dataPropertyURI, DATA_PROPERTY_RESOURCE);
+ Connection con = obtainConnection();
+ Statement statement = con.createStatement();
+ ResultSet rSet = statement.executeQuery("SELECT id from " + ontologiesTable
+ + " WHERE ontologyURI='" + ontologyURI + "'");
+ if (rSet.next()) {
+ String ontologyRowID = rSet.getString("id");
+ statement.executeUpdate("INSERT INTO " + resourcesTable
+ + " (id, resourceURI, resourcePath, resourceType) VALUES ("
+ + ontologyRowID + ", '" + dataPropertyURI + "', '"
+ + dataPropertyPath + "', '" + DATA_PROPERTY_RESOURCE + "')");
+ }
+ con.close();
+ // logger.info("Connection Closed");
+ }
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager#
+ * registerObjectProperty(java.lang.String, java.lang.String)
+ */
+ public void registerObjectProperty(String ontologyURI, String objectPropertyURI) {
+ try {
+ if (!resources.containsKey(ontologyURI + "#" + objectPropertyURI)) {
+ String objectPropertyPath = normalizeURI(objectPropertyURI);
+ resources.put(ontologyURI + "#" + objectPropertyURI, objectPropertyPath);
+ resourcesInverted.put(ontologies.get(ontologyURI) + "#" + objectPropertyPath,
+ objectPropertyURI);
+ resourceToOntologyURIs.put(objectPropertyURI, ontologyURI);
+ resourcesTypes.put(ontologyURI + "#" + objectPropertyURI, OBJECT_PROPERTY_RESOURCE);
+ Connection con = obtainConnection();
+ Statement statement = con.createStatement();
+ ResultSet rSet = statement.executeQuery("SELECT id from " + ontologiesTable
+ + " WHERE ontologyURI='" + ontologyURI + "'");
+ if (rSet.next()) {
+ String ontologyRowID = rSet.getString("id");
+ statement.executeUpdate("INSERT INTO " + resourcesTable
+ + " (id, resourceURI, resourcePath, resourceType) VALUES ("
+ + ontologyRowID + ", '" + objectPropertyURI + "', '"
+ + objectPropertyPath + "', '" + OBJECT_PROPERTY_RESOURCE + "')");
+ }
+ con.close();
+ }
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager#
+ * registerIndividual(java.lang.String, java.lang.String)
+ */
+ public void registerIndividual(String ontologyURI, String individualURI) {
+ try {
+ if (!resources.containsKey(ontologyURI + "#" + individualURI)) {
+ String individualPath = normalizeURI(individualURI);
+ resources.put(ontologyURI + "#" + individualURI, individualPath);
+ resourcesInverted.put(ontologies.get(ontologyURI) + "#" + individualPath, individualURI);
+ resourceToOntologyURIs.put(individualURI, ontologyURI);
+ resourcesTypes.put(ontologyURI + "#" + individualURI, INDIVIDUAL_RESOURCE);
+ Connection con = obtainConnection();
+ Statement statement = con.createStatement();
+ ResultSet rSet = statement.executeQuery("SELECT id from " + ontologiesTable
+ + " WHERE ontologyURI='" + ontologyURI + "'");
+ if (rSet.next()) {
+ String ontologyRowID = rSet.getString("id");
+ String statementstr = "INSERT INTO " + resourcesTable
+ + " (id, resourceURI, resourcePath, resourceType) VALUES ("
+ + ontologyRowID + ", '" + individualURI + "', '" + individualPath
+ + "', '" + INDIVIDUAL_RESOURCE + "')";
+ statement.executeUpdate(statementstr);
+ }
+ con.close();
+ }
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ *
+ * org.apache.stanbol.persistencestore.rest.IResourceManager#hasOntology (java.lang.String)
+ */
+ public boolean hasOntology(String ontologyURI) {
+ boolean result = ontologies.containsKey(ontologyURI);
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager# getOntologyPath(java.lang.String)
+ */
+ public String getOntologyPath(String ontologyURI) {
+ String result = null;
+ if (ontologies.containsKey(ontologyURI)) {
+ result = ontologies.get(ontologyURI);
+ }
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager#
+ * getOntologyFullPath(java.lang.String)
+ */
+ public String getOntologyFullPath(String ontologyURI) {
+ String result = null;
+ if (ontologies.containsKey(ontologyURI)) {
+ result = ontologyPathPrefix + ontologies.get(ontologyURI);
+ }
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager#
+ * getResourceFullPath(java.lang.String)
+ */
+ public String getResourceFullPath(String resourceURI) {
+ String result = null;
+ String ontologyURI = resourceToOntologyURIs.get(resourceURI);
+ if (ontologies.containsKey(ontologyURI) && resources.containsKey(ontologyURI + "#" + resourceURI)) {
+ String resourceType = resourcesTypes.get(ontologyURI + "#" + resourceURI);
+ String pathPrefix = null;
+ if (resourceType.equalsIgnoreCase(CLASS_RESOURCE)) {
+ pathPrefix = classPathPrefix;
+ } else if (resourceType.equalsIgnoreCase(OBJECT_PROPERTY_RESOURCE)) {
+ pathPrefix = objectPropertyPathPrefix;
+ } else if (resourceType.equalsIgnoreCase(DATA_PROPERTY_RESOURCE)) {
+ pathPrefix = dataPropertyPathPrefix;
+ } else if (resourceType.equalsIgnoreCase(INDIVIDUAL_RESOURCE)) {
+ pathPrefix = individualPathPrefix;
+ }
+ result = ontologyPathPrefix + ontologies.get(ontologyURI) + "/" + pathPrefix
+ + resources.get(ontologyURI + "#" + resourceURI);
+ }
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager#
+ * getOntologyURIForPath(java.lang.String)
+ */
+ public String getOntologyURIForPath(String ontologyPath) {
+ String result = null;
+ if (ontologiesInverted.containsKey(ontologyPath)) {
+ result = ontologiesInverted.get(ontologyPath);
+ }
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager#
+ * getResourceURIForPath(java.lang.String, java.lang.String)
+ */
+ public String getResourceURIForPath(String ontologyPath, String resourcePath) {
+ String result = null;
+ if (resourcesInverted.containsKey(ontologyPath + "#" + resourcePath)) {
+ result = resourcesInverted.get(ontologyPath + "#" + resourcePath);
+ }
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager# getResourceType(java.lang.String)
+ */
+ public String getResourceType(String resourceURI) {
+ String result = resourcesTypes.get(resourceURI);
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager# removeOntology(java.lang.String)
+ */
+ public void removeOntology(String ontologyURI) {
+ try {
+ // first clear hashtables
+ String ontologyPath = ontologies.get(ontologyURI);
+ if (ontologyPath == null) {
+ logger.warn("Ontology " + ontologyURI + " already deleted");
+ return;
+ }
+ ontologies.remove(ontologyURI);
+ ontologiesInverted.remove(ontologyPath);
+
+ List<String> keysToRemove = new Vector<String>();
+ Set<String> resources_keys = resources.keySet();
+ Iterator<String> resources_keys_itr = resources_keys.iterator();
+ while (resources_keys_itr.hasNext()) {
+ String key = resources_keys_itr.next();
+ if (key.startsWith(ontologyURI)) {
+ keysToRemove.add(key);
+ }
+ }
+ Iterator<String> keysToRemoveItr = keysToRemove.iterator();
+ while (keysToRemoveItr.hasNext()) {
+ resources.remove(keysToRemoveItr.next());
+ }
+
+ keysToRemove = new Vector<String>();
+ Set<String> resourcesInverted_keys = resourcesInverted.keySet();
+ Iterator<String> resourcesInverted_keys_itr = resourcesInverted_keys.iterator();
+ while (resourcesInverted_keys_itr.hasNext()) {
+ String key = resourcesInverted_keys_itr.next();
+ if (key.startsWith(ontologyURI)) {
+ keysToRemove.add(key);
+ }
+ }
+ keysToRemoveItr = keysToRemove.iterator();
+ while (keysToRemoveItr.hasNext()) {
+ resourcesInverted.remove(keysToRemoveItr.next());
+ }
+
+ keysToRemove = new Vector<String>();
+ Set<String> resourcesTypes_keys = resourcesTypes.keySet();
+ Iterator<String> resourcesTypes_keys_itr = resourcesTypes_keys.iterator();
+ while (resourcesTypes_keys_itr.hasNext()) {
+ String key = resourcesTypes_keys_itr.next();
+ if (key.startsWith(ontologyURI)) {
+ keysToRemove.add(key);
+ }
+ }
+ keysToRemoveItr = keysToRemove.iterator();
+ while (keysToRemoveItr.hasNext()) {
+ resourcesTypes.remove(keysToRemoveItr.next());
+ }
+
+ keysToRemove = new Vector<String>();
+ Set<String> resourceToOntologyURIs_keys = resourceToOntologyURIs.keySet();
+ Iterator<String> resourceToOntologyURIs_keys_itr = resourceToOntologyURIs_keys.iterator();
+ while (resourceToOntologyURIs_keys_itr.hasNext()) {
+ String key = resourceToOntologyURIs_keys_itr.next();
+ String value = resourceToOntologyURIs.get(key);
+ if (value.equalsIgnoreCase(ontologyURI)) {
+ keysToRemove.add(key);
+ }
+ }
+ keysToRemoveItr = keysToRemove.iterator();
+ while (keysToRemoveItr.hasNext()) {
+ resourceToOntologyURIs.remove(keysToRemoveItr.next());
+ }
+
+ // then clear database
+ Connection con = obtainConnection();
+ Statement statement = con.createStatement();
+ String sql = "SELECT id from " + ontologiesTable + " WHERE ontologyURI='" + ontologyURI + "'";
+ ResultSet rSet = statement.executeQuery(sql);
+ String id = null;
+ if (rSet.next()) {
+ id = rSet.getString("id");
+ }
+
+ statement = con.createStatement();
+ sql = "DELETE from " + ontologiesTable + " WHERE id=" + id;
+ statement.executeUpdate(sql);
+
+ statement = con.createStatement();
+ sql = "DELETE from " + resourcesTable + " WHERE id=" + id;
+ statement.executeUpdate(sql);
+
+ con.close();
+ // logger.info("Connection Closed");
+
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager# removeResource(java.lang.String)
+ */
+ public void removeResource(String resourceURI) {
+ try {
+ // first clear hashtables
+ String classPath = resources.get(resourceURI);
+ if (classPath == null) {
+ logger.warn("Resource" + resourceURI + "not found");
+ return;
+ }
+
+ String ontologyURI = resourceToOntologyURIs.get(resourceURI);
+ String ontologyPath = ontologies.get(ontologyURI);
+ resources.remove(ontologyURI + "#" + resourceURI);
+ resourcesInverted.remove(ontologyPath + "#" + classPath);
+ resourcesTypes.remove(ontologyURI + "#" + resourceURI);
+ resourceToOntologyURIs.remove(resourceURI);
+
+ // then clear database
+ Connection con = obtainConnection();
+ Statement statement = con.createStatement();
+ String sql = "DELETE from " + resourcesTable + " WHERE resourceURI='" + resourceURI + "'";
+ statement.executeUpdate(sql);
+ con.close();
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ }
+ }
+
+ // FIXME:: make sure that this method returns the reference to the imported
+ // class!!!
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager#
+ * resolveOntologyURIFromResourceURI(java.lang.String)
+ */
+ public String resolveOntologyURIFromResourceURI(String resourceURI) {
+ String result = null;
+ if (resourceToOntologyURIs.containsKey(resourceURI)) {
+ result = resourceToOntologyURIs.get(resourceURI);
+ }
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @seeeu.iksproject.fise.stores.persistencestore.rest.IResourceManager# clearResourceManager()
+ */
+ public void clearResourceManager() {
+ try {
+ // first clear hashtables
+ ontologies.clear();
+ ontologiesInverted.clear();
+ resources.clear();
+ resourcesInverted.clear();
+ resourcesTypes.clear();
+ resourceToOntologyURIs.clear();
+
+ // then clear database
+ Connection con = obtainConnection();
+ boolean ontologiesTableExists = checkTableExists(con, ontologiesTable);
+ boolean resourceTableExists = checkTableExists(con, resourcesTable);
+ Statement statement = con.createStatement();
+ if (ontologiesTableExists) {
+ String sql1 = "DELETE FROM " + ontologiesTable;
+ statement.executeUpdate(sql1);
+ }
+ if (resourceTableExists) {
+ statement = con.createStatement();
+ String sql2 = "DELETE FROM " + resourcesTable;
+ statement.execute(sql2);
+ }
+ con.close();
+ logger.info("Connection Closed");
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ }
+ }
+
+ public Connection obtainConnection() throws InstantiationException,
+ IllegalAccessException,
+ ClassNotFoundException,
+ SQLException {
+ return DriverManager.getConnection(DB_URL);// , DB_USER, DB_PW);
+ }
+
+ private String normalizeURI(String uri) {
+ // FIXME Find a solution to # problem
+ return uri.replace("#", "/");
+ }
+
+ @Override
+ public String convertEntityRelativePathToURI(String entityPath) {
+ return entityPath.substring(0, entityPath.lastIndexOf("/")) + "#"
+ + entityPath.substring(entityPath.lastIndexOf("/") + 1);
+ }
+}
Propchange: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/ResourceManagerImp.java
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/ServletRegisterer.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/ServletRegisterer.java?rev=1086954&view=auto
==============================================================================
--- incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/ServletRegisterer.java (added)
+++ incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/ServletRegisterer.java Wed Mar 30 13:43:53 2011
@@ -0,0 +1,120 @@
+package org.apache.stanbol.ontologymanager.store.rest;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+
+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.stanbol.ontologymanager.store.api.PersistenceStore;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.http.HttpService;
+import org.osgi.service.http.NamespaceException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.sun.jersey.spi.container.servlet.ServletContainer;
+
+@Component(immediate = true, metatype = true)
+public class ServletRegisterer {
+
+ private static Logger logger = LoggerFactory.getLogger(ServletRegisterer.class.getName());
+
+ @Property(value = "/ontologymanager/store")
+ private static final String ALIAS_PROP = "org.apache.stanbol.ontologymanager.store.rest.alias";
+
+ @Property(value = "/ontologymanager/store/static")
+ public static final String STATIC_RESOURCES_URL_ROOT_PROPERTY = "eu.iksproject.fise.jersey.static.url";
+
+ @Property(value = "/META-INF/static")
+ public static final String STATIC_RESOURCES_CLASSPATH_PROPERTY = "eu.iksproject.fise.jersey.static.classpath";
+
+ @Property(value = "/META-INF/templates")
+ public static final String FREEMARKER_TEMPLATE_CLASSPATH_PROPERTY = "eu.iksproject.fise.jersey.templates.classpath";
+
+ private String alias;
+
+ @Reference
+ private PersistenceStore persistenceStore;
+
+ @Reference
+ private HttpService httpService;
+
+ protected ServletContext servletContext;
+
+ public ServletRegisterer() {}
+
+ @Activate
+ public void activate(ComponentContext cc) {
+
+ this.alias = (String) cc.getProperties().get(ALIAS_PROP);
+ String staticUrlRoot = (String) cc.getProperties().get(STATIC_RESOURCES_URL_ROOT_PROPERTY);
+ String staticClasspath = (String) cc.getProperties().get(STATIC_RESOURCES_CLASSPATH_PROPERTY);
+ String freemakerTemplates = (String) cc.getProperties().get(FREEMARKER_TEMPLATE_CLASSPATH_PROPERTY);
+ ServletContainer container = new ServletContainer();
+ ClassLoader ctc = Thread.currentThread().getContextClassLoader();
+ Thread.currentThread().setContextClassLoader(ServletRegisterer.class.getClassLoader());
+ try {
+ httpService.registerServlet(alias, container, getInitParams(), null);
+ httpService.registerResources(staticUrlRoot, staticClasspath, null);
+ } catch (ServletException e) {
+ throw new RuntimeException("Servlet Registration Failed", e);
+ } catch (NamespaceException e) {
+ throw new RuntimeException("Namespace exception", e);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ } finally {
+ Thread.currentThread().setContextClassLoader(ctc);
+ }
+ servletContext = container.getServletContext();
+ servletContext.setAttribute(PersistenceStore.class.getName(), persistenceStore);
+ servletContext.setAttribute(STATIC_RESOURCES_URL_ROOT_PROPERTY, staticUrlRoot);
+ servletContext.setAttribute(FreemarkerViewProcessor.FREEMARKER_TEMPLATE_PATH_INIT_PARAM,
+ freemakerTemplates);
+ logger.info("Registered resources");
+
+ }
+
+ @Deactivate
+ public void deactive() {
+ httpService.unregister(alias);
+ servletContext = null;
+ }
+
+ public Dictionary<String,String> getInitParams() {
+ Dictionary<String,String> initParams = new Hashtable<String,String>();
+ initParams.put("javax.ws.rs.Application", JerseyApplication.class.getName());
+ initParams.put("com.sun.jersey.config.feature.ImplicitViewables", "true");
+ initParams.put("com.sun.jersey.spi.container.ContainerRequestFilters",
+ "com.sun.jersey.api.container.filter.PostReplaceFilter");
+
+ return initParams;
+ }
+
+ public void bindPersistenceStore(PersistenceStore persistenceStore) {
+ this.persistenceStore = persistenceStore;
+ if (servletContext != null) {
+ servletContext.setAttribute(PersistenceStore.class.getName(), persistenceStore);
+ }
+ }
+
+ public void unbindPersistenceStore(PersistenceStore persistenceStore) {
+ this.persistenceStore = null;
+ if (servletContext != null) {
+ servletContext.setAttribute(PersistenceStore.class.getName(), null);
+ }
+ }
+
+ public void bindHttpService(HttpService httpService) {
+ this.httpService = httpService;
+ }
+
+ public void unbindHttpService(HttpService httpService) {
+ this.httpService = null;
+ }
+}
Propchange: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/ServletRegisterer.java
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/Ontologies.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/Ontologies.java?rev=1086954&view=auto
==============================================================================
--- incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/Ontologies.java (added)
+++ incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/Ontologies.java Wed Mar 30 13:43:53 2011
@@ -0,0 +1,151 @@
+package org.apache.stanbol.ontologymanager.store.rest.resources;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.ServletContext;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.stanbol.ontologymanager.store.api.LockManager;
+import org.apache.stanbol.ontologymanager.store.api.PersistenceStore;
+import org.apache.stanbol.ontologymanager.store.api.ResourceManager;
+import org.apache.stanbol.ontologymanager.store.model.AdministeredOntologies;
+import org.apache.stanbol.ontologymanager.store.model.OntologyMetaInformation;
+import org.apache.stanbol.ontologymanager.store.rest.LockManagerImp;
+import org.apache.stanbol.ontologymanager.store.rest.ResourceManagerImp;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.sun.jersey.api.view.ImplicitProduces;
+import com.sun.jersey.api.view.Viewable;
+
+//The Java class will be hosted at the URI path "/ontologies"
+//@Component
+//@Service(value = Object.class)
+//@Property(name = "javax.ws.rs", boolValue = true)
+@Path("/ontologies")
+@ImplicitProduces(MediaType.TEXT_HTML + ";qs=2.0")
+public class Ontologies {
+ private static final Logger logger = LoggerFactory.getLogger(Ontologies.class);
+
+ private static final String VIEWABLE_PATH = "/org/apache/stanbol/ontologymanager/store/rest/resources/ontologies";
+
+ private PersistenceStore persistenceStore;
+
+ public Ontologies(@Context ServletContext context) {
+ this.persistenceStore = (PersistenceStore) context.getAttribute(PersistenceStore.class.getName());
+ }
+
+ @GET
+ @Produces(MediaType.APPLICATION_XML)
+ public Response getClichedMessage() {
+ LockManager lockManager = LockManagerImp.getInstance();
+ lockManager.obtainReadLockFor(LockManagerImp.GLOBAL_SPACE);
+ Response response = null;
+ try {
+ AdministeredOntologies administeredOntologies = persistenceStore.retrieveAdministeredOntologies();
+ response = Response.ok(administeredOntologies, MediaType.APPLICATION_XML_TYPE).build();
+ } catch (Exception e) {
+ throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
+ } finally {
+ lockManager.releaseReadLockFor(LockManagerImp.GLOBAL_SPACE);
+ }
+ return response;
+ }
+
+ // The Java method will process HTTP POST requests
+ @POST
+ // The Java method will accept content identified by the MIME Media
+ // type "application/x-www-form-urlencoded"
+ @Consumes("application/x-www-form-urlencoded")
+ @Produces(MediaType.APPLICATION_XML)
+ public Response saveOntology(@FormParam("ontologyURI") String ontologyURI,
+ @FormParam("ontologyContent") String ontologyContent) {
+ Response response = null;
+ LockManager lockManager = LockManagerImp.getInstance();
+ lockManager.obtainReadLockFor(LockManagerImp.GLOBAL_SPACE);
+ lockManager.obtainWriteLockFor(ontologyURI);
+ try {
+ OntologyMetaInformation ontologyMetaInformation = persistenceStore.saveOntology(ontologyContent,
+ ontologyURI, "UTF-8");
+ response = Response.ok(ontologyMetaInformation, MediaType.APPLICATION_XML_TYPE).build();
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
+ } finally {
+ lockManager.releaseReadLockFor(LockManagerImp.GLOBAL_SPACE);
+ lockManager.releaseWriteLockFor(ontologyURI);
+ }
+ return response;
+ }
+
+ // The Java method will process HTTP DELETE requests
+ @DELETE
+ public void delete() {
+ LockManager lockManager = LockManagerImp.getInstance();
+ lockManager.obtainWriteLockFor(LockManagerImp.GLOBAL_SPACE);
+ try {
+
+ persistenceStore.clearPersistenceStore();
+ ResourceManager resourceManager = ResourceManagerImp.getInstance();
+ resourceManager.clearResourceManager();
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
+ } finally {
+ lockManager.releaseWriteLockFor(LockManagerImp.GLOBAL_SPACE);
+ }
+ }
+
+ // Methods for HTML View
+
+ @GET
+ @Produces(MediaType.TEXT_HTML)
+ public Viewable getViewable(@Context UriInfo uriInfo) {
+ return new Viewable(VIEWABLE_PATH, this);
+ }
+
+ @POST
+ @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+ @Produces(MediaType.TEXT_HTML)
+ public Response createAndRedirect(@FormParam("ontologyURI") String ontologyURI,
+ @FormParam("ontologyContent") String ontologyContent) {
+ Response response = this.saveOntology(ontologyURI, ontologyContent);
+ OntologyMetaInformation ont = ((OntologyMetaInformation) response.getEntity());
+ try {
+ return Response.seeOther(URI.create(ont.getHref())).type(MediaType.TEXT_HTML).header("Accept", MediaType.TEXT_HTML).build();
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ throw new WebApplicationException(Status.INTERNAL_SERVER_ERROR);
+ }
+
+ }
+
+ public List<OntologyMetaInformation> getOntologies() {
+ LockManager lockManager = LockManagerImp.getInstance();
+ lockManager.obtainReadLockFor(LockManagerImp.GLOBAL_SPACE);
+ List<OntologyMetaInformation> onts = new ArrayList<OntologyMetaInformation>();
+ try {
+ onts = persistenceStore.retrieveAdministeredOntologies().getOntologyMetaInformation();
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ throw new RuntimeException(e);
+ } finally {
+ lockManager.releaseReadLockFor(LockManagerImp.GLOBAL_SPACE);
+ }
+ return onts;
+ }
+}
Propchange: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/Ontologies.java
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyClasses.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyClasses.java?rev=1086954&view=auto
==============================================================================
--- incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyClasses.java (added)
+++ incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyClasses.java Wed Mar 30 13:43:53 2011
@@ -0,0 +1,138 @@
+package org.apache.stanbol.ontologymanager.store.rest.resources;
+
+import java.net.URI;
+
+import javax.servlet.ServletContext;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.apache.stanbol.ontologymanager.store.api.LockManager;
+import org.apache.stanbol.ontologymanager.store.api.PersistenceStore;
+import org.apache.stanbol.ontologymanager.store.api.ResourceManager;
+import org.apache.stanbol.ontologymanager.store.model.ClassMetaInformation;
+import org.apache.stanbol.ontologymanager.store.model.ClassesForOntology;
+import org.apache.stanbol.ontologymanager.store.rest.LockManagerImp;
+import org.apache.stanbol.ontologymanager.store.rest.ResourceManagerImp;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.sun.jersey.api.view.ImplicitProduces;
+import com.sun.jersey.api.view.Viewable;
+
+//@Component
+//@Service(value = Object.class)
+//@Property(name = "javax.ws.rs", boolValue = true)
+@Path("/ontologies/{ontologyPath:.+}/classes/")
+@ImplicitProduces(MediaType.TEXT_HTML + ";qs=2.0")
+public class OntologyClasses {
+ private static final Logger logger = LoggerFactory.getLogger(OntologyClasses.class);
+
+ private static final String VIEWABLE_PATH = "/org/apache/stanbol/ontologymanager/store/rest/resources/ontologyClasses";
+
+ private PersistenceStore persistenceStore;
+
+ // HTML View Variable
+ private ClassesForOntology metadata;
+
+ public OntologyClasses(@Context ServletContext context) {
+ this.persistenceStore = (PersistenceStore) context.getAttribute(PersistenceStore.class.getName());
+ }
+
+ // The Java method will process HTTP GET requests
+ @GET
+ // The Java method will produce content identified by the MIME Media
+ // type "text/plain"
+ @Produces("application/xml")
+ public Response retrieveOntologyClasses(@PathParam("ontologyPath") String ontologyPath) {
+ Response response = null;
+ LockManager lockManager = LockManagerImp.getInstance();
+ lockManager.obtainReadLockFor(ontologyPath);
+ try {
+
+ ResourceManager resourceManager = ResourceManagerImp.getInstance();
+ String ontologyURI = resourceManager.getOntologyURIForPath(ontologyPath);
+ if (ontologyURI == null) {
+ throw new WebApplicationException(Response.Status.NOT_FOUND);
+ }
+ try {
+ ClassesForOntology classesForOntology = persistenceStore
+ .retrieveClassesOfOntology(ontologyURI);
+ response = Response.ok(classesForOntology, MediaType.APPLICATION_XML_TYPE).build();
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
+ }
+ } finally {
+ lockManager.releaseReadLockFor(ontologyPath);
+ }
+ return response;
+ }
+
+ // The Java method will process HTTP POST requests
+ @POST
+ // The Java method will accept content identified by the MIME Media
+ // type "application/x-www-form-urlencoded"
+ @Produces(MediaType.APPLICATION_XML)
+ @Consumes("application/x-www-form-urlencoded")
+ public Response generateClass(@PathParam("ontologyPath") String ontologyPath,
+ @FormParam("classURI") String classURI) {
+ Response response = null;
+ LockManager lockManager = LockManagerImp.getInstance();
+ lockManager.obtainWriteLockFor(ontologyPath);
+ try {
+ ResourceManager resourceManager = ResourceManagerImp.getInstance();
+ String ontologyURI = resourceManager.getOntologyURIForPath(ontologyPath);
+ if (ontologyURI == null) {
+ throw new WebApplicationException(Response.Status.NOT_FOUND);
+ }
+ try {
+ ClassMetaInformation classMetaInformation = persistenceStore.generateClassForOntology(
+ ontologyURI, classURI);
+ response = Response.ok(classMetaInformation, MediaType.APPLICATION_XML_TYPE).build();
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
+ }
+ } finally {
+ lockManager.releaseWriteLockFor(ontologyPath);
+ }
+ return response;
+ }
+
+ // HTML View Methods
+ @GET
+ @Produces(MediaType.TEXT_HTML)
+ public Viewable getViewable(@PathParam("ontologyPath") String ontologyPath) {
+ this.metadata = ((ClassesForOntology) this.retrieveOntologyClasses(ontologyPath).getEntity());
+ return new Viewable(VIEWABLE_PATH, this);
+ }
+
+ @POST
+ @Produces(MediaType.TEXT_HTML)
+ @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+ public Response createAndRedirect(@PathParam("ontologyPath") String ontologyPath,
+ @FormParam("classURI") String classURI) {
+ Response response = this.generateClass(ontologyPath, classURI);
+ ClassMetaInformation cmi = (ClassMetaInformation) response.getEntity();
+ try {
+ return Response.seeOther(URI.create(cmi.getHref())).build();
+ } catch (Exception e) {
+ throw new WebApplicationException(Status.INTERNAL_SERVER_ERROR);
+ }
+ }
+
+ public ClassesForOntology getMetadata() {
+ return metadata;
+ }
+
+}
Propchange: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyClasses.java
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyDatatypeProperties.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyDatatypeProperties.java?rev=1086954&view=auto
==============================================================================
--- incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyDatatypeProperties.java (added)
+++ incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyDatatypeProperties.java Wed Mar 30 13:43:53 2011
@@ -0,0 +1,140 @@
+package org.apache.stanbol.ontologymanager.store.rest.resources;
+
+import java.net.URI;
+
+import javax.servlet.ServletContext;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.apache.stanbol.ontologymanager.store.api.LockManager;
+import org.apache.stanbol.ontologymanager.store.api.PersistenceStore;
+import org.apache.stanbol.ontologymanager.store.api.ResourceManager;
+import org.apache.stanbol.ontologymanager.store.model.DatatypePropertiesForOntology;
+import org.apache.stanbol.ontologymanager.store.model.PropertyMetaInformation;
+import org.apache.stanbol.ontologymanager.store.rest.LockManagerImp;
+import org.apache.stanbol.ontologymanager.store.rest.ResourceManagerImp;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.sun.jersey.api.view.ImplicitProduces;
+import com.sun.jersey.api.view.Viewable;
+
+//@Component
+//@Service(value = Object.class)
+//@Property(name = "javax.ws.rs", boolValue = true)
+@Path("/ontologies/{ontologyPath:.+}/datatypeProperties")
+@ImplicitProduces(MediaType.TEXT_HTML + ";qs=2.0")
+public class OntologyDatatypeProperties {
+ private static final Logger logger = LoggerFactory.getLogger(OntologyDatatypeProperties.class);
+ private static final String VIEWABLE_PATH = "/org/apache/stanbol/ontologymanager/store/rest/resources/ontologyDatatypeProperties";
+
+ private PersistenceStore persistenceStore;
+
+ // HTML View Variables
+ private DatatypePropertiesForOntology metadata;
+
+ public OntologyDatatypeProperties(@Context ServletContext context) {
+ this.persistenceStore = (PersistenceStore) context.getAttribute(PersistenceStore.class.getName());
+ }
+
+ // The Java method will process HTTP GET requests
+ @GET
+ // The Java method will produce content identified by the MIME Media
+ // type "text/plain"
+ @Produces("application/xml")
+ public Response retrieveOntologyDatatypeProperties(@PathParam("ontologyPath") String ontologyPath) {
+ Response response = null;
+ LockManager lockManager = LockManagerImp.getInstance();
+ lockManager.obtainReadLockFor(ontologyPath);
+ try {
+ ResourceManager resourceManager = ResourceManagerImp.getInstance();
+ String ontologyURI = resourceManager.getOntologyURIForPath(ontologyPath);
+ if (ontologyURI == null) {
+ throw new WebApplicationException(Response.Status.NOT_FOUND);
+ }
+ try {
+ DatatypePropertiesForOntology datatypePropertiesForOntology = persistenceStore
+ .retrieveDatatypePropertiesOfOntology(ontologyURI);
+ response = Response.ok(datatypePropertiesForOntology, MediaType.APPLICATION_XML_TYPE).build();
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
+ }
+ } finally {
+ lockManager.releaseReadLockFor(ontologyPath);
+ }
+ return response;
+ }
+
+ // The Java method will process HTTP POST requests
+ @POST
+ // The Java method will accept content identified by the MIME Media
+ // type "application/x-www-form-urlencoded"
+ @Produces(MediaType.APPLICATION_XML)
+ @Consumes("application/x-www-form-urlencoded")
+ public Response generateDatatypeProperty(@PathParam("ontologyPath") String ontologyPath,
+ @FormParam("datatypePropertyURI") String datatypePropertyURI) {
+ Response response = null;
+ LockManager lockManager = LockManagerImp.getInstance();
+ lockManager.obtainWriteLockFor(ontologyPath);
+ try {
+
+ ResourceManager resourceManager = ResourceManagerImp.getInstance();
+ String ontologyURI = resourceManager.getOntologyURIForPath(ontologyPath);
+ if (ontologyURI == null) {
+ throw new WebApplicationException(Response.Status.NOT_FOUND);
+ }
+ try {
+ PropertyMetaInformation datatypePropertyMetaInformation = persistenceStore
+ .generateDatatypePropertyForOntology(ontologyURI, datatypePropertyURI);
+ response = Response.ok(datatypePropertyMetaInformation, MediaType.APPLICATION_XML_TYPE)
+ .build();
+
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
+ }
+ } finally {
+ lockManager.releaseWriteLockFor(ontologyPath);
+ }
+ return response;
+ }
+
+ // HTML View Methods
+ public DatatypePropertiesForOntology getMetadata() {
+ return metadata;
+ }
+
+ @GET
+ @Produces(MediaType.TEXT_HTML)
+ public Viewable getViewable(@PathParam("ontologyPath") String ontologyPath) {
+ Response response = retrieveOntologyDatatypeProperties(ontologyPath);
+ metadata = (DatatypePropertiesForOntology) response.getEntity();
+ return new Viewable(VIEWABLE_PATH, this);
+ }
+
+ @POST
+ @Produces(MediaType.TEXT_HTML)
+ @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+ public Response createAndRedirect(@PathParam("ontologyPath") String ontologyPath,
+ @FormParam("datatypePropertyURI") String datatypePropertyURI) {
+ Response response = this.generateDatatypeProperty(ontologyPath, datatypePropertyURI);
+ PropertyMetaInformation pmi = (PropertyMetaInformation) response.getEntity();
+ try {
+ return Response.seeOther(URI.create(pmi.getHref())).build();
+ } catch (Exception e) {
+ throw new WebApplicationException(Status.INTERNAL_SERVER_ERROR);
+ }
+
+ }
+}
Propchange: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyDatatypeProperties.java
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyDump.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyDump.java?rev=1086954&view=auto
==============================================================================
--- incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyDump.java (added)
+++ incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyDump.java Wed Mar 30 13:43:53 2011
@@ -0,0 +1,50 @@
+package org.apache.stanbol.ontologymanager.store.rest.resources;
+
+import javax.servlet.ServletContext;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.apache.stanbol.ontologymanager.store.api.PersistenceStore;
+import org.apache.stanbol.ontologymanager.store.api.ResourceManager;
+import org.apache.stanbol.ontologymanager.store.rest.ResourceManagerImp;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+//@Component
+//@Service(value = Object.class)
+//@Property(name = "javax.ws.rs", boolValue = true)
+@Path("/ontologies/{ontologyPath:.+}/dump")
+public class OntologyDump {
+ private static final Logger logger = LoggerFactory.getLogger(OntologyDump.class);
+ private PersistenceStore persistenceStore;
+
+ public OntologyDump(@Context ServletContext context) {
+ this.persistenceStore = (PersistenceStore) context.getAttribute(PersistenceStore.class.getName());
+ }
+
+ @GET
+ @Produces("application/xml")
+ public String dumpOntology(@PathParam("ontologyPath") String ontologyPath,
+ @QueryParam(value = "infer") boolean infer) {
+ String result = null;
+ try {
+ ResourceManager resourceManager = ResourceManagerImp.getInstance();
+ String ontologyURI = resourceManager.getOntologyURIForPath(ontologyPath);
+ result = persistenceStore.retrieveOntology(ontologyURI, "RDF/XML", infer);
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
+ }
+ if (result == null) {
+ throw new WebApplicationException(Status.NOT_FOUND);
+ }
+ return result;
+ }
+}
Propchange: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyDump.java
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyIndividuals.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyIndividuals.java?rev=1086954&view=auto
==============================================================================
--- incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyIndividuals.java (added)
+++ incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyIndividuals.java Wed Mar 30 13:43:53 2011
@@ -0,0 +1,140 @@
+package org.apache.stanbol.ontologymanager.store.rest.resources;
+
+import java.net.URI;
+
+import javax.servlet.ServletContext;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.apache.stanbol.ontologymanager.store.api.LockManager;
+import org.apache.stanbol.ontologymanager.store.api.PersistenceStore;
+import org.apache.stanbol.ontologymanager.store.api.ResourceManager;
+import org.apache.stanbol.ontologymanager.store.model.IndividualMetaInformation;
+import org.apache.stanbol.ontologymanager.store.model.IndividualsForOntology;
+import org.apache.stanbol.ontologymanager.store.rest.LockManagerImp;
+import org.apache.stanbol.ontologymanager.store.rest.ResourceManagerImp;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.sun.jersey.api.view.ImplicitProduces;
+import com.sun.jersey.api.view.Viewable;
+
+//@Component
+//@Service(value = Object.class)
+//@Property(name = "javax.ws.rs", boolValue = true)
+@Path("/ontologies/{ontologyPath:.+}/individuals")
+@ImplicitProduces(MediaType.TEXT_HTML + ";qs=2.0")
+public class OntologyIndividuals {
+ private static final Logger logger = LoggerFactory.getLogger(OntologyIndividuals.class);
+ public static final String VIEWABLE_PATH = "/org/apache/stanbol/ontologymanager/store/rest/resources/ontologyIndividuals";
+
+ private PersistenceStore persistenceStore;
+
+ // HTML Variable
+ private IndividualsForOntology metadata;
+
+ public OntologyIndividuals(@Context ServletContext context) {
+ this.persistenceStore = (PersistenceStore) context.getAttribute(PersistenceStore.class.getName());
+ }
+
+ // The Java method will process HTTP GET requests
+ @GET
+ // The Java method will produce content identified by the MIME Media
+ // type "text/plain"
+ @Produces("application/xml")
+ public Response retrieveOntologyIndividuals(@PathParam("ontologyPath") String ontologyPath) {
+ Response response = null;
+ LockManager lockManager = LockManagerImp.getInstance();
+ lockManager.obtainReadLockFor(ontologyPath);
+ try {
+
+ ResourceManager resourceManager = ResourceManagerImp.getInstance();
+ String ontologyURI = resourceManager.getOntologyURIForPath(ontologyPath);
+ if (ontologyURI == null) {
+ throw new WebApplicationException(Response.Status.NOT_FOUND);
+ }
+ try {
+ IndividualsForOntology individualsForOntology = persistenceStore
+ .retrieveIndividualsOfOntology(ontologyURI);
+ response = Response.ok(individualsForOntology, MediaType.APPLICATION_XML_TYPE).build();
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
+ }
+ } finally {
+ lockManager.releaseReadLockFor(ontologyPath);
+ }
+ return response;
+ }
+
+ // The Java method will process HTTP POST requests
+ @POST
+ // The Java method will accept content identified by the MIME Media
+ // type "application/x-www-form-urlencoded"
+ @Produces(MediaType.APPLICATION_XML)
+ @Consumes("application/x-www-form-urlencoded")
+ public Response generateIndividual(@PathParam("ontologyPath") String ontologyPath,
+ @FormParam("classURI") String classURI,
+ @FormParam("individualURI") String individualURI) {
+ Response response = null;
+ LockManager lockManager = LockManagerImp.getInstance();
+ lockManager.obtainWriteLockFor(ontologyPath);
+ try {
+
+ ResourceManager resourceManager = ResourceManagerImp.getInstance();
+ String ontologyURI = resourceManager.getOntologyURIForPath(ontologyPath);
+ if (ontologyURI == null) {
+ throw new WebApplicationException(Response.Status.NOT_FOUND);
+ }
+ try {
+ IndividualMetaInformation individualMetaInformation = persistenceStore
+ .generateIndividualForOntology(ontologyURI, classURI, individualURI);
+ response = Response.ok(individualMetaInformation, MediaType.APPLICATION_XML_TYPE).build();
+ } catch (Exception e) {
+ logger.error("Error ", e);
+ throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
+ }
+ } finally {
+ lockManager.releaseWriteLockFor(ontologyPath);
+ }
+ return response;
+ }
+
+ // HTML View Methods
+ public IndividualsForOntology getMetadata() {
+ return metadata;
+ }
+
+ @GET
+ @Produces(MediaType.TEXT_HTML)
+ public Viewable getViewable(@PathParam("ontologyPath") String ontologyPath) {
+ Response response = retrieveOntologyIndividuals(ontologyPath);
+ metadata = (IndividualsForOntology) response.getEntity();
+ return new Viewable(VIEWABLE_PATH, this);
+ }
+
+ @POST
+ @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
+ @Produces(MediaType.TEXT_HTML)
+ public Response createAndRedirect(@PathParam("ontologyPath") String ontologyPath,
+ @FormParam("classURI") String classURI,
+ @FormParam("individualURI") String individualURI) {
+ Response response = generateIndividual(ontologyPath, classURI, individualURI);
+ IndividualMetaInformation imi = (IndividualMetaInformation) response.getEntity();
+ try {
+ return Response.seeOther(URI.create(imi.getHref())).build();
+ } catch (Exception e) {
+ throw new WebApplicationException(Status.INTERNAL_SERVER_ERROR);
+ }
+ }
+}
Propchange: incubator/stanbol/trunk/kres/ontologymanager/store/rest/src/main/java/org/apache/stanbol/ontologymanager/store/rest/resources/OntologyIndividuals.java
------------------------------------------------------------------------------
svn:executable = *