[ARCHETYPE-438] Remove support for specifying catalogs through direct URLs

Project: http://git-wip-us.apache.org/repos/asf/maven-archetype/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-archetype/commit/93318023
Tree: http://git-wip-us.apache.org/repos/asf/maven-archetype/tree/93318023
Diff: http://git-wip-us.apache.org/repos/asf/maven-archetype/diff/93318023

Branch: refs/heads/master
Commit: 93318023353fd1a90f9a0b554dffd90f6de0cb56
Parents: 4b2d005
Author: rfscholte <rfscho...@apache.org>
Authored: Sat Jan 28 13:45:41 2017 +0100
Committer: rfscholte <rfscho...@apache.org>
Committed: Sat Jan 28 13:45:41 2017 +0100

----------------------------------------------------------------------
 .../maven/archetype/ArchetypeManager.java       | 10 ----
 .../archetype/DefaultArchetypeManager.java      | 15 +----
 .../archetype/source/ArchetypeDataSource.java   |  4 +-
 .../InternalCatalogArchetypeDataSource.java     |  3 +-
 .../source/LocalCatalogArchetypeDataSource.java |  5 +-
 .../RemoteCatalogArchetypeDataSource.java       | 58 +++++++++-----------
 .../RemoteCatalogArchetypeDataSourceTest.java   |  8 ++-
 .../mojos/CreateProjectFromArchetypeMojo.java   |  3 -
 .../ui/generation/DefaultArchetypeSelector.java | 21 ++-----
 9 files changed, 46 insertions(+), 81 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeManager.java
----------------------------------------------------------------------
diff --git 
a/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeManager.java
 
