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);