Author: paperwing
Date: 2012-08-08 16:00:36 -0700 (Wed, 08 Aug 2012)
New Revision: 30136

Added:
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/event/UpdatesChangedEvent.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/event/UpdatesChangedListener.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/UpdateManager.java
Modified:
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/CheckForUpdatesPanel.java
   
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/WebQuerierTest.java
Log:
Added classes for keeping track of updates

Added: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/event/UpdatesChangedEvent.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/event/UpdatesChangedEvent.java
                           (rev 0)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/event/UpdatesChangedEvent.java
   2012-08-08 23:00:36 UTC (rev 30136)
@@ -0,0 +1,30 @@
+package org.cytoscape.app.internal.event;
+
+import org.cytoscape.app.internal.net.UpdateManager;
+
+/**
+ * An event used by the {@link UpdateManager} to notify 
UpdatesChangedListeners that an update
+ * has become available or installed,  and that the listeners (such as UI 
components) should 
+ * update their data to reflect the change.
+ */
+public final class UpdatesChangedEvent {
+
+       /** The {@link UpdateManager} that created the event. */
+       private UpdateManager source;
+
+       /**
+        * Create a new UpdatesChangedEvent.
+        * @param source The {@link UpdateManager} creating the event.
+        */
+       public UpdatesChangedEvent(UpdateManager source) {
+               this.source = source;
+       }
+       
+       /**
+        * Find the source of the event.
+        * @return The {@link UpdateManager} that triggered the event.
+        */
+       public UpdateManager getSource() {
+               return source;
+       }
+}

Added: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/event/UpdatesChangedListener.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/event/UpdatesChangedListener.java
                                (rev 0)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/event/UpdatesChangedListener.java
        2012-08-08 23:00:36 UTC (rev 30136)
@@ -0,0 +1,14 @@
+package org.cytoscape.app.internal.event;
+
+/**
+ * A listener used to detect when an update has become available, or 
installed. This is useful for UI components
+ * to update their data when the list of updates has changed.
+ */
+public interface UpdatesChangedListener {
+       
+       /**
+        * Notifies the listener that updates have been updated, or 
added/removed from the list of available updates.
+        * @param event The {@link UpdatesChangedEvent} containing information 
about the change event.
+        */
+       public void appsChanged(UpdatesChangedEvent event);
+}

Added: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/UpdateManager.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/UpdateManager.java
                           (rev 0)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/UpdateManager.java
   2012-08-08 23:00:36 UTC (rev 30136)
@@ -0,0 +1,63 @@
+package org.cytoscape.app.internal.net;
+
+import java.sql.Time;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.cytoscape.app.internal.event.UpdatesChangedEvent;
+import org.cytoscape.app.internal.event.UpdatesChangedListener;
+import org.cytoscape.app.internal.manager.App;
+import org.cytoscape.app.internal.manager.AppManager;
+
+public class UpdateManager {
+       
+       private Set<UpdatesChangedListener> updatesChangedListeners;
+       private Set<Update> updates;
+       
+       private Time lastUpdateCheckTime;
+       
+       public UpdateManager() {
+               this.updatesChangedListeners = new 
HashSet<UpdatesChangedListener>();
+               this.updates = null;
+       }
+       
+       /**
+        * Checks for updates using the given {@link WebQuerier} for the given 
set of apps.
+        * @param webQuerier The {@link WebQuerier} used to access app store 
data
+        * @param apps The set of apps to check for updates for
+        */
+       public void checkForUpdates(WebQuerier webQuerier, Set<App> apps) {
+               
+               
+               fireUpdatesChangedEvent();
+               
+               // Update last update check time
+               lastUpdateCheckTime = new Time(System.currentTimeMillis());
+       }
+       
+       /**
+        * Installs the given {@link Update} via the given {@link AppManager}
+        * @param update The update to install
+        * @param appManager The {@link AppManager} keeping track of current 
apps
+        */
+       public void installUpdate(Update update, AppManager appManager) {
+               
+               if (this.updates.contains(update)) {
+                       this.updates.remove(update);
+               }
+               
+               fireUpdatesChangedEvent();
+       }
+       
+       private void fireUpdatesChangedEvent() {
+               UpdatesChangedEvent updatesChangedEvent = new 
UpdatesChangedEvent(this);
+               
+               for (UpdatesChangedListener updatesChangedListener : 
updatesChangedListeners) {
+                       updatesChangedListener.appsChanged(updatesChangedEvent);
+               }
+       }
+       
+       public Time getLastUpdateCheckTime() {
+               return lastUpdateCheckTime;
+       }
+}

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
      2012-08-08 21:53:21 UTC (rev 30135)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
      2012-08-08 23:00:36 UTC (rev 30136)
@@ -619,33 +619,55 @@
         * @return A negative integer if first more recent, a positive integer 
if second more recent,
         * or 0 if the versions were the same or unable to determine which is 
more recent.
         */
