<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 
 <beans> 
    
     <bean id="cacheConfig" class="org.wamblee.io.ClassPathResource">
         <constructor-arg><value>ehcache.xml</value></constructor-arg>
     </bean>
     
     <bean id="userCache" class="org.wamblee.cache.EhCache">
         <constructor-arg><ref local="cacheConfig"/></constructor-arg>
         <constructor-arg><value>users</value></constructor-arg>
     </bean> 
     
    
    <bean id="passwordValidator" 
         class="org.wamblee.usermgt.RegexpNameValidator">
             <constructor-arg><value>.{5,}</value></constructor-arg>
             <constructor-arg><value>INVALID_PASSWORD</value></constructor-arg>
             <constructor-arg><value>Password must have at least 5 characters</value></constructor-arg>
    </bean>
    
     <bean id="passwordDigester"
         class="org.wamblee.security.encryption.Md5HexMessageDigester">
     </bean>
    
    <bean id="org.wamblee.usermgt.UserSet"
        class="org.wamblee.usermgt.hibernate.HibernateUserSet">
        <constructor-arg><ref local="userCache"/></constructor-arg>
        <constructor-arg><ref local="passwordValidator"/></constructor-arg>
        <constructor-arg><ref local="passwordDigester"/></constructor-arg>
        
        <property name="sessionFactory"><ref bean="sessionFactory"/></property>
        
    </bean>
    
    <bean id="org.wamblee.usermgt.GroupSet"
        class="org.wamblee.usermgt.hibernate.HibernateGroupSet">
        
        <property name="sessionFactory"><ref bean="sessionFactory"/></property>
    </bean> 
    
    <bean id="org.wamblee.usermgt.UserAdministration-target"
        class="org.wamblee.usermgt.UserAdministrationImpl">
        
        <constructor-arg>
           <ref local="org.wamblee.usermgt.UserSet"/>
        </constructor-arg>
        
        <constructor-arg>
            <ref local="org.wamblee.usermgt.GroupSet"/>
        </constructor-arg>
        
        <constructor-arg>
            <bean class="org.wamblee.usermgt.RegexpNameValidator">
                <constructor-arg><value>[a-zA-Z]+[a-zA-Z0-9]*</value></constructor-arg>
                <constructor-arg><value>INVALID_USERNAME</value></constructor-arg>
                <constructor-arg><value></value></constructor-arg>
            </bean>
        </constructor-arg>
        
        <constructor-arg>
            <bean class="org.wamblee.usermgt.RegexpNameValidator">
                <constructor-arg><value>[a-zA-Z]+[a-zA-Z0-9]*</value></constructor-arg>
                <constructor-arg><value>INVALID_GROUPNAME</value></constructor-arg>
                <constructor-arg><value></value></constructor-arg>
            </bean>
        </constructor-arg>
      
    </bean>
    
    <bean id="usermanagement-lock" class="org.wamblee.concurrency.JvmLock"/>
    
     <bean id="usermanagement-lock-advice" class="org.wamblee.concurrency.LockAdvice">
         <constructor-arg><ref bean="usermanagement-lock"/></constructor-arg>
     </bean>
     
     <bean id="org.wamblee.usermgt.UserAdministration" 
         class="org.springframework.aop.framework.ProxyFactoryBean">
         <property name="proxyInterfaces"><value>org.wamblee.usermgt.UserAdministration</value></property>
         <property name="interceptorNames"><value>usermanagement-lock-advice</value></property>
         <property name="target"><ref bean="org.wamblee.usermgt.UserAdministration-target"/></property>
     </bean>
     
     <bean id="usermgtInitializer"
         class="org.wamblee.usermgt.UserAdminInitializer">
         <constructor-arg><ref local="org.wamblee.usermgt.UserAdministration"/></constructor-arg>
         <!-- users -->
         <constructor-arg>
             <list>
                 <value>erik</value>
                 <value>admin</value>
             </list>
         </constructor-arg>
         <!-- groups -->
         <constructor-arg>
             <list>
                 <value>users</value>
                 <value>${org.wamblee.photos.admingroup}</value>
             </list>
         </constructor-arg>
         <!-- passwords -->
         <constructor-arg>
             <list>
                 <value>abc123</value>
                 <value>abc123</value>
             </list>
         </constructor-arg>
     </bean>
     
     <bean id="org.wamblee.usermgt.UserAccessor"
         class="org.wamblee.usermgt.JaasUserAccessor">
         <constructor-arg><ref local="org.wamblee.usermgt.UserAdministration"/></constructor-arg>
         <constructor-arg><value>${org.wamblee.photos.security.userprincipal}</value></constructor-arg>
     </bean>
 </beans>