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>
*/
private String remoteIndexUrl = ".index";
+ private String remoteDownloadNetworkProxyId;
+
public RemoteRepository()
{
this.remoteIndexUrl = remoteIndexUrl;
}
+ public String getRemoteDownloadNetworkProxyId()
+ {
+ return remoteDownloadNetworkProxyId;
+ }
+
+ public void setRemoteDownloadNetworkProxyId( String remoteDownloadNetworkProxyId )
+ {
+ this.remoteDownloadNetworkProxyId = remoteDownloadNetworkProxyId;
+ }
@Override
public String toString()
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();
}
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;
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 );
remoteRepository.setRemoteIndexUrl( repositoryConfiguration.getRemoteIndexUrl() );
remoteRepository.setCronExpression( repositoryConfiguration.getRefreshCronExpression() );
remoteRepository.setIndexDirectory( repositoryConfiguration.getIndexDir() );
+ remoteRepository.setRemoteDownloadNetworkProxyId(
+ repositoryConfiguration.getRemoteDownloadNetworkProxyId() );
remoteRepositories.add( remoteRepository );
}
return remoteRepositories;
remoteRepositoryConfiguration.setRemoteIndexUrl( remoteRepository.getRemoteIndexUrl() );
remoteRepositoryConfiguration.setRefreshCronExpression( remoteRepository.getCronExpression() );
remoteRepositoryConfiguration.setIndexDir( remoteRepository.getIndexDirectory() );
+ remoteRepositoryConfiguration.setRemoteDownloadNetworkProxyId(
+ remoteRepository.getRemoteDownloadNetworkProxyId() );
return remoteRepositoryConfiguration;
}
remoteRepository.setUserName( "foo-name" );
remoteRepository.setPassword( "toto" );
remoteRepository.setId( id );
+ remoteRepository.setRemoteDownloadNetworkProxyId( "foo" );
return remoteRepository;
}
}
*/
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;
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 )
{
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() );
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() );
}
-
}
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;
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() );
}
}
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
@Inject
private RemoteRepositoryAdmin remoteRepositoryAdmin;
+ @Inject
+ private NetworkProxyAdmin networkProxyAdmin;
+
+ private List<NetworkProxy> networkProxies;
+
public RemoteRepositoryAdmin getRemoteRepositoryAdmin()
{
return remoteRepositoryAdmin;
{
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;
+ }
}
private RemoteRepository repository;
public void prepare()
+ throws RepositoryAdminException
{
this.repository = new RemoteRepository();
+ setNetworkProxies( getNetworkProxyAdmin().getNetworkProxies() );
}
public String input()
{
this.repository = getRemoteRepositoryAdmin().getRemoteRepository( repoid );
}
+ setNetworkProxies( getNetworkProxyAdmin().getNetworkProxies() );
}
public String input()
<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'}"