<?xml version="1.0"?>
<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
		"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
	<!-- Suppressions -->
	<module name="SuppressionFilter">
		<property name="file" value="${configDir}/suppressions.xml"/>
	</module>

	<!-- Root Checks -->
	<module name="RegexpHeader">
		<property name="headerFile" value="${configDir}/header.txt"/>
		<property name="fileExtensions" value="java"/>
	</module>
	<module name="NewlineAtEndOfFile">
		<property name="lineSeparator" value="lf"/>
		<property name="fileExtensions" value="java,xml"/>
	</module>

	<!-- TreeWalker Checks -->
	<module name="TreeWalker">
		<!-- Annotations -->
		<module name="AnnotationUseStyle">
			<property name="elementStyle" value="compact"/>
		</module>
		<module name="MissingOverride"/>
		<module name="PackageAnnotation"/>
		<module name="AnnotationLocation">
			<property name="allowSamelineSingleParameterlessAnnotation" value="false" />
		</module>

		<!-- Block Checks -->
		<module name="EmptyBlock">
			<property name="option" value="text"/>
		</module>
		<module name="LeftCurly"/>
		<module name="RightCurly">
			<property name="option" value="alone"/>
		</module>
		<module name="NeedBraces"/>
		<module name="AvoidNestedBlocks"/>

		<!-- Class Design -->
		<module name="FinalClass"/>
		<module name="InterfaceIsType"/>
		<module name="HideUtilityClassConstructor"/>
		<module name="MutableException"/>
		<module name="InnerTypeLast"/>
		<module name="OneTopLevelClass"/>

		<!-- Coding -->
		<module name="CovariantEquals"/>
		<module name="EmptyStatement"/>
		<module name="EqualsHashCode"/>
		<module name="InnerAssignment"/>
		<module name="SimplifyBooleanExpression"/>
		<module name="SimplifyBooleanReturn"/>
		<module name="StringLiteralEquality"/>
		<module name="NestedForDepth">
			<property name="max" value="3"/>
		</module>
		<module name="NestedIfDepth">
			<property name="max" value="3"/>
		</module>
		<module name="NestedTryDepth">
			<property name="max" value="3"/>
		</module>
		<module name="MultipleVariableDeclarations"/>
		<module name="RequireThis">
			<property name="checkMethods" value="false"/>
		</module>
		<module name="OneStatementPerLine"/>

		<!-- Imports -->
		<module name="AvoidStarImport"/>
		<module name="AvoidStaticImport">
			<property name="excludes"
					value="org.assertj.core.api.Assertions.*, org.mockito.Mockito.*, org.mockito.BDDMockito.*, org.mockito.AdditionalMatchers.*, org.mockito.ArgumentMatchers.*, org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*, org.springframework.test.web.servlet.result.MockMvcResultHandlers.*, org.springframework.test.web.servlet.result.MockMvcResultMatchers.*, org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*, org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*, org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.*, org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo"/>
		</module>
		<module name="IllegalImport"/>
		<module name="RedundantImport"/>
		<module name="UnusedImports">
			<property name="processJavadoc" value="true"/>
		</module>
		<module name="ImportOrder">
			<property name="groups" value="java,/^javax?\./,*,org.springframework"/>
			<property name="ordered" value="true"/>
			<property name="separated" value="true"/>
			<property name="option" value="bottom"/>
			<property name="sortStaticImportsAlphabetically" value="true"/>
		</module>

		<!-- Javadoc Comments -->
		<module name="JavadocType">
			<property name="scope" value="package"/>
			<property name="authorFormat" value=".+\s.+"/>
		</module>
		<module name="JavadocMethod">
			<property name="allowMissingJavadoc" value="true"/>
		</module>
		<module name="JavadocVariable">
			<property name="scope" value="public"/>
		</module>
		<module name="JavadocStyle">
			<property name="checkEmptyJavadoc" value="true"/>
		</module>
		<module name="NonEmptyAtclauseDescription"/>
		<module name="JavadocTagContinuationIndentation">
			<property name="offset" value="0"/>
		</module>
		<module name="AtclauseOrder">
			<property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF"/>
			<property name="tagOrder" value="@param, @author, @since, @see, @version, @serial, @deprecated"/>
		</module>
		<module name="AtclauseOrder">
			<property name="target" value="METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
			<property name="tagOrder" value="@param, @return, @throws, @since, @deprecated, @see"/>
		</module>

		<!-- Miscellaneous -->
		<module name="CommentsIndentation"/>
		<module name="UpperEll"/>
		<module name="ArrayTypeStyle"/>
		<module name="OuterTypeFilename"/>

		<!-- Modifiers -->
		<module name="RedundantModifier"/>

		<!-- Regexp -->
		<module name="RegexpSinglelineJava">
			<property name="format" value="^\t* +\t*\S"/>
			<property name="message" value="Line has leading space characters; indentation should be performed with tabs only."/>
			<property name="ignoreComments" value="true"/>
		</module>
		<module name="RegexpSinglelineJava">
			<property name="maximum" value="0"/>
			<property name="format" value="org\.mockito\.Mockito\.(when|doThrow|doAnswer)"/>
			<property name="message"
				value="Please use BDDMockto imports."/>
			<property name="ignoreComments" value="true"/>
		</module>
		<module name="RegexpSinglelineJava">
			<property name="maximum" value="0"/>
			<property name="format" value="org\.junit\.Assert\.assert"/>
			<property name="message" value="Please use AssertJ imports."/>
			<property name="ignoreComments" value="true"/>
		</module>
		<module name="Regexp">
			<property name="format" value="[ \t]+$"/>
			<property name="illegalPattern" value="true"/>
			<property name="message" value="Trailing whitespace"/>
		</module>

		<!-- Whitespace -->
		<module name="GenericWhitespace"/>
		<module name="MethodParamPad"/>
		<module name="NoWhitespaceAfter">
			<property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS, UNARY_PLUS, ARRAY_DECLARATOR"/>
		</module>
		<module name="NoWhitespaceBefore"/>
		<module name="ParenPad"/>
		<module name="TypecastParenPad"/>
		<module name="WhitespaceAfter"/>
		<module name="WhitespaceAround"/>
	</module>
</module>
