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