import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.Versioning;
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer;
import org.apache.maven.model.DistributionManagement;
import java.io.IOException;
import java.io.Reader;
import java.security.NoSuchAlgorithmException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
+import java.util.TimeZone;
/**
* An implementation of the proxy handler. This class is not thread safe (the class itself is, but the wagons it uses
*/
private Map/*<String,Wagon>*/ wagons;
+ private static final TimeZone UTC_TIMEZONE = TimeZone.getTimeZone( "UTC" );
+
public File get( String path, List proxiedRepositories, ArtifactRepository managedRepository )
throws ProxyException, ResourceDoesNotExistException
{
if ( metadata != null )
{
+ setLastUpdatedIfEmpty( newMetadata, metadataFile );
+ setLastUpdatedIfEmpty( metadata, target );
+
changed = metadata.merge( newMetadata );
}
else
}
}
+ private void setLastUpdatedIfEmpty( Metadata metadata, File metadataFile )
+ {
+ if ( metadata.getVersioning() == null )
+ {
+ metadata.setVersioning( new Versioning() );
+ }
+ if ( metadata.getVersioning().getLastUpdated() == null )
+ {
+ DateFormat fmt = new SimpleDateFormat( "yyyyMMddHHmmss", Locale.US );
+ fmt.setTimeZone( UTC_TIMEZONE );
+ metadata.getVersioning().setLastUpdated( fmt.format( new Date( metadataFile.lastModified() ) ) );
+ }
+ }
+
private void getFileFromRepository( String path, ProxiedArtifactRepository repository, String repositoryCachePath,
ProxyInfo httpProxy, File target, ArtifactRepositoryPolicy policy,
boolean force )
import java.io.IOException;
import java.io.StringWriter;
import java.net.MalformedURLException;
+import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
+import java.util.TimeZone;
/**
* Test the proxy handler.
private static final ArtifactRepositoryPolicy ALWAYS_UPDATE_POLICY =
new ArtifactRepositoryPolicy( true, ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS, null );
+ private static final TimeZone UTC_TIMEZONE = TimeZone.getTimeZone( "UTC" );
+
protected void setUp()
throws Exception
{
assertTrue( "Check file created", file.exists() );
String expectedContents = getExpectedMetadata( "get-merged-metadata", getVersioning(
- Arrays.asList( new String[]{"0.9", "1.0", "2.0", "3.0", "5.0", "4.0"} ) ) );
+ Arrays.asList( new String[]{"0.9", "1.0", "2.0", "3.0", "5.0", "4.0"} ), file ) );
assertEquals( "Check content matches", expectedContents, FileUtils.readFileToString( file, null ) );
}
assertEquals( "Check file matches", expectedFile, file );
assertTrue( "Check file created", file.exists() );
- String expectedContents =
- getExpectedMetadata( "get-updated-metadata", getVersioning( Arrays.asList( new String[]{"1.0", "2.0"} ) ) );
+ String expectedContents = getExpectedMetadata( "get-updated-metadata", getVersioning(
+ Arrays.asList( new String[]{"1.0", "2.0"} ), file ) );
assertEquals( "Check content matches", expectedContents, FileUtils.readFileToString( file, null ) );
assertFalse( "Check content doesn't match proxy version",
assertTrue( "Check file created", file.exists() );
String expectedContents =
- getExpectedMetadata( "get-updated-metadata", "1.0-SNAPSHOT", getVersioning( "20050831.111213", 2 ) );
+ getExpectedMetadata( "get-updated-metadata", "1.0-SNAPSHOT", getVersioning( "20050831.111213", 2, file ) );
assertEquals( "Check content matches", expectedContents, FileUtils.readFileToString( file, null ) );
assertFalse( "Check content doesn't match proxy version",
assertEquals( "Check file matches", expectedFile, file );
assertTrue( "Check file created", file.exists() );
- String expectedContents =
- getExpectedMetadata( "get-updated-metadata", getVersioning( Arrays.asList( new String[]{"1.0", "2.0"} ) ) );
+ String expectedContents = getExpectedMetadata( "get-updated-metadata", getVersioning(
+ Arrays.asList( new String[]{"1.0", "2.0"} ), file ) );
assertEquals( "Check content matches", expectedContents, FileUtils.readFileToString( file, null ) );
assertFalse( "Check content doesn't match old version",
unexpectedContents.equals( FileUtils.readFileToString( file, null ) ) );
assertEquals( "Check file matches", expectedFile, file );
assertTrue( "Check file created", file.exists() );
- String expectedContents =
- getExpectedMetadata( "get-updated-metadata", getVersioning( Arrays.asList( new String[]{"1.0", "2.0"} ) ) );
+ String expectedContents = getExpectedMetadata( "get-updated-metadata", getVersioning(
+ Arrays.asList( new String[]{"1.0", "2.0"} ), file ) );
assertEquals( "Check content matches", expectedContents, FileUtils.readFileToString( file, null ) );
assertFalse( "Check content doesn't match old version",
assertEquals( "Check file matches", expectedFile, file );
}
- private static Versioning getVersioning( List versions )
+ private static Versioning getVersioning( List versions, File file )
{
Versioning versioning = new Versioning();
for ( Iterator i = versions.iterator(); i.hasNext(); )
String v = (String) i.next();
versioning.addVersion( v );
}
+ setLastUpdatedTimestamp( versioning, file );
return versioning;
}
return getExpectedMetadata( artifactId, version, null );
}
- private static Versioning getVersioning( String timestamp, int buildNumber )
+ private static Versioning getVersioning( String timestamp, int buildNumber, File file )
{
Versioning versioning = new Versioning();
versioning.setSnapshot( new Snapshot() );
versioning.getSnapshot().setTimestamp( timestamp );
versioning.getSnapshot().setBuildNumber( buildNumber );
+ setLastUpdatedTimestamp( versioning, file );
return versioning;
}
+ private static void setLastUpdatedTimestamp( Versioning versioning, File file )
+ {
+ DateFormat fmt = new SimpleDateFormat( "yyyyMMddHHmmss", Locale.US );
+ fmt.setTimeZone( UTC_TIMEZONE );
+ versioning.setLastUpdated( fmt.format( new Date( file.lastModified() ) ) );
+ }
+
private static Date getPastDate()
throws ParseException
{