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/04/30 13:18:34 UTC

svn commit: r1098099 [2/5] - in /incubator/stanbol/trunk/cmsadapter: ./ core/ core/src/ core/src/main/ core/src/main/java/ core/src/main/java/org/ core/src/main/java/org/apache/ core/src/main/java/org/apache/stanbol/ core/src/main/java/org/apache/stanb...

Added: incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/InstanceBridgesProcesser.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/InstanceBridgesProcesser.java?rev=1098099&view=auto
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/InstanceBridgesProcesser.java (added)
+++ incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/InstanceBridgesProcesser.java Sat Apr 30 11:18:30 2011
@@ -0,0 +1,91 @@
+package org.apache.stanbol.cmsadapter.jcr.processor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.stanbol.cmsadapter.servicesapi.helper.MappingModelParser;
+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.InstanceBridge;
+import org.apache.stanbol.cmsadapter.servicesapi.model.mapping.PropertyBridge;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.CMSObject;
+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.repository.RepositoryAccessException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.hp.hpl.jena.ontology.Individual;
+import com.hp.hpl.jena.ontology.OntClass;
+
+public class InstanceBridgesProcesser extends JCRProcessor {
+
+    private static final Logger logger = LoggerFactory.getLogger(InstanceBridgesProcesser.class);
+
+    public InstanceBridgesProcesser(MappingEngine mappingEngine) {
+        super(mappingEngine);
+    }
+
+    public void processUpdates(List<CMSObject> cmsObjects) {
+        BridgeDefinitions bridgeDefinitions = engine.getBridgeDefinitions();
+        DObjectAdapter adapter = engine.getDObjectAdapter();
+        List<InstanceBridge> instanceBridges = MappingModelParser.getInstanceBridges(bridgeDefinitions);
+
+        for (InstanceBridge instanceBridge : instanceBridges) {
+            try {
+                for (CMSObject contentObject : cmsObjects) {
+                    if (matches(contentObject.getPath(), instanceBridge.getQuery())) {
+                        processInstanceBridge(instanceBridge, adapter.wrapAsDObject(contentObject));
+                    }
+                }
+            } catch (RepositoryAccessException e) {
+                // TODO Auto-generated catch block
+                logger.warn("Error processing bridge", e);
+            }
+        }
+    }
+
+    public void processBridges() {
+        BridgeDefinitions bridgeDefinitions = engine.getBridgeDefinitions();
+        DObjectAdapter adapter = engine.getDObjectAdapter();
+        List<InstanceBridge> instanceBridges = MappingModelParser.getInstanceBridges(bridgeDefinitions);
+
+        for (InstanceBridge instanceBridge : instanceBridges) {
+            try {
+                List<CMSObject> cmsObjects = this.accessor.getNodeByPath(instanceBridge.getQuery(), session);
+                for (CMSObject contentObject : cmsObjects) {
+                    processInstanceBridge(instanceBridge, adapter.wrapAsDObject(contentObject));
+                }
+            } catch (RepositoryAccessException e) {
+                // TODO Auto-generated catch block
+                logger.warn("Error processing bridge", e);
+            }
+        }
+    }
+
+    private void processInstanceBridge(InstanceBridge instanceBridge, DObject instanceNode) throws RepositoryAccessException {
+        Individual individual;
+        List<OntClass> indTypes = new ArrayList<OntClass>();
+
+        // currently object type reference of an object is set to primary node
+        // type
+        OntClass primaryNodeClass = ontologyResourceHelper.createOntClassByReference(instanceNode
+                .getInstance().getObjectTypeRef());
+
+        // create individual
+        // TODO consider mixin types
+        individual = ontologyResourceHelper.createIndividualByCMSObject(instanceNode.getInstance(),
+            primaryNodeClass);
+        indTypes.add(primaryNodeClass);
+
+        // process propertyBridges
+        List<PropertyBridge> instancePropertyBridges = instanceBridge.getPropertyBridge();
+        // TODO property bridges containing instance of annotatins should be
+        // handled first
+        PropertyBridgesProcesser pbp = new PropertyBridgesProcesser(engine);
+        for (PropertyBridge propBridge : instancePropertyBridges) {
+            pbp.processInstancePropertyBridge(individual, instanceNode, propBridge, indTypes);
+        }
+    }
+
+}

Added: 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=1098099&view=auto
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/JCRNodeTypeLifter.java (added)
+++ incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/JCRNodeTypeLifter.java Sat Apr 30 11:18:30 2011
@@ -0,0 +1,141 @@
+package org.apache.stanbol.cmsadapter.jcr.processor;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.NodeTypeIterator;
+import javax.jcr.nodetype.NodeTypeManager;
+import javax.jcr.nodetype.PropertyDefinition;
+
+import org.apache.stanbol.cmsadapter.jcr.repository.JCRModelMapper;
+import org.apache.stanbol.cmsadapter.servicesapi.helper.CMSAdapterVocabulary;
+import org.apache.stanbol.cmsadapter.servicesapi.mapping.MappingEngine;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.CMSObject;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.PropType;
+import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.hp.hpl.jena.ontology.OntClass;
+import com.hp.hpl.jena.rdf.model.RDFList;
+import com.hp.hpl.jena.rdf.model.Resource;
+import com.hp.hpl.jena.vocabulary.OWL;
+
+public class JCRNodeTypeLifter extends JCRProcessor {
+    private static final Logger logger = LoggerFactory.getLogger(JCRNodeTypeLifter.class);
+
+    public JCRNodeTypeLifter(MappingEngine mappingEngine) {
+        super(mappingEngine);
+    }
+
+    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
+            OntClass nodeTypeClass = ontologyResourceHelper
+                    .createOntClassByObjectTypeDefinition(JCRModelMapper.getObjectTypeDefinition(curNodeType));
+
+            // create subsumption relationships
+            NodeType[] supertypes = curNodeType.getDeclaredSupertypes();
+            for (NodeType supertype : supertypes) {
+                OntClass s = ontologyResourceHelper.createOntClassByObjectTypeDefinition(JCRModelMapper
+                        .getObjectTypeDefinition(supertype));
+                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)) {
+
+                        List<String> constraints = propDef.getValueConstraint();
+                        List<CMSObject> referencedObjects = new ArrayList<CMSObject>();
+
+                        if (propDef.getPropertyType() == PropType.NAME) {
+                            for (String constraint : constraints) {
+                                try {
+                                    referencedObjects
+                                            .addAll(accessor.getNodeByName(constraint, this.session));
+                                } catch (RepositoryAccessException e) {
+                                    logger.warn("Error while getting referenced value {} ", constraint, e);
+                                }
+                            }
+
+                        } else if (propDef.getPropertyType() == PropType.PATH) {
+                            for (String constraint : constraints) {
+                                try {
+                                    referencedObjects
+                                            .addAll(accessor.getNodeByPath(constraint, this.session));
+                                } catch (RepositoryAccessException e) {
+                                    logger.warn("Error while getting referenced value {} ", constraint, e);
+                                }
+                            }
+
+                        } else if (propDef.getPropertyType() == PropType.REFERENCE) {
+                            for (String constraint : constraints) {
+                                try {
+                                    referencedObjects.addAll(accessor.getNodeById(constraint, this.session));
+                                } catch (RepositoryAccessException e) {
+                                    logger.warn("Error while getting referenced value {} ", constraint, e);
+                                }
+                            }
+                        }
+
+                        Resource rangeClass = null;
+                        if (referencedObjects.size() == 0) {
+                            rangeClass = OWL.Thing;
+
+                        } else if (referencedObjects.size() == 1) {
+                            rangeClass = ontologyResourceHelper
+                                    .createOntClassByCMSObject(referencedObjects.get(0));
+
+                        } else {
+                            RDFList rdfList = jcrOntModel.createList();
+                            for (CMSObject referencedObject : referencedObjects) {
+                                rdfList = rdfList.cons(ontologyResourceHelper
+                                        .createOntClassByCMSObject(referencedObject));
+                            }
+                            rangeClass = ontologyResourceHelper.createUnionClass(rdfList);
+                        }
+                        ontologyResourceHelper.createObjectPropertyByPropertyDefinition(propDef,
+                            Arrays.asList(new Resource[] {nodeTypeClass}),
+                            Arrays.asList(new Resource[] {rangeClass}));
+
+                    } else {
+                        ontologyResourceHelper.createDatatypePropertyByPropertyDefinition(propDef,
+                            Arrays.asList(new Resource[] {nodeTypeClass}));
+                    }
+                }
+            }
+        }
+    }
+
+    private void initializeDefaultResources() {
+        addPathProperty();
+    }
+
+    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}));
+    }
+}

