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 = *