From 8818e8dabad0ab9ff2874af66332f6b74dbf35d9 Mon Sep 17 00:00:00 2001 From: Britt Park Date: Tue, 16 May 2006 22:55:37 +0000 Subject: [PATCH] Merged all the AVM mapping files into one medium file. I find it easier to follow. Purged the pointless FileContentFactory class. If everything else were working file reading and writing would now work. Various other cleanups and some richer internal documentation. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@2904 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- source/java/hibernate.cfg.xml | 5 +- .../java/org/alfresco/repo/avm/AVMNode.java | 13 +- .../org/alfresco/repo/avm/AVMNodeFactory.java | 3 +- .../org/alfresco/repo/avm/AVMService.java | 4 +- .../org/alfresco/repo/avm/DirectoryNode.java | 2 +- .../org/alfresco/repo/avm/FileContent.java | 118 +++++++++- .../alfresco/repo/avm/FileContentFactory.java | 36 --- .../java/org/alfresco/repo/avm/FileNode.java | 2 +- .../repo/avm/LayeredDirectoryNode.java | 9 +- source/java/org/alfresco/repo/avm/Lookup.java | 10 +- .../org/alfresco/repo/avm/PlainFileNode.java | 4 +- .../alfresco/repo/avm/SuperRepository.java | 6 + .../alfresco/repo/avm/hibernate/AVM.hbm.xml | 206 ++++++++++++++++++ .../repo/avm/hibernate/AVMNode.hbm.xml | 114 ---------- .../repo/avm/hibernate/Content.hbm.xml | 14 -- .../repo/avm/hibernate/Issuer.hbm.xml | 13 -- .../repo/avm/hibernate/Repository.hbm.xml | 30 --- .../repo/avm/hibernate/TestPopulate.java | 1 + .../repo/avm/impl/AVMServiceImpl.java | 52 +++-- .../repo/avm/impl/SuperRepositoryImpl.java | 17 +- 20 files changed, 408 insertions(+), 251 deletions(-) delete mode 100644 source/java/org/alfresco/repo/avm/FileContentFactory.java create mode 100644 source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml delete mode 100644 source/java/org/alfresco/repo/avm/hibernate/AVMNode.hbm.xml delete mode 100644 source/java/org/alfresco/repo/avm/hibernate/Content.hbm.xml delete mode 100644 source/java/org/alfresco/repo/avm/hibernate/Issuer.hbm.xml delete mode 100644 source/java/org/alfresco/repo/avm/hibernate/Repository.hbm.xml diff --git a/source/java/hibernate.cfg.xml b/source/java/hibernate.cfg.xml index 564ec176cd..8cb0ff9e28 100644 --- a/source/java/hibernate.cfg.xml +++ b/source/java/hibernate.cfg.xml @@ -15,9 +15,6 @@ 20 900 50 - - - - + diff --git a/source/java/org/alfresco/repo/avm/AVMNode.java b/source/java/org/alfresco/repo/avm/AVMNode.java index 6f6dc9d9a3..6ec28a1121 100644 --- a/source/java/org/alfresco/repo/avm/AVMNode.java +++ b/source/java/org/alfresco/repo/avm/AVMNode.java @@ -153,15 +153,18 @@ public abstract class AVMNode */ public AVMNode copyOnWrite(Lookup lPath) { + // Call the subclass's copy on write logic. AVMNode newMe = possiblyCopy(lPath); - String myName = lPath.getName(); - lPath.upCurrentNode(); + // No copying needed, so short circuit. if (newMe == null) { return this; } - Repository repos = getRepository(); + String myName = lPath.getName(); + lPath.upCurrentNode(); + Repository repos = lPath.getRepository(); newMe.setVersion(repos.getLatestVersion() + 1); + // Get our parent directory if we have one. DirectoryNode parent = null; if (getParent() != null) { @@ -169,6 +172,7 @@ public abstract class AVMNode } if (parent != null) { + // Recursive invocation. DirectoryNode newParent = (DirectoryNode)parent.copyOnWrite(lPath); newParent.putChild(myName, newMe); @@ -176,15 +180,14 @@ public abstract class AVMNode } else // Null parent means root of repository. { - newMe.setRepository(getRepository()); repos.setNewRoot((DirectoryNode)newMe); } + newMe.setRepository(repos); newMe.setShouldBeCopied(false); repos.setNew(newMe); return newMe; } - /** * Possibly copy ourselves. * @param lPath The Lookup for this node. diff --git a/source/java/org/alfresco/repo/avm/AVMNodeFactory.java b/source/java/org/alfresco/repo/avm/AVMNodeFactory.java index 2c1179b3c5..7efb311b63 100644 --- a/source/java/org/alfresco/repo/avm/AVMNodeFactory.java +++ b/source/java/org/alfresco/repo/avm/AVMNodeFactory.java @@ -24,7 +24,8 @@ import org.alfresco.repo.avm.hibernate.PlainDirectoryNodeBean; import org.alfresco.repo.avm.hibernate.PlainFileNodeBean; /** - * Responsible for instantiating AVMNode implementations. + * Responsible for instantiating AVMNode concrete subclasses from + * underlying data beans. * @author britt */ public class AVMNodeFactory diff --git a/source/java/org/alfresco/repo/avm/AVMService.java b/source/java/org/alfresco/repo/avm/AVMService.java index 37d0a32997..01a750a08d 100644 --- a/source/java/org/alfresco/repo/avm/AVMService.java +++ b/source/java/org/alfresco/repo/avm/AVMService.java @@ -25,8 +25,8 @@ import java.util.Set; /** * This is the service interface for the [Alfresco|Addled|Advanced|Apotheosed] Versioning * Model. It specifies methods that are close in functionality to the underlying - * implementation, and is intended, for now, as an internal interface to build a different - * implementation of NodeService and others. + * implementation, and is intended as both a first class Alfresco service and an + * aid in creating new implementations of existing services. * @author britt */ public interface AVMService diff --git a/source/java/org/alfresco/repo/avm/DirectoryNode.java b/source/java/org/alfresco/repo/avm/DirectoryNode.java index dc753b7ae5..9d31e632ee 100644 --- a/source/java/org/alfresco/repo/avm/DirectoryNode.java +++ b/source/java/org/alfresco/repo/avm/DirectoryNode.java @@ -22,7 +22,7 @@ import java.util.Map; import org.alfresco.repo.avm.hibernate.DirectoryEntry; /** - * + * Base class for Directories. * @author britt */ public abstract class DirectoryNode extends AVMNode diff --git a/source/java/org/alfresco/repo/avm/FileContent.java b/source/java/org/alfresco/repo/avm/FileContent.java index 7f7e5a5c9b..9821c051b0 100644 --- a/source/java/org/alfresco/repo/avm/FileContent.java +++ b/source/java/org/alfresco/repo/avm/FileContent.java @@ -17,11 +17,15 @@ package org.alfresco.repo.avm; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.Formatter; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.avm.hibernate.ContentBean; @@ -38,6 +42,16 @@ public class FileContent */ private ContentBean fData; + /** + * The name of the file. + */ + private String fName; + + /** + * The directory path of the file. + */ + private String fPath; + /** * Make one from a bean. * @param data The Bean with the data. @@ -45,6 +59,7 @@ public class FileContent public FileContent(ContentBean data) { fData = data; + } /** @@ -54,6 +69,17 @@ public class FileContent public FileContent(SuperRepository superRepo) { fData = new ContentBeanImpl(superRepo.issueContentID()); + BufferedOutputStream out = new BufferedOutputStream(getOutputStream(superRepo)); + // Make an empty file. + try + { + out.close(); + } + catch (IOException ie) + { + throw new AlfrescoRuntimeException("Couldn't close file.", ie); + } + superRepo.getSession().save(fData); } /** @@ -64,7 +90,25 @@ public class FileContent public FileContent(FileContent other, SuperRepository superRepo) { fData = new ContentBeanImpl(superRepo.issueContentID()); - // TODO Something. + // Copy the contents from other to this. + BufferedInputStream in = new BufferedInputStream(other.getInputStream(superRepo)); + BufferedOutputStream out = new BufferedOutputStream(this.getOutputStream(superRepo)); + try + { + byte [] buff = new byte[4096]; // Nyah, nyah. + int bytesRead; + while ((bytesRead = in.read(buff)) != -1) + { + out.write(buff, 0, bytesRead); + } + out.close(); + in.close(); + } + catch (IOException ie) + { + throw new AlfrescoRuntimeException("I/O failure in Copy on Write.", ie); + } + superRepo.getSession().save(fData); } /** @@ -92,8 +136,14 @@ public class FileContent */ public InputStream getInputStream(SuperRepository superRepo) { - // TODO Something. - return null; + try + { + return new FileInputStream(getContentPath(superRepo)); + } + catch (IOException ie) + { + throw new AlfrescoRuntimeException("Could not open for reading: " + getContentPath(superRepo), ie); + } } /** @@ -103,8 +153,19 @@ public class FileContent */ public OutputStream getOutputStream(SuperRepository superRepo) { - // TODO Something. - return null; + try + { + File dir = new File(getDirectoryPath(superRepo)); + if (!dir.exists()) + { + dir.mkdirs(); + } + return new FileOutputStream(getContentPath(superRepo)); + } + catch (IOException ie) + { + throw new AlfrescoRuntimeException("Could not open for writing: " + getContentPath(superRepo), ie); + } } /** @@ -115,4 +176,51 @@ public class FileContent { return fData; } + + /** + * Retrieve the full path for this content. + * @param superRepo + * @return The full path for this content. + */ + private String getContentPath(SuperRepository superRepo) + { + if (fName == null) + { + calcPathData(superRepo); + } + return fName; + } + + /** + * Get the directory path for this content. + * @param superRepo + * @return The directory path. + */ + private String getDirectoryPath(SuperRepository superRepo) + { + if (fPath == null) + { + calcPathData(superRepo); + } + return fPath; + } + + /** + * Calculate the path data. + */ + private void calcPathData(SuperRepository superRepo) + { + long id = fData.getId(); + Formatter form = new Formatter(new StringBuilder()); + form.format("%016x", id); + String name = form.toString(); + form = new Formatter(new StringBuilder()); + form.format("/%02x/%02x/%02x", + (id & 0xff000000) >> 24, + (id & 0xff0000) >> 16, + (id & 0xff00) >> 8); + String dir = form.toString(); + fPath = superRepo.getStorageRoot() + dir; + fName = fPath + "/" + name; + } } diff --git a/source/java/org/alfresco/repo/avm/FileContentFactory.java b/source/java/org/alfresco/repo/avm/FileContentFactory.java deleted file mode 100644 index a2a52b5133..0000000000 --- a/source/java/org/alfresco/repo/avm/FileContentFactory.java +++ /dev/null @@ -1,36 +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; - -import org.alfresco.repo.avm.hibernate.ContentBean; - -/** - * Static method for making FileContent instances from beans. - * @author britt - */ -public class FileContentFactory -{ - /** - * Make A FileContent object from a ContentBean. - * @param bean The bean with the data. - */ - public static FileContent CreateFileContentFromBean(ContentBean bean) - { - return new FileContent(bean); - } -} diff --git a/source/java/org/alfresco/repo/avm/FileNode.java b/source/java/org/alfresco/repo/avm/FileNode.java index 8bb82f8d35..b95ef73980 100644 --- a/source/java/org/alfresco/repo/avm/FileNode.java +++ b/source/java/org/alfresco/repo/avm/FileNode.java @@ -18,7 +18,7 @@ package org.alfresco.repo.avm; /** - * Interface for file objects. + * Base class for file objects. * @author britt */ public abstract class FileNode extends AVMNode diff --git a/source/java/org/alfresco/repo/avm/LayeredDirectoryNode.java b/source/java/org/alfresco/repo/avm/LayeredDirectoryNode.java index 1934913eb6..bfcf09b3a5 100644 --- a/source/java/org/alfresco/repo/avm/LayeredDirectoryNode.java +++ b/source/java/org/alfresco/repo/avm/LayeredDirectoryNode.java @@ -18,7 +18,6 @@ package org.alfresco.repo.avm; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; import java.util.TreeMap; @@ -30,7 +29,11 @@ import org.alfresco.repo.avm.hibernate.LayeredDirectoryNodeBean; import org.alfresco.repo.avm.hibernate.LayeredDirectoryNodeBeanImpl; /** - * Interface for a layered directory node. Stub. + * A layered directory node. A layered directory node points at + * an underlying directory, which may or may not exist. The visible + * contents of a layered directory node is the contents of the underlying node + * pointed at plus those nodes added to or modified in the layered directory node minus + * those nodes which have been deleted in the layered directory node. * @author britt */ public class LayeredDirectoryNode extends DirectoryNode implements Layered @@ -57,7 +60,9 @@ public class LayeredDirectoryNode extends DirectoryNode implements Layered */ public LayeredDirectoryNode(String indirection, Repository repos) { + // Set up basic attributes for this node. long time = System.currentTimeMillis(); + // TODO We'll fix this up when Britt understands user management. BasicAttributesBean attrs = new BasicAttributesBeanImpl("britt", "britt", "britt", diff --git a/source/java/org/alfresco/repo/avm/Lookup.java b/source/java/org/alfresco/repo/avm/Lookup.java index 006d082823..165833a655 100644 --- a/source/java/org/alfresco/repo/avm/Lookup.java +++ b/source/java/org/alfresco/repo/avm/Lookup.java @@ -30,7 +30,6 @@ public class Lookup /** * The Repository. */ - @SuppressWarnings("unused") private Repository fRepository; /** @@ -287,4 +286,13 @@ public class Lookup { return fTopLayer; } + + /** + * Get the repository that this path is in. + * @return The repository. + */ + public Repository getRepository() + { + return fRepository; + } } diff --git a/source/java/org/alfresco/repo/avm/PlainFileNode.java b/source/java/org/alfresco/repo/avm/PlainFileNode.java index 9158baf3f2..36f3db27dd 100644 --- a/source/java/org/alfresco/repo/avm/PlainFileNode.java +++ b/source/java/org/alfresco/repo/avm/PlainFileNode.java @@ -145,7 +145,7 @@ public class PlainFileNode extends FileNode */ public FileContent getContentForRead(int version) { - return FileContentFactory.CreateFileContentFromBean(fData.getContent()); + return new FileContent(fData.getContent()); } /** @@ -159,6 +159,6 @@ public class PlainFileNode extends FileNode fData.setContent(new ContentBeanImpl(repo.getSuperRepository().issueContentID())); // Need to copy the underlying file data. } - return FileContentFactory.CreateFileContentFromBean(fData.getContent()); + return new FileContent(fData.getContent()); } } diff --git a/source/java/org/alfresco/repo/avm/SuperRepository.java b/source/java/org/alfresco/repo/avm/SuperRepository.java index 82c225dfa0..2f48b8bac0 100644 --- a/source/java/org/alfresco/repo/avm/SuperRepository.java +++ b/source/java/org/alfresco/repo/avm/SuperRepository.java @@ -237,4 +237,10 @@ public interface SuperRepository * @return The Lookup. */ public Lookup lookupDirectory(int version, String path); + + /** + * Get the root directory in which file data is stored. + * @return The root directory of storage. + */ + public String getStorageRoot(); } diff --git a/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml b/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml new file mode 100644 index 0000000000..4bbc973aec --- /dev/null +++ b/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/java/org/alfresco/repo/avm/hibernate/AVMNode.hbm.xml b/source/java/org/alfresco/repo/avm/hibernate/AVMNode.hbm.xml deleted file mode 100644 index 187bbfa48b..0000000000 --- a/source/java/org/alfresco/repo/avm/hibernate/AVMNode.hbm.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/java/org/alfresco/repo/avm/hibernate/Content.hbm.xml b/source/java/org/alfresco/repo/avm/hibernate/Content.hbm.xml deleted file mode 100644 index 9e0b69f80b..0000000000 --- a/source/java/org/alfresco/repo/avm/hibernate/Content.hbm.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - diff --git a/source/java/org/alfresco/repo/avm/hibernate/Issuer.hbm.xml b/source/java/org/alfresco/repo/avm/hibernate/Issuer.hbm.xml deleted file mode 100644 index 4d7728a978..0000000000 --- a/source/java/org/alfresco/repo/avm/hibernate/Issuer.hbm.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - diff --git a/source/java/org/alfresco/repo/avm/hibernate/Repository.hbm.xml b/source/java/org/alfresco/repo/avm/hibernate/Repository.hbm.xml deleted file mode 100644 index f7477d2fda..0000000000 --- a/source/java/org/alfresco/repo/avm/hibernate/Repository.hbm.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/source/java/org/alfresco/repo/avm/hibernate/TestPopulate.java b/source/java/org/alfresco/repo/avm/hibernate/TestPopulate.java index 1f2d2189e8..f17eb08d80 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/TestPopulate.java +++ b/source/java/org/alfresco/repo/avm/hibernate/TestPopulate.java @@ -201,6 +201,7 @@ public class TestPopulate extends TestCase { assertEquals(AVMNodeType.PLAIN_FILE, entry.getEntryType()); } + assertEquals("britt", root.getBasicAttributes().getCreator()); } }); assertTrue(result); diff --git a/source/java/org/alfresco/repo/avm/impl/AVMServiceImpl.java b/source/java/org/alfresco/repo/avm/impl/AVMServiceImpl.java index 3af00463b8..44fd2a5c3a 100644 --- a/source/java/org/alfresco/repo/avm/impl/AVMServiceImpl.java +++ b/source/java/org/alfresco/repo/avm/impl/AVMServiceImpl.java @@ -54,6 +54,11 @@ public class AVMServiceImpl implements AVMService */ private ThreadLocal fSuperRepository; + /** + * The storage directory. + */ + private String fStorage; + /** * Basic constructor for the service. */ @@ -63,6 +68,15 @@ public class AVMServiceImpl implements AVMService fTransaction = new HibernateTxn(fSessionFactory); } + /** + * Set the location of file storage. + * @param storage + */ + public void setStorage(String storage) + { + fStorage = storage; + } + /* (non-Javadoc) * @see org.alfresco.repo.avm.AVMService#getFileInputStream(int, java.lang.String) */ @@ -74,7 +88,7 @@ public class AVMServiceImpl implements AVMService public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); in = fSuperRepository.get().getInputStream(version, path); } }; @@ -94,7 +108,7 @@ public class AVMServiceImpl implements AVMService public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); out = fSuperRepository.get().getOutputStream(path); } }; @@ -114,7 +128,7 @@ public class AVMServiceImpl implements AVMService public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); listing = fSuperRepository.get().getListing(version, path); } } @@ -132,7 +146,7 @@ public class AVMServiceImpl implements AVMService { public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); fSuperRepository.get().createFile(path, name); } } @@ -149,7 +163,7 @@ public class AVMServiceImpl implements AVMService { public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); fSuperRepository.get().createDirectory(path, name); } } @@ -166,7 +180,7 @@ public class AVMServiceImpl implements AVMService { public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); fSuperRepository.get().createLayeredFile(srcPath, parent, name); } } @@ -183,7 +197,7 @@ public class AVMServiceImpl implements AVMService { public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); fSuperRepository.get().createLayeredDirectory(srcPath, parent, name); } } @@ -200,7 +214,7 @@ public class AVMServiceImpl implements AVMService { public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); fSuperRepository.get().createRepository(name); } } @@ -218,7 +232,7 @@ public class AVMServiceImpl implements AVMService { public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); fSuperRepository.get().createBranch(version, srcPath, dstPath, name); } } @@ -235,7 +249,7 @@ public class AVMServiceImpl implements AVMService { public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); fSuperRepository.get().remove(parent, name); } } @@ -253,7 +267,7 @@ public class AVMServiceImpl implements AVMService { public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); fSuperRepository.get().rename(srcParent, srcName, dstParent, dstName); } } @@ -271,7 +285,7 @@ public class AVMServiceImpl implements AVMService { public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); fSuperRepository.get().slide(srcParent, srcName, dstParent, dstName); } } @@ -290,7 +304,7 @@ public class AVMServiceImpl implements AVMService public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); latestVersionID = fSuperRepository.get().getLatestVersionID(repName); } } @@ -308,7 +322,7 @@ public class AVMServiceImpl implements AVMService { public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); fSuperRepository.get().createSnapshot(repositories); } } @@ -327,7 +341,7 @@ public class AVMServiceImpl implements AVMService public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); lookup = fSuperRepository.get().lookup(version, path); } } @@ -345,7 +359,7 @@ public class AVMServiceImpl implements AVMService { public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); fSuperRepository.get().destroyRepository(name); } } @@ -362,7 +376,7 @@ public class AVMServiceImpl implements AVMService { public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); fSuperRepository.get().purgeVersion(name, version); } } @@ -381,7 +395,7 @@ public class AVMServiceImpl implements AVMService public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); indirectionPath = fSuperRepository.get().getIndirectionPath(version, path); } } @@ -401,7 +415,7 @@ public class AVMServiceImpl implements AVMService public void perform(Session session) { - fSuperRepository.set(new SuperRepositoryImpl(session)); + fSuperRepository.set(new SuperRepositoryImpl(session, fStorage)); versions = fSuperRepository.get().getRepositoryVersions(name); } } diff --git a/source/java/org/alfresco/repo/avm/impl/SuperRepositoryImpl.java b/source/java/org/alfresco/repo/avm/impl/SuperRepositoryImpl.java index 0bbc68c490..254228575d 100644 --- a/source/java/org/alfresco/repo/avm/impl/SuperRepositoryImpl.java +++ b/source/java/org/alfresco/repo/avm/impl/SuperRepositoryImpl.java @@ -70,14 +70,21 @@ public class SuperRepositoryImpl implements SuperRepository * The layer id issuer. */ private Issuer fLayerIssuer; + + /** + * The file storage directory. + */ + private String fStorage; /** * Make a new one, initialized with the session. * @param session The session for this operation. + * @param storage Where file data gets stored. */ - public SuperRepositoryImpl(Session session) + public SuperRepositoryImpl(Session session, String storage) { fSession = session; + fStorage = storage; fNodeIssuer = (Issuer)fSession.get(Issuer.class, "node"); fContentIssuer = (Issuer)fSession.get(Issuer.class, "content"); fBranchIssuer = (Issuer)fSession.get(Issuer.class, "branch"); @@ -506,4 +513,12 @@ public class SuperRepositoryImpl implements SuperRepository } return pathParts; } + + /* (non-Javadoc) + * @see org.alfresco.repo.avm.SuperRepository#getStorageRoot() + */ + public String getStorageRoot() + { + return fStorage; + } }