Author: brianf Date: Thu Jul 5 19:53:06 2007 New Revision: 553707 URL: http://svn.apache.org/viewvc?view=rev&rev=553707 Log: added new rule to ban snapshots
Added: maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/AbstractBanDependencies.java maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/BanSnapshots.java maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestBanSnapshots.java Modified: maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/BannedDependencies.java maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestBannedDependencies.java Added: maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/AbstractBanDependencies.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/AbstractBanDependencies.java?view=auto&rev=553707 ============================================================================== --- maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/AbstractBanDependencies.java (added) +++ maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/AbstractBanDependencies.java Thu Jul 5 19:53:06 2007 @@ -0,0 +1,160 @@ +package org.apache.maven.plugin.enforcer; + +/* + * 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.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.versioning.DefaultArtifactVersion; +import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; +import org.apache.maven.artifact.versioning.VersionRange; +import org.apache.maven.plugin.enforcer.util.EnforcerUtils; +import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.enforcer.rule.api.EnforcerRule; +import org.apache.maven.shared.enforcer.rule.api.EnforcerRuleException; +import org.apache.maven.shared.enforcer.rule.api.EnforcerRuleHelper; +import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; +import org.codehaus.plexus.util.StringUtils; + +/** + * Abstract Rule for banning dependencies + * + * @author <a href="mailto:[EMAIL PROTECTED]">Brian Fox</a> + * @version $Id$ + * + */ +public abstract class AbstractBanDependencies + implements EnforcerRule +{ + + + /** + * Specify if transitive dependencies should be searched + * (default) or only look at direct dependencies + * + * @parameter + */ + public boolean searchTransitive = true; + + /** + * Specify a friendly message if the rule fails. + * + * @parameter + */ + public String message = null; + + /** + * Execute the rule. + */ + public void execute( EnforcerRuleHelper helper ) + throws EnforcerRuleException + { + + // get the project + MavenProject project = null; + try + { + project = (MavenProject) helper.evaluate( "${project}" ); + } + catch ( ExpressionEvaluationException eee ) + { + throw new EnforcerRuleException( "Unable to retrieve the MavenProject: ", eee ); + } + + // get the correct list of dependencies + Set dependencies = null; + if ( searchTransitive ) + { + dependencies = project.getArtifacts(); + } + else + { + dependencies = project.getDependencyArtifacts(); + } + + // look for banned dependencies + Set foundExcludes = checkDependencies( dependencies ); + + // if any are found, fail the check but list all of + // them + if ( !foundExcludes.isEmpty() ) + { + if ( message == null ) + { + StringBuffer buf = new StringBuffer(); + Iterator iter = foundExcludes.iterator(); + while ( iter.hasNext() ) + { + buf.append( "Found Banned Dependency: " + ( (Artifact) iter.next() ).getId() + "\n" ); + } + message = buf.toString(); + } + throw new EnforcerRuleException( message ); + } + + } + + /** + * Checks the set of dependencies against the list of + * excludes + * + * @param dependencies + * @return + * @throws EnforcerRuleException + */ + abstract protected Set checkDependencies( Set dependencies ) + throws EnforcerRuleException; + + /** + * @return the message + */ + public String getMessage() + { + return this.message; + } + + /** + * @param theMessage the message to set + */ + public void setMessage( String theMessage ) + { + this.message = theMessage; + } + + /** + * @return the searchTransitive + */ + public boolean isSearchTransitive() + { + return this.searchTransitive; + } + + /** + * @param theSearchTransitive the searchTransitive to set + */ + public void setSearchTransitive( boolean theSearchTransitive ) + { + this.searchTransitive = theSearchTransitive; + } +} Added: maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/BanSnapshots.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/BanSnapshots.java?view=auto&rev=553707 ============================================================================== --- maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/BanSnapshots.java (added) +++ maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/BanSnapshots.java Thu Jul 5 19:53:06 2007 @@ -0,0 +1,77 @@ +package org.apache.maven.plugin.enforcer; + +/* + * 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.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.versioning.DefaultArtifactVersion; +import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; +import org.apache.maven.artifact.versioning.VersionRange; +import org.apache.maven.plugin.enforcer.util.EnforcerUtils; +import org.apache.maven.project.MavenProject; +import org.apache.maven.shared.enforcer.rule.api.EnforcerRule; +import org.apache.maven.shared.enforcer.rule.api.EnforcerRuleException; +import org.apache.maven.shared.enforcer.rule.api.EnforcerRuleHelper; +import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; +import org.codehaus.plexus.util.StringUtils; + +/** + * This rule checks that no snapshots are included. + * + * @author <a href="mailto:[EMAIL PROTECTED]">Brian Fox</a> + * @version $Id$ + * + */ +public class BanSnapshots + extends AbstractBanDependencies +{ + + /** + * Checks the set of dependencies to see if any + * snapshots are included + * + * @param dependencies + * @return + * @throws EnforcerRuleException + */ + protected Set checkDependencies( Set dependencies ) + throws EnforcerRuleException + { + Set foundExcludes = new HashSet(); + + Iterator DependencyIter = dependencies.iterator(); + while ( DependencyIter.hasNext() ) + { + Artifact artifact = (Artifact) DependencyIter.next(); + + if ( artifact.isSnapshot() ) + { + foundExcludes.add( artifact ); + } + } + + return foundExcludes; + } +} Modified: maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/BannedDependencies.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/BannedDependencies.java?view=diff&rev=553707&r1=553706&r2=553707 ============================================================================== --- maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/BannedDependencies.java (original) +++ maven/plugins/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugin/enforcer/BannedDependencies.java Thu Jul 5 19:53:06 2007 @@ -46,84 +46,29 @@ * */ public class BannedDependencies - implements EnforcerRule + extends AbstractBanDependencies { /** * Specify the banned dependencies. This can be a list * of artifacts in the format - * groupId[:artifactId][:version] - * Any of the sections can be a wildcard by using '*' (ie group:*:1.0) + * groupId[:artifactId][:version] Any of the sections + * can be a wildcard by using '*' (ie group:*:1.0) * * @parameter * @required */ public ArrayList excludes = null; - /** - * Specify if transitive dependencies should be searched - * (default) or only look at direct dependencies + /* + * (non-Javadoc) * - * @parameter - */ - public boolean searchTransitive = true; - - /** - * Specify a friendly message if the rule fails. - * - * @parameter + * @see org.apache.maven.plugin.enforcer.AbstractBanDependencies#checkDependencies(java.util.Set) */ - public String message = null; - - /** - * Execute the rule. - */ - public void execute( EnforcerRuleHelper helper ) + protected Set checkDependencies( Set theDependencies ) throws EnforcerRuleException { - - // get the project - MavenProject project = null; - try - { - project = (MavenProject) helper.evaluate( "${project}" ); - } - catch ( ExpressionEvaluationException eee ) - { - throw new EnforcerRuleException( "Unable to retrieve the MavenProject: ", eee ); - } - - // get the correct list of dependencies - Set dependencies = null; - if ( searchTransitive ) - { - dependencies = project.getArtifacts(); - } - else - { - dependencies = project.getDependencyArtifacts(); - } - - // look for banned dependencies - Set foundExcludes = checkDependencies( dependencies, excludes ); - - // if any are found, fail the check but list all of - // them - if ( !foundExcludes.isEmpty() ) - { - if ( message == null ) - { - StringBuffer buf = new StringBuffer(); - Iterator iter = foundExcludes.iterator(); - while ( iter.hasNext() ) - { - buf.append( "Found Banned Dependency: " + ( (Artifact) iter.next() ).getId() + "\n" ); - } - message = buf.toString(); - } - throw new EnforcerRuleException( message ); - } - + return checkDependencies( theDependencies, excludes ); } /** @@ -134,7 +79,7 @@ * @return * @throws EnforcerRuleException */ - protected Set checkDependencies( Set dependencies, List theExcludes ) + private Set checkDependencies( Set dependencies, List theExcludes ) throws EnforcerRuleException { Set foundExcludes = new HashSet(); @@ -145,8 +90,8 @@ String exclude = (String) iter.next(); String[] subStrings = exclude.split( ":" ); - subStrings = StringUtils.stripAll(subStrings); - + subStrings = StringUtils.stripAll( subStrings ); + Iterator DependencyIter = dependencies.iterator(); while ( DependencyIter.hasNext() ) { @@ -227,35 +172,4 @@ this.excludes = theExcludes; } - /** - * @return the message - */ - public String getMessage() - { - return this.message; - } - - /** - * @param theMessage the message to set - */ - public void setMessage( String theMessage ) - { - this.message = theMessage; - } - - /** - * @return the searchTransitive - */ - public boolean isSearchTransitive() - { - return this.searchTransitive; - } - - /** - * @param theSearchTransitive the searchTransitive to set - */ - public void setSearchTransitive( boolean theSearchTransitive ) - { - this.searchTransitive = theSearchTransitive; - } } Added: maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestBanSnapshots.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestBanSnapshots.java?view=auto&rev=553707 ============================================================================== --- maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestBanSnapshots.java (added) +++ maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestBanSnapshots.java Thu Jul 5 19:53:06 2007 @@ -0,0 +1,87 @@ +package org.apache.maven.plugin.enforcer; + +/* + * 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 junit.framework.TestCase; + +import org.apache.maven.plugin.testing.ArtifactStubFactory; +import org.apache.maven.shared.enforcer.rule.api.EnforcerRuleException; +import org.apache.maven.shared.enforcer.rule.api.EnforcerRuleHelper; + +/** + * + * @author <a href="mailto:[EMAIL PROTECTED]">Brian Fox</a> + * + */ +public class TestBanSnapshots + extends TestCase +{ + + public void testRule() + throws IOException + { + ArtifactStubFactory factory = new ArtifactStubFactory(); + MockProject project = new MockProject(); + EnforcerRuleHelper helper = EnforcerTestUtils.getHelper( project ); + project.setArtifacts( factory.getMixedArtifacts() ); + project.setDependencyArtifacts( factory.getScopedArtifacts() ); + BanSnapshots rule = new BanSnapshots(); + + rule.setSearchTransitive( false ); + + execute( rule, helper, false ); + + rule.setSearchTransitive( true ); + + execute( rule, helper, true ); + + } + + /** + * Simpler wrapper to execute and deal with the expected + * result. + * + * @param rule + * @param helper + * @param shouldFail + */ + private void execute( BanSnapshots rule, EnforcerRuleHelper helper, boolean shouldFail ) + { + try + { + rule.message = null; + rule.execute( helper ); + if ( shouldFail ) + { + fail( "Exception expected." ); + } + } + catch ( EnforcerRuleException e ) + { + if ( !shouldFail ) + { + fail( "No Exception expected:" + e.getLocalizedMessage() ); + } + // helper.getLog().debug(e.getMessage()); + } + } +} Modified: maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestBannedDependencies.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestBannedDependencies.java?view=diff&rev=553707&r1=553706&r2=553707 ============================================================================== --- maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestBannedDependencies.java (original) +++ maven/plugins/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugin/enforcer/TestBannedDependencies.java Thu Jul 5 19:53:06 2007 @@ -25,7 +25,6 @@ import junit.framework.TestCase; import org.apache.maven.plugin.testing.ArtifactStubFactory; -import org.apache.maven.shared.enforcer.rule.api.EnforcerRule; import org.apache.maven.shared.enforcer.rule.api.EnforcerRuleException; import org.apache.maven.shared.enforcer.rule.api.EnforcerRuleHelper; @@ -41,7 +40,7 @@ public void testRule() throws IOException { - ArtifactStubFactory factory = new ArtifactStubFactory( null, false ); + ArtifactStubFactory factory = new ArtifactStubFactory(); MockProject project = new MockProject(); EnforcerRuleHelper helper = EnforcerTestUtils.getHelper( project ); project.setArtifacts( factory.getMixedArtifacts() );