Repository: archiva Updated Branches: refs/heads/master bed24eac4 -> 656af5ce4
Adding new interface for repository Adding interfaces for managed and remote repositories. Features that may not be common for repository implementations use the RepositoryFeature interface. Project: http://git-wip-us.apache.org/repos/asf/archiva/repo Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/656af5ce Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/656af5ce Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/656af5ce Branch: refs/heads/master Commit: 656af5ce4d118687a68f71642e4292dccdcb18c8 Parents: bed24ea Author: Martin Stockhammer <[email protected]> Authored: Sat Sep 30 23:35:35 2017 +0200 Committer: Martin Stockhammer <[email protected]> Committed: Sat Sep 30 23:35:35 2017 +0200 ---------------------------------------------------------------------- .../archiva/repository/ManagedRepository.java | 40 +++++ .../archiva/repository/ReleaseScheme.java | 27 +++ .../archiva/repository/RemoteRepository.java | 141 ++++++++++++++++ .../apache/archiva/repository/Repository.java | 163 +++++++++++++++++++ .../repository/RepositoryCapabilities.java | 99 +++++++++++ .../repository/RepositoryCredentials.java | 27 +++ .../archiva/repository/RepositoryType.java | 29 ++++ .../archiva/repository/ScheduleDefinition.java | 109 +++++++++++++ .../repository/UnsupportedFeatureException.java | 46 ++++++ .../features/ArtifactCleanupFeature.java | 98 +++++++++++ .../features/IndexCreationFeature.java | 57 +++++++ .../repository/features/RemoteIndexFeature.java | 88 ++++++++++ .../repository/features/RepositoryFeature.java | 41 +++++ .../features/StagingRepositoryFeature.java | 79 +++++++++ 14 files changed, 1044 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/archiva/blob/656af5ce/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepository.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepository.java new file mode 100644 index 0000000..62a2714 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ManagedRepository.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. + */ + + +/** + * Represents a managed repository, that is readable and writable. + */ +public interface ManagedRepository extends Repository { + + /** + * Returns the interface to access the contents of this repository. + * + * @return The repository content. + */ + ManagedRepositoryContent getContent(); + + /** + * Returns true, if repeated deployments of the same artifact with the same version throws exceptions. + * @return + */ + boolean blocksRedeployments(); +} http://git-wip-us.apache.org/repos/asf/archiva/blob/656af5ce/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ReleaseScheme.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ReleaseScheme.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ReleaseScheme.java new file mode 100644 index 0000000..0868d35 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ReleaseScheme.java @@ -0,0 +1,27 @@ +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. + */ + +/** + * Repository release schemes that change the handling of artifacts + */ +public enum ReleaseScheme { + RELEASE,SNAPSHOT +} http://git-wip-us.apache.org/repos/asf/archiva/blob/656af5ce/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RemoteRepository.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RemoteRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RemoteRepository.java new file mode 100644 index 0000000..2727b91 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RemoteRepository.java @@ -0,0 +1,141 @@ +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 java.time.Duration; +import java.util.Map; + +/** + * This represents a repository that is not fully managed by archiva. Its some kind of proxy that + * forwards requests to the remote repository and is able to cache artifacts locally. + */ +public interface RemoteRepository extends Repository { + + /** + * Returns the interface to access the content of the repository. + * @return + */ + RemoteRepositoryContent getContent(); + + /** + * Returns the credentials used to login to the remote repository. + * @return the credentials, null if not set. + */ + RepositoryCredentials getLoginCredentials(); + + /** + * Sets the login credentials for login to the remote repository. + * @param credentials + */ + void setCredentials(RepositoryCredentials credentials); + + /** + * Returns the path relative to the root url of the repository that should be used + * to check the availability of the repository. + * @return The check path, null if not set. + */ + String getCheckPath(); + + /** + * Sets the path relative to the root url of the repository that should be used to check + * the availability of the repository. + * + * @param path The path string. + */ + void setCheckPath(String path); + + /** + * Returns additional parameters, that are used for accessing the remote repository. + * @return A map of key, value pairs. + */ + Map<String,String> getExtraParameters(); + + /** + * Sets additional parameters to be used to access the remote repository. + * @param params A map of parameters, may not be null. + */ + void setExtraParameters(Map<String,String> params); + + /** + * Adds an additional parameter. + * @param key The key of the parameter + * @param value The value of the parameter + */ + void addExtraParameter(String key, String value); + + /** + * Returns extra headers that are added to the request to the remote repository. + * @return + */ + Map<String,String> getExtraHeaders(); + + /** + * Sets the extra headers, that are added to the requests to the remote repository. + */ + void setExtraHeaders(Map<String,String> headers); + + /** + * Adds an extra header. + * @param header The header name + * @param value The header value + */ + void addExtraHeader(String header, String value); + + /** + * Returns the time duration, after that the request is aborted and a error is returned, if the remote repository + * does not respond. + * @return The timeout. + */ + Duration getTimeout(); + + /** + * Sets the timeout for requests to the remote repository. + * + * @param duration The amount of time, after that the request is aborted. + */ + void setTimeout(Duration duration); + + /** + * Returns the time duration after that downloads from the remote repository are aborted. + * @return + */ + Duration getDownloadTimeout(); + + /** + * Sets the maximum duration for downloads from the remote repository. + * + * @param duration The amount of time after that a download is aborted. + */ + void setDownloadTimeout(Duration duration); + + /** + * Returns the id of the proxy, that is used for accessing the remote repository. + * @return The proxy id. + */ + String getProxyId(); + + /** + * Sets the proxy id that is used for requests to the remote repository. + * + * @param proxyId The id of the proxy. + */ + void setProxyId(String proxyId); +} http://git-wip-us.apache.org/repos/asf/archiva/blob/656af5ce/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java new file mode 100644 index 0000000..8fef466 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/Repository.java @@ -0,0 +1,163 @@ +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.repository.features.RepositoryFeature; + +import java.net.URI; +import java.util.List; +import java.util.Locale; +import java.util.Set; + +/** + * + * Base interface for repositories. + * + * Created by Martin Stockhammer on 21.09.17. + */ +public interface Repository { + + /** + * Return the identifier of the repository. Repository identifier should be unique at least + * for the same type. + * @return The identifier. + */ + String getId(); + + /** + * This is the display name of the repository. This string is presented in the user interface. + * + * @return The display name of the repository + */ + String getName(); + + /** + * Returns the name in the given locale. + * @param locale + * @return + */ + String getName(Locale locale); + + /** + * Returns a description of this repository. + * @return The description. + */ + String getDescription(); + + /** + * Returns the description for the given locale. + * @param locale + * @return + */ + String getDescription(Locale locale); + + /** + * This identifies the type of repository. Archiva does only support certain types of repositories. + * + * @return A unique identifier for the repository type. + */ + RepositoryType getType(); + + + /** + * Returns the location of this repository. For local repositories this might be a file URI, for + * remote repositories a http URL or some very repository specific schemes. + * Each repository has only one unique location. + * + * @return The repository location. + */ + URI getLocation(); + + + /** + * A repository may allow additional locations that can be used, if the primary location is not available. + * @return + */ + Set<URI> getFailoverLocations(); + + /** + * True, if this repository is scanned regularly. + */ + boolean isScanned(); + + /** + * The definition when the scheduler should run to scan this repository. + * @return + */ + List<ScheduleDefinition> getSchedulingTimes(); + + /** + * Returns true, if this repository has a index available + * @return + */ + boolean hasIndex(); + + /** + * Returns the path to the index parent folder. May be a HTTP URL or a file path. + * @return + */ + URI getIndexPath(); + + /** + * Returns a layout definition. The returned string may be implementation specific and is not + * standardized. + * + * @return + */ + String getLayout(); + + /** + * Returns the release schemes that are active by this repository. E.g. for maven repositories + * this may either be a release repository, a snapshot repository or a combined repository. + * @return + */ + Set<ReleaseScheme> getActiveReleaseSchemes(); + + + /** + * Returns the capabilities of the repository implementation. + * @return + */ + RepositoryCapabilities getCapabilities(); + + + /** + * Extension method that allows to provide different features that are not supported by all + * repository types. + * + * @param clazz The feature class that is requested + * @param <T> This is the class of the feature + * @return The feature implementation for this repository instance, if it is supported + * @throws UnsupportedFeatureException if the feature is not supported by this repository type + */ + <T extends RepositoryFeature<T>> RepositoryFeature<T> getFeature(Class<T> clazz) throws UnsupportedFeatureException; + + + /** + * Returns true, if the requested feature is supported by this repository. + * + * @param clazz The requested feature class + * @param <T> The requested feature class + * @return True, if the feature is supported, otherwise false. + */ + <T extends RepositoryFeature<T>> boolean supportsFeature(Class<T> clazz); + + +} http://git-wip-us.apache.org/repos/asf/archiva/blob/656af5ce/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryCapabilities.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryCapabilities.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryCapabilities.java new file mode 100644 index 0000000..525d521 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryCapabilities.java @@ -0,0 +1,99 @@ +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 java.util.Set; + +/** + * Describe the capabilities a repository implementation supports. + */ +public interface RepositoryCapabilities { + + /** + * Returns true, if this repository has a mechanism for indexes + * @return true, if this repository is indexable, otherwise false. + */ + default boolean isIndexable() { + return true; + } + + /** + * Returns true, if this repository type is storing its artifacts on the filesystem. + * @return true, if this is a file based repository, otherwise false. + */ + default boolean isFileBased() { + return true; + } + + /** + * Returns true, if this repository allows to block redeployments to prevent overriding + * released artifacts + * @return true, if this repo can block redeployments, otherwise false. + */ + default boolean canBlockRedeployments() { + return true; + } + + /** + * Returns true, if the artifacts can be scanned for metadata retrieval or maintenance tasks + * @return true, if this repository can be scanned regularily, otherwise false. + */ + default boolean isScannable() { + return true; + } + + /** + * Returns true, if this repository can use failover repository urls + * @return true, if there is a failover mechanism for repository access, otherwise false. + */ + default boolean allowsFailover() { + return false; + } + + /** + * Returns the release schemes this repository type can handle + */ + Set<ReleaseScheme> supportedReleaseSchemes(); + + /** + * Returns the layouts this repository type can provide + * @return The list of layouts supported by this repository. + */ + Set<String> supportedLayouts(); + + /** + * Returns additional capabilities, that this repository type implements. + * @return A list of custom capabilities. + */ + Set<String> customCapabilities(); + + /** + * Returns the supported features this repository type supports. This method returns + * string that corresponds to fully qualified class names. + * We use string representation to allow implementations provide their own feature + * implementations if necessary and to avoid class errors. + * + * @return The list of supported features as string values. + */ + Set<String> supportedFeatures(); + + +} http://git-wip-us.apache.org/repos/asf/archiva/blob/656af5ce/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryCredentials.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryCredentials.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryCredentials.java new file mode 100644 index 0000000..ad0653d --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryCredentials.java @@ -0,0 +1,27 @@ +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. + */ + + +/** + * Credentials used to login to a remote repository. + */ +public interface RepositoryCredentials { +} http://git-wip-us.apache.org/repos/asf/archiva/blob/656af5ce/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryType.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryType.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryType.java new file mode 100644 index 0000000..f60c657 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/RepositoryType.java @@ -0,0 +1,29 @@ +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. + */ + + +/** + * The repository types that are known to the system. + */ +public enum RepositoryType { + + MAVEN, NPM +} http://git-wip-us.apache.org/repos/asf/archiva/blob/656af5ce/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ScheduleDefinition.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ScheduleDefinition.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ScheduleDefinition.java new file mode 100644 index 0000000..2764544 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/ScheduleDefinition.java @@ -0,0 +1,109 @@ +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 java.time.*; +import java.util.Collection; +import java.util.SortedSet; +import java.util.TreeSet; + +/** + * A definition of schedule times. + */ +public class ScheduleDefinition { + + + final SortedSet<DayOfWeek> daysOfWeek = new TreeSet<>(); + + final SortedSet<MonthDay> daysOfMonth = new TreeSet<>(); + + final SortedSet<LocalTime> scheduleTimes = new TreeSet<>(); + + final LocalTime startTime; + + final Duration timeInterval; + + boolean fixedTimes = false; + + + public ScheduleDefinition(Collection<DayOfWeek> daysOfWeek, + Collection<MonthDay> daysOfMonth, + Collection<LocalTime> scheduleTimes, + LocalTime startTime, Duration timeInterval) { + if (daysOfWeek!=null) + this.daysOfWeek.addAll(daysOfWeek); + if (daysOfMonth!=null) + this.daysOfMonth.addAll(daysOfMonth); + if (scheduleTimes!=null) + this.scheduleTimes.addAll(scheduleTimes); + this.startTime = startTime; + this.timeInterval = timeInterval; + } + + /** + * Returns the days of the week on which the action should be run. + * @return The set of week days. + */ + public SortedSet<DayOfWeek> getDaysOfWeek() { + return daysOfWeek; + } + + /** + * Returns the days in the month on which the action should be run. + * @return The set of days. + */ + public SortedSet<MonthDay> getDaysOfMonth() { + return daysOfMonth; + } + + /** + * Returns the time on each day on which the action should be run. + * @return a set of times on which the action should be run. + */ + public SortedSet<LocalTime> getScheduleTimes() { + return scheduleTimes; + } + + /** + * Returns the start time each day on which the action should be run. + * @return the start time. + */ + public LocalTime getStartTime() { + return startTime; + } + + /** + * The interval after that the next run should be scheduled. + * @return The interval between runs. + */ + public Duration getTimeInterval() { + return timeInterval; + } + + /** + * Returns true, if the task should be run on fixed times. Otherwise + * the tasks are scheduled repeatedly with the time interval. + * @return true, if the schedule times are fixed. + */ + public boolean isFixedTimes() { + return fixedTimes; + }; +} http://git-wip-us.apache.org/repos/asf/archiva/blob/656af5ce/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/UnsupportedFeatureException.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/UnsupportedFeatureException.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/UnsupportedFeatureException.java new file mode 100644 index 0000000..6f798c2 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/UnsupportedFeatureException.java @@ -0,0 +1,46 @@ +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. + */ + +/** + * This exception is thrown if a given feature is not supported by the repository. + * + */ +public class UnsupportedFeatureException extends Exception { + + public UnsupportedFeatureException() { + } + + public UnsupportedFeatureException(String message) { + super(message); + } + + public UnsupportedFeatureException(String message, Throwable cause) { + super(message, cause); + } + + public UnsupportedFeatureException(Throwable cause) { + super(cause); + } + + public UnsupportedFeatureException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} http://git-wip-us.apache.org/repos/asf/archiva/blob/656af5ce/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/ArtifactCleanupFeature.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/ArtifactCleanupFeature.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/ArtifactCleanupFeature.java new file mode 100644 index 0000000..772733b --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/ArtifactCleanupFeature.java @@ -0,0 +1,98 @@ +package org.apache.archiva.repository.features; + +/* + * 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 java.time.Period; + +/** + * + * This feature provides settings for artifact cleanup. This is meant mainly for snapshot artifacts, + * that should be deleted after a time period. + * + */ +public class ArtifactCleanupFeature implements RepositoryFeature<ArtifactCleanupFeature> { + + private boolean deleteReleasedSnapshots = false; + private Period retentionTime = Period.ofDays(100); + private int retentionCount = 2; + + public ArtifactCleanupFeature(boolean deleteReleasedSnapshots, Period retentionTime, int retentionCount) { + this.deleteReleasedSnapshots = deleteReleasedSnapshots; + this.retentionTime = retentionTime; + this.retentionCount = retentionCount; + } + + @Override + public ArtifactCleanupFeature getFeature() { + return this; + } + + /** + * Returns true, if snapshot artifacts should be deleted, when artifacts with release version + * exist in one of the managed repositories. + * @return True, if artifacts should be deleted after release, otherwise false. + */ + public boolean isDeleteReleasedSnapshots() { + return deleteReleasedSnapshots; + } + + /** + * Sets the flag for the deletion of released snapshot artifacts. + * @param deleteReleasedSnapshots + */ + public void setDeleteReleasedSnapshots(boolean deleteReleasedSnapshots) { + this.deleteReleasedSnapshots = deleteReleasedSnapshots; + } + + /** + * Returns the amount of time after that, the (snapshot) artifacts can be deleted. + * + * @return The time period after that the artifacts can be deleted. + */ + public Period getRetentionTime() { + return retentionTime; + } + + /** + * Sets time period, after that artifacts can be deleted. + * @param retentionTime + */ + public void setRetentionTime(Period retentionTime) { + this.retentionTime = retentionTime; + } + + /** + * Sets the number of (snapshot) artifacts that should be kept, even if they are older + * than the retention time. + * @return The number of artifacts for a version that should be kept + */ + public int getRetentionCount() { + return retentionCount; + } + + /** + * Sets the number of artifacts that should be kept and not be deleted. + * + * @param retentionCount + */ + public void setRetentionCount(int retentionCount) { + this.retentionCount = retentionCount; + } +} http://git-wip-us.apache.org/repos/asf/archiva/blob/656af5ce/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java new file mode 100644 index 0000000..43b0221 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/IndexCreationFeature.java @@ -0,0 +1,57 @@ +package org.apache.archiva.repository.features; + +/* + * 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. + */ + + +/** + * + * This feature provides some information about index creation. + * + */ +public class IndexCreationFeature implements RepositoryFeature<IndexCreationFeature> { + + private boolean skipPackedIndexCreation = false; + + public IndexCreationFeature(boolean skipPackedIndexCreation) { + this.skipPackedIndexCreation = skipPackedIndexCreation; + } + + @Override + public IndexCreationFeature getFeature() { + return this; + } + + /** + * Returns true, if no packed index files should be created. + * @return True, if no packed index files are created, otherwise false. + */ + public boolean isSkipPackedIndexCreation() { + return skipPackedIndexCreation; + } + + /** + * Sets the flag for packed index creation. + * + * @param skipPackedIndexCreation + */ + public void setSkipPackedIndexCreation(boolean skipPackedIndexCreation) { + this.skipPackedIndexCreation = skipPackedIndexCreation; + } +} http://git-wip-us.apache.org/repos/asf/archiva/blob/656af5ce/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/RemoteIndexFeature.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/RemoteIndexFeature.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/RemoteIndexFeature.java new file mode 100644 index 0000000..5334cee --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/RemoteIndexFeature.java @@ -0,0 +1,88 @@ +package org.apache.archiva.repository.features; + +/* + * 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 java.net.URI; + +/** + * Feature for remote index download. + */ +public class RemoteIndexFeature implements RepositoryFeature<RemoteIndexFeature> { + + private boolean downloadRemoteIndex = false; + private URI indexUri; + private boolean downloadRemoteIndexOnStartup = false; + + + @Override + public RemoteIndexFeature getFeature() { + return this; + } + + /** + * True, if the remote index should be downloaded. + * @return True if download, otherwise false. + */ + public boolean isDownloadRemoteIndex() { + return downloadRemoteIndex; + } + + public void setDownloadRemoteIndex(boolean downloadRemoteIndex) { + this.downloadRemoteIndex = downloadRemoteIndex; + } + + /** + * The URI to access the remote index. May be a relative URI that is relative to the + * repository URI. + * + * @return + */ + public URI getIndexUri() { + return indexUri; + } + + /** + * Sets the URI to access the remote index. May be a relative URI that is relative to the + * repository URI. The allowed URI schemes are dependent on the repository type. + * + * @param indexUri The URI of the index + */ + public void setIndexUri(URI indexUri) { + this.indexUri = indexUri; + } + + /** + * Returns true, if the remote index should be downloaded on startup of the repository. + * @return true, if the index should be downloaded during startup, otherwise false. + */ + public boolean isDownloadRemoteIndexOnStartup() { + return downloadRemoteIndexOnStartup; + } + + /** + * Sets the flag for download of the remote repository index. + * + * @param downloadRemoteIndexOnStartup + */ + public void setDownloadRemoteIndexOnStartup(boolean downloadRemoteIndexOnStartup) { + this.downloadRemoteIndexOnStartup = downloadRemoteIndexOnStartup; + } +} http://git-wip-us.apache.org/repos/asf/archiva/blob/656af5ce/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/RepositoryFeature.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/RepositoryFeature.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/RepositoryFeature.java new file mode 100644 index 0000000..14b5c74 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/RepositoryFeature.java @@ -0,0 +1,41 @@ +package org.apache.archiva.repository.features; + +/* + * 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. + */ + + +/** + * Created by martin on 30.09.17. + */ +public interface RepositoryFeature<T extends RepositoryFeature<T>> { + + default String getId() { + return this.getClass().getName(); + } + + default boolean isFeature(String featureId) { + return this.getClass().getName().equals(featureId); + } + + default <K extends RepositoryFeature<K>> boolean isFeature(Class<K> clazz) { + return this.getClass().equals(clazz); + } + + T getFeature(); +} http://git-wip-us.apache.org/repos/asf/archiva/blob/656af5ce/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/StagingRepositoryFeature.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/StagingRepositoryFeature.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/StagingRepositoryFeature.java new file mode 100644 index 0000000..70deadc --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/features/StagingRepositoryFeature.java @@ -0,0 +1,79 @@ +package org.apache.archiva.repository.features; + +/* + * 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.repository.ManagedRepository; + +/** + * This feature provides some information about staging repositories. + * + */ +public class StagingRepositoryFeature implements RepositoryFeature<StagingRepositoryFeature> { + + private ManagedRepository stagingRepository = null; + private boolean stageRepoNeeded = false; + + public StagingRepositoryFeature(ManagedRepository stagingRepository, boolean stageRepoNeeded) { + this.stagingRepository = stagingRepository; + this.stageRepoNeeded = stageRepoNeeded; + } + + @Override + public StagingRepositoryFeature getFeature() { + return this; + } + + /** + * Returns the staging repository, if it exists. + * + * @return The staging repository, null if not set. + * + */ + public ManagedRepository getStagingRepository() { + return stagingRepository; + } + + /** + * Sets the staging repository. + * + * @param stagingRepository + */ + public void setStagingRepository(ManagedRepository stagingRepository) { + this.stagingRepository = stagingRepository; + } + + /** + * Returns true, if a staging repository is needed by this repository. + * @return True, if staging repository is needed, otherwise false. + */ + public boolean isStageRepoNeeded() { + return stageRepoNeeded; + } + + /** + * Sets the flag for needed staging repository. + * + * @param stageRepoNeeded + */ + public void setStageRepoNeeded(boolean stageRepoNeeded) { + this.stageRepoNeeded = stageRepoNeeded; + } +}
