From 3d4d316bdd800d6558bf86cda6430d2ece7f6863 Mon Sep 17 00:00:00 2001 From: David Caruana Date: Fri, 5 May 2006 17:17:53 +0000 Subject: [PATCH] Fix addition of aspects via JCR API - failed with NPE for any non JCR defined aspect. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2780 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/jcr/dictionary/ClassMap.java | 48 ++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/source/java/org/alfresco/jcr/dictionary/ClassMap.java b/source/java/org/alfresco/jcr/dictionary/ClassMap.java index 2f1da30e72..43cce5730e 100644 --- a/source/java/org/alfresco/jcr/dictionary/ClassMap.java +++ b/source/java/org/alfresco/jcr/dictionary/ClassMap.java @@ -67,6 +67,9 @@ public class ClassMap removeMixin.put(ContentModel.ASPECT_VERSIONABLE, new VersionableMixin()); } + /** Default Mixin behaviour **/ + private static DefaultMixin defaultMixin = new DefaultMixin(); + /** * Convert an Alfresco Class to a JCR Type @@ -100,7 +103,8 @@ public class ClassMap */ public static AddMixin getAddMixin(QName alfrescoClass) { - return addMixin.get(alfrescoClass); + AddMixin mixin = addMixin.get(alfrescoClass); + return (mixin == null) ? defaultMixin : mixin; } /** @@ -111,7 +115,8 @@ public class ClassMap */ public static RemoveMixin getRemoveMixin(QName alfrescoClass) { - return removeMixin.get(alfrescoClass); + RemoveMixin mixin = removeMixin.get(alfrescoClass); + return (mixin == null) ? defaultMixin : mixin; } /** @@ -136,4 +141,43 @@ public class ClassMap public void postRemoveMixin(SessionImpl session, NodeRef nodeRef); } + + /** + * Default NOOP Mixin behaviour + */ + private static class DefaultMixin implements AddMixin, RemoveMixin + { + /* + * (non-Javadoc) + * @see org.alfresco.jcr.dictionary.ClassMap.AddMixin#preAddMixin(org.alfresco.jcr.session.SessionImpl, org.alfresco.service.cmr.repository.NodeRef) + */ + public Map preAddMixin(SessionImpl session, NodeRef nodeRef) + { + return null; + } + + /* + * (non-Javadoc) + * @see org.alfresco.jcr.dictionary.ClassMap.AddMixin#postAddMixin(org.alfresco.jcr.session.SessionImpl, org.alfresco.service.cmr.repository.NodeRef) + */ + public void postAddMixin(SessionImpl session, NodeRef nodeRef) + { + } + + /* + * (non-Javadoc) + * @see org.alfresco.jcr.dictionary.ClassMap.RemoveMixin#preRemoveMixin(org.alfresco.jcr.session.SessionImpl, org.alfresco.service.cmr.repository.NodeRef) + */ + public void preRemoveMixin(SessionImpl session, NodeRef nodeRef) + { + } + + /* + * (non-Javadoc) + * @see org.alfresco.jcr.dictionary.ClassMap.RemoveMixin#postRemoveMixin(org.alfresco.jcr.session.SessionImpl, org.alfresco.service.cmr.repository.NodeRef) + */ + public void postRemoveMixin(SessionImpl session, NodeRef nodeRef) + { + } + } }