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/06 11:42:32 UTC
svn commit: r1154473 - in /incubator/stanbol/trunk/cmsadapter:
cmis/src/main/java/org/apache/stanbol/cmsadapter/cmis/processor/ core/
core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/
jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/pro...
Author: suat
Date: Sat Aug 6 09:42:32 2011
New Revision: 1154473
URL: http://svn.apache.org/viewvc?rev=1154473&view=rev
Log:
STANBOL 307:
-Removed dependencies to jcr and cmis bundles from core bundle
-JCRNodeTypeLifter and CMISNodeTypeLifter has become SCR component and service so that they can be accessible from the MappingEngineImpl. They also implement TypeLifter interface.
Added:
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/TypeLifter.java
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/TypeLifterManager.java
Modified:
incubator/stanbol/trunk/cmsadapter/cmis/src/main/java/org/apache/stanbol/cmsadapter/cmis/processor/CMISNodeTypeLifter.java
incubator/stanbol/trunk/cmsadapter/core/pom.xml
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/MappingEngineImpl.java
incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/JCRNodeTypeLifter.java
Modified: incubator/stanbol/trunk/cmsadapter/cmis/src/main/java/org/apache/stanbol/cmsadapter/cmis/processor/CMISNodeTypeLifter.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/cmis/src/main/java/org/apache/stanbol/cmsadapter/cmis/processor/CMISNodeTypeLifter.java?rev=1154473&r1=1154472&r2=1154473&view=diff
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/cmis/src/main/java/org/apache/stanbol/cmsadapter/cmis/processor/CMISNodeTypeLifter.java (original)
+++ incubator/stanbol/trunk/cmsadapter/cmis/src/main/java/org/apache/stanbol/cmsadapter/cmis/processor/CMISNodeTypeLifter.java Sat Aug 6 09:42:32 2011
@@ -27,10 +27,13 @@ import org.apache.chemistry.opencmis.cli
import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
import org.apache.stanbol.cmsadapter.cmis.repository.CMISModelMapper;
import org.apache.stanbol.cmsadapter.servicesapi.helper.OntologyResourceHelper;
import org.apache.stanbol.cmsadapter.servicesapi.mapping.MappingEngine;
import org.apache.stanbol.cmsadapter.servicesapi.model.web.PropType;
+import org.apache.stanbol.cmsadapter.servicesapi.processor.TypeLifter;
import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -39,7 +42,9 @@ import com.hp.hpl.jena.ontology.OntClass
import com.hp.hpl.jena.ontology.OntProperty;
import com.hp.hpl.jena.rdf.model.Resource;
-public class CMISNodeTypeLifter {
+@Component(immediate = true)
+@Service
+public class CMISNodeTypeLifter implements TypeLifter {
private static final Logger logger = LoggerFactory.getLogger(CMISNodeTypeLifter.class);
// FIXME Make adjustable
private static final int DESCENDANT_DEPTH = 1000;
@@ -47,6 +52,11 @@ public class CMISNodeTypeLifter {
private Session session;
private OntologyResourceHelper orh;
+ //dummy constructor
+ public CMISNodeTypeLifter() {
+
+ }
+
public CMISNodeTypeLifter(MappingEngine engine) {
this.session = (Session) engine.getSession();
this.orh = engine.getOntologyResourceHelper();
@@ -111,7 +121,11 @@ public class CMISNodeTypeLifter {
* @param mappingFileContent
* @throws Exception
*/
- public void liftNodes() throws RepositoryAccessException {
+ @Override
+ public void liftNodeTypes(MappingEngine engine) throws RepositoryAccessException {
+ this.orh = engine.getOntologyResourceHelper();
+ this.session = (Session) engine.getSession();
+
try {
// Create classes for Folder Object Type and its descendants
createClassesForObjectTypes(getAllFolderTypes());
@@ -124,7 +138,6 @@ public class CMISNodeTypeLifter {
}
}
- // TODO ID ler icin gereken deisiklik 2-
/**
* Creates classes for the given Object Types Furthermore, creates subsumption relations using the
* parentId field
@@ -216,4 +229,9 @@ public class CMISNodeTypeLifter {
}
return false;
}
+
+ @Override
+ public boolean canLift(String type) {
+ return type.contentEquals("CMIS");
+ }
}
Modified: incubator/stanbol/trunk/cmsadapter/core/pom.xml
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/pom.xml?rev=1154473&r1=1154472&r2=1154473&view=diff
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/core/pom.xml (original)
+++ incubator/stanbol/trunk/cmsadapter/core/pom.xml Sat Aug 6 09:42:32 2011
@@ -60,10 +60,6 @@
<groupId>org.apache.stanbol</groupId>
<artifactId>org.apache.stanbol.cmsadapter.servicesapi</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.stanbol</groupId>
- <artifactId>org.apache.stanbol.cmsadapter.jcr</artifactId>
- </dependency>
<!-- Enhancer -->
<dependency>
@@ -128,10 +124,6 @@
<artifactId>commons-collections</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.stanbol</groupId>
- <artifactId>org.apache.stanbol.cmsadapter.cmis</artifactId>
- </dependency>
- <dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
</dependency>
Modified: incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/MappingEngineImpl.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/MappingEngineImpl.java?rev=1154473&r1=1154472&r2=1154473&view=diff
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/MappingEngineImpl.java (original)
+++ incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/mapping/MappingEngineImpl.java Sat Aug 6 09:42:32 2011
@@ -22,19 +22,13 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
-import javax.jcr.RepositoryException;
-
-import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.felix.scr.annotations.Service;
-import org.apache.stanbol.cmsadapter.cmis.processor.CMISNodeTypeLifter;
import org.apache.stanbol.cmsadapter.core.decorated.DObjectFactoryImp;
-import org.apache.stanbol.cmsadapter.jcr.processor.JCRNodeTypeLifter;
import org.apache.stanbol.cmsadapter.servicesapi.helper.OntologyResourceHelper;
import org.apache.stanbol.cmsadapter.servicesapi.mapping.MappingConfiguration;
import org.apache.stanbol.cmsadapter.servicesapi.mapping.MappingEngine;
@@ -45,6 +39,8 @@ import org.apache.stanbol.cmsadapter.ser
import org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DObjectAdapter;
import org.apache.stanbol.cmsadapter.servicesapi.processor.Processor;
import org.apache.stanbol.cmsadapter.servicesapi.processor.ProcessorProperties;
+import org.apache.stanbol.cmsadapter.servicesapi.processor.TypeLifter;
+import org.apache.stanbol.cmsadapter.servicesapi.processor.TypeLifterManager;
import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccess;
import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessManager;
@@ -69,7 +65,11 @@ public class MappingEngineImpl implement
private List<Processor> processors = new ArrayList<Processor>();
@Reference
+ private TypeLifterManager typeLifterManager;
+
+ @Reference
private RestClient storeClient;
+
@Reference
private RepositoryAccessManager accessManager;
@@ -82,11 +82,6 @@ public class MappingEngineImpl implement
private DObjectAdapter adapter;
private NamingStrategy namingStrategy;
- @Activate
- protected void activate(final Map<?,?> properties) {
- // TODO need to do something here?
- }
-
private void runProcessors(List<Object> cmsObjects, String mode) {
Iterator<Processor> processorIterator;
synchronized (processors) {
@@ -114,20 +109,16 @@ public class MappingEngineImpl implement
initializeEngine(conf);
long t1 = System.currentTimeMillis();
- try {
- String connectionType = conf.getConnectionInfo().getConnectionType();
- if (connectionType.contentEquals("JCR")) {
- new JCRNodeTypeLifter(this).lift();
- } else if (connectionType.contentEquals("CMIS")) {
- new CMISNodeTypeLifter(this).liftNodes();
- } else {
- throw new IllegalArgumentException("Connection type must be one of JCR or CMIS.");
- }
- } catch (RepositoryException e) {
- logger.warn("Lifting error", e);
- return;
+ String connectionType = conf.getConnectionInfo().getConnectionType();
+ if (connectionType != null
+ && !(connectionType.contentEquals("JCR") || connectionType.contentEquals("CMIS"))) {
+ throw new IllegalArgumentException("Connection type must be one of JCR or CMIS.");
}
+ // lift type defintions
+ TypeLifter typeLifter = typeLifterManager.getRepositoryAccessor(connectionType);
+ typeLifter.liftNodeTypes(this);
+
runProcessors(null, "create");
OntologyResourceHelper.saveConnectionInfo(conf.getConnectionInfo(), this.ontModel);
OntologyResourceHelper.saveBridgeDefinitions(conf.getBridgeDefinitions(), this.ontModel);
@@ -311,14 +302,14 @@ public class MappingEngineImpl implement
storeClient.saveOntology(ontologyContentAsString, ontologyURI, "UTF-8");
}
- public void bindProcessor(Processor processor) {
+ protected void bindProcessor(Processor processor) {
synchronized (processors) {
processors.add(processor);
Collections.sort(processors, COMPARATOR);
}
}
- public void unbindProcessor(Processor processor) {
+ protected void unbindProcessor(Processor processor) {
synchronized (processors) {
processors.remove(processor);
}
Modified: incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/JCRNodeTypeLifter.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/JCRNodeTypeLifter.java?rev=1154473&r1=1154472&r2=1154473&view=diff
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/JCRNodeTypeLifter.java (original)
+++ incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/JCRNodeTypeLifter.java Sat Aug 6 09:42:32 2011
@@ -26,13 +26,16 @@ import javax.jcr.nodetype.NodeTypeIterat
import javax.jcr.nodetype.NodeTypeManager;
import javax.jcr.nodetype.PropertyDefinition;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
import org.apache.stanbol.cmsadapter.jcr.repository.JCRModelMapper;
-import org.apache.stanbol.cmsadapter.servicesapi.helper.CMSAdapterVocabulary;
import org.apache.stanbol.cmsadapter.servicesapi.helper.OntologyResourceHelper;
import org.apache.stanbol.cmsadapter.servicesapi.mapping.MappingEngine;
import org.apache.stanbol.cmsadapter.servicesapi.model.web.ObjectTypeDefinition;
import org.apache.stanbol.cmsadapter.servicesapi.model.web.PropType;
+import org.apache.stanbol.cmsadapter.servicesapi.processor.TypeLifter;
import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccess;
+import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,9 +43,10 @@ import com.hp.hpl.jena.ontology.Datatype
import com.hp.hpl.jena.ontology.ObjectProperty;
import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.rdf.model.Resource;
-import com.hp.hpl.jena.vocabulary.OWL;
-public class JCRNodeTypeLifter {
+@Component(immediate = true)
+@Service
+public class JCRNodeTypeLifter implements TypeLifter {
private static final Logger logger = LoggerFactory.getLogger(JCRNodeTypeLifter.class);
private MappingEngine engine;
@@ -50,92 +54,89 @@ public class JCRNodeTypeLifter {
private RepositoryAccess accessor;
private OntologyResourceHelper ontologyResourceHelper;
- public JCRNodeTypeLifter(MappingEngine mappingEngine) {
- this.engine = mappingEngine;
- this.session = (Session) engine.getSession();
- this.ontologyResourceHelper = this.engine.getOntologyResourceHelper();
- this.accessor = this.engine.getRepositoryAccessManager()
- .getRepositoryAccess(this.engine.getSession());
- if (this.accessor == null) {
- throw new IllegalArgumentException("Can not find suitable accessor");
- }
- }
-
- public void lift() throws RepositoryException {
- // initializeDefaultResources();
-
- NodeTypeManager nodeTypeManager = session.getWorkspace().getNodeTypeManager();
- NodeTypeIterator nodeTypesItr = nodeTypeManager.getAllNodeTypes();
- while (nodeTypesItr.hasNext()) {
- NodeType curNodeType = nodeTypesItr.nextNodeType();
- // create the class
- ObjectTypeDefinition otd = JCRModelMapper.getObjectTypeDefinition(curNodeType);
- OntClass nodeTypeClass = ontologyResourceHelper.createOntClassByObjectTypeDefinition(otd);
- if (nodeTypeClass == null) {
- logger.warn("Failed to create OntClass for object type definition {}", otd.getLocalname());
- continue;
- }
-
- // create subsumption relationships
- NodeType[] supertypes = curNodeType.getDeclaredSupertypes();
- for (NodeType supertype : supertypes) {
- otd = JCRModelMapper.getObjectTypeDefinition(supertype);
- OntClass s = ontologyResourceHelper.createOntClassByObjectTypeDefinition(otd);
- if (s == null) {
+ @Override
+ public void liftNodeTypes(MappingEngine engine) throws RepositoryAccessException {
+ initialize(engine);
+ try {
+ NodeTypeManager nodeTypeManager = session.getWorkspace().getNodeTypeManager();
+ NodeTypeIterator nodeTypesItr = nodeTypeManager.getAllNodeTypes();
+ while (nodeTypesItr.hasNext()) {
+ NodeType curNodeType = nodeTypesItr.nextNodeType();
+ // create the class
+ ObjectTypeDefinition otd = JCRModelMapper.getObjectTypeDefinition(curNodeType);
+ OntClass nodeTypeClass = ontologyResourceHelper.createOntClassByObjectTypeDefinition(otd);
+ if (nodeTypeClass == null) {
logger.warn("Failed to create OntClass for object type definition {}", otd.getLocalname());
continue;
}
- nodeTypeClass.addSuperClass(s);
- }
- // create properties
- PropertyDefinition[] propertyDefinitionList = curNodeType.getDeclaredPropertyDefinitions();
- for (PropertyDefinition jcrPropDef : propertyDefinitionList) {
- org.apache.stanbol.cmsadapter.servicesapi.model.web.PropertyDefinition propDef = JCRModelMapper
- .getPropertyDefinition(jcrPropDef);
- if (jcrPropDef.getName().equals("*")) {
- // TODO decide how to handle * named properties
- } else {
- if ((propDef.getPropertyType() == PropType.NAME)
- || (propDef.getPropertyType() == PropType.PATH)
- || (propDef.getPropertyType() == PropType.REFERENCE)) {
-
- ObjectProperty op = ontologyResourceHelper.createObjectPropertyByPropertyDefinition(
- propDef, Arrays.asList(new Resource[] {nodeTypeClass}),
- new ArrayList<Resource>());
-
- if (op == null) {
- logger.warn("Failed to create ObjectProperty for property definition {}",
- propDef.getLocalname());
- }
+ // create subsumption relationships
+ NodeType[] supertypes = curNodeType.getDeclaredSupertypes();
+ for (NodeType supertype : supertypes) {
+ otd = JCRModelMapper.getObjectTypeDefinition(supertype);
+ OntClass s = ontologyResourceHelper.createOntClassByObjectTypeDefinition(otd);
+ if (s == null) {
+ logger.warn("Failed to create OntClass for object type definition {}",
+ otd.getLocalname());
+ continue;
+ }
+ nodeTypeClass.addSuperClass(s);
+ }
+ // create properties
+ PropertyDefinition[] propertyDefinitionList = curNodeType.getDeclaredPropertyDefinitions();
+ for (PropertyDefinition jcrPropDef : propertyDefinitionList) {
+ org.apache.stanbol.cmsadapter.servicesapi.model.web.PropertyDefinition propDef = JCRModelMapper
+ .getPropertyDefinition(jcrPropDef);
+ if (jcrPropDef.getName().equals("*")) {
+ // TODO decide how to handle * named properties
} else {
- DatatypeProperty dtp = ontologyResourceHelper
- .createDatatypePropertyByPropertyDefinition(propDef,
- Arrays.asList(new Resource[] {nodeTypeClass}));
-
- if (dtp == null) {
- logger.warn("Failed to create DatatypeProperty for property definition {}",
- propDef.getLocalname());
+ if ((propDef.getPropertyType() == PropType.NAME)
+ || (propDef.getPropertyType() == PropType.PATH)
+ || (propDef.getPropertyType() == PropType.REFERENCE)) {
+
+ ObjectProperty op = ontologyResourceHelper
+ .createObjectPropertyByPropertyDefinition(propDef,
+ Arrays.asList(new Resource[] {nodeTypeClass}),
+ new ArrayList<Resource>());
+
+ if (op == null) {
+ logger.warn("Failed to create ObjectProperty for property definition {}",
+ propDef.getLocalname());
+ }
+
+ } else {
+ DatatypeProperty dtp = ontologyResourceHelper
+ .createDatatypePropertyByPropertyDefinition(propDef,
+ Arrays.asList(new Resource[] {nodeTypeClass}));
+
+ if (dtp == null) {
+ logger.warn("Failed to create DatatypeProperty for property definition {}",
+ propDef.getLocalname());
+ }
}
}
}
}
+ } catch (RepositoryException e) {
+ throw new RepositoryAccessException("Repository exception while lifting node type definitions ",
+ e);
}
}
- private void initializeDefaultResources() {
- addPathProperty();
+ @Override
+ public boolean canLift(String type) {
+ return type.contentEquals("JCR");
}
- private void addPathProperty() {
- String propName = CMSAdapterVocabulary.CMS_ADAPTER_VOCABULARY_PREFIX + ":"
- + CMSAdapterVocabulary.CMSAD_PATH_PROP_NAME;
- org.apache.stanbol.cmsadapter.servicesapi.model.web.PropertyDefinition propertyDefinition = new org.apache.stanbol.cmsadapter.servicesapi.model.web.PropertyDefinition();
- propertyDefinition.setLocalname(propName);
- propertyDefinition.setPropertyType(PropType.STRING);
- propertyDefinition.setUniqueRef(propName);
- ontologyResourceHelper.createDatatypePropertyByPropertyDefinition(propertyDefinition,
- Arrays.asList(new Resource[] {OWL.Thing}));
+ private void initialize(MappingEngine engine) {
+ this.engine = engine;
+ this.session = (Session) engine.getSession();
+ this.ontologyResourceHelper = this.engine.getOntologyResourceHelper();
+ this.accessor = this.engine.getRepositoryAccessManager()
+ .getRepositoryAccess(this.engine.getSession());
+ if (this.accessor == null) {
+ throw new IllegalArgumentException("Can not find suitable accessor");
+ }
}
-}
+}
\ No newline at end of file
Added: incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/TypeLifter.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/TypeLifter.java?rev=1154473&view=auto
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/TypeLifter.java (added)
+++ incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/TypeLifter.java Sat Aug 6 09:42:32 2011
@@ -0,0 +1,39 @@
+package org.apache.stanbol.cmsadapter.servicesapi.processor;
+
+import org.apache.stanbol.cmsadapter.servicesapi.helper.OntologyResourceHelper;
+import org.apache.stanbol.cmsadapter.servicesapi.mapping.MappingEngine;
+import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
+
+/**
+ * This interface provides a uniform way to semantically lift node/object type definitions in content
+ * management systems.
+ *
+ * @author suat
+ *
+ */
+public interface TypeLifter {
+ /**
+ * This method takes all node/object type definitions in the repository and creates related ontological
+ * resources namely classes, object and data properties. It creates a class for each object/node type and
+ * object properties for property definitions having types PATH, REFERENCE, etc.; and data properties for
+ * property definitions takes literal values.
+ *
+ * @param mappingEngine
+ * is the {@link MappingEngine} instance of which acts as context for the implementations of
+ * this interface. It provides context variables such as Session to access repository or
+ * {@link OntologyResourceHelper} to create ontology resources.
+ * @throws RepositoryAccessException
+ */
+
+ void liftNodeTypes(MappingEngine mappingEngine) throws RepositoryAccessException;
+
+ /**
+ * Takes a protocol type e.g JCR/CMIS and returns whether implementation of this interface is capable of
+ * lifting type definitions through the specified protocol
+ *
+ * @param type
+ * protocol type e.g JCR/CMIS
+ * @return
+ */
+ boolean canLift(String type);
+}
Added: incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/TypeLifterManager.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/TypeLifterManager.java?rev=1154473&view=auto
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/TypeLifterManager.java (added)
+++ incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/processor/TypeLifterManager.java Sat Aug 6 09:42:32 2011
@@ -0,0 +1,40 @@
+package org.apache.stanbol.cmsadapter.servicesapi.processor;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
+import org.apache.felix.scr.annotations.Service;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Component(immediate = true)
+@Service(value = TypeLifterManager.class)
+public class TypeLifterManager {
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_MULTIPLE, referenceInterface = TypeLifter.class, policy = ReferencePolicy.DYNAMIC, bind = "bindTypeLifter", unbind = "unbindTypeLifter")
+ private List<TypeLifter> typeLifters = new CopyOnWriteArrayList<TypeLifter>();
+
+ private static final Logger logger = LoggerFactory.getLogger(TypeLifterManager.class);
+
+ public TypeLifter getRepositoryAccessor(String connectionType) {
+ for (TypeLifter typeLifter : typeLifters) {
+ if (typeLifter.canLift(connectionType)) {
+ return typeLifter;
+ }
+ }
+
+ logger.warn("No suitable type lifter implementation for connection type: {} ", connectionType);
+ return null;
+ }
+
+ protected void bindTypeLifter(TypeLifter typeLifter) {
+ typeLifters.add(typeLifter);
+ }
+
+ protected void unbindTypeLifter(TypeLifter typeLifter) {
+ typeLifters.remove(typeLifter);
+ }
+}