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)