<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You 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.
-->
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:p="http://www.springframework.org/schema/p"
  xmlns:configurator="http://cocoon.apache.org/schema/configurator"
  xmlns="http://www.springframework.org/schema/beans"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://cocoon.apache.org/schema/configurator http://cocoon.apache.org/schema/configurator/cocoon-configurator-1.0.1.xsd">
  
  <bean name="org.apache.lenya.cms.module.Module/usecase"
    class="org.apache.lenya.cms.module.ModuleImpl">
    <property name="baseUri" value="file://${lenya.home}/org.apache.lenya.core.usecase/target/classes/COB-INF"/>
  </bean>
  
  <bean name="org.apache.lenya.ac.Authorizer/usecase"
    class="org.apache.lenya.cms.ac.usecase.impl.UsecaseAuthorizerImpl">
    <property name="sourceResolver" ref="org.apache.excalibur.source.SourceResolver"/>
    <property name="cache" ref="org.apache.lenya.ac.cache.SourceCache"/>
  </bean>
  
  <bean name="org.apache.lenya.cms.usecase.UsecaseResolver"
    class="org.apache.lenya.cms.usecase.impl.UsecaseResolverImpl">
    <property name="repository" ref="org.apache.lenya.cms.publication.Repository"/>
    <property name="templateManager" ref="org.apache.lenya.cms.publication.templating.PublicationTemplateManager"/>
  </bean>
  
  <bean name="org.apache.lenya.cms.usecase.gui.GUIManager"
    class="org.apache.lenya.cms.usecase.gui.impl.GUIManagerImpl">
    <property name="repository" ref="org.apache.lenya.cms.publication.Repository"/>
    <property name="usecaseResolver" ref="org.apache.lenya.cms.usecase.UsecaseResolver"/>
  </bean>
  
  <!-- Transformers -->
  <bean name="org.apache.cocoon.transformation.Transformer/proxy-usecase"
    class="org.apache.lenya.cms.cocoon.transformation.ProxyTransformer"
    scope="prototype">
    <property name="repository" ref="org.apache.lenya.cms.publication.Repository"/>
    <property name="attributes">
      <bean class="org.apache.lenya.cms.linking.impl.LinkRewriteAttributesImpl">
        <property name="attributes">
          <list>
            <bean class="org.apache.lenya.cms.linking.impl.LinkRewriteAttributeImpl"
              p:namespace="http://apache.org/lenya/proxy/1.0" p:element="url" p:attribute="href"/>
          </list>
        </property>
      </bean>
    </property>
  </bean>
  
</beans>
