Author: paperwing
Date: 2012-07-03 13:06:59 -0700 (Tue, 03 Jul 2012)
New Revision: 29748
Modified:
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppParser.java
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/InstallFromStorePanel.java
Log:
Installing apps from previous session no longer causes bundle apps to be parsed
twice, no longer throws exception when exiting Cytoscape while app manager
dialog is open
Modified:
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
===================================================================
---
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
2012-07-03 19:16:52 UTC (rev 29747)
+++
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
2012-07-03 20:06:59 UTC (rev 29748)
@@ -356,9 +356,10 @@
appManager.setFeaturesService(featuresService);
// AbstractCyAction implementation for updated app manager
- AppManagerAction appManagerAction2 = new
AppManagerAction(appManager, cySwingApplicationRef, fileUtilServiceRef,
dialogTaskManagerRef);
- registerService(bc, appManagerAction2, CyAction.class, new
Properties());
-
+ AppManagerAction appManagerAction = new
AppManagerAction(appManager, cySwingApplicationRef,
+ fileUtilServiceRef, dialogTaskManagerRef,
cyServiceRegistrarRef);
+ registerService(bc, appManagerAction, CyAction.class, new
Properties());
+
// Start thread for local server that reports app installation
status to the app store when requested,
// also able to install an app when told by the app store
Thread serverThread = new Thread() {
Modified:
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
===================================================================
---
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
2012-07-03 19:16:52 UTC (rev 29747)
+++
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
2012-07-03 20:06:59 UTC (rev 29748)
@@ -1,6 +1,7 @@
package org.cytoscape.app.internal.action;
import java.awt.event.ActionEvent;
+import java.util.Properties;
import java.util.Set;
import java.util.concurrent.Executors;
@@ -11,8 +12,11 @@
import org.cytoscape.app.internal.net.WebQuerier;
import org.cytoscape.app.internal.net.server.LocalHttpServer;
import org.cytoscape.app.internal.ui.AppManagerDialog;
+import org.cytoscape.application.events.CyShutdownEvent;
+import org.cytoscape.application.events.CyShutdownListener;
import org.cytoscape.application.swing.AbstractCyAction;
import org.cytoscape.application.swing.CySwingApplication;
+import org.cytoscape.service.util.CyServiceRegistrar;
import org.cytoscape.util.swing.FileUtil;
import org.cytoscape.work.Task;
import org.cytoscape.work.TaskIterator;
@@ -43,13 +47,22 @@
* A reference to the {@link TaskManager} service used to execute
Cytoscape tasks
*/
private TaskManager taskManager;
+
+ /**
+ * A reference to the {@link CyServiceRegistrar} service used to add
listeners for handling shutdown-related events
+ */
+ private CyServiceRegistrar serviceRegistrar;
private LocalHttpServer server;
+ private AppManagerDialog appManagerDialog = null;
+
+
/**
* Creates and sets up the AbstractCyAction, placing an item into the
menu.
*/
- public AppManagerAction(AppManager appManager, CySwingApplication
swingApplication, FileUtil fileUtil, TaskManager taskManager) {
+ public AppManagerAction(AppManager appManager,
+ CySwingApplication swingApplication, FileUtil fileUtil,
TaskManager taskManager, CyServiceRegistrar serviceRegistrar) {
super("App Manager");
setPreferredMenu("Apps");
@@ -59,13 +72,40 @@
this.swingApplication = swingApplication;
this.fileUtil = fileUtil;
this.taskManager = taskManager;
+ this.serviceRegistrar = serviceRegistrar;
+
+ CyShutdownListener shutdownListener = createShutdownListener();
+ serviceRegistrar.registerAllServices(shutdownListener, new
Properties());
}
+ private CyShutdownListener createShutdownListener() {
+ CyShutdownListener shutdownListener = new CyShutdownListener() {
+
+ @Override
+ public void handleEvent(CyShutdownEvent e) {
+
+ if (appManagerDialog != null) {
+ appManagerDialog.setVisible(false);
+ appManagerDialog.dispose();
+ }
+
+ serviceRegistrar.unregisterService(this,
CyShutdownListener.class);
+ }
+ };
+
+ return shutdownListener;
+ }
+
@Override
public void actionPerformed(ActionEvent event) {
// Create and display the App Manager dialog
- AppManagerDialog appManagerDialog = new
AppManagerDialog(appManager, fileUtil, taskManager,
swingApplication.getJFrame(), false);
+ if (appManagerDialog == null) {
+ appManagerDialog = new AppManagerDialog(appManager,
fileUtil, taskManager, swingApplication.getJFrame(), false);
+ } else {
+ appManagerDialog.pack();
+ appManagerDialog.setVisible(true);
+ }
}
}
Modified:
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
===================================================================
---
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
2012-07-03 19:16:52 UTC (rev 29747)
+++
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
2012-07-03 20:06:59 UTC (rev 29748)
@@ -148,11 +148,11 @@
this.appListeners = new HashSet<AppsChangedListener>();
// Install previously enabled apps
- installAppsInDirectory(new File(getInstalledAppsPath()));
- installAppsInDirectory(new File(getKarafDeployDirectory()));
+ installAppsInDirectory(new File(getKarafDeployDirectory()),
false);
+ installAppsInDirectory(new File(getInstalledAppsPath()), true);
// Load apps from the "uninstalled apps" directory
- Set<App> uninstalledApps = obtainAppsFromDirectory(new
File(getUninstalledAppsPath()));
+ Set<App> uninstalledApps = obtainAppsFromDirectory(new
File(getUninstalledAppsPath()), true);
apps.addAll(uninstalledApps);
DebugHelper.print(this, "config dir: " +
applicationConfiguration.getConfigurationDirectoryLocation());
@@ -196,8 +196,7 @@
try {
uninstallApp(app);
} catch
(AppUninstallException e) {
-
-
e.printStackTrace();
+
logger.warn("Failed to uninstall app " + app.getAppName() + " when it was
removed from the local install directory.");
}
}
}
@@ -234,7 +233,7 @@
try {
//installAlterationObserver.initialize();
- //
fileAlterationMonitor.addObserver(installAlterationObserver);
+
//fileAlterationMonitor.addObserver(installAlterationObserver);
fileAlterationMonitor.start();
} catch (Exception e) {
// TODO Auto-generated catch block
@@ -583,10 +582,10 @@
jarFile.close();
} catch (ZipException e) {
// Do nothing; skip file
- e.printStackTrace();
+ // e.printStackTrace();
} catch (IOException e) {
// Do nothing; skip file
- e.printStackTrace();
+ // e.printStackTrace();
} finally {
if (jarFile != null) {
try {
@@ -616,10 +615,10 @@
}
}
- private void installAppsInDirectory(File directory) {
+ private void installAppsInDirectory(File directory, boolean
ignoreDuplicateBundleApps) {
// Parse App objects from the given directory
- Set<App> parsedApps = obtainAppsFromDirectory(directory);
+ Set<App> parsedApps = obtainAppsFromDirectory(directory,
ignoreDuplicateBundleApps);
// Install each app
for (App parsedApp : parsedApps) {
@@ -638,24 +637,33 @@
* @param directory The directory used to parse {@link App} objects
* @return A set of all {@link App} objects that were successfully
parsed from files in the given directory
*/
- private Set<App> obtainAppsFromDirectory(File directory) {
+ private Set<App> obtainAppsFromDirectory(File directory, boolean
ignoreDuplicateBundleApps) {
// Obtain all files in the given directory with supported
extensions, perform a non-recursive search
Collection<File> files = FileUtils.listFiles(directory,
APP_EXTENSIONS, false);
Set<App> parsedApps = new HashSet<App>();
+ String karafDeployDirectory = getKarafDeployDirectory();
+
App app;
for (File potentialApp : files) {
- app = null;
- try {
- app = appParser.parseApp(potentialApp);
- } catch (AppParsingException e) {
- DebugHelper.print("Failed to parse " +
potentialApp + ", error: " + e.getMessage());
- } finally {
- if (app != null) {
- parsedApps.add(app);
-
- DebugHelper.print("App parsed: " + app);
+
+ if (ignoreDuplicateBundleApps
+ && (new File(karafDeployDirectory +
File.separator + potentialApp.getName())).exists()) {
+ // Skip file
+ } else {
+
+ app = null;
+ try {
+ app = appParser.parseApp(potentialApp);
+ } catch (AppParsingException e) {
+ DebugHelper.print("Failed to parse " +
potentialApp + ", error: " + e.getMessage());
+ } finally {
+ if (app != null) {
+ parsedApps.add(app);
+
+ DebugHelper.print("App parsed:
" + app);
+ }
}
}
}
@@ -721,6 +729,6 @@
* Install apps from the local storage directory containing previously
installed apps.
*/
public void installAppsFromDirectory() {
- installAppsInDirectory(new File(getInstalledAppsPath()));
+ installAppsInDirectory(new File(getInstalledAppsPath()), false);
}
}
Modified:
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppParser.java
===================================================================
---
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppParser.java
2012-07-03 19:16:52 UTC (rev 29747)
+++
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppParser.java
2012-07-03 20:06:59 UTC (rev 29748)
@@ -304,8 +304,8 @@
if (compatibleVersions == null ||
compatibleVersions.trim().length() == 0) {
if (bundleApp) {
- logger.warn("Bundle app " +
file.getName() + " manifest does not contain an entry for " + APP_COMPATIBLE_TAG
- + ". Assuming default
value 3.0..");
+ logger.warn("Bundle app " +
file.getName() + " manifest does not contain the entry \"" + APP_COMPATIBLE_TAG
+ + "\". Assuming default
value 3.0..");
compatibleVersions = "3.0";
} else {
throw new AppParsingException("Jar is
missing value for entry " + APP_COMPATIBLE_TAG + " in its manifest file.");
Modified:
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/InstallFromStorePanel.java
===================================================================
---
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/InstallFromStorePanel.java
2012-07-03 19:16:52 UTC (rev 29747)
+++
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/ui/InstallFromStorePanel.java
2012-07-03 20:06:59 UTC (rev 29748)
@@ -551,7 +551,7 @@
String text = "";
- text += "<html> <head> </head> <body hspace=\"8\"
vspace=\"8\">";
+ text += "<html> <head> </head> <body hspace=\"6\"
vspace=\"6\">";
// App hyperlink to web store page
// text += "<p style=\"margin-top: 0\"> <a href=\"" +
selectedApp.getPageUrl() + "\">" + selectedApp.getPageUrl() + "</a> </p>";
--
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.