<?xml version="1.0"?>
<!--
  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.
-->

<xmap xpath="/sitemap/components/matchers" unless="/sitemap/components/matchers/matcher[@name = 'usecase']"
  xmlns:map="http://apache.org/cocoon/sitemap/1.0">
     <map:matcher name="agent-match" logger="sitemap.matcher.referer-match" src="org.apache.cocoon.matching.WildcardHeaderMatcher">
        <header-name>User-Agent</header-name>
    </map:matcher>
    <map:matcher name="usecase" logger="sitemap.matcher.usecase" src="org.apache.cocoon.matching.WildcardRequestParameterMatcher">
      <parameter-name>lenya.usecase</parameter-name>
    </map:matcher>
    <map:matcher name="step" logger="sitemap.matcher.step" src="org.apache.cocoon.matching.WildcardRequestParameterMatcher">
      <parameter-name>lenya.step</parameter-name>
    </map:matcher>
    <map:matcher name="registered-usecase" logger="sitemap.matcher.registered-usecase" src="org.apache.lenya.cms.cocoon.matching.UsecaseRegistrationMatcher"/>
</xmap>      
