]> source.dussan.org Git - archiva.git/commitdiff
[MRM-125] separate the timestamp for the metadata and the artifacts to ensure both...
authorBrett Porter <brett@apache.org>
Mon, 24 Jul 2006 13:22:32 +0000 (13:22 +0000)
committerBrett Porter <brett@apache.org>
Mon, 24 Jul 2006 13:22:32 +0000 (13:22 +0000)
git-svn-id: https://svn.apache.org/repos/asf/maven/repository-manager/trunk@425044 13f79535-47bb-0310-9956-ffa450edef68

maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/AbstractArtifactDiscoverer.java
maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/AbstractDiscoverer.java
maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/DefaultMetadataDiscoverer.java

index 5a328cb674f4372879759f2d16ea46aad303b8af..3faa8bd47b84a21ce112dbac1450e7d8f792580c 100644 (file)
@@ -18,13 +18,16 @@ package org.apache.maven.repository.discovery;
 
 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.
@@ -58,7 +61,8 @@ public abstract class AbstractArtifactDiscoverer
             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.
@@ -126,4 +130,20 @@ public abstract class AbstractArtifactDiscoverer
 
         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 );
+    }
 }
index 31754d2a964f6771407fb4e539b9da5e3c381737..88a85229f05c8f0a70079b3a3080a7ab437b1ad3 100644 (file)
@@ -37,7 +37,6 @@ import java.text.ParseException;
 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;
@@ -142,11 +141,8 @@ public abstract class AbstractDiscoverer
         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 )
@@ -194,13 +190,24 @@ public abstract class AbstractDiscoverer
         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;
     }
@@ -218,8 +225,26 @@ public abstract class AbstractDiscoverer
 
         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
@@ -232,14 +257,10 @@ public abstract class AbstractDiscoverer
                 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 );
@@ -255,25 +276,19 @@ public abstract class AbstractDiscoverer
         }
     }
 
-    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" ) );
     }
 }
index 54f8970a48cb8d49302d51a8cc9c02f703d1a19c..4d1cb3fae018349188149f84fca8876595ce2c70 100644 (file)
@@ -25,6 +25,7 @@ import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
 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;
@@ -34,11 +35,13 @@ import java.io.InputStreamReader;
 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;
 
 /**
@@ -63,7 +66,8 @@ public class DefaultMetadataDiscoverer
             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.
@@ -226,4 +230,20 @@ public class DefaultMetadataDiscoverer
 
         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 );
+    }
 }