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.