Repository: archiva Updated Branches: refs/heads/master 656af5ce4 -> 93af7e945
Adding repository registry Project: http://git-wip-us.apache.org/repos/asf/archiva/repo Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/93af7e94 Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/93af7e94 Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/93af7e94 Branch: refs/heads/master Commit: 93af7e9457feea6d64fbd11cea71fee63901ed9f Parents: 656af5c Author: Martin Stockhammer <[email protected]> Authored: Mon Oct 2 22:21:26 2017 +0200 Committer: Martin Stockhammer <[email protected]> Committed: Mon Oct 2 22:21:26 2017 +0200 ---------------------------------------------------------------------- .../archiva-base/archiva-configuration/pom.xml | 2 +- .../src/main/mdo/configuration.mdo | 14 ++ .../archiva/configuration/default-archiva.xml | 2 +- .../archiva/repository/RepositoryProvider.java | 40 +++++ .../archiva/repository/RepositoryRegistry.java | 149 +++++++++++++++++++ 5 files changed, 205 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/archiva/blob/93af7e94/archiva-modules/archiva-base/archiva-configuration/pom.xml ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-configuration/pom.xml b/archiva-modules/archiva-base/archiva-configuration/pom.xml index 6eb8923..0867558 100644 --- a/archiva-modules/archiva-base/archiva-configuration/pom.xml +++ b/archiva-modules/archiva-base/archiva-configuration/pom.xml @@ -169,7 +169,7 @@ </execution> </executions> <configuration> - <version>1.4.2</version> + <version>3.0.0</version> <models> <model>src/main/mdo/configuration.mdo</model> </models> http://git-wip-us.apache.org/repos/asf/archiva/blob/93af7e94/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo b/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo index eac0aa2..5af50af 100644 --- a/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo +++ b/archiva-modules/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo @@ -30,6 +30,10 @@ <value>org.apache.archiva.configuration</value> </default> </defaults> + <versionDefinition> + <type>field</type> + <value>version</value> + </versionDefinition> <classes> <class rootElement="true" xml.tagName="configuration"> <name>Configuration</name> @@ -432,6 +436,16 @@ </description> </field> <field> + <name>type</name> + <version>3.0.0+</version> + <type>String</type> + <required>true</required> + <defaultValue>MAVEN</defaultValue> + <description> + The repository type. Currently only MAVEN type is known. + </description> + </field> + <field> <name>name</name> <version>1.0.0+</version> <type>String</type> http://git-wip-us.apache.org/repos/asf/archiva/blob/93af7e94/archiva-modules/archiva-base/archiva-configuration/src/main/resources/org/apache/archiva/configuration/default-archiva.xml ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/resources/org/apache/archiva/configuration/default-archiva.xml b/archiva-modules/archiva-base/archiva-configuration/src/main/resources/org/apache/archiva/configuration/default-archiva.xml index 88beda2..88144df 100644 --- a/archiva-modules/archiva-base/archiva-configuration/src/main/resources/org/apache/archiva/configuration/default-archiva.xml +++ b/archiva-modules/archiva-base/archiva-configuration/src/main/resources/org/apache/archiva/configuration/default-archiva.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <configuration> - <version>3</version> + <version>3.0.0</version> <managedRepositories> <managedRepository> <id>internal</id> http://git-wip-us.apache.org/repos/asf/archiva/blob/93af7e94/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java new file mode 100644 index 0000000..fdd2153 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryProvider.java @@ -0,0 +1,40 @@ +package org.apache.archiva.repository; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.archiva.configuration.ManagedRepositoryConfiguration; +import org.apache.archiva.configuration.RemoteRepositoryConfiguration; + +import java.util.Set; + +/** + * + * This interface must be implemented by the repository implementations. These + * are responsible for creating the instances. + * + */ +public interface RepositoryProvider +{ + Set<RepositoryType> provides(); + + ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration); + + RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration); +} http://git-wip-us.apache.org/repos/asf/archiva/blob/93af7e94/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java new file mode 100644 index 0000000..eaa3daf --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryRegistry.java @@ -0,0 +1,149 @@ +package org.apache.archiva.repository; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.archiva.configuration.ArchivaConfiguration; +import org.apache.archiva.configuration.ManagedRepositoryConfiguration; +import org.apache.archiva.configuration.RemoteRepositoryConfiguration; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import javax.inject.Inject; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * Registry for repositories + */ +@Service("repositoryRegistry") +public class RepositoryRegistry +{ + /** + * We inject all repository providers + */ + @Inject + List<RepositoryProvider> repositoryProviders; + + @Inject + ArchivaConfiguration archivaConfiguration; + + private Map<String, ManagedRepository> managedRepositories = new HashMap<>( ); + private Map<String, RemoteRepository> remoteRepositories = new HashMap<>( ); + + @PostConstruct + private void initialize() { + managedRepositories = getManagedRepositoriesFromConfig(); + remoteRepositories = getRemoteRepositoriesFromConfig(); + } + + private Map<RepositoryType, RepositoryProvider> getProviderMap() { + Map<RepositoryType, RepositoryProvider> map = new HashMap<>( ); + if (repositoryProviders!=null) { + for(RepositoryProvider provider : repositoryProviders) { + for (RepositoryType type : provider.provides()) { + map.put(type, provider); + } + } + } + return map; + } + + private Map<String,ManagedRepository> getManagedRepositoriesFromConfig() { + List<ManagedRepositoryConfiguration> managedRepoConfigs = + getArchivaConfiguration().getConfiguration().getManagedRepositories(); + + if ( managedRepoConfigs == null ) + { + return Collections.emptyMap(); + } + + Map<String,ManagedRepository> managedRepos = new LinkedHashMap<>( managedRepoConfigs.size() ); + + Map<RepositoryType, RepositoryProvider> providerMap = getProviderMap( ); + for ( ManagedRepositoryConfiguration repoConfig : managedRepoConfigs ) + { + RepositoryType repositoryType = RepositoryType.valueOf( repoConfig.getType( ) ); + if (providerMap.containsKey( repositoryType )) { + managedRepos.put(repoConfig.getId(), providerMap.get(repositoryType).createManagedInstance( repoConfig )); + } + } + + return managedRepos; + } + + private Map<String,RemoteRepository> getRemoteRepositoriesFromConfig() { + List<RemoteRepositoryConfiguration> remoteRepoConfigs = + getArchivaConfiguration().getConfiguration().getRemoteRepositories(); + + if ( remoteRepoConfigs == null ) + { + return Collections.emptyMap(); + } + + Map<String,RemoteRepository> remoteRepos = new LinkedHashMap<>( remoteRepoConfigs.size() ); + + Map<RepositoryType, RepositoryProvider> providerMap = getProviderMap( ); + for ( RemoteRepositoryConfiguration repoConfig : remoteRepoConfigs ) + { + RepositoryType repositoryType = RepositoryType.valueOf( repoConfig.getType( ) ); + if (providerMap.containsKey( repositoryType )) { + remoteRepos.put(repoConfig.getId(), providerMap.get(repositoryType).createRemoteInstance( repoConfig )); + } + } + + return remoteRepos; + } + + private ArchivaConfiguration getArchivaConfiguration() { + return this.archivaConfiguration; + } + + public List<Repository> getRepositories() { + ArrayList<Repository> li = new ArrayList<>( ); + li.addAll(managedRepositories.values()); + li.addAll(remoteRepositories.values()); + return Collections.unmodifiableList( li ); + } + + public List<ManagedRepository> getManagedRepositories() { + return Collections.unmodifiableList( new ArrayList(managedRepositories.values()) ); + } + + public List<RemoteRepository> getRemoteRepositories() { + return Collections.unmodifiableList( new ArrayList(remoteRepositories.values()) ); + } + + public Repository getRepository(String repoId) { + return null; + } + + public ManagedRepository getManagedRepository(String repoId) { + return null; + } + + public RemoteRepository getRemoteRepository(String repoId) { + return null; + } + +}
