Author: brett
Date: Wed Aug 31 01:11:47 2005
New Revision: 264967

URL: http://svn.apache.org/viewcvs?rev=264967&view=rev
Log:
refactoring towards similar pattern of artifact metadata

Removed:
    
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/InvalidRepositoryMetadataException.java
Modified:
    
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
    
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/PluginMappingMetadata.java
    
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginMappingManager.java
    
maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/PluginMappingInstallMojo.java

Modified: 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java?rev=264967&r1=264966&r2=264967&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
 (original)
+++ 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
 Wed Aug 31 01:11:47 2005
@@ -22,19 +22,14 @@
 import org.apache.maven.wagon.TransferFailedException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.FileUtils;
-import org.codehaus.plexus.util.IOUtil;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @todo try to crop all, particularly plugin stuff
- * @todo check caching?
- */
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
 public class DefaultRepositoryMetadataManager
     extends AbstractLogEnabled
     implements RepositoryMetadataManager
@@ -42,94 +37,68 @@
     // component requirement
     private WagonManager wagonManager;
 
-    // only resolve repository metadata once per session...
-    private Map cachedMetadata = new HashMap();
-
-    public void resolveLocally( RepositoryMetadata metadata, 
ArtifactRepository local )
-        throws RepositoryMetadataManagementException
-    {
-        resolve( metadata, null, local );
-    }
+    /**
+     * @todo very primitve. Probably we can cache artifacts themselves in a 
central location, as well as reset the flag over time in a long running process.
+     */
+    private Set cachedMetadata = new HashSet();
 
