Copied: 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/processor/SubsumptionBridgesProcesser.java
 (from r1101022, 
incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/SubsumptionBridgesProcesser.java)
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/processor/SubsumptionBridgesProcesser.java?p2=incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/processor/SubsumptionBridgesProcesser.java&p1=incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/SubsumptionBridgesProcesser.java&r1=1101022&r2=1124455&rev=1124455&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/SubsumptionBridgesProcesser.java
 (original)
+++ 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/processor/SubsumptionBridgesProcesser.java
 Wed May 18 22:32:40 2011
@@ -1,87 +1,118 @@
-package org.apache.stanbol.cmsadapter.jcr.processor;
+package org.apache.stanbol.cmsadapter.core.processor;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
 import org.apache.stanbol.cmsadapter.servicesapi.helper.MappingModelParser;
 import org.apache.stanbol.cmsadapter.servicesapi.helper.OntologyResourceHelper;
 import org.apache.stanbol.cmsadapter.servicesapi.mapping.MappingEngine;
-import 
org.apache.stanbol.cmsadapter.servicesapi.model.mapping.BridgeDefinitions;
 import 
org.apache.stanbol.cmsadapter.servicesapi.model.mapping.SubsumptionBridge;
 import org.apache.stanbol.cmsadapter.servicesapi.model.web.CMSObject;
-import org.apache.stanbol.cmsadapter.servicesapi.model.web.PropType;
+import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.ClassificationObject;
 import org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DObject;
 import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DObjectAdapter;
 import org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DProperty;
 import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DPropertyDefinition;
+import org.apache.stanbol.cmsadapter.servicesapi.processor.BaseProcessor;
+import org.apache.stanbol.cmsadapter.servicesapi.processor.Processor;
+import org.apache.stanbol.cmsadapter.servicesapi.processor.ProcessorProperties;
+import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccess;
 import 
org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.hp.hpl.jena.ontology.OntClass;
 
