<?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. -->

<!DOCTYPE module PUBLIC
    "-//Puppy Crawl//DTD Check Configuration 1.1//EN"
    "http://www.puppycrawl.com/dtds/configuration_1_1.dtd">

<!-- commons lang customization of default Checkstyle behavior -->
<module name="Checker">
	<property name="localeLanguage" value="en" />
	<property name="severity" value="warning" />

	<module name="SuppressionFilter">
	    <property name="file" value="${checkstyle.suppressions.file}"/>
	</module>

	<module name="JavadocPackage">
		<property name="allowLegacy" value="true" />
	</module>

    <!-- No tabs allowed! -->
	<module name="FileTabCharacter" />

    <!-- Require files to end with newline characters -->
    <module name="NewlineAtEndOfFile"/>
	
	<module name="TreeWalker">
		<module name="AvoidStarImport" />
		<module name="RedundantImport" />
		<module name="UnusedImports" />
		<module name="NeedBraces" />
		<module name="LineLength">
			<property name="max" value="120" />
		</module>
		
		<!-- Must have class / interface header comments including scm version -->
		<!-- Disable by now as it also enforces generic type parameters in type javadoc -->
<!--         <module name="JavadocType"> -->
<!--             <property name="versionFormat" value="\$Id.*\$"/> -->
<!--         </module> -->
		
		<!-- Require method javadocs, allow undeclared RTE -->
		<module name="JavadocMethod">
			<property name="allowUndeclaredRTE" value="true" />
			<property name="allowMissingJavadoc" value="true" />
			<property name="scope" value="protected" />
		</module>

		<!-- Require hash code override when equals is -->
		<module name="EqualsHashCode" />

        <!-- Switch statements should be complete and with independent cases -->
        <module name="FallThrough" />
        <module name="MissingSwitchDefault" />

        <!-- Constant names should obey the traditional all uppercase naming convention -->
        <module name="ConstantName" />

        <!-- No trailing whitespace -->
        <module name="Regexp">
            <property name="format" value="[ \t]+$"/>
            <property name="illegalPattern" value="true"/>
            <property name="message" value="Trailing whitespace"/>
        </module>

        <!-- Authors should be in pom.xml file -->
        <module name="Regexp">
            <property name="format" value="@author"/>
            <property name="illegalPattern" value="true"/>
            <property name="message" value="developers names should be in pom file"/>
        </module>

	</module>
</module>
                        

