Author: kono
Date: 2012-05-03 18:36:59 -0700 (Thu, 03 May 2012)
New Revision: 29104

Added:
   
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/AbstractExecuteScriptTask.java
   
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/ExecuteScriptCommandTask.java
   
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/command/
   
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/command/CommandCompleter.java
   
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/command/ExecuteScriptCommand.java
   core3/impl/trunk/scripting-impl/src/main/resources/
   core3/impl/trunk/scripting-impl/src/main/resources/OSGI-INF/
   core3/impl/trunk/scripting-impl/src/main/resources/OSGI-INF/blueprint/
   
core3/impl/trunk/scripting-impl/src/main/resources/OSGI-INF/blueprint/command.xml
Modified:
   core3/impl/trunk/scripting-impl/pom.xml
   
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/ExecuteScriptTask.java
   core3/impl/trunk/scripting-impl/src/test/resources/network_creation.js
Log:
Extended karaf command to run scripts from command line.

Modified: core3/impl/trunk/scripting-impl/pom.xml
===================================================================
--- core3/impl/trunk/scripting-impl/pom.xml     2012-05-04 01:35:46 UTC (rev 
29103)
+++ core3/impl/trunk/scripting-impl/pom.xml     2012-05-04 01:36:59 UTC (rev 
29104)
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
 
        <parent>
                <artifactId>impl-parent</artifactId>
@@ -15,7 +16,7 @@
        <modelVersion>4.0.0</modelVersion>
        <artifactId>scripting-impl</artifactId>
 
-    <name>Cytoscape Scripting Impl (${project.artifactId})</name>
+       <name>Cytoscape Scripting Impl (${project.artifactId})</name>
 
        <packaging>bundle</packaging>
 
@@ -86,8 +87,14 @@
                        <groupId>org.cytoscape</groupId>
                        <artifactId>app-api</artifactId>
                </dependency>
+
+               <dependency>
+                       <groupId>org.apache.karaf.shell</groupId>
+                       <artifactId>org.apache.karaf.shell.console</artifactId>
+                       <version>2.2.3</version>
+                       <scope>provided</scope>
+               </dependency>
                
-               
                <!-- Testing -->
                <dependency>
                        <groupId>junit</groupId>

Added: 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/AbstractExecuteScriptTask.java
===================================================================
--- 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/AbstractExecuteScriptTask.java
                               (rev 0)
+++ 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/AbstractExecuteScriptTask.java
       2012-05-04 01:36:59 UTC (rev 29104)