b/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeManager.java
index fea2d1a..60a7af2 100644
--- 
a/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeManager.java
+++ 
b/archetype-common/src/main/java/org/apache/maven/archetype/ArchetypeManager.java
@@ -77,16 +77,6 @@ public interface ArchetypeManager
     ArchetypeCatalog getRemoteCatalog( ProjectBuildingRequest buildingRequest 
);
 
     /**
-     * Gives the catalog of archetypes located at the given url.
-     * if the url doesn't define a catalog, then 
<code>'archetype-catalog.xml'</code> is appended to it for search.
-     * @param buildingRequest TODO
-     * @param url the catalog url or base url containing the catalog file.
-     * 
-     * @return the catalog.
-     */
-    ArchetypeCatalog getRemoteCatalog( ProjectBuildingRequest buildingRequest, 
String url );
-
-    /**
      * Creates a jar file for an archetype.
      *
      * @param archetypeDirectory

http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java
----------------------------------------------------------------------
diff --git 
a/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java
 
b/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java
index 301b8af..5ad3e78 100644
--- 
a/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java
+++ 
b/archetype-common/src/main/java/org/apache/maven/archetype/DefaultArchetypeManager.java
@@ -37,7 +37,6 @@ import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.Map;
-import java.util.Properties;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
@@ -172,7 +171,7 @@ public class DefaultArchetypeManager
         {
             ArchetypeDataSource source = archetypeSources.get( 
"internal-catalog" );
 
-            return source.getArchetypeCatalog( null, new Properties() );
+            return source.getArchetypeCatalog( null );
         }
         catch ( ArchetypeDataSourceException e )
         {
@@ -184,10 +183,9 @@ public class DefaultArchetypeManager
     {
         try
         {
-            Properties properties = new Properties();
             ArchetypeDataSource source = archetypeSources.get( "catalog" );
 
-            return source.getArchetypeCatalog( buildingRequest, properties );
+            return source.getArchetypeCatalog( buildingRequest );
         }
         catch ( ArchetypeDataSourceException e )
         {
@@ -197,18 +195,11 @@ public class DefaultArchetypeManager
 
     public ArchetypeCatalog getRemoteCatalog( ProjectBuildingRequest 
buildingRequest )
     {
-        return getRemoteCatalog( buildingRequest, 
"http://repo.maven.apache.org/maven2"; );
-    }
-
-    public ArchetypeCatalog getRemoteCatalog( ProjectBuildingRequest 
buildingRequest, String url )
-    {
         try
         {
-            Properties properties = new Properties();
-            properties.setProperty( "repository", url );
             ArchetypeDataSource source = archetypeSources.get( 
"remote-catalog" );
 
-            return source.getArchetypeCatalog( buildingRequest, properties );
+            return source.getArchetypeCatalog( buildingRequest );
         }
         catch ( ArchetypeDataSourceException e )
         {

http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/archetype-common/src/main/java/org/apache/maven/archetype/source/ArchetypeDataSource.java
----------------------------------------------------------------------
diff --git 
a/archetype-common/src/main/java/org/apache/maven/archetype/source/ArchetypeDataSource.java
 
b/archetype-common/src/main/java/org/apache/maven/archetype/source/ArchetypeDataSource.java
index 05b416f..0986157 100644
--- 
a/archetype-common/src/main/java/org/apache/maven/archetype/source/ArchetypeDataSource.java
+++ 
b/archetype-common/src/main/java/org/apache/maven/archetype/source/ArchetypeDataSource.java
@@ -23,8 +23,6 @@ import org.apache.maven.archetype.catalog.Archetype;
 import org.apache.maven.archetype.catalog.ArchetypeCatalog;
 import org.apache.maven.project.ProjectBuildingRequest;
 
-import java.util.Properties;
-
 /**
  * Sources we can get Archetypes from. This may be the local registry, a Wiki, 
or,
  * a Maven Repository application. We might also want to get all the 
Archetypes based
@@ -38,7 +36,7 @@ public interface ArchetypeDataSource
 {
     String ARCHETYPE_CATALOG_FILENAME = "archetype-catalog.xml";
 
-    ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest 
buildingRequest, Properties properties )
+    ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest 
buildingRequest )
         throws ArchetypeDataSourceException;
 
     void updateCatalog( ProjectBuildingRequest buildingRequest, Archetype 
archetype )

http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/archetype-common/src/main/java/org/apache/maven/archetype/source/InternalCatalogArchetypeDataSource.java
----------------------------------------------------------------------
diff --git 
a/archetype-common/src/main/java/org/apache/maven/archetype/source/InternalCatalogArchetypeDataSource.java
 
b/archetype-common/src/main/java/org/apache/maven/archetype/source/InternalCatalogArchetypeDataSource.java
index 62ce96a..f7f617d 100644
--- 
a/archetype-common/src/main/java/org/apache/maven/archetype/source/InternalCatalogArchetypeDataSource.java
+++ 
b/archetype-common/src/main/java/org/apache/maven/archetype/source/InternalCatalogArchetypeDataSource.java
@@ -28,7 +28,6 @@ import org.codehaus.plexus.util.ReaderFactory;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
-import java.util.Properties;
 
 /**
  * @author Jason van Zyl
@@ -38,7 +37,7 @@ public class InternalCatalogArchetypeDataSource
     extends CatalogArchetypeDataSource
 {
 
-    public ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest 
buildingRequest, Properties properties )
+    public ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest 
buildingRequest )
         throws ArchetypeDataSourceException
     {
         try

http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/archetype-common/src/main/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSource.java
----------------------------------------------------------------------
diff --git 
a/archetype-common/src/main/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSource.java
 
b/archetype-common/src/main/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSource.java
index 8bb2d48..5cbddf6 100644
--- 
a/archetype-common/src/main/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSource.java
+++ 
b/archetype-common/src/main/java/org/apache/maven/archetype/source/LocalCatalogArchetypeDataSource.java
@@ -23,7 +23,6 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.Iterator;
-import java.util.Properties;
 
 import org.apache.maven.archetype.catalog.Archetype;
 import org.apache.maven.archetype.catalog.ArchetypeCatalog;
@@ -79,7 +78,7 @@ public class LocalCatalogArchetypeDataSource
         Archetype newArchetype = archetype;
         while ( !found && archetypes.hasNext() )
         {
-            Archetype a = (Archetype) archetypes.next();
+            Archetype a = archetypes.next();
             if ( a.getGroupId().equals( archetype.getGroupId() )
                 && a.getArtifactId().equals( archetype.getArtifactId() ) )
             {
@@ -101,7 +100,7 @@ public class LocalCatalogArchetypeDataSource
         writeLocalCatalog( catalog, catalogFile );
     }
 
-    public ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest 
buildingRequest, Properties properties )
+    public ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest 
buildingRequest )
         throws ArchetypeDataSourceException
     {
         File localRepo = repositoryManager.getLocalRepositoryBasedir( 
buildingRequest );

http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/archetype-common/src/main/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSource.java
----------------------------------------------------------------------
diff --git 
a/archetype-common/src/main/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSource.java
 
b/archetype-common/src/main/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSource.java
index beda9a4..f10f4a5 100644
--- 
a/archetype-common/src/main/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSource.java
+++ 
b/archetype-common/src/main/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSource.java
@@ -23,10 +23,10 @@ import java.io.File;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
-import java.util.Properties;
 
 import org.apache.maven.archetype.catalog.Archetype;
 import org.apache.maven.archetype.catalog.ArchetypeCatalog;
+import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.LegacySupport;
@@ -61,8 +61,6 @@ public class RemoteCatalogArchetypeDataSource extends 
CatalogArchetypeDataSource
     @Requirement
     private SettingsDecrypter settingsDecrypter;
 
-    public static final String REPOSITORY_PROPERTY = "repository";
-
     /**
      * Id of the repository used to download catalog file. Proxy or 
authentication info can
      * be setup in settings.xml.
@@ -70,44 +68,40 @@ public class RemoteCatalogArchetypeDataSource extends 
CatalogArchetypeDataSource
     public static final String REPOSITORY_ID = "archetype";
 
     @Override
-    public ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest 
buildingRequest, Properties properties )
+    public ArchetypeCatalog getArchetypeCatalog( ProjectBuildingRequest 
buildingRequest )
         throws ArchetypeDataSourceException
     {
-        String repository = properties.getProperty( REPOSITORY_PROPERTY );
-
-        if ( repository == null )
+        ArtifactRepository centralRepository = null;
+        ArtifactRepository archetypeRepository = null;
+        for ( ArtifactRepository remoteRepository : 
buildingRequest.getRemoteRepositories() )
         {
-            throw new ArchetypeDataSourceException( "To use the remote catalog 
you must specify the 'repository'"
-                + " property with an URL." );
+            if ( REPOSITORY_ID.equals( remoteRepository.getId() ) )
+            {
+                archetypeRepository = remoteRepository;
+                break;
+            }
+            else if ( "central".equals( remoteRepository.getId() ) )
+            {
+                centralRepository = remoteRepository;
+            }
         }
 
-        if ( repository.endsWith( "/" ) )
+        if ( archetypeRepository == null )
         {
-            repository = repository.substring( 0, repository.length() - 1 );
+            archetypeRepository = centralRepository;
         }
 
         try
         {
-            return downloadCatalog( repository, ARCHETYPE_CATALOG_FILENAME );
+            return downloadCatalog( archetypeRepository );
         }
-        catch ( ArchetypeDataSourceException e )
+        catch ( IOException e )
         {
-            throw e;
+            throw new ArchetypeDataSourceException( e );
         }
-        catch ( Exception e )
-        { // When the default archetype catalog name doesn't work, we assume 
the repository is the URL to a file
-            String repositoryPath = repository.substring( 0, 
repository.lastIndexOf( "/" ) );
-            String filename = repository.substring( repository.lastIndexOf( 
"/" ) + 1 );
-
-            try
-            {
-                return downloadCatalog( repositoryPath, filename );
-            }
-            catch ( Exception ex )
-            {
-                getLogger().warn( "Error reading archetype catalog " + 
repository, ex );
-                return new ArchetypeCatalog();
-            }
+        catch ( WagonException e )
+        {
+            throw new ArchetypeDataSourceException( e );
         }
     }
 
@@ -117,13 +111,13 @@ public class RemoteCatalogArchetypeDataSource extends 
CatalogArchetypeDataSource
         throw new ArchetypeDataSourceException( "Not supported yet." );
     }
 
-    private ArchetypeCatalog downloadCatalog( String repositoryPath, String 
filename )
+    private ArchetypeCatalog downloadCatalog( ArtifactRepository repository )
         throws WagonException, IOException, ArchetypeDataSourceException
     {
-        getLogger().debug( "Searching for remote catalog: " + repositoryPath + 
"/" + filename );
+        getLogger().debug( "Searching for remote catalog: " + 
repository.getUrl() + "/" + ARCHETYPE_CATALOG_FILENAME );
 
         // We use wagon to take advantage of a Proxy that has already been 
setup in a Maven environment.
-        Repository wagonRepository = new Repository( REPOSITORY_ID, 
repositoryPath );
+        Repository wagonRepository = new Repository( repository.getId(), 
repository.getUrl() );
         
         AuthenticationInfo authInfo = getAuthenticationInfo( 
wagonRepository.getId() );
         ProxyInfo proxyInfo = getProxy( wagonRepository.getProtocol() );
@@ -134,7 +128,7 @@ public class RemoteCatalogArchetypeDataSource extends 
CatalogArchetypeDataSource
         try
         {
             wagon.connect( wagonRepository, authInfo, proxyInfo );
-            wagon.get( filename, catalog );
+            wagon.get( ARCHETYPE_CATALOG_FILENAME, catalog );
 
             return readCatalog( ReaderFactory.newXmlReader( catalog ) );
         }

http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/archetype-common/src/test/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSourceTest.java
----------------------------------------------------------------------
diff --git 
a/archetype-common/src/test/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSourceTest.java
 
b/archetype-common/src/test/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSourceTest.java
index f4e4a88..c6cc732 100644
--- 
a/archetype-common/src/test/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSourceTest.java
+++ 
b/archetype-common/src/test/java/org/apache/maven/archetype/source/RemoteCatalogArchetypeDataSourceTest.java
@@ -26,6 +26,8 @@ import org.apache.maven.archetype.ArchetypeManager;
 import org.apache.maven.archetype.catalog.Archetype;
 import org.apache.maven.archetype.catalog.ArchetypeCatalog;
 import org.apache.maven.archetype.catalog.io.xpp3.ArchetypeCatalogXpp3Writer;
+import org.apache.maven.artifact.repository.MavenArtifactRepository;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
 import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.ProjectBuildingRequest;
 import org.codehaus.plexus.PlexusTestCase;
@@ -92,8 +94,12 @@ public class RemoteCatalogArchetypeDataSourceTest extends 
PlexusTestCase
         ArchetypeManager archetype = lookup( ArchetypeManager.class );
 
         ProjectBuildingRequest buildingRequest = new 
DefaultProjectBuildingRequest();
+        buildingRequest.getRemoteRepositories().add( new 
MavenArtifactRepository( "central",
+                                                                               
   "http://localhost:"; + port + "/repo/",
+                                                                               
   new DefaultRepositoryLayout(), null,
+                                                                               
   null ) );
 
-        ArchetypeCatalog result = archetype.getRemoteCatalog( buildingRequest, 
"http://localhost:"; + port + "/repo/" );
+        ArchetypeCatalog result = archetype.getRemoteCatalog( buildingRequest 
);
 
         assertEquals( 1, result.getArchetypes().size() );
         assertEquals( "groupId", result.getArchetypes().get( 0 ).getGroupId() 
);

http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java
----------------------------------------------------------------------
diff --git 
a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java
 
b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java
index 6ba7092..4a6b8e7 100644
--- 
a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java
+++ 
b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/CreateProjectFromArchetypeMojo.java
@@ -100,14 +100,11 @@ public class CreateProjectFromArchetypeMojo
      * It is a comma separated list of catalogs.
      * Catalogs use the following schemes:
      * <ul>
-     * <li>'<code>file://...</code>' with <code>archetype-catalog.xml</code> 
automatically appended when pointing to a directory</li>
-     * <li>'<code>http://...</code>' or '<code>https://...</code>' with 
<code>archetype-catalog.xml</code> always appended</li>
      * <li>'<code>local</code>' which is the shortcut for 
'<code>file://~/.m2/archetype-catalog.xml</code>'</li>
      * <li>'<code>remote</code>' which is the shortcut for Maven Central 
repository, ie '<code>http://repo.maven.apache.org/maven2</code>'</li>
      * <li>'<code>internal</code>' which is an internal catalog</li>
      * </ul>
      * <p/>
-     * Since 2.0-alpha-5, default value is no longer 
<code>internal,local</code> but <code>remote,local</code>.
      * If Maven Central repository catalog file is empty, 
<code>internal</code> catalog is used instead.
      */
     @Parameter( property = "archetypeCatalog", defaultValue = "remote,local" )

