/*
 * 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.
 */
apply plugin: "org.nosphere.apache.rat"

rat {
  xmlOutput = false
  htmlOutput = false
  plainOutput = true

  excludes = [
    // git
    '.git/**',
    '**/.gitignore',
    '**/.gitkeep',

    // gradle
    '**/.gradle/**',
    'gradlew',
    'gradlew.bat',
    'gradle/wrapper/gradle-wrapper.properties',
    'caches/**',
    'daemon/**',
    'native/**',
    'wrapper/**',
    '**/build/**',
    '.buildinfo',

    // SBT
    'geode-spark-connector/**/target/**',
    'geode-spark-connector/sbt',

    // Geode examples
    'geode-examples/.idea/**',
    'geode-examples/gradlew*/**',
    'geode-examples/gradle/wrapper/**',

    // IDE
    'etc/eclipseFormatterProfile.xml',
    'etc/intellijIdeaCodeStyle.xml',
    'etc/eclipseOrganizeImports.importorder',
    '**/.project',
    '**/.classpath',
    '**/.settings/**',
    '**/build-eclipse/**',
    '**/*.iml',
    '**/*.ipr',
    '**/*.iws',
    '.idea/**',
    'geode-spark-connector/.idea/**',
    '**/tags',

    // text files
    '**/*.fig',
    '**/*.txt',
    '**/*.md',
    '**/*.json',
    '**/*.tx0',
    '**/*.txo',
    '**/*.log',
    '**/*.patch',
    '**/*.diff',
    '**/*.rej',
    '**/*.orig',
    '**/*.MF',

    // binary files
    '**/*.cer',
    '**/*.dia',
    '**/*.gfs',
    '**/*.gif',
    '**/*.ico',
    '**/*.jpg',
    '**/*.keystore',
    '**/*.pdf',
    '**/*.png',
    '**/*.ser',
    '**/*.svg',
    '**/*.truststore',
    '**/*.xls',
    '**/publickeyfile',
    '**/*.dat',

    // Geode docs
    'geode-book/Gemfile.lock',
    'geode-book/output/**',
    'geode-book/final_app/**',

    // other text files
    'geode-spark-connector/project/plugins.sbt',
    'geode-spark-connector/project/build.properties',
    '**/log4j*.xml',

    // modules
    'extensions/**/log4j.properties',
    'extensions/**/tomcat-users.xml',
    'extensions/geode-modules-assembly/release/tcserver/**',
    'extensions/geode-modules-assembly/release/**/setenv.properties',
    'extensions/geode-modules/src/main/java/org/apache/geode/modules/session/catalina/LocalStrings.properties',
    'extensions/geode-modules/src/main/resources/modules-version.properties',
    'extensions/geode-modules/src/test/resources/org/apache/geode/modules/Event.hbm.xml',
    'extensions/geode-modules/src/test/resources/org/apache/geode/modules/Person.hbm.xml',

    // these are test files that don't expect the first element to be a comment
    'geode-core/src/test/resources/org/apache/geode/management/internal/configuration/domain/CacheElementJUnitTest.xml',
    'geode-core/src/test/resources/org/apache/geode/management/internal/configuration/utils/*.xml',

    // geode-site: Adding exceptions to MIT/BSD licensed files
    'geode-site/website/content/js/head.js',
    'geode-site/website/content/js/html5shiv.js',
    'geode-site/website/content/js/jquery-1.10.1.min.js',
    'geode-site/website/content/js/jquery.icheck.js',
    'geode-site/website/content/js/respond.min.js',
    'geode-site/website/content/js/bootstrap.min.js',
    'geode-site/website/content/css/bootflat-extensions.css',
    'geode-site/website/content/css/bootflat-square.css',
    'geode-site/website/content/css/bootflat.css',
    'geode-site/website/content/bootstrap/bootstrap.min.css',
    'geode-site/website/content/css/font-awesome.min.css',
    'geode-site/website/lib/pandoc.template',
    'geode-site/website/content/font/**',
    'geode-site/content/**',
    // compiled logs and locks
    'geode-site/website/tmp/**',
    'geode-site/website/layouts/**',


    // ANTLR generated files
    'geode-core/src/main/java/org/apache/geode/cache/query/internal/parse/OQLLexer.java',
    'geode-core/src/main/java/org/apache/geode/cache/query/internal/parse/OQLLexerTokenTypes.java',
    'geode-core/src/main/java/org/apache/geode/cache/query/internal/parse/OQLParser.java',
    'geode-core/src/main/java/org/apache/geode/cache/query/internal/parse/OQLLexerTokenTypes.txt',

    // Service META-INF
    '**/META-INF/services/org.xml.sax.ext.EntityResolver2',
    '**/META-INF/services/org.apache.geode.internal.cache.CacheService',
    '**/META-INF/services/org.apache.geode.internal.cache.xmlcache.XmlParser',
    '**/META-INF/services/org.apache.geode.distributed.ServerLauncherCacheProvider',
    '**/META-INF/services/org.springframework.shell.core.CommandMarker',

    // --- Other Licenses ---

    // Public Domain http://meyerweb.com/eric/tools/css/reset/
    'geode-web-api/src/main/webapp/docs/css/reset.css',
    'geode-pulse/src/main/webapp/scripts/lib/tooltip.js',

    // JSON License - permissive, used for Good, not Evil
    'geode-json/src/main/java/org/json/CDL.java',
    'geode-json/src/main/java/org/json/Cookie.java',
    'geode-json/src/main/java/org/json/CookieList.java',
    'geode-json/src/main/java/org/json/CDL.java',
    'geode-json/src/main/java/org/json/Cookie.java',
    'geode-json/src/main/java/org/json/CookieList.java',
    'geode-json/src/main/java/org/json/HTTP.java',
    'geode-json/src/main/java/org/json/HTTPTokener.java',
    'geode-json/src/main/java/org/json/JSONArray.java',
    'geode-json/src/main/java/org/json/JSONException.java',
    'geode-json/src/main/java/org/json/JSONML.java',
    'geode-json/src/main/java/org/json/JSONObject.java',
    'geode-json/src/main/java/org/json/JSONString.java',
    'geode-json/src/main/java/org/json/JSONStringer.java',
    'geode-json/src/main/java/org/json/JSONTokener.java',
    'geode-json/src/main/java/org/json/JSONWriter.java',
    'geode-json/src/main/java/org/json/XML.java',
    'geode-json/src/main/java/org/json/XMLTokener.java',

    // MIT License
    'geode-web-api/src/main/webapp/docs/lib/backbone-min.js',
    'geode-web-api/src/main/webapp/docs/lib/jquery-1.8.0.min.js',
    'geode-web-api/src/main/webapp/docs/lib/jquery.ba-bbq.min.js',
    'geode-web-api/src/main/webapp/docs/lib/jquery.slideto.min.js',
    'geode-web-api/src/main/webapp/docs/lib/jquery.wiggle.min.js',
    'geode-web-api/src/main/webapp/docs/lib/underscore-min.js',
    'geode-site/src/jbake/**',
    'geode-pulse/src/main/webapp/scripts/lib/jquery.jqGrid.src.js',
    'geode-pulse/src/main/webapp/scripts/lib/grid.locale-en.js',
    'geode-pulse/src/main/webapp/scripts/lib/html5.js',
    'geode-pulse/src/main/webapp/scripts/lib/jquery.i18n.properties.js',
    'geode-pulse/src/main/webapp/scripts/lib/jquery.jscrollpane.js',
    'geode-pulse/src/main/webapp/scripts/lib/jquery.mousewheel.js',
    'geode-pulse/src/main/webapp/scripts/lib/jquery.placeholder.js',
    'geode-pulse/src/main/webapp/scripts/lib/jquery.tablednd.js',
    'geode-pulse/src/main/webapp/scripts/lib/jquery.timeago.js',
    'geode-pulse/src/main/webapp/scripts/lib/jquery.ztree.core-3.5.js',
    'geode-pulse/src/main/webapp/scripts/lib/jquery.ztree.excheck-3.5.js',
    'geode-pulse/src/main/webapp/scripts/lib/jquery-1.7.2.js',
    'geode-pulse/src/main/webapp/scripts/multiselect/jquery.multiselect.js',
    'geode-pulse/src/main/webapp/scripts/multiselect/jquery-ui.js',

    'geode-pulse/src/main/webapp/css/grid/ui.jqgrid.css',
    'geode-pulse/src/main/webapp/css/multiselect/jquery.multiselect.css',
    'geode-pulse/src/main/webapp/css/jquery.jscrollpane.css',
    'geode-pulse/src/main/webapp/css/jquery.ui.all.css',
    'geode-pulse/src/main/webapp/css/jquery.ui.core.css',
    'geode-pulse/src/main/webapp/css/jquery.ui.theme.css',
    'geode-pulse/src/main/webapp/css/jquery.ztreestyle.css',
    'geode-pulse/src/main/webapp/css/jquery-ui.css',

    // MIT or ISC
    'geode-web-api/src/main/webapp/docs/lib/shred.bundle.js',
    'geode-web-api/src/main/webapp/docs/lib/shred/content.js',

    // BSD License
    'geode-web-api/src/main/webapp/docs/lib/highlight.7.3.pack.js',
    'geode-core/src/main/java/org/apache/geode/management/internal/cli/shell/jline/ANSIBuffer.java',
    'geode-pulse/src/main/webapp/scripts/lib/jquery.sparkline.js',

    // Apache License
    'geode-web-api/src/main/webapp/docs/o2c.html',
    'geode-web-api/src/main/webapp/docs/index.html',
    'geode-web-api/src/main/webapp/docs/lib/swagger-oauth.js',
    'geode-web-api/src/main/webapp/docs/lib/swagger.js',
    'geode-web-api/src/main/webapp/docs/css/screen.css',
    'geode-web-api/src/main/webapp/docs/swagger-ui.js',
    'geode-web-api/src/main/webapp/docs/swagger-ui.min.js',
    'geode-pulse/src/main/webapp/scripts/multiselect/prettify.js',

    // MX4J License
    'geode-core/src/main/java/org/apache/geode/admin/jmx/internal/MX4JModelMBean.java'
  ]
}

subprojects {
  check.dependsOn rat
}