@@ -0,0 +1,49 @@
+package org.cytoscape.scripting.internal;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.script.ScriptEngineFactory;
+import javax.script.ScriptEngineManager;
+
+import org.cytoscape.app.CyAppAdapter;
+import org.cytoscape.work.Task;
+
+public abstract class AbstractExecuteScriptTask implements Task {
+
+       protected final Map<String, ScriptEngineFactory> name2engineMap;
+       protected final CyAppAdapter cyAppAdapter;
+       
+       protected final List<String> engineNameList;
+       
+       protected final ScriptEngineManager manager;
+
+       AbstractExecuteScriptTask(final ScriptEngineManager manager, final 
CyAppAdapter cyAppAdapter) {
+               this.cyAppAdapter = cyAppAdapter;
+               this.manager = manager;
+
+               this.name2engineMap = new HashMap<String, 
ScriptEngineFactory>();
+
+               final List<ScriptEngineFactory> engines = 
manager.getEngineFactories();
+               engineNameList = new ArrayList<String>();
+
+               for (final ScriptEngineFactory engine : engines) {
+                       final String langName = engine.getLanguageName();
+                       final String langVersion = engine.getLanguageVersion();
+                       final String engineName = engine.getEngineName();
+                       final String engineDescription = langName + " (" + 
engineName + ", Version " + langVersion + ")";
+                       engineNameList.add(engineDescription);
+                       name2engineMap.put(engineDescription, engine);
+               }
+
+               if (engineNameList.size() == 0)
+                       throw new IllegalStateException("No Scripting Engine is 
available.");
+       }
+
+       @Override
+       public void cancel() {
+               Thread.currentThread().interrupt();
+       }
+}

Added: 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/ExecuteScriptCommandTask.java
===================================================================
--- 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/ExecuteScriptCommandTask.java
                                (rev 0)
+++ 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/ExecuteScriptCommandTask.java
        2012-05-04 01:36:59 UTC (rev 29104)
@@ -0,0 +1,50 @@
+package org.cytoscape.scripting.internal;
+
+import java.io.File;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+
+import org.cytoscape.app.CyAppAdapter;
+import org.cytoscape.work.TaskMonitor;
+
+public class ExecuteScriptCommandTask extends AbstractExecuteScriptTask {
+
+       private final String engineName;
+       private final String filename;
+       private final List<String> args;
+
+       public ExecuteScriptCommandTask(final ScriptEngineManager manager, 
final CyAppAdapter cyAppAdapter,
+                       final String engineName, final String filename, final 
List<String> args) {
+               super(manager, cyAppAdapter);
+
+               this.engineName = engineName;
+               this.filename = filename;
+               if(args == null)
+                       this.args = new ArrayList<String>();
+               else
+                       this.args = args;
+       }
+
+       @Override
+       public void run(TaskMonitor taskMonitor) throws Exception {
+               final ScriptEngine engine = manager.getEngineByName(engineName);
+
+               // Provide access to CyAppAdapter.
+               engine.put("cyAppAdapter", cyAppAdapter);
+               
+               final String[] argArray = new String[args.size()];
+               for(int i=0; i<args.size(); i++) {
+                       System.out.println("* ARG = " + args.get(i));
+                       argArray[i] = args.get(i);
+               }
+               engine.put("args", argArray);
+               
+               // Execute
+               engine.eval(new FileReader(new File(filename)));
+       }
+
+}

Modified: 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/ExecuteScriptTask.java
===================================================================
--- 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/ExecuteScriptTask.java
       2012-05-04 01:35:46 UTC (rev 29103)
+++ 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/ExecuteScriptTask.java
       2012-05-04 01:36:59 UTC (rev 29104)
@@ -2,17 +2,12 @@
 
 import java.io.File;
 import java.io.FileReader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineFactory;
 import javax.script.ScriptEngineManager;
 
 import org.cytoscape.app.CyAppAdapter;
-import org.cytoscape.work.Task;
 import org.cytoscape.work.TaskMonitor;
 import org.cytoscape.work.Tunable;
 import org.cytoscape.work.util.ListSingleSelection;
@@ -22,7 +17,7 @@
  * Use standard Java scripting mechanism to run script.
  *
  */
-public class ExecuteScriptTask implements Task {
+public class ExecuteScriptTask extends AbstractExecuteScriptTask {
 
        @Tunable(description = "Select a script file:", params = 
"fileCategory=SCRIPT;input=true")
        public File file;
@@ -30,29 +25,10 @@
        @Tunable(description = "Select Scripting Language:")
        public ListSingleSelection<String> engineNames;
 
-       private final Map<String, ScriptEngineFactory> name2engineMap;
-       private final CyAppAdapter cyAppAdapter;
        
        ExecuteScriptTask(final ScriptEngineManager manager, final CyAppAdapter 
cyAppAdapter) {
-               this.cyAppAdapter = cyAppAdapter;
+               super(manager, cyAppAdapter);
                
-               this.name2engineMap = new HashMap<String, 
ScriptEngineFactory>();
-               
-               final List<ScriptEngineFactory> engines = 
manager.getEngineFactories();
-               final List<String> engineNameList = new ArrayList<String>();
-               
-               for(final ScriptEngineFactory engine: engines) {
-                       final String langName = engine.getEngineName();
-                       final String langVersion = engine.getLanguageVersion();
-                       final String engineName = engine.getEngineName();
-                       final String engineDescription = langName + " (" + 
engineName + ", Version " + langVersion + ")";
-                       engineNameList.add(engineDescription);
-                       name2engineMap.put(engineDescription, engine);
-               }
-               
-               if(engineNameList.size() == 0)
-                       throw new IllegalStateException("No Scripting Engine is 
available.");
-               
                engineNames = new ListSingleSelection<String>(engineNameList);
                engineNames.setSelectedValue(engineNameList.get(0));
        }
@@ -68,10 +44,4 @@
                // Execute
                engine.eval(new FileReader(file));
        }
-
-       @Override
-       public void cancel() {
-               Thread.currentThread().interrupt();
-       }
-
 }

Added: 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/command/CommandCompleter.java
===================================================================
--- 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/command/CommandCompleter.java
                                (rev 0)
+++ 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/command/CommandCompleter.java
        2012-05-04 01:36:59 UTC (rev 29104)
@@ -0,0 +1,37 @@
+package org.cytoscape.scripting.internal.command;
+
+import java.util.List;
+
+import javax.script.ScriptEngineFactory;
+import javax.script.ScriptEngineManager;
+
+import org.apache.karaf.shell.console.Completer;
+import org.apache.karaf.shell.console.completer.StringsCompleter;
+
+public class CommandCompleter implements Completer {
+
+       private ScriptEngineManager manager;
+
+       /**
+        * @param buffer
+        *            the beginning string typed by the user
+        * @param cursor
+        *            the position of the cursor
+        * @param candidates
+        *            the list of completions proposed to the user
+        */
+       public int complete(String buffer, int cursor, List candidates) {
+               StringsCompleter delegate = new StringsCompleter();
+
+               final List<ScriptEngineFactory> engines = 
manager.getEngineFactories();
+
+               for (final ScriptEngineFactory engine : engines) {
+                       final List<String> names = engine.getNames();
+                       for (final String name : names)
+                               delegate.getStrings().add(name);
+               }
+
+               return delegate.complete(buffer, cursor, candidates);
+       }
+
+}
\ No newline at end of file

Added: 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/command/ExecuteScriptCommand.java
===================================================================
--- 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/command/ExecuteScriptCommand.java
                            (rev 0)
+++ 
core3/impl/trunk/scripting-impl/src/main/java/org/cytoscape/scripting/internal/command/ExecuteScriptCommand.java
    2012-05-04 01:36:59 UTC (rev 29104)
@@ -0,0 +1,49 @@
+package org.cytoscape.scripting.internal.command;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.script.ScriptEngineManager;
+
+import org.apache.felix.gogo.commands.Argument;
+import org.apache.felix.gogo.commands.Command;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.cytoscape.app.CyAppAdapter;
+import org.cytoscape.scripting.internal.ExecuteScriptCommandTask;
+import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.TaskManager;
+
+@Command(scope = "cytoscape", name = "script", description = "Execute 
scripts", detailedDescription = "Execute script in the file.")
+public class ExecuteScriptCommand extends OsgiCommandSupport {
+
+       @Argument(index = 0, name = "engine", description = "Name of scripting 
engine", required = true, multiValued = false)
+       String engine;
+
+       @Argument(index = 1, name = "filename", description = "Script file 
name", required = true, multiValued = false)
+       String filename;
+
+       @Argument(index = 2, name = "arg", description = "Optional arguments 
for the script", required = false, multiValued = true)
+       List<String> args;
+
+       private ScriptEngineManager manager = new ScriptEngineManager();
+       private TaskManager<?, ?> taskManager;
+       private CyAppAdapter cyAppAdapter;
+
+       public void setCyAppAdapter(CyAppAdapter cyAppAdapter) {
+               this.cyAppAdapter = cyAppAdapter;
+       }
+
+       public void setTaskManager(TaskManager taskManager) {
+               this.taskManager = taskManager;
+       }
+
+       @Override
+       protected Object doExecute() throws Exception {
+               final TaskIterator taskItr = new TaskIterator(new 
ExecuteScriptCommandTask(manager, cyAppAdapter, engine,
+                               filename, args));
+
+               taskManager.execute(taskItr);
+
+               return null;
+       }
+}
\ No newline at end of file

Added: 
core3/impl/trunk/scripting-impl/src/main/resources/OSGI-INF/blueprint/command.xml
===================================================================
--- 
core3/impl/trunk/scripting-impl/src/main/resources/OSGI-INF/blueprint/command.xml
                           (rev 0)
+++ 
core3/impl/trunk/scripting-impl/src/main/resources/OSGI-INF/blueprint/command.xml
   2012-05-04 01:36:59 UTC (rev 29104)
@@ -0,0 +1,24 @@
+<blueprint default-activation="eager"
+       xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+
+       <reference id="taskManagerServiceRef" 
interface="org.cytoscape.work.TaskManager" />
+       <reference id="cyAppAdapterServiceRef" 
interface="org.cytoscape.app.CyAppAdapter" />
+
+       <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.0.0";>
+               <command name="cytoscape/script">
+                       <action
+                               
class="org.cytoscape.scripting.internal.command.ExecuteScriptCommand">
+                               <property name="taskManager" 
ref="taskManagerServiceRef" />
+                               <property name="cyAppAdapter" 
ref="cyAppAdapterServiceRef" />
+                       </action>
+                       <completers>
+                               <ref component-id="commandCompleter" />
+                               <null />
+                       </completers>
+               </command>
+       </command-bundle>
+
+       <bean id="commandCompleter"
+               
class="org.cytoscape.scripting.internal.command.CommandCompleter" />
+
+</blueprint>
\ No newline at end of file

Modified: core3/impl/trunk/scripting-impl/src/test/resources/network_creation.js
===================================================================
--- core3/impl/trunk/scripting-impl/src/test/resources/network_creation.js      
2012-05-04 01:35:46 UTC (rev 29103)
+++ core3/impl/trunk/scripting-impl/src/test/resources/network_creation.js      
2012-05-04 01:36:59 UTC (rev 29104)
@@ -1,12 +1,36 @@
 // Generate a complete graph
 
-importPackage( Packages.javax.swing );
-importPackage( Packages.org.cytoscape.app.CyAppAdapter );
-importPackage( Packages.org.cytoscape.model.CyNetwork );
+importPackage(Packages.org.cytoscape.app.CyAppAdapter);
+importPackage(Packages.org.cytoscape.model.CyNetwork);
 
+// Extract arguments
+var numberOfNodes = args[0];
+if(numberOfNodes == null)
+       numberOfNodes = 10;
+
 var newNetwork = cyAppAdapter.getCyNetworkFactory().createNetwork();
+newNetwork.getRow(newNetwork).set("name", "Complete Graph with " + 
numberOfNodes + " Nodes");
+
+// Register it to the manager
 cyAppAdapter.getCyNetworkManager().addNetwork(newNetwork);
 
 var nodes = new Array();
+for( i = 0; i < numberOfNodes; i++) {
+       var nodeName = "Node " + i;
+       var node = newNetwork.addNode();
+       newNetwork.getRow(node).set("name", nodeName);
+       nodes[i] = node;
+}
 
-println("Network registered!: ");
+var edgeCount = 0;
+for( i = 0; i < numberOfNodes; i++) {
+       var source = nodes[i];
+       for( j = 0; j < numberOfNodes; j++) {
+               var target = nodes[j];
+               if(newNetwork.containsEdge(source, target) == false && 
newNetwork.containsEdge(target, source) == false && j != i) {
+                       var edge = newNetwork.addEdge(source, target, true);
+                       newNetwork.getRow(edge).set("name", "Edge " + 
edgeCount++);
+                       newNetwork.getRow(edge).set("interaction", 
"interacts_with");
+               }
+       }
+}
\ No newline at end of file

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