Added: incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/JCRProcessor.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/JCRProcessor.java?rev=1098099&view=auto
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/JCRProcessor.java (added)
+++ incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/JCRProcessor.java Sat Apr 30 11:18:30 2011
@@ -0,0 +1,42 @@
+package org.apache.stanbol.cmsadapter.jcr.processor;
+
+import javax.jcr.Session;
+
+import org.apache.stanbol.cmsadapter.servicesapi.helper.OntologyResourceHelper;
+import org.apache.stanbol.cmsadapter.servicesapi.mapping.MappingEngine;
+import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccess;
+
+import com.hp.hpl.jena.ontology.OntModel;
+
+public abstract class JCRProcessor {
+    protected MappingEngine engine;
+    protected Session session;
+    protected RepositoryAccess accessor;
+    protected OntologyResourceHelper ontologyResourceHelper;
+    protected OntModel jcrOntModel;
+
+    public JCRProcessor(MappingEngine engine) {
+        this.engine = engine;
+        this.session = (Session) engine.getSession();
+        this.ontologyResourceHelper = this.engine.getOntologyResourceHelper();
+        this.jcrOntModel = this.engine.getOntModel();
+        this.accessor = this.engine.getRepositoryAccessManager()
+                .getRepositoryAccess(this.engine.getSession());
+        if (this.accessor == null) {
+            throw new IllegalArgumentException("Can not find suitable accessor");
+        }
+    }
+
+    
+    protected boolean matches(String path, String query) {
+        if (path != null) {
+            if (query.endsWith("%")) {
+                return path.contains(query.substring(0, query.length() - 2));
+            } else {
+                return path.equals(query);
+            }
+        } else {
+            return false;
+        }
+    }
+}

