DATAJPA-623 - Fixed package cycles accidentally introduced.
Moved JpaEntityMetadata and DefaultJpaEntityMetadata to query package to avoid a cyclic dependency to it. Jpa21Utils now also resides in the query package as the util package must not depend on other project packages. Updated the Sonargraph architecture description by adding new architectural artifacts for mapping, the CDI support and utilities. Defined allowed dependencies more strictly to detect architecture violations more aggressively.
This commit is contained in:
@@ -1,216 +1,237 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<context version="7.0.3.1152">
|
||||
<scope name="spring-data-jpa" type="Project">
|
||||
<element name="Filter" type="TypeFilterReferenceOverridden">
|
||||
<element name="org.springframework.data.jpa.**" type="IncludeTypePattern"/>
|
||||
<context version="7.1.10.209">
|
||||
<scope type="Project" name="spring-data-jpa">
|
||||
<element type="TypeFilterReferenceOverridden" name="Filter">
|
||||
<element type="IncludeTypePattern" name="org.springframework.data.jpa.**"/>
|
||||
</element>
|
||||
<architecture>
|
||||
<element name="Domain" type="Layer">
|
||||
<element name="Assignment" type="TypeFilter">
|
||||
<element name="**.domain.**" type="IncludeTypePattern"/>
|
||||
<element type="Layer" name="Support">
|
||||
<element type="TypeFilter" name="Assignment">
|
||||
<element type="WeakTypePattern" name="**.support.**"/>
|
||||
</element>
|
||||
<dependency toName="Project|spring-data-jpa::Layer|Domain" type="AllowedDependency"/>
|
||||
</element>
|
||||
<element type="Layer" name="Repository">
|
||||
<element type="TypeFilter" name="Assignment">
|
||||
<element type="IncludeTypePattern" name="**.repository.**"/>
|
||||
</element>
|
||||
<element type="Subsystem" name="Configuration">
|
||||
<element type="TypeFilter" name="Assignment">
|
||||
<element type="IncludeTypePattern" name="**.config.**"/>
|
||||
</element>
|
||||
<dependency toName="Project|spring-data-jpa::Layer|Repository::Subsystem|API" type="AllowedDependency"/>
|
||||
<dependency toName="Project|spring-data-jpa::Layer|Repository::Subsystem|Implementation" type="AllowedDependency"/>
|
||||
</element>
|
||||
<element type="Subsystem" name="API">
|
||||
<element type="TypeFilter" name="Assignment">
|
||||
<element type="WeakTypePattern" name="**"/>
|
||||
</element>
|
||||
</element>
|
||||
<element type="Subsystem" name="Query">
|
||||
<element type="TypeFilter" name="Assignment">
|
||||
<element type="IncludeTypePattern" name="**.query.**"/>
|
||||
</element>
|
||||
<dependency toName="Project|spring-data-jpa::Layer|Repository::Subsystem|API" type="AllowedDependency"/>
|
||||
</element>
|
||||
<element type="Subsystem" name="Implementation">
|
||||
<element type="TypeFilter" name="Assignment">
|
||||
<element type="IncludeTypePattern" name="**.support.**"/>
|
||||
</element>
|
||||
<dependency toName="Project|spring-data-jpa::Layer|Repository::Subsystem|API" type="AllowedDependency"/>
|
||||
<dependency toName="Project|spring-data-jpa::Layer|Repository::Subsystem|Query" type="AllowedDependency"/>
|
||||
<dependency toName="Project|spring-data-jpa::Layer|Repository::Subsystem|Util" type="AllowedDependency"/>
|
||||
</element>
|
||||
<element type="Subsystem" name="Util">
|
||||
<element type="TypeFilter" name="Assignment">
|
||||
<element type="IncludeTypePattern" name="**.utils.**"/>
|
||||
</element>
|
||||
</element>
|
||||
<element type="Subsystem" name="CDI">
|
||||
<element type="TypeFilter" name="Assignment">
|
||||
<element type="IncludeTypePattern" name="**.cdi.**"/>
|
||||
</element>
|
||||
<stereotype name="Unrestricted"/>
|
||||
</element>
|
||||
<dependency toName="Project|spring-data-jpa::Layer|Domain" type="AllowedDependency"/>
|
||||
<dependency toName="Project|spring-data-jpa::Layer|Mapping" type="AllowedDependency"/>
|
||||
<dependency toName="Project|spring-data-jpa::Layer|Utilities" type="AllowedDependency"/>
|
||||
</element>
|
||||
<element type="Layer" name="Domain">
|
||||
<element type="TypeFilter" name="Assignment">
|
||||
<element type="IncludeTypePattern" name="**.domain.**"/>
|
||||
</element>
|
||||
<stereotype name="Unrestricted"/>
|
||||
</element>
|
||||
<element name="Repository" type="Layer">
|
||||
<element name="Assignment" type="TypeFilter">
|
||||
<element name="**.repository.**" type="IncludeTypePattern"/>
|
||||
<element type="Layer" name="Mapping">
|
||||
<element type="TypeFilter" name="Assignment">
|
||||
<element type="IncludeTypePattern" name="**.mapping.**"/>
|
||||
</element>
|
||||
<element name="Configuration" type="Subsystem">
|
||||
<element name="Assignment" type="TypeFilter">
|
||||
<element name="**.config.**" type="IncludeTypePattern"/>
|
||||
</element>
|
||||
<stereotype name="Unrestricted"/>
|
||||
</element>
|
||||
<element name="Query" type="Subsystem">
|
||||
<element name="Assignment" type="TypeFilter">
|
||||
<element name="**.query.**" type="IncludeTypePattern"/>
|
||||
</element>
|
||||
<stereotype name="Unrestricted"/>
|
||||
</element>
|
||||
<element name="Core" type="Subsystem">
|
||||
<element name="Assignment" type="TypeFilter">
|
||||
<element name="**.support.**" type="IncludeTypePattern"/>
|
||||
</element>
|
||||
<stereotype name="Unrestricted"/>
|
||||
</element>
|
||||
<element name="Util" type="Subsystem">
|
||||
<element name="Assignment" type="TypeFilter">
|
||||
<element name="**.utils.**" type="IncludeTypePattern"/>
|
||||
</element>
|
||||
<stereotype name="Unrestricted"/>
|
||||
</element>
|
||||
<stereotype name="Unrestricted"/>
|
||||
</element>
|
||||
<element name="Support" type="Layer">
|
||||
<element name="Assignment" type="TypeFilter">
|
||||
<element name="**.support.**" type="WeakTypePattern"/>
|
||||
<element type="Layer" name="Utilities">
|
||||
<element type="TypeFilter" name="Assignment">
|
||||
<element type="WeakTypePattern" name="**.util.**"/>
|
||||
</element>
|
||||
<stereotype name="Unrestricted"/>
|
||||
</element>
|
||||
</architecture>
|
||||
<workspace>
|
||||
<element name="src/main/java" type="JavaRootDirectory">
|
||||
<element type="JavaRootDirectory" name="src/main/java">
|
||||
<reference name="Project|spring-data-jpa::BuildUnit|spring-data-jpa"/>
|
||||
</element>
|
||||
<element name="target/classes" type="JavaRootDirectory">
|
||||
<reference name="Project|spring-data-jpa::BuildUnit|spring-data-jpa"/>
|
||||
</element>
|
||||
<element name="target/generated-sources/main" type="JavaRootDirectory">
|
||||
<element type="JavaRootDirectory" name="target/classes">
|
||||
<reference name="Project|spring-data-jpa::BuildUnit|spring-data-jpa"/>
|
||||
</element>
|
||||
</workspace>
|
||||
<physical>
|
||||
<element name="spring-data-jpa" type="BuildUnit"/>
|
||||
<element type="BuildUnit" name="spring-data-jpa"/>
|
||||
</physical>
|
||||
</scope>
|
||||
<scope name="External" type="External">
|
||||
<element name="Filter" type="TypeFilter">
|
||||
<element name="**" type="IncludeTypePattern"/>
|
||||
<element name="java.io.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.lang.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.lang.annotation.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.lang.ref.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.math.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.nio.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.nio.channels.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.nio.channels.spi.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.nio.charset.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.nio.charset.spi.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.text.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.util.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.util.jar.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.util.prefs.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.util.regex.*" type="ExcludeTypePattern"/>
|
||||
<element name="java.util.zip.*" type="ExcludeTypePattern"/>
|
||||
<scope type="External" name="External">
|
||||
<element type="TypeFilter" name="Filter">
|
||||
<element type="IncludeTypePattern" name="**"/>
|
||||
<element type="ExcludeTypePattern" name="java.io.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.lang.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.lang.annotation.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.lang.ref.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.math.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.nio.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.nio.channels.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.nio.channels.spi.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.nio.charset.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.nio.charset.spi.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.text.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.util.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.util.jar.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.util.prefs.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.util.regex.*"/>
|
||||
<element type="ExcludeTypePattern" name="java.util.zip.*"/>
|
||||
</element>
|
||||
<architecture>
|
||||
<element name="Querydsl" type="Subsystem">
|
||||
<element name="Assignment" type="TypeFilter">
|
||||
<element name="com.mysema.query.**" type="IncludeTypePattern"/>
|
||||
<element type="Subsystem" name="Querydsl">
|
||||
<element type="TypeFilter" name="Assignment">
|
||||
<element type="IncludeTypePattern" name="com.mysema.query.**"/>
|
||||
</element>
|
||||
</element>
|
||||
<element name="Spring" type="Subsystem">
|
||||
<element name="Assignment" type="TypeFilter">
|
||||
<element name="org.springframework.**" type="WeakTypePattern"/>
|
||||
<element type="Subsystem" name="Spring">
|
||||
<element type="TypeFilter" name="Assignment">
|
||||
<element type="WeakTypePattern" name="org.springframework.**"/>
|
||||
</element>
|
||||
</element>
|
||||
<element name="Spring Data Commons" type="Subsystem">
|
||||
<element name="Assignment" type="TypeFilter">
|
||||
<element name="org.springframework.data.**" type="IncludeTypePattern"/>
|
||||
<element type="Subsystem" name="Spring Data Commons">
|
||||
<element type="TypeFilter" name="Assignment">
|
||||
<element type="IncludeTypePattern" name="org.springframework.data.**"/>
|
||||
</element>
|
||||
</element>
|
||||
</architecture>
|
||||
</scope>
|
||||
<scope name="Global" type="Global">
|
||||
<element name="Configuration" type="Configuration"/>
|
||||
<element name="Filter" type="TypeFilter">
|
||||
<element name="**" type="IncludeTypePattern"/>
|
||||
<scope type="Global" name="Global">
|
||||
<element type="Configuration" name="Configuration"/>
|
||||
<element type="TypeFilter" name="Filter">
|
||||
<element type="IncludeTypePattern" name="**"/>
|
||||
</element>
|
||||
<itemDefinition>
|
||||
<item type="ThresholdItem">
|
||||
<property name="AttributeId" value="NumberOfNotAssignedTypes"/>
|
||||
<property name="LowerValue" value=""/>
|
||||
<property name="NamedElementGroup" value="Project"/>
|
||||
<property name="UpperValue" value="0"/>
|
||||
<property value="NumberOfNotAssignedTypes" name="AttributeId"/>
|
||||
<property value="" name="LowerValue"/>
|
||||
<property value="Project" name="NamedElementGroup"/>
|
||||
<property value="0" name="UpperValue"/>
|
||||
</item>
|
||||
<item type="ThresholdItem">
|
||||
<property name="AttributeId" value="NumberOfParameters"/>
|
||||
<property name="LowerValue" value=""/>
|
||||
<property name="NamedElementGroup" value="Method"/>
|
||||
<property name="UpperValue" value="7"/>
|
||||
<property value="NumberOfParameters" name="AttributeId"/>
|
||||
<property value="" name="LowerValue"/>
|
||||
<property value="Method" name="NamedElementGroup"/>
|
||||
<property value="7" name="UpperValue"/>
|
||||
</item>
|
||||
<item type="ThresholdItem">
|
||||
<property name="AttributeId" value="NumberOfAccessibleTypes"/>
|
||||
<property name="LowerValue" value=""/>
|
||||
<property name="NamedElementGroup" value="Namespace"/>
|
||||
<property name="UpperValue" value="30"/>
|
||||
<property value="NumberOfAccessibleTypes" name="AttributeId"/>
|
||||
<property value="" name="LowerValue"/>
|
||||
<property value="Namespace" name="NamedElementGroup"/>
|
||||
<property value="30" name="UpperValue"/>
|
||||
</item>
|
||||
<item type="ThresholdItem">
|
||||
<property name="AttributeId" value="NormalizedCumulativeComponentDependency"/>
|
||||
<property name="LowerValue" value=""/>
|
||||
<property name="NamedElementGroup" value="Project"/>
|
||||
<property name="UpperValue" value="7"/>
|
||||
<property value="NormalizedCumulativeComponentDependency" name="AttributeId"/>
|
||||
<property value="" name="LowerValue"/>
|
||||
<property value="Project" name="NamedElementGroup"/>
|
||||
<property value="7" name="UpperValue"/>
|
||||
</item>
|
||||
<item type="ThresholdItem">
|
||||
<property name="AttributeId" value="LinesOfCode"/>
|
||||
<property name="LowerValue" value=""/>
|
||||
<property name="NamedElementGroup" value="SourceFile"/>
|
||||
<property name="UpperValue" value="700"/>
|
||||
<property value="LinesOfCode" name="AttributeId"/>
|
||||
<property value="" name="LowerValue"/>
|
||||
<property value="SourceFile" name="NamedElementGroup"/>
|
||||
<property value="700" name="UpperValue"/>
|
||||
</item>
|
||||
<item type="ThresholdItem">
|
||||
<property name="AttributeId" value="NumberOfInternalTypes"/>
|
||||
<property name="LowerValue" value=""/>
|
||||
<property name="NamedElementGroup" value="Namespace"/>
|
||||
<property name="UpperValue" value="50"/>
|
||||
<property value="NumberOfInternalTypes" name="AttributeId"/>
|
||||
<property value="" name="LowerValue"/>
|
||||
<property value="Namespace" name="NamedElementGroup"/>
|
||||
<property value="50" name="UpperValue"/>
|
||||
</item>
|
||||
<item type="ThresholdItem">
|
||||
<property name="AttributeId" value="NumberOfMethods"/>
|
||||
<property name="LowerValue" value=""/>
|
||||
<property name="NamedElementGroup" value="Type"/>
|
||||
<property name="UpperValue" value="50"/>
|
||||
<property value="NumberOfMethods" name="AttributeId"/>
|
||||
<property value="" name="LowerValue"/>
|
||||
<property value="Type" name="NamedElementGroup"/>
|
||||
<property value="50" name="UpperValue"/>
|
||||
</item>
|
||||
<item type="ThresholdItem">
|
||||
<property name="AttributeId" value="ModifiedCyclomaticComplexity"/>
|
||||
<property name="LowerValue" value=""/>
|
||||
<property name="NamedElementGroup" value="Method"/>
|
||||
<property name="UpperValue" value="20"/>
|
||||
<property value="ModifiedCyclomaticComplexity" name="AttributeId"/>
|
||||
<property value="" name="LowerValue"/>
|
||||
<property value="Method" name="NamedElementGroup"/>
|
||||
<property value="20" name="UpperValue"/>
|
||||
</item>
|
||||
</itemDefinition>
|
||||
</scope>
|
||||
<attributeConfiguration type="AttributeConfiguration">
|
||||
<property name="ExtendedCyclomaticComplexity" value="disabled"/>
|
||||
<property name="MaxExtendedCyclomaticComplexityPerMethod" value="disabled"/>
|
||||
<property name="NumberOfWarnings" value="disabled"/>
|
||||
<property name="AverageCyclomaticComplexityPerMethod" value="disabled"/>
|
||||
<property name="NumberOfAbstractTypes" value="disabled"/>
|
||||
<property name="JdkVersion" value="disabled"/>
|
||||
<property name="NumberOfCyclicDirectories" value="disabled"/>
|
||||
<property name="CyclomaticComplexity" value="disabled"/>
|
||||
<property name="NumberOfMethodsWithImplementation" value="disabled"/>
|
||||
<property name="NumberOfIgnoredWarnings" value="disabled"/>
|
||||
<property name="NumberOfNamedInterfaces" value="disabled"/>
|
||||
<property name="NumberOfCyclicProjects" value="disabled"/>
|
||||
<property name="NumberOfRefactorings" value="disabled"/>
|
||||
<property name="DependsUpon" value="disabled"/>
|
||||
<property name="NumberOfVerticalSliceGroups" value="disabled"/>
|
||||
<property name="DistributedOverPathContainers" value="disabled"/>
|
||||
<property name="AverageExtendedCyclomaticComplexityPerMethod" value="disabled"/>
|
||||
<property name="AverageTypeDependency" value="disabled"/>
|
||||
<property name="NumberOfDuplicateCodeBlocksWarnings" value="disabled"/>
|
||||
<property name="RelativeAverageTypeDependency" value="disabled"/>
|
||||
<property name="AverageAccumulatedExtendedCyclomaticComplexityPerType" value="disabled"/>
|
||||
<property name="NumberOfLayerGroups" value="disabled"/>
|
||||
<property name="NumberOfIgnoredViolations" value="disabled"/>
|
||||
<property name="NumberOfFixWarnings" value="disabled"/>
|
||||
<property name="NumberOfExcludedSourceFiles" value="disabled"/>
|
||||
<property name="NumberOfVerticalSlices" value="disabled"/>
|
||||
<property name="AverageAccumulatedCyclomaticComplexityPerType" value="disabled"/>
|
||||
<property name="Timestamp" value="disabled"/>
|
||||
<property name="AverageAssertionUsage" value="disabled"/>
|
||||
<property name="NumberOfCyclicSubsystems" value="disabled"/>
|
||||
<property name="NumberOfCyclicNamespaces" value="disabled"/>
|
||||
<property name="NumberOfExcludedTargetFiles" value="disabled"/>
|
||||
<property name="NumberOfCyclicVerticalSliceGroups" value="disabled"/>
|
||||
<property name="AccumulatedExtendedCyclomaticComplexity" value="disabled"/>
|
||||
<property name="NumberOfLayers" value="disabled"/>
|
||||
<property name="NumberOfCyclicSourceFiles" value="disabled"/>
|
||||
<property name="MaxAccumulatedCyclomaticComplexityPerType" value="disabled"/>
|
||||
<property name="MaxAccumulatedExtendedCyclomaticComplexityPerType" value="disabled"/>
|
||||
<property name="NumberOfCyclicLayerGroups" value="disabled"/>
|
||||
<property name="NumberOfAssertions" value="disabled"/>
|
||||
<property name="NumberOfCyclicVerticalSlices" value="disabled"/>
|
||||
<property name="NormalizedCumulativeTypeDependency" value="disabled"/>
|
||||
<property name="AccumulatedCyclomaticComplexity" value="disabled"/>
|
||||
<property name="NumberOfCyclicWarnings" value="disabled"/>
|
||||
<property name="NumberOfMetricWarnings" value="disabled"/>
|
||||
<property name="NumberOfNameParts" value="disabled"/>
|
||||
<property name="NumberOfTasks" value="disabled"/>
|
||||
<property name="NumberOfWorkspaceWarnings" value="disabled"/>
|
||||
<property name="NumberOfAbstractMethods" value="disabled"/>
|
||||
<property name="NumberOfTypesWithImplementation" value="disabled"/>
|
||||
<property name="Level" value="disabled"/>
|
||||
<property name="NumberOfSubsystems" value="disabled"/>
|
||||
<property name="NumberOfCyclicLayers" value="disabled"/>
|
||||
<property name="MaxCyclomaticComplexityPerMethod" value="disabled"/>
|
||||
<property value="disabled" name="ExtendedCyclomaticComplexity"/>
|
||||
<property value="disabled" name="MaxExtendedCyclomaticComplexityPerMethod"/>
|
||||
<property value="disabled" name="NumberOfWarnings"/>
|
||||
<property value="disabled" name="AverageCyclomaticComplexityPerMethod"/>
|
||||
<property value="disabled" name="NumberOfAbstractTypes"/>
|
||||
<property value="disabled" name="JdkVersion"/>
|
||||
<property value="disabled" name="NumberOfCyclicDirectories"/>
|
||||
<property value="disabled" name="CyclomaticComplexity"/>
|
||||
<property value="disabled" name="NumberOfMethodsWithImplementation"/>
|
||||
<property value="disabled" name="NumberOfIgnoredWarnings"/>
|
||||
<property value="disabled" name="NumberOfNamedInterfaces"/>
|
||||
<property value="disabled" name="NumberOfCyclicProjects"/>
|
||||
<property value="disabled" name="NumberOfRefactorings"/>
|
||||
<property value="disabled" name="DependsUpon"/>
|
||||
<property value="disabled" name="NumberOfVerticalSliceGroups"/>
|
||||
<property value="disabled" name="DistributedOverPathContainers"/>
|
||||
<property value="disabled" name="AverageExtendedCyclomaticComplexityPerMethod"/>
|
||||
<property value="disabled" name="AverageTypeDependency"/>
|
||||
<property value="disabled" name="NumberOfDuplicateCodeBlocksWarnings"/>
|
||||
<property value="disabled" name="RelativeAverageTypeDependency"/>
|
||||
<property value="disabled" name="AverageAccumulatedExtendedCyclomaticComplexityPerType"/>
|
||||
<property value="disabled" name="NumberOfLayerGroups"/>
|
||||
<property value="disabled" name="NumberOfIgnoredViolations"/>
|
||||
<property value="disabled" name="NumberOfFixWarnings"/>
|
||||
<property value="disabled" name="NumberOfExcludedSourceFiles"/>
|
||||
<property value="disabled" name="NumberOfVerticalSlices"/>
|
||||
<property value="disabled" name="AverageAccumulatedCyclomaticComplexityPerType"/>
|
||||
<property value="disabled" name="Timestamp"/>
|
||||
<property value="disabled" name="AverageAssertionUsage"/>
|
||||
<property value="disabled" name="NumberOfCyclicSubsystems"/>
|
||||
<property value="disabled" name="NumberOfCyclicNamespaces"/>
|
||||
<property value="disabled" name="NumberOfExcludedTargetFiles"/>
|
||||
<property value="disabled" name="NumberOfCyclicVerticalSliceGroups"/>
|
||||
<property value="disabled" name="AccumulatedExtendedCyclomaticComplexity"/>
|
||||
<property value="disabled" name="NumberOfLayers"/>
|
||||
<property value="disabled" name="NumberOfCyclicSourceFiles"/>
|
||||
<property value="disabled" name="MaxAccumulatedCyclomaticComplexityPerType"/>
|
||||
<property value="disabled" name="MaxAccumulatedExtendedCyclomaticComplexityPerType"/>
|
||||
<property value="disabled" name="NumberOfCyclicLayerGroups"/>
|
||||
<property value="disabled" name="NumberOfAssertions"/>
|
||||
<property value="disabled" name="NumberOfCyclicVerticalSlices"/>
|
||||
<property value="disabled" name="NormalizedCumulativeTypeDependency"/>
|
||||
<property value="disabled" name="AccumulatedCyclomaticComplexity"/>
|
||||
<property value="disabled" name="NumberOfMetricWarnings"/>
|
||||
<property value="disabled" name="NumberOfNameParts"/>
|
||||
<property value="disabled" name="NumberOfTasks"/>
|
||||
<property value="disabled" name="NumberOfWorkspaceWarnings"/>
|
||||
<property value="disabled" name="NumberOfAbstractMethods"/>
|
||||
<property value="disabled" name="NumberOfTypesWithImplementation"/>
|
||||
<property value="disabled" name="Level"/>
|
||||
<property value="disabled" name="NumberOfSubsystems"/>
|
||||
<property value="disabled" name="NumberOfCyclicLayers"/>
|
||||
<property value="disabled" name="MaxCyclomaticComplexityPerMethod"/>
|
||||
</attributeConfiguration>
|
||||
</context>
|
||||
|
||||
@@ -28,7 +28,6 @@ import org.springframework.data.jpa.repository.query.JpaQueryExecution.PagedExec
|
||||
import org.springframework.data.jpa.repository.query.JpaQueryExecution.ProcedureExecution;
|
||||
import org.springframework.data.jpa.repository.query.JpaQueryExecution.SingleEntityExecution;
|
||||
import org.springframework.data.jpa.repository.query.JpaQueryExecution.SlicedExecution;
|
||||
import org.springframework.data.jpa.util.Jpa21Utils;
|
||||
import org.springframework.data.repository.query.RepositoryQuery;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2013 the original author or authors.
|
||||
* Copyright 2013-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.data.jpa.repository.support;
|
||||
package org.springframework.data.jpa.repository.query;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package org.springframework.data.jpa.repository.query;
|
||||
|
||||
import org.springframework.data.jpa.repository.support.JpaEntityMetadata;
|
||||
import org.springframework.data.repository.core.EntityMetadata;
|
||||
import org.springframework.expression.Expression;
|
||||
import org.springframework.expression.ParserContext;
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.data.jpa.util;
|
||||
package org.springframework.data.jpa.repository.query;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
@@ -21,7 +21,6 @@ import javax.persistence.EntityGraph;
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.Query;
|
||||
|
||||
import org.springframework.data.jpa.repository.query.JpaEntityGraph;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ClassUtils;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2013 the original author or authors.
|
||||
* Copyright 2013-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.data.jpa.repository.support;
|
||||
package org.springframework.data.jpa.repository.query;
|
||||
|
||||
import org.springframework.data.repository.core.EntityMetadata;
|
||||
|
||||
@@ -199,55 +199,55 @@ public class JpaQueryCreator extends AbstractQueryCreator<CriteriaQuery<Object>,
|
||||
Expression<Object> path = toExpressionRecursively(root, property);
|
||||
|
||||
switch (part.getType()) {
|
||||
case BETWEEN:
|
||||
ParameterMetadata<Comparable> first = provider.next(part);
|
||||
ParameterMetadata<Comparable> second = provider.next(part);
|
||||
return builder.between(getComparablePath(root, part), first.getExpression(), second.getExpression());
|
||||
case AFTER:
|
||||
case GREATER_THAN:
|
||||
return builder
|
||||
.greaterThan(getComparablePath(root, part), provider.next(part, Comparable.class).getExpression());
|
||||
case GREATER_THAN_EQUAL:
|
||||
return builder.greaterThanOrEqualTo(getComparablePath(root, part), provider.next(part, Comparable.class)
|
||||
.getExpression());
|
||||
case BEFORE:
|
||||
case LESS_THAN:
|
||||
return builder.lessThan(getComparablePath(root, part), provider.next(part, Comparable.class).getExpression());
|
||||
case LESS_THAN_EQUAL:
|
||||
return builder.lessThanOrEqualTo(getComparablePath(root, part), provider.next(part, Comparable.class)
|
||||
.getExpression());
|
||||
case IS_NULL:
|
||||
return path.isNull();
|
||||
case IS_NOT_NULL:
|
||||
return path.isNotNull();
|
||||
case NOT_IN:
|
||||
return path.in(provider.next(part, Collection.class).getExpression()).not();
|
||||
case IN:
|
||||
return path.in(provider.next(part, Collection.class).getExpression());
|
||||
case STARTING_WITH:
|
||||
case ENDING_WITH:
|
||||
case CONTAINING:
|
||||
case LIKE:
|
||||
case NOT_LIKE:
|
||||
Expression<String> stringPath = getTypedPath(root, part);
|
||||
Expression<String> propertyExpression = upperIfIgnoreCase(stringPath);
|
||||
Expression<String> parameterExpression = upperIfIgnoreCase(provider.next(part, String.class).getExpression());
|
||||
Predicate like = builder.like(propertyExpression, parameterExpression);
|
||||
return part.getType() == Type.NOT_LIKE ? like.not() : like;
|
||||
case TRUE:
|
||||
Expression<Boolean> truePath = getTypedPath(root, part);
|
||||
return builder.isTrue(truePath);
|
||||
case FALSE:
|
||||
Expression<Boolean> falsePath = getTypedPath(root, part);
|
||||
return builder.isFalse(falsePath);
|
||||
case SIMPLE_PROPERTY:
|
||||
ParameterMetadata<Object> expression = provider.next(part);
|
||||
return expression.isIsNullParameter() ? path.isNull() : builder.equal(upperIfIgnoreCase(path),
|
||||
upperIfIgnoreCase(expression.getExpression()));
|
||||
case NEGATING_SIMPLE_PROPERTY:
|
||||
return builder.notEqual(upperIfIgnoreCase(path), upperIfIgnoreCase(provider.next(part).getExpression()));
|
||||
default:
|
||||
throw new IllegalArgumentException("Unsupported keyword " + part.getType());
|
||||
case BETWEEN:
|
||||
ParameterMetadata<Comparable> first = provider.next(part);
|
||||
ParameterMetadata<Comparable> second = provider.next(part);
|
||||
return builder.between(getComparablePath(root, part), first.getExpression(), second.getExpression());
|
||||
case AFTER:
|
||||
case GREATER_THAN:
|
||||
return builder.greaterThan(getComparablePath(root, part), provider.next(part, Comparable.class)
|
||||
.getExpression());
|
||||
case GREATER_THAN_EQUAL:
|
||||
return builder.greaterThanOrEqualTo(getComparablePath(root, part), provider.next(part, Comparable.class)
|
||||
.getExpression());
|
||||
case BEFORE:
|
||||
case LESS_THAN:
|
||||
return builder.lessThan(getComparablePath(root, part), provider.next(part, Comparable.class).getExpression());
|
||||
case LESS_THAN_EQUAL:
|
||||
return builder.lessThanOrEqualTo(getComparablePath(root, part), provider.next(part, Comparable.class)
|
||||
.getExpression());
|
||||
case IS_NULL:
|
||||
return path.isNull();
|
||||
case IS_NOT_NULL:
|
||||
return path.isNotNull();
|
||||
case NOT_IN:
|
||||
return path.in(provider.next(part, Collection.class).getExpression()).not();
|
||||
case IN:
|
||||
return path.in(provider.next(part, Collection.class).getExpression());
|
||||
case STARTING_WITH:
|
||||
case ENDING_WITH:
|
||||
case CONTAINING:
|
||||
case LIKE:
|
||||
case NOT_LIKE:
|
||||
Expression<String> stringPath = getTypedPath(root, part);
|
||||
Expression<String> propertyExpression = upperIfIgnoreCase(stringPath);
|
||||
Expression<String> parameterExpression = upperIfIgnoreCase(provider.next(part, String.class).getExpression());
|
||||
Predicate like = builder.like(propertyExpression, parameterExpression);
|
||||
return part.getType() == Type.NOT_LIKE ? like.not() : like;
|
||||
case TRUE:
|
||||
Expression<Boolean> truePath = getTypedPath(root, part);
|
||||
return builder.isTrue(truePath);
|
||||
case FALSE:
|
||||
Expression<Boolean> falsePath = getTypedPath(root, part);
|
||||
return builder.isFalse(falsePath);
|
||||
case SIMPLE_PROPERTY:
|
||||
ParameterMetadata<Object> expression = provider.next(part);
|
||||
return expression.isIsNullParameter() ? path.isNull() : builder.equal(upperIfIgnoreCase(path),
|
||||
upperIfIgnoreCase(expression.getExpression()));
|
||||
case NEGATING_SIMPLE_PROPERTY:
|
||||
return builder.notEqual(upperIfIgnoreCase(path), upperIfIgnoreCase(provider.next(part).getExpression()));
|
||||
default:
|
||||
throw new IllegalArgumentException("Unsupported keyword " + part.getType());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -261,16 +261,24 @@ public class JpaQueryCreator extends AbstractQueryCreator<CriteriaQuery<Object>,
|
||||
private <T> Expression<T> upperIfIgnoreCase(Expression<? extends T> expression) {
|
||||
|
||||
switch (part.shouldIgnoreCase()) {
|
||||
case ALWAYS:
|
||||
Assert.state(canUpperCase(expression), "Unable to ignore case of " + expression.getJavaType().getName()
|
||||
+ " types, the property '" + part.getProperty().getSegment() + "' must reference a String");
|
||||
return (Expression<T>) builder.upper((Expression<String>) expression);
|
||||
case WHEN_POSSIBLE:
|
||||
if (canUpperCase(expression)) {
|
||||
|
||||
case ALWAYS:
|
||||
|
||||
Assert.state(canUpperCase(expression), "Unable to ignore case of " + expression.getJavaType().getName()
|
||||
+ " types, the property '" + part.getProperty().getSegment() + "' must reference a String");
|
||||
return (Expression<T>) builder.upper((Expression<String>) expression);
|
||||
}
|
||||
|
||||
case WHEN_POSSIBLE:
|
||||
|
||||
if (canUpperCase(expression)) {
|
||||
return (Expression<T>) builder.upper((Expression<String>) expression);
|
||||
}
|
||||
|
||||
case NEVER:
|
||||
default:
|
||||
|
||||
return (Expression<T>) expression;
|
||||
}
|
||||
return (Expression<T>) expression;
|
||||
}
|
||||
|
||||
private boolean canUpperCase(Expression<?> expression) {
|
||||
|
||||
@@ -34,8 +34,6 @@ import org.springframework.data.jpa.repository.Lock;
|
||||
import org.springframework.data.jpa.repository.Modifying;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.jpa.repository.QueryHints;
|
||||
import org.springframework.data.jpa.repository.support.DefaultJpaEntityMetadata;
|
||||
import org.springframework.data.jpa.repository.support.JpaEntityMetadata;
|
||||
import org.springframework.data.repository.core.RepositoryMetadata;
|
||||
import org.springframework.data.repository.query.Parameter;
|
||||
import org.springframework.data.repository.query.Parameters;
|
||||
|
||||
@@ -24,7 +24,6 @@ import javax.persistence.NamedStoredProcedureQueries;
|
||||
import javax.persistence.NamedStoredProcedureQuery;
|
||||
import javax.persistence.StoredProcedureParameter;
|
||||
|
||||
import org.springframework.data.jpa.repository.support.JpaEntityMetadata;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import java.io.Serializable;
|
||||
|
||||
import javax.persistence.metamodel.SingularAttribute;
|
||||
|
||||
import org.springframework.data.jpa.repository.query.JpaEntityMetadata;
|
||||
import org.springframework.data.repository.core.EntityInformation;
|
||||
|
||||
/**
|
||||
|
||||
@@ -21,6 +21,8 @@ import javax.persistence.EntityManager;
|
||||
import javax.persistence.metamodel.Metamodel;
|
||||
|
||||
import org.springframework.data.domain.Persistable;
|
||||
import org.springframework.data.jpa.repository.query.DefaultJpaEntityMetadata;
|
||||
import org.springframework.data.jpa.repository.query.JpaEntityMetadata;
|
||||
import org.springframework.data.repository.core.support.AbstractEntityInformation;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
|
||||
@@ -27,8 +27,8 @@ import javax.persistence.LockModeType;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageImpl;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.jpa.repository.query.Jpa21Utils;
|
||||
import org.springframework.data.jpa.repository.query.JpaEntityGraph;
|
||||
import org.springframework.data.jpa.util.Jpa21Utils;
|
||||
import org.springframework.data.querydsl.EntityPathResolver;
|
||||
import org.springframework.data.querydsl.QSort;
|
||||
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
|
||||
|
||||
@@ -44,8 +44,8 @@ import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
import org.springframework.data.jpa.repository.query.Jpa21Utils;
|
||||
import org.springframework.data.jpa.repository.query.QueryUtils;
|
||||
import org.springframework.data.jpa.util.Jpa21Utils;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
@@ -23,7 +23,6 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import org.springframework.data.jpa.repository.support.JpaEntityMetadata;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link ExpressionBasedStringQuery}.
|
||||
|
||||
@@ -42,8 +42,6 @@ import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.jpa.domain.sample.User;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.jpa.repository.sample.UserRepository;
|
||||
import org.springframework.data.jpa.repository.support.DefaultJpaEntityMetadata;
|
||||
import org.springframework.data.jpa.repository.support.JpaEntityMetadata;
|
||||
import org.springframework.data.repository.core.RepositoryMetadata;
|
||||
import org.springframework.data.repository.query.RepositoryQuery;
|
||||
import org.springframework.data.repository.query.DefaultEvaluationContextProvider;
|
||||
|
||||
@@ -30,7 +30,6 @@ import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.runners.MockitoJUnitRunner;
|
||||
import org.springframework.data.jpa.domain.sample.User;
|
||||
import org.springframework.data.jpa.repository.support.JpaEntityMetadata;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ import static org.junit.Assert.*;
|
||||
import javax.persistence.Entity;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.data.jpa.repository.query.DefaultJpaEntityMetadata;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link DefaultJpaEntityMetadata}.
|
||||
|
||||
Reference in New Issue
Block a user