diff --git a/config/alfresco/model/cmisModel.xml b/config/alfresco/model/cmisModel.xml
index 3aa34ab615..cb4e8f812d 100644
--- a/config/alfresco/model/cmisModel.xml
+++ b/config/alfresco/model/cmisModel.xml
@@ -11,7 +11,31 @@
+
+
+
+ org.alfresco.repo.search.impl.lucene.analysis.AlfrescoStandardAnalyser
+ java.lang.String
+
+
+
+ org.alfresco.repo.search.impl.lucene.analysis.AlfrescoStandardAnalyser
+ java.lang.String
+
+
+
+ org.alfresco.repo.search.impl.lucene.analysis.AlfrescoStandardAnalyser
+ java.lang.String
+
+
+
+ org.alfresco.repo.search.impl.lucene.analysis.AlfrescoStandardAnalyser
+ java.lang.String
+
+
+
+
@@ -82,7 +106,7 @@
Version series id
The version series id
- d:noderef
+ cmis:id
true
true
false
@@ -111,7 +135,7 @@
Version Series Checked Out Id
The checked out version series id
- d:noderef
+ cmis:id
true
false
false
@@ -174,7 +198,7 @@
Content Stream URI
The content stream URI
- d:text
+ cmis:uri
true
false
false
@@ -182,6 +206,7 @@
+ cmis:Core
cmis:Named
@@ -193,7 +218,7 @@
Parent Id
The parent id of the folder
- d:noderef
+ cmis:id
true
true
false
@@ -204,7 +229,7 @@
Allowed Child Object Types Ids
The allowed child object type ids
- d:qname
+ cmis:id
true
false
true
@@ -212,6 +237,7 @@
+ cmis:Core
cmis:Named
@@ -223,7 +249,7 @@
Source Id
The source id for the relationship
- d:noderef
+ cmis:id
true
true
false
@@ -232,7 +258,7 @@
Target Id
The target id for the relationship
- d:noderef
+ cmis:id
true
true
false
@@ -288,7 +314,7 @@
Object Id
The unique object id (a node ref)
- d:noderef
+ cmis:id
true
true
false
@@ -299,7 +325,7 @@
URI
URI
- d:text
+ cmis:uri
true
false
false
@@ -308,7 +334,7 @@
Object Type Id
The object type id
- d:qname
+ cmis:id
true
true
false
@@ -373,7 +399,6 @@
- cmis:Core
Name
diff --git a/source/java/org/alfresco/cmis/dictionary/CMISMapping.java b/source/java/org/alfresco/cmis/dictionary/CMISMapping.java
index ada23cf43e..bceda6ce79 100644
--- a/source/java/org/alfresco/cmis/dictionary/CMISMapping.java
+++ b/source/java/org/alfresco/cmis/dictionary/CMISMapping.java
@@ -60,6 +60,14 @@ public class CMISMapping
* The QName for the Alfresco CMIS Model.
*/
public static QName CMIS_MODEL_QNAME = QName.createQName(CMIS_MODEL_URI, CMIS_MODEL_NAME);
+
+ /**
+ * The QNames for CMIS Data Types.
+ */
+ public static QName CMIS_DATATYPE_ID = QName.createQName(CMIS_MODEL_URI, "id");
+ public static QName CMIS_DATATYPE_URI = QName.createQName(CMIS_MODEL_URI, "uri");
+ public static QName CMIS_DATATYPE_XML = QName.createQName(CMIS_MODEL_URI, "xml");
+ public static QName CMIS_DATATYPE_HTML = QName.createQName(CMIS_MODEL_URI, "html");
/**
* Type id for CMIS documents, from the spec.
@@ -179,7 +187,7 @@ public class CMISMapping
private static HashMap alfrescoToCmisTypes = new HashMap();
- private static HashMap alfrescoPropertyTypesToCimsPropertyTypes = new HashMap();
+ private static HashMap alfrescoPropertyTypesToCmisPropertyTypes = new HashMap();
/**
* Set up mappings
@@ -199,24 +207,28 @@ public class CMISMapping
alfrescoToCmisTypes.put(ContentModel.TYPE_CONTENT, DOCUMENT_QNAME);
alfrescoToCmisTypes.put(ContentModel.TYPE_FOLDER, FOLDER_QNAME);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.ANY, null);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.ASSOC_REF, null);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.BOOLEAN, CMISPropertyTypeEnum.BOOLEAN);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.CATEGORY, CMISPropertyTypeEnum.ID);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.CHILD_ASSOC_REF, null);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.CONTENT, null);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.DATE, CMISPropertyTypeEnum.DATETIME);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.DATETIME, CMISPropertyTypeEnum.DATETIME);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.DOUBLE, CMISPropertyTypeEnum.DECIMAL);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.FLOAT, CMISPropertyTypeEnum.DECIMAL);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.INT, CMISPropertyTypeEnum.INTEGER);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.LOCALE, null);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.LONG, CMISPropertyTypeEnum.INTEGER);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.MLTEXT, CMISPropertyTypeEnum.STRING);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.NODE_REF, CMISPropertyTypeEnum.ID);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.PATH, null);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.QNAME, null);
- alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.TEXT, CMISPropertyTypeEnum.STRING);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.ANY, null);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.ASSOC_REF, null);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.BOOLEAN, CMISPropertyTypeEnum.BOOLEAN);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.CATEGORY, CMISPropertyTypeEnum.ID);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.CHILD_ASSOC_REF, null);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.CONTENT, null);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.DATE, CMISPropertyTypeEnum.DATETIME);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.DATETIME, CMISPropertyTypeEnum.DATETIME);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.DOUBLE, CMISPropertyTypeEnum.DECIMAL);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.FLOAT, CMISPropertyTypeEnum.DECIMAL);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.INT, CMISPropertyTypeEnum.INTEGER);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.LOCALE, null);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.LONG, CMISPropertyTypeEnum.INTEGER);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.MLTEXT, CMISPropertyTypeEnum.STRING);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.NODE_REF, CMISPropertyTypeEnum.ID);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.PATH, null);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.QNAME, null);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(DataTypeDefinition.TEXT, CMISPropertyTypeEnum.STRING);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(CMIS_DATATYPE_ID, CMISPropertyTypeEnum.ID);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(CMIS_DATATYPE_URI, CMISPropertyTypeEnum.URI);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(CMIS_DATATYPE_XML, CMISPropertyTypeEnum.XML);
+ alfrescoPropertyTypesToCmisPropertyTypes.put(CMIS_DATATYPE_HTML, CMISPropertyTypeEnum.HTML);
}
private DictionaryService dictionaryService;
@@ -624,18 +636,7 @@ public class CMISMapping
}
QName dQName = dataTypeDefinition.getName();
- if (propertyQName.getNamespaceURI().equals(CMIS_MODEL_URI))
- {
- if (dQName.equals(DataTypeDefinition.QNAME) || dQName.equals(DataTypeDefinition.NODE_REF))
- {
- return CMISPropertyTypeEnum.ID;
- }
- else
- {
- alfrescoPropertyTypesToCimsPropertyTypes.get(dQName);
- }
- }
- return alfrescoPropertyTypesToCimsPropertyTypes.get(dQName);
+ return alfrescoPropertyTypesToCmisPropertyTypes.get(dQName);
}
diff --git a/source/java/org/alfresco/cmis/property/CMISPropertyServiceImpl.java b/source/java/org/alfresco/cmis/property/CMISPropertyServiceImpl.java
index 5006e72235..1ec5291fd6 100644
--- a/source/java/org/alfresco/cmis/property/CMISPropertyServiceImpl.java
+++ b/source/java/org/alfresco/cmis/property/CMISPropertyServiceImpl.java
@@ -245,7 +245,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin
addNamedPropertyAccessor(getContentStreamLengthPropertyAccessor());
addNamedPropertyAccessor(getContentStreamMimetypePropertyAccessor());
addNamedPropertyAccessor(getSimplePropertyAccessor(CMISMapping.PROP_CONTENT_STREAM_FILENAME, ContentModel.PROP_NAME, CMISScope.DOCUMENT));
- addNamedPropertyAccessor(getFixedValuePropertyAccessor(CMISMapping.PROP_CONTENT_STREAM_URI, null, CMISScope.DOCUMENT));
+ addNamedPropertyAccessor(getContentStreamUriPropertyAccessor());
// CMIS Folder
addNamedPropertyAccessor(getParentPropertyAccessor());
@@ -393,6 +393,14 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin
return accessor;
}
+ public NamedPropertyAccessor getContentStreamUriPropertyAccessor()
+ {
+ ContentStreamUriPropertyAccessor accessor = new ContentStreamUriPropertyAccessor();
+ accessor.setServiceRegistry(serviceRegistry);
+ accessor.setCMISMapping(cmisMapping);
+ return accessor;
+ }
+
public NamedPropertyAccessor getParentPropertyAccessor()
{
ParentPropertyAccessor accessor = new ParentPropertyAccessor();
diff --git a/source/java/org/alfresco/cmis/property/ContentStreamUriPropertyAccessor.java b/source/java/org/alfresco/cmis/property/ContentStreamUriPropertyAccessor.java
new file mode 100644
index 0000000000..8244b79052
--- /dev/null
+++ b/source/java/org/alfresco/cmis/property/ContentStreamUriPropertyAccessor.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2005-2007 Alfresco Software Limited.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ * As a special exception to the terms and conditions of version 2.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * and Open Source Software ("FLOSS") applications as described in Alfresco's
+ * FLOSS exception. You should have recieved a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * http://www.alfresco.com/legal/licensing"
+ */
+package org.alfresco.cmis.property;
+
+import java.io.Serializable;
+import java.util.Collection;
+
+import org.alfresco.cmis.dictionary.CMISMapping;
+import org.alfresco.cmis.dictionary.CMISScope;
+import org.alfresco.model.ContentModel;
+import org.alfresco.repo.search.impl.lucene.LuceneQueryParser;
+import org.alfresco.repo.search.impl.lucene.ParseException;
+import org.alfresco.repo.search.impl.querymodel.PredicateMode;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.apache.lucene.search.Query;
+
+/**
+ * Accessor for CMIS content stream length property
+ *
+ * @author andyh
+ */
+public class ContentStreamUriPropertyAccessor extends AbstractNamedPropertyAccessor
+{
+
+ public Serializable getProperty(NodeRef nodeRef)
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.append("/api/node/");
+ sb.append(nodeRef.getStoreRef().getProtocol());
+ sb.append("/");
+ sb.append(nodeRef.getStoreRef().getIdentifier());
+ sb.append("/");
+ sb.append(nodeRef.getId());
+ sb.append("/content.");
+ sb.append(getServiceRegistry().getNodeService().getProperty(nodeRef, ContentModel.PROP_NAME));
+ return sb.toString();
+ }
+
+ @Override
+ public String getPropertyName()
+ {
+ return CMISMapping.PROP_CONTENT_STREAM_URI;
+ }
+
+ @Override
+ public CMISScope getScope()
+ {
+ return CMISScope.DOCUMENT;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser,
+ * java.lang.String, java.io.Serializable, org.alfresco.repo.search.impl.querymodel.PredicateMode)
+ */
+ public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value, PredicateMode mode) throws ParseException
+ {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser,
+ * java.lang.String, java.lang.Boolean)
+ */
+ public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException
+ {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneGreaterThan(org.alfresco.repo.search.impl.lucene.LuceneQueryParser,
+ * java.lang.String, java.io.Serializable, org.alfresco.repo.search.impl.querymodel.PredicateMode)
+ */
+ public Query buildLuceneGreaterThan(LuceneQueryParser lqp, String propertyName, Serializable value, PredicateMode mode) throws ParseException
+ {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneGreaterThanOrEquals(org.alfresco.repo.search.impl.lucene.LuceneQueryParser,
+ * java.lang.String, java.io.Serializable, org.alfresco.repo.search.impl.querymodel.PredicateMode)
+ */
+ public Query buildLuceneGreaterThanOrEquals(LuceneQueryParser lqp, String propertyName, Serializable value, PredicateMode mode) throws ParseException
+ {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneIn(org.alfresco.repo.search.impl.lucene.LuceneQueryParser,
+ * java.lang.String, java.util.Collection, java.lang.Boolean,
+ * org.alfresco.repo.search.impl.querymodel.PredicateMode)
+ */
+ public Query buildLuceneIn(LuceneQueryParser lqp, String propertyName, Collection values, Boolean not, PredicateMode mode) throws ParseException
+ {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneInequality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser,
+ * java.lang.String, java.io.Serializable, org.alfresco.repo.search.impl.querymodel.PredicateMode)
+ */
+ public Query buildLuceneInequality(LuceneQueryParser lqp, String propertyName, Serializable value, PredicateMode mode) throws ParseException
+ {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneLessThan(org.alfresco.repo.search.impl.lucene.LuceneQueryParser,
+ * java.lang.String, java.io.Serializable, org.alfresco.repo.search.impl.querymodel.PredicateMode)
+ */
+ public Query buildLuceneLessThan(LuceneQueryParser lqp, String propertyName, Serializable value, PredicateMode mode) throws ParseException
+ {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneLessThanOrEquals(org.alfresco.repo.search.impl.lucene.LuceneQueryParser,
+ * java.lang.String, java.io.Serializable, org.alfresco.repo.search.impl.querymodel.PredicateMode)
+ */
+ public Query buildLuceneLessThanOrEquals(LuceneQueryParser lqp, String propertyName, Serializable value, PredicateMode mode) throws ParseException
+ {
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneLike(org.alfresco.repo.search.impl.lucene.LuceneQueryParser,
+ * java.lang.String, java.io.Serializable, java.lang.Boolean)
+ */
+ public Query buildLuceneLike(LuceneQueryParser lqp, String propertyName, Serializable value, Boolean not) throws ParseException
+ {
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.cmis.property.NamedPropertyAccessor#getLuceneSortField(java.lang.String)
+ */
+ public String getLuceneSortField(String propertyName)
+ {
+ return null;
+ }
+}