]> source.dussan.org Git - pf4j.git/commitdiff
Add VersionManager abstractization
authorDecebal Suiu <decebal.suiu@gmail.com>
Mon, 10 Jul 2017 20:48:16 +0000 (23:48 +0300)
committerDecebal Suiu <decebal.suiu@gmail.com>
Mon, 10 Jul 2017 20:48:16 +0000 (23:48 +0300)
18 files changed:
pf4j/src/main/java/ro/fortsoft/pf4j/AbstractPluginManager.java
pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginManager.java
pf4j/src/main/java/ro/fortsoft/pf4j/DefaultVersionManager.java [new file with mode: 0644]
pf4j/src/main/java/ro/fortsoft/pf4j/DependencyResolver.java
pf4j/src/main/java/ro/fortsoft/pf4j/ManifestPluginDescriptorFinder.java
pf4j/src/main/java/ro/fortsoft/pf4j/PluginDescriptor.java
pf4j/src/main/java/ro/fortsoft/pf4j/PluginManager.java
pf4j/src/main/java/ro/fortsoft/pf4j/PropertiesPluginDescriptorFinder.java
pf4j/src/main/java/ro/fortsoft/pf4j/VersionManager.java [new file with mode: 0644]
pf4j/src/test/java/ro/fortsoft/pf4j/DefaultPluginManagerTest.java
pf4j/src/test/java/ro/fortsoft/pf4j/DefaultVersionManagerTest.java [new file with mode: 0644]
pf4j/src/test/java/ro/fortsoft/pf4j/DependencyResolverTest.java
pf4j/src/test/java/ro/fortsoft/pf4j/LoadPluginsTest.java
pf4j/src/test/java/ro/fortsoft/pf4j/ManifestPluginDescriptorFinderTest.java
pf4j/src/test/java/ro/fortsoft/pf4j/PropertiesPluginDescriptorFinderTest.java
pf4j/src/test/java/ro/fortsoft/pf4j/plugin/MockPluginManager.java
pf4j/src/test/java/ro/fortsoft/pf4j/util/FileUtilsTest.java
pf4j/src/test/java/ro/fortsoft/pf4j/util/SemVerUtils.java [deleted file]

index 71bcb2ed55c61c110c316f054ba4a4677cd108b1..1d8090a19ca9f7ad4a85a7dc1abcc2922ba327f2 100644 (file)
@@ -15,7 +15,6 @@
  */
 package ro.fortsoft.pf4j;
 