http://git-wip-us.apache.org/repos/asf/maven-archetype/blob/93318023/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java
----------------------------------------------------------------------
diff --git 
a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java
 
b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java
index 01ec947..c8bd6c6 100644
--- 
a/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java
+++ 
b/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/ui/generation/DefaultArchetypeSelector.java
@@ -92,7 +92,7 @@ public class DefaultArchetypeSelector
                 String catalogKey = found.getKey();
                 Archetype archetype = found.getValue();
 
-                updateRepository( definition, archetype, catalogKey );
+                updateRepository( definition, archetype );
 
                 getLogger().info( "Archetype repository not defined. Using the 
one from " + archetype + " found in catalog "
                                       + catalogKey );
@@ -118,7 +118,7 @@ public class DefaultArchetypeSelector
                 String catalogKey = found.getKey();
                 Archetype archetype = found.getValue();
 
-                updateDefinition( definition, archetype, catalogKey );
+                updateDefinition( definition, archetype );
 
                 getLogger().info( "Archetype " + archetype + " found in 
catalog " + catalogKey );
             }
@@ -159,9 +159,7 @@ public class DefaultArchetypeSelector
             {
                 Archetype selectedArchetype = 
archetypeSelectionQueryer.selectArchetype( archetypes, definition );
 
-                String catalogKey = getCatalogKey( archetypes, 
selectedArchetype );
-
-                updateDefinition( definition, selectedArchetype, catalogKey );
+                updateDefinition( definition, selectedArchetype );
             }
 
             // Make sure the groupId and artifactId are valid, the version may 
