Browse Source

Typed version info

Toni Helenius 2 năm trước cách đây
mục cha
commit
f305bbf441

+ 28 - 19
jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/CachedOptionsContainer.java

@@ -31,15 +31,6 @@
  */
 package com.jme3.gde.templates.gradledesktop.options;
 
-import com.jme3.gde.templates.gradledesktop.options.AdditionalLibrary;
-import com.jme3.gde.templates.gradledesktop.options.GUILibrary;
-import com.jme3.gde.templates.gradledesktop.options.JMEVersion;
-import com.jme3.gde.templates.gradledesktop.options.JMEVersionComparator;
-import com.jme3.gde.templates.gradledesktop.options.LibraryVersion;
-import com.jme3.gde.templates.gradledesktop.options.MavenArtifact;
-import com.jme3.gde.templates.gradledesktop.options.NetworkingLibrary;
-import com.jme3.gde.templates.gradledesktop.options.PhysicsLibrary;
-import com.jme3.gde.templates.gradledesktop.options.TemplateLibrary;
 import com.jme3.gde.templates.utils.mavensearch.MavenApiVersionChecker;
 import com.jme3.gde.templates.utils.mavensearch.MavenVersionChecker;
 import java.util.ArrayList;
@@ -51,6 +42,7 @@ import java.util.Objects;
 import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.function.Consumer;