-import com.github.zafarkhaja.semver.Version;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import ro.fortsoft.pf4j.util.StringUtils;
@@ -25,7 +24,13 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * This class implements the boilerplate plugin code that any {@link PluginManager}
@@ -83,7 +88,7 @@ public abstract class AbstractPluginManager implements PluginManager {
     /*
      * The system version used for comparisons to the plugin requires attribute.
      */
-    private Version systemVersion = Version.forIntegers(0);
+    private String systemVersion = "0.0.0";
 
     private PluginRepository pluginRepository;
     private PluginFactory pluginFactory;
@@ -93,6 +98,8 @@ public abstract class AbstractPluginManager implements PluginManager {
     private PluginLoader pluginLoader;
     private boolean exactVersionAllowed = false;
 
+    private VersionManager versionManager;
+
     /**
      * The plugins root is supplied by {@code System.getProperty("pf4j.pluginsDir", "plugins")}.
      */
@@ -112,12 +119,12 @@ public abstract class AbstractPluginManager implements PluginManager {
     }
 
     @Override
-    public void setSystemVersion(Version version) {
+    public void setSystemVersion(String version) {
         systemVersion = version;
     }
 
     @Override
-    public Version getSystemVersion() {
+    public String getSystemVersion() {
         return systemVersion;
     }
 
@@ -601,7 +608,7 @@ public abstract class AbstractPluginManager implements PluginManager {
         pluginStateListeners.remove(listener);
     }
 
-    public Version getVersion() {
+    public String getVersion() {
         String version = null;
 
         Package pf4jPackage = PluginManager.class.getPackage();
@@ -612,7 +619,7 @@ public abstract class AbstractPluginManager implements PluginManager {
             }
         }
 
-        return (version != null) ? Version.valueOf(version) : Version.forIntegers(0);
+        return (version != null) ? version : "0.0.0";
     }
 
     protected abstract PluginRepository createPluginRepository();
@@ -629,6 +636,8 @@ public abstract class AbstractPluginManager implements PluginManager {
 
     protected abstract PluginLoader createPluginLoader();
 
+    protected abstract VersionManager createVersionManager();
+
     protected PluginDescriptorFinder getPluginDescriptorFinder() {
         return pluginDescriptorFinder;
     }
@@ -656,8 +665,6 @@ public abstract class AbstractPluginManager implements PluginManager {
 
         System.setProperty("pf4j.pluginsDir", pluginsRoot.toString());
 
-        dependencyResolver = new DependencyResolver();
-
         pluginRepository = createPluginRepository();
         pluginFactory = createPluginFactory();
         extensionFactory = createExtensionFactory();
@@ -665,6 +672,9 @@ public abstract class AbstractPluginManager implements PluginManager {
         extensionFinder = createExtensionFinder();
         pluginStatusProvider = createPluginStatusProvider();
         pluginLoader = createPluginLoader();
+
+        versionManager = createVersionManager();
+        dependencyResolver = new DependencyResolver(versionManager);
     }
 
     /**
@@ -700,7 +710,7 @@ public abstract class AbstractPluginManager implements PluginManager {
             // If exact versions are not allowed in requires, rewrite to >= expression
             requires = ">=" + requires;
         }
-        if (systemVersion.equals(Version.forIntegers(0)) || systemVersion.satisfies(requires)) {
+        if (systemVersion.equals("0.0.0") || versionManager.satisfies(requires, systemVersion)) {
             return true;
         }
 
@@ -864,4 +874,9 @@ public abstract class AbstractPluginManager implements PluginManager {
         this.exactVersionAllowed = exactVersionAllowed;
     }
 
+    @Override
+    public VersionManager getVersionManager() {
+        return versionManager;
+    }
+
 }
index b9d6c67d570448b56da474a9f39d0801a0fd79d6..9e24e01307cca4cbb14085c2ace1cfdfebf2ca4a 100644 (file)
@@ -89,6 +89,11 @@ public class DefaultPluginManager extends AbstractPluginManager {
         return new DefaultPluginLoader(this, pluginClasspath);
     }
 
+    @Override
+    protected VersionManager createVersionManager() {
+        return new DefaultVersionManager();
+    }
+
     /**
      * By default if {@link DefaultPluginManager#isDevelopment()} returns true
      * than a {@link DevelopmentPluginClasspath} is returned
@@ -125,4 +130,5 @@ public class DefaultPluginManager extends AbstractPluginManager {
 
         return super.loadPluginFromPath(pluginPath);
     }
+
 }
diff --git a/pf4j/src/main/java/ro/fortsoft/pf4j/DefaultVersionManager.java b/pf4j/src/main/java/ro/fortsoft/pf4j/DefaultVersionManager.java
new file mode 100644 (file)
index 0000000..0d11e90
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2017 Decebal Suiu
+ *
+ * Licensed 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.
+ */
+package ro.fortsoft.pf4j;
+
+import com.github.zafarkhaja.semver.Version;
+
+/**
+ * Default implementation for {@link VersionManager}.
+ * This implementation uses jSemVer (a Java implementation of the SemVer Specification).
+ *
+ * @author Decebal Suiu
+ */
+public class DefaultVersionManager implements VersionManager {
+
+    @Override
+    public boolean satisfies(String constraint, String version) {
+        return Version.valueOf(version).satisfies(constraint);
+    }
+
+}
index 3ab5526ae4e8e3d3d2581223a8cda7f3207d8fdc..0ea15a34adaa8a7bb2e61e71aa5ddb698853058c 100644 (file)
@@ -15,7 +15,6 @@
  */
 package ro.fortsoft.pf4j;
 
-import com.github.zafarkhaja.semver.Version;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import ro.fortsoft.pf4j.util.DirectedGraph;
@@ -42,10 +41,16 @@ public class DependencyResolver {
 
        private static final Logger log = LoggerFactory.getLogger(DependencyResolver.class);
 
+       private VersionManager versionManager;
+
     private DirectedGraph<String> dependenciesGraph; // the value is 'pluginId'
     private DirectedGraph<String> dependentsGraph; // the value is 'pluginId'
     private boolean resolved;
 
+    public DependencyResolver(VersionManager versionManager) {
+        this.versionManager = versionManager;
+    }
+
     public Result resolve(List<PluginDescriptor> plugins) {
         // create graphs
         dependenciesGraph = new DirectedGraph<>();
@@ -81,7 +86,7 @@ public class DependencyResolver {
         // check dependencies versions
         for (PluginDescriptor plugin : plugins) {
             String pluginId = plugin.getPluginId();
-            Version existingVersion = plugin.getVersion();
+            String existingVersion = plugin.getVersion();
 
             List<String> dependents = getDependents(pluginId);
             while (!dependents.isEmpty()) {
@@ -127,8 +132,8 @@ public class DependencyResolver {
      * @param existingVersion
      * @return
      */
-    protected boolean checkDependencyVersion(String requiredVersion, Version existingVersion) {
-        return existingVersion.satisfies(requiredVersion);
+    protected boolean checkDependencyVersion(String requiredVersion, String existingVersion) {
+        return versionManager.satisfies(requiredVersion, existingVersion);
     }
 
     private void addPlugin(PluginDescriptor descriptor) {
@@ -224,10 +229,10 @@ public class DependencyResolver {
 
         private String dependencyId; // value is "pluginId"
         private String dependentId; // value is "pluginId"
-        private Version existingVersion;
+        private String existingVersion;
         private String requiredVersion;
 
-        WrongDependencyVersion(String dependencyId, String dependentId, Version existingVersion, String requiredVersion) {
+        WrongDependencyVersion(String dependencyId, String dependentId, String existingVersion, String requiredVersion) {
             this.dependencyId = dependencyId;
             this.dependentId = dependentId;
             this.existingVersion = existingVersion;
@@ -242,7 +247,7 @@ public class DependencyResolver {
             return dependentId;
         }
 
-        public Version getExistingVersion() {
+        public String getExistingVersion() {
             return existingVersion;
         }
 
index 394773c7a8b1dd74c96e792001fa2a2c1673e695..a30fb67ac6dacd928c59f08d722d1859ccd71683 100644 (file)
@@ -15,7 +15,6 @@
  */
 package ro.fortsoft.pf4j;
 
-import com.github.zafarkhaja.semver.Version;
 import ro.fortsoft.pf4j.util.StringUtils;
 
 import java.nio.file.Path;
@@ -29,7 +28,7 @@ import java.util.jar.Manifest;
  */
 public abstract class ManifestPluginDescriptorFinder implements PluginDescriptorFinder {
 
-       @Override
+    @Override
        public PluginDescriptor find(Path pluginPath) throws PluginException {
         Manifest manifest = readManifest(pluginPath);
 
@@ -58,7 +57,7 @@ public abstract class ManifestPluginDescriptorFinder implements PluginDescriptor
 
         String version = attributes.getValue("Plugin-Version");
         if (StringUtils.isNotEmpty(version)) {
-            pluginDescriptor.setPluginVersion(createPluginVersion(version));
+            pluginDescriptor.setPluginVersion(version);
         }
 
         String provider = attributes.getValue("Plugin-Provider");
@@ -76,18 +75,8 @@ public abstract class ManifestPluginDescriptorFinder implements PluginDescriptor
         return pluginDescriptor;
     }
 
-    /**
-     * Parse version to semver {@link Version} object.
-     * Example : 1.1.1.RC1 -> 1.1.1-RC1.
-     * This may be override to use a custom parsing to semver Version.
-     * @param version given string to be the plugin version
-     * @return a semver version
-     */
-    protected Version createPluginVersion(String version) {
-        return Version.valueOf(version);
-    }
-
     protected PluginDescriptor createPluginDescriptorInstance() {
         return new PluginDescriptor();
     }
+
 }
index c6b7db891ce2a9e2502e5cac188cca3e585017f2..e7bcb8936e54d15bdd17ca15ba13c8f23a81ac4c 100644 (file)
@@ -15,8 +15,6 @@
  */
 package ro.fortsoft.pf4j;
 
-import com.github.zafarkhaja.semver.Version;
-
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -32,7 +30,7 @@ public class PluginDescriptor {
        private String pluginId;
        private String pluginDescription;
     private String pluginClass;
-    private Version version;
+    private String version;
     private String requires = "*"; // SemVer format
     private String provider;
     private List<PluginDependency> dependencies;
@@ -66,7 +64,7 @@ public class PluginDescriptor {
     /**
      * Returns the version of this plugin.
      */
-    public Version getVersion() {
+    public String getVersion() {
         return version;
     }
 
@@ -127,7 +125,7 @@ public class PluginDescriptor {
         return this;
     }
 
-    PluginDescriptor setPluginVersion(Version version) {
+    PluginDescriptor setPluginVersion(String version) {
         this.version = version;
 
         return this;
index e7f7f58bbe91f1f2e0d8929a2d23338d5f4d35f3..6964f9c277913e0133bb5a0daea6093cc4538bff 100644 (file)
@@ -15,8 +15,6 @@
  */
 package ro.fortsoft.pf4j;
 
-import com.github.zafarkhaja.semver.Version;
-
 import java.nio.file.Path;
 import java.util.List;
 import java.util.Set;
@@ -162,17 +160,17 @@ public interface PluginManager {
      * requires attribute.  The default system version is 0.0.0 which
      * disables all version checking.
      *
-     * @default 0.0.0
+     * @default {@code null}
      * @param version
      */
-    void setSystemVersion(Version version);
+    void setSystemVersion(String version);
 
     /**
      * Returns the system version.
      *
-     * @return the system version
+     * @return the system version
      */
-    Version getSystemVersion();
+    String getSystemVersion();
 
     /**
      * Gets the path of the folder where plugins are installed
@@ -180,4 +178,6 @@ public interface PluginManager {
      */
     Path getPluginsRoot();
 
+    VersionManager getVersionManager();
+
 }
index 7484b4d59d432ecd565f4307aab5a6283ca510aa..259040c8bd838fbfe9f2ef461ab37ec1d9a97c2d 100644 (file)
@@ -15,7 +15,6 @@
  */
 package ro.fortsoft.pf4j;
 
-import com.github.zafarkhaja.semver.Version;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import ro.fortsoft.pf4j.util.StringUtils;
@@ -38,7 +37,7 @@ public class PropertiesPluginDescriptorFinder implements PluginDescriptorFinder
 
        private static final String DEFAULT_PROPERTIES_FILE_NAME = "plugin.properties";
 
-       private String propertiesFileName;
+       protected String propertiesFileName;
 
        public PropertiesPluginDescriptorFinder() {
                this(DEFAULT_PROPERTIES_FILE_NAME);
@@ -91,7 +90,7 @@ public class PropertiesPluginDescriptorFinder implements PluginDescriptorFinder
 
         String version = properties.getProperty("plugin.version");
         if (StringUtils.isNotEmpty(version)) {
-            pluginDescriptor.setPluginVersion(Version.valueOf(version));
+            pluginDescriptor.setPluginVersion(version);
         }
 
         String provider = properties.getProperty("plugin.provider");
@@ -113,4 +112,5 @@ public class PropertiesPluginDescriptorFinder implements PluginDescriptorFinder
     protected PluginDescriptor createPluginDescriptorInstance() {
         return new PluginDescriptor();
     }
+
 }
diff --git a/pf4j/src/main/java/ro/fortsoft/pf4j/VersionManager.java b/pf4j/src/main/java/ro/fortsoft/pf4j/VersionManager.java
new file mode 100644 (file)
index 0000000..c3de913
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2017 Decebal Suiu
+ *
+ * Licensed 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.
+ */
+package ro.fortsoft.pf4j;
+
+/**
+ * Manager responsible for versions of plugins.
+ *
+ * @author Decebal Suiu
+ */
+public interface VersionManager {
+
+    /**
+     * Check if a {@code constraint} and a {@code version} match.
+     *
+     * @param constraint
+     * @param version
+     * @return
+     */
+    boolean satisfies(String constraint, String version);
+
+}
index 5f235be0488db8281883af4e728f5f82d5fb5cc1..4c154d19c9f1b2ad95e126fac7e43044e5e3c9eb 100644 (file)
@@ -15,7 +15,6 @@
  */
 package ro.fortsoft.pf4j;
 
-import com.github.zafarkhaja.semver.Version;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -27,6 +26,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 public class DefaultPluginManagerTest {
+
     private PluginDescriptor pd1 = null;
     private DefaultPluginManager pluginManager = new DefaultPluginManager();
     private PluginWrapper pw1;
@@ -35,7 +35,7 @@ public class DefaultPluginManagerTest {
     public void init() throws IOException {
         pd1 = new PluginDescriptor();
         pd1.setPluginId("myPlugin");
-        pd1.setPluginVersion(Version.valueOf("1.2.3"));
+        pd1.setPluginVersion("1.2.3");
         pd1.setPluginClass("foo");
         pd1.setPluginDescription("My plugin");
         pd1.setDependencies("bar, baz");
@@ -73,13 +73,13 @@ public class DefaultPluginManagerTest {
         // By default accept all since system version not given
         assertTrue(pluginManager.isPluginValid(pw1));
 
-        pluginManager.setSystemVersion(Version.valueOf("1.0.0"));
+        pluginManager.setSystemVersion("1.0.0");
         assertFalse(pluginManager.isPluginValid(pw1));
 
-        pluginManager.setSystemVersion(Version.valueOf("5.0.0"));
+        pluginManager.setSystemVersion("5.0.0");
         assertTrue(pluginManager.isPluginValid(pw1));
 
-        pluginManager.setSystemVersion(Version.valueOf("6.0.0"));
+        pluginManager.setSystemVersion("6.0.0");
         assertTrue(pluginManager.isPluginValid(pw1));
     }
 
@@ -90,13 +90,13 @@ public class DefaultPluginManagerTest {
         // By default accept all since system version not given
         assertTrue(pluginManager.isPluginValid(pw1));
 
-        pluginManager.setSystemVersion(Version.valueOf("1.0.0"));
+        pluginManager.setSystemVersion("1.0.0");
         assertFalse(pluginManager.isPluginValid(pw1));
 
-        pluginManager.setSystemVersion(Version.valueOf("5.0.0"));
+        pluginManager.setSystemVersion("5.0.0");
         assertTrue(pluginManager.isPluginValid(pw1));
 
-        pluginManager.setSystemVersion(Version.valueOf("6.0.0"));
+        pluginManager.setSystemVersion("6.0.0");
         assertFalse(pluginManager.isPluginValid(pw1));
     }
 
@@ -104,4 +104,5 @@ public class DefaultPluginManagerTest {
     public void testDefaultExactVersionAllowed() throws Exception {
         assertEquals(false, pluginManager.isExactVersionAllowed());
     }
+
 }
diff --git a/pf4j/src/test/java/ro/fortsoft/pf4j/DefaultVersionManagerTest.java b/pf4j/src/test/java/ro/fortsoft/pf4j/DefaultVersionManagerTest.java
new file mode 100644 (file)
index 0000000..802291d
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2017 Decebal Suiu
+ *
+ * Licensed 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.
+ */
+package ro.fortsoft.pf4j;
+
+import com.github.zafarkhaja.semver.ParseException;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * @author Decebal Suiu
+ */
+public class DefaultVersionManagerTest {
+
+    private VersionManager versionManager;
+
+    @Before
+    public void init() {
+        versionManager = new DefaultVersionManager();
+    }
+
+    @Test
+    public void satisfies() {
+        assertFalse(versionManager.satisfies(">2.0.0", "1.4.3")); // simple
+        assertTrue(versionManager.satisfies(">=1.4.0 & <1.6.0", "1.4.3")); // range
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void nullOrEmptyVersion() {
+        assertFalse(versionManager.satisfies(">2.0.0", null));
+    }
+
+    @Test(expected = ParseException.class)
+    public void invalidVersion() {
+        assertFalse(versionManager.satisfies(">2.0.0", "1.0"));
+    }
+
+}
index e8d1749867196df85328a9cbd247d5d097f7d6df..14aba39f12e48590eda65ba6e811cf39e29eb95d 100644 (file)
  */
 package ro.fortsoft.pf4j;
 
-import com.github.zafarkhaja.semver.Version;
+import org.junit.Before;
 import org.junit.Test;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 /**
  * @author Decebal Suiu
  */
 public class DependencyResolverTest {
 
+    private DependencyResolver resolver;
+
+    @Before
+    public void init() {
+        VersionManager versionManager = new DefaultVersionManager();
+        resolver = new DependencyResolver(versionManager);
+    }
+
     @Test
     public void sortedPlugins() {
         // create incomplete plugin descriptor (ignore some attributes)
@@ -40,13 +46,12 @@ public class DependencyResolverTest {
 
         PluginDescriptor pd2 = new PluginDescriptor()
             .setPluginId("p2")
-            .setPluginVersion(Version.forIntegers(0)); // needed in "checkDependencyVersion" method
+            .setPluginVersion("0.0.0"); // needed in "checkDependencyVersion" method
 
         List<PluginDescriptor> plugins = new ArrayList<>();
         plugins.add(pd1);
         plugins.add(pd2);
 
-        DependencyResolver resolver = new DependencyResolver();
         DependencyResolver.Result result = resolver.resolve(plugins);
 
         assertTrue(result.getNotFoundDependencies().isEmpty());
@@ -62,7 +67,6 @@ public class DependencyResolverTest {
         List<PluginDescriptor> plugins = new ArrayList<>();
         plugins.add(pd1);
 
-        DependencyResolver resolver = new DependencyResolver();
         DependencyResolver.Result result = resolver.resolve(plugins);
 
         assertFalse(result.getNotFoundDependencies().isEmpty());
@@ -73,17 +77,17 @@ public class DependencyResolverTest {
     public void cyclicDependencies() {
         PluginDescriptor pd1 = new PluginDescriptor()
             .setPluginId("p1")
-            .setPluginVersion(Version.forIntegers(0))
+            .setPluginVersion("0.0.0")
             .setDependencies("p2");
 
         PluginDescriptor pd2 = new PluginDescriptor()
             .setPluginId("p2")
-            .setPluginVersion(Version.forIntegers(0))
+            .setPluginVersion("0.0.0")
             .setDependencies("p3");
 
         PluginDescriptor pd3 = new PluginDescriptor()
             .setPluginId("p3")
-            .setPluginVersion(Version.forIntegers(0))
+            .setPluginVersion("0.0.0")
             .setDependencies("p1");
 
         List<PluginDescriptor> plugins = new ArrayList<>();
@@ -91,7 +95,6 @@ public class DependencyResolverTest {
         plugins.add(pd2);
         plugins.add(pd3);
 
-        DependencyResolver resolver = new DependencyResolver();
         DependencyResolver.Result result = resolver.resolve(plugins);
 
         assertTrue(result.hasCyclicDependency());
@@ -106,13 +109,12 @@ public class DependencyResolverTest {
 
         PluginDescriptor pd2 = new PluginDescriptor()
             .setPluginId("p2")
-            .setPluginVersion(Version.forIntegers(1, 4));
+            .setPluginVersion("1.4.0");
 
         List<PluginDescriptor> plugins = new ArrayList<>();
         plugins.add(pd1);
         plugins.add(pd2);
 
-        DependencyResolver resolver = new DependencyResolver();
         DependencyResolver.Result result = resolver.resolve(plugins);
 
         assertFalse(result.getWrongVersionDependencies().isEmpty());
@@ -126,13 +128,12 @@ public class DependencyResolverTest {
 
         PluginDescriptor pd2 = new PluginDescriptor()
             .setPluginId("p2")
-            .setPluginVersion(Version.forIntegers(2));
+            .setPluginVersion("2.0.0");
 
         List<PluginDescriptor> plugins = new ArrayList<>();
         plugins.add(pd1);
         plugins.add(pd2);
 
-        DependencyResolver resolver = new DependencyResolver();
         DependencyResolver.Result result = resolver.resolve(plugins);
 
         assertTrue(result.getWrongVersionDependencies().isEmpty());
index 6806595c386534145d80cd99c2cb76f2fdce8fbc..9ee98999b1f3fb7c3d6a60ffead451e0e9301838 100644 (file)
@@ -15,7 +15,6 @@
  */
 package ro.fortsoft.pf4j;
 
-import com.github.zafarkhaja.semver.Version;
 import org.junit.Before;
 import org.junit.Test;
 import ro.fortsoft.pf4j.plugin.MockPluginManager;
@@ -31,6 +30,7 @@ import static junit.framework.TestCase.assertNull;
 import static org.junit.Assert.*;
 
 public class LoadPluginsTest {
+
     private Path tmpDir;
     private MockPluginManager pluginManager;
     private MockZipPlugin p1;
@@ -92,14 +92,14 @@ public class LoadPluginsTest {
         pluginManager.loadPlugins();
         pluginManager.startPlugins();
         assertEquals(1, pluginManager.getPlugins().size());
-        assertEquals(Version.valueOf("1.2.3"), pluginManager.getPlugin(p2.id).getDescriptor().getVersion());
+        assertEquals("1.2.3", pluginManager.getPlugin(p2.id).getDescriptor().getVersion());
         assertEquals(1, pluginManager.getStartedPlugins().size());
         p2.create();
         pluginManager.loadPlugins();
         pluginManager.startPlugin(p2.id);
         assertEquals(1, pluginManager.getPlugins().size());
-        assertEquals(Version.valueOf("2.0.0"), pluginManager.getPlugin(p2.id).getDescriptor().getVersion());
-        assertEquals(Version.valueOf("2.0.0"), pluginManager.getStartedPlugins().get(1).getDescriptor().getVersion());
+        assertEquals("2.0.0", pluginManager.getPlugin(p2.id).getDescriptor().getVersion());
+        assertEquals("2.0.0", pluginManager.getStartedPlugins().get(1).getDescriptor().getVersion());
     }
 
     @Test
@@ -131,6 +131,7 @@ public class LoadPluginsTest {
     }
 
     private class MockZipPlugin {
+
         public final String id;
         public final String version;
         public final String filename;
@@ -165,5 +166,7 @@ public class LoadPluginsTest {
                 Files.move(propsFile, propsInZip);
             }
         }
+
     }
+
 }
index 1d1b621340cc46eb4831b70dbf0d069da9e89c37..c858767812547838b5ecf79097b8f073ee4487dc 100644 (file)
@@ -15,7 +15,6 @@
  */
 package ro.fortsoft.pf4j;
 
-import com.github.zafarkhaja.semver.Version;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -28,9 +27,7 @@ import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static ro.fortsoft.pf4j.util.SemVerUtils.versionMatches;
+import static org.junit.Assert.*;
 
 /**
  * @author Mario Franco
@@ -38,6 +35,8 @@ import static ro.fortsoft.pf4j.util.SemVerUtils.versionMatches;
  */
 public class ManifestPluginDescriptorFinderTest {
 
+    private VersionManager versionManager;
+
     @Rule
     public TemporaryFolder testFolder = new TemporaryFolder();
 
@@ -70,6 +69,8 @@ public class ManifestPluginDescriptorFinderTest {
         pluginPath = testFolder.newFolder("test-plugin-6", "classes", "META-INF").toPath();
         Files.write(pluginPath.resolve("extensions.idx"), "ro.fortsoft.pf4j.demo.hello.HelloPlugin$HelloGreeting".getBytes());
         Files.write(pluginPath.resolve("MANIFEST.MF"), getPlugin6Manifest(), charset);
+
+        versionManager = new DefaultVersionManager();
     }
 
     /**
@@ -85,22 +86,22 @@ public class ManifestPluginDescriptorFinderTest {
         assertEquals("test-plugin-1", plugin1.getPluginId());
         assertEquals("Test Plugin 1", plugin1.getPluginDescription());
         assertEquals("ro.fortsoft.pf4j.plugin.TestPlugin", plugin1.getPluginClass());
-        assertEquals(Version.valueOf("0.0.1"), plugin1.getVersion());
+        assertEquals("0.0.1", plugin1.getVersion());
         assertEquals("Decebal Suiu", plugin1.getProvider());
         assertEquals(2, plugin1.getDependencies().size());
         assertEquals("test-plugin-2", plugin1.getDependencies().get(0).getPluginId());
         assertEquals("test-plugin-3", plugin1.getDependencies().get(1).getPluginId());
         assertEquals("~1.0", plugin1.getDependencies().get(1).getPluginVersionSupport());
         assertEquals("Apache-2.0", plugin1.getLicense());
-        assertTrue(versionMatches(plugin1.getRequires(), "1.0.0"));
+        assertTrue(versionManager.satisfies(plugin1.getRequires(), "1.0.0"));
 
         assertEquals("test-plugin-2", plugin2.getPluginId());
         assertEquals("", plugin2.getPluginDescription());
         assertEquals("ro.fortsoft.pf4j.plugin.TestPlugin", plugin2.getPluginClass());
-        assertEquals(Version.valueOf("0.0.1"), plugin2.getVersion());
+        assertEquals("0.0.1", plugin2.getVersion());
         assertEquals("Decebal Suiu", plugin2.getProvider());
         assertEquals(0, plugin2.getDependencies().size());
-        assertTrue(versionMatches(plugin2.getRequires(),"1.0.0"));
+        assertTrue(versionManager.satisfies(plugin2.getRequires(), "1.0.0"));
     }
 
     /**
index fa6666ac4aafc107534eaa1e03a1ad1314b20678..aa6d7c5f76b27b3f83aefdb3a30df4d0afcd25d9 100644 (file)
@@ -15,7 +15,6 @@
  */
 package ro.fortsoft.pf4j;
 
-import com.github.zafarkhaja.semver.Version;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -29,10 +28,11 @@ import java.util.Arrays;
 import java.util.List;
 
 import static org.junit.Assert.*;
-import static ro.fortsoft.pf4j.util.SemVerUtils.versionMatches;
 
 public class PropertiesPluginDescriptorFinderTest {
 
+    private VersionManager versionManager;
+
     @Rule
     public TemporaryFolder testFolder = new TemporaryFolder();
 
@@ -60,6 +60,8 @@ public class PropertiesPluginDescriptorFinderTest {
         // no plugin id
         pluginPath = testFolder.newFolder("test-plugin-6").toPath();
         Files.write(pluginPath.resolve("plugin.properties"), getPlugin6Properties(), charset);
+
+        versionManager = new DefaultVersionManager();
     }
 
     @Test
@@ -72,7 +74,7 @@ public class PropertiesPluginDescriptorFinderTest {
         assertEquals("test-plugin-1", plugin1.getPluginId());
         assertEquals("Test Plugin 1", plugin1.getPluginDescription());
         assertEquals("ro.fortsoft.pf4j.plugin.TestPlugin", plugin1.getPluginClass());
-        assertEquals(Version.valueOf("0.0.1"), plugin1.getVersion());
+        assertEquals("0.0.1", plugin1.getVersion());
         assertEquals("Decebal Suiu", plugin1.getProvider());
         assertEquals(2, plugin1.getDependencies().size());
         assertEquals("test-plugin-2", plugin1.getDependencies().get(0).getPluginId());
@@ -80,17 +82,17 @@ public class PropertiesPluginDescriptorFinderTest {
         assertEquals("~1.0", plugin1.getDependencies().get(1).getPluginVersionSupport());
         assertEquals("Apache-2.0", plugin1.getLicense());
         assertEquals(">=1", plugin1.getRequires());
-        assertTrue(versionMatches(plugin1.getRequires(),"1.0.0"));
-        assertFalse(versionMatches(plugin1.getRequires(), "0.1.0"));
+        assertTrue(versionManager.satisfies(plugin1.getRequires(), "1.0.0"));
+        assertFalse(versionManager.satisfies(plugin1.getRequires(), "0.1.0"));
 
         assertEquals("test-plugin-2", plugin2.getPluginId());
         assertEquals("", plugin2.getPluginDescription());
         assertEquals("ro.fortsoft.pf4j.plugin.TestPlugin", plugin2.getPluginClass());
-        assertEquals(Version.valueOf("0.0.1"), plugin2.getVersion());
+        assertEquals("0.0.1", plugin2.getVersion());
         assertEquals("Decebal Suiu", plugin2.getProvider());
         assertEquals(0, plugin2.getDependencies().size());
         assertEquals("*", plugin2.getRequires()); // Default is *
-        assertTrue(versionMatches(plugin2.getRequires(),"1.0.0"));
+        assertTrue(versionManager.satisfies(plugin2.getRequires(), "1.0.0"));
     }
 
     @Test(expected = PluginException.class)
@@ -171,6 +173,7 @@ public class PropertiesPluginDescriptorFinderTest {
 
         return Arrays.asList(lines);
     }
+
     private Path getPluginsRoot() {
         return testFolder.getRoot().toPath();
     }
index 23b1b34caa96df8911c593484f414a7b9fe33a51..139a0e8f3f13a15947a3677db032fd4ac6144471 100644 (file)
@@ -26,6 +26,7 @@ import java.nio.file.Path;
  * Manager for testing
  */
 public class MockPluginManager extends DefaultPluginManager {
+
     private PluginDescriptorFinder finder = new DefaultPluginDescriptorFinder(new DefaultPluginClasspath());
 
     public MockPluginManager() {
@@ -46,4 +47,5 @@ public class MockPluginManager extends DefaultPluginManager {
     protected PluginDescriptorFinder createPluginDescriptorFinder() {
         return finder;
     }
+
 }
index 37f0d1040b65f5227c1a83c9fd1298956ca77d61..6b985498feb3871c2ca7304da8303321b1593a57 100644 (file)
@@ -22,12 +22,16 @@ import java.io.BufferedWriter;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.net.URI;
-import java.nio.file.*;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.Collections;
 
 import static org.junit.Assert.*;
 
 public class FileUtilsTest {
+
     private Path zipFile;
     private Path tmpDir;
     private Path propsFile;
diff --git a/pf4j/src/test/java/ro/fortsoft/pf4j/util/SemVerUtils.java b/pf4j/src/test/java/ro/fortsoft/pf4j/util/SemVerUtils.java
deleted file mode 100644 (file)
index b5c94d1..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright 2017 Decebal Suiu
- *
- * Licensed 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.
- */
-package ro.fortsoft.pf4j.util;
-
-import com.github.zafarkhaja.semver.Version;
-import com.github.zafarkhaja.semver.expr.ExpressionParser;
-
-/**
- * Utility for semantic version testing
- */
-public class SemVerUtils {
-    public static boolean versionMatches(String expression, String systemVersion) {
-        return ExpressionParser.newInstance().parse(expression).interpret(Version.valueOf(systemVersion));
-    }
-}