packaging: allow to customize version comparator (WEB-17575)
authorSergey Simonchik <sergey.simonchik@jetbrains.com>
Wed, 5 Aug 2015 21:48:58 +0000 (00:48 +0300)
committerSergey Simonchik <sergey.simonchik@jetbrains.com>
Wed, 5 Aug 2015 21:48:58 +0000 (00:48 +0300)
platform/lang-impl/src/com/intellij/webcore/packaging/InstalledPackagesPanel.java
platform/lang-impl/src/com/intellij/webcore/packaging/PackageManagementService.java

index 13286cb9620adc092e02264715208517598db023..749718e1e30a8e06886389711c12ce5af87c33df 100644 (file)
@@ -177,7 +177,7 @@ public class InstalledPackagesPanel extends JPanel {
           if (packagesShouldBePostponed.contains(packageName)) {
             myWaitingToUpgrade.add((InstalledPackage)packageObj);
           }
-          else if (PackageVersionComparator.VERSION_COMPARATOR.compare(currentVersion, availableVersion) < 0) {
+          else if (isUpdateAvailable(currentVersion, availableVersion)) {
             upgradePackage(pkg, availableVersion);
             upgradedPackages.add(packageName);
           }
@@ -206,8 +206,7 @@ public class InstalledPackagesPanel extends JPanel {
     myPackageManagementService.fetchPackageVersions(pkg.getName(), new CatchingConsumer<List<String>, Exception>() {
       @Override
       public void consume(List<String> releases) {
-        if (!releases.isEmpty() &&
-            PackageVersionComparator.VERSION_COMPARATOR.compare(pkg.getVersion(), releases.get(0)) >= 0) {
+        if (!releases.isEmpty() && !isUpdateAvailable(pkg.getVersion(), releases.get(0))) {
           return;
         }
 
@@ -304,7 +303,7 @@ public class InstalledPackagesPanel extends JPanel {
           final String pyPackageName = pkg.getName();
           final String availableVersion = (String)myPackagesTable.getValueAt(index, 2);
           if (!upgradeAvailable) {
-            upgradeAvailable = PackageVersionComparator.VERSION_COMPARATOR.compare(pkg.getVersion(), availableVersion) < 0 &&
+            upgradeAvailable = isUpdateAvailable(pkg.getVersion(), availableVersion) &&
                                !myCurrentlyInstalling.contains(pyPackageName);
           }
           if (!canUninstall && !canUpgrade) break;
@@ -519,6 +518,14 @@ public class InstalledPackagesPanel extends JPanel {
     return false;
   }
 
+  private boolean isUpdateAvailable(@NotNull String currentVersion, @NotNull String availableVersion) {
+    PackageManagementService service = myPackageManagementService;
+    if (service != null) {
+      return service.compareVersions(currentVersion, availableVersion) < 0;
+    }
+    return PackageVersionComparator.VERSION_COMPARATOR.compare(currentVersion, availableVersion) < 0;
+  }
+
   private void refreshLatestVersions(@NotNull final PackageManagementService packageManagementService) {
     final Application application = ApplicationManager.getApplication();
     application.executeOnPooledThread(new Runnable() {
@@ -556,7 +563,7 @@ public class InstalledPackagesPanel extends JPanel {
     return packageMap;
   }
 
-  private static class MyTableCellRenderer extends DefaultTableCellRenderer {
+  private class MyTableCellRenderer extends DefaultTableCellRenderer {
     @Override
     public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected,
                                                    final boolean hasFocus, final int row, final int column) {
@@ -565,7 +572,7 @@ public class InstalledPackagesPanel extends JPanel {
       final String availableVersion = (String)table.getValueAt(row, 2);
       boolean update = column == 2 &&
                        StringUtil.isNotEmpty(availableVersion) &&
-                       PackageVersionComparator.VERSION_COMPARATOR.compare(version, availableVersion) < 0;
+                       isUpdateAvailable(version, availableVersion);
       cell.setIcon(update ? AllIcons.Vcs.Arrow_right : null);
       final Object pyPackage = table.getValueAt(row, 0);
       if (pyPackage instanceof InstalledPackage) {
index d1f775023a3e0fde7333869adbbbf193115521a6..a17edb4d5d56c8790465fa0d38fd4a1824811c0d 100644 (file)
@@ -39,6 +39,15 @@ public abstract class PackageManagementService {
   public void removeRepository(String repositoryUrl) {
   }
 
+  /**
+   * @return a negative integer, if the first version is older than the second,
+   *         zero, if the versions are equals,
+   *         a positive integer, if the first version is newer than the second.
+   */
+  public int compareVersions(@NotNull String version1, @NotNull String version2) {
+    return PackageVersionComparator.VERSION_COMPARATOR.compare(version1, version2);
+  }
+
   /**
    * Returns the list of all packages in all configured repositories. Called in a background thread
    * and may initiate network connections. May return cached data.