From adad4d158629ff175277e76abeefc94f0e778388 Mon Sep 17 00:00:00 2001
From: Martin Lowe <martin.lowe@eclipse-foundation.org>
Date: Mon, 17 Mar 2025 15:01:17 -0400
Subject: [PATCH] fix: Update how we handle packages in releases to be less
 strict

In previous iterations, we had hard coded the names of packages that we
supported in the release return. This meant that any new packages were
missing, and packages that were removed would be gaps in the content.
This simply forwards the context available forward with the same names.

Resolves #18
---
 .../downloads/api/DrupalAPI.java              |   6 +-
 .../models/ReleaseVersionPackages.java        | 103 +-----------------
 .../resources/DownloadsResource.java          |   9 +-
 3 files changed, 14 insertions(+), 104 deletions(-)

diff --git a/src/main/java/org/eclipsefoundation/downloads/api/DrupalAPI.java b/src/main/java/org/eclipsefoundation/downloads/api/DrupalAPI.java
index 091de37..3eb7da9 100644
--- a/src/main/java/org/eclipsefoundation/downloads/api/DrupalAPI.java
+++ b/src/main/java/org/eclipsefoundation/downloads/api/DrupalAPI.java
@@ -11,8 +11,10 @@
 */
 package org.eclipsefoundation.downloads.api;
 
+import java.util.Map;
+
 import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
-import org.eclipsefoundation.downloads.models.ReleaseVersionPackages.ReleaseTrackerPackages;
+import org.eclipsefoundation.downloads.models.ReleaseVersionPackages.ReleaseTrackerPackage;
 import org.eclipsefoundation.downloads.models.TrackedReleases;
 
 import jakarta.ws.rs.GET;
@@ -43,5 +45,5 @@ public interface DrupalAPI {
      */
     @GET
     @Path("downloads/packages/admin/release_tracker/json/{releaseName}%20{version}/all")
-    ReleaseTrackerPackages get(@PathParam("releaseName") String releaseName, @PathParam("version") String version);
+    Map<String, ReleaseTrackerPackage> get(@PathParam("releaseName") String releaseName, @PathParam("version") String version);
 }
diff --git a/src/main/java/org/eclipsefoundation/downloads/models/ReleaseVersionPackages.java b/src/main/java/org/eclipsefoundation/downloads/models/ReleaseVersionPackages.java
index 1995448..b970419 100644
--- a/src/main/java/org/eclipsefoundation/downloads/models/ReleaseVersionPackages.java
+++ b/src/main/java/org/eclipsefoundation/downloads/models/ReleaseVersionPackages.java
@@ -12,16 +12,15 @@
 package org.eclipsefoundation.downloads.models;
 
 import java.util.List;
+import java.util.Map;
 
-import jakarta.annotation.Nullable;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
 import com.google.auto.value.AutoValue;
 