Added: incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/PropertyBridgesProcesser.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/PropertyBridgesProcesser.java?rev=1098099&view=auto
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/PropertyBridgesProcesser.java (added)
+++ incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/PropertyBridgesProcesser.java Sat Apr 30 11:18:30 2011
@@ -0,0 +1,340 @@
+package org.apache.stanbol.cmsadapter.jcr.processor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+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.AnnotationType;
+import org.apache.stanbol.cmsadapter.servicesapi.model.mapping.BridgeDefinitions;
+import org.apache.stanbol.cmsadapter.servicesapi.model.mapping.PropertyAnnotation;
+import org.apache.stanbol.cmsadapter.servicesapi.model.mapping.PropertyBridge;
+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.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.repository.RepositoryAccessException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.hp.hpl.jena.ontology.DatatypeProperty;
+import com.hp.hpl.jena.ontology.Individual;
+import com.hp.hpl.jena.ontology.ObjectProperty;
+import com.hp.hpl.jena.ontology.OntClass;
+import com.hp.hpl.jena.ontology.OntProperty;
+import com.hp.hpl.jena.ontology.OntResource;
+
+public class PropertyBridgesProcesser extends JCRProcessor {
+
+    private static final Logger logger = LoggerFactory.getLogger(PropertyBridgesProcesser.class);
+
+    public PropertyBridgesProcesser(MappingEngine mappingEngine) {
+        super(mappingEngine);
+    }
+
+    public void processUpdates(List<CMSObject> cmsObjects) {
+        BridgeDefinitions bridgeDefinitions = engine.getBridgeDefinitions();
+        OntologyResourceHelper ontologyResourceHelper = engine.getOntologyResourceHelper();
+        DObjectAdapter adapter = engine.getDObjectAdapter();
+        List<PropertyBridge> propertyBridges = MappingModelParser.getPropertyBridges(bridgeDefinitions);
+
+        for (PropertyBridge bridge : propertyBridges) {
+            try {
+                for (CMSObject cmsObject : cmsObjects) {
+                    if (matches(cmsObject.getPath(), bridge.getSubjectQuery())) {
+                        OntClass c = ontologyResourceHelper.createOntClassByCMSObject(cmsObject);
+                        processConceptPropertyBridge(c, bridge, adapter.wrapAsDObject(cmsObject));
+                    }
+                }
+            } catch (RepositoryAccessException e) {
+                logger.warn("Error processing bridge", e);
+            }
+        }
+
+    }
+
+    public void processBridges() {
+
+        BridgeDefinitions bridgeDefinitions = engine.getBridgeDefinitions();
+        OntologyResourceHelper ontologyResourceHelper = engine.getOntologyResourceHelper();
+        DObjectAdapter adapter = engine.getDObjectAdapter();
+        List<PropertyBridge> propertyBridges = MappingModelParser.getPropertyBridges(bridgeDefinitions);
+
+        for (PropertyBridge bridge : propertyBridges) {
+            try {
+                List<CMSObject> cmsObjects = this.accessor.getNodeByPath(bridge.getSubjectQuery(), session);
+
+                for (CMSObject cmsObject : cmsObjects) {
+                    OntClass c = ontologyResourceHelper.createOntClassByCMSObject(cmsObject);
+                    processConceptPropertyBridge(c, bridge, adapter.wrapAsDObject(cmsObject));
+                }
+            } catch (RepositoryAccessException e) {
+                logger.warn("Error processing bridge", e);
+            }
+        }
+    }
+
+    public void processConceptPropertyBridge(OntClass subjectClass,
+                                             PropertyBridge propertyBridge,
+                                             DObject propertySubject) throws RepositoryAccessException {
+
+        String predicateName = propertyBridge.getPredicateName();
+        PropertyAnnotation propertyAnnotation = propertyBridge.getPropertyAnnotation();
+
+        for (DProperty prop : propertySubject.getProperties()) {
+            DPropertyDefinition propDef = prop.getDefinition();
+            // propDef returns null if a * named property comes
+            // TODO after handling * named properties, remove the null check
+            if (propDef == null) {
+                logger.warn("Property definition could not be got for property {}", prop.getName());
+                continue;
+            }
+
+            String propName = propDef.getName();
+            if (propName.equals(predicateName) || propName.contains(predicateName)) {
+                // TODO consider other property types
+                List<CMSObject> referencedNodes = new ArrayList<CMSObject>();
+                if (prop.getType().equals(PropType.REFERENCE)) {
+                    // Resolve references
+                    // TODO need a better value representation than string
+                    // For example reference types may be resolved an put as an
+                    // objecttype
+                    for (String value : prop.getValue()) {
+                        try {
+                            referencedNodes.addAll(accessor.getNodeById(value, session));
+                        } catch (RepositoryAccessException e) {
+                            logger.warn("Error resolving reference value {}", value, e);
+                        }
+                    }
+
+                } else if (prop.getType().equals(PropType.NAME)) {
+                    for (String name : prop.getValue()) {
+                        try {
+                            referencedNodes.addAll(accessor.getNodeByName(name, session));
+                        } catch (Exception e) {
+                            logger.warn("Error at getting name nodes.", e);
+                        }
+                    }
+
+                } else if (prop.getType().equals(PropType.PATH)) {
+                    for (String value : prop.getValue()) {
+                        try {
+                            referencedNodes.addAll(accessor.getNodeByPath(value, session));
+                        } catch (RepositoryAccessException e) {
+                            logger.warn("Error at getting node by path ", e);
+                        }
+                    }
+                }
+
+                if (propertyAnnotation != null) {
+                    processConceptPropertyBridgeAnnotation(propertyAnnotation, subjectClass, referencedNodes);
+                } else {
+                    logger.warn("One of the following annotations is expected: 'subsumption', 'disjointWith', 'equivalentClass'");
+                }
+                // property found. break the loop
+                break;
+            }
+        }
+    }
+
+    public void processConceptPropertyBridgeAnnotation(PropertyAnnotation propertyAnnotation,
+                                                       OntClass subjectClass,
+                                                       List<CMSObject> referencedNodes) {
+        AnnotationType annotation = propertyAnnotation.getAnnotation();
+        List<OntClass> referencedClasses = new ArrayList<OntClass>();
+        for (CMSObject referenceObject : referencedNodes) {
+            referencedClasses.add(ontologyResourceHelper.createOntClassByCMSObject(referenceObject));
+        }
+
+        // process the annotations
+        if (annotation.equals(AnnotationType.SUBSUMPTION)) {
+            for (OntClass c : referencedClasses) {
+                subjectClass.addSubClass(c);
+            }
+
+        } else if (annotation.equals(AnnotationType.EQUIVALENT_CLASS)) {
+            for (OntClass c : referencedClasses) {
+                subjectClass.addEquivalentClass(c);
+            }
+
+        } else if (annotation.equals(AnnotationType.DISJOINT_WITH)) {
+            for (OntClass c : referencedClasses) {
+                subjectClass.addDisjointWith(c);
+            }
+        } else {
+            logger.warn("{} annotation is not supported for this property", annotation.value());
+            return;
+        }
+    }
+
+    public void processInstancePropertyBridge(Individual individual,
+                                              DObject contentObject,
+                                              PropertyBridge propertyBridge,
+                                              List<OntClass> indTypes) throws RepositoryAccessException {
+        String predicateName = propertyBridge.getPredicateName();
+
+        for (DProperty property : contentObject.getProperties()) {
+            DPropertyDefinition propDef = property.getDefinition();
+            // propDef returns null if a * named property comes
+            // TODO after handling * named properties, remove the null check
+            if (propDef == null) {
+                logger.warn("Property definition could not be got for property {}", property.getName());
+                continue;
+            }
+            String propName = propDef.getName();
+            if (propName.equals(predicateName) || propName.contains(predicateName)) {
+                if (objectPropertyCheck(property)) {
+                    processObjectProperty(individual, contentObject, propertyBridge, property, propDef,
+                        indTypes);
+                } else if (datatypePropertyCheck(property)) {
+                    processDataTypeProperty(individual, property, propDef);
+                } else {
+                    logger.warn("{} property type is not supported yet", property.getType());
+                }
+                // property found break the loop
+                break;
+            }
+        }
+    }
+
+    private void processObjectProperty(Individual individual,
+                                       DObject contentObject,
+                                       PropertyBridge propBridge,
+                                       DProperty property,
+                                       DPropertyDefinition propDef,
+                                       List<OntClass> indTypes) {
+
+        // get referenced values
+        List<CMSObject> referencedObjects = new ArrayList<CMSObject>();
+        CMSObject parentObject = null;
+        if (property.getType() == PropType.REFERENCE) {
+            for (String referencedObject : property.getValue()) {
+                try {
+                    parentObject = this.accessor.getFirstNodeById(referencedObject, this.session);
+                    referencedObjects.add(parentObject);
+                } catch (RepositoryAccessException e) {
+                    logger.warn("Error while getting referenced value {} ", referencedObject, e);
+                }
+            }
+
+        } else if (property.getType() == PropType.NAME) {
+            for (String referencedName : property.getValue()) {
+                List<CMSObject> names;
+                try {
+                    names = this.accessor.getNodeByName(referencedName, this.session);
+                    referencedObjects.addAll(names);
+                } catch (RepositoryAccessException e) {
+                    logger.warn("Error while getting referenced value {} ", referencedName, e);
+                }
+            }
+        } else if (property.getType() == PropType.PATH) {
+            for (String referencedPath : property.getValue()) {
+                try {
+                    parentObject = this.accessor.getFirstNodeByPath(referencedPath, this.session);
+                    referencedObjects.add(parentObject);
+                } catch (RepositoryAccessException e) {
+                    logger.warn("Error while getting referenced value {} ", referencedPath, e);
+                }
+            }
+        }
+
+        ObjectProperty objectProperty = ontologyResourceHelper.getObjectPropertyByReference(propDef
+                .getUniqueRef());
+        PropertyAnnotation propertyAnnotation = propBridge.getPropertyAnnotation();
+        if (propertyAnnotation != null) {
+
+            // process instanceOf Annotation as it needs a special consideration
+            if (propertyAnnotation.getAnnotation().value().equals("instanceOf")) {
+
+                // Referenced items are added to the ontology and set as type of
+                // individual
+                OntClass parentClass;
+                for (CMSObject parent : referencedObjects) {
+                    parentClass = ontologyResourceHelper.createOntClassByCMSObject(parent);
+                    individual.addOntClass(parentClass);
+                    indTypes.add(parentClass);
+                }
+            } else {
+                createReferencedIndividuals(individual, contentObject, objectProperty, referencedObjects);
+            }
+            processInstancePropertyBridgeAnnotation(propertyAnnotation, objectProperty);
+
+        } else {
+            createReferencedIndividuals(individual, contentObject, objectProperty, referencedObjects);
+        }
+    }
+
+    private void createReferencedIndividuals(Individual individual,
+                                             DObject contentObject,
+                                             ObjectProperty objectProperty,
+                                             List<CMSObject> referencedObjects) {
+
+        OntResource individualType = ontologyResourceHelper.createOntClassByReference(contentObject
+                .getInstance().getObjectTypeRef());
+
+        for (CMSObject referencedObject : referencedObjects) {
+            Individual ind = ontologyResourceHelper.createIndividualByCMSObject(referencedObject, individualType);
+            if (ind != null) {
+                individual.setPropertyValue(objectProperty, ind);
+            } else {
+                logger.info("Resource {} for node is already a class. Property value is not set",
+                    referencedObject.getPath());
+            }
+        }
+    }
+
+    private void processDataTypeProperty(Individual individual,
+                                         DProperty property,
+                                         DPropertyDefinition propDef) {
+
+        DatatypeProperty datatypeProperty = ontologyResourceHelper.getDatatypePropertyByReference(propDef
+                .getUniqueRef());
+
+        for (String value : property.getValue()) {
+            individual.setPropertyValue(datatypeProperty,
+                jcrOntModel.createTypedLiteral(value, datatypeProperty.getRange().getURI()));
+        }
+    }
+
+    private void processInstancePropertyBridgeAnnotation(PropertyAnnotation propertyAnnotation,
+                                                         OntProperty property) {
+        AnnotationType annotation = propertyAnnotation.getAnnotation();
+
+        // process the annotations
+        if (annotation.equals(AnnotationType.FUNCTIONAL)) {
+            property.convertToFunctionalProperty();
+        } else if (annotation.equals(AnnotationType.INVERSE_FUNCTIONAL)) {
+            property.convertToInverseFunctionalProperty();
+        } else if (annotation.equals(AnnotationType.SYMMETRIC)) {
+            property.convertToSymmetricProperty();
+        } else if (annotation.equals(AnnotationType.TRANSITIVE)) {
+            property.convertToTransitiveProperty();
+        } else if (annotation.equals(AnnotationType.INSTANCE_OF)) {
+
+        } else {
+            logger.warn("{} annotation is not supported for this property", annotation.value());
+        }
+    }
+
+    private static Boolean objectPropertyCheck(DProperty prop) {
+        PropType propType = prop.getType();
+        // TODO consider all object properties
+        if (propType == PropType.REFERENCE || propType == PropType.PATH || propType == PropType.NAME) {
+            return true;
+        }
+        return false;
+    }
+
+    private static Boolean datatypePropertyCheck(DProperty prop) {
+        PropType propType = prop.getType();
+        // TODO consider all data type properties
+        if (propType == PropType.STRING || propType == PropType.BOOLEAN || propType == PropType.BINARY
+            || propType == PropType.DATE || propType == PropType.DOUBLE || propType == PropType.LONG) {
+            return true;
+        }
+        return false;
+    }
+}

