You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by al...@apache.org on 2012/07/02 18:23:14 UTC
svn commit: r1356320 [1/2] - in /incubator/stanbol/trunk/ontologymanager:
ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/
ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/
ontonet/src/main/java/org/apache/st...
Author: alexdma
Date: Mon Jul 2 16:23:12 2012
New Revision: 1356320
URL: http://svn.apache.org/viewvc?rev=1356320&view=rev
Log:
* First implementation of STANBOL-571 : scopes and session information (which were registered, what ontologies were managed) is now stored in a meta graph and restored upon OntoNet bootstrap. Works for most base scenarios and should be refined from now on.
* Note that sessions are restored in an INACTIVE state, as an initial policy for STANBOL-247 .
* More headers added for accepted methods in OPTIONS preflight requests for Ontology Manager Web (STANBOL-105)
Added:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/OntologyNetworkConfiguration.java
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/Vocabulary.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphSource.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyProvider.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologyScope.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologySpace.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/ScopeEventListener.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/session/Session.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ONManagerImpl.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/ScopeRegistryImpl.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/renderers/ScopeSetRenderer.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionManagerImpl.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/TimestampedSessionIDGenerator.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/TestOntologyNetworkPersistence.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/session/TestSessions.java
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionResource.java
Added: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/OntologyNetworkConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/OntologyNetworkConfiguration.java?rev=1356320&view=auto
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/OntologyNetworkConfiguration.java (added)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/OntologyNetworkConfiguration.java Mon Jul 2 16:23:12 2012
@@ -0,0 +1,61 @@
+/*
+ * 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.
+ */
+package org.apache.stanbol.ontologymanager.ontonet.api;
+
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * Contains ownership and collector information on all ontology networks currently configured.
+ *
+ * @author alexdma
+ *
+ */
+public class OntologyNetworkConfiguration {
+
+ private Map<String,Collection<String>> coreOntologiesForScopes, customOntologiesForScopes,
+ ontologiesForSessions;
+
+ public OntologyNetworkConfiguration(Map<String,Collection<String>> coreOntologiesForScopes,
+ Map<String,Collection<String>> customOntologiesForScopes,
+ Map<String,Collection<String>> ontologiesForSessions) {
+ this.coreOntologiesForScopes = coreOntologiesForScopes;
+ this.customOntologiesForScopes = customOntologiesForScopes;
+ this.ontologiesForSessions = ontologiesForSessions;
+ }
+
+ public Collection<String> getCoreOntologyKeysForScope(String scopeId) {
+ return coreOntologiesForScopes.get(scopeId);
+ }
+
+ public Collection<String> getCustomOntologyKeysForScope(String scopeId) {
+ return customOntologiesForScopes.get(scopeId);
+ }
+
+ public Collection<String> getOntologyKeysForSession(String sessionId) {
+ return ontologiesForSessions.get(sessionId);
+ }
+
+ public Collection<String> getScopeIDs() {
+ return coreOntologiesForScopes.keySet();
+ }
+
+ public Collection<String> getSessionIDs() {
+ return ontologiesForSessions.keySet();
+ }
+
+}
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/Vocabulary.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/Vocabulary.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/Vocabulary.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/Vocabulary.java Mon Jul 2 16:23:12 2012
@@ -16,32 +16,56 @@
*/
package org.apache.stanbol.ontologymanager.ontonet.api;
+import org.apache.clerezza.rdf.core.UriRef;
+
public class Vocabulary {
+ /**
+ * The default namespace for the Stanbol OntoNet metadata vocabulary
+ */
public static final String _NS_ONTONET = "http://stanbol.apache.org/ontology/meta/ontonet#";
- public static final String IS_MANAGED_BY = _NS_ONTONET + "isManagedBy";
-
- public static final String IS_MANAGED_BY_CORE = _NS_ONTONET + "isManagedByCore";
-
- public static final String IS_MANAGED_BY_CUSTOM = _NS_ONTONET + "isManagedByCustom";
-
- public static final String MANAGES = _NS_ONTONET + "manages";
-
- public static final String MANAGES_IN_CORE = _NS_ONTONET + "managesInCore";
-
- public static final String MANAGES_IN_CUSTOM = _NS_ONTONET + "managesInCustom";
-
- public static final String HAS_STATUS = _NS_ONTONET + "hasStatus";
-
- public static final String STATUS = _NS_ONTONET + "Status";
-
- public static final String STATUS_ACTIVE = _NS_ONTONET + "Status.ACTIVE";
-
- public static final String STATUS_INACTIVE = _NS_ONTONET + "Status.INACTIVE";
-
- public static final String SCOPE = _NS_ONTONET + "Scope";
+ /**
+ * This namespace is used for representing Stanbol resources internally. It should applied to all portable
+ * resources that might be moved from one host to another, e.g. scopes and sessions.<br/>
+ * <br>
+ * This namespace MUST NOT be used for identifying resources in the outside world, e.g. RESTful services:
+ * it MUST be converted to the public namespace before exporting.
+ */
+ public static final String _NS_STANBOL_INTERNAL = "http://stanbol.apache.org/ontology/.internal/";
+
+ public static final UriRef HAS_SPACE_CORE = new UriRef(_NS_ONTONET + "hasCoreSpace");
+
+ public static final UriRef HAS_SPACE_CUSTOM = new UriRef(_NS_ONTONET + "hasCustomSpace");
+
+ public static final UriRef HAS_STATUS = new UriRef(_NS_ONTONET + "hasStatus");
+
+ public static final UriRef IS_MANAGED_BY = new UriRef(_NS_ONTONET + "isManagedBy");
+
+ public static final UriRef IS_MANAGED_BY_CORE = new UriRef(_NS_ONTONET + "isManagedByCore");
+
+ public static final UriRef IS_MANAGED_BY_CUSTOM = new UriRef(_NS_ONTONET + "isManagedByCustom");
+
+ public static final UriRef IS_SPACE_CORE_OF = new UriRef(_NS_ONTONET + "isCoreSpaceOf");
+
+ public static final UriRef IS_SPACE_CUSTOM_OF = new UriRef(_NS_ONTONET + "isCustomSpaceOf");
+
+ public static final UriRef MANAGES = new UriRef(_NS_ONTONET + "manages");
+
+ public static final UriRef MANAGES_IN_CORE = new UriRef(_NS_ONTONET + "managesInCore");
+
+ public static final UriRef MANAGES_IN_CUSTOM = new UriRef(_NS_ONTONET + "managesInCustom");
+
+ public static final UriRef SCOPE = new UriRef(_NS_ONTONET + "Scope");
+
+ public static final UriRef SESSION = new UriRef(_NS_ONTONET + "Session");
+
+ public static final UriRef SPACE = new UriRef(_NS_ONTONET + "Space");
+
+ public static final UriRef STATUS = new UriRef(_NS_ONTONET + "Status");
+
+ public static final UriRef STATUS_ACTIVE = new UriRef(_NS_ONTONET + "Status.ACTIVE");
- public static final String SESSION = _NS_ONTONET + "Session";
+ public static final UriRef STATUS_INACTIVE = new UriRef(_NS_ONTONET + "Status.INACTIVE");
}
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphSource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphSource.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphSource.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphSource.java Mon Jul 2 16:23:12 2012
@@ -23,8 +23,8 @@ import org.apache.clerezza.rdf.core.UriR
import org.apache.clerezza.rdf.core.access.TcManager;
/**
- * An {@link OntologyInputSource} that gets ontologies from either a Clerezza {@link Graph} (or {@link MGraph}
- * ), or its identifier and an optionally supplied triple collection manager.
+ * An {@link OntologyInputSource} that gets ontologies from either a stored Clerezza {@link Graph} (or
+ * {@link MGraph} ), or its identifier and an optionally supplied triple collection manager.
*
* @author alexdma
*
@@ -39,6 +39,10 @@ public class GraphSource extends Abstrac
bindPhysicalIri(null);
}
+ public GraphSource(String graphId) {
+ this(new UriRef(graphId));
+ }
+
public GraphSource(UriRef graphId) {
this(graphId, TcManager.getInstance());
}
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyProvider.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyProvider.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyProvider.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyProvider.java Mon Jul 2 16:23:12 2012
@@ -25,6 +25,7 @@ import org.apache.clerezza.rdf.core.MGra
import org.apache.clerezza.rdf.core.TripleCollection;
import org.apache.clerezza.rdf.core.access.TcProvider;
import org.apache.clerezza.rdf.core.serializedform.UnsupportedFormatException;
+import org.apache.stanbol.ontologymanager.ontonet.api.OntologyNetworkConfiguration;
import org.apache.stanbol.ontologymanager.ontonet.api.collector.ImportManagementPolicy;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLOntologyID;
@@ -108,6 +109,8 @@ public interface OntologyProvider<S> {
*/
<O extends TripleCollection> O getMetaGraph(Class<O> returnType);
+ public OntologyNetworkConfiguration getOntologyNetworkConfiguration();
+
/**
* Will return the keys of all the ontologies whose ontologyIRI is the one provided. These include any
* ontologies with that ontologyIRI and a versionIRI, and one ontology with no version IRI (if it exists,
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologyScope.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologyScope.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologyScope.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologyScope.java Mon Jul 2 16:23:12 2012
@@ -41,6 +41,8 @@ import org.apache.stanbol.ontologymanage
*/
public interface OntologyScope extends NamedResource, Lockable, OntologyCollectorListenable, OWLExportable {
+ static final String shortName = "scope";
+
/**
* Returns the core ontology space for this ontology scope. The core space should never be null for any
* scope.
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologySpace.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologySpace.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologySpace.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/OntologySpace.java Mon Jul 2 16:23:12 2012
@@ -29,6 +29,8 @@ import org.apache.stanbol.ontologymanage
*/
public interface OntologySpace extends OntologyCollector, OWLExportable, Lockable {
+ static final String shortName = "space";
+
/**
* The possible types of ontology spaces managed by OntoNet.
*/
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/ScopeEventListener.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/ScopeEventListener.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/ScopeEventListener.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/scope/ScopeEventListener.java Mon Jul 2 16:23:12 2012
@@ -58,7 +58,7 @@ public interface ScopeEventListener {
* @param scope
* the deregistered ontology scope
*/
- void scopeDeregistered(OntologyScope scope);
+ void scopeUnregistered(OntologyScope scope);
/**
* Called <i>after</i> an ontology scope is added to the scope registry.
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/session/Session.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/session/Session.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/session/Session.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/session/Session.java Mon Jul 2 16:23:12 2012
@@ -31,6 +31,8 @@ import org.apache.stanbol.ontologymanage
*/
public interface Session extends OntologyCollector, OWLExportable, Lockable, SessionListenable {
+ static final String shortName = "session";
+
/**
* The states a session can be in: ACTIVE (for running sessions), HALTED (for inactive sessions that may
* later be activated, e.g. when a user logs in), ZOMBIE (inactive and bound for destruction, no longer
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ONManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ONManagerImpl.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ONManagerImpl.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ONManagerImpl.java Mon Jul 2 16:23:12 2012
@@ -23,15 +23,9 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Dictionary;
import java.util.Hashtable;
-import java.util.Iterator;
import java.util.List;
-import org.apache.clerezza.rdf.core.NonLiteral;
-import org.apache.clerezza.rdf.core.Triple;
-import org.apache.clerezza.rdf.core.TripleCollection;
-import org.apache.clerezza.rdf.core.UriRef;
import org.apache.clerezza.rdf.core.access.TcProvider;
-import org.apache.clerezza.rdf.ontologies.RDF;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -45,10 +39,11 @@ import org.apache.stanbol.commons.owl.OW
import org.apache.stanbol.commons.stanboltools.offline.OfflineMode;
import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
import org.apache.stanbol.ontologymanager.ontonet.api.OfflineConfiguration;
-import org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary;
+import org.apache.stanbol.ontologymanager.ontonet.api.OntologyNetworkConfiguration;
import org.apache.stanbol.ontologymanager.ontonet.api.collector.DuplicateIDException;
import org.apache.stanbol.ontologymanager.ontonet.api.collector.UnmodifiableOntologyCollectorException;
import org.apache.stanbol.ontologymanager.ontonet.api.io.BlankOntologySource;
+import org.apache.stanbol.ontologymanager.ontonet.api.io.GraphSource;
import org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyInputSource;
import org.apache.stanbol.ontologymanager.ontonet.api.io.RootOntologyIRISource;
import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyProvider;
@@ -311,7 +306,7 @@ public class ONManagerImpl extends Scope
// Create and populate the scopes from the config ontology.
bootstrapOntologyNetwork(oConf);
- } else {
+ } else { // No ontology supplied. Access the local graph
rebuildScopes();
}
@@ -424,6 +419,7 @@ public class ONManagerImpl extends Scope
public OntologyScope createOntologyScope(String scopeID, OntologyInputSource<?,?>... coreSources) throws DuplicateIDException {
if (this.containsScope(scopeID)) throw new DuplicateIDException(scopeID,
"Scope registry already contains ontology scope with ID " + scopeID);
+ // Scope constructor also creates core and custom spaces
OntologyScope scope = new OntologyScopeImpl(scopeID, IRI.create(getOntologyNetworkNamespace()
+ scopeRegistryId + "/"),
getOntologySpaceFactory(), coreSources);
@@ -438,18 +434,6 @@ public class ONManagerImpl extends Scope
return scope;
}
- @Override
- public synchronized void registerScope(OntologyScope scope) {
- if (scope == null) throw new IllegalArgumentException("scope cannot be null.");
- String id = scope.getID();
- if (this.containsScope(id)) {
- if (scope != getScope(id)) {
- log.warn("Overriding different scope with same ID {}", id);
- super.registerScope(scope);
- } else log.warn("Ignoring unnecessary call to already registered scope {}", id);
- } else super.registerScope(scope);
- }
-
/**
* Deactivation of the ONManagerImpl resets all its resources.
*/
@@ -545,6 +529,36 @@ public class ONManagerImpl extends Scope
return offlineMode != null;
}
+ private void rebuildScopes() {
+ OntologyNetworkConfiguration struct = ontologyProvider.getOntologyNetworkConfiguration();
+ for (String scopeId : struct.getScopeIDs()) {
+ Collection<String> coreOnts = struct.getCoreOntologyKeysForScope(scopeId);
+ OntologyInputSource<?,?>[] srcs = new OntologyInputSource<?,?>[coreOnts.size()];
+ int i = 0;
+ for (String coreOnt : coreOnts)
+ srcs[i++] = new GraphSource(coreOnt);
+ OntologyScope scope = new OntologyScopeImpl(scopeId, IRI.create(this
+ .getOntologyNetworkNamespace()), this.getOntologySpaceFactory(), srcs);
+ OntologySpace custom = scope.getCustomSpace();
+ // Register even if some ontologies were to fail to be restored afterwards.
+ scopeMap.put(scopeId, scope);
+ for (String key : struct.getCustomOntologyKeysForScope(scopeId))
+ custom.addOntology(new GraphSource(key));
+ }
+ }
+
+ @Override
+ public synchronized void registerScope(OntologyScope scope) {
+ if (scope == null) throw new IllegalArgumentException("scope cannot be null.");
+ String id = scope.getID();
+ if (this.containsScope(id)) {
+ if (scope != getScope(id)) {
+ log.warn("Overriding different scope with same ID {}", id);
+ super.registerScope(scope);
+ } else log.warn("Ignoring unnecessary call to already registered scope {}", id);
+ } else super.registerScope(scope);
+ }
+
@Override
public void removeScopeEventListener(ScopeEventListener listener) {
listeners.remove(listener);
@@ -561,30 +575,4 @@ public class ONManagerImpl extends Scope
this.ontonetNS = namespace;
}
- private void rebuildScopes() {
- TripleCollection meta = ontologyProvider.getMetaGraph(TripleCollection.class);
- for (Iterator<Triple> it = meta.filter(null, RDF.type, new UriRef(Vocabulary.SCOPE)); it.hasNext();) {
- NonLiteral sub = it.next().getSubject();
- if (sub instanceof UriRef) {
- String s = ((UriRef) sub).getUnicodeString(), prefix = getOntologyNetworkNamespace()
- + scopeRegistryId + "/";
- if (s.startsWith(prefix)) {
- String scopeId = s.substring(prefix.length());
- OntologyScope scope = new OntologyScopeImpl(scopeId, IRI.create(prefix),
- getOntologySpaceFactory());
-
- // retrieve the ontologies
- for (Iterator<Triple> it2 = meta.filter(sub, null, null); it2.hasNext();) {
- Triple t = it2.next();
- UriRef predicate = t.getPredicate();
- if (predicate.equals(new UriRef(Vocabulary.MANAGES_IN_CUSTOM))) {
- System.out.println(t.getObject());
- }
- }
-
- scopeMap.put(scopeId, scope);
- }
- }
- }
- }
}
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java Mon Jul 2 16:23:12 2012
@@ -16,12 +16,17 @@
*/
package org.apache.stanbol.ontologymanager.ontonet.impl.clerezza;
-import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.IS_MANAGED_BY_CORE;
-import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.IS_MANAGED_BY_CUSTOM;
-import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.MANAGES_IN_CORE;
-import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.MANAGES_IN_CUSTOM;
+import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.HAS_SPACE_CORE;
+import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.HAS_SPACE_CUSTOM;
+import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.IS_MANAGED_BY;
+import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.IS_SPACE_CORE_OF;
+import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.IS_SPACE_CUSTOM_OF;
+import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.MANAGES;
import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.SCOPE;
+import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.SESSION;
+import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.SPACE;
import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary._NS_ONTONET;
+import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary._NS_STANBOL_INTERNAL;
import java.io.IOException;
import java.io.InputStream;
@@ -30,10 +35,13 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Dictionary;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.Stack;
@@ -71,15 +79,18 @@ import org.apache.stanbol.commons.owl.ut
import org.apache.stanbol.commons.owl.util.URIUtils;
import org.apache.stanbol.commons.stanboltools.offline.OfflineMode;
import org.apache.stanbol.ontologymanager.ontonet.api.OfflineConfiguration;
+import org.apache.stanbol.ontologymanager.ontonet.api.OntologyNetworkConfiguration;
import org.apache.stanbol.ontologymanager.ontonet.api.collector.ImportManagementPolicy;
import org.apache.stanbol.ontologymanager.ontonet.api.collector.OntologyCollector;
import org.apache.stanbol.ontologymanager.ontonet.api.collector.OntologyCollectorListener;
import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyProvider;
-import org.apache.stanbol.ontologymanager.ontonet.api.scope.CoreOntologySpace;
-import org.apache.stanbol.ontologymanager.ontonet.api.scope.CustomOntologySpace;
import org.apache.stanbol.ontologymanager.ontonet.api.scope.OntologyScope;
+import org.apache.stanbol.ontologymanager.ontonet.api.scope.OntologySpace;
import org.apache.stanbol.ontologymanager.ontonet.api.scope.ScopeEventListener;
import org.apache.stanbol.ontologymanager.ontonet.api.session.Session;
+import org.apache.stanbol.ontologymanager.ontonet.api.session.SessionEvent;
+import org.apache.stanbol.ontologymanager.ontonet.api.session.SessionEvent.OperationType;
+import org.apache.stanbol.ontologymanager.ontonet.api.session.SessionListener;
import org.apache.stanbol.ontologymanager.ontonet.impl.util.OntologyUtils;
import org.osgi.service.component.ComponentContext;
import org.semanticweb.owlapi.apibinding.OWLManager;
@@ -105,7 +116,7 @@ import org.slf4j.LoggerFactory;
@Component(immediate = true, metatype = true)
@Service(OntologyProvider.class)
public class ClerezzaOntologyProvider implements OntologyProvider<TcProvider>, ScopeEventListener,
- OntologyCollectorListener {
+ SessionListener, OntologyCollectorListener {
private class InvalidMetaGraphStateException extends RuntimeException {
@@ -514,6 +525,21 @@ public class ClerezzaOntologyProvider im
}
}
+ private UriRef getIRIforScope(OntologyScope scope) {
+ // Use the Stanbol-internal namespace, so that the whole configuration can be ported.
+ return new UriRef(_NS_STANBOL_INTERNAL + OntologyScope.shortName + "/" + scope.getID());
+ }
+
+ private UriRef getIRIforSession(Session session) {
+ // Use the Stanbol-internal namespace, so that the whole configuration can be ported.
+ return new UriRef(_NS_STANBOL_INTERNAL + Session.shortName + "/" + session.getID());
+ }
+
+ private UriRef getIRIforSpace(OntologySpace space) {
+ // Use the Stanbol-internal namespace, so that the whole configuration can be ported.
+ return new UriRef(_NS_STANBOL_INTERNAL + OntologySpace.shortName + "/" + space.getID());
+ }
+
@Override
public String getKey(IRI ontologyIri) {
ontologyIri = URIUtils.sanitizeID(ontologyIri);
@@ -540,10 +566,134 @@ public class ClerezzaOntologyProvider im
return (O) store.getTriples(new UriRef(metaGraphId));
}
+ public OntologyNetworkConfiguration getOntologyNetworkConfiguration() {
+ Map<String,Collection<String>> coreOntologies = new HashMap<String,Collection<String>>(), customOntologies = new HashMap<String,Collection<String>>();
+ final TripleCollection meta = store.getTriples(new UriRef(metaGraphId));
+
+ // Scopes first
+ for (Iterator<Triple> it = meta.filter(null, RDF.type, SCOPE); it.hasNext();) { // for each scope
+ Triple ta = it.next();
+ NonLiteral sub = ta.getSubject();
+ if (sub instanceof UriRef) {
+ String s = ((UriRef) sub).getUnicodeString(), prefix = _NS_STANBOL_INTERNAL
+ + OntologyScope.shortName + "/";
+ if (s.startsWith(prefix)) {
+ String scopeId = s.substring(prefix.length());
+ log.info("Rebuilding scope \"{}\".", scopeId);
+ coreOntologies.put(scopeId, new LinkedList<String>());
+ customOntologies.put(scopeId, new LinkedList<String>());
+ UriRef core_ur = null, custom_ur = null;
+ Resource r;
+ // Check core space
+ Iterator<Triple> it2 = meta.filter(sub, HAS_SPACE_CORE, null);
+ if (it2.hasNext()) {
+ r = it2.next().getObject();
+ if (r instanceof UriRef) core_ur = (UriRef) r;
+ } else {
+ it2 = meta.filter(null, IS_SPACE_CORE_OF, sub);
+ if (it2.hasNext()) {
+ r = it2.next().getSubject();
+ if (r instanceof UriRef) core_ur = (UriRef) r;
+ }
+ }
+
+ // Check custom space
+ it2 = meta.filter(sub, HAS_SPACE_CUSTOM, null);
+ if (it2.hasNext()) {
+ r = it2.next().getObject();
+ if (r instanceof UriRef) custom_ur = (UriRef) r;
+ } else {
+ it2 = meta.filter(null, IS_SPACE_CUSTOM_OF, sub);
+ if (it2.hasNext()) {
+ r = it2.next().getSubject();
+ if (r instanceof UriRef) custom_ur = (UriRef) r;
+ }
+ }
+
+ // retrieve the ontologies
+ if (core_ur != null) {
+ for (it2 = meta.filter(core_ur, null, null); it2.hasNext();) {
+ Triple t = it2.next();
+ UriRef predicate = t.getPredicate();
+ if (predicate.equals(MANAGES)) {
+ if (t.getObject() instanceof UriRef) coreOntologies.get(scopeId).add(
+ ((UriRef) t.getObject()).getUnicodeString());
+ }
+ }
+ for (it2 = meta.filter(null, null, core_ur); it2.hasNext();) {
+ Triple t = it2.next();
+ UriRef predicate = t.getPredicate();
+ if (predicate.equals(IS_MANAGED_BY)) {
+ if (t.getSubject() instanceof UriRef) coreOntologies.get(scopeId).add(
+ ((UriRef) t.getSubject()).getUnicodeString());
+ }
+ }
+ }
+ if (custom_ur != null) {
+ for (it2 = meta.filter(custom_ur, null, null); it2.hasNext();) {
+ Triple t = it2.next();
+ UriRef predicate = t.getPredicate();
+ if (predicate.equals(MANAGES)) {
+ if (t.getObject() instanceof UriRef) customOntologies.get(scopeId).add(
+ ((UriRef) t.getObject()).getUnicodeString());
+ }
+ }
+ for (it2 = meta.filter(null, null, custom_ur); it2.hasNext();) {
+ Triple t = it2.next();
+ UriRef predicate = t.getPredicate();
+ if (predicate.equals(IS_MANAGED_BY)) {
+ if (t.getSubject() instanceof UriRef) customOntologies.get(scopeId).add(
+ ((UriRef) t.getSubject()).getUnicodeString());
+ }
+ }
+ }
+
+ }
+ }
+ }
+
+ // Sessions next
+ Map<String,Collection<String>> sessionOntologies = new HashMap<String,Collection<String>>();
+ for (Iterator<Triple> it = meta.filter(null, RDF.type, SESSION); it.hasNext();) { // for each scope
+ Triple ta = it.next();
+ NonLiteral sub = ta.getSubject();
+ if (sub instanceof UriRef) {
+ UriRef ses_ur = (UriRef) sub;
+ String s = ((UriRef) sub).getUnicodeString();
+ String prefix = _NS_STANBOL_INTERNAL + Session.shortName + "/";
+ if (s.startsWith(prefix)) {
+ String sessionId = s.substring(prefix.length());
+ log.info("Rebuilding session \"{}\".", sessionId);
+ sessionOntologies.put(sessionId, new HashSet<String>());
+ // retrieve the ontologies
+ if (ses_ur != null) {
+ for (Iterator<Triple> it2 = meta.filter(ses_ur, null, null); it2.hasNext();) {
+ Triple t = it2.next();
+ UriRef predicate = t.getPredicate();
+ if (predicate.equals(MANAGES)) {
+ if (t.getObject() instanceof UriRef) sessionOntologies.get(sessionId).add(
+ ((UriRef) t.getObject()).getUnicodeString());
+ }
+ }
+ for (Iterator<Triple> it2 = meta.filter(null, null, ses_ur); it2.hasNext();) {
+ Triple t = it2.next();
+ UriRef predicate = t.getPredicate();
+ if (predicate.equals(IS_MANAGED_BY)) {
+ if (t.getSubject() instanceof UriRef) sessionOntologies.get(sessionId).add(
+ ((UriRef) t.getSubject()).getUnicodeString());
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return new OntologyNetworkConfiguration(coreOntologies, customOntologies, sessionOntologies);
+ }
+
@Override
public Set<String> getOntologyVersionKeys(IRI ontologyIRI) {
- // TODO Auto-generated method stub
- return null;
+ throw new UnsupportedOperationException("Method not implemented yet.");
}
@Override
@@ -859,64 +1009,133 @@ public class ClerezzaOntologyProvider im
}
@Override
- public void scopeActivated(OntologyScope scope) {}
+ public void onOntologyAdded(OntologyCollector collector, OWLOntologyID addedOntology) {
+ // When the ontology provider hears an ontology has been added to a collector, it has to register this
+ // into the metadata graph.
- @Override
- public void scopeCreated(OntologyScope scope) {}
+ // log.info("Heard addition of ontology {} to collector {}", addedOntology, collector.getID());
+ // log.info("This ontology is stored as {}", getKey(addedOntology));
- @Override
- public void scopeDeactivated(OntologyScope scope) {}
+ String colltype = "";
+ if (collector instanceof OntologyScope) colltype = OntologyScope.shortName + "/"; // Cannot be
+ else if (collector instanceof OntologySpace) colltype = OntologySpace.shortName + "/";
+ else if (collector instanceof Session) colltype = Session.shortName + "/";
+ UriRef c = new UriRef(_NS_STANBOL_INTERNAL + colltype + collector.getID());
+ UriRef u = new UriRef(prefix + "::" + keymap.buildResource(addedOntology).getUnicodeString());
+
+ // TODO OntologyProvider should not be aware of scopes, spaces or sessions. Move elsewhere.
+ MGraph meta = getMetaGraph(MGraph.class);
+ boolean hasValues = false;
+ log.debug("Ontology {}", addedOntology);
+ log.debug("-- is already managed by the following collectors :");
+ for (Iterator<Triple> it = meta.filter(u, IS_MANAGED_BY, null); it.hasNext();) {
+ hasValues = true;
+ log.debug("-- {}", it.next().getObject());
+ }
+ for (Iterator<Triple> it = meta.filter(null, MANAGES, u); it.hasNext();) {
+ hasValues = true;
+ log.debug("-- {} (inverse)", it.next().getSubject());
+ }
+ if (!hasValues) log.debug("-- <none>");
+
+ // Add both inverse triples. This graph has to be traversed efficiently, no need for reasoners.
+ UriRef predicate1 = null, predicate2 = null;
+ if (collector instanceof OntologySpace) {
+ predicate1 = MANAGES;
+ predicate2 = IS_MANAGED_BY;
+ } else if (collector instanceof Session) {
+ // TODO implement model for sessions.
+ predicate1 = MANAGES;
+ predicate2 = IS_MANAGED_BY;
+ } else {
+ log.error("Unrecognized ontology collector type {} for \"{}\". Aborting.", collector.getClass(),
+ collector.getID());
+ return;
+ }
+ synchronized (meta) {
+ Triple t;
+ if (predicate1 != null) {
+ t = new TripleImpl(c, predicate1, u);
+ boolean b = meta.add(t);
+ log.debug((b ? "Successful" : "Redundant") + " addition of meta triple");
+ log.debug("-- {} ", t);
+ }
+ if (predicate2 != null) {
+ t = new TripleImpl(u, predicate2, c);
+ boolean b = meta.add(t);
+ log.debug((b ? "Successful" : "Redundant") + " addition of meta triple");
+ log.debug("-- {} ", t);
+ }
+ }
+ }
@Override
- public void scopeDeregistered(OntologyScope scope) {
- UriRef graphId = new UriRef(metaGraphId);
- MGraph graph = store.getMGraph(graphId);
- if (graph == null) try {
- graph = store.createMGraph(graphId);
- } catch (EntityAlreadyExistsException e) {
- log.error("Could not get meta graph {} for writing scope registration. ", graphId);
+ public void onOntologyRemoved(OntologyCollector collector, OWLOntologyID removedOntology) {
+ log.info("Heard removal of ontology {} from collector {}", removedOntology, collector.getID());
+
+ String colltype = "";
+ if (collector instanceof OntologyScope) colltype = OntologyScope.shortName + "/"; // Cannot be
+ else if (collector instanceof OntologySpace) colltype = OntologySpace.shortName + "/";
+ else if (collector instanceof Session) colltype = Session.shortName + "/";
+ UriRef c = new UriRef(_NS_STANBOL_INTERNAL + colltype + collector.getID());
+ UriRef u = new UriRef(prefix + "::" + keymap.buildResource(removedOntology).getUnicodeString());
+
+ // XXX condense the following code
+ MGraph meta = getMetaGraph(MGraph.class);
+ boolean badState = true;
+
+ log.debug("Checking ({},{}) pattern", c, u);
+ for (Iterator<Triple> it = meta.filter(c, null, u); it.hasNext();) {
+ UriRef property = it.next().getPredicate();
+ if (collector instanceof OntologySpace || collector instanceof Session) {
+ if (property.equals(MANAGES)) badState = false;
+ }
}
- boolean removable = false, conflict = false;
- UriRef sid = new UriRef(scope.getNamespace() + scope.getID());
- Set<Triple> removeUs = new HashSet<Triple>();
- for (Iterator<Triple> it = graph.filter(sid, null, null); it.hasNext();) {
- Triple t = it.next();
- if (RDF.type.equals(t.getPredicate())) {
- if (new UriRef(SCOPE).equals(t.getObject())) removable = true;
- else conflict = true;
+
+ log.debug("Checking ({},{}) pattern", u, c);
+ for (Iterator<Triple> it = meta.filter(u, null, c); it.hasNext();) {
+ UriRef property = it.next().getPredicate();
+ if (collector instanceof OntologySpace || collector instanceof Session) {
+ if (property.equals(IS_MANAGED_BY)) badState = false;
}
- removeUs.add(t);
}
- for (Iterator<Triple> it = graph.filter(null, null, sid); it.hasNext();)
- removeUs.add(it.next());
- if (!removable) log
- .error(
- "Cannot write scope deregistration to persistence: resource {} is not typed as a {} in the meta-graph.",
- sid, SCOPE);
- else if (conflict) log.error(
- "Conflict upon scope deregistration: resource {} has incompatible types in the meta-graph.", sid,
- SCOPE);
- else {
- log.info("Removing all triples for {}", sid);
- graph.removeAll(removeUs);
+
+ if (badState) throw new InvalidMetaGraphStateException(
+ "No relationship found for ontology-collector pair {" + u + " , " + c + "}");
+
+ synchronized (meta) {
+ if (collector instanceof OntologySpace) {
+ meta.remove(new TripleImpl(c, MANAGES, u));
+ meta.remove(new TripleImpl(u, IS_MANAGED_BY, c));
+ }
}
}
@Override
+ public void scopeActivated(OntologyScope scope) {}
+
+ @Override
+ public void scopeCreated(OntologyScope scope) {}
+
+ @Override
+ public void scopeDeactivated(OntologyScope scope) {}
+
+ @Override
public void scopeRegistered(OntologyScope scope) {
- UriRef graphId = new UriRef(metaGraphId);
- MGraph graph = store.getMGraph(graphId);
- if (graph == null) try {
- graph = store.createMGraph(graphId);
- } catch (EntityAlreadyExistsException e) {
- log.error("Could not get meta graph {} for writing scope registration. ", graphId);
- }
- Triple t = new TripleImpl(new UriRef(scope.getNamespace() + scope.getID()), RDF.type, new UriRef(
- SCOPE));
- if (graph.contains(t)) log.info("Not adding triple {}", t);
- else {
- log.info("Adding triple {}", t);
- graph.add(t);
+ updateScopeRegistration(scope);
+ }
+
+ @Override
+ public void scopeUnregistered(OntologyScope scope) {
+ updateScopeUnregistration(scope);
+ }
+
+ @Override
+ public void sessionChanged(SessionEvent event) {
+ if (event.getOperationType() == OperationType.CREATE) {
+ updateSessionRegistration(event.getSession());
+ } else if (event.getOperationType() == OperationType.KILL) {
+ updateSessionUnregistration(event.getSession());
}
}
@@ -1048,119 +1267,124 @@ public class ClerezzaOntologyProvider im
}
}
- @Override
- public void onOntologyAdded(OntologyCollector collector, OWLOntologyID addedOntology) {
-
- // When the ontology provider hears an ontology has been added to a collector, it has to register this
- // into the metadata graph.
-
- // log.info("Heard addition of ontology {} to collector {}", addedOntology, collector.getID());
- // log.info("This ontology is stored as {}", getKey(addedOntology));
- UriRef c = new UriRef(collector.getNamespace() + collector.getID());
- UriRef u = keymap.buildResource(addedOntology);
-
- // TODO OntologyProvider should not be aware of scopes, spaces or sessions. Move elsewhere.
- MGraph meta = getMetaGraph(MGraph.class);
- String sMan = "";
- for (Iterator<Triple> it = meta.filter(u, new UriRef(IS_MANAGED_BY_CUSTOM), null); it.hasNext();)
- sMan += it.next() + ", ";
- for (Iterator<Triple> it = meta.filter(u, new UriRef(IS_MANAGED_BY_CORE), null); it.hasNext();)
- sMan += it.next() + ", ";
- for (Iterator<Triple> it = meta.filter(null, new UriRef(MANAGES_IN_CUSTOM), u); it.hasNext();)
- sMan += it.next() + "(inverse), ";
- for (Iterator<Triple> it = meta.filter(null, new UriRef(MANAGES_IN_CORE), u); it.hasNext();)
- sMan += it.next() + "(inverse), ";
- if (!sMan.isEmpty()) log.warn("Ontology {} is already managed by the following collectors : " + sMan,
- addedOntology);
-
- // Add both inverse triples. This graph has to be traversed efficiently, no need for reasoners.
- UriRef predicate1 = null, predicate2 = null;
- if (collector instanceof CoreOntologySpace) {
- predicate1 = new UriRef(MANAGES_IN_CORE);
- predicate2 = new UriRef(IS_MANAGED_BY_CORE);
- } else if (collector instanceof CustomOntologySpace) {
- predicate1 = new UriRef(MANAGES_IN_CUSTOM);
- predicate2 = new UriRef(IS_MANAGED_BY_CUSTOM);
- } else if (collector instanceof Session) {
- // TODO implement model for sessions.
- }
+ /**
+ * Write registration info for a new ontology scope and its spaces.
+ *
+ * @param scope
+ * the scope whose information needs to be updated.
+ */
+ private void updateScopeRegistration(OntologyScope scope) {
+ final TripleCollection meta = store.getTriples(new UriRef(metaGraphId));
+ final UriRef scopeur = getIRIforScope(scope);
+ final UriRef coreur = getIRIforSpace(scope.getCoreSpace());
+ final UriRef custur = getIRIforSpace(scope.getCustomSpace());
+ // If this method was called after a scope rebuild, the following will have little to no effect.
synchronized (meta) {
- Triple t;
- if (predicate1 != null) {
- t = new TripleImpl(c, predicate1, u);
- boolean b = meta.add(t);
- log.debug((b ? "Successful" : "Redundant") + " addition of meta triple {} ", t);
- }
- if (predicate2 != null) {
- t = new TripleImpl(u, predicate2, c);
- boolean b = meta.add(t);
- log.debug((b ? "Successful" : "Redundant") + " addition of meta triple {} ", t);
- }
+ // Spaces are created along with the scope, so it is safe to add their triples.
+ meta.add(new TripleImpl(scopeur, RDF.type, SCOPE));
+ meta.add(new TripleImpl(coreur, RDF.type, SPACE));
+ meta.add(new TripleImpl(custur, RDF.type, SPACE));
+ meta.add(new TripleImpl(scopeur, HAS_SPACE_CORE, coreur));
+ meta.add(new TripleImpl(scopeur, HAS_SPACE_CUSTOM, custur));
+ // Add inverse predicates so we can traverse the graph in both directions.
+ meta.add(new TripleImpl(coreur, IS_SPACE_CORE_OF, scopeur));
+ meta.add(new TripleImpl(custur, IS_SPACE_CUSTOM_OF, scopeur));
}
+ log.debug("Ontology collector information triples added for scope \"{}\".", scope);
}
- @Override
- public void onOntologyRemoved(OntologyCollector collector, OWLOntologyID removedOntology) {
- log.info("Heard removal of ontology {} from collector {}", removedOntology, collector.getID());
-
- UriRef c = new UriRef(collector.getNamespace() + collector.getID());
- UriRef u = keymap.buildResource(removedOntology);
-
- // XXX condense the following code
- MGraph meta = getMetaGraph(MGraph.class);
- boolean badState = true;
-
- log.debug("Checking ({},{}) pattern", c, u);
-
- for (Iterator<Triple> it = meta.filter(c, null, u); it.hasNext();) {
- UriRef property = it.next().getPredicate();
-
- if (collector instanceof CoreOntologySpace) {
- if (property.equals(new UriRef(MANAGES_IN_CORE))) badState = false;
- if (property.equals(new UriRef(MANAGES_IN_CUSTOM))) log
- .warn("Ontology {} is still managed by custom space {}. "
- + "Removal from core space might alter axiom interpretation within the scope.");
- }
-
- if (collector instanceof CustomOntologySpace) {
- if (property.equals(new UriRef(MANAGES_IN_CORE))) log
- .warn("Ontology {} is still managed by core space {}. "
- + "Removal from the custom space will most likely have no effect on the scope.");
- if (property.equals(new UriRef(MANAGES_IN_CUSTOM))) badState = false;
+ /**
+ * Remove all information on a deregistered ontology scope and its spaces.
+ *
+ * @param scope
+ * the scope whose information needs to be updated.
+ */
+ private void updateScopeUnregistration(OntologyScope scope) {
+ long before = System.currentTimeMillis();
+ final TripleCollection meta = store.getTriples(new UriRef(metaGraphId));
+ boolean removable = false, conflict = false;
+ final UriRef scopeur = getIRIforScope(scope);
+ final UriRef coreur = getIRIforSpace(scope.getCoreSpace());
+ final UriRef custur = getIRIforSpace(scope.getCustomSpace());
+ Set<Triple> removeUs = new HashSet<Triple>();
+ for (Iterator<Triple> it = meta.filter(scopeur, null, null); it.hasNext();) {
+ Triple t = it.next();
+ if (RDF.type.equals(t.getPredicate())) {
+ if (SCOPE.equals(t.getObject())) removable = true;
+ else conflict = true;
}
+ removeUs.add(t);
}
-
- log.debug("Checking ({},{}) pattern", u, c);
-
- for (Iterator<Triple> it = meta.filter(u, null, c); it.hasNext();) {
- UriRef property = it.next().getPredicate();
-
- if (collector instanceof CoreOntologySpace) {
- if (property.equals(new UriRef(IS_MANAGED_BY_CORE))) badState = false;
- if (property.equals(new UriRef(IS_MANAGED_BY_CUSTOM))) log
- .warn("Ontology {} is still managed by custom space {}. "
- + "Removal from core space might alter axiom interpretation within the scope.");
- }
-
- if (collector instanceof CustomOntologySpace) {
- if (property.equals(new UriRef(IS_MANAGED_BY_CORE))) log
- .warn("Ontology {} is still managed by core space {}. "
- + "Removal from the custom space will most likely have no effect on the scope.");
- if (property.equals(new UriRef(IS_MANAGED_BY_CUSTOM))) badState = false;
- }
+ if (!removable) {
+ log.error("Cannot write scope deregistration to persistence:");
+ log.error("-- resource {}", scopeur);
+ log.error("-- is not typed as a {} in the meta-graph.", SCOPE);
+ } else if (conflict) {
+ log.error("Conflict upon scope deregistration:");
+ log.error("-- resource {}", scopeur);
+ log.error("-- has incompatible types in the meta-graph.");
+ } else {
+ log.debug("Removing all triples for scope \"{}\".", scope.getID());
+ Iterator<Triple> it;
+ for (it = meta.filter(null, null, scopeur); it.hasNext();)
+ removeUs.add(it.next());
+ for (it = meta.filter(null, null, coreur); it.hasNext();)
+ removeUs.add(it.next());
+ for (it = meta.filter(coreur, null, null); it.hasNext();)
+ removeUs.add(it.next());
+ for (it = meta.filter(null, null, custur); it.hasNext();)
+ removeUs.add(it.next());
+ for (it = meta.filter(custur, null, null); it.hasNext();)
+ removeUs.add(it.next());
+ meta.removeAll(removeUs);
+ log.debug("Done; removed {} triples in {} ms.", removeUs.size(), System.currentTimeMillis()
+ - before);
}
+ }
- if (badState) throw new InvalidMetaGraphStateException(
- "No relationship found for ontology-collector pair {" + u + " , " + c + "}");
-
+ private void updateSessionRegistration(Session session) {
+ final TripleCollection meta = store.getTriples(new UriRef(metaGraphId));
+ final UriRef sesur = getIRIforSession(session);
+ // If this method was called after a session rebuild, the following will have little to no effect.
synchronized (meta) {
- if (collector instanceof CoreOntologySpace) {
- meta.remove(new TripleImpl(c, new UriRef(MANAGES_IN_CORE), u));
- meta.remove(new TripleImpl(u, new UriRef(IS_MANAGED_BY_CORE), c));
- } else if (collector instanceof CustomOntologySpace) {
- meta.remove(new TripleImpl(c, new UriRef(MANAGES_IN_CUSTOM), u));
- meta.remove(new TripleImpl(u, new UriRef(IS_MANAGED_BY_CUSTOM), c));
+ // The only essential triple to add is typing
+ meta.add(new TripleImpl(sesur, RDF.type, SESSION));
+ }
+ log.debug("Ontology collector information triples added for session \"{}\".", sesur);
+ }
+
+ private void updateSessionUnregistration(Session session) {
+ long before = System.currentTimeMillis();
+ boolean removable = false, conflict = false;
+ final TripleCollection meta = store.getTriples(new UriRef(metaGraphId));
+ final UriRef sessionur = getIRIforSession(session);
+ Set<Triple> removeUs = new HashSet<Triple>();
+ for (Iterator<Triple> it = meta.filter(sessionur, null, null); it.hasNext();) {
+ Triple t = it.next();
+ if (RDF.type.equals(t.getPredicate())) {
+ if (SESSION.equals(t.getObject())) removable = true;
+ else conflict = true;
}
+ removeUs.add(t);
+ }
+ if (!removable) {
+ log.error("Cannot write session deregistration to persistence:");
+ log.error("-- resource {}", sessionur);
+ log.error("-- is not typed as a {} in the meta-graph.", SESSION);
+ } else if (conflict) {
+ log.error("Conflict upon session deregistration:");
+ log.error("-- resource {}", sessionur);
+ log.error("-- has incompatible types in the meta-graph.");
+ } else {
+ log.debug("Removing all triples for session \"{}\".", session.getID());
+ Iterator<Triple> it;
+ for (it = meta.filter(null, null, sessionur); it.hasNext();)
+ removeUs.add(it.next());
+ for (it = meta.filter(sessionur, null, null); it.hasNext();)
+ removeUs.add(it.next());
+ meta.removeAll(removeUs);
+ log.debug("Done; removed {} triples in {} ms.", removeUs.size(), System.currentTimeMillis()
+ - before);
}
}
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/ScopeRegistryImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/ScopeRegistryImpl.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/ScopeRegistryImpl.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/ScopeRegistryImpl.java Mon Jul 2 16:23:12 2012
@@ -89,7 +89,7 @@ public class ScopeRegistryImpl implement
*/
protected void fireScopeDeregistered(OntologyScope scope) {
for (ScopeEventListener l : listeners)
- l.scopeDeregistered(scope);
+ l.scopeUnregistered(scope);
}
/**
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.java Mon Jul 2 16:23:12 2012
@@ -22,6 +22,7 @@ import java.util.Set;
import org.apache.clerezza.rdf.core.TripleCollection;
import org.apache.stanbol.commons.owl.util.OWLUtils;
+import org.apache.stanbol.ontologymanager.ontonet.api.OntologyNetworkConfiguration;
import org.apache.stanbol.ontologymanager.ontonet.api.collector.ImportManagementPolicy;
import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyProvider;
import org.semanticweb.owlapi.apibinding.OWLManager;
@@ -74,6 +75,11 @@ public class OWLAPIOntologyProvider impl
}
@Override
+ public String getKey(OWLOntologyID ontologyId) {
+ return ontologyId.getDefaultDocumentIRI().toString();
+ }
+
+ @Override
public Set<String> getKeys() {
Set<String> result = new HashSet<String>();
for (OWLOntology o : store.getOntologies())
@@ -82,6 +88,24 @@ public class OWLAPIOntologyProvider impl
}
@Override
+ public <O extends TripleCollection> O getMetaGraph(Class<O> returnType) {
+ throw new UnsupportedOperationException(
+ "The OWL API implementation does not use a graph for storing correspondencies");
+ }
+
+ @Override
+ public OntologyNetworkConfiguration getOntologyNetworkConfiguration() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Set<String> getOntologyVersionKeys(IRI ontologyIRI) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
public OWLOntologyManager getStore() {
return store;
}
@@ -129,6 +153,11 @@ public class OWLAPIOntologyProvider impl
}
@Override
+ public boolean hasOntology(IRI ontologyIri) {
+ return hasOntology(new OWLOntologyID(ontologyIri));
+ }
+
+ @Override
public boolean hasOntology(OWLOntologyID id) {
return store.contains(id);
}
@@ -175,31 +204,9 @@ public class OWLAPIOntologyProvider impl
}
@Override
- public boolean hasOntology(IRI ontologyIri) {
- return hasOntology(new OWLOntologyID(ontologyIri));
- }
-
- @Override
- public <O extends TripleCollection> O getMetaGraph(Class<O> returnType) {
- throw new UnsupportedOperationException(
- "The OWL API implementation does not use a graph for storing correspondencies");
- }
-
- @Override
- public String getKey(OWLOntologyID ontologyId) {
- return ontologyId.getDefaultDocumentIRI().toString();
- }
-
- @Override
- public Set<String> getOntologyVersionKeys(IRI ontologyIRI) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
public void setLocatorMapping(IRI locator, String key) {
// TODO Auto-generated method stub
-
+
}
}
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/renderers/ScopeSetRenderer.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/renderers/ScopeSetRenderer.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/renderers/ScopeSetRenderer.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/renderers/ScopeSetRenderer.java Mon Jul 2 16:23:12 2012
@@ -48,7 +48,7 @@ public class ScopeSetRenderer {
private static OWLDataFactory __factory = OWLManager.getOWLDataFactory();
- private static IRI _scopeIri = IRI.create(Vocabulary.SCOPE);
+ private static IRI _scopeIri = IRI.create(Vocabulary.SCOPE.getUnicodeString());
private static OWLClass cScope = __factory.getOWLClass(_scopeIri);
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionManagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionManagerImpl.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionManagerImpl.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionManagerImpl.java Mon Jul 2 16:23:12 2012
@@ -31,6 +31,9 @@ import org.apache.felix.scr.annotations.
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.OntologyNetworkConfiguration;
+import org.apache.stanbol.ontologymanager.ontonet.api.collector.OntologyCollectorListener;
+import org.apache.stanbol.ontologymanager.ontonet.api.io.GraphSource;
import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyProvider;
import org.apache.stanbol.ontologymanager.ontonet.api.session.DuplicateSessionIDException;
import org.apache.stanbol.ontologymanager.ontonet.api.session.NonReferenceableSessionException;
@@ -166,7 +169,16 @@ public class SessionManagerImpl implemen
log.warn("The Ontology Network Manager configuration does not define a ID for the Ontology Network Manager");
}
- idgen = new TimestampedSessionIDGenerator(IRI.create(getNamespace() + getID() + "/"));
+ idgen = new TimestampedSessionIDGenerator();
+
+ // Add listeners
+ if (ontologyProvider instanceof SessionListener) this
+ .addSessionListener((SessionListener) ontologyProvider);
+
+ // Rebuild sessions
+ rebuildSessions();
+
+ log.debug(SessionManager.class + " activated.");
}
protected synchronized void addSession(Session session) {
@@ -214,6 +226,11 @@ public class SessionManagerImpl implemen
checkSessionLimit();
IRI ns = IRI.create(getNamespace() + getID() + "/");
Session session = new SessionImpl(sessionID, ns, ontologyProvider);
+
+ // Have the ontology provider listen to ontology events
+ if (ontologyProvider instanceof OntologyCollectorListener) session
+ .addOntologyCollectorListener((OntologyCollectorListener) ontologyProvider);
+
addSession(session);
fireSessionCreated(session);
return session;
@@ -306,6 +323,31 @@ public class SessionManagerImpl implemen
return listeners;
}
+ private void rebuildSessions() {
+ if (ontologyProvider == null) {
+ log.warn("No ontology provider supplied. Cannot rebuild sessions");
+ return;
+ }
+ OntologyNetworkConfiguration struct = ontologyProvider.getOntologyNetworkConfiguration();
+ for (String sessionId : struct.getSessionIDs()) {
+ Session session;
+ try {
+ session = createSession(sessionId);
+ // Register even if some ontologies were to fail to be restored afterwards.
+ sessionsByID.put(sessionId, session);
+ session.setActive(false); // Restored sessions are inactive at first.
+ for (String key : struct.getOntologyKeysForSession(sessionId))
+ session.addOntology(new GraphSource(key));
+ } catch (DuplicateSessionIDException e) {
+ log.warn("Session \"{}\" already exists and will be reused.", sessionId);
+ session = getSession(sessionId);
+ } catch (SessionLimitException e) {
+ log.error("Cannot create session {}. Session limit of {} reached.", sessionId,
+ getActiveSessionLimit());
+ }
+ }
+ }
+
protected synchronized void removeSession(Session session) {
String id = session.getID();
Session s2 = sessionsByID.get(id);
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/TimestampedSessionIDGenerator.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/TimestampedSessionIDGenerator.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/TimestampedSessionIDGenerator.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/TimestampedSessionIDGenerator.java Mon Jul 2 16:23:12 2012
@@ -33,13 +33,19 @@ public class TimestampedSessionIDGenerat
private IRI baseIRI;
+ public TimestampedSessionIDGenerator() {
+ this.baseIRI = null;
+ }
+
public TimestampedSessionIDGenerator(IRI baseIRI) {
this.baseIRI = baseIRI;
}
@Override
public String createSessionID() {
- return StringUtils.stripIRITerminator(baseIRI) + "/session/" + new Date().getTime();
+ String id = "";
+ if (baseIRI != null) id += StringUtils.stripIRITerminator(baseIRI) + "/session/";
+ return id + new Date().getTime();
}
@Override
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/TestOntologyNetworkPersistence.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/TestOntologyNetworkPersistence.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/TestOntologyNetworkPersistence.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/TestOntologyNetworkPersistence.java Mon Jul 2 16:23:12 2012
@@ -20,9 +20,13 @@ import static org.apache.stanbol.ontolog
import static org.apache.stanbol.ontologymanager.ontonet.MockOsgiContext.parser;
import static org.apache.stanbol.ontologymanager.ontonet.MockOsgiContext.resetManagers;
import static org.apache.stanbol.ontologymanager.ontonet.MockOsgiContext.sessionManager;
+import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.IS_MANAGED_BY;
+import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary.MANAGES;
+import static org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary._NS_STANBOL_INTERNAL;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.InputStream;
@@ -36,10 +40,10 @@ import org.apache.clerezza.rdf.core.impl
import org.apache.clerezza.rdf.core.serializedform.SupportedFormat;
import org.apache.clerezza.rdf.simple.storage.SimpleTcProvider;
import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
-import org.apache.stanbol.ontologymanager.ontonet.api.Vocabulary;
import org.apache.stanbol.ontologymanager.ontonet.api.io.GraphContentInputSource;
import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyProvider;
import org.apache.stanbol.ontologymanager.ontonet.api.scope.OntologyScope;
+import org.apache.stanbol.ontologymanager.ontonet.api.scope.OntologySpace;
import org.apache.stanbol.ontologymanager.ontonet.api.session.Session;
import org.apache.stanbol.ontologymanager.ontonet.impl.ONManagerImpl;
import org.apache.stanbol.ontologymanager.ontonet.impl.OfflineConfigurationImpl;
@@ -55,6 +59,8 @@ import org.slf4j.LoggerFactory;
* This suite is for testing that all the meta-level information stored by OntoNet can be retrieved and
* rebuilt if OntoNet or Stanbol goes down but the Clerezza store is not cleared.
*
+ * TODO add tests for preserving added ontologies
+ *
* @author alexdma
*
*/
@@ -77,25 +83,27 @@ public class TestOntologyNetworkPersiste
OntologyScope scope = onm.createOntologyScope(scopeId, new GraphContentInputSource(getClass()
.getResourceAsStream("/ontologies/test1.owl")));
- UriRef collector = new UriRef(scope.getNamespace() + scope.getCoreSpace().getID());
- UriRef test1id = new UriRef("http://stanbol.apache.org/ontologies/test1.owl"); // Has no versionIRI
-
+ UriRef collector = new UriRef(_NS_STANBOL_INTERNAL + OntologySpace.shortName + "/"
+ + scope.getCoreSpace().getID());
+ UriRef test1id = new UriRef(ontologyProvider.getKey(IRI
+ .create("http://stanbol.apache.org/ontologies/test1.owl"))); // Has no versionIRI
// Be strict: the whole property pair must be there.
- UriRef predicate = new UriRef(Vocabulary.MANAGES_IN_CORE);
+ UriRef predicate = MANAGES;
assertTrue(meta.contains(new TripleImpl(collector, predicate, test1id)));
- predicate = new UriRef(Vocabulary.IS_MANAGED_BY_CORE);
+ predicate = IS_MANAGED_BY;
assertTrue(meta.contains(new TripleImpl(test1id, predicate, collector)));
scope.tearDown(); // To modify the core space.
scope.getCoreSpace().addOntology(
new GraphContentInputSource(getClass().getResourceAsStream("/ontologies/minorcharacters.owl")));
- UriRef minorId = new UriRef("http://stanbol.apache.org/ontologies/pcomics/minorcharacters.owl"); // Has no versionIRI
- predicate = new UriRef(Vocabulary.MANAGES_IN_CORE);
+ UriRef minorId = new UriRef(ontologyProvider.getKey(IRI
+ .create("http://stanbol.apache.org/ontologies/pcomics/minorcharacters.owl")));
+ predicate = MANAGES;
assertTrue(meta.contains(new TripleImpl(collector, predicate, minorId)));
- predicate = new UriRef(Vocabulary.IS_MANAGED_BY_CORE);
+ predicate = IS_MANAGED_BY;
assertTrue(meta.contains(new TripleImpl(minorId, predicate, collector)));
-
+
scope.getCustomSpace().addOntology(
new GraphContentInputSource(getClass().getResourceAsStream("/ontologies/test1.owl")));
@@ -103,7 +111,7 @@ public class TestOntologyNetworkPersiste
new GraphContentInputSource(getClass().getResourceAsStream("/ontologies/minorcharacters.owl")));
}
- // @Test
+ @Test
public void preservesManagedOntologies() throws Exception {
String id = "preserve";
OntologyScope scope = onManager.createOntologyScope(id, new GraphContentInputSource(getClass()
@@ -113,44 +121,52 @@ public class TestOntologyNetworkPersiste
"/ontologies/nonexistentcharacters.owl")));
// Simulate Stanbol going down.
+ log.info("Stanbol going down...");
resetOntologyProvider(); // but keep the TcProvider
resetManagers();
OntologyScope sc = onManager.getScope(id);
assertNotNull(sc);
// assertEquals(scope, sc); XXX should scopes be equal on ID + content?
-
- // for (IRI iri : sc.getCustomSpace().listManagedOntologies())
- // System.out.println(iri);
}
@Test
public void scopesAndSessionsOutliveOntoNet() throws Exception {
- String id1 = "scope1", id2 = "scope2";
+ /*
+ * Both scopes will be created, but scope1 will be unregistered and we expect not to be able to
+ * rebuild it.
+ */
+ String id1 = "scope1", id2 = "scope2", sid2 = "auto-" + System.currentTimeMillis();
// Setup a network
-
OntologyScope scope1 = onManager.createOntologyScope(id1);
assertNotNull(scope1);
- // OntologyScope scope2 = onManager.createOntologyScope(id2);
- // assertNotNull(scope2);
-
- // onManager.deregisterScope(scope1);
+ OntologyScope scope2 = onManager.createOntologyScope(id2);
+ assertNotNull(scope2);
+ onManager.deregisterScope(scope1);
+ // A session with a system ID
Session ses1 = sessionManager.createSession();
+ String sid1 = ses1.getID();
assertNotNull(ses1);
- assertNotNull(ses1.getID());
- assertFalse(ses1.getID().isEmpty());
- Session ses2 = sessionManager.createSession();
+ assertNotNull(sid1);
+ assertFalse(sid1.isEmpty());
+ // A session with an ID chosen manually
+ Session ses2 = sessionManager.createSession(sid2);
assertNotNull(ses2);
assertNotNull(ses2.getID());
- assertFalse(ses2.getID().isEmpty());
+ assertEquals(sid2, ses2.getID());
+ log.info("Stanbol going down...");
resetOntologyProvider(); // but keep the TcProvider
resetManagers();
- assertNotNull(onManager.getScope(id1));
- // assertNotNull(onManager.getScope(id2));
+ // The unregistered scope should be missing.
+ assertNull(onManager.getScope(id1));
+ // The other collectors should have been rebuilt.
+ assertNotNull(onManager.getScope(id2));
+ assertNotNull(sessionManager.getSession(sid1));
+ assertNotNull(sessionManager.getSession(sid2));
}
/*
@@ -198,6 +214,7 @@ public class TestOntologyNetworkPersiste
assertNotNull(id);
assertEquals(foaf, id);
+ log.info("Stanbol going down...");
resetOntologyProvider(); // but keep the TcProvider
assertEquals(total, ontologyProvider.getKeys().size());
@@ -212,34 +229,36 @@ public class TestOntologyNetworkPersiste
ontologyProvider.getStoredOntology(ontologyProvider.getKey(foaf), OWLOntology.class, false));
}
- @Test
+ @Test
public void canRetrieveOntologySingleton() throws Exception {
OWLOntologyID foaf = new OWLOntologyID(IRI.create("http://xmlns.com/foaf/0.1/"));
OWLOntology o1;
- // Get the fake FOAF
+ // Get the fake FOAF and load it into the ontology provider
InputStream data = getClass().getResourceAsStream("/ontologies/mockfoaf.rdf");
+ // Keep track of its storage key
String key = ontologyProvider.loadInStore(data, SupportedFormat.RDF_XML, false);
assertNotNull(key);
assertFalse(key.isEmpty());
- // Retrieve the stored ontology
+ // Retrieve the stored fake FOAF
assertEquals(1, ontologyProvider.getKeys().size());
o1 = ontologyProvider.getStoredOntology(key, OWLOntology.class, false);
OWLOntologyID id = o1.getOntologyID();
assertNotNull(id);
assertEquals(foaf, id);
- // Check there is a storage key for the FOAF ID
+ // Check there is a storage key for the (real) ID of the FOAF ontology
key = ontologyProvider.getKey(foaf);
assertNotNull(key);
assertFalse(key.isEmpty());
+ log.info("Stanbol going down...");
resetOntologyProvider(); // but keep the TcProvider
assertEquals(1, ontologyProvider.getKeys().size());
- // Check again
+ // Check again for the FOAF key
key = ontologyProvider.getKey(foaf);
assertNotNull(key);
assertFalse(key.isEmpty());
@@ -248,6 +267,9 @@ public class TestOntologyNetworkPersiste
assertEquals(o1, ontologyProvider.getStoredOntology(key, OWLOntology.class, false));
}
+ /*
+ * Before each test, everything is cleaned up, including the TcProvider.
+ */
@Before
public void cleanup() throws Exception {
tcp = new SimpleTcProvider();
@@ -257,6 +279,10 @@ public class TestOntologyNetworkPersiste
new OntologySpaceFactoryImpl(ontologyProvider, empty), empty);
}
+ /*
+ * With this method, the ontology provider and all its internal indices are cleared. However, the Clerezza
+ * persistence objects are not cleared, so we can check if we can still retrieve metadata from them.
+ */
private void resetOntologyProvider() {
ontologyProvider = new ClerezzaOntologyProvider(tcp, new OfflineConfigurationImpl(
new Hashtable<String,Object>()), parser);
Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/session/TestSessions.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/session/TestSessions.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/session/TestSessions.java (original)
+++ incubator/stanbol/trunk/ontologymanager/ontonet/src/test/java/org/apache/stanbol/ontologymanager/ontonet/session/TestSessions.java Mon Jul 2 16:23:12 2012
@@ -15,7 +15,8 @@
* limitations under the License.
*/
package org.apache.stanbol.ontologymanager.ontonet.session;
-import static org.apache.stanbol.ontologymanager.ontonet.MockOsgiContext.*;
+
+import static org.apache.stanbol.ontologymanager.ontonet.MockOsgiContext.ontologyProvider;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -27,7 +28,6 @@ import java.util.HashSet;
import java.util.Hashtable;
import java.util.Set;
-import org.apache.clerezza.rdf.simple.storage.SimpleTcProvider;
import org.apache.stanbol.commons.owl.OWLOntologyManagerFactory;
import org.apache.stanbol.ontologymanager.ontonet.Constants;
import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
@@ -72,8 +72,9 @@ public class TestSessions {
public static void setup() {
Dictionary<String,Object> onmconf = new Hashtable<String,Object>();
// An ONManagerImpl with no store and default settings
- ONManager onm = new ONManagerImpl(ontologyProvider, new OfflineConfigurationImpl(onmconf), spaceFactory, onmconf);
- sesmgr = new SessionManagerImpl(null, onmconf);
+ ONManager onm = new ONManagerImpl(ontologyProvider, new OfflineConfigurationImpl(onmconf),
+ spaceFactory, onmconf);
+ sesmgr = new SessionManagerImpl(ontologyProvider, onmconf);
scopeFactory = onm;
spaceFactory = onm.getOntologySpaceFactory();
scopeRegistry = onm;
@@ -108,7 +109,7 @@ public class TestSessions {
}
Session ses = sesmgr.createSession();
String sesid = ses.getID();
- // FIXME replace with proper tests
+ // TODO replace with proper tests
// assertFalse(scope1.getSessionSpaces().isEmpty());
// assertNotNull(scope1.getSessionSpace(sesid));
// assertFalse(scope3.getSessionSpaces().isEmpty());
Modified: incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java?rev=1356320&r1=1356319&r2=1356320&view=diff
==============================================================================
--- incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java (original)
+++ incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java Mon Jul 2 16:23:12 2012
@@ -16,6 +16,11 @@
*/
package org.apache.stanbol.ontologymanager.web.resources;
+import static javax.ws.rs.HttpMethod.DELETE;
+import static javax.ws.rs.HttpMethod.GET;
+import static javax.ws.rs.HttpMethod.OPTIONS;
+import static javax.ws.rs.HttpMethod.POST;
+import static javax.ws.rs.HttpMethod.PUT;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
import static javax.ws.rs.core.MediaType.MULTIPART_FORM_DATA;
import static javax.ws.rs.core.MediaType.TEXT_HTML;
@@ -224,6 +229,10 @@ public class ScopeResource extends BaseS
return rb.build();
}
+ public Set<Library> getLibraries() {
+ return regMgr.getLibraries();
+ }
+
/*
* Needed for freemarker
*/
@@ -231,14 +240,18 @@ public class ScopeResource extends BaseS
return scope;
}
- public Set<Library> getLibraries() {
- return regMgr.getLibraries();
+ @OPTIONS
+ public Response handleCorsPreflight(@Context HttpHeaders headers) {
+ ResponseBuilder rb = Response.ok();
+ enableCORS(servletContext, rb, headers, GET, POST, PUT, DELETE, OPTIONS);
+ return rb.build();
}
@OPTIONS
- public Response handleCorsPreflight(@Context HttpHeaders headers) {
+ @Path("/{ontologyId:.+}")
+ public Response handleCorsPreflightOntology(@Context HttpHeaders headers) {
ResponseBuilder rb = Response.ok();
- enableCORS(servletContext, rb, headers);
+ enableCORS(servletContext, rb, headers, GET, DELETE, OPTIONS);
return rb.build();
}
@@ -686,7 +699,7 @@ public class ScopeResource extends BaseS
throw new WebApplicationException(ex, INTERNAL_SERVER_ERROR);
}
- ResponseBuilder rb = Response.ok();
+ ResponseBuilder rb = Response.created(uriInfo.getAbsolutePath());
addCORSOrigin(servletContext, rb, headers);
return rb.build();
}