]> source.dussan.org Git - archiva.git/commitdiff
[MRM-1524] downloading (optionnaly) remote index to display remote artifacts in searc...
authorOlivier Lamy <olamy@apache.org>
Mon, 26 Sep 2011 19:30:14 +0000 (19:30 +0000)
committerOlivier Lamy <olamy@apache.org>
Mon, 26 Sep 2011 19:30:14 +0000 (19:30 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1176008 13f79535-47bb-0310-9956-ffa450edef68

12 files changed:
archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java
archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/networkproxy/DefaultNetworkProxyAdmin.java
archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/remote/DefaultRemoteRepositoryAdmin.java
archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/AbstractRepositoryAdminTest.java
archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/networkproxy/NetworkProxyAdminTest.java
archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/test/java/org/apache/archiva/admin/repository/remote/RemoteRepositoryAdminTest.java
archiva-modules/archiva-scheduler/archiva-scheduler-indexing/src/main/java/org/apache/archiva/scheduler/indexing/DefaultDownloadRemoteIndexScheduler.java
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/archiva/web/action/admin/repositories/AbstractRemoteRepositoriesAction.java
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/archiva/web/action/admin/repositories/AddRemoteRepositoryAction.java
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/archiva/web/action/admin/repositories/EditRemoteRepositoryAction.java
archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/admin/include/remoteRepositoryForm.jspf

index a56c14920c66881c3f17c610cd4724bae95c2fa3..e312889e2d445cc5b387900505aabe76091767ab 100644 (file)
             Remote Index Url : if not starting with http will be relative to the remote repository url.
           </description>
         </field>
+        <field>
+          <name>remoteDownloadNetworkProxyId</name>
+          <version>1.4.0+</version>
+          <type>String</type>
+          <description>
+            Id of the networkProxy to use when downloading remote index.
+          </description>
+        </field>
       </fields>
     </class>
     <class>
index b8a789692243ab4aa68fdc9fb8224b9c830cfdd1..668e07cdeb36d10f0c54a0bf7cf1ab89509dad4b 100644 (file)
@@ -50,6 +50,8 @@ public class RemoteRepository
      */
     private String remoteIndexUrl = ".index";
 
+    private String remoteDownloadNetworkProxyId;
+
 
     public RemoteRepository()
     {
@@ -132,6 +134,15 @@ public class RemoteRepository
         this.remoteIndexUrl = remoteIndexUrl;
     }
 
+    public String getRemoteDownloadNetworkProxyId()
+    {
+        return remoteDownloadNetworkProxyId;
+    }
+
+    public void setRemoteDownloadNetworkProxyId( String remoteDownloadNetworkProxyId )
+    {
+        this.remoteDownloadNetworkProxyId = remoteDownloadNetworkProxyId;
+    }
 
     @Override
     public String toString()
@@ -145,6 +156,7 @@ public class RemoteRepository
         sb.append( ", timeout=" ).append( timeout );
         sb.append( ", downloadRemoteIndex=" ).append( downloadRemoteIndex );
         sb.append( ", remoteIndexUrl='" ).append( remoteIndexUrl ).append( '\'' );
+        sb.append( ", remoteDownloadNetworkProxyId='" ).append( remoteDownloadNetworkProxyId ).append( '\'' );
         sb.append( '}' );
         return sb.toString();
     }
index 6f9805e88a0ac3921b164fccd3e00d2246f2a717..f97c2ee016683ad44b9c5f9cb3b2dab3bf01454a 100644 (file)
@@ -25,11 +25,13 @@ import org.apache.archiva.admin.model.beans.NetworkProxy;
 import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
 import org.apache.archiva.admin.repository.AbstractRepositoryAdmin;
 import org.apache.archiva.audit.AuditEvent;
+import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
 import org.apache.commons.lang.StringUtils;
 import org.apache.archiva.configuration.Configuration;
 import org.apache.archiva.configuration.NetworkProxyConfiguration;
 import org.springframework.stereotype.Service;
 
