jdcasey 2005/04/20 16:06:04 Modified: maven-artifact/src/main/java/org/apache/maven/artifact/construction ArtifactConstructionSupport.java sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean/discover LegacyArtifactDiscoverer.java Log: o Improved support for classifier parsing and added test artifact to the test repository for this. o Fixed issue in createXXX(..) method for constructing an artifact with a classifier...it was not actually calling the constructor that passes in the classifier. PR: MNG-312 Revision Changes Path 1.8 +3 -1 maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/construction/ArtifactConstructionSupport.java Index: ArtifactConstructionSupport.java =================================================================== RCS file: /home/cvs/maven-components/maven-artifact/src/main/java/org/apache/maven/artifact/construction/ArtifactConstructionSupport.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- ArtifactConstructionSupport.java 15 Apr 2005 07:31:40 -0000 1.7 +++ ArtifactConstructionSupport.java 20 Apr 2005 23:06:04 -0000 1.8 @@ -69,6 +69,8 @@ desiredScope = Artifact.SCOPE_TEST; } - return new DefaultArtifact( groupId, artifactId, version, desiredScope, type ); + DefaultArtifact artifact = new DefaultArtifact( groupId, artifactId, version, desiredScope, type, classifier ); + + return artifact; } } 1.10 +77 -38 maven-components/sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean/discover/LegacyArtifactDiscoverer.java Index: LegacyArtifactDiscoverer.java =================================================================== RCS file: /home/cvs/maven-components/sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean/discover/LegacyArtifactDiscoverer.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- LegacyArtifactDiscoverer.java 20 Apr 2005 22:10:24 -0000 1.9 +++ LegacyArtifactDiscoverer.java 20 Apr 2005 23:06:04 -0000 1.10 @@ -156,65 +156,95 @@ // Since version is at the end, we have to move in from the back. Collections.reverse( avceTokenList ); - String classifier = null; + StringBuffer classifierBuffer = new StringBuffer(); StringBuffer versionBuffer = new StringBuffer(); - boolean inFirstToken = true; + boolean firstVersionTokenEncountered = false; + boolean firstToken = true; + + int tokensIterated = 0; for ( Iterator it = avceTokenList.iterator(); it.hasNext(); ) { String token = (String) it.next(); boolean tokenIsVersionPart = token.matches( validVersionParts ); - if ( inFirstToken && !tokenIsVersionPart ) - { - classifier = token; - } - else if ( tokenIsVersionPart ) + + StringBuffer bufferToUpdate = null; + + // NOTE: logic in code is reversed, since we're peeling off the back + // Any token after the last versionPart will be in the classifier. + // Any token UP TO first non-versionPart is part of the version. + if ( !tokenIsVersionPart ) { - if ( !inFirstToken ) + if ( firstVersionTokenEncountered ) { - versionBuffer.insert( 0, '-' ); + break; + } + else + { + bufferToUpdate = classifierBuffer; } - - versionBuffer.insert( 0, token ); } else { - // if we didn't find a version, but we did find a 'classifier', - // then push that classifier back onto the list...chances are, - // it doesn't have a version or a classifier if this is the case. - if ( versionBuffer.length() < 1 && classifier != null ) - { - avceTokenList.addFirst( classifier ); - } + firstVersionTokenEncountered = true; - // we've discovered all the version parts. break the loop. - break; + bufferToUpdate = versionBuffer; } - if ( inFirstToken ) + if ( firstToken ) { - inFirstToken = false; + firstToken = false; } + else + { + bufferToUpdate.insert( 0, '-' ); + } + + bufferToUpdate.insert( 0, token ); - // pop the token off the list so it doesn't appear in the - // artifactId. - it.remove(); + tokensIterated++; } + + getLogger().debug("After parsing loop, state of buffers:\no Version Buffer: \'" + versionBuffer + "\'\no Classifier Buffer: \'" + classifierBuffer + "\'\no Number of Tokens Iterated: " + tokensIterated); // Now, restore the proper ordering so we can build the artifactId. Collections.reverse( avceTokenList ); + + getLogger().debug("Before repairing bad version and/or cleaning up used tokens, avce token list is:\n" + avceTokenList); + + // if we didn't find a version, then punt. Use the last token + // as the version, and set the classifier empty. + if ( versionBuffer.length() < 1 ) + { + int lastIdx = avceTokenList.size() - 1; + + versionBuffer.append( avceTokenList.get( lastIdx ) ); + avceTokenList.remove( lastIdx ); + + classifierBuffer.setLength( 0 ); + } + else + { + getLogger().debug("Removing " + tokensIterated + " tokens from avce token list."); + + // if everything is kosher, then pop off all the classifier and + // version tokens, leaving the naked artifact id in the list. + avceTokenList = new LinkedList( avceTokenList.subList( 0, avceTokenList.size() - ( tokensIterated ) ) ); + } + + getLogger().debug("Now, remainder of avce token list is:\n" + avceTokenList); StringBuffer artifactIdBuffer = new StringBuffer(); - inFirstToken = true; + firstToken = true; for ( Iterator it = avceTokenList.iterator(); it.hasNext(); ) { String token = (String) it.next(); - if ( inFirstToken ) + if ( firstToken ) { - inFirstToken = false; + firstToken = false; } else { @@ -240,20 +270,29 @@ } getLogger().debug( - "Extracted artifact information from path:\n" + "groupId: \'" + groupId + "\'\n" - + "artifactId: \'" + artifactId + "\'\n" + "type: \'" + type + "\'\n" + "version: \'" - + version + "\'\n" + "classifier: \'" + classifier + "\'" ); - - if ( classifier != null ) - { - return artifactConstructionSupport.createArtifactWithClassifier( groupId, artifactId, version, - Artifact.SCOPE_RUNTIME, type, classifier ); + "Extracted artifact information from path:\n" + "groupId: \'" + groupId + "\'\n" + + "artifactId: \'" + artifactId + "\'\n" + "type: \'" + type + "\'\n" + "version: \'" + + version + "\'\n" + "classifier: \'" + classifierBuffer.toString() + "\'" ); + + Artifact result = null; + + if ( classifierBuffer.length() > 0 ) + { + getLogger().debug("Creating artifact with classifier."); + + result = artifactConstructionSupport.createArtifactWithClassifier( groupId, artifactId, version, + Artifact.SCOPE_RUNTIME, type, + classifierBuffer.toString() ); } else { - return artifactConstructionSupport.createArtifact( groupId, artifactId, version, Artifact.SCOPE_RUNTIME, - type ); + result = artifactConstructionSupport.createArtifact( groupId, artifactId, version, Artifact.SCOPE_RUNTIME, + type ); } + + getLogger().debug( "Resulting artifact is: " + result.getId() + " and has classifier of: " + result.getClassifier() + "\n\n" ); + + return result; } } \ No newline at end of file
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]