[java-identity-provider] 01/04: IDP-1854 Add a discovery option to the plugin command

Rod Widdowson rdw at steadingsoftware.com
Sun Aug 29 15:08:31 UTC 2021


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch main
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=7c35ae10a8735a9e5a013638dcee33778efd3d38

commit 7c35ae10a8735a9e5a013638dcee33778efd3d38
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Fri Aug 27 13:54:24 2021 +0100

    IDP-1854 Add a discovery option to the plugin command
    
    https://shibboleth.atlassian.net/browse/IDP-1854
    
    Phase 2 - move more function from PluginState to PluginInfo.
---
 .../net/shibboleth/idp/installer/V4Install.java    |  2 +-
 .../idp/installer/plugin/impl/PluginInfo.java      | 26 ++++++++-
 .../idp/installer/plugin/impl/PluginInstaller.java |  2 +-
 .../installer/plugin/impl/PluginInstallerCLI.java  | 32 ++++++------
 .../idp/installer/plugin/impl/PluginState.java     | 61 ++--------------------
 .../idp/installer/plugin/impl/PluginStateTest.java | 26 ++++-----
 6 files changed, 60 insertions(+), 89 deletions(-)

diff --git a/idp-installer/src/main/java/net/shibboleth/idp/installer/V4Install.java b/idp-installer/src/main/java/net/shibboleth/idp/installer/V4Install.java
index 8b301b3e6..6c5fcda81 100644
--- a/idp-installer/src/main/java/net/shibboleth/idp/installer/V4Install.java
+++ b/idp-installer/src/main/java/net/shibboleth/idp/installer/V4Install.java
@@ -159,7 +159,7 @@ public class V4Install extends AbstractInitializableComponent {
                 log.debug("Considering Plugin {}, version {}", pluginId,  pluginVersion);
                 final PluginState state = new PluginState(plugin, Collections.emptyList());
                 state.initialize();
-                if (!state.isSupportedWithIdPVersion(pluginVersion, idpVersion)) {
+                if (!state.getPluginInfo().isSupportedWithIdPVersion(pluginVersion, idpVersion)) {
                     log.warn("Installed Plugin {} version {} is not supported with IdP Version {}, continuing.",
                             pluginId, pluginVersion, idpVersion);
                 }
diff --git a/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginInfo.java b/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginInfo.java
index fc3f20d53..52569a6da 100644
--- a/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginInfo.java
+++ b/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginInfo.java
@@ -243,6 +243,30 @@ public class PluginInfo {
             log.debug("Plugin {}: Available {}", pluginId, versionInfo.keySet());
             return false;
         }
-        return PluginState.isSupportedWithIdPVersion(info, idPVersion);
+        return PluginInfo.isSupportedWithIdPVersion(info, idPVersion);
+    }
+
+    /** Is the specified plugin supported with this IdP version.
+     * Worker method for all 'isSupportedWith' classes.
+     * @param pluginVersionInfo the version info to consider
+     * @param idPVersion the version as a {@link PluginVersion}
+     * @return whether it is supported.
+     */
+    public static boolean isSupportedWithIdPVersion(final PluginState.VersionInfo pluginVersionInfo,
+            final PluginVersion idPVersion) {
+        final int maxCompare = idPVersion.compareTo(pluginVersionInfo.getMaxSupported()); 
+        
+        if (maxCompare >= 0) {
+            // Exclusive:
+            // IdP (test against) Version is GREATER THAN OR EQUAL to our Max
+            return false;
+        }
+        final int minCompare = idPVersion.compareTo(pluginVersionInfo.getMinSupported());
+        if (minCompare >= 0) {
+            // Inclusive:
+            // IdP (test against) version is GREATER THAN OR EQUAL to our Min
+            return true;
+        }
+        return false;
     }
 }
diff --git a/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginInstaller.java b/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginInstaller.java
index 4077ca299..c51de4434 100644
--- a/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginInstaller.java
+++ b/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginInstaller.java
@@ -279,7 +279,7 @@ public final class PluginInstaller extends AbstractInitializableComponent implem
             }
             final PluginVersion pluginVersion = new PluginVersion(description);
             final PluginVersion idpVersion = new PluginVersion(Version.getVersion());
