<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<!--
  - Application context definition for PortletRegistry using Apache OJB.
	-->
<beans>
  
   <!-- ========================= BUSINESS OBJECT DEFINITIONS ========================= -->

  
  <!-- SSO Implementation -->
   <bean id="PersistenceBrokerSSOProvider" 
  	   class="org.apache.jetspeed.sso.impl.PersistenceBrokerSSOProvider"
  	   init-method="init"
   >  	   
  	   <constructor-arg index="0"><value>META-INF/sso_repository.xml</value></constructor-arg>  	    	     	   
  </bean>
  
  
  <bean id="org.apache.jetspeed.sso.SSOProvider" parent="baseTransactionProxy" 
  	name="ssoProvider"
  	>
		<property name="proxyInterfaces">
			<value>org.apache.jetspeed.sso.SSOProvider</value>
		</property>

		<property name="target"> 
			<ref bean="PersistenceBrokerSSOProvider"/>
		</property>
		
  </bean>
  
  <!-- ************** Security SPI Handlers ************** -->
  <!-- Security SPI: CommonQueries -->
  <bean id="org.apache.jetspeed.security.spi.impl.SecurityAccessImpl" 
  	   class="org.apache.jetspeed.security.spi.impl.SecurityAccessImpl"
  	   init-method="init"
  >  	   
  	   <constructor-arg ><value>META-INF/security_repository.xml</value></constructor-arg>  	   
  </bean>
  
  <bean id="org.apache.jetspeed.security.spi.SecurityAccess" parent="baseTransactionProxy" 
		name="SecurityCommonQueries" >
		<property name="proxyInterfaces">
			<value>org.apache.jetspeed.security.spi.SecurityAccess</value>
		</property>
		<property name="target">
			<ref bean="org.apache.jetspeed.security.spi.impl.SecurityAccessImpl"/>
		</property>
		<property name="transactionAttributes">
			<props>				
				<prop key="remove*">PROPAGATION_REQUIRED</prop>
				<prop key="set*">PROPAGATION_REQUIRED</prop>
				<prop key="*">PROPAGATION_SUPPORTS</prop>
			</props>
		</property>
   </bean>
  
  <bean id="org.apache.jetspeed.security.spi.PasswordCredentialProvider" 
       class="org.apache.jetspeed.security.spi.impl.DefaultPasswordCredentialProvider"/>

  <bean id="org.apache.jetspeed.security.spi.InternalPasswordCredentialInterceptor" 
       class="org.apache.jetspeed.security.spi.impl.InternalPasswordCredentialStateHandlingInterceptor">
       <!-- maxNumberOfAuthenticationFailures -->
       <constructor-arg index="0"><value>3</value></constructor-arg>  
       <!-- maxLifeSpanInDays -->     
       <constructor-arg index="1"><value>7</value></constructor-arg>       
  </bean>

  <!-- Security SPI: CredentialHandler -->
  <bean id="org.apache.jetspeed.security.spi.CredentialHandler" 
  	   class="org.apache.jetspeed.security.spi.impl.DefaultCredentialHandler"
  >  	   
  	   <constructor-arg index="0"><ref bean="org.apache.jetspeed.security.spi.SecurityAccess"/></constructor-arg>  	   
       <constructor-arg index="1"><ref bean="org.apache.jetspeed.security.spi.PasswordCredentialProvider"/></constructor-arg>       
       <constructor-arg index="2"><ref bean="org.apache.jetspeed.security.spi.InternalPasswordCredentialInterceptor"/></constructor-arg>       
  </bean>
  
  <!-- Security SPI: UserSecurityHandler -->
  <!-- The DefaultUSerSecurityHandler uses the raw SecurityAccessImpl so that it
  	   may demarcate its own transactions -->
  <bean id="org.apache.jetspeed.security.spi.UserSecurityHandlerImpl" 
  	   class="org.apache.jetspeed.security.spi.impl.DefaultUserSecurityHandler"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.spi.SecurityAccess"/></constructor-arg>  	   
  </bean>
  
  <bean id="org.apache.jetspeed.security.spi.UserSecurityHandler" parent="baseTransactionProxy" 
		name="userSecurityHandler" >
		<property name="proxyInterfaces">
			<value>org.apache.jetspeed.security.spi.UserSecurityHandler</value>
		</property>
		<property name="target">
			<ref bean="org.apache.jetspeed.security.spi.UserSecurityHandlerImpl"/>
		</property>
		<property name="transactionAttributes">
			<props>				
				<prop key="*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
   </bean>
  
  <!-- Security SPI: RoleSecurityHandler -->
  <bean id="org.apache.jetspeed.security.spi.RoleSecurityHandler" 
  	   class="org.apache.jetspeed.security.spi.impl.DefaultRoleSecurityHandler"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.spi.SecurityAccess"/></constructor-arg>
  </bean>
  
  <!-- Security SPI: GroupSecurityHandler -->
  <bean id="org.apache.jetspeed.security.spi.GroupSecurityHandler" 
  	   class="org.apache.jetspeed.security.spi.impl.DefaultGroupSecurityHandler"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.spi.SecurityAccess"/></constructor-arg>
  </bean>
  
  <!-- Security SPI: SecurityMappingHandler -->
  <bean id="org.apache.jetspeed.security.spi.SecurityMappingHandler" 
  	   class="org.apache.jetspeed.security.spi.impl.DefaultSecurityMappingHandler"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.spi.SecurityAccess"/></constructor-arg>
  	   <!-- Default role hierarchy strategy is by generalization.  Add contructor-arg to change the strategy. -->
  	   <!-- Default group hierarchy strategy is by generalization.  Add contructor-arg to change the strategy. -->
  </bean>
  
  <!-- ************** Security Providers ************** -->
  <!-- Security: Default Authentication Provider -->
  <bean id="org.apache.jetspeed.security.AuthenticationProvider" 
  	   class="org.apache.jetspeed.security.impl.AuthenticationProviderImpl"
  >  	   
  	   <constructor-arg index="0"><value>DefaultAuthenticator</value></constructor-arg>
  	   <constructor-arg index="1"><value>The default authenticator</value></constructor-arg>
  	   <constructor-arg index="2"><value>login.conf</value></constructor-arg>
  	   <constructor-arg index="3"><ref bean="org.apache.jetspeed.security.spi.CredentialHandler"/></constructor-arg>
  	   <constructor-arg index="4"><ref bean="org.apache.jetspeed.security.spi.UserSecurityHandler"/></constructor-arg>
  </bean>
  
  <!-- Security: Authentication Provider Proxy -->
  <bean id="org.apache.jetspeed.security.AuthenticationProviderProxy" 
  	   class="org.apache.jetspeed.security.impl.AuthenticationProviderProxyImpl"
  >  	   
  	   <constructor-arg >
  	   		<list>
  	   			<ref bean="org.apache.jetspeed.security.AuthenticationProvider"/>
  	   		</list>
  	   </constructor-arg>
  	   <constructor-arg ><value>DefaultAuthenticator</value></constructor-arg>
  </bean>
  
  <!-- Security: Security Provider -->
  <bean id="org.apache.jetspeed.security.SecurityProvider" 
  	   class="org.apache.jetspeed.security.impl.SecurityProviderImpl"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.AuthenticationProviderProxy"/></constructor-arg>
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.spi.RoleSecurityHandler"/></constructor-arg>
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.spi.GroupSecurityHandler"/></constructor-arg>
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.spi.SecurityMappingHandler"/></constructor-arg>
  </bean>
  
  <!-- Security: User Manager -->
  <bean id="org.apache.jetspeed.security.UserManager" 
  	   class="org.apache.jetspeed.security.impl.UserManagerImpl"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.SecurityProvider"/></constructor-arg>
  </bean>
  
   <!-- Security: Group Manager -->
  <bean id="org.apache.jetspeed.security.GroupManager" 
  	   class="org.apache.jetspeed.security.impl.GroupManagerImpl"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.SecurityProvider"/></constructor-arg>   
  </bean>
  
  <!-- Security: Role Manager -->
  <bean id="org.apache.jetspeed.security.RoleManager" 
  	   class="org.apache.jetspeed.security.impl.RoleManagerImpl"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.SecurityProvider"/></constructor-arg>   
  </bean>
  
  <!-- ************** Login Module ************** -->
  <!-- Security: Login Module Proxy -->
  <bean id="org.apache.jetspeed.security.LoginModuleProxy" 
  	   class="org.apache.jetspeed.security.impl.LoginModuleProxyImpl"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.UserManager"/></constructor-arg>  	   
  </bean>

  
  <!-- ************** Authorization ************** -->
  <!-- Security: Permission Manager -->
  <bean id="org.apache.jetspeed.security.impl.PermissionManagerImpl" 
  	   class="org.apache.jetspeed.security.impl.PermissionManagerImpl"  />
  
  <bean id="org.apache.jetspeed.security.PermissionManager" parent="baseTransactionProxy" 
		name="permissionManager" >
		<property name="proxyInterfaces">
			<value>org.apache.jetspeed.security.PermissionManager</value>
		</property>
		<property name="target">
			<ref bean="org.apache.jetspeed.security.impl.PermissionManagerImpl"/>
		</property>
		<property name="transactionAttributes">
			<props>				
				<prop key="remove*">PROPAGATION_REQUIRED</prop>
				<prop key="grant*">PROPAGATION_REQUIRED</prop>
				<prop key="revoke*">PROPAGATION_REQUIRED</prop>
				<prop key="grant*">PROPAGATION_REQUIRED</prop>
				<prop key="add*">PROPAGATION_REQUIRED</prop>
				<prop key="*">PROPAGATION_SUPPORTS</prop>
			</props>
		</property>
   </bean>
  
  <!-- Security: RDBMS Policy implementation for JAAS -->
  <bean id="org.apache.jetspeed.security.impl.RdbmsPolicy" 
  	   class="org.apache.jetspeed.security.impl.RdbmsPolicy"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.PermissionManager"/></constructor-arg>  	   
  </bean>
  
  <!-- Security: Authorization Provider -->
  <bean id="org.apache.jetspeed.security.AuthorizationProvider" 
  	   class="org.apache.jetspeed.security.impl.AuthorizationProviderImpl"
  >  	   
  	   <constructor-arg ><ref bean="org.apache.jetspeed.security.impl.RdbmsPolicy"/></constructor-arg>   
  </bean>
</beans>