Author: paperwing
Date: 2012-04-09 16:12:25 -0700 (Mon, 09 Apr 2012)
New Revision: 28773
Added:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppsChangedEvent.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppsChangedListener.java
Removed:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppEvent.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppListener.java
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/App.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppParser.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/CurrentlyInstalledAppsPanel.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/InstallNewAppsPanel.java
Log:
Now able to view available apps in the "currently installed apps" tab of the
app manager, able to enable/disable selected apps by clicking on enable/disable
buttons. App files are appropriated moved in the local storage directory
between the directory containing installed apps and the directory containing
uninstalled apps. Table of available apps is now rebuilt each time an app
changes state.
Deleted:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppEvent.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppEvent.java
2012-04-09 21:37:46 UTC (rev 28772)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppEvent.java
2012-04-09 23:12:25 UTC (rev 28773)
@@ -1,24 +0,0 @@
-package org.cytoscape.app.internal.event;
-
-import org.cytoscape.app.internal.manager.App;
-import org.cytoscape.app.internal.manager.AppManager;
-import org.cytoscape.event.AbstractCyEvent;
-
-public final class AppEvent {
-
- private AppManager source;
- private App app;
-
- public AppEvent(AppManager source, App app) {
- this.source = source;
- this.app = app;
- }
-
- public AppManager getSource() {
- return source;
- }
-
- public App getApp() {
- return app;
- }
-}
Deleted:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppListener.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppListener.java
2012-04-09 21:37:46 UTC (rev 28772)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppListener.java
2012-04-09 23:12:25 UTC (rev 28773)
@@ -1,8 +0,0 @@
-package org.cytoscape.app.internal.event;
-
-public interface AppListener {
-
- public void appInstalled(AppEvent event);
-
- public void appUninstalled(AppEvent event);
-}
Copied:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppsChangedEvent.java
(from rev 28769,
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppEvent.java)
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppsChangedEvent.java
(rev 0)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppsChangedEvent.java
2012-04-09 23:12:25 UTC (rev 28773)
@@ -0,0 +1,18 @@
+package org.cytoscape.app.internal.event;
+
+import org.cytoscape.app.internal.manager.App;
+import org.cytoscape.app.internal.manager.AppManager;
+import org.cytoscape.event.AbstractCyEvent;
+
+public final class AppsChangedEvent {
+
+ private AppManager source;
+
+ public AppsChangedEvent(AppManager source) {
+ this.source = source;
+ }
+
+ public AppManager getSource() {
+ return source;
+ }
+}
Property changes on:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppsChangedEvent.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Copied:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppsChangedListener.java
(from rev 28769,
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppListener.java)
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppsChangedListener.java
(rev 0)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppsChangedListener.java
2012-04-09 23:12:25 UTC (rev 28773)
@@ -0,0 +1,6 @@
+package org.cytoscape.app.internal.event;
+
+public interface AppsChangedListener {
+
+ public void appsChanged(AppsChangedEvent event);
+}
Property changes on:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/event/AppsChangedListener.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/App.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/App.java
2012-04-09 21:37:46 UTC (rev 28772)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/App.java
2012-04-09 23:12:25 UTC (rev 28773)
@@ -24,11 +24,6 @@
private String entryClassName;
/**
- * The URL to the jar file containing the app.
- */
- private URL jarURL;
-
- /**
* A reference to the instance of the app's class that extends {@link
AbstractCyApp}.
*/
private AbstractCyApp appInstance;
@@ -45,9 +40,9 @@
private boolean officialNameObtained;
/**
- * Whether or not the app is a simple app as opposed to an OSGi
bundle-based app.
+ * The type of app, such as simple or OSGi bundle-based app
*/
- private boolean isSimpleApp;
+ private AppType appType;
private AppStatus status;
@@ -71,6 +66,11 @@
}
}
+ public enum AppType {
+ SIMPLE_APP,
+ OSGI_APP;
+ }
+
public App() {
this("", "", "", "", null);
}
@@ -84,6 +84,7 @@
appValidated = false;
officialNameObtained = false;
+ this.status = AppStatus.UNINSTALLED;
}
public String getAppName() {
@@ -110,10 +111,6 @@
return entryClassName;
}
- public URL getJarURL() {
- return jarURL;
- }
-
public AbstractCyApp getAppInstance() {
return appInstance;
}
@@ -126,8 +123,8 @@
return officialNameObtained;
}
- public boolean isSimpleApp() {
- return isSimpleApp;
+ public AppType getAppType() {
+ return appType;
}
public AppStatus getStatus() {
@@ -158,10 +155,6 @@
this.entryClassName = entryClassName;
}
- public void setJarURL(URL jarURL) {
- this.jarURL = jarURL;
- }
-
public void setAppInstance(AbstractCyApp appInstance) {
this.appInstance = appInstance;
}
@@ -174,27 +167,11 @@
this.officialNameObtained = officialNameObtained;
}
- public void setSimpleApp(boolean isSimpleApp) {
- this.isSimpleApp = isSimpleApp;
+ public void setAppType(AppType appType) {
+ this.appType = appType;
}
public void setStatus(AppStatus status) {
this.status = status;
}
-
- @Override
- public String toString() {
- String result;
-
- result = "App: {name:" + appName + ", authors:" + authors + ",
version:" + version + "}";
-
- return result;
- }
-
-
-
-
-
-
-
}
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
2012-04-09 21:37:46 UTC (rev 28772)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
2012-04-09 23:12:25 UTC (rev 28773)
@@ -4,6 +4,7 @@
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
+import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Collection;
@@ -14,11 +15,12 @@
import org.apache.commons.io.FileUtils;
import org.cytoscape.app.AbstractCyApp;
import org.cytoscape.app.CyAppAdapter;
-import org.cytoscape.app.internal.event.AppEvent;
-import org.cytoscape.app.internal.event.AppListener;
+import org.cytoscape.app.internal.event.AppsChangedEvent;
+import org.cytoscape.app.internal.event.AppsChangedListener;
import org.cytoscape.app.internal.exception.AppCopyException;
import org.cytoscape.app.internal.exception.AppParsingException;
import org.cytoscape.app.internal.manager.App.AppStatus;
+import org.cytoscape.app.internal.manager.App.AppType;
import org.cytoscape.application.CyApplicationConfiguration;
/**
@@ -43,8 +45,9 @@
private Set<App> installedApps;
private Set<App> toBeUninstalledApps;
private Set<App> uninstalledApps;
+ private Set<App> availableApps;
- private Set<AppListener> appListeners;
+ private Set<AppsChangedListener> appListeners;
/** An {@link AppParser} object used to parse File objects and possibly
URLs into {@link App} objects
* into a format we can more easily work with
@@ -68,6 +71,7 @@
installedApps = new HashSet<App>();
toBeUninstalledApps = new HashSet<App>();
uninstalledApps = new HashSet<App>();
+ availableApps = new HashSet<App>();
appParser = new AppParser();
@@ -92,9 +96,15 @@
}
*/
- this.appListeners = new HashSet<AppListener>();
+ this.appListeners = new HashSet<AppsChangedListener>();
+ // Install previously enabled apps
installAppsInDirectory(new File(getInstalledAppsPath()));
+
+ // Load apps from the "uninstalled apps" directory
+ Set<App> uninstalledApps = obtainAppsFromDirectory(new
File(getUninstalledAppsPath()));
+ availableApps.addAll(uninstalledApps);
+ uninstalledApps.addAll(uninstalledApps);
}
public AppParser getAppParser() {
@@ -107,7 +117,7 @@
* app is created by instancing its class that extends {@link
AbstractCyApp}.
*
* Before the app is installed, it is checked if it contains valid
packaging by its isAppValidated() method.
- * Apps that have not been validated are ignored.
+ * Apps that have not been validated are ignored. Also, apps that are
already installed are left alone.
*
* @param app The {@link App} object representing and providing
information about the app to install
* @throws AppCopyException If there was an IO-related error during the
copy operation that prevents the app from
@@ -123,6 +133,13 @@
return;
}
+ // Check if the app has already been installed.
+ if (app.getStatus() == AppStatus.INSTALLED &&
installedApps.contains(app)) {
+
+ // Do nothing if it is already installed
+ return;
+ }
+
// Attempt to copy the app to the directory for installed apps.
try {
File installedAppsDirectory = new
File(getInstalledAppsPath());
@@ -134,6 +151,12 @@
// Uses Apache Commons library; overwrites
files with the same name.
FileUtils.copyFileToDirectory(appFile,
installedAppsDirectory);
+ // If we copied it from the uninstalled apps
directory, remove it from that directory
+ if
(appFile.getParentFile().getCanonicalPath().equals(getUninstalledAppsPath())) {
+ System.out.println("Installed from
uninstalled apps directory, deleting from uninstalled directory");
+ appFile.delete();
+ }
+
// Update the app's path
String fileName = app.getAppFile().getName();
app.setAppFile(new File(getInstalledAppsPath()
+ File.separator + fileName));
@@ -141,10 +164,40 @@
} catch (IOException e) {
throw new AppCopyException("Unable to copy file: " +
e.getMessage());
}
+
+ // Create an app instance only if one was not already created
+ if (app.getAppType() == AppType.SIMPLE_APP
+ && app.getAppInstance() == null) {
+ Object appInstance = createAppInstance(app);
+
+ // Keep a reference to the newly created instance
+ app.setAppInstance((AbstractCyApp) appInstance);
+ }
+ app.setStatus(AppStatus.INSTALLED);
+ System.out.println("App " + app + " status change: " +
app.getStatus());
+ installedApps.add(app);
+ availableApps.add(app);
+
+ // Let the listeners know that an app has been installed
+ for (AppsChangedListener appListener : appListeners) {
+ AppsChangedEvent appEvent = new AppsChangedEvent(this);
+ appListener.appsChanged(appEvent);
+ }
+ }
+
+ private Object createAppInstance(App app) {
+ URL appURL = null;
+ try {
+ appURL = app.getAppFile().toURI().toURL();
+ } catch (MalformedURLException e) {
+ throw new IllegalStateException("Unable to obtain URL
for file: "
+ + app.getAppFile() + ". Reason: " +
e.getMessage());
+ }
+
// TODO: Currently uses the CyAppAdapter's loader to load apps'
classes. Is there reason to use a different one?
ClassLoader appClassLoader = new URLClassLoader(
- new URL[]{app.getJarURL()},
appAdapter.getClass().getClassLoader());
+ new URL[]{appURL},
appAdapter.getClass().getClassLoader());
String entryClassName = app.getEntryClassName();
@@ -154,7 +207,7 @@
appEntryClass =
appClassLoader.loadClass(entryClassName);
} catch (ClassNotFoundException e) {
- throw new IllegalStateException("Class " +
entryClassName + " not found in URL: " + app.getJarURL());
+ throw new IllegalStateException("Class " +
entryClassName + " not found in URL: " + appURL);
}
// Attempt to obtain the constructor
@@ -180,18 +233,8 @@
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
-
- // Keep a reference to the newly created instance
- app.setAppInstance((AbstractCyApp) appInstance);
- app.setStatus(AppStatus.INSTALLED);
- installedApps.add(app);
-
- // Let the listeners know that an app has been installed
- for (AppListener appListener : appListeners) {
- AppEvent appEvent = new AppEvent(this, app);
- appListener.appInstalled(appEvent);
- }
+ return appInstance;
}
/**
@@ -205,6 +248,8 @@
* to the subdirectory containing currently uninstalled apps.
*/
public void uninstallApp(App app) throws AppCopyException {
+ System.out.println("uninstallApp call, app: " + app + " status:
" + app.getStatus());
+
// Check if the app is installed before attempting to uninstall.
if (app.getStatus() != AppStatus.INSTALLED) {
// If it is not installed, do not attempt to uninstall
it.
@@ -236,13 +281,12 @@
// Simple apps require a Cytoscape restart to
be uninstalled
app.setStatus(AppStatus.TO_BE_UNINSTALLED);
- installedApps.remove(app);
toBeUninstalledApps.add(app);
// Let the listeners know that an app has been
uninstalled
- for (AppListener appListener : appListeners) {
- AppEvent appEvent = new AppEvent(this,
app);
- appListener.appUninstalled(appEvent);
+ for (AppsChangedListener appListener :
appListeners) {
+ AppsChangedEvent appEvent = new
AppsChangedEvent(this);
+ appListener.appsChanged(appEvent);
}
}
} catch (IOException e) {
@@ -252,13 +296,21 @@
/**
* Return the set of all currently installed apps.
- * @return
+ * @return The set of all installed apps
*/
public Set<App> getInstalledApps() {
return installedApps;
}
/**
+ * Return the set of all locally available apps, including installed,
uninstalled, and to-be-uninstalled apps.
+ * @return The set of all apps available to the app manager
+ */
+ public Set<App> getAvailableApps() {
+ return availableApps;
+ }
+
+ /**
* Return the path of the directory used to contain all apps.
* @return The path of the root directory containing all installed and
uninstalled apps.
*/
@@ -302,6 +354,30 @@
private void installAppsInDirectory(File directory) {
+ // Parse App objects from the given directory
+ Set<App> parsedApps = obtainAppsFromDirectory(directory);
+
+ // Install each app
+ for (App parsedApp : parsedApps) {
+ try {
+ installApp(parsedApp);
+ } catch (AppCopyException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ this.installedApps.addAll(parsedApps);
+
+ System.out.println("Number of apps installed from directory: "
+ parsedApps.size());
+ }
+
+ /**
+ * Obtain a set of {@link App} objects through attempting to parse
files found in the first level of the given directory.
+ * @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) {
// Obtain all files in the given directory with supported
extensions, perform a non-recursive search
Collection<File> files = FileUtils.listFiles(directory,
APP_EXTENSIONS, false);
@@ -323,18 +399,7 @@
}
}
- for (App parsedApp : parsedApps) {
- try {
- installApp(parsedApp);
- } catch (AppCopyException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- this.installedApps.addAll(parsedApps);
-
- System.out.println("Number of apps installed from directory: "
+ parsedApps.size());
+ return parsedApps;
}
/**
@@ -363,11 +428,11 @@
}
}
- public void addAppListener(AppListener appListener) {
+ public void addAppListener(AppsChangedListener appListener) {
appListeners.add(appListener);
}
- public void removeAppListener(AppListener appListener) {
+ public void removeAppListener(AppsChangedListener appListener) {
appListeners.remove(appListener);
}
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppParser.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppParser.java
2012-04-09 21:37:46 UTC (rev 28772)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppParser.java
2012-04-09 23:12:25 UTC (rev 28773)
@@ -8,6 +8,7 @@
import java.util.jar.Manifest;
import org.cytoscape.app.internal.exception.AppParsingException;
+import org.cytoscape.app.internal.manager.App.AppType;
/**
* This class represents an app parser that is capable of parsing given {@link
File}
@@ -34,14 +35,6 @@
throw new AppParsingException("Error parsing given file
as a jar file: " + e.getMessage());
}
- // Obtain the URL of the jar file
- URL jarURL = null;
- try {
- jarURL = file.toURI().toURL();
- } catch (MalformedURLException e) {
- throw new AppParsingException("Failed to obtain jar
URL: " + e.getMessage());
- }
-
// Attempt to obtain manifest file from jar
Manifest manifest = null;
try {
@@ -61,9 +54,8 @@
parsedApp.setAppFile(file);
parsedApp.setEntryClassName(entryClassName);
- parsedApp.setJarURL(jarURL);
parsedApp.setAppValidated(true);
- parsedApp.setSimpleApp(true);
+ parsedApp.setAppType(AppType.SIMPLE_APP);
return parsedApp;
}
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/CurrentlyInstalledAppsPanel.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/CurrentlyInstalledAppsPanel.java
2012-04-09 21:37:46 UTC (rev 28772)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/CurrentlyInstalledAppsPanel.java
2012-04-09 23:12:25 UTC (rev 28773)
@@ -1,9 +1,13 @@
package org.cytoscape.app.internal.swing.main;
+import java.util.HashSet;
+import java.util.Set;
+
import javax.swing.table.DefaultTableModel;
-import org.cytoscape.app.internal.event.AppEvent;
-import org.cytoscape.app.internal.event.AppListener;
+import org.cytoscape.app.internal.event.AppsChangedEvent;
+import org.cytoscape.app.internal.event.AppsChangedListener;
+import org.cytoscape.app.internal.exception.AppCopyException;
import org.cytoscape.app.internal.manager.App;
import org.cytoscape.app.internal.manager.AppManager;
@@ -21,7 +25,7 @@
private javax.swing.JLabel showTypeLabel;
private AppManager appManager;
- private AppListener appListener;
+ private AppsChangedListener appListener;
public CurrentlyInstalledAppsPanel(AppManager appManager) {
initComponents();
@@ -147,56 +151,75 @@
}
private void
enableSelectedButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
+ Set<App> selectedApps = getSelectedApps();
+
+ for (App app : selectedApps) {
+ try {
+ appManager.installApp(app);
+ } catch (AppCopyException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
}
private void
disableSelectedButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
+ Set<App> selectedApps = getSelectedApps();
+
+ for (App app : selectedApps) {
+ try {
+ appManager.uninstallApp(app);
+ } catch (AppCopyException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
}
private void showTypeComboxBoxActionPerformed(java.awt.event.ActionEvent
evt) {
// TODO add your handling code here:
}
+ private Set<App> getSelectedApps() {
+ Set<App> selectedApps = new HashSet<App>();
+ int[] selectedRows = appsAvailableTable.getSelectedRows();
+
+ for (int index = 0; index < selectedRows.length; index++) {
+ App app = (App)
appsAvailableTable.getModel().getValueAt(selectedRows[index], 0);
+
+ selectedApps.add(app);
+ }
+
+ return selectedApps;
+ }
+
+
private void setupAppListener() {
- appListener = new AppListener() {
+ appListener = new AppsChangedListener() {
@Override
- public void appInstalled(AppEvent event) {
+ public void appsChanged(AppsChangedEvent event) {
- // Prepare to add a new row containing the
app's data to the table
+ Set<App> selectedApps = getSelectedApps();
+
+ // Clear table
DefaultTableModel tableModel =
(DefaultTableModel) appsAvailableTable.getModel();
+ for (int rowIndex = tableModel.getRowCount() -
1; rowIndex >= 0; rowIndex--) {
+ tableModel.removeRow(rowIndex);
+ }
- App app = event.getApp();
- tableModel.addRow(new Object[]{
- app,
- app.getAppName(),
- app.getVersion(),
- app.getAuthors(),
- app.getDescription(),
- app.getStatus()
- });
-
+ // Re-populate table
+ populateTable();
+
+ // Update labels
updateLabels();
- }
- @Override
- public void appUninstalled(AppEvent event) {
-
- // Prepare to remove the row containing the app
from the table
- DefaultTableModel tableModel =
(DefaultTableModel) appsAvailableTable.getModel();
-
- App app = event.getApp();
- int rowToBeRemoved = -1;
+ // Re-select previously selected apps
for (int rowIndex = 0; rowIndex <
tableModel.getRowCount(); rowIndex++) {
- if (tableModel.getValueAt(rowIndex, 0)
== app) {
- rowToBeRemoved = rowIndex;
+ if
(selectedApps.contains(tableModel.getValueAt(rowIndex, 0))) {
+
appsAvailableTable.addRowSelectionInterval(rowIndex, rowIndex);
}
}
-
- tableModel.removeRow(rowToBeRemoved);
-
- updateLabels();
}
};
@@ -204,9 +227,9 @@
}
private void populateTable() {
- System.out.println("populateTable() call, installed apps: " +
appManager.getInstalledApps().size());
+ System.out.println("populateTable() call, avilable apps: " +
appManager.getAvailableApps().size());
- for (App app : appManager.getInstalledApps()) {
+ for (App app : appManager.getAvailableApps()) {
DefaultTableModel tableModel = (DefaultTableModel)
appsAvailableTable.getModel();
tableModel.addRow(new Object[]{
@@ -224,6 +247,6 @@
private void updateLabels() {
appsInstalledCountLabel.setText(String.valueOf(appManager.getInstalledApps().size()));
-
appsAvailableCountLabel.setText(String.valueOf(appManager.getInstalledApps().size()));
+
appsAvailableCountLabel.setText(String.valueOf(appManager.getAvailableApps().size()));
}
}
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/InstallNewAppsPanel.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/InstallNewAppsPanel.java
2012-04-09 21:37:46 UTC (rev 28772)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/swing/main/InstallNewAppsPanel.java
2012-04-09 23:12:25 UTC (rev 28773)
@@ -60,7 +60,7 @@
searchLabel.setText("Search for Apps from the Web Store:");
searchComboBox.setEditable(true);
- searchComboBox.setModel(new javax.swing.DefaultComboBoxModel(new
String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
+ searchComboBox.setModel(new javax.swing.DefaultComboBoxModel(new
String[] {""}));
searchButton.setText("Search");
searchButton.addActionListener(new java.awt.event.ActionListener() {
--
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.