Work on backups and file metadata indexing.
[lgpl/argeo-commons.git] / org.argeo.jcr / src / org / argeo / jcr / JcrRepositoryWrapper.java
index 1e08c18ac7aeb43a4c989bb035dc61eb1657c926..1098c4dee5d6a8d781e9a50f6a0dc2db2d12f21c 100644 (file)
@@ -99,14 +99,14 @@ public abstract class JcrRepositoryWrapper implements Repository {
                        throws LoginException, NoSuchWorkspaceException, RepositoryException {
                Session session;
                try {
-                       session = getRepository().login(credentials, workspaceName);
+                       session = getRepository(workspaceName).login(credentials, workspaceName);
                } catch (NoSuchWorkspaceException e) {
                        if (autocreateWorkspaces && workspaceName != null)
                                session = createWorkspaceAndLogsIn(credentials, workspaceName);
                        else
                                throw e;
                }
-               processNewSession(session);
+               processNewSession(session, workspaceName);
                return session;
        }
 
@@ -123,32 +123,39 @@ public abstract class JcrRepositoryWrapper implements Repository {
        }
 
        /** Called after a session has been created, does nothing by default. */
-       protected void processNewSession(Session session) {
+       protected void processNewSession(Session session, String workspaceName) {
        }
 
-       /** Wraps access to the repository, making sure it is available. */
+       /**
+        * Wraps access to the repository, making sure it is available.
+        * 
+        * @deprecated Use {@link #getDefaultRepository()} instead.
+        */
+       @Deprecated
        protected synchronized Repository getRepository() {
-               // if (repository == null) {
-               // throw new ArgeoJcrException("No repository initialized."
-               // + " Was the init() method called?"
-               // + " The destroy() method should also"
-               // + " be called on shutdown.");
-               // }
+               return getDefaultRepository();
+       }
+
+       protected synchronized Repository getDefaultRepository() {
                return repository;
        }
 
+       protected synchronized Repository getRepository(String workspaceName) {
+               return getDefaultRepository();
+       }
+
        /**
-        * Logs in to the default workspace, creates the required workspace, logs
-        * out, logs in to the required workspace.
+        * Logs in to the default workspace, creates the required workspace, logs out,
+        * logs in to the required workspace.
         */
        protected Session createWorkspaceAndLogsIn(Credentials credentials, String workspaceName)
                        throws RepositoryException {
                if (workspaceName == null)
                        throw new ArgeoJcrException("No workspace specified.");
-               Session session = getRepository().login(credentials);
+               Session session = getRepository(workspaceName).login(credentials);
                session.getWorkspace().createWorkspace(workspaceName);
                session.logout();
-               return getRepository().login(credentials, workspaceName);
+               return getRepository(workspaceName).login(credentials, workspaceName);
        }
 
        public boolean isStandardDescriptor(String key) {