+import java.util.function.Function;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.regex.Pattern;
@@ -66,7 +58,7 @@ public class CachedOptionsContainer {
 
     private static final Logger logger = Logger.getLogger(CachedOptionsContainer.class.getName());
 
-    private List<LibraryVersion> jmeVersions;
+    private List<LibraryVersion<JMEVersionInfo>> jmeVersions;
     private List<TemplateLibrary> additionalLibraries;
     private List<TemplateLibrary> guiLibraries;
     private List<TemplateLibrary> networkingLibraries;
@@ -90,8 +82,14 @@ public class CachedOptionsContainer {
     private void initialize() {
         MavenVersionChecker mavenVersionChecker = new MavenApiVersionChecker();
 
-        jmeVersions = initVersions(mavenVersionChecker, MavenArtifact.JME_GROUP_ID, JMEVersion.JME_ARTIFACT_ID, "-stable$", new JMEVersionComparator(), JMEVersion.values(), (result) -> {
+        jmeVersions = initVersions(mavenVersionChecker,
+                MavenArtifact.JME_GROUP_ID,
+                JMEVersion.JME_ARTIFACT_ID,
+                "-stable$", new JMEVersionComparator(),
+                JMEVersion.values(), (result) -> {
             jmeVersions = result;
+        }, (version) -> {
+            return new JMEVersionInfo(version);
         });
         additionalLibraries = initLibaries(mavenVersionChecker, AdditionalLibrary.values());
         guiLibraries = initLibaries(mavenVersionChecker, GUILibrary.values());
@@ -179,13 +177,14 @@ public class CachedOptionsContainer {
         return physicsLibraries;
     }
 
-    public List<LibraryVersion> getJmeVersions() {
+    public List<LibraryVersion<JMEVersionInfo>> getJmeVersions() {
         return jmeVersions;
     }
 
-    private List<LibraryVersion> initVersions(MavenVersionChecker mavenVersionChecker, String groupId,
-            String artifactId, String pattern, Comparator<LibraryVersion> versionComparator,
-            LibraryVersion[] versions, Consumer<List<LibraryVersion>> completedVersionsConsumer) {
+    private <T extends VersionInfo> List<LibraryVersion<T>> initVersions(MavenVersionChecker mavenVersionChecker, String groupId,
+            String artifactId, String pattern, Comparator<LibraryVersion<T>> versionComparator,
+            LibraryVersion<T>[] versions, Consumer<List<LibraryVersion<T>>> completedVersionsConsumer,
+            Function<String, T> versionInfoSupplier) {
         mavenVersionChecker.getAllVersions(groupId, artifactId).whenComplete((result, exception) -> {
 
             if (exception != null || result == null) {
@@ -195,13 +194,16 @@ public class CachedOptionsContainer {
                 return;
             }
 
-            initVersionList(result, pattern, versionComparator, versions, groupId, artifactId, completedVersionsConsumer);
+            initVersionList(result, pattern, versionComparator, versions, groupId, artifactId, completedVersionsConsumer, versionInfoSupplier);
         });
 
         return Collections.unmodifiableList(Arrays.asList(versions));
     }
 
-    private static void initVersionList(List<String> result, String pattern, Comparator<LibraryVersion> versionComparator, LibraryVersion[] versions, String groupId, String artifactId, Consumer<List<LibraryVersion>> completedVersionsConsumer) {
+    private static <T extends VersionInfo> void initVersionList(List<String> result, String pattern,
+            Comparator<LibraryVersion<T>> versionComparator, LibraryVersion<T>[] versions,
+            String groupId, String artifactId, Consumer<List<LibraryVersion<T>>> completedVersionsConsumer,
+            Function<String, T> versionInfoSupplier) {
 
         // Filter the vesions list
         List<String> vList = result;
@@ -211,10 +213,12 @@ public class CachedOptionsContainer {
         }
 
         // Compile the results
-        SortedSet<LibraryVersion> allVersions = new TreeSet<>(versionComparator);
+        SortedSet<LibraryVersion<T>> allVersions = new TreeSet<>(versionComparator);
         allVersions.addAll(Arrays.asList(versions));
         for (String v : vList) {
-            allVersions.add(new LibraryVersion() {
+            allVersions.add(new LibraryVersion<T>() {
+
+                private final T versionInfo = versionInfoSupplier.apply(v);
 
                 @Override
                 public String getGroupId() {
@@ -241,6 +245,11 @@ public class CachedOptionsContainer {
                     return v;
                 }
 
+                @Override
+                public T getVersionInfo() {
+                    return versionInfo;
+                }
+
                 @Override
                 public int hashCode() {
                     return Objects.hashCode(v);

+ 9 - 1
jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/JMEVersion.java

@@ -54,7 +54,7 @@ package com.jme3.gde.templates.gradledesktop.options;
  *
  * @author peedeeboy
  */
-public enum JMEVersion implements LibraryVersion {
+public enum JMEVersion implements LibraryVersion<JMEVersionInfo> {
 
     JME_3_5_2("3.5.2-stable",
             "/com/jme3/gde/templates/files/patchnotes/352-stable.html"),
@@ -87,6 +87,8 @@ public enum JMEVersion implements LibraryVersion {
      */
     private final String patchNotesPath;
 
+    private final JMEVersionInfo versionInfo;
+
     /**
      * Private constructor to create an instance of this enum.
      *
@@ -97,6 +99,7 @@ public enum JMEVersion implements LibraryVersion {
     JMEVersion(String label, String patchNotesPath) {
         this.label = label;
         this.patchNotesPath = patchNotesPath;
+        this.versionInfo = new JMEVersionInfo(label);
     }
 
     /**
@@ -138,4 +141,9 @@ public enum JMEVersion implements LibraryVersion {
     public String getVersion() {
         return label;
     }
+
+    @Override
+    public JMEVersionInfo getVersionInfo() {
+        return versionInfo;
+    }
 }

+ 2 - 2
jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/JMEVersionComparator.java

@@ -36,11 +36,11 @@ import java.util.Comparator;
 /**
  * Compares jME versions, sorts them in descending order (newest first)
  */
-public class JMEVersionComparator implements Comparator<LibraryVersion> {
+public class JMEVersionComparator implements Comparator<LibraryVersion<JMEVersionInfo>> {
 
     @Override
     public int compare(LibraryVersion o1, LibraryVersion o2) {
-        return -(new JMEVersionInfo(o1.getVersion()).compareTo(new JMEVersionInfo(o2.getVersion())));
+        return -(o1.getVersionInfo().compareTo(o2.getVersionInfo()));
     }
 
 }

+ 1 - 1
jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/JMEVersionInfo.java

@@ -38,7 +38,7 @@ import java.util.regex.Pattern;
 /**
  * jMonkeyEngine version information
  */
-public final class JMEVersionInfo implements Comparable<JMEVersionInfo> {
+public final class JMEVersionInfo implements VersionInfo<JMEVersionInfo> {
 
     private static final Pattern VERSION_PATTERN = Pattern.compile("(\\d+)\\.(\\d+)\\.(\\d+)-(.*)");
 

+ 3 - 1
jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/LibraryVersion.java

@@ -34,7 +34,7 @@ package com.jme3.gde.templates.gradledesktop.options;
 /**
  * Represents a Maven library version info (with patch notes)
  */
-public interface LibraryVersion extends MavenArtifact {
+public interface LibraryVersion<T extends VersionInfo> extends MavenArtifact {
 
     /**
      * Get the path to the .html file containing the Patch Notes for this
@@ -44,4 +44,6 @@ public interface LibraryVersion extends MavenArtifact {
      */
     String getPatchNotesPath();
 
+    T getVersionInfo();
+
 }

+ 40 - 0
jme3-templates/src/com/jme3/gde/templates/gradledesktop/options/VersionInfo.java

@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2009-2023 jMonkeyEngine
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ *   may be used to endorse or promote products derived from this software
+ *   without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package com.jme3.gde.templates.gradledesktop.options;
+
+/**
+ * Represents version information that can be compared between each other (which
+ * one is more new etc.)
+ */
+public interface VersionInfo<T extends VersionInfo> extends Comparable<T> {
+
+}