Author: jdcasey Date: Tue May 31 12:31:58 2005 New Revision: 179265 URL: http://svn.apache.org/viewcvs?rev=179265&view=rev Log: o Added runtime exception to construction of DefaultArtifact, when one or more of the four attributes required for object identity are null o Created corresponding runtime exception: InvalidArtifactRTException o Added error diagnoser for InvalidArtifactRTException o Changed logError() in DefaultMaven to use error diagnosers (even the devs could use a hand!) o Added unit test for InvalidArtifactDiagnoser.
Added: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/InvalidArtifactRTException.java (with props) maven/components/trunk/maven-core/src/main/java/org/apache/maven/usability/InvalidArtifactDiagnoser.java (with props) maven/components/trunk/maven-core/src/test/java/org/apache/maven/usability/InvalidArtifactDiagnoserTest.java (with props) Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml Modified: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java?rev=179265&r1=179264&r2=179265&view=diff ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java (original) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java Tue May 31 12:31:58 2005 @@ -69,40 +69,47 @@ String type, String classifier ) { - // These should help us catch coding errors until this code gets a whole lot clearer - if( groupId == null ) + this.groupId = groupId; + + this.artifactId = artifactId; + + this.version = version; + + this.type = type; + + this.scope = scope; + + this.classifier = classifier; + + validateIdentity(); + } + + private void validateIdentity() + { + if( empty( groupId ) ) { - throw new NullPointerException( "Artifact groupId cannot be null." ); + throw new InvalidArtifactRTException( groupId, artifactId, version, type, "The groupId cannot be empty." ); } if( artifactId == null ) { - throw new NullPointerException( "Artifact artifactId cannot be null." ); + throw new InvalidArtifactRTException( groupId, artifactId, version, type, "The artifactId cannot be empty." ); } - // From here at least we can report the g:a - if ( type == null ) { - throw new NullPointerException( "Artifact type cannot be null for " + groupId + ":" + artifactId ); + throw new InvalidArtifactRTException( groupId, artifactId, version, type, "The type cannot be empty." ); } if( version == null ) { - throw new NullPointerException( "Artifact version cannot be null for " + groupId + ":" + artifactId ); + throw new InvalidArtifactRTException( groupId, artifactId, version, type, "The version cannot be empty." ); } + } - this.groupId = groupId; - - this.artifactId = artifactId; - - this.version = version; - - this.type = type; - - this.scope = scope; - - this.classifier = classifier; + private boolean empty( String value ) + { + return value == null || value.trim().length() < 1; } public DefaultArtifact( String groupId, String artifactId, String version, String scope, String type ) Added: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/InvalidArtifactRTException.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/InvalidArtifactRTException.java?rev=179265&view=auto ============================================================================== --- maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/InvalidArtifactRTException.java (added) +++ maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/InvalidArtifactRTException.java Tue May 31 12:31:58 2005 @@ -0,0 +1,85 @@ +package org.apache.maven.artifact; + + +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed 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. + */ + +public class InvalidArtifactRTException + extends RuntimeException +{ + + private final String groupId; + private final String artifactId; + private final String version; + private final String type; + private final String baseMessage; + + public InvalidArtifactRTException( String groupId, String artifactId, String version, String type, String message ) + { + this.groupId = groupId; + this.artifactId = artifactId; + this.version = version; + this.type = type; + this.baseMessage = message; + } + + public InvalidArtifactRTException( String groupId, String artifactId, String version, String type, String message, Throwable cause ) + { + super( cause ); + + this.groupId = groupId; + this.artifactId = artifactId; + this.version = version; + this.type = type; + this.baseMessage = message; + } + + public String getMessage() + { + return "For artifact {" + getArtifactKey() + "}: " + getBaseMessage(); + } + + public String getBaseMessage() + { + return baseMessage; + } + + public String getArtifactId() + { + return artifactId; + } + + public String getGroupId() + { + return groupId; + } + + public String getType() + { + return type; + } + + public String getVersion() + { + return version; + } + + public String getArtifactKey() + { + return groupId + ":" + artifactId + ":" + version + ":" + type; + } + +} Propchange: maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/InvalidArtifactRTException.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author" Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java?rev=179265&r1=179264&r2=179265&view=diff ============================================================================== --- maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java (original) +++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/DefaultMaven.java Tue May 31 12:31:58 2005 @@ -380,7 +380,32 @@ getLogger().error( "BUILD ERROR" ); line(); + + Throwable error = r.getException(); + String message = null; + if ( errorDiagnosers != null ) + { + for ( Iterator it = errorDiagnosers.values().iterator(); it.hasNext(); ) + { + ErrorDiagnoser diagnoser = (ErrorDiagnoser) it.next(); + + if ( diagnoser.canDiagnose( error ) ) + { + message = diagnoser.diagnose( error ); + } + } + } + + if ( message == null ) + { + message = error.getMessage(); + } + + getLogger().info( "Diagnosis: " + message ); + + line(); + getLogger().error( "Cause: ", r.getException() ); line(); @@ -390,7 +415,7 @@ line(); } - protected void logFailure( MavenExecutionResponse r, Throwable e, String longMessage ) + protected void logFailure( MavenExecutionResponse r, Throwable error, String longMessage ) { line(); @@ -405,16 +430,16 @@ { ErrorDiagnoser diagnoser = (ErrorDiagnoser) it.next(); - if ( diagnoser.canDiagnose( e ) ) + if ( diagnoser.canDiagnose( error ) ) { - message = diagnoser.diagnose( e ); + message = diagnoser.diagnose( error ); } } } if ( message == null ) { - message = "Reason: " + e.getMessage(); + message = "Reason: " + error.getMessage(); } getLogger().info( message ); @@ -431,7 +456,7 @@ // TODO: needs to honour -e if ( getLogger().isDebugEnabled() ) { - getLogger().debug( "Trace", e ); + getLogger().debug( "Trace", error ); line(); } Added: maven/components/trunk/maven-core/src/main/java/org/apache/maven/usability/InvalidArtifactDiagnoser.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/usability/InvalidArtifactDiagnoser.java?rev=179265&view=auto ============================================================================== --- maven/components/trunk/maven-core/src/main/java/org/apache/maven/usability/InvalidArtifactDiagnoser.java (added) +++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/usability/InvalidArtifactDiagnoser.java Tue May 31 12:31:58 2005 @@ -0,0 +1,61 @@ +package org.apache.maven.usability; + +import org.apache.maven.artifact.InvalidArtifactRTException; + +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed 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. + */ + +public class InvalidArtifactDiagnoser + implements ErrorDiagnoser +{ + + public boolean canDiagnose( Throwable error ) + { + return error instanceof InvalidArtifactRTException; + } + + public String diagnose( Throwable error ) + { + StringBuffer diagnosis = new StringBuffer(); + + InvalidArtifactRTException e = (InvalidArtifactRTException) error; + + diagnosis.append( "An invalid artifact was detected.\n\n" ) + .append( "This artifact might be in your project's POM, ") + .append( "or it might have been included transitively during the resolution process. ") + .append( "Here is the information we do have for this artifact:\n") + .append( "\n o GroupID: ").append( maybeFlag( e.getGroupId() ) ) + .append( "\n o ArtifactID: ").append( maybeFlag( e.getArtifactId() ) ) + .append( "\n o Version: ").append( maybeFlag( e.getVersion() ) ) + .append( "\n o Type: ").append( maybeFlag( e.getType() ) ) + .append( "\n" ); + + return diagnosis.toString(); + } + + private String maybeFlag( String value ) + { + if( value == null || value.trim().length() < 1 ) + { + return "<<< MISSING >>>"; + } + else + { + return value; + } + } + +} Propchange: maven/components/trunk/maven-core/src/main/java/org/apache/maven/usability/InvalidArtifactDiagnoser.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author" Modified: maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml?rev=179265&r1=179264&r2=179265&view=diff ============================================================================== --- maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml (original) +++ maven/components/trunk/maven-core/src/main/resources/META-INF/plexus/components.xml Tue May 31 12:31:58 2005 @@ -26,23 +26,33 @@ </component> <!-- | - | + |PluginConfigurationDiagnoser | --> <component> <role>org.apache.maven.usability.ErrorDiagnoser</role> - <role-hint>plugin-configuration</role-hint> + <role-hint>PluginConfigurationDiagnoser</role-hint> <implementation>org.apache.maven.usability.PluginConfigurationDiagnoser</implementation> </component> <!-- | - | + |ArtifactResolverDiagnoser | --> <component> <role>org.apache.maven.usability.ErrorDiagnoser</role> - <role-hint>artifact-resolution</role-hint> + <role-hint>ArtifactResolverDiagnoser</role-hint> <implementation>org.apache.maven.usability.ArtifactResolverDiagnoser</implementation> + </component> + <!-- + | + |InvalidArtifactDiagnoser + | + --> + <component> + <role>org.apache.maven.usability.ErrorDiagnoser</role> + <role-hint>InvalidArtifactDiagnoser</role-hint> + <implementation>org.apache.maven.usability.InvalidArtifactDiagnoser</implementation> </component> <!-- | Added: maven/components/trunk/maven-core/src/test/java/org/apache/maven/usability/InvalidArtifactDiagnoserTest.java URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/test/java/org/apache/maven/usability/InvalidArtifactDiagnoserTest.java?rev=179265&view=auto ============================================================================== --- maven/components/trunk/maven-core/src/test/java/org/apache/maven/usability/InvalidArtifactDiagnoserTest.java (added) +++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/usability/InvalidArtifactDiagnoserTest.java Tue May 31 12:31:58 2005 @@ -0,0 +1,82 @@ +package org.apache.maven.usability; + +import org.apache.maven.artifact.DefaultArtifact; + +import junit.framework.TestCase; + +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * Licensed 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. + */ + +public class InvalidArtifactDiagnoserTest + extends TestCase +{ + + private InvalidArtifactDiagnoser diagnoser = new InvalidArtifactDiagnoser(); + + public void testShouldDiagnoseArtifactWithMissingGroupId() throws Throwable + { + testDiagnosis( "Test diagnosis for missing groupId", null, "test-artifact", "1.0", "jar" ); + } + + public void testShouldDiagnoseArtifactWithMissingArtifactId() throws Throwable + { + testDiagnosis( "Test diagnosis for missing artifactId", "test.group.id", null, "1.0", "jar" ); + } + + public void testShouldDiagnoseArtifactWithMissingVersion() throws Throwable + { + testDiagnosis( "Test diagnosis for missing version", "test.group.id", "test-artifact", null, "jar" ); + } + + public void testShouldDiagnoseArtifactWithMissingType() throws Throwable + { + testDiagnosis( "Test diagnosis for missing type", "test.group.id", "test-artifact", "1.0", null ); + } + + public void testShouldDiagnoseArtifactWithMissingGroupIdAndArtifactId() throws Throwable + { + testDiagnosis( "Test diagnosis for missing groupId and artifactId", null, null, "1.0", "jar" ); + } + + private void testDiagnosis( String testHeader, String groupId, String artifactId, String version, String type ) + throws Throwable + { + System.out.println( "------------------------------------------------------------" ); + System.out.println( "| " + testHeader ); + System.out.println( "------------------------------------------------------------" ); + System.out.println(); + + try + { + new DefaultArtifact( groupId, artifactId, version, type ); + + fail( "artifact creation did not fail; nothing to diagnose." ); + } + catch ( Throwable error ) + { + assertTrue( "Unexpected error while constructing artifact: " + error, diagnoser.canDiagnose( error ) ); + + if ( diagnoser.canDiagnose( error ) ) + { + System.out.println( diagnoser.diagnose( error ) ); + } + else + { + throw error; + } + } + } +} Propchange: maven/components/trunk/maven-core/src/test/java/org/apache/maven/usability/InvalidArtifactDiagnoserTest.java ------------------------------------------------------------------------------ svn:keywords = "Date Rev Author" --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]