just default to
@@ -222,29 +220,22 @@ public class DefaultArchetypeSelector
         return archetypes;
     }
 
-    private void updateRepository( ArchetypeDefinition definition, Archetype 
archetype, String catalogKey )
+    private void updateRepository( ArchetypeDefinition definition, Archetype 
archetype )
     {
         String repository = archetype.getRepository();
         if ( StringUtils.isNotEmpty( repository ) )
         {
             definition.setRepository( repository );
         }
-        else if ( catalogKey.indexOf( ':' ) > 1 )
-        {
-            // file: or http:
-            int lastIndex = catalogKey.lastIndexOf( '/' );
-            String catalogBase = catalogKey.substring( 0, ( lastIndex > 7 ? 
lastIndex : catalogKey.length() ) );
-            definition.setRepository( catalogBase );
-        }
     }
 
-    private void updateDefinition( ArchetypeDefinition definition, Archetype 
archetype, String catalogKey )
+    private void updateDefinition( ArchetypeDefinition definition, Archetype 
archetype )
     {
         definition.setGroupId( archetype.getGroupId() );
         definition.setArtifactId( archetype.getArtifactId() );
         definition.setVersion( archetype.getVersion() );
         definition.setName( archetype.getArtifactId() );
-        updateRepository( definition, archetype, catalogKey );
+        updateRepository( definition, archetype );
         definition.setGoals( StringUtils.join( 
archetype.getGoals().iterator(), "," ) );
     }
 

Reply via email to