diff options
3 files changed, 106 insertions, 90 deletions
diff --git a/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArchivaCli.java b/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArchivaCli.java index a9bae8f48..5e023f08d 100644 --- a/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArchivaCli.java +++ b/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArchivaCli.java @@ -19,6 +19,9 @@ package org.apache.maven.archiva.cli; * under the License. */ +import com.sampullara.cli.Args; +import com.sampullara.cli.Argument; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -31,6 +34,7 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; import org.apache.maven.archiva.consumers.ConsumerException; @@ -46,14 +50,11 @@ import org.apache.maven.artifact.manager.WagonManager; import org.codehaus.plexus.spring.PlexusClassPathXmlApplicationContext; import org.codehaus.plexus.spring.PlexusToSpringUtils; -import com.sampullara.cli.Args; -import com.sampullara.cli.Argument; - /** * ArchivaCli - * - * @todo add back reading of archiva.xml from a given location + * * @version $Id$ + * @todo add back reading of archiva.xml from a given location */ public class ArchivaCli { @@ -71,7 +72,8 @@ public class ArchivaCli throws IOException { Properties properties = new Properties(); - properties.load( ArchivaCli.class.getResourceAsStream( "/META-INF/maven/org.apache.archiva/archiva-cli/pom.properties" ) ); + properties.load( + ArchivaCli.class.getResourceAsStream( "/META-INF/maven/org.apache.archiva/archiva-cli/pom.properties" ) ); return properties.getProperty( "version" ); } @@ -79,9 +81,8 @@ public class ArchivaCli public ArchivaCli() { - applicationContext = - new PlexusClassPathXmlApplicationContext( new String[] { "classpath*:/META-INF/spring-context.xml", - "classpath*:/META-INF/plexus/components.xml" } ); + applicationContext = new PlexusClassPathXmlApplicationContext( + new String[]{"classpath*:/META-INF/spring-context.xml", "classpath*:/META-INF/plexus/components.xml"} ); } public static void main( String[] args ) @@ -144,8 +145,8 @@ public class ArchivaCli { // hack around poorly configurable project builder by pointing all repositories back at this location to be self // contained - WagonManager wagonManager = - (WagonManager) applicationContext.getBean( PlexusToSpringUtils.buildSpringId( WagonManager.class.getName() ) ); + WagonManager wagonManager = (WagonManager) applicationContext.getBean( + PlexusToSpringUtils.buildSpringId( WagonManager.class.getName() ) ); wagonManager.addMirror( "internal", "*", new File( path ).toURL().toExternalForm() ); ManagedRepositoryConfiguration repo = new ManagedRepositoryConfiguration(); @@ -166,9 +167,8 @@ public class ArchivaCli try { - RepositoryScanStatistics stats = - scanner.scan( repo, knownConsumerList, invalidConsumerList, ignoredContent, - RepositoryScanner.FRESH_SCAN ); + RepositoryScanStatistics stats = scanner.scan( repo, knownConsumerList, invalidConsumerList, ignoredContent, + RepositoryScanner.FRESH_SCAN ); System.out.println( "\n" + stats.toDump( repo ) ); } @@ -215,12 +215,12 @@ public class ArchivaCli { String consumerHint = (String) entry.getKey(); RepositoryContentConsumer consumer = (RepositoryContentConsumer) entry.getValue(); - System.out.println( " " + consumerHint + ": " + consumer.getDescription() + " (" - + consumer.getClass().getName() + ")" ); + System.out.println( + " " + consumerHint + ": " + consumer.getDescription() + " (" + consumer.getClass().getName() + ")" ); } } - @SuppressWarnings( "unchecked" ) + @SuppressWarnings("unchecked") private Map<String, KnownRepositoryContentConsumer> getConsumers() { return PlexusToSpringUtils.lookupMap( "knownRepositoryContentConsumer", applicationContext ); @@ -234,7 +234,16 @@ public class ArchivaCli Properties p = new Properties(); - p.load( new FileInputStream( properties ) ); + FileInputStream fis = new FileInputStream( properties ); + + try + { + p.load( fis ); + } + finally + { + IOUtils.closeQuietly( fis ); + } File oldRepositoryPath = new File( p.getProperty( SOURCE_REPO_PATH ) ); @@ -251,33 +260,36 @@ public class ArchivaCli fileExclusionPatterns = Arrays.asList( StringUtils.split( s, "," ) ); } - legacyRepositoryConverter.convertLegacyRepository( oldRepositoryPath, newRepositoryPath, fileExclusionPatterns ); + legacyRepositoryConverter.convertLegacyRepository( oldRepositoryPath, newRepositoryPath, + fileExclusionPatterns ); } private static class Commands { - @Argument( description = "Display help information", value = "help", alias = "h" ) + @Argument(description = "Display help information", value = "help", alias = "h") private boolean help; - @Argument( description = "Display version information", value = "version", alias = "v" ) + @Argument(description = "Display version information", value = "version", alias = "v") private boolean version; - @Argument( description = "List available consumers", value = "listconsumers", alias = "l" ) + @Argument(description = "List available consumers", value = "listconsumers", alias = "l") private boolean listConsumers; - @Argument( description = "The consumers to use (comma delimited)", value = "consumers", alias = "u" ) + @Argument(description = "The consumers to use (comma delimited)", value = "consumers", alias = "u") private String consumers = "count-artifacts"; - @Argument( description = "Scan the specified repository", value = "scan", alias = "s" ) + @Argument(description = "Scan the specified repository", value = "scan", alias = "s") private boolean scan; - @Argument( description = "Convert a legacy Maven 1.x repository to a Maven 2.x repository using a properties file to describe the conversion", value = "convert", alias = "c" ) + @Argument( + description = "Convert a legacy Maven 1.x repository to a Maven 2.x repository using a properties file to describe the conversion", + value = "convert", alias = "c") private boolean convert; - @Argument( description = "The properties file for the converstion", value = "properties" ) + @Argument(description = "The properties file for the converstion", value = "properties") private String properties = "conversion.properties"; - @Argument( description = "The repository to scan", value = "repository" ) + @Argument(description = "The repository to scan", value = "repository") private String repository; } } diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java index 0071d1153..4454f0445 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/UploadAction.java @@ -19,6 +19,9 @@ package org.apache.maven.archiva.web.action; * under the License. */ +import com.opensymphony.xwork2.Preparable; +import com.opensymphony.xwork2.Validateable; + import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -27,13 +30,15 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; -import java.util.Date; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.TimeZone; import org.apache.archiva.checksum.ChecksumAlgorithm; import org.apache.archiva.checksum.ChecksummedFile; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.lang.StringUtils; import org.apache.maven.archiva.common.utils.VersionComparator; import org.apache.maven.archiva.common.utils.VersionUtil; import org.apache.maven.archiva.configuration.ArchivaConfiguration; @@ -46,7 +51,6 @@ import org.apache.maven.archiva.repository.ManagedRepositoryContent; import org.apache.maven.archiva.repository.RepositoryContentFactory; import org.apache.maven.archiva.repository.RepositoryException; import org.apache.maven.archiva.repository.RepositoryNotFoundException; -import org.apache.maven.archiva.repository.scanner.RepositoryContentConsumers; import org.apache.maven.archiva.repository.audit.AuditEvent; import org.apache.maven.archiva.repository.audit.Auditable; import org.apache.maven.archiva.repository.metadata.MetadataTools; @@ -56,6 +60,7 @@ import org.apache.maven.archiva.repository.metadata.RepositoryMetadataWriter; import org.apache.maven.archiva.repository.project.ProjectModelException; import org.apache.maven.archiva.repository.project.ProjectModelWriter; import org.apache.maven.archiva.repository.project.writers.ProjectModel400Writer; +import org.apache.maven.archiva.repository.scanner.RepositoryContentConsumers; import org.apache.maven.archiva.scheduled.ArchivaTaskScheduler; import org.apache.maven.archiva.scheduled.tasks.RepositoryTask; import org.apache.maven.archiva.scheduled.tasks.TaskCreator; @@ -63,17 +68,12 @@ import org.apache.maven.archiva.security.AccessDeniedException; import org.apache.maven.archiva.security.ArchivaSecurityException; import org.apache.maven.archiva.security.PrincipalNotFoundException; import org.apache.maven.archiva.security.UserRepositories; - -import com.opensymphony.xwork2.Preparable; -import com.opensymphony.xwork2.Validateable; -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.lang.StringUtils; import org.codehaus.plexus.taskqueue.TaskQueueException; /** * Upload an artifact using Jakarta file upload in webwork. If set by the user a pom will also be generated. Metadata * will also be updated if one exists, otherwise it would be created. - * + * * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="uploadAction" instantiation-strategy="per-lookup" */ public class UploadAction @@ -81,11 +81,11 @@ public class UploadAction implements Validateable, Preparable, Auditable { /** - * @plexus.requirement - */ - private RepositoryContentConsumers consumers; - - /** + * @plexus.requirement + */ + private RepositoryContentConsumers consumers; + + /** * The groupId of the artifact to be deployed. */ private String groupId; @@ -149,16 +149,16 @@ public class UploadAction * @plexus.requirement */ private RepositoryContentFactory repositoryFactory; - + /** * @plexus.requirement */ private ArchivaTaskScheduler scheduler; - - private ChecksumAlgorithm[] algorithms = new ChecksumAlgorithm[] { ChecksumAlgorithm.SHA1, ChecksumAlgorithm.MD5 }; + + private ChecksumAlgorithm[] algorithms = new ChecksumAlgorithm[]{ChecksumAlgorithm.SHA1, ChecksumAlgorithm.MD5}; private ProjectModelWriter pomWriter = new ProjectModel400Writer(); - + public void setArtifact( File file ) { this.artifactFile = file; @@ -293,7 +293,7 @@ public class UploadAction repositoryId = ""; generatePom = false; } - + public String doUpload() { try @@ -319,11 +319,11 @@ public class UploadAction Date lastUpdatedTimestamp = Calendar.getInstance().getTime(); int newBuildNumber = -1; String timestamp = null; - + File metadataFile = getMetadata( targetPath.getAbsolutePath() ); ArchivaRepositoryMetadata metadata = getMetadata( metadataFile ); - if (VersionUtil.isSnapshot(version)) + if ( VersionUtil.isSnapshot( version ) ) { TimeZone timezone = TimeZone.getTimeZone( "UTC" ); DateFormat fmt = new SimpleDateFormat( "yyyyMMdd.HHmmss" ); @@ -335,8 +335,8 @@ public class UploadAction } else { - metadata.setSnapshotVersion( new SnapshotVersion() ); - newBuildNumber = 1; + metadata.setSnapshotVersion( new SnapshotVersion() ); + newBuildNumber = 1; } } @@ -364,12 +364,12 @@ public class UploadAction } String pomFilename = filename; - if( classifier != null && !"".equals( classifier ) ) + if ( classifier != null && !"".equals( classifier ) ) { pomFilename = StringUtils.remove( pomFilename, "-" + classifier ); } pomFilename = FilenameUtils.removeExtension( pomFilename ) + ".pom"; - + if ( generatePom ) { try @@ -389,11 +389,11 @@ public class UploadAction return ERROR; } } - - if ( pomFile != null && pomFile.length() > 0 ) + + if ( pomFile != null && pomFile.length() > 0 ) { try - { + { copyFile( pomFile, targetPath, pomFilename ); queueRepositoryTask( repoConfig.getId(), new File( targetPath, pomFilename ) ); //consumers.executeConsumers( repoConfig, new File( targetPath, pomFilename ) ); @@ -403,16 +403,16 @@ public class UploadAction addActionError( "Error encountered while uploading pom file: " + ie.getMessage() ); return ERROR; } - + } updateMetadata( metadata, metadataFile, lastUpdatedTimestamp, timestamp, newBuildNumber ); String msg = "Artifact \'" + groupId + ":" + artifactId + ":" + version + "\' was successfully deployed to repository \'" + repositoryId + "\'"; - + triggerAuditEvent( repositoryId, groupId + ":" + artifactId + ":" + version, AuditEvent.UPLOAD_FILE ); - + addActionMessage( msg ); reset(); @@ -434,11 +434,11 @@ public class UploadAction throws IOException { FileOutputStream out = new FileOutputStream( new File( targetPath, targetFilename ) ); + FileInputStream input = new FileInputStream( sourceFile ); try { - FileInputStream input = new FileInputStream( sourceFile ); - int i = 0; + int i; while ( ( i = input.read() ) != -1 ) { out.write( i ); @@ -448,6 +448,7 @@ public class UploadAction finally { out.close(); + input.close(); } } @@ -459,8 +460,8 @@ public class UploadAction projectModel.setArtifactId( artifactId ); projectModel.setVersion( version ); projectModel.setPackaging( packaging ); - - File pomFile = new File( targetPath, filename); + + File pomFile = new File( targetPath, filename ); pomWriter.write( projectModel, pomFile ); return pomFile; @@ -486,7 +487,7 @@ public class UploadAction /** * Update artifact level metadata. If it does not exist, create the metadata. - * + * * @param metadata */ private void updateMetadata( ArchivaRepositoryMetadata metadata, File metadataFile, Date lastUpdatedTimestamp, @@ -519,11 +520,11 @@ public class UploadAction if ( metadata.getGroupId() == null ) { - metadata.setGroupId( groupId ); + metadata.setGroupId( groupId ); } if ( metadata.getArtifactId() == null ) { - metadata.setArtifactId( artifactId ); + metadata.setArtifactId( artifactId ); } metadata.setLatestVersion( latestVersion ); @@ -560,11 +561,11 @@ public class UploadAction { addActionError( "Please add a file to upload." ); } - + if ( version == null || !VersionUtil.isVersion( version ) ) { addActionError( "Invalid version." ); - } + } } catch ( PrincipalNotFoundException pe ) { @@ -575,7 +576,7 @@ public class UploadAction addActionError( ae.getMessage() ); } } - + private List<String> getManagableRepos() { try @@ -597,19 +598,20 @@ public class UploadAction } return Collections.emptyList(); } - + private void queueRepositoryTask( String repositoryId, File localFile ) { RepositoryTask task = TaskCreator.createRepositoryTask( repositoryId, localFile.getName(), localFile ); - + try { scheduler.queueRepositoryTask( task ); } catch ( TaskQueueException e ) { - log.error( "Unable to queue repository task to execute consumers on resource file ['" + - localFile.getName() + "']." ); + log.error( + "Unable to queue repository task to execute consumers on resource file ['" + localFile.getName() + + "']." ); } } } diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/startup/BannerTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/startup/BannerTest.java index 8db84ea35..c162277be 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/startup/BannerTest.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/startup/BannerTest.java @@ -19,24 +19,24 @@ package org.apache.maven.archiva.web.startup; * under the License. */ -import org.apache.commons.io.IOUtils; - import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.zip.GZIPInputStream; +import org.apache.commons.io.IOUtils; + import junit.framework.TestCase; /** - * BannerTest + * BannerTest * * @version $Id$ */ public class BannerTest extends TestCase { - private static final String eol = System.getProperty("line.separator"); + private static final String eol = System.getProperty( "line.separator" ); private void assertEncodeDecode( String encoded, String decoded ) { @@ -47,17 +47,17 @@ public class BannerTest public void testEncodeDecode() { assertEncodeDecode( "[$10 ]", "[ ]" ); - assertEncodeDecode( "$$$5_$n$5_", "$_____"+eol+"_____" ); + assertEncodeDecode( "$$$5_$n$5_", "$_____" + eol + "_____" ); assertEncodeDecode( "$${Refgjuvyr}", "${Erstwhile}" ); } public void testInjectVersion() { assertEquals( "[ 1.0 ]", Banner.injectVersion( "[#####]", "1.0" ) ); - assertEquals( ".\\ 1.0-SNAPSHOT \\._____", Banner.injectVersion( ".\\################\\._____", - "1.0-SNAPSHOT" ) ); - assertEquals( "Archiva:\"+eol+\" ( 1.0-alpha-1 )", Banner - .injectVersion( "Archiva:\"+eol+\" (##############)", "1.0-alpha-1" ) ); + assertEquals( ".\\ 1.0-SNAPSHOT \\._____", + Banner.injectVersion( ".\\################\\._____", "1.0-SNAPSHOT" ) ); + assertEquals( "Archiva:\"+eol+\" ( 1.0-alpha-1 )", + Banner.injectVersion( "Archiva:\"+eol+\" (##############)", "1.0-alpha-1" ) ); } public void testGetBanner() @@ -67,16 +67,16 @@ public class BannerTest String banner = Banner.getBanner( version ); assertNotNull( "Banner should not be null.", banner ); assertTrue( "Banner contains version.", banner.indexOf( version ) > 0 ); - + /* Want to make a new banner? - * Steps to do it. - * 1) Edit the src/test/resources/banner.gz file. - * 2) Save it compressed. - * 3) Add (to this test method) ... - * System.out.println( "\"" + Banner.encode( getRawBanner() ) + "\"" ); - * 4) Run the test - * 5) Copy / Paste the encoded form into the Banner.getBanner() method. - */ + * Steps to do it. + * 1) Edit the src/test/resources/banner.gz file. + * 2) Save it compressed. + * 3) Add (to this test method) ... + * System.out.println( "\"" + Banner.encode( getRawBanner() ) + "\"" ); + * 4) Run the test + * 5) Copy / Paste the encoded form into the Banner.getBanner() method. + */ } public String getRawBanner() @@ -86,6 +86,8 @@ public class BannerTest assertTrue( "File [" + gzBanner.getPath() + "] not found.", gzBanner.exists() ); FileInputStream fis = new FileInputStream( gzBanner ); GZIPInputStream gzis = new GZIPInputStream( fis ); - return IOUtils.toString( gzis ); + String str = IOUtils.toString( gzis ); + IOUtils.closeQuietly( gzis ); + return str; } } |