-            if (!state.isSupportedWithIdPVersion(pluginVersion, idpVersion)) {
+            if (!state.getPluginInfo().isSupportedWithIdPVersion(pluginVersion, idpVersion)) {
                 LOG.error("Plugin {} version {} is not supported with IdP Version {}",
                         pluginId, pluginVersion, idpVersion);
                 throw new BuildException("Version Mismatch");
diff --git a/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginInstallerCLI.java b/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginInstallerCLI.java
index fab719d0a..f41f8e0a7 100644
--- a/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginInstallerCLI.java
+++ b/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginInstallerCLI.java
@@ -234,11 +234,12 @@ public final class PluginInstallerCLI extends AbstractIdPHomeAwareCommandLine<Pl
             log.error("Could not interrogate plugin {}", plugin.getPluginId(), e);
             return;
         }
-        final Map<PluginVersion, VersionInfo> versions = state.getAvailableVersions();
+        final Map<PluginVersion, VersionInfo> versions = state.getPluginInfo().getAvailableVersions();
         outOrLog("\tVersions ");
         for (final Entry<PluginVersion, VersionInfo> entry  : versions.entrySet()) {
             final String downLoadDetails;
-            if (state.getUpdateBaseName(entry.getKey()) == null || state.getUpdateURL(entry.getKey())==null ) {
+            if (state.getPluginInfo().getUpdateBaseName(entry.getKey()) == null ||
+                state.getPluginInfo().getUpdateURL(entry.getKey())==null ) {
                 downLoadDetails = " - No download available";
             } else {
                 downLoadDetails = "";
@@ -347,14 +348,13 @@ public final class PluginInstallerCLI extends AbstractIdPHomeAwareCommandLine<Pl
 
 
     /** Find the best update version.  Helper function for {@linkplain #doUpdate(String, PluginVersion, boolean)}.
-     * @param plugin The Plugin
-     * @param state all about the plugin
+     * @param pluginVersion The Plugin version
+     * @param pluginInfo all about the plugin
      * @return the best version (or null)
      */
-    @Nullable private PluginVersion getBestVersion(final IdPPlugin plugin, final PluginState state) {
+    @Nullable private PluginVersion getBestVersion(final PluginVersion pluginVersion , final PluginInfo pluginInfo) {
 
         final String idpVersionString = net.shibboleth.idp.Version.getVersion();
-        final PluginVersion myVersion = new PluginVersion(plugin);
 
         final PluginVersion idPVersion;
         if (idpVersionString == null) {
@@ -364,27 +364,27 @@ public final class PluginInstallerCLI extends AbstractIdPHomeAwareCommandLine<Pl
             idPVersion = new PluginVersion(idpVersionString);
         }
 
-        final List<PluginVersion> availableVersions = new ArrayList<>(state.getAvailableVersions().keySet());
+        final List<PluginVersion> availableVersions = new ArrayList<>(pluginInfo.getAvailableVersions().keySet());
         availableVersions.sort(null);
         log.debug("Considering versions: {}", availableVersions);
 
         for (int i = availableVersions.size()-1; i >= 0; i--) {
             final PluginVersion version = availableVersions.get(i);
-            if (version.compareTo(myVersion) <= 0) {
-                log.debug("Version {} is less than or the same as {}. All done", version, myVersion);
+            if (version.compareTo(pluginVersion) <= 0) {
+                log.debug("Version {} is less than or the same as {}. All done", version, pluginVersion);
                 return null;
             }
-            final VersionInfo versionInfo = state.getAvailableVersions().get(version);
+            final VersionInfo versionInfo = pluginInfo.getAvailableVersions().get(version);
             if (versionInfo.getSupportLevel() != SupportLevel.Current) {
                 log.debug("Version {} has support level {}, ignoring", version, versionInfo.getSupportLevel());
                 continue;
             }
-            if (!state.isSupportedWithIdPVersion(version, idPVersion)) {
+            if (!pluginInfo.isSupportedWithIdPVersion(version, idPVersion)) {
                 log.debug("Version {} is not supported with idpVersion {}", version, idPVersion);
                 continue;
             }
             log.debug("Version {} is supported with idpVersion {}", version, idPVersion);
-            if (state.getUpdateURL(version) == null || state.getUpdateBaseName(version) == null) {
+            if (pluginInfo.getUpdateURL(version) == null || pluginInfo.getUpdateBaseName(version) == null) {
                 log.debug("Version {} is does not have update information", version);
                 continue;
             }
@@ -419,14 +419,14 @@ public final class PluginInstallerCLI extends AbstractIdPHomeAwareCommandLine<Pl
         }
         final PluginVersion installVersion;
         if (pluginVersion == null) {
-            installVersion = getBestVersion(plugin, state);
+            installVersion = getBestVersion(new PluginVersion(plugin), state.getPluginInfo());
             if (installVersion == null) {
                 log.info("No suitable update version available");
                 return;
             }
         } else {
             installVersion = pluginVersion;
-            final Map<PluginVersion, VersionInfo> versions = state.getAvailableVersions();
+            final Map<PluginVersion, VersionInfo> versions = state.getPluginInfo().getAvailableVersions();
             if (!versions.containsKey(installVersion)) {
                 log.error("Specified version {} could not be found. Available versions: {}",
                         installVersion, versions.keySet());
@@ -434,8 +434,8 @@ public final class PluginInstallerCLI extends AbstractIdPHomeAwareCommandLine<Pl
             }
         }
         // just use the tgz version - its an update so it should be jar files only
-        installer.installPlugin(state.getUpdateURL(installVersion),
-                state.getUpdateBaseName(installVersion) + ".tar.gz",
+        installer.installPlugin(state.getPluginInfo().getUpdateURL(installVersion),
+                state.getPluginInfo().getUpdateBaseName(installVersion) + ".tar.gz",
                 checkVersion);
     }
 
diff --git a/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginState.java b/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginState.java
index 017fcfedd..484368b69 100644
--- a/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginState.java
+++ b/idp-installer/src/main/java/net/shibboleth/idp/installer/plugin/impl/PluginState.java
@@ -20,11 +20,9 @@ package net.shibboleth.idp.installer.plugin.impl;
 import java.io.IOException;
 import java.net.URL;
 import java.util.List;
-import java.util.Map;
 import java.util.Properties;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 
 import org.apache.http.client.HttpClient;
 import org.slf4j.Logger;
@@ -37,7 +35,6 @@ import net.shibboleth.idp.plugin.IdPPlugin;
 import net.shibboleth.idp.plugin.PluginSupport.SupportLevel;
 import net.shibboleth.idp.plugin.PluginVersion;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -80,20 +77,11 @@ public class PluginState extends AbstractInitializableComponent {
         myPluginVersion = new PluginVersion(plugin);
     }
     
-    /** Get the base URL for this version.
-     * @param version which version
-     * @return the base URL
+    /** get our PluginInfo.
+     * @return our PluginInfo.
      */
-    @Nullable public URL getUpdateURL(final PluginVersion version) {
-        return myPluginInfo.getUpdateURL(version);
-    }
-
-    /** Get the base Name for this version.
-     * @param version which version
-     * @return the base name
-     */
-    @Nullable public String getUpdateBaseName(final PluginVersion version) {
-        return myPluginInfo.getUpdateBaseName(version);
+    public PluginInfo getPluginInfo() {
+        return myPluginInfo;
     }
     
     /** (try to) populate the information about this plugin.
@@ -187,47 +175,6 @@ public class PluginState extends AbstractInitializableComponent {
     }
     // CheckStyle: CyclomaticComplexity ON
 
-    /** Is the specified plugin supported with this IdP version.
-     * @param pluginVersion the version if the plugin as a {@link PluginVersion}
-     * @param idPVersion the version if the IDP as a {@link PluginVersion}
-     * @return whether it is supported.
-     */
-    public boolean isSupportedWithIdPVersion(final PluginVersion pluginVersion, final PluginVersion idPVersion) {
-        return myPluginInfo.isSupportedWithIdPVersion(pluginVersion, idPVersion);
-    }
-
-    /** Is the specified plugin supported with this IdP version.
-     * Worker method for all 'isSupportedWith' classes.
-     * @param pluginVersionInfo the version info to consider
-     * @param idPVersion the version as a {@link PluginVersion}
-     * @return whether it is supported.
-     */
-    public static boolean isSupportedWithIdPVersion(final VersionInfo pluginVersionInfo,
-            final PluginVersion idPVersion) {
-        final int maxCompare = idPVersion.compareTo(pluginVersionInfo.getMaxSupported()); 
-        
-        if (maxCompare >= 0) {
-            // Exclusive:
-            // IdP (test against) Version is GREATER THAN OR EQUAL to our Max
-            return false;
-        }
-        final int minCompare = idPVersion.compareTo(pluginVersionInfo.getMinSupported());
-        if (minCompare >= 0) {
-            // Inclusive:
-            // IdP (test against) version is GREATER THAN OR EQUAL to our Min
-            return true;
-        }
-        return false;
-    }
-    
-    /** Return all announced versions.
-     * @return the versions.
-     */
-    @Nonnull @NotEmpty public Map<PluginVersion, VersionInfo> getAvailableVersions() {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        return myPluginInfo.getAvailableVersions();
-    }
-    
     /** Encapsulation of the information about a given IdP version. */
     public static class VersionInfo {
         
diff --git a/idp-installer/src/test/java/net/shibboleth/idp/installer/plugin/impl/PluginStateTest.java b/idp-installer/src/test/java/net/shibboleth/idp/installer/plugin/impl/PluginStateTest.java
index 266beecbf..2a7c96163 100644
--- a/idp-installer/src/test/java/net/shibboleth/idp/installer/plugin/impl/PluginStateTest.java
+++ b/idp-installer/src/test/java/net/shibboleth/idp/installer/plugin/impl/PluginStateTest.java
@@ -42,7 +42,7 @@ public class PluginStateTest {
     
     private boolean testSupportState(final PluginVersion pluginVersion, final PluginState state, final String IdpVersion) {
         final PluginVersion idPVersion = new PluginVersion(IdpVersion);
-        return state.isSupportedWithIdPVersion(pluginVersion, idPVersion);
+        return state.getPluginInfo().isSupportedWithIdPVersion(pluginVersion, idPVersion);
     }
 
     @Test
@@ -57,11 +57,11 @@ public class PluginStateTest {
         final PluginVersion pluginVersion = new PluginVersion(simple.getMajorVersion(), simple.getMinorVersion(), simple.getPatchVersion());
         
         assertEquals(pluginVersion, new PluginVersion("1.2.3"));
-        assertEquals(state.getAvailableVersions().size(), 3);
-        assertTrue(state.getAvailableVersions().containsKey(new PluginVersion(1, 2, 3)));
-        assertTrue(state.getAvailableVersions().containsKey(new PluginVersion(1, 2, 4)));
-        assertTrue(state.getAvailableVersions().containsKey(new PluginVersion(2,0,0)));
-        assertFalse(state.getAvailableVersions().containsKey(new PluginVersion(3, 2, 3)));
+        assertEquals(state.getPluginInfo().getAvailableVersions().size(), 3);
+        assertTrue(state.getPluginInfo().getAvailableVersions().containsKey(new PluginVersion(1, 2, 3)));
+        assertTrue(state.getPluginInfo().getAvailableVersions().containsKey(new PluginVersion(1, 2, 4)));
+        assertTrue(state.getPluginInfo().getAvailableVersions().containsKey(new PluginVersion(2,0,0)));
+        assertFalse(state.getPluginInfo().getAvailableVersions().containsKey(new PluginVersion(3, 2, 3)));
 
         assertTrue(testSupportState(pluginVersion, state, "4.1.0"));
         assertTrue(testSupportState(pluginVersion, state, "4.2.0"));
@@ -94,13 +94,13 @@ public class PluginStateTest {
         final PluginVersion v124 = new PluginVersion(1,2,4);
         final PluginVersion v2 = new PluginVersion(2,0,0);
 
-        assertEquals(state.getUpdateURL(v123), new URL("https://example.org/plugins/"));
-        assertEquals(state.getUpdateURL(v124), new URL("https://example.org/plugins4/"));
-        assertEquals(state.getUpdateURL(v2), new URL("https://example.org/plugins2/"));
+        assertEquals(state.getPluginInfo().getUpdateURL(v123), new URL("https://example.org/plugins/"));
+        assertEquals(state.getPluginInfo().getUpdateURL(v124), new URL("https://example.org/plugins4/"));
+        assertEquals(state.getPluginInfo().getUpdateURL(v2), new URL("https://example.org/plugins2/"));
 
-        assertEquals(state.getUpdateBaseName(v123), "base-1.2.3-1.2.3");
-        assertEquals(state.getUpdateBaseName(v124), "base-1.2.4-1.2.4");
-        assertEquals(state.getUpdateBaseName(v2), "base-1-2-4");
+        assertEquals(state.getPluginInfo().getUpdateBaseName(v123), "base-1.2.3-1.2.3");
+        assertEquals(state.getPluginInfo().getUpdateBaseName(v124), "base-1.2.4-1.2.4");
+        assertEquals(state.getPluginInfo().getUpdateBaseName(v2), "base-1-2-4");
     }
 
     @Test
@@ -121,6 +121,6 @@ public class PluginStateTest {
         final PluginState state = new PluginState(simple, Collections.EMPTY_LIST);
         state.initialize();
         
-        assertEquals(state.getAvailableVersions().size(), 3);
+        assertEquals(state.getPluginInfo().getAvailableVersions().size(), 3);
     }
 }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list