Author: paperwing
Date: 2012-12-19 16:03:48 -0800 (Wed, 19 Dec 2012)
New Revision: 31023

Added:
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/__Unused__KarafArchiveApp.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/server/AddAllowOriginHeader.java
   
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/server/AddAllowOriginHeaderTest.java
Removed:
   
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/server/AddAccessControlAllowOriginHeaderAfterResponseTest.java
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/event/UpdatesChangedEvent.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppInstallException.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppUpdateException.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppDependencyNode.java
   
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/server/CyHttpRequestImpl.java
Log:
Fixed incompletely renamed file

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-12-19 22:57:53 UTC (rev 31022)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/CyActivator.java
 2012-12-20 00:03:48 UTC (rev 31023)
@@ -11,7 +11,7 @@
 import org.cytoscape.app.internal.net.server.ServerSocketFactory;
 import org.cytoscape.app.internal.net.server.LocalhostServerSocketFactory;
 import org.cytoscape.app.internal.net.server.ScreenOriginsBeforeResponse;
-import 
org.cytoscape.app.internal.net.server.AddAccessControlAllowOriginHeaderAfterResponse;
+import org.cytoscape.app.internal.net.server.AddAllowOriginHeader;
 import org.cytoscape.app.internal.net.server.OriginOptionsBeforeResponse;
 import org.cytoscape.app.internal.ui.downloadsites.DownloadSite;
 import org.cytoscape.app.internal.ui.downloadsites.DownloadSitesManager;
@@ -384,7 +384,7 @@
         final CyHttpd httpd = (new CyHttpdFactoryImpl()).createHttpd(new 
LocalhostServerSocketFactory(2607));
         httpd.addBeforeResponse(new 
ScreenOriginsBeforeResponse(WebQuerier.DEFAULT_APP_STORE_URL));
         httpd.addBeforeResponse(new 
OriginOptionsBeforeResponse("x-csrftoken"));
-        httpd.addAfterResponse(new 
AddAccessControlAllowOriginHeaderAfterResponse());
+        httpd.addAfterResponse(new AddAllowOriginHeader());
         httpd.addResponder(appGetResponder.new StatusResponder());
         httpd.addResponder(appGetResponder.new InstallResponder());
         httpd.start();

Modified: 
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
   2012-12-19 22:57:53 UTC (rev 31022)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/event/UpdatesChangedEvent.java
   2012-12-20 00:03:48 UTC (rev 31023)
