You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stanbol.apache.org by su...@apache.org on 2011/08/07 21:51:11 UTC

svn commit: r1154755 - in /incubator/stanbol/trunk/cmsadapter: cmis/ cmis/src/main/java/org/apache/stanbol/cmsadapter/cmis/repository/ core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/ parent/ servicesapi/src/main/java/org/apache/stanbol/c...

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();
     }