+import java.rmi.Remote;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -124,6 +126,14 @@ public class DefaultNetworkProxyAdmin
         NetworkProxyConfiguration networkProxyConfiguration = getNetworkProxyConfiguration( networkProxy );
         configuration.removeNetworkProxy( networkProxyConfiguration );
 
+        for ( RemoteRepositoryConfiguration rrc : configuration.getRemoteRepositories())
+        {
+            if (StringUtils.equals( rrc.getRemoteDownloadNetworkProxyId(), networkProxyId ))
+            {
+                rrc.setRemoteDownloadNetworkProxyId( null );
+            }
+        }
+
         triggerAuditEvent( networkProxy.getId(), null, AuditEvent.DELETE_NETWORK_PROXY, auditInformation );
 
         saveConfiguration( configuration );
index 294e3cb90e8e8fbd4b16fd05e27add5643f9b557..0fa6461101623aebc17777db0af0f890a4274032 100644 (file)
@@ -61,6 +61,8 @@ public class DefaultRemoteRepositoryAdmin
             remoteRepository.setRemoteIndexUrl( repositoryConfiguration.getRemoteIndexUrl() );
             remoteRepository.setCronExpression( repositoryConfiguration.getRefreshCronExpression() );
             remoteRepository.setIndexDirectory( repositoryConfiguration.getIndexDir() );
+            remoteRepository.setRemoteDownloadNetworkProxyId(
+                repositoryConfiguration.getRemoteDownloadNetworkProxyId() );
             remoteRepositories.add( remoteRepository );
         }
         return remoteRepositories;
@@ -195,6 +197,8 @@ public class DefaultRemoteRepositoryAdmin
         remoteRepositoryConfiguration.setRemoteIndexUrl( remoteRepository.getRemoteIndexUrl() );
         remoteRepositoryConfiguration.setRefreshCronExpression( remoteRepository.getCronExpression() );
         remoteRepositoryConfiguration.setIndexDir( remoteRepository.getIndexDirectory() );
+        remoteRepositoryConfiguration.setRemoteDownloadNetworkProxyId(
+            remoteRepository.getRemoteDownloadNetworkProxyId() );
         return remoteRepositoryConfiguration;
     }
 
index e62ecad90e514f50d7f114e02c5f16a74e2a4975..d16feade09825cfcc2e40fb36caa5920bd1321e6 100644 (file)
@@ -135,6 +135,7 @@ public abstract class AbstractRepositoryAdminTest
         remoteRepository.setUserName( "foo-name" );
         remoteRepository.setPassword( "toto" );
         remoteRepository.setId( id );
+        remoteRepository.setRemoteDownloadNetworkProxyId( "foo" );
         return remoteRepository;
     }
 }
index 42550624de024b7c269a4d10be8cec0de28d46c9..0f6d3763406693f2c411caf093ab0ba9578bac4e 100644 (file)
@@ -19,6 +19,7 @@ package org.apache.archiva.admin.repository.networkproxy;
  */
 
 import org.apache.archiva.admin.model.beans.NetworkProxy;
+import org.apache.archiva.admin.model.beans.RemoteRepository;
 import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
 import org.apache.archiva.admin.repository.AbstractRepositoryAdminTest;
 import org.apache.archiva.audit.AuditEvent;
@@ -128,6 +129,39 @@ public class NetworkProxyAdminTest
         mockAuditListener.clearEvents();
     }
 