@@ -8,7 +8,7 @@
  * update their data to reflect the change.
  */
 public final class UpdatesChangedEvent {
-
+       
        /** The {@link UpdateManager} that created the event. */
        private UpdateManager source;
 

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppInstallException.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppInstallException.java
       2012-12-19 22:57:53 UTC (rev 31022)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppInstallException.java
       2012-12-20 00:03:48 UTC (rev 31023)
@@ -1,5 +1,8 @@
 package org.cytoscape.app.internal.exception;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  * An exception thrown signal errors found while attempting to install an app.
  */
@@ -7,8 +10,12 @@
 
        private static final long serialVersionUID = 5799194018659112606L;
 
+       private static final Logger logger = 
LoggerFactory.getLogger(AppInstallException.class);
+       
        public AppInstallException(String message) {
                super(message);
+               
+               logger.info(message);
        }
        
        public AppInstallException(String message, Throwable cause) {

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppUpdateException.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppUpdateException.java
        2012-12-19 22:57:53 UTC (rev 31022)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/exception/AppUpdateException.java
        2012-12-20 00:03:48 UTC (rev 31023)
@@ -1,15 +1,22 @@
 package org.cytoscape.app.internal.exception;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  * An exception thrown to signal errors found while attempting to perform 
  * an update on an app
  */
 public class AppUpdateException extends Exception {
 
+       private static final Logger logger = 
LoggerFactory.getLogger(AppUpdateException.class);
+       
        private static final long serialVersionUID = 4741554087496424850L;
 
        public AppUpdateException(String message) {
                super(message);
+               
+               logger.info(message);
        }
        
        public AppUpdateException(String message, Throwable cause) {

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppDependencyNode.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppDependencyNode.java
   2012-12-19 22:57:53 UTC (rev 31022)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/AppDependencyNode.java
   2012-12-20 00:03:48 UTC (rev 31023)
@@ -8,6 +8,9 @@
 import java.util.Queue;
 import java.util.Set;
 
+import org.cytoscape.app.internal.manager.App.AppStatus;
+
+// This class represents a node in the app dependency graph, where each node 
corresponds to an app.
 public class AppDependencyNode {
        
        private Set<AppDependencyNode> dependencies = new 
HashSet<AppDependencyNode>();
@@ -16,17 +19,20 @@
        private String currentAppName;
        private String currentAppVersion;
        
-       private App currentApp;
        
        public AppDependencyNode(String appName, String appVersion) {
                this.currentAppName = appName;
                this.currentAppVersion = appVersion;
        }
        
-       public void setCurrentApp(App app) {
-               this.currentApp = app;
+       public String getNodeAppName() {
+               return currentAppName;
        }
        
+       public String getNodeAppVersion() {
+               return currentAppVersion;
+       }
+       
        public Set<AppDependencyNode> getDependencies() { return dependencies; }
        public Set<AppDependencyNode> getParents() { return parents; }
        
@@ -45,7 +51,7 @@
                Map<String, App> currentApps = new HashMap<String, App>();
                
                for (App app : appManager.getApps()) {
-//                     currentApps.put(app.getAppName() + " " + app.get)
+                       currentApps.put(app.getAppName() + " " + 
app.getVersion(), app);
                }
                
                Queue<AppDependencyNode> dependenciesToCheck = new 
LinkedList<AppDependencyNode>();
@@ -54,6 +60,10 @@
                        dependenciesToCheck.add(node);  
                }
                
+               List<String> missingDependencies = new LinkedList<String>();
+               
+               // To check if a dependency is missing, check if it was hashed 
into the hash table from
+               // a few lines above
                while (!dependenciesToCheck.isEmpty()) {
                        AppDependencyNode current = 
dependenciesToCheck.remove();
                        
@@ -63,11 +73,16 @@
                                }
                        } else {
                                // Leaf
-//                             AppManager appManager;
-//                             if (appManager.getApps())
+                               String keyName = current.getNodeAppName() + " " 
+ current.getNodeAppVersion();
+                               
+                               if (currentApps.get(keyName) == null
+                                               || 
currentApps.get(keyName).getStatus() != AppStatus.INSTALLED) {
+
+                                       missingDependencies.add(keyName);
+                               }
                        }
                }
                
-               return null;
+               return missingDependencies;
        }
 }

Added: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/__Unused__KarafArchiveApp.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/__Unused__KarafArchiveApp.java
                           (rev 0)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/manager/__Unused__KarafArchiveApp.java
   2012-12-20 00:03:48 UTC (rev 31023)
@@ -0,0 +1,208 @@
+package org.cytoscape.app.internal.manager;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.io.FileExistsException;
+import org.apache.commons.io.FileUtils;
+import org.cytoscape.app.internal.exception.AppDisableException;
+import org.cytoscape.app.internal.exception.AppInstallException;
+import org.cytoscape.app.internal.exception.AppInstanceException;
+import org.cytoscape.app.internal.exception.AppUninstallException;
+import org.cytoscape.app.swing.CySwingAppAdapter;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+
+public class __Unused__KarafArchiveApp extends App {   
+       
+       /**
+        * Karaf feature information used to install/uninstall a bundle app, 
+        * which consists of Karaf features.
+        */
+       
+       public static class KarafFeature {
+               public String featureName;
+               public String featureVersion;
+       }
+       
+       private Map<String, KarafFeature> featuresSet;
+       
+       public __Unused__KarafArchiveApp() {
+               super();
+               
+               this.featuresSet = new HashMap<String, KarafFeature>();
+       }
+       
+       
+       
+       @Override
+       public Object createAppInstance(CySwingAppAdapter appAdapter)
+                       throws AppInstanceException {
+               
+               BundleContext bundleContext = null;
+               Bundle bundle = null;
+               try {
+                       bundle = 
bundleContext.installBundle(this.getAppTemporaryInstallFile().toURI().toURL().toString());
+               } catch (MalformedURLException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               } catch (BundleException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
+               
+               return bundle;
+       }
+
+       
+       @Override
+       public void install(AppManager appManager) throws AppInstallException {
+               /*
+               
+               // Check if we already have an app object representing this app 
registered to the app manager
+               for (App app : appManager.getApps()) {
+                       if (this.heuristicEquals(app) && this != app) {
+                               
+                               app.setAppFile(this.getAppFile());
+                               app.install(appManager);
+                               
+                               return;
+                       }
+               }
+               
+               File appFile = this.getAppFile();
+               
+               try {
+                       if (appFile != null 
+                                       && 
!appFile.getParentFile().getCanonicalPath().equals(appManager.getInstalledAppsPath()))
 {
+                               
+                               FileUtils.copyFileToDirectory(appFile, new 
File(appManager.getInstalledAppsPath()));
+                               
+                               if 
(appFile.getParentFile().getCanonicalPath().equalsIgnoreCase(
+                                               
appManager.getUninstalledAppsPath())) {
+                                       appFile.delete();
+                               }
+                               
+                               this.setAppFile(new 
File(appManager.getInstalledAppsPath() + File.separator + appFile.getName()));
+                       }
+               } catch (IOException e) {
+                       throw new AppInstallException("Failed to copy bundle 
app to local storage directory for installed apps");
+               }
+               
+               // Prepare to copy to Karaf deploy directory
+               String karafDeployDirectory = 
appManager.getKarafDeployDirectory();
+               
+               try {
+                       
+                       // Copy if not already in Karaf deploy directory 
+                       File karafTargetFile = new File(karafDeployDirectory + 
File.separator + this.getAppFile().getName());
+                       if (!karafTargetFile.exists()) {
+                               FileUtils.copyFile(this.getAppFile(), 
karafTargetFile);
+                       }
+                       
+                       this.setAppTemporaryInstallFile(karafTargetFile);
+                       
+               } catch (IOException e) {
+                       throw new AppInstallException("Failed to copy bundle 
app to Karaf deploy directory");
+               }
+               
+               // Check if the features were installed
+               FeaturesService featuresService = 
appManager.getFeaturesService();
+               List<Feature> installedFeatures = 
getCorrespondingFeatures(featuresService); 
+               
+               //System.out.println("features from app: " + 
featuresSet.size());
+               //System.out.println("available features: " + 
featuresService.listFeatures().length);
+               
+               if (!appManager.getApps().contains(this)) {
+                       appManager.getApps().add(this);
+               }
+               
+               this.setStatus(AppStatus.INSTALLED);
+               
+               */
+       }
+
+// Ticket 1554: FeaturesService is not API so we shouldn't use it.  Disabled 
for now.
+//     private List<Feature> getCorrespondingFeatures(FeaturesService 
featuresService) {
+//             List<Feature> correspondingFeatures = new LinkedList<Feature>();
+//             
+//             Feature[] availableFeatures = new Feature[]{};
+//             try {
+//                     availableFeatures = featuresService.listFeatures();
+//             } catch (Exception e) {
+//                     e.printStackTrace();
+//             }
+//             
+//             for (int i = 0; i < availableFeatures.length; i++) {
+//                     Feature availableFeature = availableFeatures[i];
+//                     
+//                     KarafArchiveApp.KarafFeature appFeature = 
featuresSet.get(availableFeature.getName());
+//                     
+//                     // System.out.println("available feature: " + 
availableFeature.getName() + ", " + availableFeature.getVersion());
+//                     
+//                     if (appFeature != null
+//                                     && 
appFeature.featureVersion.equalsIgnoreCase(availableFeature.getVersion())) {
+//                             correspondingFeatures.add(availableFeature);
+//                             
+//                             // System.out.println("feature match: " + 
availableFeature.getName() + " vs " + appFeature.featureName);
+//                     }
+//             }
+//             
+//             return correspondingFeatures;
+//     }
+       
+       @Override
+       public void uninstall(AppManager appManager) throws 
AppUninstallException {
+               
+               // Use the default uninstallation procedure consisting of 
moving the app file
+               // to the uninstalled apps directory
+               // defaultUninstall(appManager);
+               
+               try {
+                       File uninstallDirectoryTargetFile = new 
File(appManager.getUninstalledAppsPath() + File.separator + 
getAppFile().getName());
+                       
+                       if (uninstallDirectoryTargetFile.exists()) {
+                               uninstallDirectoryTargetFile.delete();
+                       }
+                       
+                       try {
+                               FileUtils.moveFile(getAppFile(), 
uninstallDirectoryTargetFile);
+                       } catch (FileExistsException e) {
+                       }
+                       
+                       this.setAppFile(uninstallDirectoryTargetFile);
+               } catch (IOException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+                       
+                       throw new AppUninstallException("Unable to move app 
file to uninstalled apps directory: " + e.getMessage());
+               }
+               
+               this.getAppTemporaryInstallFile().delete();
+               
+               this.setStatus(AppStatus.UNINSTALLED);
+       }
+
+       @Override
+       public void disable(AppManager appManager) throws AppDisableException {
+               // TODO Auto-generated method stub
+               
+       }
+       
+       /**
+        * Return the list of karaf features.
+        * @return The list of karaf features
+        */
+       public Map<String, KarafFeature> getFeaturesList() {
+               return featuresSet;
+       }
+       
+       public void setFeaturesList(Map<String, KarafFeature> featuresSet) {
+               this.featuresSet = featuresSet;
+       }
+
+}

Added: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/server/AddAllowOriginHeader.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/server/AddAllowOriginHeader.java
                             (rev 0)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/server/AddAllowOriginHeader.java
     2012-12-20 00:03:48 UTC (rev 31023)
@@ -0,0 +1,16 @@
+package org.cytoscape.app.internal.net.server;
+
+/**
+ * Adds the {@code Access-Control-Allow-Origin} http header to responses.
+ */
+public class AddAllowOriginHeader implements CyHttpAfterResponse
+{
+    static final CyHttpResponseFactory responseFactory = new 
CyHttpResponseFactoryImpl();
+
+    public CyHttpResponse intercept(CyHttpRequest request, CyHttpResponse 
response)
+    {
+        final String origin = request.getHeaders().get("Origin");
+        response.getHeaders().put("Access-Control-Allow-Origin", (origin == 
null ? "*" : origin));
+        return response;
+    }
+}

Modified: 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/server/CyHttpRequestImpl.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/server/CyHttpRequestImpl.java
        2012-12-19 22:57:53 UTC (rev 31022)
+++ 
core3/impl/trunk/app-impl/src/main/java/org/cytoscape/app/internal/net/server/CyHttpRequestImpl.java
        2012-12-20 00:03:48 UTC (rev 31023)
@@ -33,7 +33,7 @@
         }
         catch (UnsupportedEncodingException e)
         {
-            throw new IllegalArgumentException("Unable to parse uri: " + 
uriEncoded, e);
+            throw new IllegalArgumentException("Unable to parse URI: " + 
uriEncoded, e);
         }
 
         method = request.getRequestLine().getMethod().toUpperCase();

