Author: alexdma
Date: Mon Jul 23 13:18:29 2012
New Revision: 1364623
URL: http://svn.apache.org/viewvc?rev=1364623&view=rev
Log:
* Fixed: Some ontology export methods were still using the graph storage key to
rewrite import statements. This wasn't working well with ontologies created
with a GraphContentInputSource. This fix finally solves STANBOL-649
* Change in the Session REST API: Multiple values for form param "scope" are
now accepted. These values denote all and only the scopes to be appended to the
session. Any other scope will be detached if it was appended earlier. This
change is reflected in the Session HTML client by replacing the combo box with
checkboxes in the scopes table and an "Update" button. Also added hidden form
field and extra RESTful service to make sure that a POST with no parameters
works and causes all scopes to be detached (STANBOL-700).
* Reinstated multiple parse attempts in the RESTful Scope and Session resources
when POSTing the ontology content. Doing it from the GraphContentInputSource
wouldn't work because, although it could reset the BufferedInputStream in order
to retry, it could not to the same with the wrapped stream (STANBOL-422).
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphContentInputSource.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.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/util/OntologyUtils.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
incubator/stanbol/trunk/ontologymanager/web/src/main/resources/org/apache/stanbol/ontologymanager/web/templates/org/apache/stanbol/ontologymanager/web/resources/ScopeResource/index.ftl
incubator/stanbol/trunk/ontologymanager/web/src/main/resources/org/apache/stanbol/ontologymanager/web/templates/org/apache/stanbol/ontologymanager/web/resources/SessionResource/index.ftl
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphContentInputSource.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphContentInputSource.java?rev=1364623&r1=1364622&r2=1364623&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphContentInputSource.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/GraphContentInputSource.java
Mon Jul 23 13:18:29 2012
@@ -127,7 +127,9 @@ public class GraphContentInputSource ext
else formats = Collections.singleton(formatIdentifier);
// TODO guess/lookahead the ontology ID and use it in the graph name.
- UriRef name = new UriRef("ontonet" + "::" +
getClass().getCanonicalName() + "-"
+ UriRef name = new UriRef(
+ // "ontonet" + "::" +
+ getClass().getCanonicalName() + "-"
+ System.currentTimeMillis());
TripleCollection graph = null;
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.java?rev=1364623&r1=1364622&r2=1364623&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.java
Mon Jul 23 13:18:29 2012
@@ -623,7 +623,8 @@ public abstract class AbstractOntologyCo
for (OWLImportsDeclaration oldImp : o.getImportsDeclarations()) {
changes.add(new RemoveImport(o, oldImp));
String s = oldImp.getIRI().toString();
- s = s.substring(s.indexOf("::") + 2, s.length());
+ // FIXME Ugly way to check, but we'll get through with it
+ if (s.contains("::")) s = s.substring(s.indexOf("::") + 2,
s.length());
boolean managed = managedOntologies.contains(oldImp.getIRI());
// For space, always go up at least one
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=1364623&r1=1364622&r2=1364623&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 23 13:18:29 2012
@@ -521,25 +521,34 @@ public class ClerezzaOntologyProvider im
* a second list that will store the level 1 import target
keys, and is not passed to recursive
* calls. Will be ignored if null.
*/
- private void fillImportsReverse(UriRef importing, List<UriRef>
reverseImports, List<UriRef> level1Imports) {
+ private void fillImportsReverse(OWLOntologyID importing,
+ List<OWLOntologyID> reverseImports,
+ List<OWLOntologyID> level1Imports) {
log.debug("Filling reverse imports for {}", importing);
+
// Add the importing ontology first
reverseImports.add(importing);
if (level1Imports != null) level1Imports.add(importing);
+
// Get the graph and explore its imports
- TripleCollection graph = store.getTriples(importing);
+ TripleCollection graph // store.getTriples(importing);
+ = getStoredOntology(getPublicKey(importing), MGraph.class, false);
Iterator<Triple> it = graph.filter(null, RDF.type, OWL.Ontology);
if (!it.hasNext()) return;
Iterator<Triple> it2 = graph.filter(it.next().getSubject(),
OWL.imports, null);
while (it2.hasNext()) {
+ // obj is the *original* import target
Resource obj = it2.next().getObject();
if (obj instanceof UriRef) {
- UriRef key = new UriRef(getKey(IRI.create(((UriRef)
obj).getUnicodeString())));
+ // Right now getKey() is returning the "private" storage ID
+ String key = getKey(IRI.create(((UriRef)
obj).getUnicodeString()));
+ // TODO this will not be needed when getKey() and
getPublicKey() return the proper public key.
+ OWLOntologyID oid = keymap.getReverseMapping(new UriRef(key));
// Check used for breaking cycles in the import graph.
// (Unoptimized, should not use contains() for stacks.)
- if (!reverseImports.contains(key)) {
- if (level1Imports != null) level1Imports.add(key);
- fillImportsReverse(key, reverseImports, null);
+ if (!reverseImports.contains(oid)) {
+ if (level1Imports != null) level1Imports.add(oid);
+ fillImportsReverse(oid, reverseImports, null);
}
}
}
@@ -1290,7 +1299,7 @@ public class ClerezzaOntologyProvider im
// Never try to import
mgr.addIRIMapper(new PhonyIRIMapper(Collections.<IRI> emptySet()));
- Set<UriRef> loaded = new HashSet<UriRef>();
+ Set<OWLOntologyID> loaded = new HashSet<OWLOntologyID>();
TripleCollection graph = store.getTriples(graphName);
@@ -1302,9 +1311,9 @@ public class ClerezzaOntologyProvider im
NonLiteral nl = itt.next().getSubject();
if (nl instanceof UriRef) ontologyId = (UriRef) nl;
}
- List<UriRef> revImps = new Stack<UriRef>();
- List<UriRef> lvl1 = new Stack<UriRef>();
- fillImportsReverse(graphName, revImps, lvl1);
+ List<OWLOntologyID> revImps = new Stack<OWLOntologyID>();
+ List<OWLOntologyID> lvl1 = new Stack<OWLOntologyID>();
+ fillImportsReverse(keymap.getReverseMapping(graphName), revImps, lvl1);
// If not set to merge (either by policy of by force), adopt the set
import policy.
if (!forceMerge &&
!ImportManagementPolicy.MERGE.equals(getImportManagementPolicy())) {
@@ -1314,7 +1323,7 @@ public class ClerezzaOntologyProvider im
List<OWLOntologyChange> changes = new
ArrayList<OWLOntologyChange>();
OWLDataFactory df = OWLManager.getOWLDataFactory();
- List<UriRef> listToUse;
+ List<OWLOntologyID> listToUse;
switch (getImportManagementPolicy()) {
case FLATTEN:
listToUse = revImps;
@@ -1327,10 +1336,9 @@ public class ClerezzaOntologyProvider im
break;
}
- for (UriRef ref : listToUse)
- if (!loaded.contains(ref) && !ref.equals(graphName)) {
- changes.add(new AddImport(o,
df.getOWLImportsDeclaration(IRI.create(ref
- .getUnicodeString()))));
+ for (OWLOntologyID ref : listToUse)
+ if (!loaded.contains(ref) &&
!ref.equals(keymap.getReverseMapping(graphName))) {
+ changes.add(new AddImport(o,
df.getOWLImportsDeclaration(ref.getOntologyIRI())));
loaded.add(ref);
}
o.getOWLOntologyManager().applyChanges(changes);
@@ -1349,10 +1357,12 @@ public class ClerezzaOntologyProvider im
// The set of triples that will be excluded from the merge
Set<Triple> exclusions = new HashSet<Triple>();
// Examine all reverse imports
- for (UriRef ref : revImps)
+ for (OWLOntologyID ref : revImps)
if (!loaded.contains(ref)) {
// Get the triples
- TripleCollection imported = store.getTriples(ref);
+ TripleCollection imported =
+ // store.getTriples(ref);
+ getStoredOntology(getKey(ref), MGraph.class, false);
// For each owl:Ontology
Iterator<Triple> remove = imported.filter(null, RDF.type,
OWL.Ontology);
while (remove.hasNext()) {
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/util/OntologyUtils.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/util/OntologyUtils.java?rev=1364623&r1=1364622&r2=1364623&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/util/OntologyUtils.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/util/OntologyUtils.java
Mon Jul 23 13:18:29 2012
@@ -302,6 +302,13 @@ public class OntologyUtils {
return result;
}
+ public static List<String> getPreferredFormats() {
+ List<String> result = new ArrayList<String>();
+ for (String f : preferredFormats)
+ result.add(f);
+ return result;
+ }
+
public static void printOntology(OWLOntology o, PrintStream printer) {
OWLOntologyManager mgr = OWLManager.createOWLOntologyManager();
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=1364623&r1=1364622&r2=1364623&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 23 13:18:29 2012
@@ -50,6 +50,8 @@ import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.SortedSet;
@@ -96,6 +98,7 @@ import org.apache.stanbol.ontologymanage
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.impl.util.OntologyUtils;
import org.apache.stanbol.ontologymanager.registry.api.RegistryManager;
import org.apache.stanbol.ontologymanager.registry.api.model.Library;
import org.apache.stanbol.ontologymanager.registry.io.LibrarySource;
@@ -224,11 +227,26 @@ public class ScopeResource extends BaseS
@GET
@Path("/core")
+ @Produces(value = {APPLICATION_JSON, N3, N_TRIPLE, RDF_JSON})
+ public Response getCoreSpaceGraph(@PathParam("scopeid") String scopeid,
+ @DefaultValue("false")
@QueryParam("merge") boolean merge,
+ @Context UriInfo uriInfo,
+ @Context HttpHeaders headers) {
+ OntologySpace space = scope.getCoreSpace();
+ IRI prefix = IRI.create(getPublicBaseUri() + "ontonet/ontology/");
+ Graph o = space.export(Graph.class, merge, prefix);
+ ResponseBuilder rb = Response.ok(o);
+ addCORSOrigin(servletContext, rb, headers);
+ return rb.build();
+ }
+
+ @GET
+ @Path("/core")
@Produces(value = {RDF_XML, TURTLE, X_TURTLE, MANCHESTER_OWL,
FUNCTIONAL_OWL, OWL_XML, TEXT_PLAIN})
- public Response getCoreSpace(@PathParam("scopeid") String scopeid,
- @DefaultValue("false") @QueryParam("merge")
boolean merge,
- @Context UriInfo uriInfo,
- @Context HttpHeaders headers) {
+ public Response getCoreSpaceOWL(@PathParam("scopeid") String scopeid,
+ @DefaultValue("false")
@QueryParam("merge") boolean merge,
+ @Context UriInfo uriInfo,
+ @Context HttpHeaders headers) {
OntologySpace space = scope.getCoreSpace();
IRI prefix = IRI.create(getPublicBaseUri() + "ontonet/ontology/");
OWLOntology o = space.export(OWLOntology.class, merge, prefix);
@@ -250,11 +268,26 @@ public class ScopeResource extends BaseS
@GET
@Path("/custom")
+ @Produces(value = {APPLICATION_JSON, N3, N_TRIPLE, RDF_JSON})
+ public Response getCustomSpaceGraph(@PathParam("scopeid") String scopeid,
+ @DefaultValue("false")
@QueryParam("merge") boolean merge,
+ @Context UriInfo uriInfo,
+ @Context HttpHeaders headers) {
+ OntologySpace space = scope.getCustomSpace();
+ IRI prefix = IRI.create(getPublicBaseUri() + "ontonet/ontology/");
+ Graph o = space.export(Graph.class, merge, prefix);
+ ResponseBuilder rb = Response.ok(o);
+ addCORSOrigin(servletContext, rb, headers);
+ return rb.build();
+ }
+
+ @GET
+ @Path("/custom")
@Produces(value = {RDF_XML, TURTLE, X_TURTLE, MANCHESTER_OWL,
FUNCTIONAL_OWL, OWL_XML, TEXT_PLAIN})
- public Response getCustomSpace(@PathParam("scopeid") String scopeid,
- @DefaultValue("false") @QueryParam("merge")
boolean merge,
- @Context UriInfo uriInfo,
- @Context HttpHeaders headers) {
+ public Response getCustomSpaceOWL(@PathParam("scopeid") String scopeid,
+ @DefaultValue("false")
@QueryParam("merge") boolean merge,
+ @Context UriInfo uriInfo,
+ @Context HttpHeaders headers) {
OntologySpace space = scope.getCustomSpace();
IRI prefix = IRI.create(getPublicBaseUri() + "ontonet/ontology/");
OWLOntology o = space.export(OWLOntology.class, merge, prefix);
@@ -588,15 +621,22 @@ public class ScopeResource extends BaseS
// Then add the file
OntologyInputSource<?> src = null;
if (fileOk) {
- try {
- // Use a buffered stream that can be reset for multiple
attempts.
- InputStream content = new BufferedInputStream(new
FileInputStream(file));
- src = new GraphContentInputSource(content, format,
provider.getStore());
- } catch (OntologyLoadingException e) {
- throw new WebApplicationException(e, BAD_REQUEST);
- } catch (IOException e) {
- throw new WebApplicationException(e, BAD_REQUEST);
- }
+ Collection<String> formats;
+ if (format == null || "".equals(format.trim())) formats =
OntologyUtils.getPreferredFormats();
+ else formats = Collections.singleton(format);
+
+ for (String f : formats)
+ try {
+ // Use a buffered stream that can be reset for
multiple attempts.
+ InputStream content = new BufferedInputStream(new
FileInputStream(file));
+ src = new GraphContentInputSource(content, format,
provider.getStore());
+ } catch (OntologyLoadingException e) {
+ // throw new WebApplicationException(e, BAD_REQUEST);
+ continue;
+ } catch (IOException e) {
+ // throw new WebApplicationException(e, BAD_REQUEST);
+ continue;
+ }
} else if (location != null) {
try {
src = new RootOntologyIRISource(location);
@@ -623,7 +663,11 @@ public class ScopeResource extends BaseS
// FIXME ugly but will have to do for the time being
String uri = key.split("::")[1];
if (uri != null && !uri.isEmpty()) {
- rb = Response.created(getCreatedResource(uri));
+ rb = Response.seeOther(URI.create("/ontonet/ontology/" +
scope.getID() + "/" + uri)/*
+
* getCreatedResource
+
* (
+
* uri)
+
*/);
} else rb = Response.ok();
} else rb = Response.status(INTERNAL_SERVER_ERROR);
} else throw new WebApplicationException(BAD_REQUEST);
Modified:
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionResource.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionResource.java?rev=1364623&r1=1364622&r2=1364623&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionResource.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/SessionResource.java
Mon Jul 23 13:18:29 2012
@@ -25,6 +25,7 @@ import static javax.ws.rs.core.MediaType
import static javax.ws.rs.core.MediaType.MULTIPART_FORM_DATA;
import static javax.ws.rs.core.MediaType.TEXT_HTML;
import static javax.ws.rs.core.MediaType.TEXT_PLAIN;
+import static javax.ws.rs.core.MediaType.WILDCARD;
import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
import static javax.ws.rs.core.Response.Status.CONFLICT;
import static javax.ws.rs.core.Response.Status.FORBIDDEN;
@@ -49,6 +50,8 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
+import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.SortedSet;
@@ -94,6 +97,7 @@ import org.apache.stanbol.ontologymanage
import org.apache.stanbol.ontologymanager.ontonet.api.session.Session;
import
org.apache.stanbol.ontologymanager.ontonet.api.session.SessionLimitException;
import org.apache.stanbol.ontologymanager.ontonet.api.session.SessionManager;
+import org.apache.stanbol.ontologymanager.ontonet.impl.util.OntologyUtils;
import org.apache.stanbol.ontologymanager.web.util.OntologyPrettyPrintResource;
import org.coode.owlapi.manchesterowlsyntax.ManchesterOWLSyntaxOntologyFormat;
import org.semanticweb.owlapi.model.IRI;
@@ -232,6 +236,13 @@ public class SessionResource extends Bas
/*
* Needed for freemarker
*/
+ public Set<OntologyScope> getAllScopes() {
+ return onMgr.getRegisteredScopes();
+ }
+
+ /*
+ * Needed for freemarker
+ */
public Set<OntologyScope> getAppendableScopes() {
Set<OntologyScope> notAppended = new HashSet<OntologyScope>();
for (OntologyScope sc : onMgr.getRegisteredScopes())
@@ -242,10 +253,10 @@ public class SessionResource extends Bas
/*
* Needed for freemarker
*/
- public Set<OntologyScope> getAppendedScopes() {
- Set<OntologyScope> appended = new HashSet<OntologyScope>();
+ public Set<String> getAppendedScopes() {
+ Set<String> appended = new HashSet<String>();
for (OntologyScope sc : onMgr.getRegisteredScopes())
- if (session.getAttachedScopes().contains(sc.getID()))
appended.add(sc);
+ if (session.getAttachedScopes().contains(sc.getID()))
appended.add(sc.getID());
return appended;
}
@@ -536,10 +547,25 @@ public class SessionResource extends Bas
return rb.build();
}
- @SuppressWarnings("unused")
+ @POST
+ @Produces({WILDCARD})
+ public Response emptyPost(@Context HttpHeaders headers) {
+ log.debug(" post(no data)");
+ for (OntologyScope sc : getAllScopes()) { // First remove appended
scopes not in the list
+ String scid = sc.getID();
+ if (getAppendedScopes().contains(scid)) {
+ session.detachScope(scid);
+ log.info("Removed scope \"{]\".", scid);
+ }
+ }
+ ResponseBuilder rb = Response.ok();
+ addCORSOrigin(servletContext, rb, headers);
+ return rb.build();
+ }
+
@POST
@Consumes({MULTIPART_FORM_DATA})
- @Produces({TEXT_HTML, TEXT_PLAIN, RDF_XML, TURTLE, X_TURTLE, N3})
+ @Produces({WILDCARD})
public Response postOntology(FormDataMultiPart data, @Context HttpHeaders
headers) {
log.debug(" post(FormDataMultiPart data)");
long before = System.currentTimeMillis();
@@ -548,7 +574,7 @@ public class SessionResource extends Bas
IRI location = null;
File file = null; // If found, it takes precedence over location.
String format = null;
- OntologyScope scope = null;
+ Set<String> toAppend = new HashSet<String>();
for (BodyPart bpart : data.getBodyParts()) {
log.debug("Found body part of type {}", bpart.getClass());
@@ -566,7 +592,8 @@ public class SessionResource extends Bas
throw new WebApplicationException(ex, BAD_REQUEST);
}
if (name.equals("scope")) {
- scope = onMgr.getScope(dbp.getValue());
+ log.info("Request to append scope \"{}\".",
dbp.getValue());
+ toAppend.add(dbp.getValue());
}
}
}
@@ -575,24 +602,30 @@ public class SessionResource extends Bas
// Then add the file
OntologyInputSource<?> src = null;
if (fileOk) { // File first
- try {
- // Use a buffered stream that can be reset for multiple
attempts.
- long b4buf = System.currentTimeMillis();
- InputStream content = new BufferedInputStream(new
FileInputStream(file));
- // new FileInputStream(file);
- log.debug("Streams created in {} ms",
System.currentTimeMillis() - b4buf);
- log.debug("Creating ontology input source...");
- b4buf = System.currentTimeMillis();
- src = new GraphContentInputSource(content, format,
provider.getStore());
- log.debug("Done in {} ms", System.currentTimeMillis() -
b4buf);
- log.debug("SUCCESS parse with format {}.", format);
- } catch (OntologyLoadingException e) {
- log.error("FAILURE parse with format {}.", format);
- throw new WebApplicationException(e, BAD_REQUEST);
- } catch (IOException e) {
- log.error("FAILURE parse with format {}.", format);
- throw new WebApplicationException(e, BAD_REQUEST);
- }
+ Collection<String> formats;
+ if (format == null || "".equals(format.trim())) formats =
OntologyUtils.getPreferredFormats();
+ else formats = Collections.singleton(format);
+
+ for (String f : formats)
+ try {
+ log.debug("Trying format {}.", f);
+ long b4buf = System.currentTimeMillis();
+ // Recreate the stream on each attempt
+ InputStream content = new BufferedInputStream(new
FileInputStream(file));
+ log.debug("Streams created in {} ms",
System.currentTimeMillis() - b4buf);
+ log.debug("Creating ontology input source...");
+ b4buf = System.currentTimeMillis();
+ src = new GraphContentInputSource(content, f,
provider.getStore());
+ log.debug("Done in {} ms", System.currentTimeMillis()
- b4buf);
+ log.info("SUCCESS parse with format {}.", f);
+ } catch (OntologyLoadingException e) {
+ log.debug("FAILURE parse with format {}.", f);
+ continue;
+ } catch (IOException e) {
+ log.debug("FAILURE parse with format {} (I/O error).",
f);
+ continue;
+ }
+ log.debug("No more formats to try.");
} else if (location != null) {
try {
src = new RootOntologyIRISource(location);
@@ -615,15 +648,30 @@ public class SessionResource extends Bas
log.debug("Addition done in {} ms.",
System.currentTimeMillis() - b4add);
log.debug("Storage key : {}", key);
String uri = key.split("::")[1];
- if (uri != null && !uri.isEmpty()) rb =
Response.created(URI.create("/" + uri));
- else rb = Response.ok();
+ if (uri != null && !uri.isEmpty()) rb =
Response.seeOther(URI.create("/ontonet/session/"
+
+ session.getID() + "/"
+
+ uri));
+ else rb = Response.seeOther(URI.create("/ontonet/session/" +
session.getID()));
} else rb = Response.status(INTERNAL_SERVER_ERROR);
- } else if (scope != null) { // Scope comes next
- log.info("Attaching scope \"{}\" to session \"{}\".",
scope.getID(), session.getID());
- session.attachScope(scope.getID());
+ } else // Now check scopes
+ if (!toAppend.isEmpty() || (toAppend.isEmpty() &&
!getAppendedScopes().isEmpty())) {
+ for (OntologyScope sc : getAllScopes()) { // First remove appended
scopes not in the list
+ String scid = sc.getID();
+ if (!toAppend.contains(scid) &&
getAppendedScopes().contains(scid)) {
+ session.detachScope(scid);
+ log.info("Removed scope \"{}\".", scid);
+ }
+ }
+ for (String scid : toAppend) { // Then add all the scopes in the
list
+ if (!getAppendedScopes().contains(scid)) {
+ log.info("Appending scope \"{}\" to session \"{}\".",
scid, session.getID());
+ session.attachScope(scid);
+ log.info("Appended scope \"{}\".", scid);
+ }
+ }
rb = Response.seeOther(URI.create("/ontonet/session/" +
session.getID()));
} else {
- log.error("Nothing to add to session {}.", session.getID());
+ log.error("Nothing to do with session {}.", session.getID());
throw new WebApplicationException(BAD_REQUEST);
}
// rb.header(HttpHeaders.CONTENT_TYPE, TEXT_HTML + "; charset=utf-8");
Modified:
incubator/stanbol/trunk/ontologymanager/web/src/main/resources/org/apache/stanbol/ontologymanager/web/templates/org/apache/stanbol/ontologymanager/web/resources/ScopeResource/index.ftl
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/web/src/main/resources/org/apache/stanbol/ontologymanager/web/templates/org/apache/stanbol/ontologymanager/web/resources/ScopeResource/index.ftl?rev=1364623&r1=1364622&r2=1364623&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/web/src/main/resources/org/apache/stanbol/ontologymanager/web/templates/org/apache/stanbol/ontologymanager/web/resources/ScopeResource/index.ftl
(original)
+++
incubator/stanbol/trunk/ontologymanager/web/src/main/resources/org/apache/stanbol/ontologymanager/web/templates/org/apache/stanbol/ontologymanager/web/resources/ScopeResource/index.ftl
Mon Jul 23 13:18:29 2012
@@ -23,6 +23,7 @@
<div class="panel" id="webview">
+ <br/>
<!-- FIXME class names should be generic, and not bound to a specific
functionality (here engines->reasoning services)-->
<div class="enginelisting">
<div class="collapsed">
@@ -85,7 +86,7 @@
</div>
<script>
- $(".enginelisting p").click(function () {
+ $(".collapseheader").click(function () {
$(this).parents("div").toggleClass("collapsed");
});
</script>
@@ -101,7 +102,7 @@
</tr>
<#list ontologies as ontology>
<tr>
- <td><a
href="/ontonet/ontology/${it.scope.ID}/${ontology}">${ontology}</a></td>
+ <td><a
href="${it.publicBaseUri}ontonet/ontology/${it.scope.ID}/${ontology}">${ontology}</a></td>
</tr>
</#list>
</div>
Modified:
incubator/stanbol/trunk/ontologymanager/web/src/main/resources/org/apache/stanbol/ontologymanager/web/templates/org/apache/stanbol/ontologymanager/web/resources/SessionResource/index.ftl
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/web/src/main/resources/org/apache/stanbol/ontologymanager/web/templates/org/apache/stanbol/ontologymanager/web/resources/SessionResource/index.ftl?rev=1364623&r1=1364622&r2=1364623&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/web/src/main/resources/org/apache/stanbol/ontologymanager/web/templates/org/apache/stanbol/ontologymanager/web/resources/SessionResource/index.ftl
(original)
+++
incubator/stanbol/trunk/ontologymanager/web/src/main/resources/org/apache/stanbol/ontologymanager/web/templates/org/apache/stanbol/ontologymanager/web/resources/SessionResource/index.ftl
Mon Jul 23 13:18:29 2012
@@ -23,8 +23,15 @@
<div class="panel" id="webview">
- <h3>Load an ontology</h3>
- <form method="POST" enctype="multipart/form-data" accept-charset="utf-8">
+ <br/>
+ <!-- FIXME class names should be generic, and not bound to a specific
functionality (here engines->reasoning services)-->
+ <div class="enginelisting">
+ <div class="collapsed">
+ <p class="collapseheader"><b>Load an ontology</b></p>
+ <div class="collapsable">
+ <br/>
+
+ <form id="loadfromfile" method="POST" enctype="multipart/form-data"
accept-charset="utf-8">
<fieldset>
<legend>From a local file</legend>
<p><b>File:</b> <input type="file" name="file"/>
@@ -56,24 +63,19 @@
</p>
</fieldset>
</form>
-
- <form method="POST" enctype="multipart/form-data" accept-charset="utf-8">
- <fieldset>
- <legend>Append a scope</legend>
- <p><b>Scope ID:</b>
- <select name="scope">
- <option value="null"><please select a scope></option>
- <#list it.appendableScopes as scope>
- <option value="${scope.ID}">${scope.ID}</option>
- </#list>
- </select>
- <input type="submit" value="Append"/>
- </p>
- </fieldset>
- </form>
Note: OWL import targets will be included. Ontology loading is set to fail
on missing imports.
+ </div>
+ </div>
+ </div>
+
+ <script>
+ $(".collapseheader").click(function () {
+ $(this).parents("div").toggleClass("collapsed");
+ });
+ </script>
+
<h3>Stored ontologies</h3>
<#assign ontologies = it.ontologies>
<div class="storeContents">
@@ -84,28 +86,34 @@
</tr>
<#list ontologies as ontology>
<tr>
- <td><a
href="/ontonet/session/${it.session.ID}/${ontology}">${ontology}</a></td>
+ <td><a
href="${it.publicBaseUri}ontonet/session/${it.session.ID}/${ontology}">${ontology}</a></td>
</tr>
</#list>
</div>
</table> <!-- allOntologies -->
</div>
- <h3>Appended Scopes</h3>
+ <form method="POST" enctype="multipart/form-data" accept-charset="utf-8">
+ <input type="hidden" name="sessionid" value="${it.session.ID}"/>
+ <h3>Appendable Scopes</h3>
<div class="storeContents">
<table id="appSc">
<div>
<tr>
- <th>Name</th>
+ <th width="1%">Appended</th><th>Name</th>
</tr>
- <#list it.appendedScopes as appended>
+ <#assign scs = it.appendedScopes>
+ <#list it.allScopes as sc>
<tr>
- <td><a
href="/ontonet/ontology/${appended.ID}">${appended.ID}</a></td>
+ <td><input type="checkbox" name="scope"
value="${sc.ID}"${scs?seq_contains(sc.ID)?string(" checked", "")}/></td>
+ <td><a href="/ontonet/ontology/${sc.ID}">${sc.ID}</a></td>
</tr>
</#list>
</div>
</table> <!-- appSc -->
+ <input type="submit" value="Update"/>
</div>
+ </form>
</div> <!-- web view -->