Refactor CMIS Dictionary part 2

- further simplification of CMISDictionaryService and fixup fallout
- added logging
- consolidate & fix property definition handling (only one definition per property)
- include support for aspect properties
- fix property.isInherited
- open up the door for types outside of CMIS doc, folder, rel & policy

Dictionary Service
- add isOverride() to PropertyDefinition

Invite Workflows
- ensure they create their own namespace for new types/props
- NOTE: the previous way uses a hole in the DictinaryService which has been there
        unnoticed for over 4 years, till now. At some point, the hole will be filled in.
        
Tests pass for CMIS REST / Web Services and Query.
Tests pass for Invitation Service.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@13786 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
David Caruana
2009-03-31 17:48:28 +00:00
parent 8581c334f9
commit 4e9c3a3d3a
29 changed files with 1130 additions and 935 deletions

View File

@@ -59,7 +59,10 @@ public class CMISMapping
* The QName for the Alfresco CMIS Model.
*/
public static QName CMIS_MODEL_QNAME = QName.createQName(CMIS_MODEL_URI, CMIS_MODEL_NAME);
// CMIS Internal Types
public static String OBJECT_OBJECT_TYPE = "Object";
public static String FILESYSTEM_OBJECT_TYPE ="FileSystemObject";
// CMIS Data Types
public static QName CMIS_DATATYPE_ID = QName.createQName(CMIS_MODEL_URI, "id");
@@ -68,11 +71,17 @@ public class CMISMapping
public static QName CMIS_DATATYPE_HTML = QName.createQName(CMIS_MODEL_URI, "html");
// CMIS Types
public static QName OBJECT_QNAME = QName.createQName(CMIS_MODEL_URI, OBJECT_OBJECT_TYPE);
public static QName FILESYSTEM_OBJECT_QNAME = QName.createQName(CMIS_MODEL_URI, FILESYSTEM_OBJECT_TYPE);
public static QName DOCUMENT_QNAME = QName.createQName(CMIS_MODEL_URI, CMISDictionaryModel.DOCUMENT_OBJECT_TYPE);
public static QName FOLDER_QNAME = QName.createQName(CMIS_MODEL_URI, CMISDictionaryModel.FOLDER_OBJECT_TYPE);
public static QName RELATIONSHIP_QNAME = QName.createQName(CMIS_MODEL_URI, CMISDictionaryModel.RELATIONSHIP_OBJECT_TYPE);
public static QName POLICY_QNAME = QName.createQName(CMIS_MODEL_URI, CMISDictionaryModel.POLICY_OBJECT_TYPE);
// CMIS Internal Type Ids
public static CMISTypeId OBJECT_TYPE_ID = new CMISTypeId(CMISScope.OBJECT, OBJECT_OBJECT_TYPE.toLowerCase(), OBJECT_QNAME);
public static CMISTypeId FILESYSTEM_OBJECT_TYPE_ID = new CMISTypeId(CMISScope.OBJECT, FILESYSTEM_OBJECT_TYPE.toLowerCase(), FILESYSTEM_OBJECT_QNAME);
// Properties
public static QName PROP_OBJECT_ID_QNAME = QName.createQName(CMIS_MODEL_URI, CMISDictionaryModel.PROP_OBJECT_ID);
@@ -90,6 +99,8 @@ public class CMISMapping
*/
static
{
qNameToCmisTypeId.put(OBJECT_QNAME, OBJECT_TYPE_ID);
qNameToCmisTypeId.put(FILESYSTEM_OBJECT_QNAME, FILESYSTEM_OBJECT_TYPE_ID);
qNameToCmisTypeId.put(DOCUMENT_QNAME, CMISDictionaryModel.DOCUMENT_TYPE_ID);
qNameToCmisTypeId.put(FOLDER_QNAME, CMISDictionaryModel.FOLDER_TYPE_ID);
qNameToCmisTypeId.put(RELATIONSHIP_QNAME, CMISDictionaryModel.RELATIONSHIP_TYPE_ID);
@@ -195,6 +206,14 @@ public class CMISMapping
{
return CMISDictionaryModel.POLICY_TYPE_ID;
}
else if (typeId.equalsIgnoreCase(OBJECT_TYPE_ID.getId()))
{
return OBJECT_TYPE_ID;
}
else if (typeId.equalsIgnoreCase(FILESYSTEM_OBJECT_TYPE_ID.getId()))
{
return FILESYSTEM_OBJECT_TYPE_ID;
}
// Is it an Alfresco type id?
if (typeId.length() < 4 || typeId.charAt(1) != '/')
@@ -255,6 +274,14 @@ public class CMISMapping
{
return getCmisTypeId(CMISScope.POLICY, classQName);
}
if (classQName.equals(CMISMapping.OBJECT_QNAME))
{
return getCmisTypeId(CMISScope.OBJECT, classQName);
}
if (classQName.equals(CMISMapping.FILESYSTEM_OBJECT_QNAME))
{
return getCmisTypeId(CMISScope.OBJECT, classQName);
}
if (isValidCmisDocument(classQName))
{
return getCmisTypeId(CMISScope.DOCUMENT, classQName);
@@ -398,7 +425,8 @@ public class CMISMapping
}
if (aspectDef.getName().equals(ContentModel.ASPECT_VERSIONABLE) ||
aspectDef.getName().equals(ContentModel.ASPECT_AUDITABLE))
aspectDef.getName().equals(ContentModel.ASPECT_AUDITABLE) ||
aspectDef.getName().equals(ContentModel.ASPECT_REFERENCEABLE))
{
return false;
}