Added: 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/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/SubsumptionBridgesProcesser.java?rev=1098099&view=auto
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/SubsumptionBridgesProcesser.java (added)
+++ incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/processor/SubsumptionBridgesProcesser.java Sat Apr 30 11:18:30 2011
@@ -0,0 +1,134 @@
+package org.apache.stanbol.cmsadapter.jcr.processor;
+
+import java.util.List;
+
+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.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.repository.RepositoryAccessException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.hp.hpl.jena.ontology.OntClass;
+
+public class SubsumptionBridgesProcesser extends JCRProcessor {
+
+    private static final Logger logger = LoggerFactory.getLogger(SubsumptionBridgesProcesser.class);
+
+    public SubsumptionBridgesProcesser(MappingEngine mappingEngine) {
+        super(mappingEngine);
+    }
+
+    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));
+                    }
+                }
+            } 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);
+            }
+        }
+    }
+
+    public void processSubsumptionBridge(OntClass parentClass, SubsumptionBridge s, DObject parentObject) throws RepositoryAccessException {
+
+        String predicateName = s.getPredicateName();
+        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);
+            }
+
+        } else {
+
+            // find the ranges of the predicate whose subject is parentNode
+            for (DProperty property : parentObject.getProperties()) {
+                DPropertyDefinition propDef = property.getDefinition();
+                // propDef returns null if a * named property comes
+                // TODO after handling * named properties, remove the null check
+                if (propDef == null) {
+                    logger.warn("Property definition could not be got for property {}", property.getName());
+                    continue;
+                }
+                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);
+                        }
+                    }
+                    break;
+                } else if (propName.contentEquals("*")) {
+                    logger.warn("Properties added to nt:unstructured types (* named properties) are not handled yet");
+                }
+            }
+        }
+    }
+}
\ No newline at end of file

Added: incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/JCRModelMapper.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/JCRModelMapper.java?rev=1098099&view=auto
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/JCRModelMapper.java (added)
+++ incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/JCRModelMapper.java Sat Apr 30 11:18:30 2011
@@ -0,0 +1,193 @@
+package org.apache.stanbol.cmsadapter.jcr.repository;
+
+import javax.jcr.AccessDeniedException;
+import javax.jcr.ItemNotFoundException;
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.Property;
+import javax.jcr.PropertyIterator;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+import javax.jcr.nodetype.NodeDefinition;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.PropertyDefinition;
+
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.ChildObjectDefinition;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.ObjectFactory;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.CMSObject;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.ObjectTypeDefinition;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.PropType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JCRModelMapper {
+    private static Logger logger = LoggerFactory.getLogger(JCRModelMapper.class);
+
+    /**
+     * Gets a {@link Node} and transforms it to {@link CMSObject}
+     * 
+     * @param jcrNode
+     *            JCR node to be transformed
+     * @return transformed {@link CMSObject}
+     * @throws RepositoryException
+     */
+    public static CMSObject getCMSObject(Node jcrNode) throws RepositoryException {
+        CMSObject cmsObject = new CMSObject();
+        cmsObject.setUniqueRef(jcrNode.getIdentifier());
+        cmsObject.setLocalname(jcrNode.getName());
+        cmsObject.setPath(jcrNode.getPath());
+        cmsObject.setObjectTypeRef(jcrNode.getPrimaryNodeType().getName());
+        try {
+            // TODO For a quick fix parent ref is used for parent path
+            cmsObject.setParentRef(jcrNode.getParent().getIdentifier());
+        } catch (ItemNotFoundException e) {
+            logger.info("Item has no parent. Can not set parent ref");
+        } catch (AccessDeniedException e1) {
+            logger.info("Item does not have permission to access parent. Can not set parent ref");
+        }
+
+        return cmsObject;
+    }
+
+    /**
+     * Gets a {@link NodeType} and transforms it to {@link ObjectTypeDefinition}
+     * 
+     * @param jcrNodeType
+     *            JCR node type to be transformed
+     * @return transformed {@link ObjectTypeDefinition}
+     */
+    public static ObjectTypeDefinition getObjectTypeDefinition(NodeType jcrNodeType) {
+        ObjectTypeDefinition objectTypeDefinition = new ObjectTypeDefinition();
+        objectTypeDefinition.setLocalname(jcrNodeType.getName());
+        objectTypeDefinition.setUniqueRef(jcrNodeType.getName());
+        for (NodeType superType : jcrNodeType.getSupertypes()) {
+            objectTypeDefinition.getParentRef().add(superType.getName());
+        }
+
+        // TODO child and parent settings
+        return objectTypeDefinition;
+    }
+
+    /**
+     * Gets a {@link Property} and transforms it to
+     * {@link org.apache.stanbol.cmsadapter.servicesapi.model.web.Property}
+     * 
+     * @param jcrProperty
+     *            JCR property to be transformed
+     * @return transformed {@link org.apache.stanbol.cmsadapter.servicesapi.model.web.Property}
+     * @throws RepositoryException
+     */
+    public static org.apache.stanbol.cmsadapter.servicesapi.model.web.Property getProperty(Property jcrProperty) throws RepositoryException {
+        org.apache.stanbol.cmsadapter.servicesapi.model.web.Property property = new org.apache.stanbol.cmsadapter.servicesapi.model.web.Property();
+        String sourceObjectType = jcrProperty.getDefinition().getDeclaringNodeType().getName();
+        String localName = jcrProperty.getName();
+        property.setType(mapPropertyType(jcrProperty.getType()));
+        property.setSourceObjectTypeRef(sourceObjectType);
+        property.setLocalname(localName);
+
+        // TODO Consider value types
+        if (jcrProperty.isMultiple()) {
+            for (Value value : jcrProperty.getValues()) {
+                property.getValue().add(value.toString());
+            }
+        } else {
+            property.getValue().add(jcrProperty.getValue().toString());
+        }
+        return property;
+    }
+
+    /**
+     * Gets a {@link PropertyDefinition} and transforms it to
+     * {@link org.apache.stanbol.cmsadapter.servicesapi.model.web.PropertyDefinition}
+     * 
+     * @param jcrPropertyDefinition
+     *            JCR property definition to be transformed
+     * @return transformed {@link org.apache.stanbol.cmsadapter.servicesapi.model.web.PropertyDefinition}
+     */
+    public static org.apache.stanbol.cmsadapter.servicesapi.model.web.PropertyDefinition getPropertyDefinition(PropertyDefinition jcrPropertyDefinition) {
+        org.apache.stanbol.cmsadapter.servicesapi.model.web.PropertyDefinition propertyDefinition = new org.apache.stanbol.cmsadapter.servicesapi.model.web.PropertyDefinition();
+        propertyDefinition.setLocalname(jcrPropertyDefinition.getName());
+        propertyDefinition.setPropertyType(mapPropertyType(jcrPropertyDefinition.getRequiredType()));
+        propertyDefinition.setRequired(jcrPropertyDefinition.isMandatory());
+        propertyDefinition.setSourceObjectTypeRef(jcrPropertyDefinition.getDeclaringNodeType().getName());
+        propertyDefinition.setUniqueRef(getPropertyName(jcrPropertyDefinition));
+
+        String[] valueConstraints = jcrPropertyDefinition.getValueConstraints();
+        for (String constraint : valueConstraints) {
+            propertyDefinition.getValueConstraint().add(constraint);
+        }
+        return propertyDefinition;
+    }
+
+    // TODO ChildObjectDefinition's allowedObjectTypes are problematic.
+    public static ChildObjectDefinition getChildObjectDefinition(NodeDefinition jcrNodeDefinition) {
+        ChildObjectDefinition childObjectDef = new ObjectFactory().createChildObjectDefinition();
+        childObjectDef.setRequired(jcrNodeDefinition.isMandatory());
+        return childObjectDef;
+    }
+
+    /**
+     * Gets a JCR property type as integer value and transforms it to {@link PropType}
+     * 
+     * @param jcrPropType
+     *            JCR property to be transformed
+     * @return transformed {@link PropType}
+     * @throws IllegalStateException
+     */
+    private static PropType mapPropertyType(int jcrPropType) throws IllegalStateException {
+        String upperCasePropType = PropertyType.nameFromValue(jcrPropType).toUpperCase();
+        return PropType.fromValue(upperCasePropType);
+    }
+
+    private static String getPropertyName(String declaringNodeTypeRef, String localName) {
+        return declaringNodeTypeRef + "_" + localName;
+    }
+
+    private static String getPropertyName(PropertyDefinition jcrPropertyDefinition) {
+        return getPropertyName(jcrPropertyDefinition.getDeclaringNodeType().getName(),
+            jcrPropertyDefinition.getName());
+    }
+
+    public static void fillCMSObjectChildren(CMSObject cmsObject, Node jcrNode) throws RepositoryException {
+        NodeIterator nit = jcrNode.getNodes();
+        while (nit.hasNext()) {
+            Node childNode = nit.nextNode();
+            CMSObject child = getCMSObject(childNode);
+            cmsObject.getChildren().add(child);
+        }
+    }
+
+    public static void fillProperties(CMSObject node, Node jcrNode) throws RepositoryException {
+        PropertyIterator pit = jcrNode.getProperties();
+        while (pit.hasNext()) {
+            Property jcrProperty = pit.nextProperty();
+            node.getProperty().add(getProperty(jcrProperty));
+        }
+
+    }
+
+    public static void fillChildObjectDefinitions(ObjectTypeDefinition instance, NodeType nodeType) {
+        NodeDefinition[] childNodeDefinitions = nodeType.getChildNodeDefinitions();
+        for (NodeDefinition childNodeDefinition : childNodeDefinitions) {
+            instance.getChildObjectDefinition().add(getChildObjectDefinition(childNodeDefinition));
+        }
+
+    }
+
+    public static void fillPropertyDefinition(org.apache.stanbol.cmsadapter.servicesapi.model.web.Property instance,
+                                              NodeType sourceObjectType) throws RepositoryException {
+        for (javax.jcr.nodetype.PropertyDefinition propDef : sourceObjectType.getPropertyDefinitions()) {
+            if (instance.getLocalname().contentEquals(propDef.getName())) {
+                instance.setPropertyDefinition(getPropertyDefinition(propDef));
+                break;
+            }
+        }
+    }
+
+    public static void fillPropertyDefinitions(ObjectTypeDefinition instance, NodeType nodeType) {
+        for (PropertyDefinition propertyDefinition : nodeType.getPropertyDefinitions()) {
+            instance.getPropertyDefinition().add(getPropertyDefinition(propertyDefinition));
+        }
+    }
+}

