Modified: maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java?rev=1685427&r1=1685426&r2=1685427&view=diff ============================================================================== --- maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java (original) +++ maven/shared/trunk/maven-dependency-tree/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven31DependencyGraphBuilder.java Sun Jun 14 17:09:05 2015 @@ -1,234 +1,234 @@ -package org.apache.maven.shared.dependency.graph.internal; - -/* - * 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. - */ - -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.factory.ArtifactFactory; -import org.apache.maven.artifact.resolver.filter.ArtifactFilter; -import org.apache.maven.artifact.versioning.VersionRange; -import org.apache.maven.project.DefaultDependencyResolutionRequest; -import org.apache.maven.project.DependencyResolutionException; -import org.apache.maven.project.DependencyResolutionRequest; -import org.apache.maven.project.DependencyResolutionResult; -import org.apache.maven.project.MavenProject; -import org.apache.maven.project.ProjectBuildingRequest; -import org.apache.maven.project.ProjectDependenciesResolver; -import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder; -import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException; -import org.apache.maven.shared.dependency.graph.DependencyNode; -import org.codehaus.plexus.component.annotations.Component; -import org.codehaus.plexus.component.annotations.Requirement; -import org.codehaus.plexus.logging.AbstractLogEnabled; -import org.eclipse.aether.RepositorySystemSession; -import org.eclipse.aether.graph.Dependency; -import org.eclipse.aether.version.VersionConstraint; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * Wrapper around Eclipse Aether dependency resolver, used in Maven 3.1. - * - * @see ProjectDependenciesResolver - * @author Hervé Boutemy - * @since 2.1 - */ -@Component( role = DependencyGraphBuilder.class, hint = "maven31" ) -public class Maven31DependencyGraphBuilder - extends AbstractLogEnabled - implements DependencyGraphBuilder -{ - @Requirement - private ProjectDependenciesResolver resolver; - - @Requirement - private ArtifactFactory factory; - - /** - * Builds the dependency graph for Maven 3.1+. - * - * @param project the project - * @param filter artifact filter (can be <code>null</code>) - * @return DependencyNode containing the dependency graph. - * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved. - */ - @Override - public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter ) - throws DependencyGraphBuilderException - { - return buildDependencyGraph( project, filter, null ); - } - - /** - * Builds the dependency graph for Maven 3.1+, eventually hacking for collecting projects from - * reactor not yet built. - * - * @param project the project - * @param filter artifact filter (can be <code>null</code>) - * @param reactorProjects Collection of those projects contained in the reactor (can be <code>null</code>). - * @return DependencyNode containing the dependency graph. - * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved. - */ - @Override - public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter, - Collection<MavenProject> reactorProjects ) - throws DependencyGraphBuilderException - { - ProjectBuildingRequest projectBuildingRequest = - (ProjectBuildingRequest) Invoker.invoke( project, "getProjectBuildingRequest" ); - - RepositorySystemSession session = - (RepositorySystemSession) Invoker.invoke( projectBuildingRequest, "getRepositorySession" ); - - /* - * if ( Boolean.TRUE != ( (Boolean) session.getConfigProperties().get( - * DependencyManagerUtils.NODE_DATA_PREMANAGED_VERSION ) ) ) { DefaultRepositorySystemSession newSession = new - * DefaultRepositorySystemSession( session ); newSession.setConfigProperty( - * DependencyManagerUtils.NODE_DATA_PREMANAGED_VERSION, true ); session = newSession; } - */ - - final DependencyResolutionRequest request = new DefaultDependencyResolutionRequest(); - request.setMavenProject( project ); - Invoker.invoke( request, "setRepositorySession", RepositorySystemSession.class, session ); - - final DependencyResolutionResult result = resolveDependencies( request, reactorProjects ); - org.eclipse.aether.graph.DependencyNode graph = - (org.eclipse.aether.graph.DependencyNode) Invoker.invoke( DependencyResolutionResult.class, result, - "getDependencyGraph" ); - - return buildDependencyNode( null, graph, project.getArtifact(), filter ); - } - - private DependencyResolutionResult resolveDependencies( DependencyResolutionRequest request, - Collection<MavenProject> reactorProjects ) - throws DependencyGraphBuilderException - { - try - { - return resolver.resolve( request ); - } - catch ( DependencyResolutionException e ) - { - if ( reactorProjects == null ) - { - throw new DependencyGraphBuilderException( "Could not resolve following dependencies: " - + e.getResult().getUnresolvedDependencies(), e ); - } - - // try collecting from reactor - return collectDependenciesFromReactor( e, reactorProjects ); - } - } - - private DependencyResolutionResult collectDependenciesFromReactor( DependencyResolutionException e, - Collection<MavenProject> reactorProjects ) - throws DependencyGraphBuilderException - { - DependencyResolutionResult result = e.getResult(); - - List<Dependency> reactorDeps = getReactorDependencies( reactorProjects, result.getUnresolvedDependencies() ); - result.getUnresolvedDependencies().removeAll( reactorDeps ); - Invoker.invoke( result.getResolvedDependencies(), "addAll", Collection.class, reactorDeps ); - - if ( !result.getUnresolvedDependencies().isEmpty() ) - { - throw new DependencyGraphBuilderException( "Could not resolve nor collect following dependencies: " - + result.getUnresolvedDependencies(), e ); - } - - return result; - } - - private List<Dependency> getReactorDependencies( Collection<MavenProject> reactorProjects, List<?> dependencies ) - { - Set<ArtifactKey> reactorProjectsIds = new HashSet<ArtifactKey>(); - for ( MavenProject project : reactorProjects ) - { - reactorProjectsIds.add( new ArtifactKey( project ) ); - } - - List<Dependency> reactorDeps = new ArrayList<Dependency>(); - for ( Object untypedDependency : dependencies ) - { - Dependency dependency = (Dependency) untypedDependency; - org.eclipse.aether.artifact.Artifact depArtifact = dependency.getArtifact(); - - ArtifactKey key = - new ArtifactKey( depArtifact.getGroupId(), depArtifact.getArtifactId(), depArtifact.getVersion() ); - - if ( reactorProjectsIds.contains( key ) ) - { - reactorDeps.add( dependency ); - } - } - - return reactorDeps; - } - - private Artifact getDependencyArtifact( Dependency dep ) - { - org.eclipse.aether.artifact.Artifact artifact = dep.getArtifact(); - - return factory.createDependencyArtifact( artifact.getGroupId(), artifact.getArtifactId(), - VersionRange.createFromVersion( artifact.getVersion() ), - artifact.getProperty( "type", artifact.getExtension() ), - artifact.getClassifier(), dep.getScope(), dep.isOptional() ); - } - - private DependencyNode buildDependencyNode( DependencyNode parent, org.eclipse.aether.graph.DependencyNode node, - Artifact artifact, ArtifactFilter filter ) - { - String premanagedVersion = null; // DependencyManagerUtils.getPremanagedVersion( node ); - String premanagedScope = null; // DependencyManagerUtils.getPremanagedScope( node ); - - DefaultDependencyNode current = - new DefaultDependencyNode( parent, artifact, premanagedVersion, premanagedScope, - getVersionSelectedFromRange( node.getVersionConstraint() ) ); - - List<DependencyNode> nodes = new ArrayList<DependencyNode>( node.getChildren().size() ); - for ( org.eclipse.aether.graph.DependencyNode child : node.getChildren() ) - { - Artifact childArtifact = getDependencyArtifact( child.getDependency() ); - - if ( ( filter == null ) || filter.include( childArtifact ) ) - { - nodes.add( buildDependencyNode( current, child, childArtifact, filter ) ); - } - } - - current.setChildren( Collections.unmodifiableList( nodes ) ); - - return current; - } - - private String getVersionSelectedFromRange( VersionConstraint constraint ) - { - if ( ( constraint == null ) || ( constraint.getVersion() != null ) ) - { - return null; - } - - return constraint.getRange().toString(); - } -} +package org.apache.maven.shared.dependency.graph.internal; + +/* + * 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. + */ + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.artifact.resolver.filter.ArtifactFilter; +import org.apache.maven.artifact.versioning.VersionRange; +import org.apache.maven.project.DefaultDependencyResolutionRequest; +import org.apache.maven.project.DependencyResolutionException; +import org.apache.maven.project.DependencyResolutionRequest; +import org.apache.maven.project.DependencyResolutionResult; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.ProjectBuildingRequest; +import org.apache.maven.project.ProjectDependenciesResolver; +import org.apache.maven.shared.dependency.graph.DependencyGraphBuilder; +import org.apache.maven.shared.dependency.graph.DependencyGraphBuilderException; +import org.apache.maven.shared.dependency.graph.DependencyNode; +import org.codehaus.plexus.component.annotations.Component; +import org.codehaus.plexus.component.annotations.Requirement; +import org.codehaus.plexus.logging.AbstractLogEnabled; +import org.eclipse.aether.RepositorySystemSession; +import org.eclipse.aether.graph.Dependency; +import org.eclipse.aether.version.VersionConstraint; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * Wrapper around Eclipse Aether dependency resolver, used in Maven 3.1. + * + * @see ProjectDependenciesResolver + * @author Hervé Boutemy + * @since 2.1 + */ +@Component( role = DependencyGraphBuilder.class, hint = "maven31" ) +public class Maven31DependencyGraphBuilder + extends AbstractLogEnabled + implements DependencyGraphBuilder +{ + @Requirement + private ProjectDependenciesResolver resolver; + + @Requirement + private ArtifactFactory factory; + + /** + * Builds the dependency graph for Maven 3.1+. + * + * @param project the project + * @param filter artifact filter (can be <code>null</code>) + * @return DependencyNode containing the dependency graph. + * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved. + */ + @Override + public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter ) + throws DependencyGraphBuilderException + { + return buildDependencyGraph( project, filter, null ); + } + + /** + * Builds the dependency graph for Maven 3.1+, eventually hacking for collecting projects from + * reactor not yet built. + * + * @param project the project + * @param filter artifact filter (can be <code>null</code>) + * @param reactorProjects Collection of those projects contained in the reactor (can be <code>null</code>). + * @return DependencyNode containing the dependency graph. + * @throws DependencyGraphBuilderException if some of the dependencies could not be resolved. + */ + @Override + public DependencyNode buildDependencyGraph( MavenProject project, ArtifactFilter filter, + Collection<MavenProject> reactorProjects ) + throws DependencyGraphBuilderException + { + ProjectBuildingRequest projectBuildingRequest = + (ProjectBuildingRequest) Invoker.invoke( project, "getProjectBuildingRequest" ); + + RepositorySystemSession session = + (RepositorySystemSession) Invoker.invoke( projectBuildingRequest, "getRepositorySession" ); + + /* + * if ( Boolean.TRUE != ( (Boolean) session.getConfigProperties().get( + * DependencyManagerUtils.NODE_DATA_PREMANAGED_VERSION ) ) ) { DefaultRepositorySystemSession newSession = new + * DefaultRepositorySystemSession( session ); newSession.setConfigProperty( + * DependencyManagerUtils.NODE_DATA_PREMANAGED_VERSION, true ); session = newSession; } + */ + + final DependencyResolutionRequest request = new DefaultDependencyResolutionRequest(); + request.setMavenProject( project ); + Invoker.invoke( request, "setRepositorySession", RepositorySystemSession.class, session ); + + final DependencyResolutionResult result = resolveDependencies( request, reactorProjects ); + org.eclipse.aether.graph.DependencyNode graph = + (org.eclipse.aether.graph.DependencyNode) Invoker.invoke( DependencyResolutionResult.class, result, + "getDependencyGraph" ); + + return buildDependencyNode( null, graph, project.getArtifact(), filter ); + } + + private DependencyResolutionResult resolveDependencies( DependencyResolutionRequest request, + Collection<MavenProject> reactorProjects ) + throws DependencyGraphBuilderException + { + try + { + return resolver.resolve( request ); + } + catch ( DependencyResolutionException e ) + { + if ( reactorProjects == null ) + { + throw new DependencyGraphBuilderException( "Could not resolve following dependencies: " + + e.getResult().getUnresolvedDependencies(), e ); + } + + // try collecting from reactor + return collectDependenciesFromReactor( e, reactorProjects ); + } + } + + private DependencyResolutionResult collectDependenciesFromReactor( DependencyResolutionException e, + Collection<MavenProject> reactorProjects ) + throws DependencyGraphBuilderException + { + DependencyResolutionResult result = e.getResult(); + + List<Dependency> reactorDeps = getReactorDependencies( reactorProjects, result.getUnresolvedDependencies() ); + result.getUnresolvedDependencies().removeAll( reactorDeps ); + Invoker.invoke( result.getResolvedDependencies(), "addAll", Collection.class, reactorDeps ); + + if ( !result.getUnresolvedDependencies().isEmpty() ) + { + throw new DependencyGraphBuilderException( "Could not resolve nor collect following dependencies: " + + result.getUnresolvedDependencies(), e ); + } + + return result; + } + + private List<Dependency> getReactorDependencies( Collection<MavenProject> reactorProjects, List<?> dependencies ) + { + Set<ArtifactKey> reactorProjectsIds = new HashSet<ArtifactKey>(); + for ( MavenProject project : reactorProjects ) + { + reactorProjectsIds.add( new ArtifactKey( project ) ); + } + + List<Dependency> reactorDeps = new ArrayList<Dependency>(); + for ( Object untypedDependency : dependencies ) + { + Dependency dependency = (Dependency) untypedDependency; + org.eclipse.aether.artifact.Artifact depArtifact = dependency.getArtifact(); + + ArtifactKey key = + new ArtifactKey( depArtifact.getGroupId(), depArtifact.getArtifactId(), depArtifact.getVersion() ); + + if ( reactorProjectsIds.contains( key ) ) + { + reactorDeps.add( dependency ); + } + } + + return reactorDeps; + } + + private Artifact getDependencyArtifact( Dependency dep ) + { + org.eclipse.aether.artifact.Artifact artifact = dep.getArtifact(); + + return factory.createDependencyArtifact( artifact.getGroupId(), artifact.getArtifactId(), + VersionRange.createFromVersion( artifact.getVersion() ), + artifact.getProperty( "type", artifact.getExtension() ), + artifact.getClassifier(), dep.getScope(), dep.isOptional() ); + } + + private DependencyNode buildDependencyNode( DependencyNode parent, org.eclipse.aether.graph.DependencyNode node, + Artifact artifact, ArtifactFilter filter ) + { + String premanagedVersion = null; // DependencyManagerUtils.getPremanagedVersion( node ); + String premanagedScope = null; // DependencyManagerUtils.getPremanagedScope( node ); + + DefaultDependencyNode current = + new DefaultDependencyNode( parent, artifact, premanagedVersion, premanagedScope, + getVersionSelectedFromRange( node.getVersionConstraint() ) ); + + List<DependencyNode> nodes = new ArrayList<DependencyNode>( node.getChildren().size() ); + for ( org.eclipse.aether.graph.DependencyNode child : node.getChildren() ) + { + Artifact childArtifact = getDependencyArtifact( child.getDependency() ); + + if ( ( filter == null ) || filter.include( childArtifact ) ) + { + nodes.add( buildDependencyNode( current, child, childArtifact, filter ) ); + } + } + + current.setChildren( Collections.unmodifiableList( nodes ) ); + + return current; + } + + private String getVersionSelectedFromRange( VersionConstraint constraint ) + { + if ( ( constraint == null ) || ( constraint.getVersion() != null ) ) + { + return null; + } + + return constraint.getRange().toString(); + } +}
Modified: maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/AbstractInterpolatorFilterReaderLineEndingTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/AbstractInterpolatorFilterReaderLineEndingTest.java?rev=1685427&r1=1685426&r2=1685427&view=diff ============================================================================== --- maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/AbstractInterpolatorFilterReaderLineEndingTest.java (original) +++ maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/AbstractInterpolatorFilterReaderLineEndingTest.java Sun Jun 14 17:09:05 2015 @@ -1,122 +1,122 @@ -package org.apache.maven.shared.filtering; - -/* - * 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. - */ - -import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.eq; -import static org.mockito.Matchers.isA; -import static org.mockito.Mockito.when; - -import java.io.Reader; -import java.io.StringReader; - -import org.codehaus.plexus.interpolation.Interpolator; -import org.codehaus.plexus.interpolation.RecursionInterceptor; -import org.codehaus.plexus.util.IOUtil; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -public abstract class AbstractInterpolatorFilterReaderLineEndingTest -{ - - @Mock - private Interpolator interpolator; - - @Before - public void onSetup() - { - MockitoAnnotations.initMocks( this ); - } - - @Test - public void testDefaults() - throws Exception - { - when( interpolator.interpolate( eq( "${a}" ), eq( "" ), isA( RecursionInterceptor.class ) ) ).thenReturn( "DONE_A" ); - - Reader in = new StringReader( "text without expression" ); - Reader reader = getDollarBracesReader( in, interpolator, "\\" ); - assertEquals( "text without expression", IOUtil.toString( reader ) ); - - in = new StringReader( "valid expression ${a}" ); - reader = getDollarBracesReader( in, interpolator, null ); - assertEquals( "valid expression DONE_A", IOUtil.toString( reader ) ); - - in = new StringReader( "empty expression ${}" ); - reader = getDollarBracesReader( in, interpolator, null ); - assertEquals( "empty expression ${}", IOUtil.toString( reader ) ); - - in = new StringReader( "dollar space expression $ {a}" ); - reader = getDollarBracesReader( in, interpolator, "\\" ); - assertEquals( "dollar space expression $ {a}", IOUtil.toString( reader ) ); - - in = new StringReader( "space in expression ${ a}" ); - reader = getDollarBracesReader( in, interpolator, "\\" ); - assertEquals( "space in expression ${ a}", IOUtil.toString( reader ) ); - - in = new StringReader( "escape dollar with expression \\${a}" ); - reader = getDollarBracesReader( in, interpolator, "\\" ); - assertEquals( "escape dollar with expression ${a}", IOUtil.toString( reader ) ); - - in = new StringReader( "unknown expression ${unknown}" ); - reader = getDollarBracesReader( in, interpolator, "\\" ); - assertEquals( "unknown expression ${unknown}", IOUtil.toString( reader ) ); - } - - // MSHARED-198: custom delimiters doesn't work as expected - @Test - public void testCustomDelimiters() - throws Exception - { - when( interpolator.interpolate( eq( "aaaFILTER.a.MEaaa" ), eq( "" ), isA( RecursionInterceptor.class ) ) ).thenReturn( "DONE" ); - when( interpolator.interpolate( eq( "abcFILTER.a.MEabc" ), eq( "" ), isA( RecursionInterceptor.class ) ) ).thenReturn( "DONE" ); - - Reader in = new StringReader( "aaaFILTER.a.MEaaa" ); - Reader reader = getAaa_AaaReader( in, interpolator ); - - assertEquals( "DONE", IOUtil.toString( reader ) ); - - in = new StringReader( "abcFILTER.a.MEabc" ); - reader = getAbc_AbcReader( in, interpolator ); - assertEquals( "DONE", IOUtil.toString( reader ) ); - } - - // MSHARED-235: reader exceeds readAheadLimit - @Test - public void testMarkInvalid() - throws Exception - { - Reader in = new StringReader( "@\").replace(p,\"]\").replace(q,\"" ); - Reader reader = getAtReader( in, interpolator, "\\" ); - - assertEquals( "@\").replace(p,\"]\").replace(q,\"", IOUtil.toString( reader ) ); - } - - protected abstract Reader getAbc_AbcReader( Reader in, Interpolator interpolator ); - - protected abstract Reader getAaa_AaaReader( Reader in, Interpolator interpolator ); - - protected abstract Reader getDollarBracesReader( Reader in, Interpolator interpolator, String escapeString ); - - protected abstract Reader getAtReader( Reader in, Interpolator interpolator, String escapeString ); - +package org.apache.maven.shared.filtering; + +/* + * 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. + */ + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.isA; +import static org.mockito.Mockito.when; + +import java.io.Reader; +import java.io.StringReader; + +import org.codehaus.plexus.interpolation.Interpolator; +import org.codehaus.plexus.interpolation.RecursionInterceptor; +import org.codehaus.plexus.util.IOUtil; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +public abstract class AbstractInterpolatorFilterReaderLineEndingTest +{ + + @Mock + private Interpolator interpolator; + + @Before + public void onSetup() + { + MockitoAnnotations.initMocks( this ); + } + + @Test + public void testDefaults() + throws Exception + { + when( interpolator.interpolate( eq( "${a}" ), eq( "" ), isA( RecursionInterceptor.class ) ) ).thenReturn( "DONE_A" ); + + Reader in = new StringReader( "text without expression" ); + Reader reader = getDollarBracesReader( in, interpolator, "\\" ); + assertEquals( "text without expression", IOUtil.toString( reader ) ); + + in = new StringReader( "valid expression ${a}" ); + reader = getDollarBracesReader( in, interpolator, null ); + assertEquals( "valid expression DONE_A", IOUtil.toString( reader ) ); + + in = new StringReader( "empty expression ${}" ); + reader = getDollarBracesReader( in, interpolator, null ); + assertEquals( "empty expression ${}", IOUtil.toString( reader ) ); + + in = new StringReader( "dollar space expression $ {a}" ); + reader = getDollarBracesReader( in, interpolator, "\\" ); + assertEquals( "dollar space expression $ {a}", IOUtil.toString( reader ) ); + + in = new StringReader( "space in expression ${ a}" ); + reader = getDollarBracesReader( in, interpolator, "\\" ); + assertEquals( "space in expression ${ a}", IOUtil.toString( reader ) ); + + in = new StringReader( "escape dollar with expression \\${a}" ); + reader = getDollarBracesReader( in, interpolator, "\\" ); + assertEquals( "escape dollar with expression ${a}", IOUtil.toString( reader ) ); + + in = new StringReader( "unknown expression ${unknown}" ); + reader = getDollarBracesReader( in, interpolator, "\\" ); + assertEquals( "unknown expression ${unknown}", IOUtil.toString( reader ) ); + } + + // MSHARED-198: custom delimiters doesn't work as expected + @Test + public void testCustomDelimiters() + throws Exception + { + when( interpolator.interpolate( eq( "aaaFILTER.a.MEaaa" ), eq( "" ), isA( RecursionInterceptor.class ) ) ).thenReturn( "DONE" ); + when( interpolator.interpolate( eq( "abcFILTER.a.MEabc" ), eq( "" ), isA( RecursionInterceptor.class ) ) ).thenReturn( "DONE" ); + + Reader in = new StringReader( "aaaFILTER.a.MEaaa" ); + Reader reader = getAaa_AaaReader( in, interpolator ); + + assertEquals( "DONE", IOUtil.toString( reader ) ); + + in = new StringReader( "abcFILTER.a.MEabc" ); + reader = getAbc_AbcReader( in, interpolator ); + assertEquals( "DONE", IOUtil.toString( reader ) ); + } + + // MSHARED-235: reader exceeds readAheadLimit + @Test + public void testMarkInvalid() + throws Exception + { + Reader in = new StringReader( "@\").replace(p,\"]\").replace(q,\"" ); + Reader reader = getAtReader( in, interpolator, "\\" ); + + assertEquals( "@\").replace(p,\"]\").replace(q,\"", IOUtil.toString( reader ) ); + } + + protected abstract Reader getAbc_AbcReader( Reader in, Interpolator interpolator ); + + protected abstract Reader getAaa_AaaReader( Reader in, Interpolator interpolator ); + + protected abstract Reader getDollarBracesReader( Reader in, Interpolator interpolator, String escapeString ); + + protected abstract Reader getAtReader( Reader in, Interpolator interpolator, String escapeString ); + } \ No newline at end of file Modified: maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/InterpolatorFilterReaderLineEndingTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/InterpolatorFilterReaderLineEndingTest.java?rev=1685427&r1=1685426&r2=1685427&view=diff ============================================================================== --- maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/InterpolatorFilterReaderLineEndingTest.java (original) +++ maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/InterpolatorFilterReaderLineEndingTest.java Sun Jun 14 17:09:05 2015 @@ -1,58 +1,58 @@ -package org.apache.maven.shared.filtering; - -/* - * 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. - */ - -import java.io.Reader; - -import org.codehaus.plexus.interpolation.Interpolator; - -public class InterpolatorFilterReaderLineEndingTest - extends AbstractInterpolatorFilterReaderLineEndingTest -{ - @Override - protected Reader getAaa_AaaReader( Reader in, Interpolator interpolator ) - { - return new InterpolatorFilterReaderLineEnding( in, interpolator, "aaa", "aaa", true ); - } - - @Override - protected Reader getAbc_AbcReader( Reader in, Interpolator interpolator ) - { - return new InterpolatorFilterReaderLineEnding( in, interpolator, "abc", "abc", true ); - } - - @Override - protected Reader getDollarBracesReader( Reader in, Interpolator interpolator, String escapeString ) - { - InterpolatorFilterReaderLineEnding reader = - new InterpolatorFilterReaderLineEnding( in, interpolator, "${", "}", true ); - reader.setEscapeString( escapeString ); - return reader; - } - - @Override - protected Reader getAtReader( Reader in, Interpolator interpolator, String escapeString ) - { - InterpolatorFilterReaderLineEnding reader = - new InterpolatorFilterReaderLineEnding( in, interpolator, "@", "@", true ); - reader.setEscapeString( escapeString ); - return reader; - } -} +package org.apache.maven.shared.filtering; + +/* + * 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. + */ + +import java.io.Reader; + +import org.codehaus.plexus.interpolation.Interpolator; + +public class InterpolatorFilterReaderLineEndingTest + extends AbstractInterpolatorFilterReaderLineEndingTest +{ + @Override + protected Reader getAaa_AaaReader( Reader in, Interpolator interpolator ) + { + return new InterpolatorFilterReaderLineEnding( in, interpolator, "aaa", "aaa", true ); + } + + @Override + protected Reader getAbc_AbcReader( Reader in, Interpolator interpolator ) + { + return new InterpolatorFilterReaderLineEnding( in, interpolator, "abc", "abc", true ); + } + + @Override + protected Reader getDollarBracesReader( Reader in, Interpolator interpolator, String escapeString ) + { + InterpolatorFilterReaderLineEnding reader = + new InterpolatorFilterReaderLineEnding( in, interpolator, "${", "}", true ); + reader.setEscapeString( escapeString ); + return reader; + } + + @Override + protected Reader getAtReader( Reader in, Interpolator interpolator, String escapeString ) + { + InterpolatorFilterReaderLineEnding reader = + new InterpolatorFilterReaderLineEnding( in, interpolator, "@", "@", true ); + reader.setEscapeString( escapeString ); + return reader; + } +} Modified: maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/MultiDelimiterInterpolatorFilterReaderLineEndingTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/MultiDelimiterInterpolatorFilterReaderLineEndingTest.java?rev=1685427&r1=1685426&r2=1685427&view=diff ============================================================================== --- maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/MultiDelimiterInterpolatorFilterReaderLineEndingTest.java (original) +++ maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/MultiDelimiterInterpolatorFilterReaderLineEndingTest.java Sun Jun 14 17:09:05 2015 @@ -1,124 +1,124 @@ -package org.apache.maven.shared.filtering; - -/* - * 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. - */ - -import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.eq; -import static org.mockito.Matchers.isA; -import static org.mockito.Mockito.when; - -import java.io.Reader; -import java.io.StringReader; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; - -import org.codehaus.plexus.interpolation.Interpolator; -import org.codehaus.plexus.interpolation.RecursionInterceptor; -import org.codehaus.plexus.util.IOUtil; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -public class MultiDelimiterInterpolatorFilterReaderLineEndingTest - extends AbstractInterpolatorFilterReaderLineEndingTest -{ - - @Mock - private Interpolator interpolator; - - @Before - public void onSetup() - { - MockitoAnnotations.initMocks( this ); - } - - @Override - protected Reader getAaa_AaaReader( Reader in, Interpolator interpolator ) - { - MultiDelimiterInterpolatorFilterReaderLineEnding reader = - new MultiDelimiterInterpolatorFilterReaderLineEnding( in, interpolator, true ); - reader.setDelimiterSpecs( Collections.singleton( "aaa*aaa" ) ); - return reader; - } - - @Override - protected Reader getAbc_AbcReader( Reader in, Interpolator interpolator ) - { - MultiDelimiterInterpolatorFilterReaderLineEnding reader = - new MultiDelimiterInterpolatorFilterReaderLineEnding( in, interpolator, true ); - reader.setDelimiterSpecs( Collections.singleton( "abc*abc" ) ); - return reader; - } - - @Override - protected Reader getDollarBracesReader( Reader in, Interpolator interpolator, String escapeString ) - { - MultiDelimiterInterpolatorFilterReaderLineEnding reader = - new MultiDelimiterInterpolatorFilterReaderLineEnding( in, interpolator, true ); - reader.setDelimiterSpecs( Collections.singleton( "${*}" ) ); - reader.setEscapeString( escapeString ); - return reader; - } - - @Override - protected Reader getAtReader( Reader in, Interpolator interpolator, String escapeString ) - { - MultiDelimiterInterpolatorFilterReaderLineEnding reader = - new MultiDelimiterInterpolatorFilterReaderLineEnding( in, interpolator, true ); - reader.setDelimiterSpecs( Collections.singleton( "@" ) ); - reader.setEscapeString( escapeString ); - return reader; - } - - // MSHARED-199: Filtering doesn't work if 2 delimiters are used on the same line, the first one being left open - @Test - public void testLineWithSingleAtAndExpression() - throws Exception - { - when( interpolator.interpolate( eq( "${foo}" ), eq( "" ), isA( RecursionInterceptor.class ) ) ).thenReturn( "bar" ); - - Reader in = new StringReader( "t...@titi.com ${foo}" ); - MultiDelimiterInterpolatorFilterReaderLineEnding reader = - new MultiDelimiterInterpolatorFilterReaderLineEnding( in, interpolator, true ); - reader.setDelimiterSpecs( new HashSet<String>( Arrays.asList( "${*}", "@" ) ) ); - - assertEquals( "t...@titi.com bar", IOUtil.toString( reader ) ); - } - - // http://stackoverflow.com/questions/21786805/maven-war-plugin-customize-filter-delimitters-in-webresources/ - @Test - public void testAtDollarExpression() - throws Exception - { - when( interpolator.interpolate( eq( "${db.server}" ), eq( "" ), isA( RecursionInterceptor.class ) ) ).thenReturn( "DB_SERVER" ); - when( interpolator.interpolate( eq( "${db.port}" ), eq( "" ), isA( RecursionInterceptor.class ) ) ).thenReturn( "DB_PORT" ); - when( interpolator.interpolate( eq( "${db.name}" ), eq( "" ), isA( RecursionInterceptor.class ) ) ).thenReturn( "DB_NAME" ); - - Reader in = new StringReader( " url=\"jdbc:oracle:thin:\\@${db.server}:${db.port}:${db.name}\"" ); - MultiDelimiterInterpolatorFilterReaderLineEnding reader = - new MultiDelimiterInterpolatorFilterReaderLineEnding( in, interpolator, true ); - reader.setEscapeString( "\\" ); - reader.setDelimiterSpecs( new HashSet<String>( Arrays.asList( "${*}", "@" ) ) ); - - assertEquals( " url=\"jdbc:oracle:thin:@DB_SERVER:DB_PORT:DB_NAME\"", IOUtil.toString( reader ) ); - } -} +package org.apache.maven.shared.filtering; + +/* + * 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. + */ + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.isA; +import static org.mockito.Mockito.when; + +import java.io.Reader; +import java.io.StringReader; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; + +import org.codehaus.plexus.interpolation.Interpolator; +import org.codehaus.plexus.interpolation.RecursionInterceptor; +import org.codehaus.plexus.util.IOUtil; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +public class MultiDelimiterInterpolatorFilterReaderLineEndingTest + extends AbstractInterpolatorFilterReaderLineEndingTest +{ + + @Mock + private Interpolator interpolator; + + @Before + public void onSetup() + { + MockitoAnnotations.initMocks( this ); + } + + @Override + protected Reader getAaa_AaaReader( Reader in, Interpolator interpolator ) + { + MultiDelimiterInterpolatorFilterReaderLineEnding reader = + new MultiDelimiterInterpolatorFilterReaderLineEnding( in, interpolator, true ); + reader.setDelimiterSpecs( Collections.singleton( "aaa*aaa" ) ); + return reader; + } + + @Override + protected Reader getAbc_AbcReader( Reader in, Interpolator interpolator ) + { + MultiDelimiterInterpolatorFilterReaderLineEnding reader = + new MultiDelimiterInterpolatorFilterReaderLineEnding( in, interpolator, true ); + reader.setDelimiterSpecs( Collections.singleton( "abc*abc" ) ); + return reader; + } + + @Override + protected Reader getDollarBracesReader( Reader in, Interpolator interpolator, String escapeString ) + { + MultiDelimiterInterpolatorFilterReaderLineEnding reader = + new MultiDelimiterInterpolatorFilterReaderLineEnding( in, interpolator, true ); + reader.setDelimiterSpecs( Collections.singleton( "${*}" ) ); + reader.setEscapeString( escapeString ); + return reader; + } + + @Override + protected Reader getAtReader( Reader in, Interpolator interpolator, String escapeString ) + { + MultiDelimiterInterpolatorFilterReaderLineEnding reader = + new MultiDelimiterInterpolatorFilterReaderLineEnding( in, interpolator, true ); + reader.setDelimiterSpecs( Collections.singleton( "@" ) ); + reader.setEscapeString( escapeString ); + return reader; + } + + // MSHARED-199: Filtering doesn't work if 2 delimiters are used on the same line, the first one being left open + @Test + public void testLineWithSingleAtAndExpression() + throws Exception + { + when( interpolator.interpolate( eq( "${foo}" ), eq( "" ), isA( RecursionInterceptor.class ) ) ).thenReturn( "bar" ); + + Reader in = new StringReader( "t...@titi.com ${foo}" ); + MultiDelimiterInterpolatorFilterReaderLineEnding reader = + new MultiDelimiterInterpolatorFilterReaderLineEnding( in, interpolator, true ); + reader.setDelimiterSpecs( new HashSet<String>( Arrays.asList( "${*}", "@" ) ) ); + + assertEquals( "t...@titi.com bar", IOUtil.toString( reader ) ); + } + + // http://stackoverflow.com/questions/21786805/maven-war-plugin-customize-filter-delimitters-in-webresources/ + @Test + public void testAtDollarExpression() + throws Exception + { + when( interpolator.interpolate( eq( "${db.server}" ), eq( "" ), isA( RecursionInterceptor.class ) ) ).thenReturn( "DB_SERVER" ); + when( interpolator.interpolate( eq( "${db.port}" ), eq( "" ), isA( RecursionInterceptor.class ) ) ).thenReturn( "DB_PORT" ); + when( interpolator.interpolate( eq( "${db.name}" ), eq( "" ), isA( RecursionInterceptor.class ) ) ).thenReturn( "DB_NAME" ); + + Reader in = new StringReader( " url=\"jdbc:oracle:thin:\\@${db.server}:${db.port}:${db.name}\"" ); + MultiDelimiterInterpolatorFilterReaderLineEnding reader = + new MultiDelimiterInterpolatorFilterReaderLineEnding( in, interpolator, true ); + reader.setEscapeString( "\\" ); + reader.setDelimiterSpecs( new HashSet<String>( Arrays.asList( "${*}", "@" ) ) ); + + assertEquals( " url=\"jdbc:oracle:thin:@DB_SERVER:DB_PORT:DB_NAME\"", IOUtil.toString( reader ) ); + } +} Modified: maven/shared/trunk/maven-project-utils/src/it/setup-plugin/src/main/java/org/apache/maven/shared/project/utils/it/ResolveProjectMojo.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-project-utils/src/it/setup-plugin/src/main/java/org/apache/maven/shared/project/utils/it/ResolveProjectMojo.java?rev=1685427&r1=1685426&r2=1685427&view=diff ============================================================================== --- maven/shared/trunk/maven-project-utils/src/it/setup-plugin/src/main/java/org/apache/maven/shared/project/utils/it/ResolveProjectMojo.java (original) +++ maven/shared/trunk/maven-project-utils/src/it/setup-plugin/src/main/java/org/apache/maven/shared/project/utils/it/ResolveProjectMojo.java Sun Jun 14 17:09:05 2015 @@ -1,40 +1,40 @@ -package org.apache.maven.shared.project.utils.it; - -/* - * 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. - */ - -import org.apache.maven.plugin.AbstractMojo; -import org.apache.maven.plugins.annotations.Mojo; -import org.apache.maven.plugins.annotations.Parameter; -import org.apache.maven.project.MavenProject; -import org.apache.maven.shared.project.utils.ProjectUtils; - -@Mojo( name="resolve-project" ) -public class ResolveProjectMojo - extends AbstractMojo -{ - @Parameter( defaultValue = "${project}", required = true, readonly = true ) - private MavenProject project; - - public void execute() - { - getLog().info( project.getId() + " is root project: " + ProjectUtils.isRootProject( project ) ); - getLog().info( project.getId() + " is aggregator: " + ProjectUtils.isAggregator( project ) ); - } -} +package org.apache.maven.shared.project.utils.it; + +/* + * 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. + */ + +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.project.utils.ProjectUtils; + +@Mojo( name="resolve-project" ) +public class ResolveProjectMojo + extends AbstractMojo +{ + @Parameter( defaultValue = "${project}", required = true, readonly = true ) + private MavenProject project; + + public void execute() + { + getLog().info( project.getId() + " is root project: " + ProjectUtils.isRootProject( project ) ); + getLog().info( project.getId() + " is aggregator: " + ProjectUtils.isAggregator( project ) ); + } +} Modified: maven/shared/trunk/maven-project-utils/src/it/setup-plugin/src/main/java/org/apache/maven/shared/project/utils/it/ResolveScmMojo.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-project-utils/src/it/setup-plugin/src/main/java/org/apache/maven/shared/project/utils/it/ResolveScmMojo.java?rev=1685427&r1=1685426&r2=1685427&view=diff ============================================================================== --- maven/shared/trunk/maven-project-utils/src/it/setup-plugin/src/main/java/org/apache/maven/shared/project/utils/it/ResolveScmMojo.java (original) +++ maven/shared/trunk/maven-project-utils/src/it/setup-plugin/src/main/java/org/apache/maven/shared/project/utils/it/ResolveScmMojo.java Sun Jun 14 17:09:05 2015 @@ -1,40 +1,40 @@ -package org.apache.maven.shared.project.utils.it; - -/* - * 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. - */ - -import org.apache.maven.plugin.AbstractMojo; -import org.apache.maven.plugins.annotations.Mojo; -import org.apache.maven.plugins.annotations.Parameter; -import org.apache.maven.project.MavenProject; -import org.apache.maven.shared.project.utils.ScmUtils; - -@Mojo( name="resolve-scm" ) -public class ResolveScmMojo - extends AbstractMojo -{ - @Parameter( defaultValue = "${project}", required = true, readonly = true ) - private MavenProject project; - - public void execute() - { - getLog().info( "Resolved scm connection for " + project.getId() + ": " + ScmUtils.resolveScmConnection( project ) ); - getLog().info( "Resolved scm developer connection for " + project.getId() + ": " + ScmUtils.resolveScmDeveloperConnection( project ) ); - } -} +package org.apache.maven.shared.project.utils.it; + +/* + * 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. + */ + +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.project.utils.ScmUtils; + +@Mojo( name="resolve-scm" ) +public class ResolveScmMojo + extends AbstractMojo +{ + @Parameter( defaultValue = "${project}", required = true, readonly = true ) + private MavenProject project; + + public void execute() + { + getLog().info( "Resolved scm connection for " + project.getId() + ": " + ScmUtils.resolveScmConnection( project ) ); + getLog().info( "Resolved scm developer connection for " + project.getId() + ": " + ScmUtils.resolveScmDeveloperConnection( project ) ); + } +} Modified: maven/shared/trunk/maven-project-utils/src/it/setup-plugin/src/main/java/org/apache/maven/shared/project/utils/it/ResolveSiteMojo.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-project-utils/src/it/setup-plugin/src/main/java/org/apache/maven/shared/project/utils/it/ResolveSiteMojo.java?rev=1685427&r1=1685426&r2=1685427&view=diff ============================================================================== --- maven/shared/trunk/maven-project-utils/src/it/setup-plugin/src/main/java/org/apache/maven/shared/project/utils/it/ResolveSiteMojo.java (original) +++ maven/shared/trunk/maven-project-utils/src/it/setup-plugin/src/main/java/org/apache/maven/shared/project/utils/it/ResolveSiteMojo.java Sun Jun 14 17:09:05 2015 @@ -1,39 +1,39 @@ -package org.apache.maven.shared.project.utils.it; - -/* - * 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. - */ - -import org.apache.maven.plugin.AbstractMojo; -import org.apache.maven.plugins.annotations.Mojo; -import org.apache.maven.plugins.annotations.Parameter; -import org.apache.maven.project.MavenProject; -import org.apache.maven.shared.project.utils.SiteUtils; - -@Mojo( name="resolve-site" ) -public class ResolveSiteMojo - extends AbstractMojo -{ - @Parameter( defaultValue = "${project}", required = true, readonly = true ) - private MavenProject project; - - public void execute() - { - getLog().info( "Resolved distributionManagement site URL for " + project.getId() + ": " + SiteUtils.resolveDistributionManagementSiteUrl( project ) ); - } -} +package org.apache.maven.shared.project.utils.it; + +/* + * 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. + */ + +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.project.utils.SiteUtils; + +@Mojo( name="resolve-site" ) +public class ResolveSiteMojo + extends AbstractMojo +{ + @Parameter( defaultValue = "${project}", required = true, readonly = true ) + private MavenProject project; + + public void execute() + { + getLog().info( "Resolved distributionManagement site URL for " + project.getId() + ": " + SiteUtils.resolveDistributionManagementSiteUrl( project ) ); + } +} Modified: maven/shared/trunk/maven-project-utils/src/main/java/org/apache/maven/shared/project/runtime/MavenUtils.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-project-utils/src/main/java/org/apache/maven/shared/project/runtime/MavenUtils.java?rev=1685427&r1=1685426&r2=1685427&view=diff ============================================================================== --- maven/shared/trunk/maven-project-utils/src/main/java/org/apache/maven/shared/project/runtime/MavenUtils.java (original) +++ maven/shared/trunk/maven-project-utils/src/main/java/org/apache/maven/shared/project/runtime/MavenUtils.java Sun Jun 14 17:09:05 2015 @@ -1,64 +1,64 @@ -package org.apache.maven.shared.project.runtime; - -/* - * 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. - */ - -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; - -import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.util.IOUtil; - -/** - * - */ -public final class MavenUtils -{ - - private MavenUtils() - { - } - - public static String getMavenVersion() - { - // This relies on the fact that MavenProject is the in core classloader - // and that the core classloader is for the maven-core artifact - // and that should have a pom.properties file - // if this ever changes, we will have to revisit this code. - final Properties properties = new Properties(); - final InputStream in = - MavenProject.class.getClassLoader().getResourceAsStream( "META-INF/maven/org.apache.maven/maven-core/" - + "pom.properties" ); - try - { - properties.load( in ); - } - catch ( IOException ioe ) - { - return ""; - } - finally - { - IOUtil.close( in ); - } - - return properties.getProperty( "version" ).trim(); - } -} +package org.apache.maven.shared.project.runtime; + +/* + * 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. + */ + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.util.IOUtil; + +/** + * + */ +public final class MavenUtils +{ + + private MavenUtils() + { + } + + public static String getMavenVersion() + { + // This relies on the fact that MavenProject is the in core classloader + // and that the core classloader is for the maven-core artifact + // and that should have a pom.properties file + // if this ever changes, we will have to revisit this code. + final Properties properties = new Properties(); + final InputStream in = + MavenProject.class.getClassLoader().getResourceAsStream( "META-INF/maven/org.apache.maven/maven-core/" + + "pom.properties" ); + try + { + properties.load( in ); + } + catch ( IOException ioe ) + { + return ""; + } + finally + { + IOUtil.close( in ); + } + + return properties.getProperty( "version" ).trim(); + } +} Modified: maven/shared/trunk/maven-project-utils/src/main/java/org/apache/maven/shared/project/utils/ProjectUtils.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-project-utils/src/main/java/org/apache/maven/shared/project/utils/ProjectUtils.java?rev=1685427&r1=1685426&r2=1685427&view=diff ============================================================================== --- maven/shared/trunk/maven-project-utils/src/main/java/org/apache/maven/shared/project/utils/ProjectUtils.java (original) +++ maven/shared/trunk/maven-project-utils/src/main/java/org/apache/maven/shared/project/utils/ProjectUtils.java Sun Jun 14 17:09:05 2015 @@ -1,310 +1,310 @@ -package org.apache.maven.shared.project.utils; - -/* - * 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. - */ - -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; -import java.util.Stack; - -import org.apache.maven.model.Model; -import org.apache.maven.model.Profile; -import org.apache.maven.model.io.xpp3.MavenXpp3Reader; -import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.util.IOUtil; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; - -/** - * - */ -public final class ProjectUtils -{ - // This instance is often used, including in recursive methods, so initiate it for general usage - private static final MavenXpp3Reader POM_READER = new MavenXpp3Reader(); - - private ProjectUtils() - { - } - - /** - * Returns {@code true} if this project has no parent, or it has a parent but isn't one of its modules. - * - * @param project the project to verify - * @return {@code true} if this is a root project, otherwise {@code false} - */ - public static boolean isRootProject( MavenProject project ) - { - if ( !project.hasParent() ) - { - return true; - } - - MavenProject parent = project.getParent(); - - // (not) being a rootProject must never depend on reactor projects or active profiles - for ( String module : getAllModules( parent ).keySet() ) - { - File moduleFile = getModuleFile( parent, module ); - - if ( moduleFile.equals( project.getFile() ) ) - { - // project is a module of its parent - return false; - } - } - - // project isn't a module of its parent - return true; - } - - /** - * Go through the ancestors to find the rootProject of this project. - * - * @param project the project - * @return the root project - * @see ProjectUtils#isRootProject(MavenProject) - */ - public static MavenProject getRootProject( MavenProject project ) - { - if ( project == null ) - { - return null; - } - - MavenProject current = project; - - while ( !isRootProject( current ) ) - { - current = current.getParent(); - } - - return current; - } - - /** - * Return {@code true} if this project has modules, but is <strong>never</strong> the parent of one of them.<br/> - * - * Return {@code false} if this project has no modules, or if 1 or more modules have this project as its parent. - * - * @param project - * @return {@code true} if project is an aggregator, {@code false} if project is standalone or hybrid - */ - public static boolean isAggregator( MavenProject project ) - { - // (not) being an aggregator must never depend on reactor projects or active profiles - Set<String> modules = getAllModules( project ).keySet(); - - if ( modules.isEmpty() ) - { - return false; - } - - for ( String module : modules ) - { - File moduleFile = getModuleFile( project, module ); - - Model model = null; - try - { - model = readModel( moduleFile ); - } - catch ( IOException e ) - { - // TODO Auto-generated catch block - e.printStackTrace(); - } - catch ( XmlPullParserException e ) - { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - if ( model.getParent() != null && model.getParent().getId().equals( project.getId() ) ) - { - return false; - } - - } - return true; - } - - private static Model readModel( File moduleFile ) throws IOException, XmlPullParserException - { - FileReader moduleReader = null; - - Model model = null; - - try - { - moduleReader = new FileReader( moduleFile ); - - model = POM_READER.read( moduleReader ); - } - finally - { - IOUtil.close( moduleReader ); - } - - return model; - } - - public static File getModuleFile( MavenProject project, String module ) - { - return getModuleFile( project.getBasedir(), module ); - } - - private static File getModuleFile( File basedir, String module ) - { - File moduleFile = new File( basedir, module ); - - if ( moduleFile.isDirectory() ) - { - moduleFile = new File( moduleFile, "pom.xml" ); - } - return moduleFile; - } - - - /** - * Returns all modules of a project, including does specified in profiles, both active and inactive. The key of the - * returned Map is the name of the module, the value refers to the source of the module (the project or a specific - * profile). - * - * @param project the project - * @return all modules, never {@code null} - */ - public static Map<String, String> getAllModules( MavenProject project ) - { - Model model = project.getModel(); - - return getAllModules( model ); - } - - private static Map<String, String> getAllModules( Model model ) - { - Map<String, String> modules = new LinkedHashMap<String, String>(); - - for ( String module : model.getModules() ) - { - modules.put( module, "project" ); // id? - } - - for ( Profile profile : model.getProfiles() ) - { - for ( String module : profile.getModules() ) - { - modules.put( module, "profile(id:" + profile.getId() + ")" ); - } - } - - return Collections.unmodifiableMap( modules ); - } - - /** - * Returns the upper most folder of this projects and all of its descendants (i.e. modules, their modules, etc.). - * - * @param project the project - * @return the shared folder - */ - public static File getJoinedFolder( MavenProject project ) - { - if ( project == null ) - { - return null; - } - - try - { - return getJoinedFolder( project.getBasedir(), project.getModel() ); - } - catch ( IOException e ) - { - // TODO Auto-generated catch block - e.printStackTrace(); - } - catch ( XmlPullParserException e ) - { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - return null; //@todo fix exception handling - } - - private static File getJoinedFolder( File baseDirectory, Model model ) - throws IOException, XmlPullParserException - { - File joinedFolder = baseDirectory; - - for ( String module : getAllModules( model ).keySet() ) - { - File moduleFile = getModuleFile( baseDirectory, module ); - - Model submodel = readModel( moduleFile ); - - File modulesJoinedFolder = getJoinedFolder( moduleFile.getParentFile(), submodel ); - - joinedFolder = getJoinedFolder( joinedFolder, modulesJoinedFolder ); - } - - return joinedFolder; - } - - // Don't make this method public, it has nothing to do with a MavenProject. - // If required on more places, create a separate Utils-class - protected static File getJoinedFolder( File lhs, File rhs ) - { - File joinedFolder = null; - - Stack<File> lhsStack = new Stack<File>(); - - File lhsAncestor = lhs; - - while ( lhsAncestor != null ) - { - lhsAncestor = lhsStack.push( lhsAncestor ).getParentFile(); - } - - Stack<File> rhsStack = new Stack<File>(); - - File rhsAncestor = rhs; - - while ( rhsAncestor != null ) - { - rhsAncestor = rhsStack.push( rhsAncestor ).getParentFile(); - } - - while ( !lhsStack.isEmpty() && !rhsStack.isEmpty() ) - { - File nextFile = lhsStack.pop(); - - if ( nextFile.isDirectory() && nextFile.equals( rhsStack.pop() ) ) - { - joinedFolder = nextFile; - } - } - - return joinedFolder; - } -} +package org.apache.maven.shared.project.utils; + +/* + * 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. + */ + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.Stack; + +import org.apache.maven.model.Model; +import org.apache.maven.model.Profile; +import org.apache.maven.model.io.xpp3.MavenXpp3Reader; +import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.util.IOUtil; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; + +/** + * + */ +public final class ProjectUtils +{ + // This instance is often used, including in recursive methods, so initiate it for general usage + private static final MavenXpp3Reader POM_READER = new MavenXpp3Reader(); + + private ProjectUtils() + { + } + + /** + * Returns {@code true} if this project has no parent, or it has a parent but isn't one of its modules. + * + * @param project the project to verify + * @return {@code true} if this is a root project, otherwise {@code false} + */ + public static boolean isRootProject( MavenProject project ) + { + if ( !project.hasParent() ) + { + return true; + } + + MavenProject parent = project.getParent(); + + // (not) being a rootProject must never depend on reactor projects or active profiles + for ( String module : getAllModules( parent ).keySet() ) + { + File moduleFile = getModuleFile( parent, module ); + + if ( moduleFile.equals( project.getFile() ) ) + { + // project is a module of its parent + return false; + } + } + + // project isn't a module of its parent + return true; + } + + /** + * Go through the ancestors to find the rootProject of this project. + * + * @param project the project + * @return the root project + * @see ProjectUtils#isRootProject(MavenProject) + */ + public static MavenProject getRootProject( MavenProject project ) + { + if ( project == null ) + { + return null; + } + + MavenProject current = project; + + while ( !isRootProject( current ) ) + { + current = current.getParent(); + } + + return current; + } + + /** + * Return {@code true} if this project has modules, but is <strong>never</strong> the parent of one of them.<br/> + * + * Return {@code false} if this project has no modules, or if 1 or more modules have this project as its parent. + * + * @param project + * @return {@code true} if project is an aggregator, {@code false} if project is standalone or hybrid + */ + public static boolean isAggregator( MavenProject project ) + { + // (not) being an aggregator must never depend on reactor projects or active profiles + Set<String> modules = getAllModules( project ).keySet(); + + if ( modules.isEmpty() ) + { + return false; + } + + for ( String module : modules ) + { + File moduleFile = getModuleFile( project, module ); + + Model model = null; + try + { + model = readModel( moduleFile ); + } + catch ( IOException e ) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + catch ( XmlPullParserException e ) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + if ( model.getParent() != null && model.getParent().getId().equals( project.getId() ) ) + { + return false; + } + + } + return true; + } + + private static Model readModel( File moduleFile ) throws IOException, XmlPullParserException + { + FileReader moduleReader = null; + + Model model = null; + + try + { + moduleReader = new FileReader( moduleFile ); + + model = POM_READER.read( moduleReader ); + } + finally + { + IOUtil.close( moduleReader ); + } + + return model; + } + + public static File getModuleFile( MavenProject project, String module ) + { + return getModuleFile( project.getBasedir(), module ); + } + + private static File getModuleFile( File basedir, String module ) + { + File moduleFile = new File( basedir, module ); + + if ( moduleFile.isDirectory() ) + { + moduleFile = new File( moduleFile, "pom.xml" ); + } + return moduleFile; + } + + + /** + * Returns all modules of a project, including does specified in profiles, both active and inactive. The key of the + * returned Map is the name of the module, the value refers to the source of the module (the project or a specific + * profile). + * + * @param project the project + * @return all modules, never {@code null} + */ + public static Map<String, String> getAllModules( MavenProject project ) + { + Model model = project.getModel(); + + return getAllModules( model ); + } + + private static Map<String, String> getAllModules( Model model ) + { + Map<String, String> modules = new LinkedHashMap<String, String>(); + + for ( String module : model.getModules() ) + { + modules.put( module, "project" ); // id? + } + + for ( Profile profile : model.getProfiles() ) + { + for ( String module : profile.getModules() ) + { + modules.put( module, "profile(id:" + profile.getId() + ")" ); + } + } + + return Collections.unmodifiableMap( modules ); + } + + /** + * Returns the upper most folder of this projects and all of its descendants (i.e. modules, their modules, etc.). + * + * @param project the project + * @return the shared folder + */ + public static File getJoinedFolder( MavenProject project ) + { + if ( project == null ) + { + return null; + } + + try + { + return getJoinedFolder( project.getBasedir(), project.getModel() ); + } + catch ( IOException e ) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + catch ( XmlPullParserException e ) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return null; //@todo fix exception handling + } + + private static File getJoinedFolder( File baseDirectory, Model model ) + throws IOException, XmlPullParserException + { + File joinedFolder = baseDirectory; + + for ( String module : getAllModules( model ).keySet() ) + { + File moduleFile = getModuleFile( baseDirectory, module ); + + Model submodel = readModel( moduleFile ); + + File modulesJoinedFolder = getJoinedFolder( moduleFile.getParentFile(), submodel ); + + joinedFolder = getJoinedFolder( joinedFolder, modulesJoinedFolder ); + } + + return joinedFolder; + } + + // Don't make this method public, it has nothing to do with a MavenProject. + // If required on more places, create a separate Utils-class + protected static File getJoinedFolder( File lhs, File rhs ) + { + File joinedFolder = null; + + Stack<File> lhsStack = new Stack<File>(); + + File lhsAncestor = lhs; + + while ( lhsAncestor != null ) + { + lhsAncestor = lhsStack.push( lhsAncestor ).getParentFile(); + } + + Stack<File> rhsStack = new Stack<File>(); + + File rhsAncestor = rhs; + + while ( rhsAncestor != null ) + { + rhsAncestor = rhsStack.push( rhsAncestor ).getParentFile(); + } + + while ( !lhsStack.isEmpty() && !rhsStack.isEmpty() ) + { + File nextFile = lhsStack.pop(); + + if ( nextFile.isDirectory() && nextFile.equals( rhsStack.pop() ) ) + { + joinedFolder = nextFile; + } + } + + return joinedFolder; + } +}