Daily merge.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@2882 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Britt Park
2006-05-12 20:22:46 +00:00
parent a22ddfb666
commit 4b881e72ad
15 changed files with 282 additions and 172 deletions

View File

@@ -30,6 +30,7 @@ import org.alfresco.model.ContentModel;
import org.alfresco.repo.node.StoreArchiveMap;
import org.alfresco.repo.node.archive.RestoreNodeReport.RestoreStatus;
import org.alfresco.repo.security.authentication.AuthenticationComponent;
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.AssociationRef;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
@@ -56,6 +57,7 @@ public class ArchiveAndRestoreTest extends TestCase
{
private static final String USER_A = "AAAAA";
private static final String USER_B = "BBBBB";
private static final QName ASPECT_ATTACHABLE = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "attachable");
private static final QName ASSOC_ATTACHMENTS = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "attachments");
private static final QName QNAME_A = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "a");
private static final QName QNAME_B = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "b");
@@ -194,6 +196,7 @@ public class ArchiveAndRestoreTest extends TestCase
QNAME_A,
ContentModel.TYPE_FOLDER,
properties).getChildRef();
nodeService.addAspect(a, ASPECT_ATTACHABLE, null);
properties.put(ContentModel.PROP_NODE_UUID, "aa");
childAssocAtoAA = nodeService.createNode(
a,
@@ -202,6 +205,7 @@ public class ArchiveAndRestoreTest extends TestCase
ContentModel.TYPE_CONTENT,
properties);
aa = childAssocAtoAA.getChildRef();
nodeService.addAspect(aa, ASPECT_ATTACHABLE, null);
properties.put(ContentModel.PROP_NODE_UUID, "b");
b = nodeService.createNode(
workStoreRootNodeRef,
@@ -326,6 +330,9 @@ public class ArchiveAndRestoreTest extends TestCase
verifyNodeExistence(b_, false);
verifyNodeExistence(bb_, true);
// flush
AlfrescoTransactionSupport.flush();
// check that the required properties are present and correct
Map<QName, Serializable> bb_Properties = nodeService.getProperties(bb_);
Path bb_originalPath = (Path) bb_Properties.get(ContentModel.PROP_ARCHIVED_ORIGINAL_PATH);
@@ -351,6 +358,9 @@ public class ArchiveAndRestoreTest extends TestCase
verifyNodeExistence(bb_, true);
verifyChildAssocExistence(childAssocBtoBB_, true);
// flush
AlfrescoTransactionSupport.flush();
// restore the node
nodeService.restoreNode(b_, null, null, null);
// check
@@ -362,6 +372,10 @@ public class ArchiveAndRestoreTest extends TestCase
// delete both trees in order 'b', 'a'
nodeService.deleteNode(b);
nodeService.deleteNode(a);
// flush
AlfrescoTransactionSupport.flush();
// restore in reverse order
nodeService.restoreNode(a_, null, null, null);
nodeService.restoreNode(b_, null, null, null);
@@ -374,6 +388,10 @@ public class ArchiveAndRestoreTest extends TestCase
// delete both trees in order 'b', 'a'
nodeService.deleteNode(a);
nodeService.deleteNode(b);
// flush
AlfrescoTransactionSupport.flush();
// restore in reverse order
nodeService.restoreNode(b_, null, null, null);
nodeService.restoreNode(a_, null, null, null);
@@ -386,6 +404,10 @@ public class ArchiveAndRestoreTest extends TestCase
// delete a then b
nodeService.deleteNode(a);
nodeService.deleteNode(b);
// flush
AlfrescoTransactionSupport.flush();
// in restoring 'a' first, there will be some associations that won't be recreated
nodeService.restoreNode(a_, null, null, null);
nodeService.restoreNode(b_, null, null, null);
@@ -438,6 +460,10 @@ public class ArchiveAndRestoreTest extends TestCase
nodeService.deleteNode(b);
long end = System.nanoTime();
cumulatedArchiveTimeNs += (end - start);
// flush
AlfrescoTransactionSupport.flush();
// now restore
start = System.nanoTime();
nodeService.restoreNode(b_, null, null, null);
@@ -565,4 +591,21 @@ public class ArchiveAndRestoreTest extends TestCase
// List<RestoreNodeReport> restoredByB = nodeArchiveService.restoreAllArchivedNodes(workStoreRef);
// assertEquals("User B should not have seen A's delete", 1, restoredByB.size());
// }
//
// /**
// * Deny the current user the rights to write to the destination location
// * and ensure that the use-case is handled properly.
// */
// public void testPermissionsLackingOnDestination() throws Exception
// {
// // remove 'b', deny permissions to workspace root and attempt a restore
// nodeService.deleteNode(b);
// permissionService.setPermission(workStoreRootNodeRef, USER_B, PermissionService.ADD_CHILDREN, false);
// commitAndBeginNewTransaction();
//
// // the restore of b should fail for user B
// authenticationService.authenticate(USER_B, USER_B.toCharArray());
// RestoreNodeReport report = nodeArchiveService.restoreArchivedNode(b_);
// assertEquals("Expected permission denied status", RestoreStatus.FAILURE_PERMISSION, report.getStatus());
// }
}

View File

@@ -1559,6 +1559,7 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl
// remove the aspect archived aspect
aspects.remove(ContentModel.ASPECT_ARCHIVED);
properties.remove(ContentModel.PROP_ARCHIVED_ORIGINAL_PARENT_ASSOC);
properties.remove(ContentModel.PROP_ARCHIVED_ORIGINAL_PATH);
properties.remove(ContentModel.PROP_ARCHIVED_BY);
properties.remove(ContentModel.PROP_ARCHIVED_DATE);