-    public void resolve( RepositoryMetadata metadata, ArtifactRepository 
remote, ArtifactRepository local )
+    public void resolve( RepositoryMetadata metadata, List repositories, 
ArtifactRepository local )
         throws RepositoryMetadataManagementException
     {
-        File metadataFile = (File) cachedMetadata.get( 
metadata.getRepositoryPath() );
-
-        if ( metadataFile == null )
+        boolean alreadyResolved = alreadyResolved( metadata );
+        if ( !alreadyResolved )
         {
-            metadataFile = constructLocalRepositoryFile( metadata, local );
-
-            if ( !metadataFile.exists() && remote != null )
+            for ( Iterator i = repositories.iterator(); i.hasNext(); )
             {
-                try
+                ArtifactRepository repository = (ArtifactRepository) i.next();
+
+                // TODO: replace with a more general repository update 
mechanism like artifact metadata uses
+                // (Actually, this should now supersede artifact metadata...)
+                File metadataFile = new File( local.getBasedir(), 
local.pathOfRepositoryMetadata( metadata ) );
+
+                if ( !metadataFile.exists() )
                 {
                     try
                     {
-                        wagonManager.getRepositoryMetadata( metadata, remote, 
metadataFile );
-                    }
-                    catch ( ResourceDoesNotExistException e )
-                    {
-                        if ( !metadataFile.exists() )
+                        try
                         {
-                            throw new RepositoryMetadataManagementException( 
metadata,
-                                                                             
"Remote repository metadata not found.",
-                                                                             e 
);
+                            wagonManager.getRepositoryMetadata( metadata, 
repository, metadataFile );
                         }
-                        else
+                        catch ( ResourceDoesNotExistException e )
                         {
-                            String message = "Cannot find " + metadata + " in 
remote repository - Using local copy.";
+                            if ( !metadataFile.exists() )
+                            {
+                                throw new 
RepositoryMetadataManagementException( metadata,
+                                                                               
  "Remote repository metadata not found.",
+                                                                               
  e );
+                            }
+                            else
+                            {
+                                String message = "Cannot find " + metadata +
+                                    " in remote repository - Using local 
copy.";
 
-                            getLogger().info( message );
+                                getLogger().info( message );
 
-                            getLogger().debug( message, e );
+                                getLogger().debug( message, e );
+                            }
                         }
                     }
+                    catch ( TransferFailedException e )
+                    {
+                        throw new RepositoryMetadataManagementException( 
metadata,
+                                                                         
"Failed to download repository metadata.", e );
+                    }
                 }
-                catch ( TransferFailedException e )
+                else
                 {
-                    throw new RepositoryMetadataManagementException( metadata,
-                                                                     "Failed 
to download repository metadata.", e );
+                    getLogger().info( "Using local copy of " + metadata + " 
from: " + metadataFile );
                 }
-            }
-            else
-            {
-                getLogger().info( "Using local copy of " + metadata + " from: 
" + metadataFile );
-            }
 
-            if ( metadataFile.exists() )
-            {
-                if ( !verifyFileNotEmpty( metadataFile ) )
-                {
-                    throw new InvalidRepositoryMetadataException( metadata, 
"Metadata located in file: " +
-                        metadataFile + " appears to be corrupt (file is 
empty). DOWNLOAD FAILED." );
-                }
-
-                cachedMetadata.put( metadata.getRepositoryPath(), metadataFile 
);
+                cachedMetadata.add( metadata.getRepositoryPath() );
             }
         }
     }
 
-    private boolean verifyFileNotEmpty( File metadataFile )
-    {
-        InputStream verifyInputStream = null;
-
-        try
-        {
-            verifyInputStream = new FileInputStream( metadataFile );
-
-            return verifyInputStream.available() > 0;
-        }
-        catch ( IOException e )
-        {
-            return false;
-        }
-        finally
-        {
-            IOUtil.close( verifyInputStream );
-        }
-    }
-
     public void deploy( File source, RepositoryMetadata metadata, 
ArtifactRepository remote )
         throws RepositoryMetadataManagementException
     {
@@ -147,7 +116,7 @@
     public void install( File source, RepositoryMetadata metadata, 
ArtifactRepository local )
         throws RepositoryMetadataManagementException
     {
-        File metadataFile = constructLocalRepositoryFile( metadata, local );
+        File metadataFile = new File( local.getBasedir(), 
local.pathOfRepositoryMetadata( metadata ) );
 
         try
         {
@@ -167,24 +136,8 @@
 
     }
 
-    public void purgeLocalCopy( RepositoryMetadata metadata, 
ArtifactRepository local )
-        throws RepositoryMetadataManagementException
-    {
-        File metadataFile = constructLocalRepositoryFile( metadata, local );
-
-        if ( metadataFile.exists() )
-        {
-            if ( !metadataFile.delete() )
-            {
-                throw new RepositoryMetadataManagementException( metadata,
-                                                                 "Failed to 
purge local copy from: " + metadataFile );
-            }
-        }
-    }
-
-    private static File constructLocalRepositoryFile( RepositoryMetadata 
metadata, ArtifactRepository local )
+    private boolean alreadyResolved( RepositoryMetadata metadata )
     {
-        return new File( local.getBasedir(), local.pathOfRepositoryMetadata( 
metadata ) );
+        return cachedMetadata.contains( metadata.getRepositoryPath() );
     }
-
 }

Modified: 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/PluginMappingMetadata.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/PluginMappingMetadata.java?rev=264967&r1=264966&r2=264967&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/PluginMappingMetadata.java
 (original)
+++ 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/PluginMappingMetadata.java
 Wed Aug 31 01:11:47 2005
@@ -16,19 +16,12 @@
  * limitations under the License.
  */
 
-import java.io.File;
-
 public class PluginMappingMetadata
     implements RepositoryMetadata
 {
     private static final String PLUGIN_MAPPING_FILE = "plugins.xml";
 
     private final String groupId;
-
-    /**
-     * @todo REMOVE!
-     */
-    private File metadataFile;
 
     public PluginMappingMetadata( String groupId )
     {

Modified: 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java?rev=264967&r1=264966&r2=264967&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java
 (original)
+++ 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java
 Wed Aug 31 01:11:47 2005
@@ -19,13 +19,12 @@
 import org.apache.maven.artifact.repository.ArtifactRepository;
 
 import java.io.File;
+import java.util.List;
 
 public interface RepositoryMetadataManager
 {
-    void resolveLocally( RepositoryMetadata repositoryMetadata, 
ArtifactRepository local )
-        throws RepositoryMetadataManagementException;
 
-    void resolve( RepositoryMetadata repositoryMetadata, ArtifactRepository 
remote, ArtifactRepository local )
+    void resolve( RepositoryMetadata repositoryMetadata, List repositories, 
ArtifactRepository local )
         throws RepositoryMetadataManagementException;
 
     void deploy( File source, RepositoryMetadata repositoryMetadata, 
ArtifactRepository remote )
@@ -34,6 +33,4 @@
     void install( File source, RepositoryMetadata repositoryMetadata, 
ArtifactRepository local )
         throws RepositoryMetadataManagementException;
 
-    void purgeLocalCopy( RepositoryMetadata repositoryMetadata, 
ArtifactRepository local )
-        throws RepositoryMetadataManagementException;
 }

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginMappingManager.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginMappingManager.java?rev=264967&r1=264966&r2=264967&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginMappingManager.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginMappingManager.java
 Wed Aug 31 01:11:47 2005
@@ -17,7 +17,6 @@
  */
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import 
org.apache.maven.artifact.repository.metadata.InvalidRepositoryMetadataException;
 import org.apache.maven.artifact.repository.metadata.Metadata;
 import org.apache.maven.artifact.repository.metadata.Plugin;
 import org.apache.maven.artifact.repository.metadata.PluginMappingMetadata;
@@ -51,96 +50,21 @@
 {
     protected RepositoryMetadataManager repositoryMetadataManager;
 
-    private List mappings = new ArrayList();
-
-    private boolean refreshed;
-
-    private Map pluginDefinitionsByPrefix;
-
-    public void clear()
-    {
-        this.mappings = null;
-        clearCache();
-    }
-
-    private void clearCache()
-    {
-        this.pluginDefinitionsByPrefix = null;
-    }
+    private Map pluginDefinitionsByPrefix = new HashMap();
 
     public org.apache.maven.model.Plugin getByPrefix( String pluginPrefix, 
List groupIds, List pluginRepositories,
                                                       ArtifactRepository 
localRepository )
         throws RepositoryMetadataManagementException
     {
-        if ( pluginDefinitionsByPrefix == null )
-        {
-            // firstly, search the local repository
-            loadPluginMappings( groupIds, pluginRepositories, localRepository 
);
-
-            calculatePluginDefinitionsByPrefix();
-
-            // if not found, try from the remote repository
-            if ( !pluginDefinitionsByPrefix.containsKey( pluginPrefix ) && 
!refreshed )
-            {
-                getLogger().info(
-                    "Refreshing plugin mapping metadata; looking for plugin 
with prefix: \'" + pluginPrefix + "\'." );
-
-                refreshPluginMappingManager( pluginRepositories, 
localRepository );
-
-                refreshed = true;
-            }
-
-            calculatePluginDefinitionsByPrefix();
-        }
-        return (org.apache.maven.model.Plugin) pluginDefinitionsByPrefix.get( 
pluginPrefix );
-    }
-
-    private void calculatePluginDefinitionsByPrefix()
-    {
-        pluginDefinitionsByPrefix = new HashMap();
-
-        for ( Iterator it = mappings.iterator(); it.hasNext(); )
+        // if not found, try from the remote repository
+        if ( !pluginDefinitionsByPrefix.containsKey( pluginPrefix ) )
         {
-            Metadata pluginMap = (Metadata) it.next();
-
-            String groupId = pluginMap.getGroupId();
+            getLogger().info( "Searching repository for plugin with prefix: 
\'" + pluginPrefix + "\'." );
 
-            for ( Iterator pluginIterator = pluginMap.getPlugins().iterator(); 
pluginIterator.hasNext(); )
-            {
-                Plugin mapping = (Plugin) pluginIterator.next();
-
-                String prefix = mapping.getPrefix();
-
-                String artifactId = mapping.getArtifactId();
-
-                org.apache.maven.model.Plugin plugin = new 
org.apache.maven.model.Plugin();
-
-                plugin.setGroupId( groupId );
-
-                plugin.setArtifactId( artifactId );
-
-                pluginDefinitionsByPrefix.put( prefix, plugin );
-            }
-        }
-    }
-
-    private void refreshPluginMappingManager( List pluginRepositories, 
ArtifactRepository localRepository )
-        throws RepositoryMetadataManagementException
-    {
-        List groupIds = new ArrayList();
-
-        for ( Iterator it = mappings.iterator(); it.hasNext(); )
-        {
-            Metadata map = (Metadata) it.next();
-
-            String groupId = map.getGroupId();
-
-            groupIds.add( groupId );
-
-            repositoryMetadataManager.purgeLocalCopy( new 
PluginMappingMetadata( groupId ), localRepository );
+            loadPluginMappings( groupIds, pluginRepositories, localRepository 
);
         }
 
-        loadPluginMappings( groupIds, pluginRepositories, localRepository );
+        return (org.apache.maven.model.Plugin) pluginDefinitionsByPrefix.get( 
pluginPrefix );
     }
 
     private void loadPluginMappings( List groupIds, List pluginRepositories, 
ArtifactRepository localRepository )
@@ -159,15 +83,7 @@
 
             try
             {
-                File mappingFile = resolveMappingMetadata( 
repositoryMetadataManager, groupId, pluginRepositories,
-                                                           localRepository );
-
-                Metadata pluginMap = readPluginMap( mappingFile );
-
-                if ( pluginMap != null )
-                {
-                    mappings.add( pluginMap );
-                }
+                loadPluginMappings( groupId, pluginRepositories, 
localRepository );
             }
             catch ( RepositoryMetadataManagementException e )
             {
@@ -175,93 +91,76 @@
 
                 getLogger().debug( "Error resolving plugin-mapping metadata 
for groupId: " + groupId + ".", e );
             }
-
-            clearCache();
         }
     }
 
-    private static Metadata readPluginMap( File mappingFile )
+    private void loadPluginMappings( String groupId, List pluginRepositories, 
ArtifactRepository localRepository )
         throws RepositoryMetadataManagementException
     {
-        Metadata result = null;
+        PluginMappingMetadata metadata = new PluginMappingMetadata( groupId );
 
-        if ( mappingFile.exists() )
+        // TOOD: aggregate the results of this instead
+        repositoryMetadataManager.resolve( metadata, pluginRepositories, 
localRepository );
+
+        File metadataFile = new File( localRepository.getBasedir(),
+                                      
localRepository.pathOfRepositoryMetadata( metadata ) );
+
+        if ( metadataFile.exists() )
         {
-            Reader fileReader = null;
-            try
+            Metadata pluginMap = readMetadata( metadataFile );
+
+            if ( pluginMap != null )
             {
-                fileReader = new FileReader( mappingFile );
+                for ( Iterator pluginIterator = 
pluginMap.getPlugins().iterator(); pluginIterator.hasNext(); )
+                {
+                    Plugin mapping = (Plugin) pluginIterator.next();
 
-                MetadataXpp3Reader mappingReader = new MetadataXpp3Reader();
+                    String prefix = mapping.getPrefix();
 
-                result = mappingReader.read( fileReader );
-            }
-            catch ( FileNotFoundException e )
-            {
-                throw new RepositoryMetadataManagementException( "Cannot read 
plugin mappings from: " + mappingFile,
-                                                                 e );
-            }
-            catch ( IOException e )
-            {
-                throw new RepositoryMetadataManagementException( "Cannot read 
plugin mappings from: " + mappingFile,
-                                                                 e );
-            }
-            catch ( XmlPullParserException e )
-            {
-                throw new RepositoryMetadataManagementException( "Cannot parse 
plugin mappings from: " + mappingFile,
-                                                                 e );
-            }
-            finally
-            {
-                IOUtil.close( fileReader );
+                    String artifactId = mapping.getArtifactId();
+
+                    org.apache.maven.model.Plugin plugin = new 
org.apache.maven.model.Plugin();
+
+                    plugin.setGroupId( groupId );
+
+                    plugin.setArtifactId( artifactId );
+
+                    pluginDefinitionsByPrefix.put( prefix, plugin );
+                }
             }
         }
-
-        return result;
     }
 
-    private static File resolveMappingMetadata( RepositoryMetadataManager 
repositoryMetadataManager, String groupId,
-                                                List pluginRepositories, 
ArtifactRepository localRepository )
+    private static Metadata readMetadata( File mappingFile )
         throws RepositoryMetadataManagementException
     {
-        PluginMappingMetadata metadata = new PluginMappingMetadata( groupId );
-
-        RepositoryMetadataManagementException repositoryException = null;
+        Metadata result;
 
-        for ( Iterator repoIterator = pluginRepositories.iterator(); 
repoIterator.hasNext(); )
+        Reader fileReader = null;
+        try
         {
-            ArtifactRepository repository = (ArtifactRepository) 
repoIterator.next();
-
-            try
-            {
-                repositoryMetadataManager.resolve( metadata, repository, 
localRepository );
-
-                // reset this to keep it from getting in the way when we 
succeed but not on first repo...
-                repositoryException = null;
+            fileReader = new FileReader( mappingFile );
 
-                File metadataFile = new File( localRepository.getBasedir(),
-                                              
localRepository.pathOfRepositoryMetadata( metadata ) );
+            MetadataXpp3Reader mappingReader = new MetadataXpp3Reader();
 
-                if ( metadataFile.exists() )
-                {
-                    return metadataFile;
-                }
-            }
-            catch ( InvalidRepositoryMetadataException e )
-            {
-                repositoryMetadataManager.purgeLocalCopy( metadata, 
localRepository );
-            }
-            catch ( RepositoryMetadataManagementException e )
-            {
-                repositoryException = e;
-            }
+            result = mappingReader.read( fileReader );
         }
-
-        if ( repositoryException != null )
+        catch ( FileNotFoundException e )
         {
-            throw repositoryException;
+            throw new RepositoryMetadataManagementException( "Cannot read 
plugin mappings from: " + mappingFile, e );
         }
-
-        throw new RepositoryMetadataManagementException( "No repository 
metadata found" );
+        catch ( IOException e )
+        {
+            throw new RepositoryMetadataManagementException( "Cannot read 
plugin mappings from: " + mappingFile, e );
+        }
+        catch ( XmlPullParserException e )
+        {
+            throw new RepositoryMetadataManagementException( "Cannot parse 
plugin mappings from: " + mappingFile, e );
+        }
+        finally
+        {
+            IOUtil.close( fileReader );
+        }
+        return result;
     }
 }

Modified: 
maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/PluginMappingInstallMojo.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/PluginMappingInstallMojo.java?rev=264967&r1=264966&r2=264967&view=diff
==============================================================================
--- 
maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/PluginMappingInstallMojo.java
 (original)
+++ 
maven/components/trunk/maven-plugins/maven-plugin-plugin/src/main/java/org/apache/maven/plugin/plugin/metadata/PluginMappingInstallMojo.java
 Wed Aug 31 01:11:47 2005
@@ -16,7 +16,6 @@
  * limitations under the License.
  */
 
-import 
org.apache.maven.artifact.repository.metadata.InvalidRepositoryMetadataException;
 import org.apache.maven.artifact.repository.metadata.PluginMappingMetadata;
 import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
 import 
org.apache.maven.artifact.repository.metadata.RepositoryMetadataManagementException;
@@ -39,15 +38,6 @@
 
         try
         {
-            try
-            {
-                getRepositoryMetadataManager().resolveLocally( metadata, 
getLocalRepository() );
-            }
-            catch ( InvalidRepositoryMetadataException e )
-            {
-                getRepositoryMetadataManager().purgeLocalCopy( metadata, 
getLocalRepository() );
-            }
-
             File metadataFile = updatePluginMap( metadata );
 
             if ( metadataFile != null )



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to