Deleted: 
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/server/AddAccessControlAllowOriginHeaderAfterResponseTest.java
===================================================================
--- 
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/server/AddAccessControlAllowOriginHeaderAfterResponseTest.java
       2012-12-19 22:57:53 UTC (rev 31022)
+++ 
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/server/AddAccessControlAllowOriginHeaderAfterResponseTest.java
       2012-12-20 00:03:48 UTC (rev 31023)
@@ -1,79 +0,0 @@
-package org.cytoscape.app.internal.net.server;
-
-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;
-import org.mockito.MockitoAnnotations;
-
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-import org.apache.http.HttpStatus;
-
-import java.net.URL;
-import java.net.HttpURLConnection;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-public class AddAccessControlAllowOriginHeaderAfterResponseTest {
-       @Test
-       public void testAddAccessControlAllowOriginHeader() throws Exception
-    {
-        final CyHttpd httpd = (new CyHttpdFactoryImpl()).createHttpd(new 
LocalhostServerSocketFactory(2611));
-        final CyHttpResponseFactory responseFactory = new 
CyHttpResponseFactoryImpl();
-        httpd.addResponder(new CyHttpResponder()
-        {
-            public Pattern getURIPattern()
-            {
-                return Pattern.compile("^/test$");
-            }
-
-            public CyHttpResponse respond(CyHttpRequest request, Matcher 
matchedURI)
-            {
-                return responseFactory.createHttpResponse(HttpStatus.SC_OK, 
"test response ok", "text/html");
-            }
-        });
-        httpd.addAfterResponse(new 
AddAccessControlAllowOriginHeaderAfterResponse());
-        httpd.start();
-
-        HttpURLConnection connection = null;
-        final String url = "http://localhost:2611/test";;
-
-        connection = connectToURL(url, "GET");
-        assertTrue(connection.getResponseCode() == HttpURLConnection.HTTP_OK);
-        assertEquals(connection.getHeaderField("Access-Control-Allow-Origin"), 
"*");
-        assertEquals(readConnection(connection), "test response ok");
-
-        httpd.stop();
-       }
-
-    private static HttpURLConnection connectToURL(String urlString, String 
method) throws Exception
-    {
-        final URL url = new URL(urlString);
-        final HttpURLConnection connection = (HttpURLConnection) 
url.openConnection();
-        connection.setRequestMethod(method);
-        connection.setDoOutput(true);
-        connection.setConnectTimeout(1000);
-        connection.connect();
-        return connection;
-    }
-
-    private static String readConnection(HttpURLConnection connection) throws 
Exception
-    {
-        final StringBuffer buffer = new StringBuffer();
-        final BufferedReader reader = new BufferedReader(new 
InputStreamReader(connection.getInputStream()));
-        while (true)
-        {
-            final String line = reader.readLine();
-            if (line == null)
-                break;
-            buffer.append(line);
-        }
-
-        return buffer.toString();
-    }
-}

