/*
 * Copyright 2004-2005 The Apache Software Foundation or its licensors,
 *                     as applicable.
 *
 * 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.apache.jackrabbit.decorator;

import javax.jcr.Credentials;
import javax.jcr.LoginException;
import javax.jcr.NoSuchWorkspaceException;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;

/**
 * Simple {@link Repository Repository} decorator. This class 
 */
public class RepositoryDecorator implements Repository {

    private DecoratorFactory factory;
    
    private Repository repository;
    
    public RepositoryDecorator(
            DecoratorFactory factory, Repository repository) {
        this.factory = factory;
        this.repository = repository;
    }
    
    /**
     * Forwards the method call to the underlying repository.
     */
    public String[] getDescriptorKeys() {
        return repository.getDescriptorKeys();
    }

    /**
     * Forwards the method call to the underlying repository.
     */
    public String getDescriptor(String key) {
        return repository.getDescriptor(key);
    }

    /**
     * Forwards the method call to the underlying repository. The returned
     * session is wrapped into a session decorator using the decorator factory.
     * 
     * @return decorated session
     */
    public Session login(Credentials credentials, String workspaceName) throws
            LoginException, NoSuchWorkspaceException, RepositoryException {
        Session session = repository.login(credentials, workspaceName);
        return factory.getSessionDecorator(this, session); 
    }

    /**
     * Forwards the method call to the underlying repository. The returned
     * session is wrapped into a session decorator using the decorator factory.
     * 
     * @return decorated session
     */
    public Session login(Credentials credentials) throws LoginException,
            NoSuchWorkspaceException, RepositoryException {
        Session session = repository.login(credentials);
        return factory.getSessionDecorator(this, session); 
    }

    /**
     * Forwards the method call to the underlying repository. The returned
     * session is wrapped into a session decorator using the decorator factory.
     * 
     * @return decorated session
     */
    public Session login(String workspaceName) throws LoginException,
            NoSuchWorkspaceException, RepositoryException {
        Session session = repository.login(workspaceName);
        return factory.getSessionDecorator(this, session); 
    }

    /**
     * Forwards the method call to the underlying repository. The returned
     * session is wrapped into a session decorator using the decorator factory.
     * 
     * @return decorated session
     */
    public Session login() throws LoginException, NoSuchWorkspaceException,
            RepositoryException {
        Session session = repository.login();
        return factory.getSessionDecorator(this, session); 
    }

}

@@ -968,20 +968,8 @@
 tor.
- This class 
 %0A */
@@ -2162,154 +2162,51 @@
   * 
-Forwards the method call to the underlying repository. The returned%0A     * session is wrapped into a session decorator using the decorator factory
+Calls %3Ccode%3Elogin(credentials, null)%3C/code%3E
 .%0A  
@@ -2236,32 +2236,72 @@
 corated session%0A
+     * @see #login(Credentials, String)%0A
      */%0A    publ
@@ -2437,116 +2437,40 @@
     
-Session session = repository.login(credentials);%0A        return factory.getSessionDecorator(this, session
+return login(credentials, null
 );
- 
 %0A   
@@ -2492,154 +2492,53 @@
   * 
-Forwards the method call to the underlying repository. The returned%0A     * session is wrapped into a session decorator using the decorator factory
+Calls %3Ccode%3Elogin(null, workspaceName)%3C/code%3E
 .%0A  
@@ -2568,32 +2568,72 @@
 corated session%0A
+     * @see #login(Credentials, String)%0A
      */%0A    publ
@@ -2766,287 +2766,101 @@
     
-Session session = repository.login(workspaceName);%0A        return factory.getSessionDecorator(this, session); %0A    %7D%0A%0A    /**%0A     * Forwards the method call to the underlying repository. The returned%0A     * session is wrapped into a session decorator using the decorator factory
+return login(null, workspaceName);%0A    %7D%0A%0A    /**%0A     * Calls %3Ccode%3Elogin(null, null)%3C/code%3E
 .%0A  
@@ -2890,32 +2890,72 @@
 corated session%0A
+     * @see #login(Credentials, String)%0A
      */%0A    publ
@@ -3068,105 +3068,33 @@
     
-Session session = repository.login();%0A        return factory.getSessionDecorator(this, session
+return login(null, null
 );
- 
 %0A   

Decorate all the login methods using the canonical login(Credentials, String) method.