+    /**
+     * ensure we cleanup remote repos linked to a network proxy
+     */
+    @Test
+    public void addAndDeleteWithRemoteRepoLinked()
+        throws Exception
+    {
+        mockAuditListener.clearEvents();
+        int initialSize = networkProxyAdmin.getNetworkProxies().size();
+        NetworkProxy networkProxy = getNetworkProxyTest( "foo" );
+
+        networkProxyAdmin.addNetworkProxy( networkProxy, getFakeAuditInformation() );
+
+        assertEquals( initialSize + 1, networkProxyAdmin.getNetworkProxies().size() );
+
+        networkProxy = networkProxyAdmin.getNetworkProxy( "foo" );
+
+        assertNotNull( networkProxy );
+
+        RemoteRepository remoteRepository = getRemoteRepository();
+        remoteRepository.setRemoteDownloadNetworkProxyId( networkProxy.getId() );
+
+        remoteRepositoryAdmin.addRemoteRepository( remoteRepository, getFakeAuditInformation() );
+
+        networkProxyAdmin.deleteNetworkProxy( "foo", getFakeAuditInformation() );
+
+        remoteRepository = remoteRepositoryAdmin.getRemoteRepository( getRemoteRepository().getId() );
+
+        assertNull( remoteRepository.getRemoteDownloadNetworkProxyId() );
+
+        remoteRepositoryAdmin.deleteRemoteRepository( getRemoteRepository().getId(), getFakeAuditInformation() );
+    }
+
 
     protected NetworkProxy getNetworkProxyTest( String id )
     {
index 87f46c29491f3e05734f0540bc161c6759250093..7f851cb919731862e7cfa21078dfc1b62de929fc 100644 (file)
@@ -114,10 +114,12 @@ public class RemoteRepositoryAdminTest
         assertEquals( getRemoteRepository().getUserName(), repo.getUserName() );
         assertEquals( getRemoteRepository().getName(), repo.getName() );
         assertEquals( getRemoteRepository().getTimeout(), repo.getTimeout() );
+        assertEquals( getRemoteRepository().getRemoteDownloadNetworkProxyId(), repo.getRemoteDownloadNetworkProxyId() );
 
         repo.setUserName( "foo-name-changed" );
         repo.setPassword( "titi" );
         repo.setUrl( "http://foo.com/maven-really-rocks" );
+        repo.setRemoteDownloadNetworkProxyId( "toto" );
 
         remoteRepositoryAdmin.updateRemoteRepository( repo, getFakeAuditInformation() );
 
@@ -126,6 +128,7 @@ public class RemoteRepositoryAdminTest
         assertEquals( "foo-name-changed", repo.getUserName() );
         assertEquals( "titi", repo.getPassword() );
         assertEquals( "http://foo.com/maven-really-rocks", repo.getUrl() );
+        assertEquals( "toto", repo.getRemoteDownloadNetworkProxyId() );
 
         remoteRepositoryAdmin.deleteRemoteRepository( "foo", getFakeAuditInformation() );
 
@@ -150,5 +153,4 @@ public class RemoteRepositoryAdminTest
     }
 
 
-
 }
index a3445034ee2409a042db1971a26afbaea27f0169..e0bde549b4e82e0408e06a0a929c5ede86919ecc 100644 (file)
@@ -20,7 +20,6 @@ package org.apache.archiva.scheduler.indexing;
 
 import org.apache.archiva.admin.model.RepositoryAdminException;
 import org.apache.archiva.admin.model.beans.NetworkProxy;
-import org.apache.archiva.admin.model.beans.ProxyConnector;
 import org.apache.archiva.admin.model.beans.RemoteRepository;
 import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
 import org.apache.archiva.admin.model.proxyconnector.ProxyConnectorAdmin;
@@ -160,28 +159,15 @@ public class DefaultDownloadRemoteIndexScheduler
                 log.warn( "ignore scheduleDownloadRemote for repo with id {} as not exists", repositoryId );
                 return;
             }
-            String networkProxyId = null;
-            for ( ProxyConnector proxyConnector : proxyConnectorAdmin.getProxyConnectors() )
-            {
-                if ( StringUtils.equals( proxyConnector.getTargetRepoId(), repositoryId ) )
-                {
-                    networkProxyId = proxyConnector.getProxyId();
-                    break;
-                }
-            }
-
-            // FIXME add a field networkProxy at the remoteRepositories level : only use for remote index download
-
             NetworkProxy networkProxy = null;
