aboutsummaryrefslogtreecommitdiffstats
path: root/archiva-modules/archiva-maven/archiva-maven-repository
diff options
context:
space:
mode:
Diffstat (limited to 'archiva-modules/archiva-maven/archiva-maven-repository')
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/pom.xml1
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryGroup.java81
-rw-r--r--archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java84
3 files changed, 128 insertions, 38 deletions
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/pom.xml b/archiva-modules/archiva-maven/archiva-maven-repository/pom.xml
index e9cd8d052..627bd5be7 100644
--- a/archiva-modules/archiva-maven/archiva-maven-repository/pom.xml
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/pom.xml
@@ -56,6 +56,7 @@
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-model</artifactId>
</dependency>
+
<dependency>
<groupId>org.apache.archiva.maven</groupId>
<artifactId>archiva-maven-proxy</artifactId>
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryGroup.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryGroup.java
new file mode 100644
index 000000000..e9845ba99
--- /dev/null
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryGroup.java
@@ -0,0 +1,81 @@
+package org.apache.archiva.repository.maven2;
+
+/*
+ * 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.common.filelock.FileLockManager;
+import org.apache.archiva.repository.*;
+import org.apache.archiva.repository.content.FilesystemStorage;
+import org.apache.archiva.repository.features.ArtifactCleanupFeature;
+import org.apache.archiva.repository.features.IndexCreationFeature;
+import org.apache.archiva.repository.features.StagingRepositoryFeature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.Locale;
+
+public class MavenRepositoryGroup extends AbstractRepositoryGroup implements EditableRepositoryGroup {
+
+ private static final RepositoryCapabilities CAPABILITIES = new StandardCapabilities(
+ new ReleaseScheme[] { ReleaseScheme.RELEASE, ReleaseScheme.SNAPSHOT },
+ new String[] { MavenManagedRepository.DEFAULT_LAYOUT, MavenManagedRepository.LEGACY_LAYOUT},
+ new String[] {},
+ new String[] {ArtifactCleanupFeature.class.getName(), IndexCreationFeature.class.getName(),
+ StagingRepositoryFeature.class.getName()},
+ true,
+ true,
+ true,
+ true,
+ false
+ );
+
+ private final Logger log = LoggerFactory.getLogger(MavenRepositoryGroup.class);
+
+ private FileLockManager lockManager;
+ private FilesystemStorage fsStorage;
+
+ public MavenRepositoryGroup(String id, String name, Path repositoryBase, FileLockManager lockManager) {
+ super(RepositoryType.MAVEN, id, name, repositoryBase);
+ this.lockManager = lockManager;
+ init();
+ }
+
+ public MavenRepositoryGroup(Locale primaryLocale, String id, String name, Path repositoryBase, FileLockManager lockManager) {
+ super(primaryLocale, RepositoryType.MAVEN, id, name, repositoryBase);
+ this.lockManager = lockManager;
+ init();
+ }
+
+ private Path getRepositoryPath() {
+ return getRepositoryBase().resolve(getId());
+ }
+
+ private void init() {
+ setCapabilities(CAPABILITIES);
+ try {
+ fsStorage = new FilesystemStorage(getRepositoryPath(), lockManager);
+ } catch (IOException e) {
+ log.error("IOException while initializing repository group with path {}",getRepositoryBase());
+ throw new RuntimeException("Fatal error while accessing repository path "+ getRepositoryBase(), e);
+ }
+ setStorage(fsStorage);
+ }
+}
diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
index 79a9fb9e6..280cb36de 100644
--- a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
+++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/maven2/MavenRepositoryProvider.java
@@ -19,24 +19,9 @@ package org.apache.archiva.repository.maven2;
* under the License.
*/
-import org.apache.archiva.configuration.AbstractRepositoryConfiguration;
-import org.apache.archiva.configuration.ArchivaConfiguration;
-import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
-import org.apache.archiva.repository.BasicManagedRepository;
-import org.apache.archiva.repository.EditableManagedRepository;
-import org.apache.archiva.repository.EditableRemoteRepository;
-import org.apache.archiva.repository.EditableRepository;
-import org.apache.archiva.repository.ManagedRepository;
-import org.apache.archiva.repository.PasswordCredentials;
-import org.apache.archiva.repository.ReleaseScheme;
-import org.apache.archiva.repository.RemoteRepository;
-import org.apache.archiva.repository.RepositoryCredentials;
-import org.apache.archiva.repository.RepositoryEvent;
-import org.apache.archiva.repository.RepositoryException;
-import org.apache.archiva.repository.RepositoryProvider;
-import org.apache.archiva.repository.RepositoryType;
-import org.apache.archiva.repository.UnsupportedURIException;
+import org.apache.archiva.common.filelock.FileLockManager;
+import org.apache.archiva.configuration.*;
+import org.apache.archiva.repository.*;
import org.apache.archiva.repository.features.ArtifactCleanupFeature;
import org.apache.archiva.repository.features.IndexCreationFeature;
import org.apache.archiva.repository.features.RemoteIndexFeature;
@@ -57,6 +42,7 @@ import java.time.Duration;
import java.time.Period;
import java.time.temporal.ChronoUnit;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@@ -71,6 +57,12 @@ public class MavenRepositoryProvider implements RepositoryProvider {
@Inject
private ArchivaConfiguration archivaConfiguration;
+ @Inject
+ private RepositoryRegistry repositoryRegistry;
+
+ @Inject
+ private FileLockManager fileLockManager;
+
private static final Logger log = LoggerFactory.getLogger(MavenRepositoryProvider.class);
static final Set<RepositoryType> TYPES = new HashSet<>();
@@ -94,6 +86,11 @@ public class MavenRepositoryProvider implements RepositoryProvider {
return new MavenRemoteRepository(id, name, archivaConfiguration.getRemoteRepositoryBaseDir());
}
+ @Override
+ public EditableRepositoryGroup createRepositoryGroup(String id, String name) {
+ return new MavenRepositoryGroup(id, name, archivaConfiguration.getRepositoryBaseDir(), fileLockManager);
+ }
+
private URI getURIFromString(String uriStr) throws RepositoryException {
URI uri;
try {
@@ -165,26 +162,6 @@ public class MavenRepositoryProvider implements RepositoryProvider {
indexCreationFeature.setSkipPackedIndexCreation(cfg.isSkipPackedIndexCreation());
indexCreationFeature.setIndexPath(getURIFromString(cfg.getIndexDir()));
indexCreationFeature.setPackedIndexPath(getURIFromString(cfg.getPackedIndexDir()));
- /* -> Should be created by MavenIndexProvider
-
- Path indexPath;
- if (indexCreationFeature.getIndexPath().getScheme() == null) {
- indexPath = Paths.get(indexCreationFeature.getIndexPath().getPath());
- } else {
- indexPath = Paths.get(indexCreationFeature.getIndexPath());
- }
- Path absoluteIndexPath;
- if (indexPath.isAbsolute()) {
- absoluteIndexPath = indexPath;
- } else {
- absoluteIndexPath = PathUtil.getPathFromUri(repo.getLocation()).resolve(indexCreationFeature.getIndexPath().getPath());
- }
- try {
- Files.createDirectories(absoluteIndexPath);
- } catch (IOException e) {
- log.error("Could not create index directory {}", absoluteIndexPath);
- throw new RepositoryException("Could not create index directory " + absoluteIndexPath);
- }*/
ArtifactCleanupFeature artifactCleanupFeature = repo.getFeature(ArtifactCleanupFeature.class).get();
@@ -269,6 +246,22 @@ public class MavenRepositoryProvider implements RepositoryProvider {
}
@Override
+ public RepositoryGroup createRepositoryGroup(RepositoryGroupConfiguration configuration) throws RepositoryException {
+ Path repositoryGroupBase = getArchivaConfiguration().getRepositoryGroupBaseDir();
+ return new MavenRepositoryGroup(configuration.getId(), configuration.getId(),
+ repositoryGroupBase, fileLockManager);
+ }
+
+ @Override
+ public void updateRepositoryGroupInstance(EditableRepositoryGroup repositoryGroup, RepositoryGroupConfiguration configuration) throws RepositoryException {
+ repositoryGroup.setName(repositoryGroup.getPrimaryLocale(), configuration.getName());
+ repositoryGroup.setRepositories(configuration.getRepositories().stream().map(rid -> repositoryRegistry.getManagedRepository(rid)).collect(Collectors.toList()));
+ repositoryGroup.setMergedIndexPath(configuration.getMergedIndexPath());
+ repositoryGroup.setMergedIndexTTL(configuration.getMergedIndexTtl());
+ repositoryGroup.setSchedulingDefinition(configuration.getCronExpression());
+ }
+
+ @Override
public RemoteRepositoryConfiguration getRemoteConfiguration(RemoteRepository remoteRepository) throws RepositoryException {
if (!(remoteRepository instanceof MavenRemoteRepository)) {
log.error("Wrong remote repository type " + remoteRepository.getClass().getName());
@@ -353,6 +346,21 @@ public class MavenRepositoryProvider implements RepositoryProvider {
}
+ @Override
+ public RepositoryGroupConfiguration getRepositoryGroupConfiguration(RepositoryGroup repositoryGroup) throws RepositoryException {
+ if (repositoryGroup.getType() != RepositoryType.MAVEN) {
+ throw new RepositoryException("The given repository group is not of MAVEN type");
+ }
+ RepositoryGroupConfiguration cfg = new RepositoryGroupConfiguration();
+ cfg.setId(repositoryGroup.getId());
+ cfg.setName(repositoryGroup.getName());
+ cfg.setMergedIndexPath(repositoryGroup.getMergedIndexPath().getPath());
+ cfg.setMergedIndexTtl(repositoryGroup.getMergedIndexTTL());
+ cfg.setRepositories(repositoryGroup.getRepositories().stream().map(r -> r.getId()).collect(Collectors.toList()));
+ cfg.setCronExpression(repositoryGroup.getSchedulingDefinition());
+ return cfg;
+ }
+
private ManagedRepositoryConfiguration getStageRepoConfig(ManagedRepositoryConfiguration repository) {
ManagedRepositoryConfiguration stagingRepository = new ManagedRepositoryConfiguration();
stagingRepository.setId(repository.getId() + StagingRepositoryFeature.STAGING_REPO_POSTFIX);