001package org.apache.archiva.redback.users;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 * http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import java.util.ArrayList;
023import java.util.List;
024
025import org.slf4j.Logger;
026import org.slf4j.LoggerFactory;
027
028import javax.annotation.PostConstruct;
029
030/**
031 * AbstractUserManager
032 *
033 * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
034 */
035public abstract class AbstractUserManager
036    implements UserManager
037{
038    protected Logger log = LoggerFactory.getLogger( getClass() );
039
040    private List<UserManagerListener> listeners = new ArrayList<UserManagerListener>();
041
042    public void addUserManagerListener( UserManagerListener listener )
043    {
044        if ( !listeners.contains( listener ) )
045        {
046            listeners.add( listener );
047        }
048    }
049
050    public void removeUserManagerListener( UserManagerListener listener )
051    {
052        listeners.remove( listener );
053    }
054
055    protected void fireUserManagerInit( boolean freshDatabase )
056    {
057        for ( UserManagerListener listener : listeners )
058        {
059            try
060            {
061                listener.userManagerInit( freshDatabase );
062            }
063            catch ( Exception e )
064            {
065                // Ignore
066            }
067        }
068    }
069
070    protected void fireUserManagerUserAdded( User addedUser )
071    {
072        for ( UserManagerListener listener : listeners )
073        {
074            try
075            {
076                listener.userManagerUserAdded( addedUser );
077            }
078            catch ( Exception e )
079            {
080                // Ignore
081            }
082        }
083    }
084
085    protected void fireUserManagerUserRemoved( User removedUser )
086    {
087        for ( UserManagerListener listener : listeners )
088        {
089            try
090            {
091                listener.userManagerUserRemoved( removedUser );
092            }
093            catch ( Exception e )
094            {
095                // Ignore
096            }
097        }
098    }
099
100    protected void fireUserManagerUserUpdated( User updatedUser )
101    {
102        for ( UserManagerListener listener : listeners )
103        {
104            try
105            {
106                listener.userManagerUserUpdated( updatedUser );
107            }
108            catch ( Exception e )
109            {
110                // Ignore
111            }
112        }
113    }
114
115    public User getGuestUser()
116        throws UserNotFoundException, UserManagerException
117    {
118        return findUser( GUEST_USERNAME );
119    }
120
121    public User createGuestUser()
122        throws UserManagerException
123    {
124        try
125        {
126            User u = getGuestUser();
127            if ( u != null )
128            {
129                return u;
130            }
131        }
132        catch ( UserNotFoundException e )
133        {
134            //Nothing to do
135        }
136
137        User user = createUser( GUEST_USERNAME, "Guest", "" );
138        user.setPermanent( true );
139        user.setPasswordChangeRequired( false );
140
141        user = addUser( user );
142        return user;
143    }
144
145    public void initialize()
146    {
147        // no op prevent sub classes to need implement this method
148        // sub classes can implement their own
149    }
150
151    public boolean isFinalImplementation()
152    {
153        return false;
154    }
155
156    protected List<UserManagerListener> getListeners()
157    {
158        return listeners;
159    }
160}