From ff4fe08d04426a95bb142e81d05b26c1b07832e8 Mon Sep 17 00:00:00 2001 From: Britt Park Date: Thu, 22 Jun 2006 21:19:07 +0000 Subject: [PATCH] Added getRepository() and getRepositories() to AVMService, removed getRepositoryNames() from same. These new methods return a RepositoryDescriptor and a List of RepositoryDescriptors. Note, Hibernate mapping has changed. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3207 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../repo/avm/AVMInteractiveConsole.java | 6 +- .../org/alfresco/repo/avm/AVMService.java | 17 ++-- .../org/alfresco/repo/avm/AVMServiceImpl.java | 34 +++++++- .../org/alfresco/repo/avm/AVMServiceTest.java | 38 ++++++++- .../org/alfresco/repo/avm/Repository.java | 30 +++++++ .../repo/avm/RepositoryDescriptor.java | 80 +++++++++++++++++++ .../org/alfresco/repo/avm/RepositoryImpl.java | 57 +++++++++++++ .../repo/avm/SimultaneousLoadTest.java | 19 ++++- .../alfresco/repo/avm/SuperRepository.java | 50 ++++++++++-- .../alfresco/repo/avm/hibernate/AVM.hbm.xml | 2 + .../repo/avm/hibernate/HibernateTxn.java | 4 +- 11 files changed, 310 insertions(+), 27 deletions(-) create mode 100644 source/java/org/alfresco/repo/avm/RepositoryDescriptor.java diff --git a/source/java/org/alfresco/repo/avm/AVMInteractiveConsole.java b/source/java/org/alfresco/repo/avm/AVMInteractiveConsole.java index 9243360721..54226fe2de 100644 --- a/source/java/org/alfresco/repo/avm/AVMInteractiveConsole.java +++ b/source/java/org/alfresco/repo/avm/AVMInteractiveConsole.java @@ -146,10 +146,10 @@ public class AVMInteractiveConsole } else if (command[0].equals("lsrep")) { - List repos = fService.getRepositoryNames(); - for (String name : repos) + List repos = fService.getRepositories(); + for (RepositoryDescriptor repo : repos) { - System.out.println(name); + System.out.println(repo); } } else if (command[0].equals("lsver")) diff --git a/source/java/org/alfresco/repo/avm/AVMService.java b/source/java/org/alfresco/repo/avm/AVMService.java index 1b6af40695..3876b5912f 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.List; import java.util.Map; /** - * This is the service interface for the [Alfresco|Addled|Advanced|Apotheosed] Versioning - * Model. It specifies methods that are close in functionality to the underlying + * This is the service interface for the [Alfresco|Addled|Advanced|Aleatoric|Apotheosed|Awful] + * Versioning Model. It specifies methods that are close in functionality to the underlying * implementation, and is intended as both a first class Alfresco service and an * aid in creating new implementations of existing services. * Paths are of the form repositoryname:/foo/bar/baz @@ -199,10 +199,17 @@ public interface AVMService public List getRepositoryVersions(String name, Date from, Date to); /** - * Get the names of all repositories. - * @return A List of all names. + * Get the descriptors of all repositories. + * @return A List of all repositories. */ - public List getRepositoryNames(); + public List getRepositories(); + + /** + * Get a descriptor for a repository. + * @param name The repository's name. + * @return A Descriptor. + */ + public RepositoryDescriptor getRepository(String name); /** * Get the specified root of a repository. diff --git a/source/java/org/alfresco/repo/avm/AVMServiceImpl.java b/source/java/org/alfresco/repo/avm/AVMServiceImpl.java index 502b2a04a1..9043b85f65 100644 --- a/source/java/org/alfresco/repo/avm/AVMServiceImpl.java +++ b/source/java/org/alfresco/repo/avm/AVMServiceImpl.java @@ -764,21 +764,47 @@ public class AVMServiceImpl implements AVMService fTransaction.perform(doit, true); } - public List getRepositoryNames() + /** + * Get a list of all Repositories. + * @return The repositories. + */ + public List getRepositories() { class HTxnCallback implements HibernateTxnCallback { - public List names; + public List reps; public void perform(Session session) { fSuperRepository.setSession(session); - names = fSuperRepository.getRepositoryNames(); + reps = fSuperRepository.getRepositories(); } } HTxnCallback doit = new HTxnCallback(); fTransaction.perform(doit, false); - return doit.names; + return doit.reps; + } + + /** + * Get a reposotory. + * @param name The name of the repository to get. + * @return The repositories. + */ + public RepositoryDescriptor getRepository(final String name) + { + class HTxnCallback implements HibernateTxnCallback + { + public RepositoryDescriptor desc; + + public void perform(Session session) + { + fSuperRepository.setSession(session); + desc = fSuperRepository.getRepository(name); + } + } + HTxnCallback doit = new HTxnCallback(); + fTransaction.perform(doit, false); + return doit.desc; } /** diff --git a/source/java/org/alfresco/repo/avm/AVMServiceTest.java b/source/java/org/alfresco/repo/avm/AVMServiceTest.java index a2e4ba85cb..9c6b85a83f 100644 --- a/source/java/org/alfresco/repo/avm/AVMServiceTest.java +++ b/source/java/org/alfresco/repo/avm/AVMServiceTest.java @@ -856,10 +856,10 @@ public class AVMServiceTest extends AVMServiceTestBase { setupBasicTree(); fService.createRepository("second"); - List repoNames = fService.getRepositoryNames(); - assertEquals(2, repoNames.size()); - assertTrue(repoNames.contains("main")); - assertTrue(repoNames.contains("second")); + List repos = fService.getRepositories(); + assertEquals(2, repos.size()); + System.out.println(repos.get(0)); + System.out.println(repos.get(1)); fService.createBranch(-1, "main:/", "second:/", "main"); fService.createSnapshot("second"); System.out.println(recursiveList("second", -1, true)); @@ -1833,4 +1833,34 @@ public class AVMServiceTest extends AVMServiceTestBase fail(); } } + + /** + * Test repository functions. + */ + public void testRepsitory() + { + try + { + // First check that we get the right error when we try to create a + // repository that exists. + try + { + fService.createRepository("main"); + fail(); + } + catch (AVMExistsException ae) + { + // Do nothing. + } + // Now make sure getRepository() works. + RepositoryDescriptor desc = fService.getRepository("main"); + assertNotNull(desc); + System.out.println(desc); + } + catch (Exception e) + { + e.printStackTrace(System.err); + fail(); + } + } } diff --git a/source/java/org/alfresco/repo/avm/Repository.java b/source/java/org/alfresco/repo/avm/Repository.java index 649d1f8398..45abdf69cd 100644 --- a/source/java/org/alfresco/repo/avm/Repository.java +++ b/source/java/org/alfresco/repo/avm/Repository.java @@ -215,4 +215,34 @@ interface Repository * @param version */ public void purgeVersion(int version); + + /** + * Set the creator. + * @param creator + */ + public void setCreator(String creator); + + /** + * Get the creator. + * @return The creator. + */ + public String getCreator(); + + /** + * Set the create date. + * @param date + */ + public void setCreateDate(long date); + + /** + * Get the create date. + * @return The create date. + */ + public long getCreateDate(); + + /** + * Get the descriptor for this. + * @return The descriptor. + */ + public RepositoryDescriptor getDescriptor(); } \ No newline at end of file diff --git a/source/java/org/alfresco/repo/avm/RepositoryDescriptor.java b/source/java/org/alfresco/repo/avm/RepositoryDescriptor.java new file mode 100644 index 0000000000..e10e39baeb --- /dev/null +++ b/source/java/org/alfresco/repo/avm/RepositoryDescriptor.java @@ -0,0 +1,80 @@ +/* + * 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.Date; + +/** + * A value class for Data about a repository. + * @author britt + */ +public class RepositoryDescriptor +{ + /** + * The name. + */ + private String fName; + + /** + * The creator. + */ + private String fCreator; + + /** + * The create date. + */ + private long fCreateDate; + + public RepositoryDescriptor(String name, + String creator, + long createDate) + { + fName = name; + fCreator = creator; + fCreateDate = createDate; + } + + /** + * @return the fCreateDate + */ + public long getCreateDate() + { + return fCreateDate; + } + + /** + * @return the fCreator + */ + public String getCreator() + { + return fCreator; + } + + /** + * @return the fName + */ + public String getName() + { + return fName; + } + + public String toString() + { + return "[" + fName + ":" + fCreator + ":" + new Date(fCreateDate) + "]"; + } +} diff --git a/source/java/org/alfresco/repo/avm/RepositoryImpl.java b/source/java/org/alfresco/repo/avm/RepositoryImpl.java index 6b31b3f002..f7dade251f 100644 --- a/source/java/org/alfresco/repo/avm/RepositoryImpl.java +++ b/source/java/org/alfresco/repo/avm/RepositoryImpl.java @@ -64,6 +64,16 @@ class RepositoryImpl implements Repository, Serializable */ transient private SuperRepository fSuper; + /** + * The creator. + */ + private String fCreator; + + /** + * The create date. + */ + private long fCreateDate; + /** * Default constructor. */ @@ -84,6 +94,8 @@ class RepositoryImpl implements Repository, Serializable fName = name; fNextVersionID = 0; fRoot = null; + fCreator = "britt"; + fCreateDate = System.currentTimeMillis(); fSuper.getSession().save(this); // Make up the initial version record and save. long time = System.currentTimeMillis(); @@ -778,4 +790,49 @@ class RepositoryImpl implements Repository, Serializable fRoot = vRoot.getRoot(); } } + + /** + * Get the create date. + * @return The create date. + */ + public long getCreateDate() + { + return fCreateDate; + } + + /** + * Get the creator. + * @return The creator. + */ + public String getCreator() + { + return fCreator; + } + + /** + * Set the create date. + * @param date + */ + public void setCreateDate(long date) + { + fCreateDate = date; + } + + /** + * Set the creator. + * @param creator + */ + public void setCreator(String creator) + { + fCreator = creator; + } + + /** + * Get the descriptor for this. + * @return + */ + public RepositoryDescriptor getDescriptor() + { + return new RepositoryDescriptor(fName, fCreator, fCreateDate); + } } diff --git a/source/java/org/alfresco/repo/avm/SimultaneousLoadTest.java b/source/java/org/alfresco/repo/avm/SimultaneousLoadTest.java index 803b2ac699..a9557ef07b 100644 --- a/source/java/org/alfresco/repo/avm/SimultaneousLoadTest.java +++ b/source/java/org/alfresco/repo/avm/SimultaneousLoadTest.java @@ -32,7 +32,8 @@ public class SimultaneousLoadTest extends AVMServiceTestBase { try { - int n = 4; + int n = 2; + int m = 1; for (int i = 0; i < n; i++) { fService.createDirectory("main:/", "d" + i); @@ -41,7 +42,7 @@ public class SimultaneousLoadTest extends AVMServiceTestBase Thread [] threads = new Thread[n]; for (int i = 0; i < n; i++) { - Loader loader = new Loader("source", "main:/d" + i); + Loader loader = new Loader("source", "main:/d" + i, m); threads[i] = new Thread(loader); threads[i].start(); } @@ -74,21 +75,31 @@ public class SimultaneousLoadTest extends AVMServiceTestBase */ private String fDestination; + /** + * The number of copies of stuff to make serially. + */ + private int fCount; + /** * Set up. * @param source Source directory. * @param destination Destination path. */ - public Loader(String source, String destination) + public Loader(String source, String destination, int count) { fLoader = new BulkLoader(fService); fSource = source; fDestination = destination; + fCount = count; } public void run() { - fLoader.recursiveLoad(fSource, fDestination); + for (int i = 0; i < fCount; i++) + { + fService.createDirectory(fDestination, "" + i); + fLoader.recursiveLoad(fSource, fDestination + "/" + i); + } } } } diff --git a/source/java/org/alfresco/repo/avm/SuperRepository.java b/source/java/org/alfresco/repo/avm/SuperRepository.java index f774e7f1bc..750b138e5e 100644 --- a/source/java/org/alfresco/repo/avm/SuperRepository.java +++ b/source/java/org/alfresco/repo/avm/SuperRepository.java @@ -174,7 +174,15 @@ class SuperRepository */ public void createRepository(String name) { - // TODO need to check for repository existence first. + try + { + getRepositoryByName(name, false); + throw new AVMExistsException("Repository exists: " + name); + } + catch (AVMNotFoundException anf) + { + // Do nothing. + } // Newing up the object causes it to be written to the db. @SuppressWarnings("unused") Repository rep = new RepositoryImpl(this, name); @@ -564,12 +572,29 @@ class SuperRepository * @return A list of names. */ @SuppressWarnings("unchecked") - public List getRepositoryNames() + public List getRepositories() { - Query query = fSession.get().createQuery("select r.name from RepositoryImpl r"); - return (List)query.list(); + Query query = fSession.get().createQuery("from RepositoryImpl r"); + List l = (List)query.list(); + List result = new ArrayList(); + for (Repository rep : l) + { + result.add(rep.getDescriptor()); + } + return result; } + /** + * Get a descriptor for a repository. + * @param name The name to get. + * @return The descriptor. + */ + public RepositoryDescriptor getRepository(String name) + { + Repository rep = getRepositoryByName(name, false); + return rep.getDescriptor(); + } + /** * Get all version for a given repository. * @param name The name of the repository. @@ -668,9 +693,14 @@ class SuperRepository */ private Repository getRepositoryByName(String name, boolean write) { - return (Repository)fSession.get().get(RepositoryImpl.class, + Repository rep = (Repository)fSession.get().get(RepositoryImpl.class, name /* , write ? LockMode.UPGRADE : LockMode.READ */); + if (rep == null) + { + throw new AVMNotFoundException("Repository not found: " + name); + } + return rep; } /** @@ -832,6 +862,16 @@ class SuperRepository return history; } + /** + * Get the RepositoryDescriptor for a Repository. + * @param name The name of the Repository. + * @return The descriptor. + */ + public RepositoryDescriptor getRepositoryDescriptor(String name) + { + return getRepositoryByName(name, false).getDescriptor(); + } + /** * Get the single instance of SuperRepository. * @return 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 faafecf0da..3569e03d0a 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml +++ b/source/java/org/alfresco/repo/avm/hibernate/AVM.hbm.xml @@ -120,6 +120,8 @@ + +