-public class SubsumptionBridgesProcesser extends JCRProcessor {
+@Component(immediate = true)
+@Service
+public class SubsumptionBridgesProcesser extends BaseProcessor implements 
Processor, ProcessorProperties {
 
     private static final Logger logger = 
LoggerFactory.getLogger(SubsumptionBridgesProcesser.class);
 
-    public SubsumptionBridgesProcesser(MappingEngine mappingEngine) {
-        super(mappingEngine);
+    private static final Map<String,Object> properties;
+    static {
+        properties = new HashMap<String,Object>();
+        properties.put(PROCESSING_ORDER, CMSOBJECT_PRE);
     }
 
-    public void processUpdates(List<CMSObject> cmsObjects) {
-        BridgeDefinitions bridgeDefinitions = engine.getBridgeDefinitions();
-        DObjectAdapter adapter = engine.getDObjectAdapter();
-        OntologyResourceHelper ontologyResourceHelper = 
engine.getOntologyResourceHelper();
-        List<SubsumptionBridge> subsumptionBridges = MappingModelParser
-                .getSubsumptionBridges(bridgeDefinitions);
-
-        for (SubsumptionBridge bridge : subsumptionBridges) {
-            try {
-                for (CMSObject cmsObject : cmsObjects) {
-                    if (matches(cmsObject.getPath(), 
bridge.getSubjectQuery())) {
-                        OntClass c = 
ontologyResourceHelper.createOntClassByCMSObject(cmsObject);
-                        processSubsumptionBridge(c, bridge, 
adapter.wrapAsDObject(cmsObject));
+    private PropertyProcesser propertyBridgeProcessor = new 
PropertyProcesser();
+
+    @Override
+    public void createObjects(List<Object> objects, MappingEngine engine) {
+        List<DObject> cmsObjects = object2dobject(objects, engine);
+        if (engine.getBridgeDefinitions() != null) {
+            DObjectAdapter adapter = engine.getDObjectAdapter();
+            List<SubsumptionBridge> subsumptionBridges = 
MappingModelParser.getSubsumptionBridges(engine
+                    .getBridgeDefinitions());
+            Object session = engine.getSession();
+            RepositoryAccess accessor = engine.getRepositoryAccess();
+            boolean emptyList = (cmsObjects == null || cmsObjects.size() == 0);
+
+            for (SubsumptionBridge sb : subsumptionBridges) {
+                if (emptyList) {
+                    try {
+                        List<CMSObject> retrievedObjects = 
accessor.getNodeByPath(sb.getSubjectQuery(),
+                            session);
+                        cmsObjects = new ArrayList<DObject>();
+                        for (CMSObject o : retrievedObjects) {
+                            cmsObjects.add(adapter.wrapAsDObject(o));
+                        }
+                    } catch (RepositoryAccessException e) {
+                        logger.warn("Failed to obtain CMS Objects for query 
{}", sb.getSubjectQuery());
+                        continue;
+                    }
+                }
+
+                for (DObject cmsObject : cmsObjects) {
+                    if (matches(cmsObject.getPath(), sb.getSubjectQuery())) {
+                        try {
+                            processSubsumptionBridgeCreate(sb, cmsObject, 
engine);
+                        } catch (RepositoryAccessException e) {
+                            logger.warn("Failed to process CMS Object {}", 
cmsObject);
+                        }
                     }
                 }
-            } catch (RepositoryAccessException e) {
-                logger.warn("Error at retrieving nodes on subsumption bridge 
path", e);
             }
         }
-
     }
 
-    public void processBridges() {
-        BridgeDefinitions bridgeDefinitions = engine.getBridgeDefinitions();
-        DObjectAdapter adapter = engine.getDObjectAdapter();
-        OntologyResourceHelper ontologyResourceHelper = 
engine.getOntologyResourceHelper();
-        List<SubsumptionBridge> subsumptionBridges = MappingModelParser
-                .getSubsumptionBridges(bridgeDefinitions);
-
-        for (SubsumptionBridge bridge : subsumptionBridges) {
-            try {
-                List<CMSObject> cmsObjects = 
accessor.getNodeByPath(bridge.getSubjectQuery(), session);
-                for (CMSObject cmsObject : cmsObjects) {
-                    OntClass c = 
ontologyResourceHelper.createOntClassByCMSObject(cmsObject);
-                    processSubsumptionBridge(c, bridge, 
adapter.wrapAsDObject(cmsObject));
-                }
-            } catch (RepositoryAccessException e) {
-                logger.warn("Error at retrieving nodes on subsumption bridge 
path", e);
-            }
+    private void processSubsumptionBridgeCreate(SubsumptionBridge s,
+                                                DObject parentObject,
+                                                MappingEngine engine) throws 
RepositoryAccessException {
+
+        OntologyResourceHelper orh = engine.getOntologyResourceHelper();
+        OntClass parentClass = 
orh.createOntClassByCMSObject(parentObject.getInstance());
+        if (parentClass != null) {
+            processSubsumptionBridgeCreate(s.getPredicateName(), parentObject, 
engine, parentClass);
+        } else {
+            logger.warn("Failed to create OntClass for CMS Object {} while 
processing bridges for creation",
+                parentObject.getName());
         }
     }
 
-    public void processSubsumptionBridge(OntClass parentClass, 
SubsumptionBridge s, DObject parentObject) throws RepositoryAccessException {
+    public void processSubsumptionBridgeCreate(String predicateName,
+                                               DObject parentObject,
+                                               MappingEngine engine,
+                                               OntClass parentClass) throws 
RepositoryAccessException {
 
-        String predicateName = s.getPredicateName();
+        OntologyResourceHelper orh = engine.getOntologyResourceHelper();
         if (predicateName.equals("child")) {
             // find all child nodes of the parentMode
-
             for (DObject childObject : parentObject.getChildren()) {
-                OntClass childClass = 
ontologyResourceHelper.createOntClassByCMSObject(childObject.getInstance());
-                parentClass.addSubClass(childClass);
+                OntClass childClass = 
orh.createOntClassByCMSObject(childObject.getInstance());
+                if (childClass != null) {
+                    orh.addSubsumptionAssertion(parentClass, childClass);
+                } else {
+                    logger.warn("Failed to create OntClass for child object {} 
while processing CMS Object",
+                        childObject.getName(), parentObject.getName());
+                }
             }
 
         } else {
-
             // find the ranges of the predicate whose subject is parentNode
             for (DProperty property : parentObject.getProperties()) {
                 DPropertyDefinition propDef = property.getDefinition();
@@ -93,35 +124,16 @@ public class SubsumptionBridgesProcesser
                 }
                 String propName = propDef.getName();
                 if (propName.equals(predicateName) || 
propName.contains(predicateName)) {
-                    List<String> propValues = property.getValue();
-                    for (String refValue : propValues) {
-                        try {
-                            // TODO check other object property types such 
WEAKREFERENCE
-                            if (property.getType() == PropType.REFERENCE) {
-
-                                CMSObject childObject = 
accessor.getFirstNodeById(refValue, session);
-                                OntClass childClass = ontologyResourceHelper
-                                        
.createOntClassByCMSObject(childObject);
-                                parentClass.addSubClass(childClass);
-
-                            } else if (property.getType() == PropType.NAME) {
-                                List<CMSObject> childObjects = 
accessor.getNodeByName(refValue, session);
-                                for (CMSObject child : childObjects) {
-                                    OntClass childClass = 
ontologyResourceHelper.createOntClassByCMSObject(child);
-                                    parentClass.addSubClass(childClass);
-                                }
-
-                            } else if (property.getType() == PropType.PATH) {
-                                CMSObject childObject = 
accessor.getFirstNodeByPath(refValue, session);
-                                OntClass childClass = ontologyResourceHelper
-                                        
.createOntClassByCMSObject(childObject);
-                                parentClass.addSubClass(childClass);
-
-                            } else {
-                                logger.warn("ERROR: Predicate path is wrong, 
the range is not a node");
-                            }
-                        } catch (RepositoryAccessException e) {
-                            logger.warn("Error at processing subsumption 
bridge. Skipping...", e);
+                    List<CMSObject> referencedObjects = 
propertyBridgeProcessor.resolveReferenceNodes(
+                        property, engine);
+                    for (CMSObject o : referencedObjects) {
+                        OntClass childClass = orh.createOntClassByCMSObject(o);
+                        if (childClass != null) {
+                            orh.addSubsumptionAssertion(parentClass, 
childClass);
+                        } else {
+                            logger.warn(
+                                "Failed to create OntClass for referenced 
object {} while processing {}",
+                                o.getLocalname(), parentObject.getName());
                         }
                     }
                     break;
@@ -131,4 +143,45 @@ public class SubsumptionBridgesProcesser
             }
         }
     }
+
+    @Override
+    public void deleteObjects(List<Object> objects, MappingEngine engine) {
+        if (engine.getBridgeDefinitions() != null) {
+            List<DObject> cmsObjects = object2dobject(objects, engine);
+            List<SubsumptionBridge> subsumptionBridges = 
MappingModelParser.getSubsumptionBridges(engine
+                    .getBridgeDefinitions());
+            OntologyResourceHelper orh = engine.getOntologyResourceHelper();
+
+            for (SubsumptionBridge sb : subsumptionBridges) {
+                for (DObject cmsObject : cmsObjects) {
+                    if (matches(cmsObject.getPath(), sb.getSubjectQuery())) {
+                        orh.deleteStatementsByReference(cmsObject.getID());
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public Boolean canProcess(Object object) {
+        return object instanceof ClassificationObject;
+    }
+
+    @Override
+    public Map<String,Object> getProcessorProperties() {
+        return properties;
+    }
+
+    private List<DObject> object2dobject(List<Object> objects, MappingEngine 
engine) {
+        List<DObject> dObjects = new ArrayList<DObject>();
+        if (objects != null) {
+            DObjectAdapter adapter = engine.getDObjectAdapter();
+            for (Object o : objects) {
+                if (canProcess(o)) {
+                    dObjects.add(adapter.wrapAsDObject((CMSObject) o));
+                }
+            }
+        }
+        return dObjects;
+    }
 }
\ No newline at end of file

Added: 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/MappingConfiguration.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/MappingConfiguration.java?rev=1124455&view=auto
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/MappingConfiguration.java
 (added)
+++ 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/MappingConfiguration.java
 Wed May 18 22:32:40 2011
@@ -0,0 +1,35 @@
+package org.apache.stanbol.cmsadapter.servicesapi.mapping;
+
+import java.util.List;
+
+import 
org.apache.stanbol.cmsadapter.servicesapi.model.mapping.BridgeDefinitions;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.ConnectionInfo;
+import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.AdapterMode;
+
+import com.hp.hpl.jena.ontology.OntModel;
+
+public interface MappingConfiguration {
+    void setOntModel(OntModel ontModel);
+    
+    OntModel getOntModel();
+    
+    void setBridgeDefinitions(BridgeDefinitions bridgeDefinitions);
+    
+    BridgeDefinitions getBridgeDefinitions();
+    
+    void setAdapterMode(AdapterMode adapterMode);
+    
+    AdapterMode getAdapterMode();
+    
+    void setOntologyURI(String ontologyURI);
+    
+    String getOntologyURI();
+    
+    void setConnectionInfo(ConnectionInfo connectionInfo);
+    
+    ConnectionInfo getConnectionInfo();
+    
+    void setObjects(List<Object> objects);
+    
+    List<Object> getObjects();
+}

Modified: 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/MappingEngine.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/MappingEngine.java?rev=1124455&r1=1124454&r2=1124455&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/MappingEngine.java
 (original)
+++ 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/mapping/MappingEngine.java
 Wed May 18 22:32:40 2011
@@ -1,26 +1,25 @@
 package org.apache.stanbol.cmsadapter.servicesapi.mapping;
 
-import java.util.List;
-
 import org.apache.stanbol.cmsadapter.servicesapi.helper.OntologyResourceHelper;
 import 
org.apache.stanbol.cmsadapter.servicesapi.model.mapping.BridgeDefinitions;
-import org.apache.stanbol.cmsadapter.servicesapi.model.web.ConnectionInfo;
-import org.apache.stanbol.cmsadapter.servicesapi.model.web.CMSObject;
 import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DObjectAdapter;
+import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccess;
 import 
org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
 import 
org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessManager;
 
 import com.hp.hpl.jena.ontology.OntModel;
 
 public interface MappingEngine {
-       void mapCR(OntModel model, String ontologyURI, List<CMSObject> 
cmsObjects) throws RepositoryAccessException;
-       
-    void mapCR(BridgeDefinitions bridges, ConnectionInfo connectionInfo, 
String ontologyURI) throws RepositoryAccessException;
+    void mapCR(MappingConfiguration conf) throws RepositoryAccessException;
 
-    void liftNodeTypes(ConnectionInfo connectionInfo, String ontologyURI);
+    void createModel(MappingConfiguration conf);
 
-    String getOntologyURI();
+    void updateModel(MappingConfiguration conf);
+
+    void deleteModel(MappingConfiguration conf);
 
+    String getOntologyURI();
+    
     OntModel getOntModel();
 
     DObjectAdapter getDObjectAdapter();
@@ -32,6 +31,8 @@ public interface MappingEngine {
     BridgeDefinitions getBridgeDefinitions();
 
     RepositoryAccessManager getRepositoryAccessManager();
-
+    
+    RepositoryAccess getRepositoryAccess();
+    
     NamingStrategy getNamingStrategy();
 }

Added: 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/BaseProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/BaseProcessor.java?rev=1124455&view=auto
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/BaseProcessor.java
 (added)
+++ 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/BaseProcessor.java
 Wed May 18 22:32:40 2011
@@ -0,0 +1,29 @@
+package org.apache.stanbol.cmsadapter.servicesapi.processor;
+
+/**
+ * Base class for which can be extended by any {@link Processor} 
implementation. This class contains common
+ * functions that can be used in {@link Processor} implementations.
+ * 
+ */
+public class BaseProcessor {
+    /**
+     * Detects whether the path of a CMS object specified in <i>path</i> 
parameter is included in the
+     * <i>query</i> parameter.
+     * 
+     * @param path
+     * @param query
+     * @return
+     */
+    protected boolean matches(String path, String query) {
+        if (path != null) {
+            if (query.endsWith("%")) {
+                return path.startsWith(query.substring(0, query.length() - 1))
+                       || path.contentEquals(query.substring(0, query.length() 
- 2));
+            } else {
+                return path.equals(query);
+            }
+        } else {
+            return false;
+        }
+    }
+}

Copied: 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/Processor.java
 (from r1098099, 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/internal/ConceptBridgeProcessor.java)
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/Processor.java?p2=incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/Processor.java&p1=incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/internal/ConceptBridgeProcessor.java&r1=1098099&r2=1124455&rev=1124455&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/internal/ConceptBridgeProcessor.java
 (original)
+++ 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/Processor.java
 Wed May 18 22:32:40 2011
@@ -1,11 +1,13 @@
-package org.apache.stanbol.cmsadapter.servicesapi.internal;
+package org.apache.stanbol.cmsadapter.servicesapi.processor;
 
 import java.util.List;
 
-import org.apache.stanbol.cmsadapter.servicesapi.model.mapping.ConceptBridge;
-import org.apache.stanbol.cmsadapter.servicesapi.model.web.ConnectionInfo;
+import org.apache.stanbol.cmsadapter.servicesapi.mapping.MappingEngine;
 
-public interface ConceptBridgeProcessor {
-       void processConceptBridges(List<ConceptBridge> bridges,
-                       ConnectionInfo connectionInfo);
+public interface Processor {
+    Boolean canProcess(Object cmsObject);
+    
+    void createObjects(List<Object> objects, MappingEngine engine);
+    
+    void deleteObjects(List<Object> objects, MappingEngine engine);
 }

Added: 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/ProcessorProperties.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/ProcessorProperties.java?rev=1124455&view=auto
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/ProcessorProperties.java
 (added)
+++ 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/ProcessorProperties.java
 Wed May 18 22:32:40 2011
@@ -0,0 +1,14 @@
+package org.apache.stanbol.cmsadapter.servicesapi.processor;
+
+import java.util.Map;
+
+public interface ProcessorProperties {
+    String PROCESSING_ORDER = 
"org.apache.stanbol.cmsadapter.servicesapi.processor.processing_order";
+
+    Integer OBJECT_TYPE = 0;
+    Integer CMSOBJECT_POST = 30;
+    Integer CMSOBJECT_DEFAULT = 20; 
+    Integer CMSOBJECT_PRE = 10;
+
+    Map<String,Object> getProcessorProperties();
+}


Reply via email to