-       private int compareVersions(String first, String second) {
+       public int compareVersions(String first, String second) {
                String[] firstSplit = first.split("\\.", 3);
                String[] secondSplit = second.split("\\.", 3);
-
+               
                int maxFields = Math.max(firstSplit.length, secondSplit.length);
                
                boolean firstHasField, secondHasField;
-               
+               //System.out.println("test2");
                // Remove non-numerical characters
                for (int i = 0; i < maxFields; i++) {
+                       
                        firstHasField = (i < firstSplit.length);
                        secondHasField = (i < secondSplit.length);
 
+                       /*
+                       if (firstHasField) {
+                               System.out.println("first: " + firstSplit[i]);
+                       }
+                       
+                       if (secondHasField) {
+                               System.out.println("second: " + secondSplit[i]);
+                       }
+                       */
+                       
                        if (firstHasField && secondHasField) {
-                               firstSplit[i] = 
firstSplit[i].replaceAll("[^\\d]", "");
-                               secondSplit[i] = 
secondSplit[i].replaceAll("[^\\d]", "");
+                               firstSplit[i] = 
firstSplit[i].replaceAll("[^\\d]+.*", "");
+                               secondSplit[i] = 
secondSplit[i].replaceAll("[^\\d]+.*", "");
                                
+                               /*
+                               System.out.println("firstSplit: " + 
firstSplit[i]);
+                               System.out.println("secondSplit: " + 
secondSplit[i]);
+                               */
+                               
                                try {
                                        int firstParsed = 
Integer.parseInt(firstSplit[i]);
                                        int secondParsed = 
Integer.parseInt(secondSplit[i]);
                                        
+                                       /*
+                                       System.out.println("firstParsed: " + 
firstParsed);
+                                       System.out.println("secondParsed: " + 
secondParsed);
+                                       */
+                                       
                                        if (firstParsed > secondParsed) {
                                                return -1;
-                                       } else if (secondParsed < firstParsed) {
+                                       } else if (secondParsed > firstParsed) {
                                                return 1;
                                        }
                                } catch (NumberFormatException e) {
+                                       // System.out.println("NFE");
                                        return 0;
                                }
                        } else if (firstHasField) {

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/CheckForUpdatesPanel.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/CheckForUpdatesPanel.java
     2012-08-08 21:53:21 UTC (rev 30135)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/CheckForUpdatesPanel.java
     2012-08-08 23:00:36 UTC (rev 30136)
@@ -1,5 +1,8 @@
 package org.cytoscape.app.internal.ui;
 
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+
 /**
  * This class represents the panel in the App Manager dialog's tab used for 
checking for app updates.
  * Its UI setup code is generated by the Netbeans 7 GUI builder.
@@ -133,6 +136,14 @@
                     .add(installAllTable))
                 .addContainerGap())
         );
+        
+        //
+        this.addComponentListener(new ComponentAdapter() {
+               
+               @Override
+               public void componentShown(ComponentEvent e) {
+               }
+        });
     }
 
     private void 
installSelectedButtonActionPerformed(java.awt.event.ActionEvent evt) {

Modified: 
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/WebQuerierTest.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/WebQuerierTest.java
  2012-08-08 21:53:21 UTC (rev 30135)
+++ 
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/WebQuerierTest.java
  2012-08-08 23:00:36 UTC (rev 30136)
@@ -3,6 +3,7 @@
 import static org.junit.Assert.*;
 import static org.mockito.Mockito.*;
 
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
@@ -12,6 +13,34 @@
 
        @Test
        public void testCheckUpdates() {
+
+       }
+       
+       @Test
+       public void testCompareVersions() {
+               WebQuerier webQuerier = new WebQuerier(null);
                
+               // <0 = first is newer, >0 = first is older
+               assertTrue(webQuerier.compareVersions("3.0.0", "3.0.0") == 0);
+               assertTrue(webQuerier.compareVersions("3.0.0-tag", "3.0.0") == 
0);
+               assertTrue(webQuerier.compareVersions("3.0.0-tag1", 
"3.0.0-tag2") == 0);
+               
+               assertTrue(webQuerier.compareVersions("3.0.0-tag1", 
"3.0.1-tag2") > 0);
+               assertTrue(webQuerier.compareVersions("3.0.1-tag1", 
"3.0.0-tag2") < 0);
+               assertTrue(webQuerier.compareVersions("3.0.1-tag1", 
"3.1.0-tag2") > 0);
+               
+               assertTrue(webQuerier.compareVersions("3.0", "3.0.0") > 0);
+               assertTrue(webQuerier.compareVersions("3.0-tag", "3.0.0") > 0);
+               assertTrue(webQuerier.compareVersions("3.1", "3.0.0") < 0);
+
+               assertTrue(webQuerier.compareVersions("3", "3.0.0") > 0);
+               assertTrue(webQuerier.compareVersions("3.1", "") == 0);
+               assertTrue(webQuerier.compareVersions("", "3.1") == 0);
+               assertTrue(webQuerier.compareVersions("", "") == 0);
        }
+       
+       @Test
+       public void testFail() {
+               //assertTrue(false);
+       }
 }

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.

Reply via email to