Author: suat
Date: Sun Aug 7 19:51:10 2011
New Revision: 1154755
URL: http://svn.apache.org/viewvc?rev=1154755&view=rev
Log:
STANBOL 306:
-Added an implementation which goes through annotated RDF data and updates CMIS
repository accordingly.
Unlike the JCR, this implementation is not able to create an hierarchy from
documents. Instead, it tries to create folder hierarchy from the path of top
root documents and all children documents are created within the same folder
with the root.
Custom annotations retrieved from RDF data are obtained for each document as
stored as
ContentStream of document.
Added:
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/RDFBridgeException.java
Modified:
incubator/stanbol/trunk/cmsadapter/cmis/pom.xml
incubator/stanbol/trunk/cmsadapter/cmis/src/main/java/org/apache/stanbol/cmsadapter/cmis/repository/CMISRDFMapper.java
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/CMSVocabularyAnnotator.java
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/RDFBridgeHelper.java
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/RDFBridgeManager.java
incubator/stanbol/trunk/cmsadapter/parent/pom.xml
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/RDFMapper.java
incubator/stanbol/trunk/cmsadapter/web/src/main/java/org/apache/stanbol/cmsadapter/web/resources/RDFMapperResource.java
Modified: incubator/stanbol/trunk/cmsadapter/cmis/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/cmis/pom.xml?rev=1154755&r1=1154754&r2=1154755&view=diff
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/cmis/pom.xml (original)
+++ incubator/stanbol/trunk/cmsadapter/cmis/pom.xml Sun Aug 7 19:51:10 2011
@@ -46,6 +46,10 @@
<artifactId>org.apache.stanbol.cmsadapter.servicesapi</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.stanbol</groupId>
+
<artifactId>org.apache.stanbol.cmsadapter.core</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr.annotations</artifactId>
</dependency>
@@ -66,6 +70,10 @@
<artifactId>chemistry-opencmis-client-api</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.chemistry.opencmis</groupId>
+ <artifactId>chemistry-opencmis-client-impl</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.apache.clerezza</groupId>
<artifactId>rdf.core</artifactId>
</dependency>
Modified:
incubator/stanbol/trunk/cmsadapter/cmis/src/main/java/org/apache/stanbol/cmsadapter/cmis/repository/CMISRDFMapper.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/cmis/src/main/java/org/apache/stanbol/cmsadapter/cmis/repository/CMISRDFMapper.java?rev=1154755&r1=1154754&r2=1154755&view=diff
==============================================================================
---
incubator/stanbol/trunk/cmsadapter/cmis/src/main/java/org/apache/stanbol/cmsadapter/cmis/repository/CMISRDFMapper.java
(original)
+++
incubator/stanbol/trunk/cmsadapter/cmis/src/main/java/org/apache/stanbol/cmsadapter/cmis/repository/CMISRDFMapper.java
Sun Aug 7 19:51:10 2011
@@ -16,19 +16,220 @@
*/
package org.apache.stanbol.cmsadapter.cmis.repository;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.math.BigInteger;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.chemistry.opencmis.client.api.CmisObject;
+import org.apache.chemistry.opencmis.client.api.Document;
+import org.apache.chemistry.opencmis.client.api.Folder;
+import org.apache.chemistry.opencmis.client.api.Session;
+import org.apache.chemistry.opencmis.commons.PropertyIds;
+import org.apache.chemistry.opencmis.commons.data.ContentStream;
+import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
+import org.apache.chemistry.opencmis.commons.enums.VersioningState;
+import
org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
+import
org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
import org.apache.clerezza.rdf.core.MGraph;
+import org.apache.clerezza.rdf.core.NonLiteral;
+import org.apache.clerezza.rdf.core.Triple;
+import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
+import org.apache.clerezza.rdf.core.serializedform.Serializer;
+import org.apache.clerezza.rdf.core.serializedform.SupportedFormat;
import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
+import org.apache.stanbol.cmsadapter.core.mapping.RDFBridgeHelper;
+import org.apache.stanbol.cmsadapter.servicesapi.helper.CMSAdapterVocabulary;
+import org.apache.stanbol.cmsadapter.servicesapi.mapping.RDFBridgeException;
import org.apache.stanbol.cmsadapter.servicesapi.mapping.RDFMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
-@Component(immediate=true)
+/**
+ * Implementation of {@link RDFMapper} for CMIS repositories. While
transforming annotated RDF data to
+ * repository, this class first takes root objects, i.e object having no
+ * {@link CMSAdapterVocabulary#CMS_OBJECT_PARENT_REF} annotations. All
children of root objects are created as
+ * documents in the same folder with the top root object as CMIS allows
setting a hierarchy with Folders only.<br>
+ * <br>
+ * For example, if an object has path /a/b/c/object path and has child objects
as cobject1 and cobject2. First
+ * a, b, c folders are tried to be created and then all three object are
created in c folder. <br>
+ * <br>
+ * Custom properties to be mapped, child and parent annotations for a document
are selected from the annotated
+ * graph collected in a separate graph, serialized as RDF/XML and serialized
RDF is set as
+ * {@link ContentStream} of document.
+ *
+ * @author suat
+ *
+ */
+@Component(immediate = true)
@Service
public class CMISRDFMapper implements RDFMapper {
+ private static final Logger log =
LoggerFactory.getLogger(CMISRDFMapper.class);
+
+ private static final String DOCUMENT_RDF = "document_RDF";
+
+ private static final String DOCUMENT_RDF_MIME_TYPE = "text/plain";
+
+ @Reference
+ Serializer serializer;
@Override
- public void storeRDFinRepository(Object session, MGraph annotatedGraph) {
- // TODO Auto-generated method stub
+ public void storeRDFinRepository(Object session, MGraph annotatedGraph)
throws RDFBridgeException {
+ List<NonLiteral> rootObjects =
RDFBridgeHelper.getRootObjetsOfGraph(annotatedGraph);
+ for (NonLiteral root : rootObjects) {
+ String documentPath = RDFBridgeHelper.getResourceStringValue(root,
+ CMSAdapterVocabulary.CMS_OBJECT_PATH, annotatedGraph);
+ String documentName = RDFBridgeHelper.getResourceStringValue(root,
+ CMSAdapterVocabulary.CMS_OBJECT_NAME, annotatedGraph);
+ Folder rootFolder = checkCreateParentNodes(documentPath, (Session)
session);
+ createDocument(rootFolder, root, documentName, annotatedGraph,
(Session) session);
+ }
+ }
+
+ private void createDocument(Folder parent,
+ NonLiteral documentURI,
+ String documentName,
+ MGraph graph,
+ Session session) throws RDFBridgeException {
+
+ String documentPath;
+ String parentPath = parent.getPath();
+ if (parentPath.endsWith("/")) {
+ documentPath = parentPath + documentName;
+ } else {
+ documentPath = parentPath + "/" + documentName;
+ }
+ Document d = null;
+ CmisObject o = null;
+ try {
+ o = session.getObjectByPath(documentPath);
+ if (hasType(o, BaseTypeId.CMIS_DOCUMENT)) {
+ d = (Document) o;
+ d.setContentStream(getDocumentContentStream(documentURI,
graph), true);
+ } else {
+ log.warn(
+ "Object having path: {} does not have Folder base type. It
should have Folder base type to allow create documents in it",
+ documentPath);
+ throw new RDFBridgeException("Existing object having path: " +
documentPath
+ + " which does not have Folder
base type");
+ }
+ } catch (CmisObjectNotFoundException e) {
+ log.debug("Object having path: {} does not exists, a new one will
be created", documentPath);
+ d =
parent.createDocument(getProperties(BaseTypeId.CMIS_DOCUMENT.value(),
documentName),
+ getDocumentContentStream(documentURI, graph),
VersioningState.NONE);
+ }
+
+ // create child objects of root object in the same folder with parent
+ Iterator<Triple> it = graph.filter(null,
CMSAdapterVocabulary.CMS_OBJECT_PARENT_REF, documentURI);
+ while (it.hasNext()) {
+ NonLiteral childSubject = it.next().getSubject();
+ String childName =
RDFBridgeHelper.getResourceStringValue(childSubject,
+ CMSAdapterVocabulary.CMS_OBJECT_NAME, graph);
+ createDocument(parent, childSubject, childName, graph, session);
+ }
+ }
+ private ContentStream getDocumentContentStream(NonLiteral documentURI,
MGraph graph) {
+ MGraph documentMGraph = collectedDocumentResources(documentURI, graph);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ serializer.serialize(baos, documentMGraph, SupportedFormat.RDF_XML);
+ byte[] serializedGraph = baos.toByteArray();
+ InputStream stream = new ByteArrayInputStream(baos.toByteArray());
+ BigInteger length = new BigInteger(serializedGraph.length + "");
+ ContentStream contentStream = new ContentStreamImpl(DOCUMENT_RDF,
length, DOCUMENT_RDF_MIME_TYPE,
+ stream);
+ return contentStream;
}
+ private MGraph collectedDocumentResources(NonLiteral subject, MGraph
graph) {
+ MGraph documentMGraph = new SimpleMGraph();
+ // put selected properties to the graph
+ Iterator<Triple> it = graph.filter(subject,
CMSAdapterVocabulary.CMS_OBJECT_HAS_PROPERTY, null);
+ while (it.hasNext()) {
+ UriRef tempPropURI = new
UriRef(RDFBridgeHelper.removeEndCharacters(it.next().getObject()
+ .toString()));
+ UriRef propURI = RDFBridgeHelper.getResourceURIValue(tempPropURI,
+ CMSAdapterVocabulary.CMS_OBJECT_PROPERTY_URI, graph);
+ Iterator<Triple> propTriples = graph.filter(subject, propURI,
null);
+ while (propTriples.hasNext()) {
+ documentMGraph.add(propTriples.next());
+ }
+ }
+ // put selected children annotations to the graph
+ // The process below may be improved by changing RDF annotation
mechanism.
+ it = graph.filter(null, CMSAdapterVocabulary.CMS_OBJECT_PARENT_REF,
subject);
+ while (it.hasNext()) {
+ NonLiteral childSubject = it.next().getSubject();
+ Iterator<Triple> itt = graph.filter(subject, null, childSubject);
+ if (itt.hasNext()) {
+ documentMGraph.add(itt.next());
+ }
+ }
+
+ // put parent annotations to the graph
+ it = graph.filter(subject, CMSAdapterVocabulary.CMS_OBJECT_PARENT_REF,
null);
+ while (it.hasNext()) {
+ documentMGraph.add(it.next());
+ }
+ return documentMGraph;
+ }
+
+ /**
+ * Takes path of a root object in the annotated RDF and tries to check
parent folders. If parent folders
+ * do not exist, they are created.
+ *
+ * @param nodePath
+ * path of a root object
+ * @param session
+ * session to access repository
+ * @return
+ * @throws RDFBridgeException
+ * when another object which is not a folder in the specified
path
+ */
+ private Folder checkCreateParentNodes(String nodePath, Session session)
throws RDFBridgeException {
+ Folder f = session.getRootFolder();
+ String[] pathSections = nodePath.split("/");
+ String currentPath = "/";
+ for (int i = 1; i < pathSections.length - 1; i++) {
+ String folderName = pathSections[i];
+ currentPath += folderName;
+ CmisObject o;
+ try {
+ o = session.getObjectByPath(currentPath);
+ if (hasType(o, BaseTypeId.CMIS_FOLDER)) {
+ f = (Folder) o;
+ currentPath += "/";
+ } else {
+ log.warn(
+ "Object having path: {} does not have Folder base
type. It should have Folder base type to allow create documents in it",
+ currentPath);
+ throw new RDFBridgeException("Existing object having path:
" + currentPath
+ + " which does not have
Folder base type");
+ }
+ } catch (CmisObjectNotFoundException e) {
+ log.debug("Object having path: {} does not exists, a new one
will be created", currentPath);
+ f =
f.createFolder(getProperties(BaseTypeId.CMIS_FOLDER.value(), folderName));
+ }
+ }
+
+ return f;
+ }
+
+ private Map<String,Object> getProperties(String... properties) {
+ Map<String,Object> propMap = new HashMap<String,Object>();
+ propMap.put(PropertyIds.OBJECT_TYPE_ID, properties[0]);
+ propMap.put(PropertyIds.NAME, properties[1]);
+ return propMap;
+ }
+
+ private boolean hasType(CmisObject o, BaseTypeId type) {
+ return o.getBaseTypeId().equals(type);
+ }
}
Modified:
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/CMSVocabularyAnnotator.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/CMSVocabularyAnnotator.java?rev=1154755&r1=1154754&r2=1154755&view=diff
==============================================================================
---
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/CMSVocabularyAnnotator.java
(original)
+++
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/CMSVocabularyAnnotator.java
Sun Aug 7 19:51:10 2011
@@ -16,6 +16,7 @@
*/
package org.apache.stanbol.cmsadapter.core.mapping;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -77,6 +78,7 @@ public class CMSVocabularyAnnotator {
bridge.getTargetResourceValue());
UriRef nameProp = bridge.getNameResource();
String targetRootPath = bridge.getTargetCMSPath();
+ List<NonLiteral> processedURIs = new ArrayList<NonLiteral>();
// add cms object annotations
while (tripleIterator.hasNext()) {
@@ -97,55 +99,12 @@ public class CMSVocabularyAnnotator {
}
// check children and add child and parent annotations
- for (UriRef childPropURI : children.keySet()) {
- Iterator<Triple> childrenIt = graph.filter(subject,
childPropURI, null);
- Map<String,Integer> childNames = new
HashMap<String,Integer>();
- while (childrenIt.hasNext()) {
- Triple child = childrenIt.next();
- NonLiteral childSubject = new
UriRef(RDFBridgeHelper.removeEndCharacters(child
- .getObject().toString()));
-
- String childName = getNameOfProperty(childSubject,
children.get(childPropURI),
- graph);
- if (!childName.contentEquals("")) {
-
RDFBridgeHelper.removeExistingTriple(childSubject,
- CMSAdapterVocabulary.CMS_OBJECT_NAME,
graph);
- graph.add(new TripleImpl(childSubject,
RDFBridgeHelper.RDF_TYPE,
- CMSAdapterVocabulary.CMS_OBJECT));
- graph.add(new TripleImpl(childSubject,
-
CMSAdapterVocabulary.CMS_OBJECT_PARENT_REF, subject));
- graph.add(new TripleImpl(childSubject,
CMSAdapterVocabulary.CMS_OBJECT_NAME,
- literalFactory
-
.createTypedLiteral(getChildName(childName, childNames))));
-
- } else {
- log.warn("Failed to obtain a name for child
property: {}", childPropURI);
- }
- }
- }
+ checkChildren(children, subject, graph);
// check desired properties to be mapped
- Map<UriRef,UriRef> propertiesNamesInBridge = new
HashMap<UriRef,UriRef>();
- for (UriRef propURI : properties.keySet()) {
- String propertyName = getNameOfProperty(subject,
properties.get(propURI), graph);
- if (!propertyName.contentEquals("")) {
- if (!propertiesNamesInBridge.containsKey(propURI))
{
-
- UriRef tempRef = new UriRef(propertyName +
"Prop" + bridge.hashCode());
- propertiesNamesInBridge.put(propURI, tempRef);
-
- graph.add(new TripleImpl(tempRef,
-
CMSAdapterVocabulary.CMS_OBJECT_PROPERTY_NAME, literalFactory
-
.createTypedLiteral(propertyName)));
- graph.add(new TripleImpl(tempRef,
-
CMSAdapterVocabulary.CMS_OBJECT_PROPERTY_URI, propURI));
- }
- graph.add(new TripleImpl(subject,
CMSAdapterVocabulary.CMS_OBJECT_HAS_PROPERTY,
- propertiesNamesInBridge.get(propURI)));
- } else {
- log.warn("Failed to obtain a name for property:
{}", propURI);
- }
- }
+ checkProperties(properties, subject, bridge, graph);
+
+ processedURIs.add(subject);
}
}
@@ -153,13 +112,68 @@ public class CMSVocabularyAnnotator {
* it is assumed that any two object to be created from different
bridges will not be related with
* each other. Otherwise, it is necessary to assign target cms
path for each CMS Object
*/
- annotatePaths(targetRootPath, graph);
+ annotatePaths(processedURIs, targetRootPath, graph);
+ }
+ }
+
+ private static void checkChildren(Map<UriRef,Object> children, NonLiteral
objectURI, MGraph graph) {
+ LiteralFactory literalFactory = LiteralFactory.getInstance();
+ for (UriRef childPropURI : children.keySet()) {
+ Iterator<Triple> childrenIt = graph.filter(objectURI,
childPropURI, null);
+ Map<String,Integer> childNames = new HashMap<String,Integer>();
+ while (childrenIt.hasNext()) {
+ Triple child = childrenIt.next();
+ NonLiteral childSubject = new
UriRef(RDFBridgeHelper.removeEndCharacters(child.getObject()
+ .toString()));
+
+ String childName = getNameOfProperty(childSubject,
children.get(childPropURI), graph);
+ if (!childName.contentEquals("")) {
+ RDFBridgeHelper.removeExistingTriple(childSubject,
CMSAdapterVocabulary.CMS_OBJECT_NAME,
+ graph);
+ graph.add(new TripleImpl(childSubject,
RDFBridgeHelper.RDF_TYPE,
+ CMSAdapterVocabulary.CMS_OBJECT));
+ graph.add(new TripleImpl(childSubject,
CMSAdapterVocabulary.CMS_OBJECT_PARENT_REF,
+ objectURI));
+ graph.add(new TripleImpl(childSubject,
CMSAdapterVocabulary.CMS_OBJECT_NAME,
+
literalFactory.createTypedLiteral(getChildName(childName, childNames))));
+
+ } else {
+ log.warn("Failed to obtain a name for child property: {}",
childPropURI);
+ }
+ }
+ }
+ }
+
+ private static void checkProperties(Map<UriRef,Object> properties,
+ NonLiteral subject,
+ RDFBridge bridge,
+ MGraph graph) {
+
+ LiteralFactory literalFactory = LiteralFactory.getInstance();
+ Map<UriRef,UriRef> propertiesNamesInBridge = new
HashMap<UriRef,UriRef>();
+ for (UriRef propURI : properties.keySet()) {
+ String propertyName = getNameOfProperty(subject,
properties.get(propURI), graph);
+ if (!propertyName.contentEquals("")) {
+ if (!propertiesNamesInBridge.containsKey(propURI)) {
+
+ UriRef tempRef = new UriRef(propertyName + "Prop" +
bridge.hashCode());
+ propertiesNamesInBridge.put(propURI, tempRef);
+
+ graph.add(new TripleImpl(tempRef,
CMSAdapterVocabulary.CMS_OBJECT_PROPERTY_NAME,
+ literalFactory.createTypedLiteral(propertyName)));
+ graph.add(new TripleImpl(tempRef,
CMSAdapterVocabulary.CMS_OBJECT_PROPERTY_URI, propURI));
+ }
+ graph.add(new TripleImpl(subject,
CMSAdapterVocabulary.CMS_OBJECT_HAS_PROPERTY,
+ propertiesNamesInBridge.get(propURI)));
+ } else {
+ log.warn("Failed to obtain a name for property: {}", propURI);
+ }
}
}
- private static void annotatePaths(String targetRootPath, MGraph graph) {
+ private static void annotatePaths(List<NonLiteral> candidates, String
targetRootPath, MGraph graph) {
// first detect root objects
- List<NonLiteral> roots = RDFBridgeHelper.getRootObjetsOfGraph(graph);
+ List<NonLiteral> roots = RDFBridgeHelper.getRootObjectsOfGraph(graph,
candidates);
// assign paths to children recursively
LiteralFactory literalFactory = LiteralFactory.getInstance();
Modified:
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/RDFBridgeHelper.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/RDFBridgeHelper.java?rev=1154755&r1=1154754&r2=1154755&view=diff
==============================================================================
---
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/RDFBridgeHelper.java
(original)
+++
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/RDFBridgeHelper.java
Sun Aug 7 19:51:10 2011
@@ -59,6 +59,18 @@ public class RDFBridgeHelper {
return roots;
}
+ public static List<NonLiteral> getRootObjectsOfGraph(MGraph
annotatedGraph, List<NonLiteral> candidates) {
+ List<NonLiteral> roots = new ArrayList<NonLiteral>();
+ Iterator<Triple> it = annotatedGraph.filter(null, RDF_TYPE,
CMSAdapterVocabulary.CMS_OBJECT);
+ while (it.hasNext()) {
+ Triple t = it.next();
+ if (isRoot(t, annotatedGraph) &&
candidates.contains(t.getSubject())) {
+ roots.add(t.getSubject());
+ }
+ }
+ return roots;
+ }
+
private static boolean isRoot(Triple cmsObjectTriple, MGraph graph) {
NonLiteral subject = cmsObjectTriple.getSubject();
if (graph.filter(subject, CMSAdapterVocabulary.CMS_OBJECT_PARENT_REF,
null).hasNext()) {
Modified:
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/RDFBridgeManager.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/RDFBridgeManager.java?rev=1154755&r1=1154754&r2=1154755&view=diff
==============================================================================
---
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/RDFBridgeManager.java
(original)
+++
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/RDFBridgeManager.java
Sun Aug 7 19:51:10 2011
@@ -27,6 +27,7 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.ReferenceStrategy;
import org.apache.felix.scr.annotations.Service;
import org.apache.stanbol.cmsadapter.servicesapi.mapping.RDFBridge;
+import org.apache.stanbol.cmsadapter.servicesapi.mapping.RDFBridgeException;
import org.apache.stanbol.cmsadapter.servicesapi.mapping.RDFMapper;
import org.apache.stanbol.cmsadapter.servicesapi.model.web.ConnectionInfo;
import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccess;
@@ -58,12 +59,13 @@ public class RDFBridgeManager {
@Reference
RepositoryAccessManager accessManager;
- public void storeRDFToRepository(ConnectionInfo connectionInfo, MGraph
rawRDFData) throws RepositoryAccessException {
- if(rdfBridges.size() == 0) {
+ public void storeRDFToRepository(ConnectionInfo connectionInfo, MGraph
rawRDFData) throws RepositoryAccessException,
+
RDFBridgeException {
+ if (rdfBridges.size() == 0) {
log.info("There is no RDF Bridge to execute");
return;
}
-
+
// According to connection type get RDF mapper, repository accessor,
session
RDFMapper mapper = getRDFMapper(connectionInfo);
RepositoryAccess repositoryAccess =
accessManager.getRepositoryAccessor(connectionInfo);
Modified: incubator/stanbol/trunk/cmsadapter/parent/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/parent/pom.xml?rev=1154755&r1=1154754&r2=1154755&view=diff
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/parent/pom.xml (original)
+++ incubator/stanbol/trunk/cmsadapter/parent/pom.xml Sun Aug 7 19:51:10 2011
@@ -89,6 +89,12 @@
<version>0.4.0</version>
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.chemistry.opencmis</groupId>
+
<artifactId>chemistry-opencmis-client-impl</artifactId>
+ <version>0.4.0</version>
+ <scope>provided</scope>
+ </dependency>
<!-- JCR -->
<dependency>
Added:
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/RDFBridgeException.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/RDFBridgeException.java?rev=1154755&view=auto
==============================================================================
---
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/RDFBridgeException.java
(added)
+++
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/RDFBridgeException.java
Sun Aug 7 19:51:10 2011
@@ -0,0 +1,13 @@
+package org.apache.stanbol.cmsadapter.servicesapi.mapping;
+
+public class RDFBridgeException extends Exception {
+ private static final long serialVersionUID = 7175642856547106105L;
+
+ public RDFBridgeException(String message) {
+ super(message);
+ }
+
+ public RDFBridgeException(String message, Throwable throwable) {
+ super(message, throwable);
+ }
+}
Modified:
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/RDFMapper.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/RDFMapper.java?rev=1154755&r1=1154754&r2=1154755&view=diff
==============================================================================
---
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/RDFMapper.java
(original)
+++
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/RDFMapper.java
Sun Aug 7 19:51:10 2011
@@ -20,7 +20,8 @@ public interface RDFMapper {
* @param annotatedGraph
* This {@link MGraph} object is an enhanced version of raw RDF
data with "CMS vocabulary"
* annotations according to {@link RDFBridge}s.
+ * @throws RDFBridgeException
*/
- void storeRDFinRepository(Object session, MGraph annotatedGraph);
+ void storeRDFinRepository(Object session, MGraph annotatedGraph) throws
RDFBridgeException;
}
Modified:
incubator/stanbol/trunk/cmsadapter/web/src/main/java/org/apache/stanbol/cmsadapter/web/resources/RDFMapperResource.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/web/src/main/java/org/apache/stanbol/cmsadapter/web/resources/RDFMapperResource.java?rev=1154755&r1=1154754&r2=1154755&view=diff
==============================================================================
---
incubator/stanbol/trunk/cmsadapter/web/src/main/java/org/apache/stanbol/cmsadapter/web/resources/RDFMapperResource.java
(original)
+++
incubator/stanbol/trunk/cmsadapter/web/src/main/java/org/apache/stanbol/cmsadapter/web/resources/RDFMapperResource.java
Sun Aug 7 19:51:10 2011
@@ -19,6 +19,7 @@ import org.apache.clerezza.rdf.core.seri
import org.apache.clerezza.rdf.core.serializedform.SupportedFormat;
import org.apache.stanbol.cmsadapter.core.mapping.RDFBridgeManager;
import org.apache.stanbol.cmsadapter.servicesapi.mapping.RDFBridge;
+import org.apache.stanbol.cmsadapter.servicesapi.mapping.RDFBridgeException;
import org.apache.stanbol.cmsadapter.servicesapi.model.web.ConnectionInfo;
import
org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
import org.apache.stanbol.commons.web.base.ContextHelper;
@@ -95,6 +96,9 @@ public class RDFMapperResource extends B
logger.warn("Failed to obtain a session from repository", e);
return Response.status(Status.INTERNAL_SERVER_ERROR)
.entity("Failed to obtain a session from
repository").build();
+ } catch (RDFBridgeException e) {
+ logger.warn(e.getMessage());
+ return
Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).build();
}
return Response.ok().build();
}