From 6ac87efa5a0729e13c62525cd5aaec0d7a4be5e6 Mon Sep 17 00:00:00 2001 From: Britt Park Date: Thu, 13 Jul 2006 15:48:10 +0000 Subject: [PATCH] Moved the tracking of newly introduced nodes into its own table. Simplifies things a bit. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3320 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/avm-console-context.xml | 9 ++ config/alfresco/avm-test-context.xml | 9 ++ .../org/alfresco/repo/avm/AVMContext.java | 13 +++ .../java/org/alfresco/repo/avm/AVMNode.java | 12 --- .../org/alfresco/repo/avm/AVMNodeDAO.java | 14 --- .../org/alfresco/repo/avm/AVMNodeImpl.java | 51 ++--------- .../repo/avm/LayeredDirectoryNodeImpl.java | 8 ++ .../repo/avm/LayeredFileNodeImpl.java | 4 + .../alfresco/repo/avm/NewInRepository.java | 37 ++++++++ .../alfresco/repo/avm/NewInRepositoryDAO.java | 53 +++++++++++ .../repo/avm/NewInRepositoryImpl.java | 90 +++++++++++++++++++ .../org/alfresco/repo/avm/OrphanReaper.java | 6 ++ .../repo/avm/PlainDirectoryNodeImpl.java | 6 +- .../alfresco/repo/avm/PlainFileNodeImpl.java | 8 ++ .../org/alfresco/repo/avm/RepositoryImpl.java | 9 +- .../repo/avm/SimultaneousLoadTest.java | 2 +- .../alfresco/repo/avm/SuperRepository.java | 13 ++- .../alfresco/repo/avm/hibernate/AVM.hbm.xml | 15 ++-- .../avm/hibernate/AVMNodeDAOHibernate.java | 34 ------- .../NewInRepositoryDAOHibernate.java | 78 ++++++++++++++++ 20 files changed, 342 insertions(+), 129 deletions(-) create mode 100644 source/java/org/alfresco/repo/avm/NewInRepository.java create mode 100644 source/java/org/alfresco/repo/avm/NewInRepositoryDAO.java create mode 100644 source/java/org/alfresco/repo/avm/NewInRepositoryImpl.java create mode 100644 source/java/org/alfresco/repo/avm/hibernate/NewInRepositoryDAOHibernate.java diff --git a/config/alfresco/avm-console-context.xml b/config/alfresco/avm-console-context.xml index 4626c441ec..df5a1e31de 100644 --- a/config/alfresco/avm-console-context.xml +++ b/config/alfresco/avm-console-context.xml @@ -146,6 +146,12 @@ + + + + + + @@ -174,6 +180,9 @@ + + + diff --git a/config/alfresco/avm-test-context.xml b/config/alfresco/avm-test-context.xml index 37a4c21b9b..847d037abe 100644 --- a/config/alfresco/avm-test-context.xml +++ b/config/alfresco/avm-test-context.xml @@ -118,6 +118,12 @@ + + + + + + @@ -146,6 +152,9 @@ + + + diff --git a/source/java/org/alfresco/repo/avm/AVMContext.java b/source/java/org/alfresco/repo/avm/AVMContext.java index e00e66ceb2..eacabd21cc 100644 --- a/source/java/org/alfresco/repo/avm/AVMContext.java +++ b/source/java/org/alfresco/repo/avm/AVMContext.java @@ -65,6 +65,11 @@ public class AVMContext */ public DeletedChildDAO fDeletedChildDAO; + /** + * The NewInRepositoryDAO + */ + public NewInRepositoryDAO fNewInRepositoryDAO; + /** * @param nodeDAO the fAVMNodeDAO to set */ @@ -136,4 +141,12 @@ public class AVMContext { fIssuerDAO = issuerDAO; } + + /** + * @param newInRepositoryDAO The DAO to set. + */ + public void setNewInRepositoryDAO(NewInRepositoryDAO newInRepositoryDAO) + { + fNewInRepositoryDAO = newInRepositoryDAO; + } } diff --git a/source/java/org/alfresco/repo/avm/AVMNode.java b/source/java/org/alfresco/repo/avm/AVMNode.java index 6e1b4a7c40..e8a876b56d 100644 --- a/source/java/org/alfresco/repo/avm/AVMNode.java +++ b/source/java/org/alfresco/repo/avm/AVMNode.java @@ -65,12 +65,6 @@ public interface AVMNode */ public AVMNode copy(Lookup lPath); - /** - * Set the repository for a node. - * @param repo The Repository to set. - */ - public void setRepository(Repository repo); - /** * Get the type of this node. */ @@ -106,12 +100,6 @@ public interface AVMNode */ public long getId(); - /** - * Set this node's newness. - * @param isNew The newness. - */ - public void setIsNew(boolean isNew); - /** * Get the newnews. * @return Whether the node is new. diff --git a/source/java/org/alfresco/repo/avm/AVMNodeDAO.java b/source/java/org/alfresco/repo/avm/AVMNodeDAO.java index e89bc752f8..25ed30f17e 100644 --- a/source/java/org/alfresco/repo/avm/AVMNodeDAO.java +++ b/source/java/org/alfresco/repo/avm/AVMNodeDAO.java @@ -30,13 +30,6 @@ public interface AVMNodeDAO */ public void save(AVMNode node); - /** - * Make all the nodes owned by a repository no longer - * point to that repository. - * @param rep The Repository. - */ - public void unreferenceRepository(Repository rep); - /** * Delete a single node. * @param node The node to delete. @@ -57,13 +50,6 @@ public interface AVMNodeDAO */ public DirectoryNode getRepositoryRoot(Repository rep, int version); - /** - * Get those nodes which are new in the given repository. - * @param repo The repository. - * @return A List of AVMNodes. - */ - public List getNewInRepo(Repository repo); - /** * Update a node that has been dirtied. * @param node The node. diff --git a/source/java/org/alfresco/repo/avm/AVMNodeImpl.java b/source/java/org/alfresco/repo/avm/AVMNodeImpl.java index cf691c739b..e6d0632ffd 100644 --- a/source/java/org/alfresco/repo/avm/AVMNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/AVMNodeImpl.java @@ -35,21 +35,11 @@ public abstract class AVMNodeImpl implements AVMNode, Serializable */ private int fVersionID; - /** - * The Repository that owns this. - */ - private Repository fRepository; - /** * The basic attributes of this. Owner, creator, mod time, etc. */ private BasicAttributes fBasicAttributes; - /** - * Whether this node is new (and should therefore not be COWed). - */ - private boolean fIsNew; - /** * The version number (for concurrency control). */ @@ -77,16 +67,14 @@ public abstract class AVMNodeImpl implements AVMNode, Serializable { fID = id; fVersionID = -1; - fRepository = repo; fIsRoot = false; long time = System.currentTimeMillis(); fBasicAttributes = new BasicAttributesImpl("britt", - "britt", - "britt", - time, - time, - time); - fIsNew = true; + "britt", + "britt", + time, + time, + time); } /** @@ -139,24 +127,6 @@ public abstract class AVMNodeImpl implements AVMNode, Serializable return AVMContext.fgInstance.fAVMNodeDAO.getMergedFrom(this); } - /** - * Set the owning repository for this. - * @param repo The owning repository. - */ - public void setRepository(Repository repo) - { - fRepository = repo; - } - - /** - * Get the repository that owns this. - * @return The repository. - */ - public Repository getRepository() - { - return fRepository; - } - /** * Equality based on object ids. * @param obj The thing to compare against. @@ -241,22 +211,13 @@ public abstract class AVMNodeImpl implements AVMNode, Serializable return fBasicAttributes; } - /** - * Set whether this is new. - * @param isNew Whether this is new. - */ - public void setIsNew(boolean isNew) - { - fIsNew = isNew; - } - /** * Get whether this is a new node. * @return Whether this is new. */ public boolean getIsNew() { - return fIsNew; + return AVMContext.fgInstance.fNewInRepositoryDAO.getByNode(this) != null; } /** diff --git a/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java b/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java index fbdc741983..3dff9b7071 100644 --- a/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/LayeredDirectoryNodeImpl.java @@ -75,6 +75,8 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec fPrimaryIndirection = true; fOpacity = false; AVMContext.fgInstance.fAVMNodeDAO.save(this); + AVMContext.fgInstance.fAVMNodeDAO.flush(); + AVMContext.fgInstance.fNewInRepositoryDAO.save(new NewInRepositoryImpl(repos, this)); } /** @@ -105,6 +107,8 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec this); AVMContext.fgInstance.fDeletedChildDAO.save(newDel); } + AVMContext.fgInstance.fAVMNodeDAO.flush(); + AVMContext.fgInstance.fNewInRepositoryDAO.save(new NewInRepositoryImpl(repos, this)); } /** @@ -136,6 +140,8 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec AVMContext.fgInstance.fChildEntryDAO.save(newChild); } } + AVMContext.fgInstance.fAVMNodeDAO.flush(); + AVMContext.fgInstance.fNewInRepositoryDAO.save(new NewInRepositoryImpl(repos, this)); } /** @@ -157,6 +163,8 @@ class LayeredDirectoryNodeImpl extends DirectoryNodeImpl implements LayeredDirec fLayerID = -1; fOpacity = false; AVMContext.fgInstance.fAVMNodeDAO.save(this); + AVMContext.fgInstance.fAVMNodeDAO.flush(); + AVMContext.fgInstance.fNewInRepositoryDAO.save(new NewInRepositoryImpl(repo, this)); } /** diff --git a/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java b/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java index 99536d28a7..4949e0265e 100644 --- a/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java @@ -48,6 +48,8 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode super(repo.getSuperRepository().issueID(), repo); fIndirection = other.getIndirection(); AVMContext.fgInstance.fAVMNodeDAO.save(this); + AVMContext.fgInstance.fAVMNodeDAO.flush(); + AVMContext.fgInstance.fNewInRepositoryDAO.save(new NewInRepositoryImpl(repo, this)); } /** @@ -60,6 +62,8 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode super(repo.getSuperRepository().issueID(), repo); fIndirection = indirection; AVMContext.fgInstance.fAVMNodeDAO.save(this); + AVMContext.fgInstance.fAVMNodeDAO.flush(); + AVMContext.fgInstance.fNewInRepositoryDAO.save(new NewInRepositoryImpl(repo, this)); } /** diff --git a/source/java/org/alfresco/repo/avm/NewInRepository.java b/source/java/org/alfresco/repo/avm/NewInRepository.java new file mode 100644 index 0000000000..1ea039e6c9 --- /dev/null +++ b/source/java/org/alfresco/repo/avm/NewInRepository.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2006 Alfresco, Inc. + * + * Licensed under the Mozilla Public License version 1.1 + * with a permitted attribution clause. You may obtain a + * copy of the License at + * + * http://www.alfresco.org/legal/license.txt + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + */ + +package org.alfresco.repo.avm; + +/** + * Eensy-weensy interface for tracking nodes that are new in a repository. + * @author britt + */ +public interface NewInRepository +{ + /** + * Get the Repository part. + * @return The Repository + */ + public Repository getRepository(); + + /** + * Get the node part. + * @return The AVMNode. + */ + public AVMNode getNode(); +} diff --git a/source/java/org/alfresco/repo/avm/NewInRepositoryDAO.java b/source/java/org/alfresco/repo/avm/NewInRepositoryDAO.java new file mode 100644 index 0000000000..dcbd343944 --- /dev/null +++ b/source/java/org/alfresco/repo/avm/NewInRepositoryDAO.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2006 Alfresco, Inc. + * + * Licensed under the Mozilla Public License version 1.1 + * with a permitted attribution clause. You may obtain a + * copy of the License at + * + * http://www.alfresco.org/legal/license.txt + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + */ + +package org.alfresco.repo.avm; + +import java.util.List; + +/** + * DAO for NewInRepository markers. + * @author britt + */ +public interface NewInRepositoryDAO +{ + /** + * Save one. + * @param newEntry The item to save. + */ + public void save(NewInRepository newEntry); + + /** + * Get one by Node. + * @param node The node to lookup with. + * @return The Entry or null if not found. + */ + public NewInRepository getByNode(AVMNode node); + + /** + * Get all that are in the given repository. + * @param repository The Repository. + * @return A List of NewInRepositorys. + */ + public List getByRepository(Repository repository); + + /** + * Delete the given entry. + * @param newEntry The entry to delete. + */ + public void delete(NewInRepository newEntry); +} diff --git a/source/java/org/alfresco/repo/avm/NewInRepositoryImpl.java b/source/java/org/alfresco/repo/avm/NewInRepositoryImpl.java new file mode 100644 index 0000000000..e43cb8b743 --- /dev/null +++ b/source/java/org/alfresco/repo/avm/NewInRepositoryImpl.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2006 Alfresco, Inc. + * + * Licensed under the Mozilla Public License version 1.1 + * with a permitted attribution clause. You may obtain a + * copy of the License at + * + * http://www.alfresco.org/legal/license.txt + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + */ + +package org.alfresco.repo.avm; + +import java.io.Serializable; + +/** + * A record of a node that is new and in which repository it resides. + * @author britt + */ +public class NewInRepositoryImpl implements NewInRepository, Serializable +{ + private static final long serialVersionUID = 1905996612150732182L; + + /** + * The Repository. + */ + private Repository fRepository; + + /** + * The Node. + */ + private AVMNode fNode; + + /** + * Default constructor. + */ + public NewInRepositoryImpl() + { + } + + /** + * Make a new one. + * @param repository The repository. + * @param node The AVMNode that is new. + */ + public NewInRepositoryImpl(Repository repository, AVMNode node) + { + fRepository = repository; + fNode = node; + } + + /** + * @return the fNode + */ + public AVMNode getNode() + { + return fNode; + } + + /** + * @param node the fNode to set + */ + public void setNode(AVMNode node) + { + fNode = node; + } + + /** + * @return the fRepository + */ + public Repository getRepository() + { + return fRepository; + } + + /** + * @param repository the fRepository to set + */ + public void setRepository(Repository repository) + { + fRepository = repository; + } +} + diff --git a/source/java/org/alfresco/repo/avm/OrphanReaper.java b/source/java/org/alfresco/repo/avm/OrphanReaper.java index bd20505f3e..8cf5dc0472 100644 --- a/source/java/org/alfresco/repo/avm/OrphanReaper.java +++ b/source/java/org/alfresco/repo/avm/OrphanReaper.java @@ -209,6 +209,7 @@ public class OrphanReaper implements Runnable mergedFrom = mlink.getMfrom(); AVMContext.fgInstance.fMergeLinkDAO.delete(mlink); } + AVMContext.fgInstance.fAVMNodeDAO.flush(); // Get all the nodes that have this node as ancestor. List links = AVMContext.fgInstance.fHistoryLinkDAO.getByAncestor(node); for (HistoryLink link : links) @@ -228,6 +229,11 @@ public class OrphanReaper implements Runnable link.getMto().setMergedFrom(ancestor); AVMContext.fgInstance.fMergeLinkDAO.delete(link); } + NewInRepository newInRep = AVMContext.fgInstance.fNewInRepositoryDAO.getByNode(node); + if (newInRep != null) + { + AVMContext.fgInstance.fNewInRepositoryDAO.delete(newInRep); + } // TODO What to do about such Hibernate wackiness: session.flush(); // TODO More of the same: node = AVMNodeUnwrapper.Unwrap(node); // Extra work for directories. diff --git a/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java b/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java index 1cfcaad943..1aec6d10b5 100644 --- a/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/PlainDirectoryNodeImpl.java @@ -38,6 +38,8 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory { super(repo.getSuperRepository().issueID(), repo); AVMContext.fgInstance.fAVMNodeDAO.save(this); + AVMContext.fgInstance.fAVMNodeDAO.flush(); + AVMContext.fgInstance.fNewInRepositoryDAO.save(new NewInRepositoryImpl(repo, this)); } /** @@ -58,15 +60,15 @@ class PlainDirectoryNodeImpl extends DirectoryNodeImpl implements PlainDirectory { super(repos.getSuperRepository().issueID(), repos); AVMContext.fgInstance.fAVMNodeDAO.save(this); - // TODO Something about this. sess.flush(); for (ChildEntry child : AVMContext.fgInstance.fChildEntryDAO.getByParent(other)) { ChildEntry newChild = new ChildEntryImpl(child.getName(), this, child.getChild()); AVMContext.fgInstance.fChildEntryDAO.save(newChild); - // TODO Something about this: sess.flush(); } + AVMContext.fgInstance.fAVMNodeDAO.flush(); + AVMContext.fgInstance.fNewInRepositoryDAO.save(new NewInRepositoryImpl(repos, this)); } /** diff --git a/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java b/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java index b2faf0f9cc..5d8cacbb60 100644 --- a/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java @@ -50,6 +50,8 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode super(repos.getSuperRepository().issueID(), repos); fContent = new FileContentImpl(SuperRepository.GetInstance().issueContentID()); AVMContext.fgInstance.fAVMNodeDAO.save(this); + AVMContext.fgInstance.fAVMNodeDAO.flush(); + AVMContext.fgInstance.fNewInRepositoryDAO.save(new NewInRepositoryImpl(repos, this)); } /** @@ -62,6 +64,8 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode super(repos.getSuperRepository().issueID(), repos); fContent = new FileContentImpl(SuperRepository.GetInstance().issueContentID(), content); AVMContext.fgInstance.fAVMNodeDAO.save(this); + AVMContext.fgInstance.fAVMNodeDAO.flush(); + AVMContext.fgInstance.fNewInRepositoryDAO.save(new NewInRepositoryImpl(repos, this)); } /** @@ -76,6 +80,8 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode fContent = other.getContent(); fContent.setRefCount(fContent.getRefCount() + 1); AVMContext.fgInstance.fAVMNodeDAO.save(this); + AVMContext.fgInstance.fAVMNodeDAO.flush(); + AVMContext.fgInstance.fNewInRepositoryDAO.save(new NewInRepositoryImpl(repos, this)); } /** @@ -91,6 +97,8 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode fContent = content; fContent.setRefCount(fContent.getRefCount() + 1); AVMContext.fgInstance.fAVMNodeDAO.save(this); + AVMContext.fgInstance.fAVMNodeDAO.flush(); + AVMContext.fgInstance.fNewInRepositoryDAO.save(new NewInRepositoryImpl(repos, this)); } /** diff --git a/source/java/org/alfresco/repo/avm/RepositoryImpl.java b/source/java/org/alfresco/repo/avm/RepositoryImpl.java index 54aff91d26..fc1765e3d9 100644 --- a/source/java/org/alfresco/repo/avm/RepositoryImpl.java +++ b/source/java/org/alfresco/repo/avm/RepositoryImpl.java @@ -100,7 +100,6 @@ public class RepositoryImpl implements Repository, Serializable // Make up the initial version record and save. long time = System.currentTimeMillis(); fRoot = new PlainDirectoryNodeImpl(this); - fRoot.setIsNew(false); fRoot.setIsRoot(true); AVMContext.fgInstance.fAVMNodeDAO.save(fRoot); VersionRoot versionRoot = new VersionRootImpl(this, @@ -135,13 +134,11 @@ public class RepositoryImpl implements Repository, Serializable throw new AVMExistsException("Already snapshotted."); } // Clear out the new nodes. - AVMNodeDAO anDAO = AVMContext.fgInstance.fAVMNodeDAO; - for (AVMNode newNode : anDAO.getNewInRepo(this)) + List newInRep = AVMContext.fgInstance.fNewInRepositoryDAO.getByRepository(this); + for (NewInRepository newGuy : newInRep) { - newNode.setIsNew(false); + AVMContext.fgInstance.fNewInRepositoryDAO.delete(newGuy); } - // TODO: This is a grotesque hack to deal with hibernate. - anDAO.flush(); // Make up a new version record. VersionRoot versionRoot = new VersionRootImpl(this, fRoot, diff --git a/source/java/org/alfresco/repo/avm/SimultaneousLoadTest.java b/source/java/org/alfresco/repo/avm/SimultaneousLoadTest.java index 845513768d..78be8f35f3 100644 --- a/source/java/org/alfresco/repo/avm/SimultaneousLoadTest.java +++ b/source/java/org/alfresco/repo/avm/SimultaneousLoadTest.java @@ -33,7 +33,7 @@ public class SimultaneousLoadTest extends AVMServiceTestBase try { int n = 8; - int m = 2; + int m = 1; fReaper.setInactiveBaseSleep(60000); for (int i = 0; i < n; i++) { diff --git a/source/java/org/alfresco/repo/avm/SuperRepository.java b/source/java/org/alfresco/repo/avm/SuperRepository.java index d585327150..73cd7ca716 100644 --- a/source/java/org/alfresco/repo/avm/SuperRepository.java +++ b/source/java/org/alfresco/repo/avm/SuperRepository.java @@ -23,7 +23,6 @@ import java.io.OutputStream; import java.io.RandomAccessFile; import java.util.ArrayList; import java.util.Date; -import java.util.Iterator; import java.util.List; import java.util.SortedMap; @@ -178,8 +177,8 @@ class SuperRepository @SuppressWarnings("unused") Repository rep = new RepositoryImpl(this, name); // Special handling for repository creation. - // TODO is this needed. - rep.getRoot().setIsNew(false); + NewInRepository newInRep = AVMContext.fgInstance.fNewInRepositoryDAO.getByNode(rep.getRoot()); + AVMContext.fgInstance.fNewInRepositoryDAO.delete(newInRep); } /** @@ -456,12 +455,10 @@ class SuperRepository node.setIsRoot(false); vrDAO.delete(vr); } - Iterator iter = AVMContext.fgInstance.fAVMNodeDAO.getByRepository(rep); - while (iter.hasNext()) + List newGuys = AVMContext.fgInstance.fNewInRepositoryDAO.getByRepository(rep); + for (NewInRepository newGuy : newGuys) { - AVMNode node = iter.next(); - node.setRepository(null); - AVMContext.fgInstance.fAVMNodeDAO.update(node); + AVMContext.fgInstance.fNewInRepositoryDAO.delete(newGuy); } AVMContext.fgInstance.fRepositoryDAO.delete(rep); } diff --git a/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml b/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml index a6507ba41c..4be0f8b90f 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml +++ b/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml @@ -27,12 +27,8 @@ - - @@ -175,6 +171,12 @@ + + + + + + diff --git a/source/java/org/alfresco/repo/avm/hibernate/AVMNodeDAOHibernate.java b/source/java/org/alfresco/repo/avm/hibernate/AVMNodeDAOHibernate.java index b1809a926a..031cdfe3e5 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/AVMNodeDAOHibernate.java +++ b/source/java/org/alfresco/repo/avm/hibernate/AVMNodeDAOHibernate.java @@ -53,26 +53,6 @@ public class AVMNodeDAOHibernate extends HibernateDaoSupport implements getSession().save(node); } - /** - * Get all the nodes owned by a Repository and make - * them no longer point at that Repository. - * @param rep The Repository. - */ - @SuppressWarnings("unchecked") - public void unreferenceRepository(Repository rep) - { - Session sess = getSession(); - Query query = sess.createQuery("from AVMNodeImpl an where an.repository = :rep"); - query.setEntity("rep", rep); - Iterator iter = (Iterator)query.iterate(); - while (iter.hasNext()) - { - AVMNode node = iter.next(); - node.setRepository(null); - } - sess.flush(); - } - /** * Delete a single node. * @param node The node to delete. @@ -91,20 +71,6 @@ public class AVMNodeDAOHibernate extends HibernateDaoSupport implements return AVMNodeUnwrapper.Unwrap((AVMNode)getSession().get(AVMNodeImpl.class, id)); } - /** - * Get those nodes which are new in the given repository. - * @param repo The repository. - * @return A List of AVMNodes. - */ - @SuppressWarnings("unchecked") - public List getNewInRepo(Repository repo) - { - Query query = - getSession().getNamedQuery("AVMNode.ByNewInRepo"); - query.setEntity("repo", repo); - return (List)query.list(); - } - /** * Update a node that has been dirtied. * @param node The node. diff --git a/source/java/org/alfresco/repo/avm/hibernate/NewInRepositoryDAOHibernate.java b/source/java/org/alfresco/repo/avm/hibernate/NewInRepositoryDAOHibernate.java new file mode 100644 index 0000000000..ab398a208a --- /dev/null +++ b/source/java/org/alfresco/repo/avm/hibernate/NewInRepositoryDAOHibernate.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2006 Alfresco, Inc. + * + * Licensed under the Mozilla Public License version 1.1 + * with a permitted attribution clause. You may obtain a + * copy of the License at + * + * http://www.alfresco.org/legal/license.txt + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + */ + +package org.alfresco.repo.avm.hibernate; + +import java.util.List; + +import org.alfresco.repo.avm.AVMNode; +import org.alfresco.repo.avm.NewInRepository; +import org.alfresco.repo.avm.NewInRepositoryDAO; +import org.alfresco.repo.avm.Repository; +import org.hibernate.Query; +import org.springframework.orm.hibernate3.support.HibernateDaoSupport; + +/** + * Hibernate implementation of NewInRepository DAO. + * @author britt + */ +public class NewInRepositoryDAOHibernate extends HibernateDaoSupport implements + NewInRepositoryDAO +{ + /** + * Save one. + * @param newEntry The item to save. + */ + public void save(NewInRepository newEntry) + { + getSession().save(newEntry); + } + + /** + * Get one by Node. + * @param node The node to lookup with. + * @return The Entry or null if not found. + */ + public NewInRepository getByNode(AVMNode node) + { + Query query = getSession().createQuery("from NewInRepositoryImpl nie where nie.node = :node"); + query.setEntity("node", node); + return (NewInRepository)query.uniqueResult(); + } + + /** + * Get all that are in the given repository. + * @param repository The Repository. + * @return A List of NewInRepositorys. + */ + @SuppressWarnings("unchecked") + public List getByRepository(Repository repository) + { + Query query = getSession().createQuery("from NewInRepositoryImpl nie where nie.repository = :rep"); + query.setEntity("rep", repository); + return (List)query.list(); + } + + /** + * Delete the given entry. + * @param newEntry The entry to delete. + */ + public void delete(NewInRepository newEntry) + { + getSession().delete(newEntry); + } +}