+import jakarta.annotation.Nullable;
+
 /**
  * Serialization for input/output of the release version packages.
  * 
@@ -35,7 +34,7 @@ public abstract class ReleaseVersionPackages {
 
     public abstract String getReleaseVersion();
 
-    public abstract ReleaseTrackerPackages getPackages();
+    public abstract Map<String, ReleaseTrackerPackage> getPackages();
 
     public static Builder builder() {
         return new AutoValue_ReleaseVersionPackages.Builder();
@@ -48,103 +47,11 @@ public abstract class ReleaseVersionPackages {
 
         public abstract Builder setReleaseVersion(String releaseVersion);
 
-        public abstract Builder setPackages(ReleaseTrackerPackages packages);
+        public abstract Builder setPackages(Map<String, ReleaseTrackerPackage> packages);
 
         public abstract ReleaseVersionPackages build();
     }
 
-    @AutoValue
-    @JsonDeserialize(builder = AutoValue_ReleaseVersionPackages_ReleaseTrackerPackages.Builder.class)
-    public abstract static class ReleaseTrackerPackages {
-        @Nullable
-        @JsonProperty("java-package")
-        public abstract ReleaseTrackerPackage getJavaPackage();
-
-        @Nullable
-        @JsonProperty("jee-package")
-        public abstract ReleaseTrackerPackage getJEEPackage();
-
-        @Nullable
-        @JsonProperty("cpp-package")
-        public abstract ReleaseTrackerPackage getCPPPackage();
-
-        @Nullable
-        @JsonProperty("committers-package")
-        public abstract ReleaseTrackerPackage getCommittersPackage();
-
-        @Nullable
-        @JsonProperty("php-package")
-        public abstract ReleaseTrackerPackage getPHPPackage();
-
-        @Nullable
-        @JsonProperty("dsl-package")
-        public abstract ReleaseTrackerPackage getDSLPackage();
-
-        @Nullable
-        @JsonProperty("embedcpp-package")
-        public abstract ReleaseTrackerPackage getEmbeddedCPPPackage();
-
-        @Nullable
-        @JsonProperty("modeling-package")
-        public abstract ReleaseTrackerPackage getModelingPackage();
-
-        @Nullable
-        @JsonProperty("rcp-package")
-        public abstract ReleaseTrackerPackage getRCPPackage();
-
-        @JsonInclude(Include.NON_NULL)
-        @Nullable
-        @JsonProperty("parallel-package")
-        public abstract ReleaseTrackerPackage getParallelPackage();
-
-        @Nullable
-        @JsonProperty("scout-package")
-        public abstract ReleaseTrackerPackage getScoutPackage();
-
-        public static Builder builder() {
-            return new AutoValue_ReleaseVersionPackages_ReleaseTrackerPackages.Builder();
-        }
-
-        @AutoValue.Builder
-        @JsonPOJOBuilder(withPrefix = "set")
-        public abstract static class Builder {
-            @JsonProperty("java-package")
-            public abstract Builder setJavaPackage(@Nullable ReleaseTrackerPackage javaPackage);
-
-            @JsonProperty("jee-package")
-            public abstract Builder setJEEPackage(@Nullable ReleaseTrackerPackage jeePackage);
-
-            @JsonProperty("cpp-package")
-            public abstract Builder setCPPPackage(@Nullable ReleaseTrackerPackage cppPackage);
-
-            @JsonProperty("committers-package")
-            public abstract Builder setCommittersPackage(@Nullable ReleaseTrackerPackage committersPackage);
-
-            @JsonProperty("php-package")
-            public abstract Builder setPHPPackage(@Nullable ReleaseTrackerPackage phpPackage);
-
-            @JsonProperty("dsl-package")
-            public abstract Builder setDSLPackage(@Nullable ReleaseTrackerPackage dslPackage);
-
-            @JsonProperty("embedcpp-package")
-            public abstract Builder setEmbeddedCPPPackage(@Nullable ReleaseTrackerPackage embeddedCPPPackage);
-
-            @JsonProperty("modeling-package")
-            public abstract Builder setModelingPackage(@Nullable ReleaseTrackerPackage modelingPackage);
-
-            @JsonProperty("rcp-package")
-            public abstract Builder setRCPPackage(@Nullable ReleaseTrackerPackage rcpPackage);
-
-            @JsonProperty("parallel-package")
-            public abstract Builder setParallelPackage(@Nullable ReleaseTrackerPackage parallelPackage);
-
-            @JsonProperty("scout-package")
-            public abstract Builder setScoutPackage(@Nullable ReleaseTrackerPackage scoutPackage);
-
-            public abstract ReleaseTrackerPackages build();
-        }
-    }
-
     @AutoValue
     @JsonDeserialize(builder = AutoValue_ReleaseVersionPackages_ReleaseTrackerPackage.Builder.class)
     public abstract static class ReleaseTrackerPackage {
diff --git a/src/main/java/org/eclipsefoundation/downloads/resources/DownloadsResource.java b/src/main/java/org/eclipsefoundation/downloads/resources/DownloadsResource.java
index 58cd6f0..ee6ae7a 100644
--- a/src/main/java/org/eclipsefoundation/downloads/resources/DownloadsResource.java
+++ b/src/main/java/org/eclipsefoundation/downloads/resources/DownloadsResource.java
@@ -13,6 +13,7 @@
 package org.eclipsefoundation.downloads.resources;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.function.Predicate;
 import java.util.function.Supplier;
@@ -24,7 +25,7 @@ import org.eclipsefoundation.caching.service.CachingService;
 import org.eclipsefoundation.downloads.api.DrupalAPI;
 import org.eclipsefoundation.downloads.dto.DownloadFileIndex;
 import org.eclipsefoundation.downloads.models.ReleaseVersionPackages;
-import org.eclipsefoundation.downloads.models.ReleaseVersionPackages.ReleaseTrackerPackages;
+import org.eclipsefoundation.downloads.models.ReleaseVersionPackages.ReleaseTrackerPackage;
 import org.eclipsefoundation.downloads.models.TrackedReleases.Release;
 import org.eclipsefoundation.downloads.models.TrackedReleases.ReleaseVersion;
 import org.eclipsefoundation.downloads.namespaces.DownloadsUrlParameterNames;
@@ -244,7 +245,7 @@ public class DownloadsResource {
         }
 
         // get the release package from the Drupal API
-        Optional<ReleaseTrackerPackages> rtp = getVersionPackages(releaseName, releaseVersion);
+        Optional<Map<String, ReleaseTrackerPackage>> rtp = getVersionPackages(releaseName, releaseVersion);
         if (rtp.isEmpty()) {
             String message = String
                     .format("Could not find package definitions for release '%s', version '%s'", releaseName, releaseVersion);
@@ -307,9 +308,9 @@ public class DownloadsResource {
      * @param version the version name of the specific release
      * @return
      */
-    private Optional<ReleaseTrackerPackages> getVersionPackages(String releaseName, String releaseVersion) {
+    private Optional<Map<String, ReleaseTrackerPackage>> getVersionPackages(String releaseName, String releaseVersion) {
         return cache
-                .get(releaseName + releaseVersion, new MultivaluedHashMap<>(), ReleaseTrackerPackages.class,
+                .get(releaseName + releaseVersion, new MultivaluedHashMap<>(), Map.class,
                         () -> api.get(releaseName, releaseVersion))
                 .data();
     }
-- 
GitLab