diff --git a/config/alfresco/model/cmisModel.xml b/config/alfresco/model/cmisModel.xml index 12d39318a8..8de392f80b 100644 --- a/config/alfresco/model/cmisModel.xml +++ b/config/alfresco/model/cmisModel.xml @@ -1,7 +1,7 @@ CMIS Model Definitions - 0.62c + 0.62 @@ -9,7 +9,7 @@ - + @@ -165,7 +165,7 @@ - + Document Document Type cmis:filesystemobject @@ -311,7 +311,7 @@ - + Folder Folder Type cmis:filesystemobject @@ -350,7 +350,7 @@ - + Relationship Relationship Type cmis:object @@ -376,7 +376,7 @@ - + Policy Policy Type cmis:object diff --git a/source/java/org/alfresco/cmis/CMISAllowedActionEnum.java b/source/java/org/alfresco/cmis/CMISAllowedActionEnum.java index a6540d0d9f..a49705e4b9 100644 --- a/source/java/org/alfresco/cmis/CMISAllowedActionEnum.java +++ b/source/java/org/alfresco/cmis/CMISAllowedActionEnum.java @@ -47,7 +47,8 @@ public enum CMISAllowedActionEnum implements EnumLabel CAN_GET_CONTENT_STREAM("canGetContentStream"), CAN_UPDATE_PROPERTIES("canUpdateProperties"), CAN_MOVE_OBJECT("canMoveObject"), - CAN_DELETE_OBJECT("canDelete"), // TODO: ISSUE - should be canDeleteObject + CAN_DELETE_OBJECT("canDeleteObject"), + CAN_DELETE_TREE("canDeleteTree"), CAN_SET_CONTENT_STREAM("canSetContentStream"), CAN_DELETE_CONTENT_STREAM("canDeleteContentStream"), diff --git a/source/java/org/alfresco/cmis/CMISDictionaryService.java b/source/java/org/alfresco/cmis/CMISDictionaryService.java index a9b7c455dc..7b4921d499 100644 --- a/source/java/org/alfresco/cmis/CMISDictionaryService.java +++ b/source/java/org/alfresco/cmis/CMISDictionaryService.java @@ -67,6 +67,11 @@ public interface CMISDictionaryService */ public CMISTypeDefinition findTypeForTable(String tableName); + /** + * Get Base Types + */ + public Collection getBaseTypes(); + /** * Get all Types * diff --git a/source/java/org/alfresco/cmis/dictionary/CMISAbstractDictionaryService.java b/source/java/org/alfresco/cmis/dictionary/CMISAbstractDictionaryService.java index fa68d9d7f1..4639d465e1 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISAbstractDictionaryService.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISAbstractDictionaryService.java @@ -127,6 +127,7 @@ public abstract class CMISAbstractDictionaryService extends AbstractLifecycleBea Map objectDefsByTypeId = new HashMap(); Map typeDefsByTypeId = new HashMap(); Map typeDefsByTable = new HashMap(); + List baseTypes = new ArrayList(); // Property Definitions Index Map propDefsById = new HashMap(); @@ -212,6 +213,7 @@ public abstract class CMISAbstractDictionaryService extends AbstractLifecycleBea StringBuilder builder = new StringBuilder(); builder.append("DictionaryRegistry["); builder.append("Types=").append(typeDefsByTypeId.size()).append(", "); + builder.append("Base Types=").append(baseTypes.size()).append(", "); builder.append("Properties=").append(propDefsByPropId.size()); builder.append("]"); return builder.toString(); @@ -307,6 +309,15 @@ public abstract class CMISAbstractDictionaryService extends AbstractLifecycleBea CMISTypeDefinition typeDef = getRegistry().typeDefsByTable.get(tableName.toLowerCase()); return typeDef; } + + /* + * (non-Javadoc) + * @see org.alfresco.cmis.CMISDictionaryService#getBaseTypes() + */ + public Collection getBaseTypes() + { + return Collections.unmodifiableCollection(getRegistry().baseTypes); + } /* * (non-Javadoc) @@ -446,11 +457,20 @@ public abstract class CMISAbstractDictionaryService extends AbstractLifecycleBea typeDef.assertComplete(); } + // phase 5: register base types + for (CMISAbstractTypeDefinition typeDef : registry.objectDefsByTypeId.values()) + { + if (typeDef.isPublic() && typeDef.getParentType() == null) + { + registry.baseTypes.add(typeDef); + } + } + // publish new registry registryMap.put(tenantService.getCurrentUserDomain(), registry); if (logger.isInfoEnabled()) - logger.info("Initialized CMIS Dictionary. Types:" + registry.typeDefsByTypeId.size() + ", Properties:" + registry.propDefsByPropId.size()); + logger.info("Initialized CMIS Dictionary. Types:" + registry.typeDefsByTypeId.size() + ", Base Types: " + registry.baseTypes.size() + ", Properties:" + registry.propDefsByPropId.size()); } /* diff --git a/source/java/org/alfresco/cmis/dictionary/CMISDictionaryTest.java b/source/java/org/alfresco/cmis/dictionary/CMISDictionaryTest.java index 362449a9f3..93f1bb31f0 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISDictionaryTest.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISDictionaryTest.java @@ -30,7 +30,7 @@ import org.alfresco.cmis.mapping.BaseCMISTest; public class CMISDictionaryTest extends BaseCMISTest { - public void testBasicTypes() + public void testAllTypes() { for (CMISTypeDefinition type : cmisDictionaryService.getAllTypes()) { @@ -38,6 +38,13 @@ public class CMISDictionaryTest extends BaseCMISTest } } + public void testBaseTypes() + { + for (CMISTypeDefinition type : cmisDictionaryService.getBaseTypes()) + { + System.out.println(type); + } + } public void testSubTypes() { for (CMISTypeDefinition type : cmisDictionaryService.getAllTypes()) diff --git a/source/java/org/alfresco/cmis/mapping/CMISMapping.java b/source/java/org/alfresco/cmis/mapping/CMISMapping.java index c6654c1645..b0e18937db 100644 --- a/source/java/org/alfresco/cmis/mapping/CMISMapping.java +++ b/source/java/org/alfresco/cmis/mapping/CMISMapping.java @@ -31,7 +31,6 @@ import java.util.Map; import org.alfresco.cmis.CMISActionEvaluator; import org.alfresco.cmis.CMISAllowedActionEnum; -import org.alfresco.cmis.CMISContentStreamAllowedEnum; import org.alfresco.cmis.CMISDataTypeEnum; import org.alfresco.cmis.CMISDictionaryModel; import org.alfresco.cmis.CMISPropertyId; @@ -65,7 +64,7 @@ public class CMISMapping implements InitializingBean * The Alfresco CMIS Namespace */ public static String CMIS_MODEL_NS = "cmis"; - public static String CMIS_MODEL_URI = "http://www.alfresco.org/model/cmis/0.62c"; + public static String CMIS_MODEL_URI = "http://www.alfresco.org/model/cmis/0.62"; /** * The Alfresco CMIS Model name. @@ -86,10 +85,10 @@ public class CMISMapping implements InitializingBean // CMIS Types public static QName OBJECT_QNAME = QName.createQName(CMIS_MODEL_URI, "object"); public static QName FILESYSTEM_OBJECT_QNAME = QName.createQName(CMIS_MODEL_URI, "filesystemobject"); - public static QName DOCUMENT_QNAME = QName.createQName(CMIS_MODEL_URI, "Document"); - public static QName FOLDER_QNAME = QName.createQName(CMIS_MODEL_URI, "Folder"); - public static QName RELATIONSHIP_QNAME = QName.createQName(CMIS_MODEL_URI, "Relationship"); - public static QName POLICY_QNAME = QName.createQName(CMIS_MODEL_URI, "Policy"); + public static QName DOCUMENT_QNAME = QName.createQName(CMIS_MODEL_URI, "document"); + public static QName FOLDER_QNAME = QName.createQName(CMIS_MODEL_URI, "folder"); + public static QName RELATIONSHIP_QNAME = QName.createQName(CMIS_MODEL_URI, "relationship"); + public static QName POLICY_QNAME = QName.createQName(CMIS_MODEL_URI, "policy"); // CMIS Internal Type Ids public static CMISTypeId OBJECT_TYPE_ID = new CMISTypeId(CMISScope.OBJECT, OBJECT_QNAME, CMIS_MODEL_NS + ":" + OBJECT_QNAME.getLocalName(), OBJECT_QNAME); @@ -242,6 +241,7 @@ public class CMISMapping implements InitializingBean registerEvaluator(CMISScope.FOLDER, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_CREATE_FOLDER, PermissionService.CREATE_CHILDREN)); registerEvaluator(CMISScope.FOLDER, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_CREATE_RELATIONSHIP, PermissionService.CREATE_ASSOCIATIONS)); registerEvaluator(CMISScope.FOLDER, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_CREATE_POLICY, false)); + registerEvaluator(CMISScope.FOLDER, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_DELETE_TREE, PermissionService.DELETE_NODE)); registerEvaluator(CMISScope.FOLDER, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_GET_ACL, false)); registerEvaluator(CMISScope.FOLDER, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_APPLY_ACL, false));