|
|
|
|
|
|
|
|
import org.apache.archiva.proxy.model.ProxyConnector; |
|
|
import org.apache.archiva.proxy.model.ProxyConnector; |
|
|
import org.apache.archiva.proxy.model.RepositoryProxyHandler; |
|
|
import org.apache.archiva.proxy.model.RepositoryProxyHandler; |
|
|
import org.apache.archiva.repository.*; |
|
|
import org.apache.archiva.repository.*; |
|
|
|
|
|
import org.apache.archiva.repository.events.Event; |
|
|
|
|
|
import org.apache.archiva.repository.events.RepositoryEventListener; |
|
|
|
|
|
import org.apache.archiva.repository.events.RepositoryRegistryEvent; |
|
|
import org.slf4j.Logger; |
|
|
import org.slf4j.Logger; |
|
|
import org.slf4j.LoggerFactory; |
|
|
import org.slf4j.LoggerFactory; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
*/ |
|
|
*/ |
|
|
@SuppressWarnings( "SpringJavaInjectionPointsAutowiringInspection" ) |
|
|
@SuppressWarnings( "SpringJavaInjectionPointsAutowiringInspection" ) |
|
|
@Service("proxyRegistry#default") |
|
|
@Service("proxyRegistry#default") |
|
|
public class ArchivaProxyRegistry implements ProxyRegistry, ConfigurationListener { |
|
|
|
|
|
|
|
|
public class ArchivaProxyRegistry implements ProxyRegistry, RepositoryEventListener { |
|
|
|
|
|
|
|
|
private static final Logger log = LoggerFactory.getLogger(ArchivaProxyRegistry.class); |
|
|
private static final Logger log = LoggerFactory.getLogger(ArchivaProxyRegistry.class); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (repositoryProxyHandlers == null) { |
|
|
if (repositoryProxyHandlers == null) { |
|
|
repositoryProxyHandlers = new ArrayList<>(); |
|
|
repositoryProxyHandlers = new ArrayList<>(); |
|
|
} |
|
|
} |
|
|
archivaConfiguration.addListener( this ); |
|
|
|
|
|
updateHandler(); |
|
|
updateHandler(); |
|
|
updateConnectors(); |
|
|
updateConnectors(); |
|
|
updateNetworkProxies(); |
|
|
updateNetworkProxies(); |
|
|
|
|
|
repositoryRegistry.register(this, RepositoryRegistryEvent.RegistryEventType.RELOADED); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private ArchivaConfiguration getArchivaConfiguration() { |
|
|
private ArchivaConfiguration getArchivaConfiguration() { |
|
|
|
|
|
|
|
|
getArchivaConfiguration().getConfiguration().getProxyConnectors(); |
|
|
getArchivaConfiguration().getConfiguration().getProxyConnectors(); |
|
|
|
|
|
|
|
|
connectorList = proxyConnectorConfigurations.stream() |
|
|
connectorList = proxyConnectorConfigurations.stream() |
|
|
.map(configuration -> buildProxyConnector(configuration)) |
|
|
|
|
|
|
|
|
.map(this::buildProxyConnector) |
|
|
|
|
|
.filter(Optional::isPresent) |
|
|
|
|
|
.map(Optional::get) |
|
|
.sorted(comparator).collect(Collectors.toList()); |
|
|
.sorted(comparator).collect(Collectors.toList()); |
|
|
connectorMap = connectorList.stream().collect(Collectors.groupingBy(a -> a.getSourceRepository().getId())); |
|
|
connectorMap = connectorList.stream().collect(Collectors.groupingBy(a -> a.getSourceRepository().getId())); |
|
|
for (RepositoryProxyHandler handler : repositoryProxyHandlers) { |
|
|
for (RepositoryProxyHandler handler : repositoryProxyHandlers) { |
|
|
|
|
|
|
|
|
return policies.stream().collect( Collectors.toMap( Function.identity(), p -> PolicyUtil.findOption( policyConfig.get(p.getId()), p ) ) ); |
|
|
return policies.stream().collect( Collectors.toMap( Function.identity(), p -> PolicyUtil.findOption( policyConfig.get(p.getId()), p ) ) ); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private ProxyConnector buildProxyConnector(ProxyConnectorConfiguration configuration) { |
|
|
|
|
|
|
|
|
private Optional<ProxyConnector> buildProxyConnector(ProxyConnectorConfiguration configuration) { |
|
|
ProxyConnector proxyConnector = new ProxyConnector(); |
|
|
ProxyConnector proxyConnector = new ProxyConnector(); |
|
|
proxyConnector.setOrder(configuration.getOrder()); |
|
|
proxyConnector.setOrder(configuration.getOrder()); |
|
|
proxyConnector.setBlacklist(configuration.getBlackListPatterns()); |
|
|
proxyConnector.setBlacklist(configuration.getBlackListPatterns()); |
|
|
|
|
|
|
|
|
proxyConnector.setProperties(configuration.getProperties()); |
|
|
proxyConnector.setProperties(configuration.getProperties()); |
|
|
proxyConnector.setProxyId(configuration.getProxyId()); |
|
|
proxyConnector.setProxyId(configuration.getProxyId()); |
|
|
ManagedRepository srcRepo = repositoryRegistry.getManagedRepository(configuration.getSourceRepoId()); |
|
|
ManagedRepository srcRepo = repositoryRegistry.getManagedRepository(configuration.getSourceRepoId()); |
|
|
|
|
|
if (srcRepo==null) { |
|
|
|
|
|
return Optional.empty(); |
|
|
|
|
|
} |
|
|
proxyConnector.setSourceRepository(srcRepo); |
|
|
proxyConnector.setSourceRepository(srcRepo); |
|
|
RemoteRepository targetRepo = repositoryRegistry.getRemoteRepository(configuration.getTargetRepoId()); |
|
|
RemoteRepository targetRepo = repositoryRegistry.getRemoteRepository(configuration.getTargetRepoId()); |
|
|
|
|
|
if (targetRepo==null) { |
|
|
|
|
|
return Optional.empty(); |
|
|
|
|
|
} |
|
|
proxyConnector.setTargetRepository(targetRepo); |
|
|
proxyConnector.setTargetRepository(targetRepo); |
|
|
return proxyConnector; |
|
|
|
|
|
|
|
|
return Optional.of(proxyConnector); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
|
|
|
|
|
|
return this.handlerMap.containsKey(type); |
|
|
return this.handlerMap.containsKey(type); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public void configurationEvent(ConfigurationEvent event) { |
|
|
|
|
|
log.debug("Config changed updating proxy list"); |
|
|
|
|
|
init( ); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public List<ProxyConnector> getProxyConnectors() { |
|
|
public List<ProxyConnector> getProxyConnectors() { |
|
|
|
|
|
|
|
|
{ |
|
|
{ |
|
|
init(); |
|
|
init(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public void raise(Event event) { |
|
|
|
|
|
log.debug("Reload happened, updating proxy list"); |
|
|
|
|
|
if (event.getType()== RepositoryRegistryEvent.RegistryEventType.RELOADED) { |
|
|
|
|
|
init(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |