From 1eb9d806b4e3683cd184b00948cf7ec3d054bf03 Mon Sep 17 00:00:00 2001 From: Derek Hulley Date: Thu, 15 Jun 2006 14:39:15 +0000 Subject: [PATCH] Expose database unique node ID as a spoofed property. This can be used as an alternative to the UUID for local uniqueness. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@3115 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/model/systemModel.xml | 4 ++++ source/java/org/alfresco/model/ContentModel.java | 1 + .../org/alfresco/repo/node/AbstractNodeServiceImpl.java | 4 +++- .../java/org/alfresco/repo/node/BaseNodeServiceTest.java | 3 +++ .../java/org/alfresco/repo/node/db/DbNodeServiceImpl.java | 8 +++++++- 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/config/alfresco/model/systemModel.xml b/config/alfresco/model/systemModel.xml index 1408b50f04..4a50d06709 100644 --- a/config/alfresco/model/systemModel.xml +++ b/config/alfresco/model/systemModel.xml @@ -115,6 +115,10 @@ d:text true + + d:long + true + diff --git a/source/java/org/alfresco/model/ContentModel.java b/source/java/org/alfresco/model/ContentModel.java index 56cdd9afdb..c40491691e 100644 --- a/source/java/org/alfresco/model/ContentModel.java +++ b/source/java/org/alfresco/model/ContentModel.java @@ -35,6 +35,7 @@ public interface ContentModel static final QName PROP_STORE_PROTOCOL = QName.createQName(NamespaceService.SYSTEM_MODEL_1_0_URI, "store-protocol"); static final QName PROP_STORE_IDENTIFIER = QName.createQName(NamespaceService.SYSTEM_MODEL_1_0_URI, "store-identifier"); static final QName PROP_NODE_UUID = QName.createQName(NamespaceService.SYSTEM_MODEL_1_0_URI, "node-uuid"); + static final QName PROP_NODE_DBID = QName.createQName(NamespaceService.SYSTEM_MODEL_1_0_URI, "node-dbid"); // tag for incomplete nodes static final QName ASPECT_INCOMPLETE = QName.createQName(NamespaceService.SYSTEM_MODEL_1_0_URI, "incomplete"); diff --git a/source/java/org/alfresco/repo/node/AbstractNodeServiceImpl.java b/source/java/org/alfresco/repo/node/AbstractNodeServiceImpl.java index 492f76b400..6836a13867 100644 --- a/source/java/org/alfresco/repo/node/AbstractNodeServiceImpl.java +++ b/source/java/org/alfresco/repo/node/AbstractNodeServiceImpl.java @@ -530,13 +530,15 @@ public abstract class AbstractNodeServiceImpl implements NodeService * is always present as a property on a node. * * @param nodeRef the node reference containing the values required + * @param nodeDbId the database-assigned ID * @param properties the node properties */ - protected void addReferencableProperties(NodeRef nodeRef, Map properties) + protected void addReferencableProperties(NodeRef nodeRef, Long nodeDbId, Map properties) { properties.put(ContentModel.PROP_STORE_PROTOCOL, nodeRef.getStoreRef().getProtocol()); properties.put(ContentModel.PROP_STORE_IDENTIFIER, nodeRef.getStoreRef().getIdentifier()); properties.put(ContentModel.PROP_NODE_UUID, nodeRef.getId()); + properties.put(ContentModel.PROP_NODE_DBID, nodeDbId); // add the ID as the name, if required if (properties.get(ContentModel.PROP_NAME) == null) { diff --git a/source/java/org/alfresco/repo/node/BaseNodeServiceTest.java b/source/java/org/alfresco/repo/node/BaseNodeServiceTest.java index 9d73ddce3b..7e5be748d2 100644 --- a/source/java/org/alfresco/repo/node/BaseNodeServiceTest.java +++ b/source/java/org/alfresco/repo/node/BaseNodeServiceTest.java @@ -1028,10 +1028,12 @@ public abstract class BaseNodeServiceTest extends BaseSpringTest Serializable wsProtocol = nodeService.getProperty(rootNodeRef, ContentModel.PROP_STORE_PROTOCOL); Serializable wsIdentifier = nodeService.getProperty(rootNodeRef, ContentModel.PROP_STORE_IDENTIFIER); Serializable nodeUuid = nodeService.getProperty(rootNodeRef, ContentModel.PROP_NODE_UUID); + Serializable nodeDbId = nodeService.getProperty(rootNodeRef, ContentModel.PROP_NODE_DBID); assertNotNull("Workspace Protocol property not present", wsProtocol); assertNotNull("Workspace Identifier property not present", wsIdentifier); assertNotNull("Node UUID property not present", nodeUuid); + assertNotNull("Node DB ID property not present", nodeDbId); assertEquals("Workspace Protocol property incorrect", rootNodeRef.getStoreRef().getProtocol(), wsProtocol); assertEquals("Workspace Identifier property incorrect", rootNodeRef.getStoreRef().getIdentifier(), wsIdentifier); @@ -1042,6 +1044,7 @@ public abstract class BaseNodeServiceTest extends BaseSpringTest assertTrue("Workspace Protocol property not present in map", properties.containsKey(ContentModel.PROP_STORE_PROTOCOL)); assertTrue("Workspace Identifier property not present in map", properties.containsKey(ContentModel.PROP_STORE_IDENTIFIER)); assertTrue("Node UUID property not present in map", properties.containsKey(ContentModel.PROP_NODE_UUID)); + assertTrue("Node DB ID property not present in map", properties.containsKey(ContentModel.PROP_NODE_DBID)); } public void testGetParentAssocs() throws Exception diff --git a/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java b/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java index 8db2bf6f92..23224667dc 100644 --- a/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java +++ b/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java @@ -770,7 +770,7 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl ret.put(propertyQName, value); } // spoof referencable properties - addReferencableProperties(nodeRef, ret); + addReferencableProperties(nodeRef, node.getId(), ret); // done return ret; } @@ -793,6 +793,12 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl // get the property from the node Node node = getNodeNotNull(nodeRef); + + if (qname.equals(ContentModel.PROP_NODE_DBID)) + { + return node.getId(); + } + Map properties = node.getProperties(); PropertyValue propertyValue = properties.get(qname);