import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
import java.io.File;
import java.io.IOException;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
/**
* Base class for artifact discoverers.
throw new UnsupportedOperationException( "Only filesystem repositories are supported" );
}
- long comparisonTimestamp = readComparisonTimestamp( repository, operation );
+ Xpp3Dom dom = getLastArtifactDiscoveryDom( readRepositoryMetadataDom( repository ) );
+ long comparisonTimestamp = readComparisonTimestamp( repository, operation, dom );
// Note that last checked time is deliberately set to the start of the process so that anything added
// mid-discovery and missed by the scanner will get checked next time.
return artifact;
}
+
+ public void setLastCheckedTime( ArtifactRepository repository, String operation, Date date )
+ throws IOException
+ {
+ // see notes in resetLastCheckedTime
+
+ File file = new File( repository.getBasedir(), "maven-metadata.xml" );
+
+ Xpp3Dom dom = readDom( file );
+
+ String dateString = new SimpleDateFormat( DATE_FMT, Locale.US ).format( date );
+
+ setEntry( getLastArtifactDiscoveryDom( dom ), operation, dateString );
+
+ saveDom( file, dom );
+ }
}
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
return excludedPaths.iterator();
}
- protected long readComparisonTimestamp( ArtifactRepository repository, String operation )
+ protected long readComparisonTimestamp( ArtifactRepository repository, String operation, Xpp3Dom dom )
{
- File file = new File( repository.getBasedir(), "maven-metadata.xml" );
- Xpp3Dom dom = readDom( file );
- dom = getLastDiscoveryDom( dom );
Xpp3Dom entry = dom.getChild( operation );
long comparisonTimestamp = 0;
if ( entry != null )
return dom;
}
- protected Xpp3Dom getLastDiscoveryDom( Xpp3Dom dom )
+ protected Xpp3Dom getLastArtifactDiscoveryDom( Xpp3Dom dom )
+ {
+ Xpp3Dom lastDiscoveryDom = dom.getChild( "lastArtifactDiscovery" );
+ if ( lastDiscoveryDom == null )
+ {
+ dom.addChild( new Xpp3Dom( "lastArtifactDiscovery" ) );
+ lastDiscoveryDom = dom.getChild( "lastArtifactDiscovery" );
+ }
+ return lastDiscoveryDom;
+ }
+
+ protected Xpp3Dom getLastMetadataDiscoveryDom( Xpp3Dom dom )
{
- Xpp3Dom lastDiscoveryDom = dom.getChild( "lastDiscovery" );
+ Xpp3Dom lastDiscoveryDom = dom.getChild( "lastMetadataDiscovery" );
if ( lastDiscoveryDom == null )
{
- dom.addChild( new Xpp3Dom( "lastDiscovery" ) );
- lastDiscoveryDom = dom.getChild( "lastDiscovery" );
+ dom.addChild( new Xpp3Dom( "lastMetadataDiscovery" ) );
+ lastDiscoveryDom = dom.getChild( "lastMetadataDiscovery" );
}
return lastDiscoveryDom;
}
Xpp3Dom dom = readDom( file );
- Xpp3Dom lastDiscoveryDom = getLastDiscoveryDom( dom );
+ boolean changed = false;
+ if ( removeEntry( getLastArtifactDiscoveryDom( dom ), operation ) )
+ {
+ changed = true;
+ }
+
+ if ( removeEntry( getLastMetadataDiscoveryDom( dom ), operation ) )
+ {
+ changed = true;
+ }
+
+ if ( changed )
+ {
+ saveDom( file, dom );
+ }
+ }
+
+ private boolean removeEntry( Xpp3Dom lastDiscoveryDom, String operation )
+ {
boolean changed = false;
// do this in reverse so that removing doesn't affect counter
lastDiscoveryDom.removeChild( i );
}
}
-
- if ( changed )
- {
- saveDom( file, dom );
- }
+ return changed;
}
- private void saveDom( File file, Xpp3Dom dom )
+ protected void saveDom( File file, Xpp3Dom dom )
throws IOException
{
FileWriter writer = new FileWriter( file );
}
}
- public void setLastCheckedTime( ArtifactRepository repository, String operation, Date date )
- throws IOException
+ protected void setEntry( Xpp3Dom lastDiscoveryDom, String operation, String dateString )
{
- // see notes in resetLastCheckedTime
-
- File file = new File( repository.getBasedir(), "maven-metadata.xml" );
-
- Xpp3Dom dom = readDom( file );
-
- Xpp3Dom lastDiscoveryDom = getLastDiscoveryDom( dom );
-
Xpp3Dom entry = lastDiscoveryDom.getChild( operation );
if ( entry == null )
{
entry = new Xpp3Dom( operation );
lastDiscoveryDom.addChild( entry );
}
- entry.setValue( new SimpleDateFormat( DATE_FMT, Locale.US ).format( date ) );
+ entry.setValue( dateString );
+ }
- saveDom( file, dom );
+ protected Xpp3Dom readRepositoryMetadataDom( ArtifactRepository repository )
+ {
+ return readDom( new File( repository.getBasedir(), "maven-metadata.xml" ) );
}
}
import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import java.io.File;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
+import java.util.Locale;
import java.util.StringTokenizer;
/**
throw new UnsupportedOperationException( "Only filesystem repositories are supported" );
}
- long comparisonTimestamp = readComparisonTimestamp( repository, operation );
+ Xpp3Dom dom = getLastMetadataDiscoveryDom( readRepositoryMetadataDom( repository ) );
+ long comparisonTimestamp = readComparisonTimestamp( repository, operation, dom );
// Note that last checked time is deliberately set to the start of the process so that anything added
// mid-discovery and missed by the scanner will get checked next time.
return metadata;
}
+
+ public void setLastCheckedTime( ArtifactRepository repository, String operation, Date date )
+ throws IOException
+ {
+ // see notes in resetLastCheckedTime
+
+ File file = new File( repository.getBasedir(), "maven-metadata.xml" );
+
+ Xpp3Dom dom = readDom( file );
+
+ String dateString = new SimpleDateFormat( DATE_FMT, Locale.US ).format( date );
+
+ setEntry( getLastMetadataDiscoveryDom( dom ), operation, dateString );
+
+ saveDom( file, dom );
+ }
}