View File

@@ -16,7 +16,6 @@
*/
package org.alfresco.repo.node.db;
import java.util.Collection;
import java.util.List;
import org.alfresco.repo.domain.ChildAssoc;
@@ -42,6 +41,11 @@ public interface NodeDaoService
*/
public boolean isDirty();
/**
* Flush the data changes to the persistence layer.
*/
public void flush();
/**
* Fetch a list of all stores in the repository
*
@@ -168,16 +172,6 @@ public interface NodeDaoService
Node targetNode,
QName assocTypeQName);
/**
* @return Returns the target nodes for the association
*/
public Collection<Node> getNodeAssocTargets(Node sourceNode, QName assocTypeQName);
/**
* @return Returns the source nodes for the association
*/
public Collection<Node> getNodeAssocSources(Node targetNode, QName assocTypeQName);
/**
* @param assoc the node association to remove
*/

View File

@@ -36,6 +36,7 @@ import org.alfresco.repo.domain.hibernate.StoreImpl;
import org.alfresco.repo.node.db.NodeDaoService;
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
import org.alfresco.service.cmr.dictionary.InvalidTypeException;
import org.alfresco.service.cmr.repository.AssociationRef;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.QName;
@@ -56,9 +57,6 @@ import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements NodeDaoService
{
private static final String QUERY_GET_ALL_STORES = "store.GetAllStores";
private static final String QUERY_GET_NODE_ASSOC = "node.GetNodeAssoc";
private static final String QUERY_GET_NODE_ASSOC_TARGETS = "node.GetNodeAssocTargets";
private static final String QUERY_GET_NODE_ASSOC_SOURCES = "node.GetNodeAssocSources";
private static final String QUERY_GET_CONTENT_DATA_STRINGS = "node.GetContentDataStrings";
/** a uuid identifying this unique instance */
@@ -117,6 +115,14 @@ public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements
return ((Boolean)getHibernateTemplate().execute(callback)).booleanValue();
}
/**
* Just flushes the session
*/
public void flush()
{
getSession().flush();
}
/**
* @see #QUERY_GET_ALL_STORES
*/
@@ -337,7 +343,6 @@ public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements
assoc.setTypeQName(assocTypeQName);
assoc.setIsPrimary(isPrimary);
assoc.setQname(qname);
// assoc.setIsArchived(false);
assoc.buildAssociation(parentNode, childNode);
// persist
getHibernateTemplate().save(assoc);
@@ -450,7 +455,6 @@ public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements
{
NodeAssoc assoc = new NodeAssocImpl();
assoc.setTypeQName(assocTypeQName);
// assoc.setIsArchived(false);
assoc.buildAssociation(sourceNode, targetNode);
// persist
getHibernateTemplate().save(assoc);
@@ -463,62 +467,27 @@ public class HibernateNodeDaoServiceImpl extends HibernateDaoSupport implements
final Node targetNode,
final QName assocTypeQName)
{
HibernateCallback callback = new HibernateCallback()
AssociationRef nodeAssocRef = new AssociationRef(
sourceNode.getNodeRef(),
assocTypeQName,
targetNode.getNodeRef());
// get all the source's target associations
Collection<NodeAssoc> assocs = sourceNode.getTargetNodeAssocs();
// hunt down the desired assoc
for (NodeAssoc assoc : assocs)
{
public Object doInHibernate(Session session)
// is it a match?
if (!assoc.getNodeAssocRef().equals(nodeAssocRef)) // not a match
{
Query query = session.getNamedQuery(HibernateNodeDaoServiceImpl.QUERY_GET_NODE_ASSOC);
query.setEntity("sourceNode", sourceNode)
.setEntity("targetNode", targetNode)
.setString("assocTypeQName", assocTypeQName.toString())
.setMaxResults(1);
return query.uniqueResult();
continue;
}
else
{
return assoc;
}
};
Object queryResult = getHibernateTemplate().execute(callback);
if (queryResult == null)
{
return null;
}
NodeAssoc assoc = (NodeAssoc) queryResult;
// done
return assoc;
}
@SuppressWarnings("unchecked")
public Collection<Node> getNodeAssocTargets(final Node sourceNode, final QName assocTypeQName)
{
HibernateCallback callback = new HibernateCallback()
{
public Object doInHibernate(Session session)
{
Query query = session.getNamedQuery(HibernateNodeDaoServiceImpl.QUERY_GET_NODE_ASSOC_TARGETS);
query.setEntity("sourceNode", sourceNode)
.setString("assocTypeQName", assocTypeQName.toString());
return query.list();
}
};
List<Node> queryResults = (List) getHibernateTemplate().execute(callback);
// done
return queryResults;
}
@SuppressWarnings("unchecked")
public Collection<Node> getNodeAssocSources(final Node targetNode, final QName assocTypeQName)
{
HibernateCallback callback = new HibernateCallback()
{
public Object doInHibernate(Session session)
{
Query query = session.getNamedQuery(HibernateNodeDaoServiceImpl.QUERY_GET_NODE_ASSOC_SOURCES);
query.setEntity("targetNode", targetNode)
.setString("assocTypeQName", assocTypeQName.toString());
return query.list();
}
};
List<Node> queryResults = (List) getHibernateTemplate().execute(callback);
// done
return queryResults;
// not found
return null;
}
public void deleteNodeAssoc(NodeAssoc assoc)