From 38047a25aa465039bddc5bda0424133dfa29e6b3 Mon Sep 17 00:00:00 2001 From: Konstantin Schaper Date: Tue, 21 Jul 2020 11:39:08 +0200 Subject: [PATCH] Add optional dependencies to plugin descriptors and plugin center dto --- .../scm/plugin/AvailablePluginDescriptor.java | 19 ++++++++++++++++++- .../scm/plugin/InstalledPluginDescriptor.java | 1 + .../sonia/scm/plugin/PluginDescriptor.java | 8 +++++++- .../sonia/scm/plugin/PluginCenterDto.java | 3 +++ .../scm/plugin/PluginCenterDtoMapper.java | 2 +- 5 files changed, 30 insertions(+), 3 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/plugin/AvailablePluginDescriptor.java b/scm-core/src/main/java/sonia/scm/plugin/AvailablePluginDescriptor.java index f8dd2d1a71..e251753113 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/AvailablePluginDescriptor.java +++ b/scm-core/src/main/java/sonia/scm/plugin/AvailablePluginDescriptor.java @@ -21,12 +21,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.plugin; import java.util.Optional; import java.util.Set; +import static java.util.Collections.emptySet; + /** * @since 2.0.0 */ @@ -35,13 +37,23 @@ public class AvailablePluginDescriptor implements PluginDescriptor { private final PluginInformation information; private final PluginCondition condition; private final Set dependencies; + private final Set optionalDependencies; private final String url; private final String checksum; + /** + * @deprecated Use {@link #AvailablePluginDescriptor(PluginInformation, PluginCondition, Set, Set, String, String)} instead + */ + @Deprecated public AvailablePluginDescriptor(PluginInformation information, PluginCondition condition, Set dependencies, String url, String checksum) { + this(information, condition, dependencies, emptySet(), url, checksum); + } + + public AvailablePluginDescriptor(PluginInformation information, PluginCondition condition, Set dependencies, Set optionalDependencies, String url, String checksum) { this.information = information; this.condition = condition; this.dependencies = dependencies; + this.optionalDependencies = optionalDependencies; this.url = url; this.checksum = checksum; } @@ -68,4 +80,9 @@ public class AvailablePluginDescriptor implements PluginDescriptor { public Set getDependencies() { return dependencies; } + + @Override + public Set getOptionalDependencies() { + return optionalDependencies; + } } diff --git a/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java b/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java index 916c8691d9..faedb2a6f5 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java +++ b/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java @@ -191,6 +191,7 @@ public final class InstalledPluginDescriptor extends ScmModule implements Plugin * * @since 2.0.0 */ + @Override public Set getOptionalDependencies() { if (optionalDependencies == null) { diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginDescriptor.java b/scm-core/src/main/java/sonia/scm/plugin/PluginDescriptor.java index b93f3b0798..76d2fd2cdb 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/PluginDescriptor.java +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginDescriptor.java @@ -21,11 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.plugin; import java.util.Set; +import static java.util.Collections.emptySet; + public interface PluginDescriptor { PluginInformation getInformation(); @@ -34,4 +36,8 @@ public interface PluginDescriptor { Set getDependencies(); + default Set getOptionalDependencies() { + return emptySet(); + } + } diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterDto.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterDto.java index 223e02ad47..c034c98a56 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterDto.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterDto.java @@ -85,6 +85,9 @@ public final class PluginCenterDto implements Serializable { @XmlElement(name = "dependencies") private Set dependencies; + @XmlElement(name = "optionalDependencies") + private Set optionalDependencies; + @XmlElement(name = "_links") private Map links; } diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterDtoMapper.java index 27d20d638a..5927592d0c 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterDtoMapper.java @@ -43,7 +43,7 @@ public abstract class PluginCenterDtoMapper { for (PluginCenterDto.Plugin plugin : pluginCenterDto.getEmbedded().getPlugins()) { String url = plugin.getLinks().get("download").getHref(); AvailablePluginDescriptor descriptor = new AvailablePluginDescriptor( - map(plugin), map(plugin.getConditions()), plugin.getDependencies(), url, plugin.getSha256sum() + map(plugin), map(plugin.getConditions()), plugin.getDependencies(), plugin.getOptionalDependencies(), url, plugin.getSha256sum() ); plugins.add(new AvailablePlugin(descriptor)); }