Added: incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/JCRQueryRepresentation.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/JCRQueryRepresentation.java?rev=1098099&view=auto
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/JCRQueryRepresentation.java (added)
+++ incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/JCRQueryRepresentation.java Sat Apr 30 11:18:30 2011
@@ -0,0 +1,30 @@
+package org.apache.stanbol.cmsadapter.jcr.repository;
+
+public class JCRQueryRepresentation {
+
+    private String queryString;
+    private String queryType;
+
+    public String getQueryString() {
+        return queryString;
+    }
+
+    public void setQueryString(String queryString) {
+        this.queryString = queryString;
+    }
+
+    public JCRQueryRepresentation(String queryString, String queryType) {
+        super();
+        this.queryString = queryString;
+        this.queryType = queryType;
+    }
+
+    public String getQueryType() {
+        return queryType;
+    }
+
+    public void setQueryType(String queryType) {
+        this.queryType = queryType;
+    }
+
+}

Added: incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/JCRRepositoryAccess.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/JCRRepositoryAccess.java?rev=1098099&view=auto
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/JCRRepositoryAccess.java (added)
+++ incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/JCRRepositoryAccess.java Sat Apr 30 11:18:30 2011
@@ -0,0 +1,381 @@
+package org.apache.stanbol.cmsadapter.jcr.repository;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import javax.jcr.LoginException;
+import javax.jcr.NamespaceException;
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.query.InvalidQueryException;
+import javax.jcr.query.Query;
+import javax.jcr.query.QueryManager;
+import javax.jcr.query.QueryResult;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.rmi.repository.RMIRemoteRepository;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.ChildObjectDefinition;
+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.ObjectTypeDefinition;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.Property;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.PropertyDefinition;
+import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccess;
+import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+//TODO Implement session management. Currently for each operation a new Session is retrieved.
+@Component(immediate = true)
+@Service
+public class JCRRepositoryAccess implements RepositoryAccess {
+
+    private static final Logger log = LoggerFactory.getLogger(JCRRepositoryAccess.class);
+
+    @Override
+    public Session getSession(ConnectionInfo connectionInfo) throws RepositoryAccessException {
+        Repository repository = new RMIRemoteRepository(connectionInfo.getRepositoryURL());
+        Session session = null;
+
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        try {
+            Thread.currentThread().setContextClassLoader(JCRRepositoryAccess.class.getClassLoader());
+
+            String workspaceName = connectionInfo.getWorkspaceName();
+            String username = connectionInfo.getPassword();
+            String password = connectionInfo.getPassword();
+
+            if (workspaceName == null || workspaceName.equals("") || workspaceName.equals("default")) {
+
+                session = repository.login(new SimpleCredentials(username, password.toCharArray()));
+            } else {
+                session = repository.login(new SimpleCredentials(username, password.toCharArray()),
+                    workspaceName);
+            }
+
+        } catch (LoginException e) {
+            throw new RepositoryAccessException("Error at login:", e);
+        } catch (RepositoryException e) {
+            throw new RepositoryAccessException("Error at obtaining session", e);
+        } finally {
+            Thread.currentThread().setContextClassLoader(cl);
+        }
+
+        return session;
+    }
+
+    @Override
+    public List<CMSObject> getNodeByPath(String path, ConnectionInfo connectionInfo) throws RepositoryAccessException {
+        List<JCRQueryRepresentation> queries = QueryHelper.getJCRItemByPathQuery(path);
+        return processQuery(connectionInfo, queries, Integer.MAX_VALUE);
+
+    }
+
+    @Override
+    public List<CMSObject> getNodeById(String id, ConnectionInfo connectionInfo) throws RepositoryAccessException {
+        JCRQueryRepresentation query = QueryHelper.getJCRItemByIDQuery(id);
+        return processQuery(connectionInfo, Arrays.asList(new JCRQueryRepresentation[] {query}),
+            Integer.MAX_VALUE);
+    }
+
+    @Override
+    public boolean canRetrieve(ConnectionInfo connectionInfo) {
+        return connectionInfo.getConnectionType().equals("JCR");
+    }
+
+    private QueryResult executeQuery(JCRQueryRepresentation queryRep, ConnectionInfo connectionInfo) throws RepositoryAccessException {
+
+        Session session = getSession(connectionInfo);
+        return executeQuery(queryRep, session);
+    }
+
+    private QueryResult executeQuery(JCRQueryRepresentation queryRep, Session session) throws RepositoryAccessException {
+        try {
+
+            QueryManager qm;
+            qm = session.getWorkspace().getQueryManager();
+            Query query = qm.createQuery(queryRep.getQueryString(), queryRep.getQueryType());
+            QueryResult queryResult = query.execute();
+            return queryResult;
+
+        } catch (InvalidQueryException e1) {
+            throw new RepositoryAccessException("Invalid Query", e1);
+        } catch (RepositoryException e) {
+            throw new RepositoryAccessException("Error at query execution", e);
+        }
+    }
+
+    private List<CMSObject> processQuery(ConnectionInfo connInfo,
+                                          List<JCRQueryRepresentation> queryReps,
+                                          int max) throws RepositoryAccessException {
+        List<CMSObject> results = new ArrayList<CMSObject>();
+        for (JCRQueryRepresentation queryRep : queryReps) {
+            QueryResult queryResult = executeQuery(queryRep, connInfo);
+            processResult(results, queryResult, max);
+        }
+        return results;
+
+    }
+
+    private List<CMSObject> processQuery(Session session, List<JCRQueryRepresentation> queryReps, int max) throws RepositoryAccessException {
+        List<CMSObject> results = new ArrayList<CMSObject>();
+        for (JCRQueryRepresentation queryRep : queryReps) {
+            QueryResult queryResult = executeQuery(queryRep, session);
+            processResult(results, queryResult, max);
+        }
+        return results;
+    }
+
+    private void processResult(List<CMSObject> cmsObjects, QueryResult queryResult, int max) throws RepositoryAccessException {
+        try {
+            NodeIterator nodes = queryResult.getNodes();
+            while (nodes.hasNext() && max > 0) {
+                Node current = nodes.nextNode();
+                try {
+                    cmsObjects.add(JCRModelMapper.getCMSObject(current));
+                } catch (RepositoryException e) {
+                    log.info("Can not create ObjectType for node {}", current.getPath());
+                }
+                max--;
+            }
+
+        } catch (RepositoryException e) {
+            throw new RepositoryAccessException("Error accesing result nodes", e);
+        }
+
+    }
+
+    @Override
+    public List<CMSObject> getNodeByPath(String path, Object session) throws RepositoryAccessException {
+        List<JCRQueryRepresentation> queries = QueryHelper.getJCRItemByPathQuery(path);
+        return processQuery((Session) session, queries, Integer.MAX_VALUE);
+    }
+
+    @Override
+    public List<CMSObject> getNodeById(String id, Object session) throws RepositoryAccessException {
+        JCRQueryRepresentation query = QueryHelper.getJCRItemByIDQuery(id);
+        return processQuery((Session) session, Arrays.asList(new JCRQueryRepresentation[] {query}),
+            Integer.MAX_VALUE);
+    }
+
+    @Override
+    public boolean canRetrieve(Object session) {
+        return session instanceof Session;
+    }
+
+    @Override
+    public List<CMSObject> getNodeByName(String name, Object session) throws RepositoryAccessException {
+        JCRQueryRepresentation query = QueryHelper.getJCRItemByNameQuery(name);
+        return processQuery((Session) session, Arrays.asList(new JCRQueryRepresentation[] {query}),
+            Integer.MAX_VALUE);
+    }
+
+    @Override
+    public List<CMSObject> getNodeByName(String name, ConnectionInfo connectionInfo) throws RepositoryAccessException {
+        JCRQueryRepresentation query = QueryHelper.getJCRItemByNameQuery(name);
+        return processQuery(connectionInfo, Arrays.asList(new JCRQueryRepresentation[] {query}),
+            Integer.MAX_VALUE);
+    }
+
+    @Override
+    public CMSObject getFirstNodeByPath(String path, ConnectionInfo connectionInfo) throws RepositoryAccessException {
+        JCRQueryRepresentation query = QueryHelper.getJCRItemByPathQuery(path).get(0);
+        return selectFirst(processQuery(connectionInfo, Arrays.asList(new JCRQueryRepresentation[] {query}),
+            1));
+    }
+
+    @Override
+    public CMSObject getFirstNodeById(String id, ConnectionInfo connectionInfo) throws RepositoryAccessException {
+        JCRQueryRepresentation query = QueryHelper.getJCRItemByIDQuery(id);
+        return selectFirst(processQuery(connectionInfo, Arrays.asList(new JCRQueryRepresentation[] {query}),
+            1));
+    }
+
+    @Override
+    public CMSObject getFirstNodeByPath(String path, Object session) throws RepositoryAccessException {
+        JCRQueryRepresentation query = QueryHelper.getJCRItemByPathQuery(path).get(0);
+        return selectFirst(processQuery((Session) session,
+            Arrays.asList(new JCRQueryRepresentation[] {query}), 1));
+    }
+
+    @Override
+    public CMSObject getFirstNodeById(String id, Object session) throws RepositoryAccessException {
+        JCRQueryRepresentation query = QueryHelper.getJCRItemByIDQuery(id);
+        return selectFirst(processQuery((Session) session,
+            Arrays.asList(new JCRQueryRepresentation[] {query}), 1));
+    }
+
+    @Override
+    public CMSObject getFirstNodeByName(String name, Object session) throws RepositoryAccessException {
+        JCRQueryRepresentation query = QueryHelper.getJCRItemByNameQuery(name);
+        return selectFirst(processQuery((Session) session,
+            Arrays.asList(new JCRQueryRepresentation[] {query}), 1));
+    }
+
+    @Override
+    public CMSObject getFirstNodeByName(String name, ConnectionInfo connectionInfo) throws RepositoryAccessException {
+        JCRQueryRepresentation query = QueryHelper.getJCRItemByNameQuery(name);
+        return selectFirst(processQuery(connectionInfo, Arrays.asList(new JCRQueryRepresentation[] {query}),
+            1));
+
+    }
+
+    private CMSObject selectFirst(List<CMSObject> nodes) {
+        if (nodes.size() != 1) {
+            return null;
+        } else {
+            return nodes.get(0);
+        }
+    }
+
+    @Override
+    public List<CMSObject> getChildren(CMSObject node, Object session) throws RepositoryAccessException {
+        try {
+            Node jcrNode = ((Session) session).getNodeByIdentifier(node.getUniqueRef());
+            JCRModelMapper.fillCMSObjectChildren(node, jcrNode);
+            return node.getChildren();
+        } catch (RepositoryException e) {
+            throw new RepositoryAccessException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public ObjectTypeDefinition getObjectTypeDefinition(String typeRef, Object session) throws RepositoryAccessException {
+        try {
+            NodeType nodeType = ((Session) session).getWorkspace().getNodeTypeManager().getNodeType(typeRef);
+            return JCRModelMapper.getObjectTypeDefinition(nodeType);
+        } catch (RepositoryException e) {
+            throw new RepositoryAccessException(e.getMessage(), e);
+        }
+
+    }
+
+    @Override
+    public List<Property> getProperties(CMSObject node, Object session) throws RepositoryAccessException {
+        try {
+            Node jcrNode = ((Session) session).getNodeByIdentifier(node.getUniqueRef());
+            JCRModelMapper.fillProperties(node, jcrNode);
+            return node.getProperty();
+        } catch (RepositoryException e) {
+            throw new RepositoryAccessException(e.getMessage(), e);
+        }
+
+    }
+
+    @Override
+    public List<PropertyDefinition> getPropertyDefinitions(ObjectTypeDefinition instance, Object session) throws RepositoryAccessException {
+        try {
+            NodeType nodeType = ((Session) session).getWorkspace().getNodeTypeManager()
+                    .getNodeType(instance.getUniqueRef());
+            JCRModelMapper.fillPropertyDefinitions(instance, nodeType);
+            return instance.getPropertyDefinition();
+        } catch (RepositoryException e) {
+            throw new RepositoryAccessException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public List<ObjectTypeDefinition> getParentTypeDefinitions(ObjectTypeDefinition instance, Object session) throws RepositoryAccessException {
+        try {
+            List<ObjectTypeDefinition> parentsResolved = new ArrayList<ObjectTypeDefinition>(instance
+                    .getParentRef().size());
+            for (String parentRef : instance.getParentRef()) {
+                NodeType nodeType = ((Session) session).getWorkspace().getNodeTypeManager()
+                        .getNodeType(parentRef);
+                parentsResolved.add(JCRModelMapper.getObjectTypeDefinition(nodeType));
+            }
+
+            return parentsResolved;
+        } catch (RepositoryException e) {
+            throw new RepositoryAccessException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public List<ChildObjectDefinition> getChildObjectTypeDefinitions(ObjectTypeDefinition instance,
+                                                                     Object session) throws RepositoryAccessException {
+        try {
+            NodeType nodeType = ((Session) session).getWorkspace().getNodeTypeManager()
+                    .getNodeType(instance.getUniqueRef());
+            JCRModelMapper.fillChildObjectDefinitions(instance, nodeType);
+            return instance.getChildObjectDefinition();
+        } catch (RepositoryException e) {
+            throw new RepositoryAccessException(e.getMessage(), e);
+        }
+
+    }
+
+    @Override
+    public ObjectTypeDefinition getAllowableTypeDef(ChildObjectDefinition instance, Object session) throws RepositoryAccessException {
+        try {
+            NodeType nodeType = ((Session) session).getWorkspace().getNodeTypeManager()
+                    .getNodeType(instance.getAllowedObjectTypeDefRef());
+            return JCRModelMapper.getObjectTypeDefinition(nodeType);
+        } catch (RepositoryException e) {
+            throw new RepositoryAccessException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public CMSObject getContainerObject(Property instance, Object session) throws RepositoryAccessException {
+        try {
+            Node jcrNode = ((Session) session).getNodeByIdentifier(instance.getContainerObjectRef());
+            return JCRModelMapper.getCMSObject(jcrNode);
+        } catch (RepositoryException e) {
+            throw new RepositoryAccessException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public PropertyDefinition getPropertyDefinition(Property instance, Object session) throws RepositoryAccessException {
+        try {
+            NodeType sourceObjectType = ((Session) session).getWorkspace().getNodeTypeManager()
+                    .getNodeType(instance.getSourceObjectTypeRef());
+            JCRModelMapper.fillPropertyDefinition(instance, sourceObjectType);
+
+            return instance.getPropertyDefinition();
+        } catch (RepositoryException e) {
+            throw new RepositoryAccessException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public String getNamespaceURI(String prefix, Object session) throws RepositoryAccessException {
+        try {
+            return ((Session) session).getNamespaceURI(prefix);
+        } catch (NamespaceException e) {
+            return null;
+        } catch (RepositoryException e) {
+            throw new RepositoryAccessException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public CMSObject getParentByNode(CMSObject instance, Object session) throws RepositoryAccessException {
+        Node parent;
+        try {
+            if (instance.getParentRef() == null) {
+                Node jcrNode = ((Session) session).getNodeByIdentifier(instance.getUniqueRef());
+                try {
+                    parent = jcrNode.getParent();
+                    instance.setParentRef(parent.getIdentifier());
+                } catch (Exception e) {
+                    // No parent
+                    parent = null;
+                }
+            } else {
+                parent = ((Session) session).getNodeByIdentifier(instance.getParentRef());
+            }
+            return JCRModelMapper.getCMSObject(parent);
+        } catch (RepositoryException e) {
+            throw new RepositoryAccessException("Error at accessing parent", e);
+        }
+    }
+}

Added: incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/QueryHelper.java
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/QueryHelper.java?rev=1098099&view=auto
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/QueryHelper.java (added)
+++ incubator/stanbol/trunk/cmsadapter/jcr/src/main/java/org/apache/stanbol/cmsadapter/jcr/repository/QueryHelper.java Sat Apr 30 11:18:30 2011
@@ -0,0 +1,38 @@
+package org.apache.stanbol.cmsadapter.jcr.repository;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jcr.query.Query;
+
+public class QueryHelper {
+
+    public static final String JCR_ITEM_BY_PATH = "SELECT * from nt:base WHERE jcr:path = '%s'";
+    public static final String JCR_ITEM_BY_ID = "SELECT * from nt:base WHERE jcr:id = '%s'";
+    public static final String JCR_ITEM_BY_NAME = "//element(%s ,nt:base)";
+
+    public static List<JCRQueryRepresentation> getJCRItemByPathQuery(String path) {
+        List<JCRQueryRepresentation> queries = new ArrayList<JCRQueryRepresentation>();
+        String queryString;
+        if (path.endsWith("/%")) {
+            // Assumed that the root node is wanted to be included in the query result
+            queryString = String.format(JCR_ITEM_BY_PATH, path.substring(0, path.length() - 2));
+            queries.add(new JCRQueryRepresentation(queryString, Query.SQL));
+        }
+        queryString = String.format(JCR_ITEM_BY_PATH, path);
+        queries.add(new JCRQueryRepresentation(queryString, Query.SQL));
+
+        return queries;
+    }
+
+    public static JCRQueryRepresentation getJCRItemByIDQuery(String ID) {
+        String queryString = String.format(JCR_ITEM_BY_ID, ID);
+        return new JCRQueryRepresentation(queryString, Query.SQL);
+    }
+
+    public static JCRQueryRepresentation getJCRItemByNameQuery(String name) {
+        String queryString = String.format(JCR_ITEM_BY_NAME, name);
+        return new JCRQueryRepresentation(queryString, Query.XPATH);
+    }
+
+}

Added: incubator/stanbol/trunk/cmsadapter/launchers/lite/pom.xml
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/launchers/lite/pom.xml?rev=1098099&view=auto
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/launchers/lite/pom.xml (added)
+++ incubator/stanbol/trunk/cmsadapter/launchers/lite/pom.xml Sat Apr 30 11:18:30 2011
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.apache.stanbol</groupId>
+		<artifactId>org.apache.stanbol.cmsadapter.parent</artifactId>
+		<version>0.9-SNAPSHOT</version>
+		<relativePath>../../parent</relativePath>
+	</parent>
+
+	<groupId>org.apache.stanbol</groupId>
+	<artifactId>org.apache.stanbol.cmsadapter.launchers.lite</artifactId>
+	<packaging>jar</packaging>
+	<name>Apache Stanbol CMS Adapter Lite Launcher</name>
+
+	<build>
+		<plugins>
+			<plugin>
+				<artifactId>maven-clean-plugin</artifactId>
+				<version>2.2</version>
+				<configuration>
+					<filesets>
+						<fileset>
+							<directory>${basedir}</directory>
+							<includes>
+								<include>sling</include>
+							</includes>
+						</fileset>
+					</filesets>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.sling</groupId>
+				<artifactId>maven-launchpad-plugin</artifactId>
+				<!-- TODO the maven-launchpad-plugin can also generate a war file and 
+					Karaf description, we could add this. See http://sling.apache.org/site/maven-launchpad-plugin.html -->
+				<version>2.0.6</version>
+				<executions>
+					<execution>
+						<id>prepare-package</id>
+						<goals>
+							<goal>prepare-package</goal>
+						</goals>
+						<configuration>
+							<includeDefaultBundles>false</includeDefaultBundles>
+							<!-- Standalone jar requires an OSGi http service implementation -->
+							<jarWebSupport>
+								<groupId>org.apache.felix</groupId>
+								<artifactId>org.apache.felix.http.jetty</artifactId>
+								<version>2.0.4</version>
+							</jarWebSupport>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<configuration>
+					<archive>
+						<manifest>
+							<!-- make the generated jar runnable -->
+							<addClasspath>true</addClasspath>
+							<mainClass>org.apache.sling.launchpad.app.Main</mainClass>
+							<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+						</manifest>
+					</archive>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+	<dependencies>
+		<dependency>
+			<!-- maven-launchpad-plugin builds on the launchpad.base app -->
+			<groupId>org.apache.sling</groupId>
+			<artifactId>org.apache.sling.launchpad.base</artifactId>
+			<version>2.1.1-SNAPSHOT</version>
+			<classifier>app</classifier>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>

Propchange: incubator/stanbol/trunk/cmsadapter/launchers/lite/pom.xml
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/stanbol/trunk/cmsadapter/launchers/lite/src/main/bundles/list.xml
URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/launchers/lite/src/main/bundles/list.xml?rev=1098099&view=auto
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/launchers/lite/src/main/bundles/list.xml (added)
+++ incubator/stanbol/trunk/cmsadapter/launchers/lite/src/main/bundles/list.xml Sat Apr 30 11:18:30 2011
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <!-- List of initial bundles for the Ontogen Sling-based standalone launcher -->
+<bundles>
+
+	<!-- OSGi infrastructure -->
+	<startLevel level="5">
+		<bundle>
+			<groupId>org.apache.sling</groupId>
+			<artifactId>org.apache.sling.commons.log</artifactId>
+			<version>2.1.2</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.scr</artifactId>
+			<version>1.6.0</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.osgi.core</artifactId>
+			<version>1.2.0</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.configadmin</artifactId>
+			<version>1.2.4</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.eventadmin</artifactId>
+			<version>1.2.2</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.metatype</artifactId>
+			<version>1.0.4</version>
+		</bundle>
+		<!-- HTTP service -->
+		<bundle>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.http.whiteboard</artifactId>
+			<version>2.0.4</version>
+		</bundle>
+		<bundle>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.compendium</artifactId>
+			<version>4.2.0</version>
+		</bundle>
+	</startLevel>
+
+
+	<!-- Felix web console and plugins -->
+	<startLevel level="10">
+		<bundle>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.webconsole</artifactId>
+			<version>3.1.2</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.webconsole.plugins.memoryusage
+			</artifactId>
+			<version>1.0.2</version>
+		</bundle>
+	</startLevel>
+
+	<!-- General-purpose libraries -->
+	<startLevel level="10">
+		<bundle>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>1.4</version>
+		</bundle>
+		<bundle>
+			<groupId>commons-lang</groupId>
+			<artifactId>commons-lang</artifactId>
+			<version>2.4</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-math</artifactId>
+			<version>2.1</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpcore-osgi</artifactId>
+			<version>4.0.1</version>
+		</bundle>
+		<bundle>
+			<groupId>mysql</groupId>
+			<artifactId>mysql-connector-java</artifactId>
+			<version>5.1.12</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.derby</groupId>
+			<artifactId>derby</artifactId>
+			<version>10.6.2.1</version>
+		</bundle>
+	</startLevel>
+
+	<!-- Clerezza storage and sparql infrastructure -->
+	<startLevel level="16">
+		<bundle>
+			<groupId>org.apache.clerezza</groupId>
+			<artifactId>org.apache.clerezza.rdf.core</artifactId>
+			<version>0.12-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza</groupId>
+			<artifactId>org.apache.clerezza.rdf.utils</artifactId>
+			<version>0.13-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza</groupId>
+			<artifactId>org.apache.clerezza.utils</artifactId>
+			<version>0.1-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza</groupId>
+			<artifactId>org.apache.clerezza.rdf.ontologies</artifactId>
+			<version>0.11-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza</groupId>
+			<artifactId>org.apache.clerezza.rdf.jena.sparql</artifactId>
+			<version>0.5-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza</groupId>
+			<artifactId>org.apache.clerezza.rdf.jena.commons</artifactId>
+			<version>0.5-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza</groupId>
+			<artifactId>org.apache.clerezza.rdf.jena.facade</artifactId>
+			<version>0.12-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza.ext</groupId>
+			<artifactId>com.hp.hpl.jena.tdb</artifactId>
+			<version>0.3-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza.ext</groupId>
+			<artifactId>javax.mail</artifactId>
+			<version>0.4-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.wymiwyg</groupId>
+			<artifactId>wymiwyg-commons-core</artifactId>
+			<version>0.7.5</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza.ext</groupId>
+			<artifactId>com.ibm.icu</artifactId>
+			<version>0.5-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza</groupId>
+			<artifactId>org.apache.clerezza.rdf.jena.storage</artifactId>
+			<version>0.5-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza</groupId>
+			<artifactId>org.apache.clerezza.rdf.jena.tdb.storage</artifactId>
+			<version>0.5-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza</groupId>
+			<artifactId>org.apache.clerezza.rdf.simple.storage</artifactId>
+			<version>0.7-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza</groupId>
+			<artifactId>org.apache.clerezza.rdf.jena.parser</artifactId>
+			<version>0.10-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza</groupId>
+			<artifactId>org.apache.clerezza.rdf.rdfjson</artifactId>
+			<version>0.3-incubating-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.clerezza.ext</groupId>
+			<artifactId>org.json.simple</artifactId>
+			<version>0.3-incubating-SNAPSHOT</version>
+		</bundle>
+	</startLevel>
+
+	<!-- JAX-RS -->
+	<startLevel level="5">
+		<!-- WARNING: jersey-core bug, must start before jersey-server to avoid 
+			jersey spi class not found errors. Restart jersey-server manually if getting 
+			those. -->
+		<bundle>
+			<groupId>com.sun.jersey</groupId>
+			<artifactId>jersey-core</artifactId>
+			<version>1.2</version>
+		</bundle>
+	</startLevel>
+
+	<startLevel level="15">
+		<bundle>
+			<groupId>javax.ws.rs</groupId>
+			<artifactId>jsr311-api</artifactId>
+			<version>1.1.1</version>
+		</bundle>
+		<bundle>
+			<groupId>com.sun.jersey</groupId>
+			<artifactId>jersey-server</artifactId>
+			<version>1.2</version>
+		</bundle>
+		<bundle>
+			<groupId>com.sun.jersey</groupId>
+			<artifactId>jersey-client</artifactId>
+			<version>1.2</version>
+		</bundle>
+		<bundle>
+			<groupId>org.codehaus.jettison</groupId>
+			<artifactId>jettison</artifactId>
+			<version>1.2</version>
+		</bundle>
+		<bundle>
+			<groupId>org.codehaus.jackson</groupId>
+			<artifactId>jackson-lgpl</artifactId>
+			<version>0.9.5</version>
+		</bundle>
+	</startLevel>
+
+
+	<!-- Stanbol Bundles -->
+	<startLevel level="20">
+		<!-- Commons -->
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.apache.stanbol.commons.web.base
+			</artifactId>
+			<version>0.9-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.apache.stanbol.commons.web.home
+			</artifactId>
+			<version>0.9-SNAPSHOT</version>
+		</bundle>
+
+		<!-- Enhancer -->
+		<!-- Generic -->
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.apache.stanbol.jsonld
+			</artifactId>
+			<version>0.9-SNAPSHOT</version>
+		</bundle>
+
+		<!-- Store -->
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.apache.stanbol.ontologymanager.store.api
+			</artifactId>
+			<version>0.9-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.apache.stanbol.commons.web.ontology
+			</artifactId>
+			<version>0.9-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.apache.stanbol.ontologymanager.store.jena
+			</artifactId>
+			<version>0.9-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.apache.stanbol.ontologymanager.store.clerezza
+			</artifactId>
+			<version>0.9-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.apache.stanbol.ontologymanager.store.rest.client
+			</artifactId>
+			<version>0.9-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.semanticweb.owlapi.owllink</artifactId>
+			<version>1.0.2-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.semanticweb.owlapi</artifactId>
+			<version>3.0.0-SNAPSHOT</version>
+		</bundle>
+		<!-- CMS Adapter -->
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.apache.stanbol.cmsadapter.servicesapi
+			</artifactId>
+			<version>0.9-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.apache.stanbol.cmsadapter.core
+			</artifactId>
+			<version>0.9-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.apache.stanbol.cmsadapter.web
+			</artifactId>
+			<version>0.9-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.apache.stanbol.cmsadapter.jcr
+			</artifactId>
+			<version>0.9-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>org.apache.stanbol.cmsadapter.rest.client
+			</artifactId>
+			<version>0.9-SNAPSHOT</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.stanbol</groupId>
+			<artifactId>crx-rmi
+			</artifactId>
+			<version>0.9-SNAPSHOT</version>
+		</bundle>
+	</startLevel>
+
+	<!-- JCR/CMIS Bundles -->
+	<startLevel level="30">
+		<bundle>
+			<groupId>javax.jcr</groupId>
+			<artifactId>jcr</artifactId>
+			<version>2.0</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-jcr-commons</artifactId>
+			<version>2.2.5</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-jcr-rmi</artifactId>
+			<version>2.2.5</version>
+		</bundle>
+		<bundle>
+			<groupId>org.apache.jackrabbit</groupId>
+			<artifactId>jackrabbit-api</artifactId>
+			<version>2.2.5</version>
+		</bundle>
+	</startLevel>
+</bundles>

Propchange: incubator/stanbol/trunk/cmsadapter/launchers/lite/src/main/bundles/list.xml
------------------------------------------------------------------------------
    svn:executable = *