From df28c98983d1f69f353643ddb5d385436e6fd40d Mon Sep 17 00:00:00 2001 From: Britt Park Date: Sun, 21 May 2006 21:59:41 +0000 Subject: [PATCH] Retyped a counter so had to muck with many beans. Forced creation of layered directories to work. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@2930 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../java/org/alfresco/repo/avm/AVMNode.java | 19 +- .../org/alfresco/repo/avm/AVMNodeFactory.java | 7 +- .../org/alfresco/repo/avm/AVMNodeType.java | 10 +- .../org/alfresco/repo/avm/AVMService.java | 16 +- .../org/alfresco/repo/avm/AVMServiceTest.java | 140 ++++++++++- .../java/org/alfresco/repo/avm/FileNode.java | 2 +- .../org/alfresco/repo/avm/FolderEntry.java | 33 ++- .../repo/avm/LayeredDirectoryNode.java | 30 ++- .../alfresco/repo/avm/LayeredFileNode.java | 28 ++- source/java/org/alfresco/repo/avm/Lookup.java | 4 +- .../alfresco/repo/avm/PlainDirectoryNode.java | 15 +- .../org/alfresco/repo/avm/PlainFileNode.java | 36 +-- .../org/alfresco/repo/avm/Repository.java | 4 +- .../alfresco/repo/avm/SuperRepository.java | 8 +- .../alfresco/repo/avm/hibernate/AVM.hbm.xml | 16 +- .../repo/avm/hibernate/AVMNodeBean.java | 4 +- .../repo/avm/hibernate/AVMNodeBeanImpl.java | 8 +- .../repo/avm/hibernate/DirectoryEntry.java | 38 +-- .../avm/hibernate/DirectoryNodeBeanImpl.java | 2 +- .../repo/avm/hibernate/FileNodeBeanImpl.java | 2 +- .../LayeredDirectoryNodeBeanImpl.java | 5 +- .../hibernate/LayeredFileNodeBeanImpl.java | 2 +- .../hibernate/PlainDirectoryNodeBeanImpl.java | 2 +- .../avm/hibernate/PlainFileNodeBeanImpl.java | 2 +- .../repo/avm/hibernate/RepositoryBean.java | 8 +- .../avm/hibernate/RepositoryBeanImpl.java | 14 +- .../repo/avm/hibernate/TestPopulate.java | 233 ------------------ .../repo/avm/impl/AVMServiceImpl.java | 26 +- .../repo/avm/impl/RepositoryImpl.java | 8 +- .../repo/avm/impl/SuperRepositoryImpl.java | 11 +- 30 files changed, 349 insertions(+), 384 deletions(-) delete mode 100644 source/java/org/alfresco/repo/avm/hibernate/TestPopulate.java diff --git a/source/java/org/alfresco/repo/avm/AVMNode.java b/source/java/org/alfresco/repo/avm/AVMNode.java index 6ec28a1121..6ff09df37e 100644 --- a/source/java/org/alfresco/repo/avm/AVMNode.java +++ b/source/java/org/alfresco/repo/avm/AVMNode.java @@ -105,7 +105,7 @@ public abstract class AVMNode * Set the version number. * @param version The version number to set. */ - public void setVersion(long version) + public void setVersion(int version) { fData.setVersionID(version); } @@ -212,15 +212,6 @@ public abstract class AVMNode fData.setRepository(repo.getDataBean()); } - /** - * Get the Repository we 'belong' to. - * @return The Repository. - */ - public Repository getRepository() - { - return RepositoryFactory.GetInstance().createFromBean(fData.getRepository()); - } - /** * Get the data bean in this node. * @return The data bean. @@ -242,5 +233,11 @@ public abstract class AVMNode /** * Get the type of this node. */ - public abstract AVMNodeType getType(); + public abstract int getType(); + + /** + * Get a debugging string representation. + * @param lPath The Lookup. + */ + public abstract String toString(Lookup lPath); } diff --git a/source/java/org/alfresco/repo/avm/AVMNodeFactory.java b/source/java/org/alfresco/repo/avm/AVMNodeFactory.java index 1927f371ad..9d921c5a68 100644 --- a/source/java/org/alfresco/repo/avm/AVMNodeFactory.java +++ b/source/java/org/alfresco/repo/avm/AVMNodeFactory.java @@ -41,8 +41,11 @@ public class AVMNodeFactory { return null; } - HibernateProxy proxy = (HibernateProxy)bean; - bean = (AVMNodeBean)proxy.getHibernateLazyInitializer().getImplementation(); + if (bean instanceof HibernateProxy) + { + HibernateProxy proxy = (HibernateProxy)bean; + bean = (AVMNodeBean)proxy.getHibernateLazyInitializer().getImplementation(); + } if (bean instanceof PlainFileNodeBean) { return new PlainFileNode((PlainFileNodeBean)bean); diff --git a/source/java/org/alfresco/repo/avm/AVMNodeType.java b/source/java/org/alfresco/repo/avm/AVMNodeType.java index 3b9df3163b..58444a3991 100644 --- a/source/java/org/alfresco/repo/avm/AVMNodeType.java +++ b/source/java/org/alfresco/repo/avm/AVMNodeType.java @@ -21,10 +21,10 @@ package org.alfresco.repo.avm; * This defines the different types of FolderEntrys. * @author britt */ -public enum AVMNodeType +public interface AVMNodeType { - PLAIN_FILE, - LAYERED_FILE, - PLAIN_DIRECTORY, - LAYERED_DIRECTORY + public static final int PLAIN_FILE = 0; + public static final int LAYERED_FILE = 1; + public static final int PLAIN_DIRECTORY = 2; + public static final int LAYERED_DIRECTORY = 3; } diff --git a/source/java/org/alfresco/repo/avm/AVMService.java b/source/java/org/alfresco/repo/avm/AVMService.java index 01a750a08d..ac547c9941 100644 --- a/source/java/org/alfresco/repo/avm/AVMService.java +++ b/source/java/org/alfresco/repo/avm/AVMService.java @@ -149,22 +149,26 @@ public interface AVMService */ public void createSnapshot(List repositories); + /** + * Snapshot the given repository. + * @param repository The name of the repository to snapshot. + */ + public void createSnapshot(String repository); + /** * Get the set of version IDs in a Repository * @param name The name of the Repository. * @return A Set of version IDs */ - public Set getRepositoryVersions(String name); + public Set getRepositoryVersions(String name); /** - * Lookup a node by version ids and path. Note that an AVMNode is essentially - * informational only. There is very little you can do to an AVMNode in the absence - * of path information. + * Lookup a node by version ids and path. * @param version The version id to look under. * @param path The simple absolute path to the parent directory. - * @return An AVMNode. + * @return A Lookup object. */ - public AVMNode lookup(int version, String path); + public Lookup lookup(int version, String path); /** * Get the indirection path for a layered file or directory. diff --git a/source/java/org/alfresco/repo/avm/AVMServiceTest.java b/source/java/org/alfresco/repo/avm/AVMServiceTest.java index 80af0dd4a4..c8b9159f64 100644 --- a/source/java/org/alfresco/repo/avm/AVMServiceTest.java +++ b/source/java/org/alfresco/repo/avm/AVMServiceTest.java @@ -17,7 +17,10 @@ package org.alfresco.repo.avm; +import java.io.PrintStream; import java.util.ArrayList; +import java.util.List; +import java.util.Set; import org.alfresco.repo.avm.hibernate.HibernateHelper; import org.alfresco.repo.avm.impl.AVMServiceImpl; @@ -76,10 +79,8 @@ public class AVMServiceTest extends TestCase try { fService.createDirectory("main:/", "testdir"); - ArrayList toSnapshot = new ArrayList(); - toSnapshot.add("main"); - fService.createSnapshot(toSnapshot); - AVMNode node = fService.lookup(-1, "main:/"); + fService.createSnapshot("main"); + AVMNode node = fService.lookup(-1, "main:/").getCurrentNode(); assertTrue(node instanceof PlainDirectoryNode); } catch (Exception e) @@ -99,9 +100,20 @@ public class AVMServiceTest extends TestCase testCreateDirectory(); fService.createFile("main:testdir", "testfile"); fService.createFile("main:/", "testfile2"); - ArrayList toSnapshot = new ArrayList(); - toSnapshot.add("main"); - fService.createSnapshot(toSnapshot); + fService.createSnapshot("main"); + PrintStream out = new PrintStream(fService.getFileOutputStream("main:testdir/testfile")); + out.println("This is testdir/testfile"); + out.close(); + out = new PrintStream(fService.getFileOutputStream("main:testfile2")); + out.println("This is testfile2"); + out.close(); + fService.createSnapshot("main"); + Set versions = fService.getRepositoryVersions("main"); + for (Integer version : versions) + { + System.out.println("V:" + version); + System.out.println(recursiveList("main", version)); + } } catch (Exception e) { @@ -109,4 +121,118 @@ public class AVMServiceTest extends TestCase fail(); } } + + /** + * Test creating a branch. + */ + public void testCreateBranch() + { + try + { + setupBasicTree(); + fService.createBranch(-1, "main:a", "main:d/e", "abranch"); + fService.createSnapshot("main"); + Set versions = fService.getRepositoryVersions("main"); + for (Integer version : versions) + { + System.out.println("V:" + version); + System.out.println(recursiveList("main", version)); + } + List original = fService.getDirectoryListing(-1, "main:a"); + List branch = fService.getDirectoryListing(-1, "main:d/e/abranch"); + assertEquals(original, branch); + } + catch (Exception e) + { + e.printStackTrace(System.err); + fail(); + } + } + + /** + * Test creating a layer. + */ + public void testCreateLayer() + { + try + { + setupBasicTree(); + fService.createLayeredDirectory("main:a", "main:d/e", "alayer"); + fService.createSnapshot("main"); + System.out.println(recursiveList("main", -1)); + List original = fService.getDirectoryListing(-1, "main:a"); + List layer = fService.getDirectoryListing(-1, "main:d/e/alayer"); + assertEquals(original, layer); + } + catch (Exception e) + { + e.printStackTrace(System.err); + fail(); + } + } + + /** + * Helper to write a recursive listing of a repository at a given version. + * @param repoName The name of the repository. + * @param version The version to look under. + */ + private String recursiveList(String repoName, int version) + { + return recursiveList(repoName + ":/", version, 0); + } + + /** + * Recursive list the given path. + * @param path The path. + * @param version The version. + * @param indent The current indent level. + */ + private String recursiveList(String path, int version, int indent) + { + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < indent; i++) + { + builder.append(' '); + } + builder.append(path); + builder.append(' '); + Lookup lookup = fService.lookup(version, path); + AVMNode node = lookup.getCurrentNode(); + builder.append(node.toString(lookup)); + builder.append('\n'); + if (node instanceof DirectoryNode) + { + String basename = path.endsWith("/") ? path.substring(0, path.length() - 1) : path + "/"; + List listing = fService.getDirectoryListing(version, path); + for (FolderEntry entry : listing) + { + builder.append(recursiveList(basename + entry.getName(), version, indent + 2)); + } + } + return builder.toString(); + } + + /** + * Setup a basic tree. + */ + private void setupBasicTree() + { + fService.createDirectory("main:/", "a"); + fService.createDirectory("main:a", "b"); + fService.createDirectory("main:a/b", "c"); + fService.createDirectory("main:/", "d"); + fService.createDirectory("main:d", "e"); + fService.createDirectory("main:d/e", "f"); + fService.createFile("main:a/b/c", "foo"); + PrintStream out = new PrintStream(fService.getFileOutputStream("main:a/b/c/foo")); + out.println("I am main:a/b/c/foo"); + out.close(); + fService.createFile("main:a/b/c", "bar"); + out = new PrintStream(fService.getFileOutputStream("main:a/b/c/bar")); + out.println("I am main:a/b/c/bar"); + out.close(); + ArrayList toSnapshot = new ArrayList(); + toSnapshot.add("main"); + fService.createSnapshot(toSnapshot); + } } diff --git a/source/java/org/alfresco/repo/avm/FileNode.java b/source/java/org/alfresco/repo/avm/FileNode.java index b95ef73980..31f3b8ac97 100644 --- a/source/java/org/alfresco/repo/avm/FileNode.java +++ b/source/java/org/alfresco/repo/avm/FileNode.java @@ -28,7 +28,7 @@ public abstract class FileNode extends AVMNode * @param version The version to get in. * @return A FileContent object. */ - public abstract FileContent getContentForRead(int version); + public abstract FileContent getContentForRead(int version, Repository repo); /** * Get the content object for writing. This will do COW diff --git a/source/java/org/alfresco/repo/avm/FolderEntry.java b/source/java/org/alfresco/repo/avm/FolderEntry.java index 4b0ad7d609..5d5afe3f8d 100644 --- a/source/java/org/alfresco/repo/avm/FolderEntry.java +++ b/source/java/org/alfresco/repo/avm/FolderEntry.java @@ -32,7 +32,7 @@ public class FolderEntry /** * The type of the entry. */ - private AVMNodeType fType; + private int fType; /** * @return the name @@ -53,7 +53,7 @@ public class FolderEntry /** * @return the type */ - public AVMNodeType getType() + public int getType() { return fType; } @@ -61,8 +61,35 @@ public class FolderEntry /** * @param type the type to set */ - public void setType(AVMNodeType type) + public void setType(int type) { fType = type; } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) + { + if (this == obj) + { + return true; + } + if (!(obj instanceof FolderEntry)) + { + return false; + } + FolderEntry other = (FolderEntry)obj; + return fName.equals(other.fName) && fType == other.fType; + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() + { + return fName.hashCode() + fType; + } } diff --git a/source/java/org/alfresco/repo/avm/LayeredDirectoryNode.java b/source/java/org/alfresco/repo/avm/LayeredDirectoryNode.java index ad76ce1f77..9195849d96 100644 --- a/source/java/org/alfresco/repo/avm/LayeredDirectoryNode.java +++ b/source/java/org/alfresco/repo/avm/LayeredDirectoryNode.java @@ -78,6 +78,7 @@ public class LayeredDirectoryNode extends DirectoryNode implements Layered repos.getDataBean(), attrs, -1, + true, indirection); setDataBean(fData); repos.getSuperRepository().getSession().save(fData); @@ -108,11 +109,12 @@ public class LayeredDirectoryNode extends DirectoryNode implements Layered repos.getDataBean(), attrs, -1, + thatBean.getPrimaryIndirection(), other.getUnderlying()); setDataBean(fData); fData.setAdded(thatBean.getAdded()); fData.setDeleted(thatBean.getDeleted()); - fData.setPrimaryIndirection(thatBean.getPrimaryIndirection()); + // fData.setPrimaryIndirection(thatBean.getPrimaryIndirection()); repos.getSuperRepository().getSession().save(fData); } @@ -140,11 +142,12 @@ public class LayeredDirectoryNode extends DirectoryNode implements Layered repos.getDataBean(), attrs, -1, + false, null); setDataBean(fData); // TODO Is this right? I don't think so. // fData.setAdded(other.getListing(lPath, -1)); - fData.setPrimaryIndirection(false); + // fData.setPrimaryIndirection(false); repos.getSuperRepository().getSession().save(fData); } @@ -178,9 +181,9 @@ public class LayeredDirectoryNode extends DirectoryNode implements Layered repo.getDataBean(), attrs, -1, + true, srcLookup.getIndirectionPath() + "/" + name); setDataBean(fData); - fData.setPrimaryIndirection(true); repo.getSuperRepository().getSession().save(fData); } @@ -252,7 +255,6 @@ public class LayeredDirectoryNode extends DirectoryNode implements Layered { LayeredDirectoryNode dir = (LayeredDirectoryNode)parent; setLayerID(dir.getLayerID()); - setRepository(parent.getRepository()); } } @@ -324,7 +326,7 @@ public class LayeredDirectoryNode extends DirectoryNode implements Layered { try { - Lookup lookup = getRepository().getSuperRepository().lookupDirectory(-1, getUnderlying(lPath)); + Lookup lookup = lPath.getRepository().getSuperRepository().lookupDirectory(-1, getUnderlying(lPath)); DirectoryNode dir = (DirectoryNode)lookup.getCurrentNode(); if (dir.lookupChild(lookup, name, -1) != null) { @@ -339,7 +341,7 @@ public class LayeredDirectoryNode extends DirectoryNode implements Layered DirectoryNode toModify = (DirectoryNode)copyOnWrite(lPath); toModify.putChild(name, child); child.setParent(toModify); - child.setRepository(toModify.getRepository()); + child.setRepository(lPath.getRepository()); return true; } @@ -359,7 +361,7 @@ public class LayeredDirectoryNode extends DirectoryNode implements Layered Map baseListing = null; try { - Lookup lookup = getRepository().getSuperRepository().lookupDirectory(version, getUnderlying(lPath)); + Lookup lookup = lPath.getRepository().getSuperRepository().lookupDirectory(version, getUnderlying(lPath)); DirectoryNode dir = (DirectoryNode)lookup.getCurrentNode(); baseListing = dir.getListing(lookup, version); } @@ -396,7 +398,7 @@ public class LayeredDirectoryNode extends DirectoryNode implements Layered AVMNode child = null; try { - Lookup lookup = getRepository().getSuperRepository().lookupDirectory(version, getUnderlying(lPath)); + Lookup lookup = lPath.getRepository().getSuperRepository().lookupDirectory(version, getUnderlying(lPath)); DirectoryNode dir = (DirectoryNode)lookup.getCurrentNode(); child = dir.lookupChild(lookup, name, version); } @@ -446,7 +448,7 @@ public class LayeredDirectoryNode extends DirectoryNode implements Layered { try { - Lookup lookup = getRepository().getSuperRepository().lookupDirectory(-1, getUnderlying(lPath)); + Lookup lookup = lPath.getRepository().getSuperRepository().lookupDirectory(-1, getUnderlying(lPath)); DirectoryNode dir = (DirectoryNode)lookup.getCurrentNode(); if (dir.lookupChild(lookup, name, -1) == null) { @@ -467,8 +469,16 @@ public class LayeredDirectoryNode extends DirectoryNode implements Layered /* (non-Javadoc) * @see org.alfresco.repo.avm.AVMNode#getType() */ - public AVMNodeType getType() + public int getType() { return AVMNodeType.LAYERED_DIRECTORY; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + public String toString(Lookup lPath) + { + return "[LD:" + fData.getId() + ":" + getUnderlying(lPath) + "]"; + } } diff --git a/source/java/org/alfresco/repo/avm/LayeredFileNode.java b/source/java/org/alfresco/repo/avm/LayeredFileNode.java index dcd65f79cd..d3b6176bd3 100644 --- a/source/java/org/alfresco/repo/avm/LayeredFileNode.java +++ b/source/java/org/alfresco/repo/avm/LayeredFileNode.java @@ -61,7 +61,7 @@ public class LayeredFileNode extends FileNode implements Layered attrs.setLastModifier("britt"); fData = new LayeredFileNodeBeanImpl(repo.getSuperRepository().issueID(), - -1L, + -1, -1L, null, null, @@ -98,7 +98,7 @@ public class LayeredFileNode extends FileNode implements Layered attrs.setLastModifier("britt"); fData = new LayeredFileNodeBeanImpl(repos.getSuperRepository().issueID(), - -1L, + -1, -1L, null, null, @@ -125,7 +125,7 @@ public class LayeredFileNode extends FileNode implements Layered time, time); fData = new LayeredFileNodeBeanImpl(repo.getSuperRepository().issueID(), - -1L, + -1, -1L, null, null, @@ -143,10 +143,6 @@ public class LayeredFileNode extends FileNode implements Layered */ public void handlePostCopy(DirectoryNode parent) { - if (parent != null) - { - setRepository(parent.getRepository()); - } } /** @@ -158,7 +154,7 @@ public class LayeredFileNode extends FileNode implements Layered // LayeredFileNodes are always copied. // TODO This is busted. Need to set the PlainFileNode contents // to share with underlying file node. - PlainFileNode newMe = new PlainFileNode(getRepository()); + PlainFileNode newMe = new PlainFileNode(lPath.getRepository()); newMe.setAncestor(this); return newMe; } @@ -167,7 +163,7 @@ public class LayeredFileNode extends FileNode implements Layered * Get the type of this node. * @return The type. */ - public AVMNodeType getType() + public int getType() { return AVMNodeType.LAYERED_FILE; } @@ -176,16 +172,16 @@ public class LayeredFileNode extends FileNode implements Layered * Get the content of the specified version. * @return A FileContent object. */ - public FileContent getContentForRead(int version) + public FileContent getContentForRead(int version, Repository repo) { - Lookup lookup = getRepository().getSuperRepository().lookup(version, fData.getIndirection()); + Lookup lookup = repo.getSuperRepository().lookup(version, fData.getIndirection()); AVMNode node = lookup.getCurrentNode(); if (!(node instanceof FileNode)) { throw new AlfrescoRuntimeException("Missing Link."); } FileNode file = (FileNode)node; - return file.getContentForRead(version); + return file.getContentForRead(version, repo); } /** @@ -204,4 +200,12 @@ public class LayeredFileNode extends FileNode implements Layered { return fData.getIndirection(); } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + public String toString(Lookup lPath) + { + return "[LF:" + fData.getId() + ":" + fData.getIndirection() + "]"; + } } diff --git a/source/java/org/alfresco/repo/avm/Lookup.java b/source/java/org/alfresco/repo/avm/Lookup.java index d67411faf4..398db0a259 100644 --- a/source/java/org/alfresco/repo/avm/Lookup.java +++ b/source/java/org/alfresco/repo/avm/Lookup.java @@ -277,7 +277,9 @@ public class Lookup */ public String getCurrentIndirection() { - return fComponents.get(fPosition).getIndirection(); + String value = fComponents.get(fPosition).getIndirection(); + System.err.println(value); + return value; } /** diff --git a/source/java/org/alfresco/repo/avm/PlainDirectoryNode.java b/source/java/org/alfresco/repo/avm/PlainDirectoryNode.java index 0168c744b9..e216bee1a4 100644 --- a/source/java/org/alfresco/repo/avm/PlainDirectoryNode.java +++ b/source/java/org/alfresco/repo/avm/PlainDirectoryNode.java @@ -216,10 +216,6 @@ public class PlainDirectoryNode extends DirectoryNode */ public void handlePostCopy(DirectoryNode parent) { - if (parent != null) - { - setRepository(parent.getRepository()); - } } /** @@ -255,8 +251,17 @@ public class PlainDirectoryNode extends DirectoryNode * Get the type of this node. * @return The type of this node. */ - public AVMNodeType getType() + public int getType() { return AVMNodeType.PLAIN_DIRECTORY; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.avm.AVMNode#toString(org.alfresco.repo.avm.Lookup) + */ + @Override + public String toString(Lookup lPath) + { + return "[PD:" + fData.getId() + "]"; } } diff --git a/source/java/org/alfresco/repo/avm/PlainFileNode.java b/source/java/org/alfresco/repo/avm/PlainFileNode.java index 2b3f271169..a5fdeb06c2 100644 --- a/source/java/org/alfresco/repo/avm/PlainFileNode.java +++ b/source/java/org/alfresco/repo/avm/PlainFileNode.java @@ -104,19 +104,6 @@ public class PlainFileNode extends FileNode setDataBean(fData); } - // TODO I believe this is unnecessary (bhp) - /** - * Handle setting repository after a COW. - * @param parent The possibly new parent directory. - */ - public void handlePostCopy(DirectoryNode parent) - { - if (parent != null) - { - setRepository(parent.getRepository()); - } - } - /** * Copy on write logic. * @param lPath The lookup path. @@ -127,7 +114,7 @@ public class PlainFileNode extends FileNode { return null; } - PlainFileNode newMe = new PlainFileNode(this, getRepository()); + PlainFileNode newMe = new PlainFileNode(this, lPath.getRepository()); newMe.setAncestor(this); newMe.setBranchID(lPath.getHighestBranch()); return newMe; @@ -137,7 +124,7 @@ public class PlainFileNode extends FileNode * Get the type of this node. * @return The type. */ - public AVMNodeType getType() + public int getType() { return AVMNodeType.PLAIN_FILE; } @@ -145,7 +132,7 @@ public class PlainFileNode extends FileNode /** * Get content for reading. */ - public FileContent getContentForRead(int version) + public FileContent getContentForRead(int version, Repository repo) { return new FileContent(fData.getContent()); } @@ -164,4 +151,21 @@ public class PlainFileNode extends FileNode } return fc; } + + /* (non-Javadoc) + * @see org.alfresco.repo.avm.AVMNode#toString(org.alfresco.repo.avm.Lookup) + */ + @Override + public String toString(Lookup lPath) + { + return "[PF:" + fData.getId() + "]"; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.avm.AVMNode#handlePostCopy(org.alfresco.repo.avm.DirectoryNode) + */ + @Override + public void handlePostCopy(DirectoryNode parent) + { + } } diff --git a/source/java/org/alfresco/repo/avm/Repository.java b/source/java/org/alfresco/repo/avm/Repository.java index 105d6dde43..2d399e5511 100644 --- a/source/java/org/alfresco/repo/avm/Repository.java +++ b/source/java/org/alfresco/repo/avm/Repository.java @@ -43,7 +43,7 @@ public interface Repository * Get the latest version id. * @return The latest version. */ - public long getLatestVersion(); + public int getLatestVersion(); /** * Inform this Repository that the root node is new. @@ -131,7 +131,7 @@ public interface Repository * Get the version ids that this Repository has. * @return A Set of Version IDs. */ - public Set getVersions(); + public Set getVersions(); /** * Get the data bean. diff --git a/source/java/org/alfresco/repo/avm/SuperRepository.java b/source/java/org/alfresco/repo/avm/SuperRepository.java index bb3d5e36d9..8f260d320a 100644 --- a/source/java/org/alfresco/repo/avm/SuperRepository.java +++ b/source/java/org/alfresco/repo/avm/SuperRepository.java @@ -114,6 +114,12 @@ public interface SuperRepository */ public void createSnapshot(List repositories); + /** + * Create a snapshot of a single repository. + * @param repository The name of the repsository. + */ + public void createSnapshot(String repository); + // Different flavors of deletions. /** @@ -165,7 +171,7 @@ public interface SuperRepository * @param name The name of the repository. * @return A Set of IDs. */ - public Set getRepositoryVersions(String name); + public Set getRepositoryVersions(String name); /** * Issue a unique identifier for a new node. 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 0d0d1a708a..7f21e19cb9 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml +++ b/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml @@ -34,7 +34,7 @@ won't cause violations in the db during saves. --> - @@ -80,8 +80,8 @@ - + @@ -106,14 +106,14 @@ this probably wants to be in the base class. --> + that nodes don't know there own names, only their containers do. --> - + @@ -176,7 +176,7 @@ - @@ -187,7 +187,7 @@ of versioned root directories. --> - + diff --git a/source/java/org/alfresco/repo/avm/hibernate/AVMNodeBean.java b/source/java/org/alfresco/repo/avm/hibernate/AVMNodeBean.java index 18a2c3f00c..f4dd1fd05f 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/AVMNodeBean.java +++ b/source/java/org/alfresco/repo/avm/hibernate/AVMNodeBean.java @@ -39,13 +39,13 @@ public interface AVMNodeBean * Set the version id. * @param id The version id of the node. */ - public void setVersionID(long id); + public void setVersionID(int id); /** * Get the version id of this node. * @return The version id. */ - public long getVersionID(); + public int getVersionID(); /** * Set the parent of this node. This is only a canonical parent, diff --git a/source/java/org/alfresco/repo/avm/hibernate/AVMNodeBeanImpl.java b/source/java/org/alfresco/repo/avm/hibernate/AVMNodeBeanImpl.java index 894bbe62a8..1582b03c9e 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/AVMNodeBeanImpl.java +++ b/source/java/org/alfresco/repo/avm/hibernate/AVMNodeBeanImpl.java @@ -31,7 +31,7 @@ public class AVMNodeBeanImpl implements AVMNodeBean /** * The Version ID */ - private long fVersionID; + private int fVersionID; /** * The Branch ID @@ -91,7 +91,7 @@ public class AVMNodeBeanImpl implements AVMNodeBean * @param repository The repository. */ public AVMNodeBeanImpl(long id, - long versionID, + int versionID, long branchID, AVMNodeBean ancestor, AVMNodeBean mergedFrom, @@ -155,7 +155,7 @@ public class AVMNodeBeanImpl implements AVMNodeBean /* (non-Javadoc) * @see org.alfresco.proto.avm.AVMNode#setVersionID(int) */ - public void setVersionID(long id) + public void setVersionID(int id) { fVersionID = id; } @@ -163,7 +163,7 @@ public class AVMNodeBeanImpl implements AVMNodeBean /* (non-Javadoc) * @see org.alfresco.proto.avm.AVMNode#getVersionID() */ - public long getVersionID() + public int getVersionID() { return fVersionID; } diff --git a/source/java/org/alfresco/repo/avm/hibernate/DirectoryEntry.java b/source/java/org/alfresco/repo/avm/hibernate/DirectoryEntry.java index dfb8e1b6c1..97b816046c 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/DirectoryEntry.java +++ b/source/java/org/alfresco/repo/avm/hibernate/DirectoryEntry.java @@ -28,7 +28,7 @@ public class DirectoryEntry /** * The type of entry a node is. */ - private AVMNodeType fType; + private int fType; /** * This is the actual child Node. @@ -47,31 +47,13 @@ public class DirectoryEntry * @param type The type. * @param child The child node. */ - public DirectoryEntry(AVMNodeType type, AVMNodeBean child) + public DirectoryEntry(int type, AVMNodeBean child) { fType = type; fChild = child; } - /** - * Set the entry type. - * @param type The type to set. - */ - public void setEntryType(AVMNodeType type) - { - fType = type; - } - - /** - * Get the entry type. - * @return The type. - */ - public AVMNodeType getEntryType() - { - return fType; - } - - /** + /** * Set the child. * @param child The child to set. */ @@ -91,19 +73,19 @@ public class DirectoryEntry /** * Set the type by name. - * @param name The name of the type. + * @param type The type. */ - public void setType(String name) + public void setType(int type) { - fType = Enum.valueOf(AVMNodeType.class, name); + fType = type; } /** - * Get the type name. + * Get the type. */ - public String getType() + public int getType() { - return fType.name(); + return fType; } /* (non-Javadoc) @@ -138,6 +120,6 @@ public class DirectoryEntry @Override public String toString() { - return "[" + fType.name() + "] " + fChild.getId(); + return "[" + fType + "] " + fChild.getId(); } } diff --git a/source/java/org/alfresco/repo/avm/hibernate/DirectoryNodeBeanImpl.java b/source/java/org/alfresco/repo/avm/hibernate/DirectoryNodeBeanImpl.java index 8f03ee82a7..627081ce3f 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/DirectoryNodeBeanImpl.java +++ b/source/java/org/alfresco/repo/avm/hibernate/DirectoryNodeBeanImpl.java @@ -41,7 +41,7 @@ public class DirectoryNodeBeanImpl extends AVMNodeBeanImpl implements DirectoryN * @param parent The parent. */ public DirectoryNodeBeanImpl(long id, - long versionID, + int versionID, long branchID, AVMNodeBean ancestor, AVMNodeBean mergedFrom, diff --git a/source/java/org/alfresco/repo/avm/hibernate/FileNodeBeanImpl.java b/source/java/org/alfresco/repo/avm/hibernate/FileNodeBeanImpl.java index 9eb85c0c42..db7be53258 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/FileNodeBeanImpl.java +++ b/source/java/org/alfresco/repo/avm/hibernate/FileNodeBeanImpl.java @@ -42,7 +42,7 @@ public class FileNodeBeanImpl extends AVMNodeBeanImpl implements FileNodeBean * @param parent The parent. */ public FileNodeBeanImpl(long id, - long versionID, + int versionID, long branchID, AVMNodeBean ancestor, AVMNodeBean mergedFrom, diff --git a/source/java/org/alfresco/repo/avm/hibernate/LayeredDirectoryNodeBeanImpl.java b/source/java/org/alfresco/repo/avm/hibernate/LayeredDirectoryNodeBeanImpl.java index d2476fb3eb..c2d52dec45 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/LayeredDirectoryNodeBeanImpl.java +++ b/source/java/org/alfresco/repo/avm/hibernate/LayeredDirectoryNodeBeanImpl.java @@ -72,10 +72,11 @@ public class LayeredDirectoryNodeBeanImpl extends DirectoryNodeBeanImpl implemen * @param mergedFrom The node that merged into us. * @param parent The parent node. * @param layerID The layer id of this node. + * @param primary Whether this is a primary indirection node. * @param indirection The indirection pointer of this. */ public LayeredDirectoryNodeBeanImpl(long id, - long versionID, + int versionID, long branchID, AVMNodeBean ancestor, AVMNodeBean mergedFrom, @@ -83,10 +84,12 @@ public class LayeredDirectoryNodeBeanImpl extends DirectoryNodeBeanImpl implemen RepositoryBean repository, BasicAttributesBean attrs, long layerID, + boolean primary, String indirection) { super(id, versionID, branchID, ancestor, mergedFrom, parent, repository, attrs); fLayerID = layerID; + fPrimaryIndirection = primary; fIndirection = indirection; fAdded = new HashMap(); fDeleted = new HashSet(); diff --git a/source/java/org/alfresco/repo/avm/hibernate/LayeredFileNodeBeanImpl.java b/source/java/org/alfresco/repo/avm/hibernate/LayeredFileNodeBeanImpl.java index 5fe835b0de..8d7474f908 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/LayeredFileNodeBeanImpl.java +++ b/source/java/org/alfresco/repo/avm/hibernate/LayeredFileNodeBeanImpl.java @@ -48,7 +48,7 @@ public class LayeredFileNodeBeanImpl extends FileNodeBeanImpl implements * @param indirection The indirection pointer. */ public LayeredFileNodeBeanImpl(long id, - long versionID, + int versionID, long branchID, AVMNodeBean ancestor, AVMNodeBean mergedFrom, diff --git a/source/java/org/alfresco/repo/avm/hibernate/PlainDirectoryNodeBeanImpl.java b/source/java/org/alfresco/repo/avm/hibernate/PlainDirectoryNodeBeanImpl.java index 7877f611e5..a8e80712ae 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/PlainDirectoryNodeBeanImpl.java +++ b/source/java/org/alfresco/repo/avm/hibernate/PlainDirectoryNodeBeanImpl.java @@ -55,7 +55,7 @@ public class PlainDirectoryNodeBeanImpl extends DirectoryNodeBeanImpl implements * @param isRoot Whether this is a root node. */ public PlainDirectoryNodeBeanImpl(long id, - long versionID, + int versionID, long branchID, AVMNodeBean ancestor, AVMNodeBean mergedFrom, diff --git a/source/java/org/alfresco/repo/avm/hibernate/PlainFileNodeBeanImpl.java b/source/java/org/alfresco/repo/avm/hibernate/PlainFileNodeBeanImpl.java index 932009ce33..f5c2ae9c44 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/PlainFileNodeBeanImpl.java +++ b/source/java/org/alfresco/repo/avm/hibernate/PlainFileNodeBeanImpl.java @@ -48,7 +48,7 @@ public class PlainFileNodeBeanImpl extends FileNodeBeanImpl implements PlainFile * @param content The content object. */ public PlainFileNodeBeanImpl(long id, - long versionID, + int versionID, long branchID, AVMNodeBean ancestor, AVMNodeBean mergedFrom, diff --git a/source/java/org/alfresco/repo/avm/hibernate/RepositoryBean.java b/source/java/org/alfresco/repo/avm/hibernate/RepositoryBean.java index e6dd0445ad..3f32e2422a 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/RepositoryBean.java +++ b/source/java/org/alfresco/repo/avm/hibernate/RepositoryBean.java @@ -55,25 +55,25 @@ public interface RepositoryBean * Set the roots map. * @param roots The Map of version ids to roots. */ - public void setRoots(Map roots); + public void setRoots(Map roots); /** * Get the roots map. * @return The roots map. */ - public Map getRoots(); + public Map getRoots(); /** * Set the next version id. * @param nextVersionID The value to set. */ - public void setNextVersionID(long nextVersionID); + public void setNextVersionID(int nextVersionID); /** * Get the next version id. * @return The next version id. */ - public long getNextVersionID(); + public int getNextVersionID(); /** * Set the new nodes. diff --git a/source/java/org/alfresco/repo/avm/hibernate/RepositoryBeanImpl.java b/source/java/org/alfresco/repo/avm/hibernate/RepositoryBeanImpl.java index df19d37549..6feb58e672 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/RepositoryBeanImpl.java +++ b/source/java/org/alfresco/repo/avm/hibernate/RepositoryBeanImpl.java @@ -41,12 +41,12 @@ public class RepositoryBeanImpl implements RepositoryBean /** * The root directories for all versions. */ - private Map fRoots; + private Map fRoots; /** * The next version id. */ - private long fNextVersionID; + private int fNextVersionID; /** * The nodes that are new since the last end operation. @@ -76,7 +76,7 @@ public class RepositoryBeanImpl implements RepositoryBean fName = name; fNextVersionID = 0; fRoot = root; - fRoots = new HashMap(); + fRoots = new HashMap(); fNewNodes = new HashSet(); } @@ -115,7 +115,7 @@ public class RepositoryBeanImpl implements RepositoryBean /* (non-Javadoc) * @see org.alfresco.proto.avm.Repository#setRoots(java.util.Map) */ - public void setRoots(Map roots) + public void setRoots(Map roots) { fRoots = roots; } @@ -123,7 +123,7 @@ public class RepositoryBeanImpl implements RepositoryBean /* (non-Javadoc) * @see org.alfresco.proto.avm.Repository#getRoots() */ - public Map getRoots() + public Map getRoots() { return fRoots; } @@ -131,7 +131,7 @@ public class RepositoryBeanImpl implements RepositoryBean /* (non-Javadoc) * @see org.alfresco.proto.avm.Repository#setNextVersionID(int) */ - public void setNextVersionID(long nextVersionID) + public void setNextVersionID(int nextVersionID) { fNextVersionID = nextVersionID; } @@ -139,7 +139,7 @@ public class RepositoryBeanImpl implements RepositoryBean /* (non-Javadoc) * @see org.alfresco.proto.avm.Repository#getNextVersionID() */ - public long getNextVersionID() + public int getNextVersionID() { return fNextVersionID; } diff --git a/source/java/org/alfresco/repo/avm/hibernate/TestPopulate.java b/source/java/org/alfresco/repo/avm/hibernate/TestPopulate.java deleted file mode 100644 index 84ce1fa7b8..0000000000 --- a/source/java/org/alfresco/repo/avm/hibernate/TestPopulate.java +++ /dev/null @@ -1,233 +0,0 @@ -/* - * 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 org.alfresco.repo.avm.AVMNodeType; -import org.alfresco.repo.avm.hibernate.ContentBean; -import org.alfresco.repo.avm.hibernate.ContentBeanImpl; -import org.alfresco.repo.avm.hibernate.HibernateHelper; -import org.alfresco.repo.avm.hibernate.HibernateTxn; -import org.alfresco.repo.avm.hibernate.HibernateTxnCallback; -import org.alfresco.repo.avm.hibernate.Issuer; -import org.alfresco.repo.avm.hibernate.PlainDirectoryNodeBean; -import org.alfresco.repo.avm.hibernate.PlainDirectoryNodeBeanImpl; -import org.alfresco.repo.avm.hibernate.PlainFileNodeBean; -import org.alfresco.repo.avm.hibernate.PlainFileNodeBeanImpl; -import org.alfresco.repo.avm.hibernate.RepositoryBean; -import org.alfresco.repo.avm.hibernate.RepositoryBeanImpl; -import org.hibernate.Query; -import org.hibernate.Session; -import org.hibernate.SessionFactory; -import org.hibernate.cfg.Configuration; -import org.hibernate.tool.hbm2ddl.SchemaExport; - -import junit.framework.TestCase; - -public class TestPopulate extends TestCase -{ - /** - * The SessionFactory. - */ - private SessionFactory fSessionFactory; - - public TestPopulate(String name) - { - super(name); - } - - protected void setUp() throws Exception - { - fSessionFactory = HibernateHelper.GetSessionFactory(); - Configuration cfg = HibernateHelper.GetConfiguration(); - SchemaExport se = new SchemaExport(cfg); - se.drop(false, true); - se.create(false, true); - } - - protected void tearDown() throws Exception - { - } - - /** - * Add some data to persistent store. - */ - public void testPopulate() - { - try - { - HibernateTxn hTxn = new HibernateTxn(fSessionFactory); - boolean result = hTxn.perform( - new HibernateTxnCallback() - { - public void perform(Session session) - { - // Set up issuers. - Issuer nodeIssuer = new Issuer("node", 0, session); - new Issuer("content", 0, session); - new Issuer("repository", 0, session); - // Make the initial root directory. - long time = System.currentTimeMillis(); - BasicAttributesBean attrs = new BasicAttributesBeanImpl("britt", - "britt", - "britt", - time, - time, - time); - session.save(attrs); - PlainDirectoryNodeBean root = - new PlainDirectoryNodeBeanImpl(nodeIssuer.issue(), - 0, - 0, - null, - null, - null, - null, - attrs, - true); - // Make a new repository. - RepositoryBean rep = - new RepositoryBeanImpl("main", root); - root.setRepository(rep); - session.save(rep); - rep.getRoots().put(rep.getNextVersionID(), root); - rep.setNextVersionID(rep.getNextVersionID() + 1); - root.setIsNew(false); - } - }); - assertTrue(result); - System.out.println("--------------------------------------------"); - result = hTxn.perform( - new HibernateTxnCallback() - { - public void perform(Session session) - { - // Now read some things back, and modify some stuff. - Issuer nodeIssuer = (Issuer)session.get(Issuer.class, "node"); - Issuer contentIssuer = (Issuer)session.get(Issuer.class, "content"); - RepositoryBean rep = (RepositoryBean)session.get(RepositoryBeanImpl.class, "main"); - long version = rep.getNextVersionID(); - rep.setNextVersionID(version + 1); - assertTrue(rep != null); - PlainDirectoryNodeBean root = (PlainDirectoryNodeBean)rep.getRoot(); - long time = System.currentTimeMillis(); - BasicAttributesBean attrs = new BasicAttributesBeanImpl("britt", - "britt", - "britt", - time, - time, - time); - session.save(attrs); - PlainDirectoryNodeBean newRoot = new PlainDirectoryNodeBeanImpl(nodeIssuer.issue(), - version, - 0L, - root, - null, - null, - rep, - attrs, - true); - ContentBean content = new ContentBeanImpl(contentIssuer.issue()); - attrs = new BasicAttributesBeanImpl(attrs); - session.save(attrs); - PlainFileNodeBean file = new PlainFileNodeBeanImpl(nodeIssuer.issue(), - version, - 0L, - null, - null, - newRoot, - rep, - attrs, - content); - content.setRefCount(content.getRefCount() + 1); - newRoot.getChildren().put("foo", new DirectoryEntry(AVMNodeType.PLAIN_FILE, file)); - session.save(content); - session.save(newRoot); - content = new ContentBeanImpl(contentIssuer.issue()); - content.setRefCount(content.getRefCount() + 1); - file.setIsNew(false); - attrs = new BasicAttributesBeanImpl(attrs); - session.save(attrs); - file = new PlainFileNodeBeanImpl(nodeIssuer.issue(), - version, - 0L, - null, - null, - newRoot, - rep, - attrs, - content); - session.save(content); - file.setIsNew(false); - newRoot.getChildren().put("bar", new DirectoryEntry(AVMNodeType.PLAIN_FILE, file)); - rep.setRoot(newRoot); - rep.getRoots().put(version, newRoot); - newRoot.setIsNew(false); - } - }); - assertTrue(result); - System.out.println("-----------------------------------------------"); - result = hTxn.perform( - new HibernateTxnCallback() - { - public void perform(Session session) - { - Query query = session.createQuery("from RepositoryBeanImpl r where r.name = :name"); - query.setString("name", "main"); - RepositoryBean rep = (RepositoryBean)query.uniqueResult(); - PlainDirectoryNodeBean root = (PlainDirectoryNodeBean)rep.getRoot(); - assertEquals(2, root.getChildren().size()); - for (String name : root.getChildren().keySet()) - { - System.out.println(name); - } - for (DirectoryEntry entry : root.getChildren().values()) - { - assertEquals(AVMNodeType.PLAIN_FILE, entry.getEntryType()); - } - assertEquals("britt", root.getBasicAttributes().getCreator()); - } - }); - assertTrue(result); - System.out.println("----------------------------------------------"); - // Just check cascading deletes for the children of a directory. - result = hTxn.perform( - new HibernateTxnCallback() - { - public void perform(Session session) - { - RepositoryBean rep = (RepositoryBean)session.get(RepositoryBeanImpl.class, "main"); - PlainDirectoryNodeBean root = (PlainDirectoryNodeBean)rep.getRoot(); - PlainDirectoryNodeBean prev = (PlainDirectoryNodeBean)root.getAncestor(); - rep.getRoots().remove(rep.getRoot().getId()); - rep.setRoot(prev); - for (String name : root.getChildren().keySet()) - { - AVMNodeBean child = root.getChildren().get(name).getChild(); - child.setParent(null); - } - session.delete(root); - } - }); - assertTrue(result); - } - catch (Exception e) - { - e.printStackTrace(System.err); - fail(); - } - } -} diff --git a/source/java/org/alfresco/repo/avm/impl/AVMServiceImpl.java b/source/java/org/alfresco/repo/avm/impl/AVMServiceImpl.java index 849f0aff86..3666acdca4 100644 --- a/source/java/org/alfresco/repo/avm/impl/AVMServiceImpl.java +++ b/source/java/org/alfresco/repo/avm/impl/AVMServiceImpl.java @@ -22,7 +22,6 @@ import java.io.OutputStream; import java.util.List; import java.util.Set; -import org.alfresco.repo.avm.AVMNode; import org.alfresco.repo.avm.AVMService; import org.alfresco.repo.avm.FolderEntry; import org.alfresco.repo.avm.Lookup; @@ -363,10 +362,27 @@ public class AVMServiceImpl implements AVMService fTransaction.perform(doit); } + /* (non-Javadoc) + * @see org.alfresco.repo.avm.AVMService#createSnapshot(java.lang.String) + */ + public void createSnapshot(final String repository) + { + class HTxnCallback implements HibernateTxnCallback + { + public void perform(Session session) + { + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); + fSuperRepository.get().createSnapshot(repository); + } + } + HTxnCallback doit = new HTxnCallback(); + fTransaction.perform(doit); + } + /* (non-Javadoc) * @see org.alfresco.repo.avm.AVMService#lookup(int, java.lang.String) */ - public AVMNode lookup(final int version, final String path) + public Lookup lookup(final int version, final String path) { class HTxnCallback implements HibernateTxnCallback { @@ -380,7 +396,7 @@ public class AVMServiceImpl implements AVMService } HTxnCallback doit = new HTxnCallback(); fTransaction.perform(doit); - return doit.lookup.getCurrentNode(); + return doit.lookup; } /* (non-Javadoc) @@ -440,11 +456,11 @@ public class AVMServiceImpl implements AVMService /* (non-Javadoc) * @see org.alfresco.repo.avm.AVMService#getRepositoryVersions(java.lang.String) */ - public Set getRepositoryVersions(final String name) + public Set getRepositoryVersions(final String name) { class HTxnCallback implements HibernateTxnCallback { - public Set versions; + public Set versions; public void perform(Session session) { diff --git a/source/java/org/alfresco/repo/avm/impl/RepositoryImpl.java b/source/java/org/alfresco/repo/avm/impl/RepositoryImpl.java index f234ac0727..530387633b 100644 --- a/source/java/org/alfresco/repo/avm/impl/RepositoryImpl.java +++ b/source/java/org/alfresco/repo/avm/impl/RepositoryImpl.java @@ -122,7 +122,7 @@ public class RepositoryImpl implements Repository /* (non-Javadoc) * @see org.alfresco.repo.avm.Repository#getLatestVersion() */ - public long getLatestVersion() + public int getLatestVersion() { return fData.getNextVersionID(); } @@ -261,7 +261,7 @@ public class RepositoryImpl implements Repository throw new AlfrescoRuntimeException("Not a file: " + path + " r " + version); } FileNode file = (FileNode)node; - FileContent content = file.getContentForRead(version); + FileContent content = file.getContentForRead(version, this); return content.getInputStream(fSuper); } @@ -278,7 +278,7 @@ public class RepositoryImpl implements Repository { FolderEntry item = new FolderEntry(); item.setName(name); - item.setType(listing.get(name).getEntryType()); + item.setType(listing.get(name).getType()); results.add(item); } return results; @@ -376,7 +376,7 @@ public class RepositoryImpl implements Repository /* (non-Javadoc) * @see org.alfresco.repo.avm.Repository#getVersions() */ - public Set getVersions() + public Set getVersions() { return fData.getRoots().keySet(); } diff --git a/source/java/org/alfresco/repo/avm/impl/SuperRepositoryImpl.java b/source/java/org/alfresco/repo/avm/impl/SuperRepositoryImpl.java index 6fbb383b9e..d65adbf822 100644 --- a/source/java/org/alfresco/repo/avm/impl/SuperRepositoryImpl.java +++ b/source/java/org/alfresco/repo/avm/impl/SuperRepositoryImpl.java @@ -335,6 +335,15 @@ public class SuperRepositoryImpl implements SuperRepository } } + /* (non-Javadoc) + * @see org.alfresco.repo.avm.SuperRepository#createSnapshot(java.lang.String) + */ + public void createSnapshot(String repository) + { + Repository repo = getRepositoryByName(repository); + repo.createSnapshot(); + } + /* (non-Javadoc) * @see org.alfresco.repo.avm.SuperRepository#remove(java.lang.String, java.lang.String) */ @@ -394,7 +403,7 @@ public class SuperRepositoryImpl implements SuperRepository /* (non-Javadoc) * @see org.alfresco.repo.avm.SuperRepository#getRepositoryVersions(java.lang.String) */ - public Set getRepositoryVersions(String name) + public Set getRepositoryVersions(String name) { Repository rep = getRepositoryByName(name); return rep.getVersions();