From ffb8441f71cd16372a353ef4fb3460d235615576 Mon Sep 17 00:00:00 2001 From: Derek Hulley Date: Tue, 30 Jun 2009 15:25:39 +0000 Subject: [PATCH] Added NodeDaoService.getNodePropertiesRaw(Long nodeId) - Allow low-level retrieval of the persisted node properties - Unmarshalling of cm:auditable properties included git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@15042 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../alfresco/repo/node/db/NodeDaoService.java | 13 +++++ .../HibernateNodeDaoServiceImpl.java | 48 +++++++++++++++++-- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/source/java/org/alfresco/repo/node/db/NodeDaoService.java b/source/java/org/alfresco/repo/node/db/NodeDaoService.java index d895686161..6c30af03da 100644 --- a/source/java/org/alfresco/repo/node/db/NodeDaoService.java +++ b/source/java/org/alfresco/repo/node/db/NodeDaoService.java @@ -32,6 +32,8 @@ import java.util.Set; import org.alfresco.repo.domain.ChildAssoc; import org.alfresco.repo.domain.NodeAssoc; +import org.alfresco.repo.domain.NodePropertyValue; +import org.alfresco.repo.domain.PropertyMapKey; import org.alfresco.repo.domain.Transaction; import org.alfresco.repo.domain.hibernate.DirtySessionAnnotation; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; @@ -135,6 +137,17 @@ public interface NodeDaoService @DirtySessionAnnotation(markDirty=false) public Serializable getNodeProperty(Long nodeId, QName propertyQName); + + /** + * + * @param nodeId the node's ID + * @return Returns a copy of the low-level properties including auditable properties + * @throws ObjectNotFoundException if the node ID is invalid + * + * @see #getNodePair(NodeRef) + */ + @DirtySessionAnnotation(markDirty=false) + public Map getNodePropertiesRaw(Long nodeId); @DirtySessionAnnotation(markDirty=false) public Map getNodeProperties(Long nodeId); diff --git a/source/java/org/alfresco/repo/node/db/hibernate/HibernateNodeDaoServiceImpl.java b/source/java/org/alfresco/repo/node/db/hibernate/HibernateNodeDaoServiceImpl.java index 5019460b90..2b8187b166 100644 --- a/source/java/org/alfresco/repo/node/db/hibernate/HibernateNodeDaoServiceImpl.java +++ b/source/java/org/alfresco/repo/node/db/hibernate/HibernateNodeDaoServiceImpl.java @@ -1306,12 +1306,52 @@ public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements { Long nodeTypeQNameId = qnameDAO.getOrCreateQName(nodeTypeQName).getFirst(); if (!nodeTypeQNameId.equals(node.getTypeQNameId())) - { - node.setTypeQNameId(nodeTypeQNameId); - // We will need to record the change - recordNodeUpdate(node); + { + node.setTypeQNameId(nodeTypeQNameId); + // We will need to record the change + recordNodeUpdate(node); + } } } + + public Map getNodePropertiesRaw(Long nodeId) + { + Node node = getNodeNotNull(nodeId); + Map props = node.getProperties(); + // Copy this for adding + props = new HashMap(props); + // Add the auditable properties + if (hasNodeAspect(node, ContentModel.ASPECT_AUDITABLE)) + { + AuditableProperties auditable = node.getAuditableProperties(); + Map auditableProperties = auditable.getAuditableProperties(); + for (Map.Entry entry : auditableProperties.entrySet()) + { + // Get default locale for the key + Pair defaultLocalePair = localeDAO.getDefaultLocalePair(); + if (defaultLocalePair == null) + { + continue; + } + + QName auditablePropertyQName = entry.getKey(); + Pair auditablePropertyQNamePair = qnameDAO.getQName(auditablePropertyQName); + if (auditablePropertyQNamePair == null) + { + continue; + } + Serializable auditablePropertyValue = entry.getValue(); + NodePropertyValue npv = new NodePropertyValue(auditablePropertyQName, auditablePropertyValue); + PropertyMapKey npk = new PropertyMapKey(); + npk.setQnameId(auditablePropertyQNamePair.getFirst()); + npk.setListIndex(HibernateNodeDaoServiceImpl.IDX_NO_COLLECTION); + npk.setLocaleId(defaultLocalePair.getFirst()); + // Add this property to the map + props.put(npk, npv); + } + } + // Done + return props; } public Serializable getNodeProperty(Long nodeId, QName propertyQName)