Refactor JCR exceptions.
[lgpl/argeo-commons.git] / org.argeo.jcr / src / org / argeo / jcr / JcrRepositoryWrapper.java
index 1e08c18ac7aeb43a4c989bb035dc61eb1657c926..3228eee7434c007a414662579477283f8ef96299 100644 (file)
@@ -1,18 +1,3 @@
-/*
- * Copyright (C) 2007-2012 Argeo GmbH
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *         http://www.apache.org/licenses/LICENSE-2.0
- *
- * 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.argeo.jcr;
 
 import java.io.InputStream;
@@ -99,14 +84,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 +108,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);
+                       throw new IllegalArgumentException("No workspace specified.");
+               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) {