Author: paperwing
Date: 2012-05-15 12:46:01 -0700 (Tue, 15 May 2012)
New Revision: 29268
Added:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppDownloadException.java
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/pom.xml
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyAppAdapterImpl.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.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/net/WebApp.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/ui/AppManagerDialog.java
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/ui/InstallFromStorePanel.java
Log:
App Manager window now resizes properly, pom file updated, added methods for
downloading a file from a given URL
Modified: csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/pom.xml
===================================================================
--- csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/pom.xml
2012-05-15 15:24:12 UTC (rev 29267)
+++ csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/pom.xml
2012-05-15 19:46:01 UTC (rev 29268)
@@ -4,7 +4,7 @@
<parent>
<artifactId>impl-parent</artifactId>
<groupId>org.cytoscape</groupId>
- <version>3.0.0-alpha8-SNAPSHOT</version>
+ <version>3.0.0-alpha9-SNAPSHOT</version>
</parent>
<properties>
@@ -19,7 +19,6 @@
<packaging>bundle</packaging>
-
<build>
<resources>
<resource>
@@ -108,7 +107,6 @@
<dependency>
<groupId>org.cytoscape</groupId>
<artifactId>swing-app-api</artifactId>
- <version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.cytoscape</groupId>
@@ -211,7 +209,6 @@
<dependency>
<groupId>org.cytoscape</groupId>
<artifactId>swing-app-api</artifactId>
- <version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyAppAdapterImpl.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyAppAdapterImpl.java
2012-05-15 15:24:12 UTC (rev 29267)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/CyAppAdapterImpl.java
2012-05-15 19:46:01 UTC (rev 29268)
@@ -523,6 +523,7 @@
public PanelTaskManager getPanelTaskManager() { return
panelTaskManager; }
public PresentationWriterManager getPresentationWriterManager() {
return presentationWriterManager; }
public RenderingEngineManager getRenderingEngineManager() { return
renderingEngineManager; }
+ public StreamUtil getStreamUtil(){ return streamUtil;}
public TaskManager getTaskManager() { return taskManager; }
public UndoSupport getUndoSupport() { return undoSupport; }
@Override public VisualMappingFunctionFactory
getVisualMappingFunctionContinuousFactory() { return
visualMappingFunctionContinuousFactory; }
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
2012-05-15 15:24:12 UTC (rev 29267)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/action/AppManagerAction.java
2012-05-15 19:46:01 UTC (rev 29268)
@@ -65,7 +65,7 @@
public void actionPerformed(ActionEvent event) {
// Create and display the App Manager dialog
- AppManagerDialog appManagerDialog = new
AppManagerDialog(appManager, fileUtil, taskManager,
swingApplication.getJFrame(), false);
+ AppManagerDialog appManagerDialog = new
AppManagerDialog(appManager, fileUtil, taskManager,
swingApplication.getJFrame(), true);
}
}
Added:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppDownloadException.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppDownloadException.java
(rev 0)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppDownloadException.java
2012-05-15 19:46:01 UTC (rev 29268)
@@ -0,0 +1,17 @@
+package org.cytoscape.app.internal.exception;
+
+/**
+ * An exception thrown upon an error while downloading an app from the app
store.
+ */
+public class AppDownloadException extends Exception {
+
+ private static final long serialVersionUID = -2921939673167550359L;
+
+ public AppDownloadException(String message) {
+ super(message);
+ }
+
+ public AppDownloadException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
Property changes on:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppDownloadException.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/AppManager.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
2012-05-15 15:24:12 UTC (rev 29267)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppManager.java
2012-05-15 19:46:01 UTC (rev 29268)
@@ -36,6 +36,9 @@
/** Uninstalled apps are copied to this subdirectory under the local
app storage directory. */
private static final String UNINSTALLED_APPS_DIRECTORY_NAME =
"uninstalled";
+ /** Apps are downloaded from the web store to this subdirectory under
local app storage directory. */
+ private static final String DOWNLOADED_APPS_DIRECTORY_NAME =
"download-temp";
+
/** This subdirectory in the local Cytoscape storage directory is used
to store app data, as
* well as installed and uninstalled apps. */
private static final String APPS_DIRECTORY_NAME = "3.0/apps";
@@ -222,6 +225,21 @@
}
}
+ /**
+ * Return the canonical path of the subdirectory in the local storage
directory used to temporarily store
+ * apps downloaded from the app store.
+ * @return The canonical path of the subdirectory in the local storage
directory temporarily
+ * storing apps downloaded from the app store.
+ */
+ public String getDownloadedAppsPath() {
+ try {
+ return getBaseAppPath().getCanonicalPath() +
File.separator + DOWNLOADED_APPS_DIRECTORY_NAME;
+ } catch (IOException e) {
+ // TODO: Record in logger
+ return null;
+ }
+ }
+
private void installAppsInDirectory(File directory) {
// Parse App objects from the given directory
@@ -286,6 +304,11 @@
created = created && uninstalledDirectory.mkdir();
}
+ File downloadedDirectory = new File(getDownloadedAppsPath());
+ if (!downloadedDirectory.exists()) {
+ created = created && downloadedDirectory.mkdir();
+ }
+
if (!created) {
throw new RuntimeException("Failed to create local app
storage directories.");
}
@@ -299,6 +322,9 @@
appListeners.remove(appListener);
}
+ /**
+ * Install apps from the local storage directory containing previously
installed apps.
+ */
public void installAppsFromDirectory() {
installAppsInDirectory(new File(getInstalledAppsPath()));
}
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/net/WebApp.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/net/WebApp.java
2012-05-15 15:24:12 UTC (rev 29267)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/net/WebApp.java
2012-05-15 19:46:01 UTC (rev 29268)
@@ -3,6 +3,8 @@
import java.util.HashSet;
import java.util.Set;
+import javax.swing.ImageIcon;
+
import org.cytoscape.app.internal.net.WebQuerier.AppTag;
/**
@@ -37,6 +39,8 @@
/** The version of Cytoscape that this app has been known to be
compatible with */
private String compatibleCytoscapeVersion;
+ private ImageIcon imageIcon;
+
public WebApp() {
appTags = new HashSet<AppTag>();
}
@@ -97,6 +101,10 @@
return appTags;
}
+ public ImageIcon getImageIcon() {
+ return imageIcon;
+ }
+
/**
* Obtain the download count for this app that was obtained from the
app store website
* @return The download count for this app
@@ -149,6 +157,10 @@
this.compatibleCytoscapeVersion = compatibleCytoscapeVersion;
}
+ public void setImageIcon(ImageIcon imageIcon) {
+ this.imageIcon = imageIcon;
+ }
+
@Override
public String toString() {
return fullName;
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
2012-05-15 15:24:12 UTC (rev 29267)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/net/WebQuerier.java
2012-05-15 19:46:01 UTC (rev 29268)
@@ -1,16 +1,23 @@
package org.cytoscape.app.internal.net;
+import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import javax.swing.ImageIcon;
+
import org.apache.commons.io.IOUtils;
+import org.cytoscape.app.internal.exception.AppDownloadException;
import org.cytoscape.io.util.StreamUtil;
import org.json.JSONArray;
import org.json.JSONException;
@@ -128,6 +135,10 @@
return result;
}
+ public String getAppStoreUrl() {
+ return APP_STORE_URL;
+ }
+
/**
* Return the set of all tag names found on the app store.
* @return The set of all available tag names
@@ -147,6 +158,7 @@
}
System.out.println("Obtaining apps from app store..");
+ String iconUrlPrefix = APP_STORE_URL.substring(0,
APP_STORE_URL.length() - 1);
Set<WebApp> result = new HashSet<WebApp>();
@@ -168,6 +180,8 @@
webApp.setDescription(jsonObject.get("description").toString());
webApp.setIconUrl(jsonObject.get("icon_url").toString());
webApp.setDownloadCount(jsonObject.getInt("downloads"));
+ // System.out.println("Obtaining ImageIcon: " +
iconUrlPrefix + webApp.getIconUrl());
+ // webApp.setImageIcon(new ImageIcon(new
URL(iconUrlPrefix + webApp.getIconUrl())));
webApp.setAppStoreUrl(APP_STORE_URL + "apps/" +
webApp.getName());
// Obtain tags associated with this app
@@ -249,6 +263,72 @@
return "";
}
+ /**
+ * Given the unique app name used by the app store, query the app store
for the
+ * download URL and download the app to the given directory.
+ *
+ * If a file with the same name exists in the directory, it is
overwritten.
+ *
+ * @param appName The unique app name used by the app store
+ */
+ public void downloadApp(String appName, File directory) throws
AppDownloadException {
+ Set<WebApp> apps = getAllApps();
+
+ boolean appFound = false;
+ for (WebApp webApp : apps) {
+ if (webApp.getName().equalsIgnoreCase(appName)) {
+ appFound = true;
+ break;
+ }
+ }
+
+ if (appFound) {
+ String jsonResult;
+ try {
+ jsonResult = query(APP_STORE_URL + "apps/" +
appName);
+
+ // System.out.println(jsonResult);
+
+ JSONObject jsonObject = new
JSONObject(jsonResult);
+
+ JSONArray releases =
jsonObject.getJSONArray("releases");
+
+ System.out.println("Releases for " + appName +
": " + releases.length());
+
+ for (int index = 0; index < releases.length();
index++) {
+ JSONObject release =
releases.getJSONObject(index);
+ }
+
+ String url =
"http://apps.cytoscape.org/media/releases/CyTestSimpleApp1.jar";
+
+ URL downloadUrl = new URL(url);
+
+ ReadableByteChannel readableByteChannel =
Channels.newChannel(downloadUrl.openStream());
+
+ File outputFile = new
File(directory.getCanonicalPath() + File.separator + "CyTestSimpleApp1d.jar");
+
+ if (outputFile.exists()) {
+ outputFile.delete();
+ }
+
+ outputFile.createNewFile();
+
+ FileOutputStream fileOutputStream = new
FileOutputStream(outputFile);
+
fileOutputStream.getChannel().transferFrom(readableByteChannel, 0, 1 << 24);
+
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (JSONException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ } else {
+ System.out.println("No app with name " + appName + "
found.");
+ }
+ }
+
public Set<WebApp> getAppsByTag(String tagName) {
// Query for apps (which includes tag information) if not done
so
Set<WebApp> webApps = getAllApps();
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/ui/AppManagerDialog.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/ui/AppManagerDialog.java
2012-05-15 15:24:12 UTC (rev 29267)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/ui/AppManagerDialog.java
2012-05-15 19:46:01 UTC (rev 29268)
@@ -31,7 +31,39 @@
}
private void initComponents() {
+ mainTabbedPane = new javax.swing.JTabbedPane();
+ installNewAppsPanel1 = new InstallFromStorePanel(appManager, fileUtil,
taskManager, this);
+ currentlyInstalledAppsPanel1 = new
CurrentlyInstalledAppsPanel(appManager);
+ checkForUpdatesPanel1 = new CheckForUpdatesPanel();
+ setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
+
+ mainTabbedPane.addTab("Install from App Store", installNewAppsPanel1);
+ mainTabbedPane.addTab("Currently Installed",
currentlyInstalledAppsPanel1);
+ mainTabbedPane.addTab("Check for Updates", checkForUpdatesPanel1);
+
+ javax.swing.GroupLayout layout = new
javax.swing.GroupLayout(getContentPane());
+ getContentPane().setLayout(layout);
+ layout.setHorizontalGroup(
+
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(mainTabbedPane,
javax.swing.GroupLayout.DEFAULT_SIZE, 640, Short.MAX_VALUE)
+ .addContainerGap())
+ );
+ layout.setVerticalGroup(
+
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(mainTabbedPane,
javax.swing.GroupLayout.DEFAULT_SIZE, 490, Short.MAX_VALUE)
+ .addContainerGap())
+ );
+
+ pack();
+
+ /*
+ // Older code generated from NetBeans using an external Swing
extension library to generate the layout
+
mainTabbedPane = new javax.swing.JTabbedPane();
installNewAppsPanel1 = new InstallFromStorePanel(appManager, fileUtil,
taskManager, this);
currentlyInstalledAppsPanel1 = new
CurrentlyInstalledAppsPanel(appManager);
@@ -61,5 +93,6 @@
);
pack();
+ */
}
}
Modified:
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/ui/InstallFromStorePanel.java
===================================================================
---
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/ui/InstallFromStorePanel.java
2012-05-15 15:24:12 UTC (rev 29267)
+++
csplugins/trunk/toronto/yuedong/app_manager/impl/app-impl/src/main/java/org/cytoscape/app/internal/ui/InstallFromStorePanel.java
2012-05-15 19:46:01 UTC (rev 29268)
@@ -1,5 +1,6 @@
package org.cytoscape.app.internal.ui;
+import java.awt.Component;
import java.awt.Container;
import java.awt.Desktop;
import java.awt.Font;
@@ -19,6 +20,7 @@
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
+import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.HyperlinkEvent;
@@ -30,9 +32,11 @@
import javax.swing.event.TreeSelectionListener;
import javax.swing.text.html.HTMLDocument;
import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
+import org.cytoscape.app.internal.exception.AppDownloadException;
import org.cytoscape.app.internal.exception.AppParsingException;
import org.cytoscape.app.internal.manager.App;
import org.cytoscape.app.internal.manager.AppManager;
@@ -285,6 +289,14 @@
}
}
}
+
+ /**
+ * Attempts to insert newlines into a given string such that each line has
no
+ * more than the specified number of characters.
+ */
+ private String splitIntoLines(String text, int charsPerLine) {
+ return null;
+ }
private void setupTextFieldListener() {
filterTextField.getDocument().addDocumentListener(new
DocumentListener() {
@@ -329,7 +341,18 @@
}
private void
installSelectedButtonActionPerformed(java.awt.event.ActionEvent evt) {
- // TODO add your handling code here:
+ Set<WebApp> selectedApps = getSelectedApps();
+ WebQuerier webQuerier = appManager.getWebQuerier();
+
+ for (WebApp webApp : selectedApps) {
+ try {
+ System.out.println("Download path: " +
appManager.getDownloadedAppsPath());
+ webQuerier.downloadApp(webApp.getName(), new
File(appManager.getDownloadedAppsPath()));
+ } catch (AppDownloadException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
}
private void resetButtonActionPerformed(java.awt.event.ActionEvent evt) {
@@ -420,7 +443,9 @@
DefaultMutableTreeNode tagNode = new
DefaultMutableTreeNode(appTag.getFullName() + " (" + associatedApps.size() +
")");
for (WebApp webApp : associatedApps) {
- tagNode.add(new DefaultMutableTreeNode(webApp));
+ DefaultMutableTreeNode appNode = new
DefaultMutableTreeNode(webApp);
+
+ tagNode.add(appNode);
}
root.add(tagNode);
@@ -432,6 +457,28 @@
for (int index = resultsTree.getRowCount() - 1; index >= 0; index--) {
resultsTree.expandRow(index);
}
+
+ /*
+ resultsTree.setCellRenderer(new DefaultTreeCellRenderer() {
+ private static final long serialVersionUID =
-2593107773334586019L;
+
+ @Override
+ public Component getTreeCellRendererComponent(JTree tree,
Object value, boolean sel,
+ boolean expanded, boolean leaf, int row,
boolean hasFocus) {
+
+ super.getTreeCellRendererComponent(tree, value, sel,
expanded, leaf, row, hasFocus);
+
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode)
value;
+
+ if (node.getUserObject() instanceof WebApp) {
+ setIcon(((WebApp)
node.getUserObject()).getImageIcon());
+ }
+
+ return this;
+ }
+ });
+ */
+ // resultsTree.setRowHeight(0);
}
/**
@@ -501,7 +548,6 @@
// Adds tag information to the set of available apps
private void addTagInformation() {
-
}
private void updateDescriptionBox() {
@@ -514,7 +560,7 @@
"<p style=\"margin-top: 0\"> App information is
displayed here. </p> </body> </html> ");
descriptionTextPane.setText("");
// If a single app is selected, show its app description
- } else if (numSelected == 1){
+ } else if (numSelected == 1) {
WebApp selectedApp = selectedApps.iterator().next();
String text = "<html><b>" + selectedApp.getFullName() +
"</b></html>";
@@ -528,7 +574,7 @@
text += "<p style=\"margin-top: 0\"> <a href=\"" +
selectedApp.getAppStoreUrl() + "\">" + selectedApp.getAppStoreUrl() + "</a>
</p>";
// App image
- // text += "<img src=\"" + selectedApp.getIconUrl() + "\"
alt=\"" + selectedApp.getFullName() + "\"/>";
+ // text += "<img border=\"0\" src=\"" +
appManager.getWebQuerier().getAppStoreUrl() + selectedApp.getIconUrl() + "\"
alt=\"" + selectedApp.getFullName() + "\"/>";
// App name
text += "<p> <b>" + selectedApp.getFullName() + "</b> </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.