mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Added QNameDAO.updateNamespaceEntity and related tests
- To use directly, get the 'qnameDAO' bean; it implements the QNameDAO interface. - The new namespace must not exist - No reindexing is done git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@11002 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -67,6 +67,16 @@ public interface QNameDAO
|
||||
*/
|
||||
NamespaceEntity newNamespaceEntity(String namespaceUri);
|
||||
|
||||
/**
|
||||
* Modifies an existing namespace URI. If the new URI already exists, then no
|
||||
* new entity is created and a concurrency
|
||||
*
|
||||
* @param oldNamespaceUri the old namespace URI
|
||||
* @param newNamespaceUri the new namespace URI
|
||||
* @throws AlfrescoRuntimeException if the new namespace is in use
|
||||
*/
|
||||
void updateNamespaceEntity(String oldNamespaceUri, String newNamespaceUri);
|
||||
|
||||
/**
|
||||
* @param id the unique ID of the entity
|
||||
* @return the QName entity (never null)
|
||||
|
@@ -92,6 +92,34 @@ public class QNameDAOTest extends TestCase
|
||||
retryingTransactionHelper.doInTransaction(callback);
|
||||
}
|
||||
|
||||
public void testRenameNamespace() throws Exception
|
||||
{
|
||||
final String namespaceUriBefore = GUID.generate();
|
||||
final QName qnameBefore = QName.createQName(namespaceUriBefore, "before");
|
||||
final String namespaceUriAfter = GUID.generate();
|
||||
final QName qnameAfter = QName.createQName(namespaceUriAfter, "before");
|
||||
RetryingTransactionCallback<Object> callback = new RetryingTransactionCallback<Object>()
|
||||
{
|
||||
public Object execute() throws Throwable
|
||||
{
|
||||
dao.getOrCreateNamespaceEntity(namespaceUriBefore);
|
||||
// Get a QName that has the URI
|
||||
QNameEntity qnameEntityBefore = dao.getOrCreateQNameEntity(qnameBefore);
|
||||
// Now modify the namespace
|
||||
dao.updateNamespaceEntity(namespaceUriBefore, namespaceUriAfter);
|
||||
// The old qname must be gone
|
||||
assertNull("QName must be gone as the URI was renamed", dao.getQNameEntity(qnameBefore));
|
||||
// The new QName must be present and with the same ID
|
||||
QNameEntity qnameEntityAfter = dao.getQNameEntity(qnameAfter);
|
||||
assertNotNull("Expected QName with new URI to exist.", qnameEntityAfter);
|
||||
assertEquals("QName changed ID unexpectedly.", qnameEntityBefore.getId(), qnameEntityAfter.getId());
|
||||
// Done
|
||||
return null;
|
||||
}
|
||||
};
|
||||
retryingTransactionHelper.doInTransaction(callback);
|
||||
}
|
||||
|
||||
public void testNewQName() throws Exception
|
||||
{
|
||||
final String namespaceUri = GUID.generate();
|
||||
|
@@ -116,6 +116,28 @@ public class HibernateQNameDAOImpl extends HibernateDaoSupport implements QNameD
|
||||
return namespace;
|
||||
}
|
||||
|
||||
public void updateNamespaceEntity(String oldNamespaceUri, String newNamespaceUri)
|
||||
{
|
||||
// First check for clashes
|
||||
if (getNamespaceEntity(newNamespaceUri) != null)
|
||||
{
|
||||
throw new AlfrescoRuntimeException("Namespace URI '" + newNamespaceUri + "' already exists.");
|
||||
}
|
||||
// Get the old one
|
||||
NamespaceEntity oldNamespaceEntity = getNamespaceEntity(oldNamespaceUri);
|
||||
if (oldNamespaceEntity == null)
|
||||
{
|
||||
// Nothing to rename
|
||||
return;
|
||||
}
|
||||
oldNamespaceEntity.setUri(newNamespaceUri);
|
||||
// Flush to force early failure
|
||||
getSession().flush();
|
||||
// Trash the cache
|
||||
qnameEntityCache.clear();
|
||||
// Done
|
||||
}
|
||||
|
||||
public QNameEntity getQNameEntity(Long id)
|
||||
{
|
||||
QNameEntity qnameEntity = (QNameEntity) getSession().get(QNameEntityImpl.class, id);
|
||||
|
Reference in New Issue
Block a user