Paul Martin
2016-04-30 a502d96a860456ec5e8c96761db70f7cabb74751
src/main/java/com/gitblit/models/PluginRegistry.java
@@ -19,10 +19,11 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.parboiled.common.StringUtils;
import ro.fortsoft.pf4j.PluginVersion;
import ro.fortsoft.pf4j.Version;
/**
 * Represents a list of plugin registrations.
@@ -37,13 +38,18 @@
   public PluginRegistry(String name) {
      this.name = name;
      registrations = new ArrayList<PluginRegistration>();
      registrations = new CopyOnWriteArrayList<PluginRegistration>();
   }
   public PluginRegistration lookup(String idOrName) {
   public void setup() {
      for (PluginRegistration reg : registrations) {
         reg.registry = name;
      }
   }
   public PluginRegistration lookup(String id) {
      for (PluginRegistration registration : registrations) {
         if (registration.id.equalsIgnoreCase(idOrName)
               || registration.name.equalsIgnoreCase(idOrName)) {
         if (registration.id.equalsIgnoreCase(id)) {
            return registration;
         }
      }
@@ -56,7 +62,7 @@
   }
   public static enum InstallState {
      NOT_INSTALLED, INSTALLED, CAN_UPDATE, UNKNOWN
      NOT_INSTALLED, INSTALLED, UPDATE_AVAILABLE, UNKNOWN
   }
   /**
@@ -68,17 +74,15 @@
      public final String id;
      public String name;
      public String description;
      public String provider;
      public String projectUrl;
      public String currentRelease;
      public transient String installedRelease;
      public transient String registry;
      public List<PluginRelease> releases;
@@ -87,17 +91,19 @@
         this.releases = new ArrayList<PluginRelease>();
      }
      public PluginRelease getCurrentRelease() {
      public PluginRelease getCurrentRelease(Version system) {
         PluginRelease current = null;
         if (!StringUtils.isEmpty(currentRelease)) {
            current = getRelease(currentRelease);
         }
         Date date = new Date(0);
         for (PluginRelease pv : releases) {
            Version requires = Version.ZERO;
            if (!StringUtils.isEmpty(pv.requires)) {
               requires = Version.createVersion(pv.requires);
            }
         if (current == null) {
            Date date = new Date(0);
            for (PluginRelease pv : releases) {
            if (system.isZero() || system.atLeast(requires)) {
               if (pv.date.after(date)) {
                  current = pv;
                  date = pv.date;
               }
            }
         }
@@ -113,17 +119,21 @@
         return null;
      }
      public InstallState getInstallState() {
      public InstallState getInstallState(Version system) {
         if (StringUtils.isEmpty(installedRelease)) {
            return InstallState.NOT_INSTALLED;
         }
         PluginVersion ir = PluginVersion.createVersion(installedRelease);
         PluginVersion cr = PluginVersion.createVersion(currentRelease);
         Version ir = Version.createVersion(installedRelease);
         Version cr = Version.ZERO;
         PluginRelease curr = getCurrentRelease(system);
         if (curr != null) {
            cr = Version.createVersion(curr.version);
         }
         switch (ir.compareTo(cr)) {
         case -1:
            return InstallState.UNKNOWN;
         case 1:
            return InstallState.CAN_UPDATE;
            return InstallState.UPDATE_AVAILABLE;
         default:
            return InstallState.INSTALLED;
         }
@@ -135,9 +145,18 @@
      }
   }
   public static class PluginRelease {
   public static class PluginRelease implements Serializable, Comparable<PluginRelease> {
      private static final long serialVersionUID = 1L;
      public String version;
      public Date date;
      public String requires;
      public String url;
      @Override
      public int compareTo(PluginRelease o) {
         return Version.createVersion(version).compareTo(Version.createVersion(o.version));
      }
   }
}