<?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.
  -->
<project default="scan" name="Ant task examples"> 
  <description> 
    A few examples of using the Ant task, for more examples see the
    AntUnit tests
  </description> 
 
 
  <target name="scan" depends="-taskdef"
    description="runs the task over RAT's source tree"> 
    <rat:report xmlns:rat="antlib:org.apache.rat.anttasks"> 
      <fileset dir="."> 
        <patternset id="exclusions"> 
          <exclude name="**/target/**"/>
          <exclude name="**/*.iml"/>
          <exclude name="**/*.log"/>
          <exclude name="**/*.rej"/>
          <exclude name="**/*.orig"/>
          <exclude name="**/README.md"/>
          <exclude name="**/README.mdtext"/>

          <exclude name="arquillian-tomee/arquillian-tomee-embedded/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension"/>
          <exclude name="arquillian-tomee/arquillian-tomee-remote/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension"/>
          <exclude name="arquillian-tomee/arquillian-tomee-tests/src/test/resources/org/apache/openejb/arquillian/tests/jaxrs/foo"/>
          <exclude name="arquillian-tomee/arquillian-tomee-tests/src/test/resources/test.getresources"/>
          <exclude name="arquillian-tomee/arquillian-tomee-webapp-remote/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension"/>
          <exclude name="container/openejb-core/src/main/resources/default.exclusions"/>
          <exclude name="container/openejb-core/src/test/resources/META-INF/services/javax.validation.spi.ValidationProvider"/>
          <exclude name="osgi/openejb-core-osgi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension"/>
          <exclude name="server/openejb-cxf-rs/src/main/resources/META-INF/services/javax.ws.rs.ext.RuntimeDelegate"/>
          <exclude name="server/openejb-ssh/src/test/key/ssh-key.ser"/>
          <exclude name="tomee/apache-tomee/src/main/resources/service.readme.txt"/>
          <exclude name="tomee/tomee-embedded/src/main/resources/META-INF/services/javax.ejb.spi.EJBContainerProvider"/>
          <exclude name="tomee/tomee-embedded/src/main/resources/META-INF/services/org.apache.webbeans.spi.plugins.OpenWebBeansPlugin"/>
          <exclude name="tomee/tomee-myfaces/src/main/resources/META-INF/services/org.apache.myfaces.spi.AnnotationProviderFactory"/>
          <exclude name="tomee/tomee-webapp/src/main/webapp/js/jquery/jquery-1.7.1.js"/>
          <exclude name="container/openejb-core/src/main/resources/META-INF/services/javax.ejb.spi.EJBContainerProvider"/>
          <exclude name="assembly/openejb-standalone/src/main/resources/service.readme.txt"/>
          <exclude name="container/openejb-junit/src/main/resources/META-INF/openejb-test-login.config"/>
          <exclude name="examples/datasource-ciphered-password/src/test/resources/META-INF/beans.xml"/>
          <exclude name="examples/decorators/src/main/resources/META-INF/beans.xml"/>
          <exclude name="examples/webapps/rest-example/TODO"/>
          <exclude name="container/openejb-jee/src/main/xsdlist/xsdlist.txt"/>

          <!-- user-owned config files.  see httpds default.httpd.conf for precident --> 
          <exclude name="**/default.openejb.conf"/> 
          <exclude name="**/groups.properties"/> 
          <exclude name="**/users.properties"/> 
          <exclude name="**/logging.properties"/> 
          <exclude name="**/login.config"/> 
 
          <!-- license in this file results in bad generated release notes --> 
          <exclude name="**/release-notes.vm"/> 
 
          <!-- empty placeholder --> 
          <exclude name="**/assembly/openejb-standalone/src/main/resources/DATA-README.txt"/> 
 
          <!-- tiny plugin descriptors - some user owned --> 
          <exclude name="**/META-INF/org.apache.openejb.cli/**"/> 
          <exclude name="**/META-INF/org.apache.openejb.client.IdentityResolver/**"/> 
          <exclude name="**/META-INF/org.apache.openejb.server.ServerService/**"/> 
          <exclude name="**/META-INF/org.apache.openejb.resource.jdbc.DataSourcePlugin/**"/> 
          <exclude name="**/META-INF/org.apache.openejb.resource.jdbc.PasswordCipher/**"/> 
          <exclude name="**/META-INF/services/org/apache/activemq/broker/**"/> 
          <exclude name="**/META-INF/org.apache.openejb.tomcat/ServerClassLoader"/> 
          <exclude name="**/server/openejb-cxf/src/main/resources/META-INF/cxf.extension"/> 
 
 
          <!-- insignificant test descriptors --> 
          <exclude name="**/container/openejb-core/src/test/resources/altddPU1/**/*.xml"/> 
          <exclude name="**/container/openejb-core/src/test/resources/altddapp1/**/*.xml"/> 
          <exclude name="**/container/openejb-core/src/test/resources/altddapp2/**/*.xml"/> 
          <exclude name="**/container/openejb-core/src/test/resources/altddapp2/**/*.properties"/> 
          <exclude name="**/container/openejb-core/src/test/resources/convert/**/*.xml"/> 
          <exclude name="**/container/openejb-core/src/test/resources/mixedcase/**/*.xml"/> 
          <exclude name="**/container/openejb-spring/src/test/resources/META-INF/ejb-jar.xml"/> 
 
          <!-- empty or insignificant descriptors from examples --> 
          <exclude name="**/examples/**/src/*/resources/META-INF/ejb-jar.xml"/> 
          <exclude name="**/examples/**/src/*/resources/META-INF/application-client.xml"/> 
          <exclude name="**/examples/alternate-descriptors/src/main/resources/META-INF/test.ejb-jar.xml"/> 
          <exclude name="**/examples/simple-cmp2/src/main/resources/META-INF/openejb-jar.xml"/> 
          <exclude name="**/examples/webapps/struts/src/main/webapp/prelude.jspf"/> 
 
          <!-- boiler plate --> 
          <exclude name="**/examples/webservice-ws-security/src/*/resources/META-INF/CalculatorImpl*.properties"/> 
 
          <!-- W3C licensed --> 
          <exclude name="**/container/openejb-jee/src/main/resources/META-INF/schema/xml.xsd"/> 
          <exclude name="**/server/openejb-axis/src/main/resources/META-INF/schema/soap_encoding_1_1.xsd"/> 

          <!-- CDDL licensed -->
          <exclude name="container/openejb-jee/src/main/resources/META-INF/schema/*.xsd"/>
        </patternset>
      </fileset> 
    </rat:report> 
  </target> 
 
  <target name="-taskdef"> 
    <dirname property="download.dir" file="${java.io.tmpdir}/rat"/>
    <mkdir dir="${download.dir}"/>
    <get src="http://archive.apache.org/dist/incubator/rat/apache-rat-incubating-current-bin.zip" dest="${java.io.tmpdir}/rat.zip"/>
    <unzip src="${java.io.tmpdir}/rat.zip" dest="${java.io.tmpdir}/rat"/>

    <typedef resource="org/apache/rat/anttasks/antlib.xml"
             uri="antlib:org.apache.rat.anttasks">

      <classpath>
        <fileset dir="${java.io.tmpdir}/rat/">
           <include name="**/apache-rat*.jar"/>
           <include name="**/lib/**/commons-*.jar"/>
        </fileset> 
      </classpath> 
    </typedef> 
  </target> 
</project> 