Copied: 
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/server/AddAllowOriginHeaderTest.java
 (from rev 31021, 
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/server/AddAccessControlAllowOriginHeaderAfterResponseTest.java)
===================================================================
--- 
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/server/AddAllowOriginHeaderTest.java
                         (rev 0)
+++ 
core3/impl/trunk/app-impl/src/test/java/org/cytoscape/app/internal/net/server/AddAllowOriginHeaderTest.java
 2012-12-20 00:03:48 UTC (rev 31023)
@@ -0,0 +1,79 @@
+package org.cytoscape.app.internal.net.server;
+
+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;
+import org.mockito.MockitoAnnotations;
+
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
+import org.apache.http.HttpStatus;
+
+import java.net.URL;
+import java.net.HttpURLConnection;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+public class AddAccessControlAllowOriginHeaderAfterResponseTest {
+       @Test
+       public void testAddAccessControlAllowOriginHeader() throws Exception
+    {
+        final CyHttpd httpd = (new CyHttpdFactoryImpl()).createHttpd(new 
LocalhostServerSocketFactory(2611));
+        final CyHttpResponseFactory responseFactory = new 
CyHttpResponseFactoryImpl();
+        httpd.addResponder(new CyHttpResponder()
+        {
+            public Pattern getURIPattern()
+            {
+                return Pattern.compile("^/test$");
+            }
+
+            public CyHttpResponse respond(CyHttpRequest request, Matcher 
matchedURI)
+            {
+                return responseFactory.createHttpResponse(HttpStatus.SC_OK, 
"test response ok", "text/html");
+            }
+        });
+        httpd.addAfterResponse(new AddAllowOriginHeader());
+        httpd.start();
+
+        HttpURLConnection connection = null;
+        final String url = "http://localhost:2611/test";;
+
+        connection = connectToURL(url, "GET");
+        assertTrue(connection.getResponseCode() == HttpURLConnection.HTTP_OK);
+        assertEquals(connection.getHeaderField("Access-Control-Allow-Origin"), 
"*");
+        assertEquals(readConnection(connection), "test response ok");
+
+        httpd.stop();
+       }
+
+    private static HttpURLConnection connectToURL(String urlString, String 
method) throws Exception
+    {
+        final URL url = new URL(urlString);
+        final HttpURLConnection connection = (HttpURLConnection) 
url.openConnection();
+        connection.setRequestMethod(method);
+        connection.setDoOutput(true);
+        connection.setConnectTimeout(1000);
+        connection.connect();
+        return connection;
+    }
+
+    private static String readConnection(HttpURLConnection connection) throws 
Exception
+    {
+        final StringBuffer buffer = new StringBuffer();
+        final BufferedReader reader = new BufferedReader(new 
InputStreamReader(connection.getInputStream()));
+        while (true)
+        {
+            final String line = reader.readLine();
+            if (line == null)
+                break;
+            buffer.append(line);
+        }
+
+        return buffer.toString();
+    }
+}

-- 
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