-            if ( networkProxyId != null )
+            if ( remoteRepository.getRemoteDownloadNetworkProxyId() != null )
             {
-                for ( NetworkProxy np : networkProxyAdmin.getNetworkProxies() )
+                networkProxy = networkProxyAdmin.getNetworkProxy( remoteRepository.getRemoteDownloadNetworkProxyId() );
+                if ( networkProxy == null )
                 {
-                    if ( StringUtils.equals( np.getId(), networkProxyId ) )
-                    {
-                        networkProxy = np;
-                        break;
-                    }
+                    log.warn(
+                        "your remote repository is configured to download remote index trought a proxy we cannot find id:{}",
+                        remoteRepository.getRemoteDownloadNetworkProxyId() );
                 }
             }
 
index 2bfb322fd153dece73bcff6388d5d6c6fc7dc712..e1a94f67d2a5af59738b80d9e59a375c0f66eb88 100644 (file)
@@ -1,8 +1,12 @@
 package org.apache.archiva.web.action.admin.repositories;
 
+import org.apache.archiva.admin.model.beans.NetworkProxy;
+import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
 import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
 
 import javax.inject.Inject;
+import java.util.Collections;
+import java.util.List;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -34,6 +38,11 @@ public class AbstractRemoteRepositoriesAction
     @Inject
     private RemoteRepositoryAdmin remoteRepositoryAdmin;
 
+    @Inject
+    private NetworkProxyAdmin networkProxyAdmin;
+
+    private List<NetworkProxy> networkProxies;
+
     public RemoteRepositoryAdmin getRemoteRepositoryAdmin()
     {
         return remoteRepositoryAdmin;
@@ -43,4 +52,24 @@ public class AbstractRemoteRepositoriesAction
     {
         this.remoteRepositoryAdmin = remoteRepositoryAdmin;
     }
+
+    public NetworkProxyAdmin getNetworkProxyAdmin()
+    {
+        return networkProxyAdmin;
+    }
+
+    public void setNetworkProxyAdmin( NetworkProxyAdmin networkProxyAdmin )
+    {
+        this.networkProxyAdmin = networkProxyAdmin;
+    }
+
+    public List<NetworkProxy> getNetworkProxies()
+    {
+        return networkProxies == null ? Collections.<NetworkProxy>emptyList() : networkProxies;
+    }
+
+    public void setNetworkProxies( List<NetworkProxy> networkProxies )
+    {
+        this.networkProxies = networkProxies;
+    }
 }
index bc01b2fffe040216fe1e05070934c35252a5b952..4a2cd85bc601fce73cf19492a225312c0dfc4a51 100644 (file)
@@ -43,8 +43,10 @@ public class AddRemoteRepositoryAction
     private RemoteRepository repository;
 
     public void prepare()
+        throws RepositoryAdminException
     {
         this.repository = new RemoteRepository();
+        setNetworkProxies( getNetworkProxyAdmin().getNetworkProxies() );
     }
 
     public String input()
index 802328163c6f8a889ef1fc80d002a623c94a0e27..eabba6b7937e57adafe55ad7a3cd29427dfa6c14 100644 (file)
@@ -63,6 +63,7 @@ public class EditRemoteRepositoryAction
         {
             this.repository = getRemoteRepositoryAdmin().getRemoteRepository( repoid );
         }
+        setNetworkProxies( getNetworkProxyAdmin().getNetworkProxies() );
     }
 
     public String input()
index be1b074cbfc69e1cf84e298ec93bddd040082aea..a99449dc758fa2c7da2d028ebd09a9ffc30633b8 100644 (file)
@@ -29,6 +29,7 @@
 <s:textfield name="repository.remoteIndexUrl" label="Remote index url, can be relative to url" size="60" required="false"/>
 <s:textfield name="repository.cronExpression" label="Cron expression" size="10" required="false"/>
 <s:textfield name="repository.indexDirectory" label="Directory index storage" size="60" required="false"/>
+<s:select list="networkProxies" name="repository.remoteDownloadNetworkProxyId" emptyOption="true" required="false" listKey="id" listValue="id"/>
 
 
 <s:select list="#@java.util.LinkedHashMap@{'default' : 'Maven 2.x Repository', 'legacy' : 'Maven 1.x Repository'}"