2 |
26 Feb 07 |
jari |
1 |
/* |
2 |
26 Feb 07 |
jari |
Copyright @ 1999-2004, The Institute for Genomic Research (TIGR). |
2 |
26 Feb 07 |
jari |
All rights reserved. |
2 |
26 Feb 07 |
jari |
4 |
*/ |
2 |
26 Feb 07 |
jari |
5 |
/* |
2 |
26 Feb 07 |
jari |
* ScriptManager.java |
2 |
26 Feb 07 |
jari |
7 |
* |
2 |
26 Feb 07 |
jari |
* Created on February 28, 2004, 12:16 AM |
2 |
26 Feb 07 |
jari |
9 |
*/ |
2 |
26 Feb 07 |
jari |
10 |
|
2 |
26 Feb 07 |
jari |
11 |
package org.tigr.microarray.mev.script; |
2 |
26 Feb 07 |
jari |
12 |
|
2 |
26 Feb 07 |
jari |
13 |
import java.awt.Frame; |
2 |
26 Feb 07 |
jari |
14 |
import java.awt.Insets; |
2 |
26 Feb 07 |
jari |
15 |
import java.io.BufferedWriter; |
2 |
26 Feb 07 |
jari |
16 |
import java.io.File; |
2 |
26 Feb 07 |
jari |
17 |
import java.io.FileWriter; |
2 |
26 Feb 07 |
jari |
18 |
import java.io.IOException; |
2 |
26 Feb 07 |
jari |
19 |
import java.io.Serializable; |
2 |
26 Feb 07 |
jari |
20 |
import java.util.Enumeration; |
2 |
26 Feb 07 |
jari |
21 |
import java.util.Hashtable; |
2 |
26 Feb 07 |
jari |
22 |
import java.util.Vector; |
2 |
26 Feb 07 |
jari |
23 |
|
2 |
26 Feb 07 |
jari |
24 |
import javax.swing.Action; |
2 |
26 Feb 07 |
jari |
25 |
import javax.swing.JFileChooser; |
2 |
26 Feb 07 |
jari |
26 |
import javax.swing.JFrame; |
2 |
26 Feb 07 |
jari |
27 |
import javax.swing.JOptionPane; |
2 |
26 Feb 07 |
jari |
28 |
import javax.swing.JTextPane; |
2 |
26 Feb 07 |
jari |
29 |
import javax.swing.tree.DefaultMutableTreeNode; |
2 |
26 Feb 07 |
jari |
30 |
|
2 |
26 Feb 07 |
jari |
31 |
import org.tigr.microarray.mev.DetectionFilter; |
2 |
26 Feb 07 |
jari |
32 |
import org.tigr.microarray.mev.FoldFilter; |
2 |
26 Feb 07 |
jari |
33 |
import org.tigr.microarray.mev.SetDetectionFilterDialog; |
2 |
26 Feb 07 |
jari |
34 |
import org.tigr.microarray.mev.SetFoldFilterDialog; |
2 |
26 Feb 07 |
jari |
35 |
import org.tigr.microarray.mev.SetLowerCutoffsDialog; |
2 |
26 Feb 07 |
jari |
36 |
import org.tigr.microarray.mev.SetPercentageCutoffsDialog; |
2 |
26 Feb 07 |
jari |
37 |
import org.tigr.microarray.mev.TMEV; |
2 |
26 Feb 07 |
jari |
38 |
import org.tigr.microarray.mev.action.ActionManager; |
2 |
26 Feb 07 |
jari |
39 |
import org.tigr.microarray.mev.cluster.algorithm.Algorithm; |
2 |
26 Feb 07 |
jari |
40 |
import org.tigr.microarray.mev.cluster.algorithm.AlgorithmData; |
2 |
26 Feb 07 |
jari |
41 |
import org.tigr.microarray.mev.cluster.gui.Experiment; |
2 |
26 Feb 07 |
jari |
42 |
import org.tigr.microarray.mev.cluster.gui.IData; |
2 |
26 Feb 07 |
jari |
43 |
import org.tigr.microarray.mev.cluster.gui.IFramework; |
2 |
26 Feb 07 |
jari |
44 |
import org.tigr.microarray.mev.cluster.gui.IViewer; |
2 |
26 Feb 07 |
jari |
45 |
import org.tigr.microarray.mev.cluster.gui.LeafInfo; |
2 |
26 Feb 07 |
jari |
46 |
import org.tigr.microarray.mev.cluster.gui.impl.dialogs.Progress; |
2 |
26 Feb 07 |
jari |
47 |
import org.tigr.microarray.mev.script.scriptGUI.CentroidEntropyRankingInitDialog; |
2 |
26 Feb 07 |
jari |
48 |
import org.tigr.microarray.mev.script.scriptGUI.DiversityRankingInitDialog; |
2 |
26 Feb 07 |
jari |
49 |
import org.tigr.microarray.mev.script.scriptGUI.IScriptGUI; |
2 |
26 Feb 07 |
jari |
50 |
import org.tigr.microarray.mev.script.scriptGUI.ScriptAlgorithmInitDialog; |
2 |
26 Feb 07 |
jari |
51 |
import org.tigr.microarray.mev.script.scriptGUI.ScriptAttributeDialog; |
2 |
26 Feb 07 |
jari |
52 |
import org.tigr.microarray.mev.script.scriptGUI.ScriptTable; |
2 |
26 Feb 07 |
jari |
53 |
import org.tigr.microarray.mev.script.scriptGUI.ScriptTreeViewer; |
2 |
26 Feb 07 |
jari |
54 |
import org.tigr.microarray.mev.script.scriptGUI.ScriptXMLViewer; |
2 |
26 Feb 07 |
jari |
55 |
import org.tigr.microarray.mev.script.util.AlgorithmNode; |
2 |
26 Feb 07 |
jari |
56 |
import org.tigr.microarray.mev.script.util.ErrorLog; |
2 |
26 Feb 07 |
jari |
57 |
import org.tigr.microarray.mev.script.util.ParameterAttributes; |
2 |
26 Feb 07 |
jari |
58 |
import org.tigr.microarray.mev.script.util.ParameterValidator; |
2 |
26 Feb 07 |
jari |
59 |
import org.tigr.microarray.mev.script.util.ScriptConstants; |
2 |
26 Feb 07 |
jari |
60 |
import org.tigr.microarray.mev.script.util.ScriptNode; |
2 |
26 Feb 07 |
jari |
61 |
import org.tigr.microarray.mev.script.util.ScriptRunner; |
2 |
26 Feb 07 |
jari |
62 |
import org.tigr.microarray.mev.script.util.ScriptTree; |
2 |
26 Feb 07 |
jari |
63 |
|
2 |
26 Feb 07 |
jari |
64 |
|
2 |
26 Feb 07 |
jari |
/** The ScriptManager class acts as a conduit to facilitate interaction between |
2 |
26 Feb 07 |
jari |
* the objects below the script package and the rest of MeV including data structures |
2 |
26 Feb 07 |
jari |
* and gui aspects. The interactions are primarily parameter fetching and script |
2 |
26 Feb 07 |
jari |
* execution via classe that interface with <CODE>IScripGUI</CODE> implementaions |
2 |
26 Feb 07 |
jari |
* which are algorithms within MeV which implement scripting support as specified in |
2 |
26 Feb 07 |
jari |
* the interface. |
2 |
26 Feb 07 |
jari |
* @author braisted |
2 |
26 Feb 07 |
jari |
72 |
*/ |
2 |
26 Feb 07 |
jari |
73 |
public class ScriptManager implements Serializable { |
2 |
26 Feb 07 |
jari |
74 |
public static final long serialVersionUID = 10001020103010001L; |
2 |
26 Feb 07 |
jari |
75 |
|
2 |
26 Feb 07 |
jari |
/** Holds the Mev' ResultTree script mount point. |
2 |
26 Feb 07 |
jari |
77 |
*/ |
2 |
26 Feb 07 |
jari |
78 |
private DefaultMutableTreeNode scriptManagerNode; |
2 |
26 Feb 07 |
jari |
/** Mev's <CODE>ActionManager</CODE>. Supports algorithm interactions. |
2 |
26 Feb 07 |
jari |
80 |
*/ |
2 |
26 Feb 07 |
jari |
81 |
private ActionManager actionManager; |
2 |
26 Feb 07 |
jari |
/** Contains multiple script objects. |
2 |
26 Feb 07 |
jari |
83 |
*/ |
2 |
26 Feb 07 |
jari |
84 |
private ScriptTable table; |
2 |
26 Feb 07 |
jari |
/** Count of current scripts. |
2 |
26 Feb 07 |
jari |
86 |
*/ |
2 |
26 Feb 07 |
jari |
87 |
private int scriptNum; |
2 |
26 Feb 07 |
jari |
/** MeV's framework communication conduit. |
2 |
26 Feb 07 |
jari |
89 |
*/ |
2 |
26 Feb 07 |
jari |
90 |
private IFramework framework; |
2 |
26 Feb 07 |
jari |
/** Validation support class. |
2 |
26 Feb 07 |
jari |
92 |
*/ |
2 |
26 Feb 07 |
jari |
93 |
private ParameterValidator validator; |
2 |
26 Feb 07 |
jari |
/** Progress meter. |
2 |
26 Feb 07 |
jari |
95 |
*/ |
2 |
26 Feb 07 |
jari |
96 |
private Progress progress; |
2 |
26 Feb 07 |
jari |
/** Vector data structure of current scripts. |
2 |
26 Feb 07 |
jari |
98 |
*/ |
2 |
26 Feb 07 |
jari |
99 |
private Vector scripts; |
2 |
26 Feb 07 |
jari |
100 |
|
2 |
26 Feb 07 |
jari |
/** Creates a new instance of ScriptManager |
2 |
26 Feb 07 |
jari |
* @param framework MeV's main framework object. This framework is MeV's |
2 |
26 Feb 07 |
jari |
* analog to scripting's ScriptManager as it serves as a |
2 |
26 Feb 07 |
jari |
* communication conduit. |
2 |
26 Feb 07 |
jari |
* @param scriptNode This is the <CODE>DefaultMutableTreeNode</CODE> associated with script activities that will |
2 |
26 Feb 07 |
jari |
* exist on the <CODE>ResultTree</CODE> object. The refer. |
2 |
26 Feb 07 |
jari |
107 |
* |
2 |
26 Feb 07 |
jari |
* @param manager MeV's <CODE>ActionManager</CODE>. This permits access to MeV's algorithm GUI |
2 |
26 Feb 07 |
jari |
* implementations which optionally implement <CODE>IScriptGUI</CODE> to support scripting. |
2 |
26 Feb 07 |
jari |
110 |
*/ |
2 |
26 Feb 07 |
jari |
111 |
public ScriptManager(IFramework framework, DefaultMutableTreeNode scriptNode, ActionManager manager) { |
2 |
26 Feb 07 |
jari |
112 |
this.framework = framework; |
2 |
26 Feb 07 |
jari |
113 |
this.actionManager = manager; |
2 |
26 Feb 07 |
jari |
114 |
this.scriptManagerNode = scriptNode; |
2 |
26 Feb 07 |
jari |
115 |
scripts = new Vector(); |
2 |
26 Feb 07 |
jari |
116 |
scriptNum = 1; |
2 |
26 Feb 07 |
jari |
117 |
} |
2 |
26 Feb 07 |
jari |
118 |
|
2 |
26 Feb 07 |
jari |
/** Default Constructor. |
2 |
26 Feb 07 |
jari |
120 |
*/ |
2 |
26 Feb 07 |
jari |
121 |
public ScriptManager() { |
2 |
26 Feb 07 |
jari |
122 |
|
2 |
26 Feb 07 |
jari |
123 |
} |
2 |
26 Feb 07 |
jari |
124 |
|
2 |
26 Feb 07 |
jari |
/** Loads a script following File selection. |
2 |
26 Feb 07 |
jari |
126 |
*/ |
2 |
26 Feb 07 |
jari |
127 |
public void loadScript() { |
2 |
26 Feb 07 |
jari |
128 |
JFileChooser chooser = new JFileChooser(TMEV.getFile("data/scripts/")); |
2 |
26 Feb 07 |
jari |
129 |
chooser.setMultiSelectionEnabled(false); |
2 |
26 Feb 07 |
jari |
130 |
boolean loadState; |
2 |
26 Feb 07 |
jari |
131 |
if( chooser.showOpenDialog(framework.getFrame()) == JFileChooser.APPROVE_OPTION ) { |
2 |
26 Feb 07 |
jari |
132 |
loadXML(chooser.getSelectedFile()); |
2 |
26 Feb 07 |
jari |
133 |
} |
2 |
26 Feb 07 |
jari |
134 |
} |
2 |
26 Feb 07 |
jari |
135 |
|
2 |
26 Feb 07 |
jari |
136 |
|
2 |
26 Feb 07 |
jari |
/** Loads the XML script specified by File object. |
2 |
26 Feb 07 |
jari |
* Note that real-time validation occurs on loading the script. |
2 |
26 Feb 07 |
jari |
* @param file XML file object. |
2 |
26 Feb 07 |
jari |
140 |
*/ |
2 |
26 Feb 07 |
jari |
141 |
public void loadXML(File file) { |
2 |
26 Feb 07 |
jari |
142 |
Thread thread = new Thread(new ThreadHandler(file)); |
2 |
26 Feb 07 |
jari |
143 |
thread.setPriority(Thread.MIN_PRIORITY); |
2 |
26 Feb 07 |
jari |
144 |
this.progress = new Progress(framework.getFrame(), "Script Loading and Validation", null); |
2 |
26 Feb 07 |
jari |
145 |
this.progress.show(); |
2 |
26 Feb 07 |
jari |
146 |
thread.start(); |
2 |
26 Feb 07 |
jari |
147 |
} |
2 |
26 Feb 07 |
jari |
148 |
|
2 |
26 Feb 07 |
jari |
149 |
|
2 |
26 Feb 07 |
jari |
150 |
|
2 |
26 Feb 07 |
jari |
/** Internal class to handle thread for script loading. |
2 |
26 Feb 07 |
jari |
152 |
*/ |
2 |
26 Feb 07 |
jari |
153 |
public class ThreadHandler implements Runnable { |
2 |
26 Feb 07 |
jari |
154 |
private final File file; |
2 |
26 Feb 07 |
jari |
155 |
public ThreadHandler(File f) { |
2 |
26 Feb 07 |
jari |
156 |
file = f; |
2 |
26 Feb 07 |
jari |
157 |
} |
2 |
26 Feb 07 |
jari |
158 |
public void run() { |
2 |
26 Feb 07 |
jari |
159 |
loadScript(file); |
2 |
26 Feb 07 |
jari |
160 |
} |
2 |
26 Feb 07 |
jari |
161 |
} |
2 |
26 Feb 07 |
jari |
162 |
|
2 |
26 Feb 07 |
jari |
163 |
|
2 |
26 Feb 07 |
jari |
/** Supports script loading called from a thread. |
2 |
26 Feb 07 |
jari |
* @param inputFile |
2 |
26 Feb 07 |
jari |
* @return */ |
2 |
26 Feb 07 |
jari |
167 |
private boolean loadScript(File inputFile) { |
2 |
26 Feb 07 |
jari |
168 |
|
2 |
26 Feb 07 |
jari |
169 |
ScriptDocument newScriptDoc = new ScriptDocument(scriptNum, inputFile.getPath(), this); |
2 |
26 Feb 07 |
jari |
170 |
ErrorLog errorLog = newScriptDoc.getErrorLog(); |
2 |
26 Feb 07 |
jari |
171 |
boolean validationErrors = false; |
2 |
26 Feb 07 |
jari |
172 |
|
2 |
26 Feb 07 |
jari |
173 |
try { |
2 |
26 Feb 07 |
jari |
174 |
newScriptDoc.loadXMLFile(inputFile, this.progress); |
2 |
26 Feb 07 |
jari |
175 |
|
2 |
26 Feb 07 |
jari |
//if loaded with errors get the error log from the document |
2 |
26 Feb 07 |
jari |
177 |
if(newScriptDoc.getErrorCount() > 0) { |
2 |
26 Feb 07 |
jari |
178 |
if(errorLog.hasErrors() || errorLog.hasFatalErrors()) { |
2 |
26 Feb 07 |
jari |
179 |
validationErrors = true; |
2 |
26 Feb 07 |
jari |
180 |
progress.dispose(); |
2 |
26 Feb 07 |
jari |
181 |
} |
2 |
26 Feb 07 |
jari |
182 |
errorLog.reportAllListings(); |
2 |
26 Feb 07 |
jari |
183 |
} |
2 |
26 Feb 07 |
jari |
184 |
} catch (Exception e) { |
2 |
26 Feb 07 |
jari |
//catch non parse errors such as IO errors |
2 |
26 Feb 07 |
jari |
186 |
JOptionPane.showMessageDialog(framework.getFrame(), "Script loading has been aborted due to parse errors.", |
2 |
26 Feb 07 |
jari |
187 |
"Script Parse Error", JOptionPane.INFORMATION_MESSAGE); |
2 |
26 Feb 07 |
jari |
188 |
|
2 |
26 Feb 07 |
jari |
189 |
progress.dispose(); |
2 |
26 Feb 07 |
jari |
190 |
return false; |
2 |
26 Feb 07 |
jari |
191 |
} |
2 |
26 Feb 07 |
jari |
192 |
|
2 |
26 Feb 07 |
jari |
//Exit if there were validation or fatal errors. |
2 |
26 Feb 07 |
jari |
194 |
if(validationErrors) { |
2 |
26 Feb 07 |
jari |
195 |
JOptionPane.showMessageDialog(framework.getFrame(), "Script loading has been aborted. If the script has been \n"+ |
2 |
26 Feb 07 |
jari |
196 |
"repaired to correct the errors you can attempt to load it again.", "Script Validation Error", JOptionPane.INFORMATION_MESSAGE); |
2 |
26 Feb 07 |
jari |
197 |
return false; |
2 |
26 Feb 07 |
jari |
198 |
} |
2 |
26 Feb 07 |
jari |
199 |
|
2 |
26 Feb 07 |
jari |
200 |
newScriptDoc.setDocumentFileName(inputFile.getPath()); |
2 |
26 Feb 07 |
jari |
201 |
|
2 |
26 Feb 07 |
jari |
202 |
if(validator == null) { |
2 |
26 Feb 07 |
jari |
//construct a parameter validator |
2 |
26 Feb 07 |
jari |
204 |
validator = new ParameterValidator(); |
2 |
26 Feb 07 |
jari |
205 |
validator.loadParameterConstraints(); |
2 |
26 Feb 07 |
jari |
206 |
} |
2 |
26 Feb 07 |
jari |
207 |
|
2 |
26 Feb 07 |
jari |
208 |
ScriptTree tree = new ScriptTree(newScriptDoc, this); |
2 |
26 Feb 07 |
jari |
209 |
if(!validateParameters(tree, errorLog)) { |
2 |
26 Feb 07 |
jari |
210 |
this.progress.dispose(); |
2 |
26 Feb 07 |
jari |
211 |
JOptionPane.showMessageDialog(framework.getFrame(), "Script loading has been aborted. If the script has been \n"+ |
2 |
26 Feb 07 |
jari |
212 |
"repaired to correct the errors you can attempt to load it again.", "Parmameter Validataion Error", JOptionPane.INFORMATION_MESSAGE); |
2 |
26 Feb 07 |
jari |
213 |
return false; |
2 |
26 Feb 07 |
jari |
214 |
} |
2 |
26 Feb 07 |
jari |
215 |
|
2 |
26 Feb 07 |
jari |
//Construct the table if needed |
2 |
26 Feb 07 |
jari |
217 |
if(table == null) { |
2 |
26 Feb 07 |
jari |
218 |
table = new ScriptTable(this, scripts); |
2 |
26 Feb 07 |
jari |
219 |
DefaultMutableTreeNode tableNode = new DefaultMutableTreeNode(new LeafInfo("Script Table", table)); |
2 |
26 Feb 07 |
jari |
220 |
framework.addNode(scriptManagerNode,tableNode); |
2 |
26 Feb 07 |
jari |
221 |
} |
2 |
26 Feb 07 |
jari |
222 |
|
2 |
26 Feb 07 |
jari |
223 |
ScriptTreeViewer treeViewer = new ScriptTreeViewer(tree, this); |
2 |
26 Feb 07 |
jari |
224 |
ScriptXMLViewer xmlViewer = new ScriptXMLViewer(newScriptDoc, this); |
2 |
26 Feb 07 |
jari |
225 |
|
2 |
26 Feb 07 |
jari |
226 |
DefaultMutableTreeNode scriptNode = new DefaultMutableTreeNode(new LeafInfo("Script ("+scriptNum+")")); |
2 |
26 Feb 07 |
jari |
227 |
DefaultMutableTreeNode treeNode = new DefaultMutableTreeNode(new LeafInfo("Script Tree Viewer", treeViewer)); |
2 |
26 Feb 07 |
jari |
228 |
DefaultMutableTreeNode xmlNode = new DefaultMutableTreeNode(new LeafInfo("Script XML Viewer", xmlViewer)); |
2 |
26 Feb 07 |
jari |
229 |
|
2 |
26 Feb 07 |
jari |
230 |
scriptNode.add(treeNode); |
2 |
26 Feb 07 |
jari |
231 |
scriptNode.add(xmlNode); |
2 |
26 Feb 07 |
jari |
232 |
|
2 |
26 Feb 07 |
jari |
233 |
scripts.add(new Script(newScriptDoc, tree, xmlViewer)); |
2 |
26 Feb 07 |
jari |
234 |
|
2 |
26 Feb 07 |
jari |
235 |
framework.addNode(scriptManagerNode, scriptNode); |
2 |
26 Feb 07 |
jari |
236 |
framework.setTreeNode(treeNode); |
2 |
26 Feb 07 |
jari |
237 |
scriptNum++; |
2 |
26 Feb 07 |
jari |
238 |
|
2 |
26 Feb 07 |
jari |
239 |
validator.checkAlgorithmsForDataDependance(tree, this); |
2 |
26 Feb 07 |
jari |
240 |
|
2 |
26 Feb 07 |
jari |
241 |
return true; |
2 |
26 Feb 07 |
jari |
242 |
} |
2 |
26 Feb 07 |
jari |
243 |
|
2 |
26 Feb 07 |
jari |
/** Prompts for a new script object to be created. |
2 |
26 Feb 07 |
jari |
* Initialized structures are put in place. |
2 |
26 Feb 07 |
jari |
246 |
*/ |
2 |
26 Feb 07 |
jari |
247 |
public void addNewScript() { |
2 |
26 Feb 07 |
jari |
248 |
ScriptDocument newScriptDoc; |
2 |
26 Feb 07 |
jari |
249 |
ScriptAttributeDialog dialog = new ScriptAttributeDialog(); |
2 |
26 Feb 07 |
jari |
250 |
if(dialog.showModal() == JOptionPane.OK_OPTION) { |
2 |
26 Feb 07 |
jari |
251 |
newScriptDoc = new ScriptDocument(scriptNum, dialog.getName(), dialog.getFormattedDescription(), dialog.getDate(), this); |
2 |
26 Feb 07 |
jari |
252 |
|
2 |
26 Feb 07 |
jari |
253 |
if(table == null) { |
2 |
26 Feb 07 |
jari |
254 |
table = new ScriptTable(this, scripts); |
2 |
26 Feb 07 |
jari |
255 |
DefaultMutableTreeNode tableNode = new DefaultMutableTreeNode(new LeafInfo("Script Table", table)); |
2 |
26 Feb 07 |
jari |
256 |
framework.addNode(scriptManagerNode,tableNode); |
2 |
26 Feb 07 |
jari |
257 |
|
2 |
26 Feb 07 |
jari |
//construct a parameter validator |
2 |
26 Feb 07 |
jari |
259 |
validator = new ParameterValidator(); |
2 |
26 Feb 07 |
jari |
260 |
validator.loadParameterConstraints(); |
2 |
26 Feb 07 |
jari |
261 |
} |
2 |
26 Feb 07 |
jari |
262 |
|
2 |
26 Feb 07 |
jari |
263 |
ScriptTree tree = new ScriptTree(newScriptDoc, this); |
2 |
26 Feb 07 |
jari |
264 |
ScriptTreeViewer treeViewer = new ScriptTreeViewer(tree, this); |
2 |
26 Feb 07 |
jari |
265 |
ScriptXMLViewer xmlViewer = new ScriptXMLViewer(newScriptDoc, this); |
2 |
26 Feb 07 |
jari |
266 |
|
2 |
26 Feb 07 |
jari |
267 |
DefaultMutableTreeNode scriptNode = new DefaultMutableTreeNode(new LeafInfo("Script ("+scriptNum+")")); |
2 |
26 Feb 07 |
jari |
268 |
DefaultMutableTreeNode treeNode = new DefaultMutableTreeNode(new LeafInfo("Script Tree Viewer", treeViewer)); |
2 |
26 Feb 07 |
jari |
269 |
DefaultMutableTreeNode xmlNode = new DefaultMutableTreeNode(new LeafInfo("Script XML Viewer", xmlViewer)); |
2 |
26 Feb 07 |
jari |
270 |
|
2 |
26 Feb 07 |
jari |
271 |
scripts.add(new Script(newScriptDoc, tree, xmlViewer)); |
2 |
26 Feb 07 |
jari |
272 |
|
2 |
26 Feb 07 |
jari |
273 |
scriptNode.add(treeNode); |
2 |
26 Feb 07 |
jari |
274 |
scriptNode.add(xmlNode); |
2 |
26 Feb 07 |
jari |
275 |
|
2 |
26 Feb 07 |
jari |
276 |
framework.addNode(scriptManagerNode, scriptNode); |
2 |
26 Feb 07 |
jari |
277 |
framework.setTreeNode(treeNode); |
2 |
26 Feb 07 |
jari |
278 |
|
2 |
26 Feb 07 |
jari |
279 |
scriptNum++; |
2 |
26 Feb 07 |
jari |
280 |
} |
2 |
26 Feb 07 |
jari |
281 |
} |
2 |
26 Feb 07 |
jari |
282 |
|
2 |
26 Feb 07 |
jari |
/** Provides the next Script ID number. |
2 |
26 Feb 07 |
jari |
284 |
*/ |
2 |
26 Feb 07 |
jari |
285 |
public int getNextScriptID() { |
2 |
26 Feb 07 |
jari |
286 |
scriptNum++; |
2 |
26 Feb 07 |
jari |
287 |
return scriptNum; |
2 |
26 Feb 07 |
jari |
288 |
} |
2 |
26 Feb 07 |
jari |
289 |
|
2 |
26 Feb 07 |
jari |
290 |
|
2 |
26 Feb 07 |
jari |
/** Saves the script to a file to be specified via a prompt. |
2 |
26 Feb 07 |
jari |
* @param doc <CODE>ScriptDocument</CODE> to save. |
2 |
26 Feb 07 |
jari |
293 |
*/ |
2 |
26 Feb 07 |
jari |
294 |
public void saveScript(ScriptDocument doc) { |
2 |
26 Feb 07 |
jari |
295 |
JFileChooser chooser = new JFileChooser(TMEV.getFile("data/scripts/")); |
2 |
26 Feb 07 |
jari |
296 |
if(chooser.showSaveDialog(new JFrame()) == JFileChooser.APPROVE_OPTION) { |
2 |
26 Feb 07 |
jari |
297 |
try { |
2 |
26 Feb 07 |
jari |
298 |
writeScript(chooser.getSelectedFile(), doc); |
2 |
26 Feb 07 |
jari |
299 |
} catch (IOException ioe) { |
2 |
26 Feb 07 |
jari |
300 |
JOptionPane.showMessageDialog(new JFrame(), "An error occured while saving the script to file", "Save Error", JOptionPane.WARNING_MESSAGE); |
2 |
26 Feb 07 |
jari |
301 |
} |
2 |
26 Feb 07 |
jari |
302 |
} |
2 |
26 Feb 07 |
jari |
303 |
} |
2 |
26 Feb 07 |
jari |
304 |
|
2 |
26 Feb 07 |
jari |
305 |
|
2 |
26 Feb 07 |
jari |
/** Supports script output to specified File. |
2 |
26 Feb 07 |
jari |
* @param file Output file |
2 |
26 Feb 07 |
jari |
* @param doc <CODE>ScriptDocument</CODE> to output. |
2 |
26 Feb 07 |
jari |
* @throws IOException |
2 |
26 Feb 07 |
jari |
310 |
*/ |
2 |
26 Feb 07 |
jari |
311 |
private void writeScript(File file, ScriptDocument doc) throws IOException { |
2 |
26 Feb 07 |
jari |
312 |
BufferedWriter bfr = new BufferedWriter( new FileWriter(file)); |
2 |
26 Feb 07 |
jari |
313 |
bfr.write(doc.toString()); |
2 |
26 Feb 07 |
jari |
314 |
bfr.flush(); |
2 |
26 Feb 07 |
jari |
315 |
bfr.close(); |
2 |
26 Feb 07 |
jari |
316 |
} |
2 |
26 Feb 07 |
jari |
317 |
|
2 |
26 Feb 07 |
jari |
318 |
|
2 |
26 Feb 07 |
jari |
/** Prompts the user to select a new algorithm to add during script |
2 |
26 Feb 07 |
jari |
* creation. Then the method returns the collection of parameters. |
2 |
26 Feb 07 |
jari |
* @param parentNodeOutputClass Parent input data class used to restrict options to |
2 |
26 Feb 07 |
jari |
* appropriate algorithms. |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
324 |
*/ |
2 |
26 Feb 07 |
jari |
325 |
public AlgorithmData getAlgorithm(String parentNodeOutputClass) { |
2 |
26 Feb 07 |
jari |
326 |
|
2 |
26 Feb 07 |
jari |
327 |
AlgorithmData data = null; |
2 |
26 Feb 07 |
jari |
328 |
|
2 |
26 Feb 07 |
jari |
329 |
if(this.framework.getData().getFeaturesCount() == 0) { |
2 |
26 Feb 07 |
jari |
330 |
JTextPane pane = new JTextPane(); |
2 |
26 Feb 07 |
jari |
331 |
pane.setContentType("text/html"); |
2 |
26 Feb 07 |
jari |
//pane.setBackground(Color.lightGray); |
2 |
26 Feb 07 |
jari |
333 |
pane.setMargin(new Insets(5,15,15,15)); |
2 |
26 Feb 07 |
jari |
// pane.setBorder(BorderFactory.createLineBorder(Color.black)); |
2 |
26 Feb 07 |
jari |
335 |
String text = "<html><center><h2>Expression Data Unavailable</h2></center><hr size=3>"; |
2 |
26 Feb 07 |
jari |
336 |
text += "<center>Expression data has not been loaded. Some algorithms require information about the <br> " + |
2 |
26 Feb 07 |
jari |
337 |
"number and order of loaded experiments in order to set parameters such as group assignments. <br><br>" + |
2 |
26 Feb 07 |
jari |
338 |
"<b>Please load data before proceeding with script construction.</b></center></html>"; |
2 |
26 Feb 07 |
jari |
339 |
pane.setText(text); |
2 |
26 Feb 07 |
jari |
340 |
|
2 |
26 Feb 07 |
jari |
341 |
JOptionPane.showMessageDialog(framework.getFrame(), pane, "Data Unavailable", JOptionPane.INFORMATION_MESSAGE); |
2 |
26 Feb 07 |
jari |
342 |
|
2 |
26 Feb 07 |
jari |
343 |
return null; |
2 |
26 Feb 07 |
jari |
344 |
} |
2 |
26 Feb 07 |
jari |
345 |
int dataType = framework.getData().getDataType(); |
2 |
26 Feb 07 |
jari |
346 |
boolean isAffy = false; |
2 |
26 Feb 07 |
jari |
347 |
if( dataType == IData.DATA_TYPE_AFFY_ABS |
2 |
26 Feb 07 |
jari |
348 |
|| dataType == IData.DATA_TYPE_AFFY_REF |
2 |
26 Feb 07 |
jari |
349 |
|| dataType == IData.DATA_TYPE_AFFY_MEAN |
2 |
26 Feb 07 |
jari |
350 |
|| dataType == IData.DATA_TYPE_AFFY_MEDIAN) { |
2 |
26 Feb 07 |
jari |
351 |
isAffy = true; |
2 |
26 Feb 07 |
jari |
352 |
} |
2 |
26 Feb 07 |
jari |
353 |
|
2 |
26 Feb 07 |
jari |
354 |
ScriptAlgorithmInitDialog dialog = new ScriptAlgorithmInitDialog(actionManager, parentNodeOutputClass, isAffy); |
2 |
26 Feb 07 |
jari |
355 |
|
2 |
26 Feb 07 |
jari |
356 |
if(dialog.showModal() == JOptionPane.OK_OPTION) { |
2 |
26 Feb 07 |
jari |
357 |
String algName = dialog.getAlgorithmName(); |
2 |
26 Feb 07 |
jari |
358 |
String algType = dialog.getAlgorithmType(); |
2 |
26 Feb 07 |
jari |
359 |
|
2 |
26 Feb 07 |
jari |
360 |
|
2 |
26 Feb 07 |
jari |
361 |
if(algType.equals(ScriptConstants.ALGORITHM_TYPE_CLUSTER)) { |
2 |
26 Feb 07 |
jari |
362 |
int algIndex = dialog.getAlgorithmIndex(); |
2 |
26 Feb 07 |
jari |
363 |
Action action = actionManager.getAction(ActionManager.ANALYSIS_ACTION+String.valueOf(algIndex)); |
2 |
26 Feb 07 |
jari |
364 |
if(action == null){ |
2 |
26 Feb 07 |
jari |
365 |
return null; |
2 |
26 Feb 07 |
jari |
366 |
} |
2 |
26 Feb 07 |
jari |
367 |
String className = (String)action.getValue(ActionManager.PARAMETER); |
2 |
26 Feb 07 |
jari |
368 |
try { |
2 |
26 Feb 07 |
jari |
369 |
Class clazz = Class.forName(className); |
2 |
26 Feb 07 |
jari |
370 |
IScriptGUI gui = (IScriptGUI)clazz.newInstance(); |
2 |
26 Feb 07 |
jari |
371 |
data = gui.getScriptParameters(framework); |
2 |
26 Feb 07 |
jari |
372 |
} catch (Exception e) { |
2 |
26 Feb 07 |
jari |
373 |
JOptionPane.showMessageDialog(framework.getFrame(), "Can't retrieve script parameters for the "+algName+ " algorithm", "Script Parameter Error", JOptionPane.WARNING_MESSAGE); |
2 |
26 Feb 07 |
jari |
374 |
e.printStackTrace(); |
2 |
26 Feb 07 |
jari |
375 |
} |
2 |
26 Feb 07 |
jari |
376 |
} else if(algType.equals(ScriptConstants.ALGORITHM_TYPE_ADJUSTMENT)) { |
2 |
26 Feb 07 |
jari |
377 |
|
2 |
26 Feb 07 |
jari |
378 |
if(algName.equals("Percentage Cutoff")) { |
2 |
26 Feb 07 |
jari |
379 |
SetPercentageCutoffsDialog percDialog = new SetPercentageCutoffsDialog(new JFrame(), 0.0f); |
2 |
26 Feb 07 |
jari |
380 |
if(percDialog.showModal() == JOptionPane.OK_OPTION) { |
2 |
26 Feb 07 |
jari |
381 |
data = new AlgorithmData(); |
2 |
26 Feb 07 |
jari |
382 |
data.addParam("name", algName); |
2 |
26 Feb 07 |
jari |
383 |
float percentage = percDialog.getPercentageCutoff(); |
2 |
26 Feb 07 |
jari |
384 |
data.addParam("percent-cutoff", String.valueOf(percentage)); |
2 |
26 Feb 07 |
jari |
385 |
setAdjustmentOutput(data); |
2 |
26 Feb 07 |
jari |
386 |
} |
2 |
26 Feb 07 |
jari |
387 |
} else if(algName.equals("Lower Cutoffs")) { |
2 |
26 Feb 07 |
jari |
388 |
SetLowerCutoffsDialog lowerDialog = new SetLowerCutoffsDialog(new JFrame(), 0.0f, 0.0f); |
2 |
26 Feb 07 |
jari |
389 |
if(lowerDialog.showModal() == JOptionPane.OK_OPTION) { |
2 |
26 Feb 07 |
jari |
390 |
data = new AlgorithmData(); |
2 |
26 Feb 07 |
jari |
391 |
data.addParam("name", algName); |
2 |
26 Feb 07 |
jari |
392 |
data.addParam("cy3-lower-cutoff", String.valueOf(lowerDialog.getLowerCY3Cutoff())); |
2 |
26 Feb 07 |
jari |
393 |
data.addParam("cy5-lower-cutoff", String.valueOf(lowerDialog.getLowerCY5Cutoff())); |
2 |
26 Feb 07 |
jari |
394 |
setAdjustmentOutput(data); |
2 |
26 Feb 07 |
jari |
395 |
} |
2 |
26 Feb 07 |
jari |
396 |
} else if(algName.equals("Detection Filter")) { |
2 |
26 Feb 07 |
jari |
397 |
data = new AlgorithmData(); |
2 |
26 Feb 07 |
jari |
398 |
|
2 |
26 Feb 07 |
jari |
399 |
IData idata = framework.getData(); |
2 |
26 Feb 07 |
jari |
400 |
int featuresCount = idata.getFeaturesCount(); |
2 |
26 Feb 07 |
jari |
401 |
String [] expNames = new String[featuresCount]; |
2 |
26 Feb 07 |
jari |
402 |
for(int i = 0; i < expNames.length; i++) { |
2 |
26 Feb 07 |
jari |
403 |
expNames[i] = idata.getSampleName(i); |
2 |
26 Feb 07 |
jari |
404 |
} |
2 |
26 Feb 07 |
jari |
405 |
SetDetectionFilterDialog sdfd = new SetDetectionFilterDialog(new JFrame(), expNames, new DetectionFilter(expNames)); |
2 |
26 Feb 07 |
jari |
406 |
if(sdfd.showModal() == JOptionPane.OK_OPTION) { |
2 |
26 Feb 07 |
jari |
407 |
DetectionFilter detFilter = sdfd.getDetectionFilter(); |
2 |
26 Feb 07 |
jari |
408 |
|
2 |
26 Feb 07 |
jari |
409 |
int [] groupMemb = new int[featuresCount]; |
2 |
26 Feb 07 |
jari |
410 |
int [] numReq = new int[featuresCount]; |
2 |
26 Feb 07 |
jari |
411 |
|
2 |
26 Feb 07 |
jari |
412 |
for(int i=0; i<groupMemb.length; i++) { |
2 |
26 Feb 07 |
jari |
413 |
groupMemb[i] = detFilter.get_group_membership(i); |
2 |
26 Feb 07 |
jari |
414 |
numReq[i] = detFilter.get_num_required(i); |
2 |
26 Feb 07 |
jari |
415 |
} |
2 |
26 Feb 07 |
jari |
416 |
data.addParam("name", "Affy Detection Filter"); |
2 |
26 Feb 07 |
jari |
417 |
data.addIntArray("group-memberships", groupMemb); |
2 |
26 Feb 07 |
jari |
418 |
data.addIntArray("number-required", numReq); |
2 |
26 Feb 07 |
jari |
419 |
data.addParam("is-required-in-both-groups", String.valueOf(detFilter.get_both())); |
2 |
26 Feb 07 |
jari |
420 |
setAdjustmentOutput(data); |
2 |
26 Feb 07 |
jari |
421 |
} |
2 |
26 Feb 07 |
jari |
422 |
} else if(algName.equals("Fold Filter")) { |
2 |
26 Feb 07 |
jari |
423 |
data = new AlgorithmData(); |
2 |
26 Feb 07 |
jari |
424 |
|
2 |
26 Feb 07 |
jari |
425 |
IData idata = framework.getData(); |
2 |
26 Feb 07 |
jari |
426 |
int featuresCount = idata.getFeaturesCount(); |
2 |
26 Feb 07 |
jari |
427 |
String [] expNames = new String[featuresCount]; |
2 |
26 Feb 07 |
jari |
428 |
for(int i = 0; i < expNames.length; i++) { |
2 |
26 Feb 07 |
jari |
429 |
expNames[i] = idata.getSampleName(i); |
2 |
26 Feb 07 |
jari |
430 |
} |
2 |
26 Feb 07 |
jari |
431 |
SetFoldFilterDialog sffd = new SetFoldFilterDialog(new JFrame(), expNames, new FoldFilter(expNames)); |
2 |
26 Feb 07 |
jari |
432 |
if(sffd.showModal() == JOptionPane.OK_OPTION) { |
2 |
26 Feb 07 |
jari |
433 |
FoldFilter foldFilter = sffd.getFoldFilter(); |
2 |
26 Feb 07 |
jari |
434 |
|
2 |
26 Feb 07 |
jari |
435 |
int [] groupMemb = new int[featuresCount]; |
2 |
26 Feb 07 |
jari |
436 |
int [] numMembers= new int[featuresCount]; |
2 |
26 Feb 07 |
jari |
437 |
|
2 |
26 Feb 07 |
jari |
438 |
for(int i=0; i<groupMemb.length; i++) { |
2 |
26 Feb 07 |
jari |
439 |
groupMemb[i] = foldFilter.get_group_membership(i); |
2 |
26 Feb 07 |
jari |
440 |
numMembers[i] = foldFilter.get_num_members(i); |
2 |
26 Feb 07 |
jari |
441 |
} |
2 |
26 Feb 07 |
jari |
442 |
data.addParam("name", "Affy Fold Filter"); |
2 |
26 Feb 07 |
jari |
443 |
data.addIntArray("group-memberships", groupMemb); |
2 |
26 Feb 07 |
jari |
444 |
data.addIntArray("number-of-members", numMembers); |
2 |
26 Feb 07 |
jari |
445 |
data.addParam("fold-change", String.valueOf(foldFilter.get_fold_change())); |
2 |
26 Feb 07 |
jari |
446 |
data.addParam("divider-string", foldFilter.get_divider()); |
2 |
26 Feb 07 |
jari |
447 |
setAdjustmentOutput(data); |
2 |
26 Feb 07 |
jari |
448 |
} |
2 |
26 Feb 07 |
jari |
449 |
|
2 |
26 Feb 07 |
jari |
450 |
} else { |
2 |
26 Feb 07 |
jari |
451 |
data = new AlgorithmData(); |
2 |
26 Feb 07 |
jari |
452 |
data.addParam("name", algName); |
2 |
26 Feb 07 |
jari |
453 |
setAdjustmentOutput(data); |
2 |
26 Feb 07 |
jari |
454 |
} |
2 |
26 Feb 07 |
jari |
455 |
} else if(algType.equals(ScriptConstants.ALGORITHM_TYPE_CLUSTER_SELECTION)) { |
2 |
26 Feb 07 |
jari |
456 |
|
2 |
26 Feb 07 |
jari |
457 |
if(algName.equals("Diversity Ranking Cluster Selection")) { |
2 |
26 Feb 07 |
jari |
458 |
DiversityRankingInitDialog selectDialog = new DiversityRankingInitDialog(new JFrame()); |
2 |
26 Feb 07 |
jari |
459 |
if(selectDialog.showModal() == JOptionPane.OK_OPTION) { |
2 |
26 Feb 07 |
jari |
460 |
data = new AlgorithmData(); |
2 |
26 Feb 07 |
jari |
461 |
data.addParam("name", algName); |
2 |
26 Feb 07 |
jari |
462 |
data.addParam("desired-cluster-count", String.valueOf(selectDialog.getClusterNumber())); |
2 |
26 Feb 07 |
jari |
463 |
data.addParam("minimum-cluster-size", String.valueOf(selectDialog.getClusterSize())); |
2 |
26 Feb 07 |
jari |
464 |
data.addParam("use-centroid-variance", String.valueOf(selectDialog.isCentroidBased())); |
2 |
26 Feb 07 |
jari |
465 |
|
2 |
26 Feb 07 |
jari |
466 |
int function = this.framework.getDistanceMenu().getDistanceFunction(); |
2 |
26 Feb 07 |
jari |
467 |
if(function == Algorithm.DEFAULT) |
2 |
26 Feb 07 |
jari |
468 |
function = Algorithm.EUCLIDEAN; |
2 |
26 Feb 07 |
jari |
469 |
|
2 |
26 Feb 07 |
jari |
470 |
data.addParam("distance-function", String.valueOf(function)); |
2 |
26 Feb 07 |
jari |
471 |
data.addParam("use-absolute", String.valueOf(this.framework.getDistanceMenu().isAbsoluteDistance())); |
2 |
26 Feb 07 |
jari |
472 |
|
2 |
26 Feb 07 |
jari |
//indicate if input clusters are genes or exps. |
2 |
26 Feb 07 |
jari |
474 |
if(parentNodeOutputClass.equals(ScriptConstants.OUTPUT_DATA_CLASS_GENE_MULTICLUSTER_OUTPUT)) |
2 |
26 Feb 07 |
jari |
475 |
data.addParam("process-gene-clusters", String.valueOf(true)); |
2 |
26 Feb 07 |
jari |
476 |
else |
2 |
26 Feb 07 |
jari |
477 |
data.addParam("process-gene-clusters", String.valueOf(false)); |
2 |
26 Feb 07 |
jari |
478 |
|
2 |
26 Feb 07 |
jari |
479 |
setSelectionOutput(data); |
2 |
26 Feb 07 |
jari |
480 |
} |
2 |
26 Feb 07 |
jari |
481 |
} else if(algName.equals("Centroid Entropy/Variance Ranking Cluster Selection")) { |
2 |
26 Feb 07 |
jari |
482 |
CentroidEntropyRankingInitDialog entropyDialog = new CentroidEntropyRankingInitDialog(new JFrame()); |
2 |
26 Feb 07 |
jari |
483 |
if(entropyDialog.showModal() == JOptionPane.OK_OPTION) { |
2 |
26 Feb 07 |
jari |
484 |
data = new AlgorithmData(); |
2 |
26 Feb 07 |
jari |
485 |
data.addParam("name", algName); |
2 |
26 Feb 07 |
jari |
486 |
data.addParam("desired-cluster-count", String.valueOf(entropyDialog.getClusterNumber())); |
2 |
26 Feb 07 |
jari |
487 |
data.addParam("minimum-cluster-size", String.valueOf(entropyDialog.getClusterSize())); |
2 |
26 Feb 07 |
jari |
488 |
data.addParam("use-centroid-variance", String.valueOf(entropyDialog.isVarianceBased())); |
2 |
26 Feb 07 |
jari |
489 |
|
2 |
26 Feb 07 |
jari |
490 |
int function = this.framework.getDistanceMenu().getDistanceFunction(); |
2 |
26 Feb 07 |
jari |
491 |
if(function == Algorithm.DEFAULT) |
2 |
26 Feb 07 |
jari |
492 |
function = Algorithm.EUCLIDEAN; |
2 |
26 Feb 07 |
jari |
493 |
|
2 |
26 Feb 07 |
jari |
494 |
data.addParam("distance-function", String.valueOf(function)); |
2 |
26 Feb 07 |
jari |
495 |
data.addParam("use-absolute", String.valueOf(this.framework.getDistanceMenu().isAbsoluteDistance())); |
2 |
26 Feb 07 |
jari |
496 |
|
2 |
26 Feb 07 |
jari |
//indicate if input clusters are genes or exps. |
2 |
26 Feb 07 |
jari |
498 |
if(parentNodeOutputClass.equals(ScriptConstants.OUTPUT_DATA_CLASS_GENE_MULTICLUSTER_OUTPUT)) |
2 |
26 Feb 07 |
jari |
499 |
data.addParam("process-gene-clusters", String.valueOf(true)); |
2 |
26 Feb 07 |
jari |
500 |
else |
2 |
26 Feb 07 |
jari |
501 |
data.addParam("process-gene-clusters", String.valueOf(false)); |
2 |
26 Feb 07 |
jari |
502 |
|
2 |
26 Feb 07 |
jari |
503 |
setSelectionOutput(data); |
2 |
26 Feb 07 |
jari |
504 |
} |
2 |
26 Feb 07 |
jari |
505 |
} |
2 |
26 Feb 07 |
jari |
506 |
} |
2 |
26 Feb 07 |
jari |
507 |
} |
2 |
26 Feb 07 |
jari |
508 |
|
2 |
26 Feb 07 |
jari |
// use for parameter varification dumpParams(data.getParams()); |
2 |
26 Feb 07 |
jari |
510 |
return data; |
2 |
26 Feb 07 |
jari |
511 |
} |
2 |
26 Feb 07 |
jari |
512 |
|
2 |
26 Feb 07 |
jari |
513 |
|
2 |
26 Feb 07 |
jari |
/** Adds parameters common to all data adjustment algorithms. |
2 |
26 Feb 07 |
jari |
* @param data Parameter container. |
2 |
26 Feb 07 |
jari |
516 |
*/ |
2 |
26 Feb 07 |
jari |
517 |
private void setAdjustmentOutput(AlgorithmData data) { |
2 |
26 Feb 07 |
jari |
518 |
String [] output_nodes = new String[1]; |
2 |
26 Feb 07 |
jari |
519 |
output_nodes[0] = "Single Adjusted Ouput"; |
2 |
26 Feb 07 |
jari |
520 |
data.addStringArray("output-nodes", output_nodes); |
2 |
26 Feb 07 |
jari |
521 |
data.addParam("output-class", ScriptConstants.OUTPUT_DATA_CLASS_SINGLE_OUTPUT); |
2 |
26 Feb 07 |
jari |
522 |
data.addParam("alg-type", ScriptConstants.ALGORITHM_TYPE_ADJUSTMENT); |
2 |
26 Feb 07 |
jari |
523 |
} |
2 |
26 Feb 07 |
jari |
524 |
|
2 |
26 Feb 07 |
jari |
/** Sets the parameters common to all Cluster Selection algorithms. |
2 |
26 Feb 07 |
jari |
* @param data AlgorithmData parameter container. |
2 |
26 Feb 07 |
jari |
527 |
*/ |
2 |
26 Feb 07 |
jari |
528 |
private void setSelectionOutput(AlgorithmData data) { |
2 |
26 Feb 07 |
jari |
529 |
int clusterCount = data.getParams().getInt("desired-cluster-count"); |
2 |
26 Feb 07 |
jari |
530 |
String [] output_nodes = new String[clusterCount]; |
2 |
26 Feb 07 |
jari |
531 |
for(int i = 0; i < clusterCount; i++) |
2 |
26 Feb 07 |
jari |
532 |
output_nodes[i] = "Selected Cluster ("+String.valueOf(i+1)+") "; |
2 |
26 Feb 07 |
jari |
533 |
data.addStringArray("output-nodes", output_nodes); |
2 |
26 Feb 07 |
jari |
534 |
data.addParam("output-class", ScriptConstants.OUTPUT_DATA_CLASS_CLUSTER_SELECTION_OUTPUT); |
2 |
26 Feb 07 |
jari |
535 |
data.addParam("alg-type", ScriptConstants.ALGORITHM_TYPE_CLUSTER_SELECTION); |
2 |
26 Feb 07 |
jari |
536 |
} |
2 |
26 Feb 07 |
jari |
537 |
|
2 |
26 Feb 07 |
jari |
/** Facilitates the jump from the <CODE>ScriptTreeViewer</CODE> to the |
2 |
26 Feb 07 |
jari |
* <CODE>ScriptXMLViewer</CODE>. |
2 |
26 Feb 07 |
jari |
* @param viewer ScriptTreeViewer object. |
2 |
26 Feb 07 |
jari |
* @param node script node on the tree to highlight. |
2 |
26 Feb 07 |
jari |
542 |
*/ |
2 |
26 Feb 07 |
jari |
543 |
public void viewSelectedNodeXML(ScriptTreeViewer viewer, ScriptNode node) { |
2 |
26 Feb 07 |
jari |
544 |
IViewer iviewer; |
2 |
26 Feb 07 |
jari |
545 |
ScriptXMLViewer xmlViewer; |
2 |
26 Feb 07 |
jari |
546 |
DefaultMutableTreeNode viewerNode = getSiblingXMLNode(viewer); |
2 |
26 Feb 07 |
jari |
547 |
if(viewerNode != null) { |
2 |
26 Feb 07 |
jari |
548 |
iviewer = ((LeafInfo)(viewerNode.getUserObject())).getViewer(); |
2 |
26 Feb 07 |
jari |
549 |
|
2 |
26 Feb 07 |
jari |
550 |
if(!(iviewer instanceof ScriptXMLViewer)) |
2 |
26 Feb 07 |
jari |
551 |
return; |
2 |
26 Feb 07 |
jari |
552 |
xmlViewer = (ScriptXMLViewer)iviewer; |
2 |
26 Feb 07 |
jari |
553 |
xmlViewer.update(); |
2 |
26 Feb 07 |
jari |
554 |
if(node instanceof AlgorithmNode) |
2 |
26 Feb 07 |
jari |
555 |
xmlViewer.highlightAlgorithmNode((AlgorithmNode)node); |
2 |
26 Feb 07 |
jari |
556 |
framework.setTreeNode(viewerNode); |
2 |
26 Feb 07 |
jari |
557 |
} |
2 |
26 Feb 07 |
jari |
558 |
} |
2 |
26 Feb 07 |
jari |
559 |
|
2 |
26 Feb 07 |
jari |
/** Support retrieval of sibling ScriptXMLViewer given an |
2 |
26 Feb 07 |
jari |
* associated tree. |
2 |
26 Feb 07 |
jari |
* @param treeViewer ScriptTreeViewer associated with xml view to be delivered. |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
564 |
*/ |
2 |
26 Feb 07 |
jari |
565 |
public DefaultMutableTreeNode getSiblingXMLNode(ScriptTreeViewer treeViewer) { |
2 |
26 Feb 07 |
jari |
566 |
Enumeration _enum = this.scriptManagerNode.depthFirstEnumeration(); |
2 |
26 Feb 07 |
jari |
567 |
DefaultMutableTreeNode node, treeNode = null; |
2 |
26 Feb 07 |
jari |
568 |
IViewer viewer; |
2 |
26 Feb 07 |
jari |
569 |
LeafInfo leaf; |
2 |
26 Feb 07 |
jari |
570 |
|
2 |
26 Feb 07 |
jari |
571 |
while(_enum.hasMoreElements()) { |
2 |
26 Feb 07 |
jari |
572 |
node = (DefaultMutableTreeNode)_enum.nextElement(); |
2 |
26 Feb 07 |
jari |
573 |
if(node.isLeaf()) { |
2 |
26 Feb 07 |
jari |
574 |
leaf = (LeafInfo)(node.getUserObject()); |
2 |
26 Feb 07 |
jari |
575 |
if(leaf != null && leaf.getViewer() != null) { |
2 |
26 Feb 07 |
jari |
576 |
viewer = leaf.getViewer(); |
2 |
26 Feb 07 |
jari |
577 |
if(viewer == treeViewer) { |
2 |
26 Feb 07 |
jari |
578 |
treeNode = node; |
2 |
26 Feb 07 |
jari |
579 |
} |
2 |
26 Feb 07 |
jari |
580 |
} |
2 |
26 Feb 07 |
jari |
581 |
} |
2 |
26 Feb 07 |
jari |
582 |
} |
2 |
26 Feb 07 |
jari |
583 |
if(treeNode != null) { |
2 |
26 Feb 07 |
jari |
584 |
node = (DefaultMutableTreeNode)treeNode.getParent(); |
2 |
26 Feb 07 |
jari |
585 |
if(node.getChildCount() > 1) { |
2 |
26 Feb 07 |
jari |
586 |
node = (DefaultMutableTreeNode)node.getChildAt(1); |
2 |
26 Feb 07 |
jari |
587 |
return node; |
2 |
26 Feb 07 |
jari |
588 |
} |
2 |
26 Feb 07 |
jari |
589 |
} |
2 |
26 Feb 07 |
jari |
590 |
return null; |
2 |
26 Feb 07 |
jari |
591 |
} |
2 |
26 Feb 07 |
jari |
592 |
|
2 |
26 Feb 07 |
jari |
/** Executes the script specified by the ID. |
2 |
26 Feb 07 |
jari |
* @param index Source script ID. |
2 |
26 Feb 07 |
jari |
595 |
*/ |
2 |
26 Feb 07 |
jari |
596 |
public void runScript(int index) { |
2 |
26 Feb 07 |
jari |
597 |
if(index >= scripts.size()) |
2 |
26 Feb 07 |
jari |
598 |
return; |
2 |
26 Feb 07 |
jari |
599 |
|
2 |
26 Feb 07 |
jari |
600 |
Script script = (Script)scripts.elementAt(index); |
2 |
26 Feb 07 |
jari |
601 |
ScriptRunner runner = new ScriptRunner(script, actionManager, framework); |
2 |
26 Feb 07 |
jari |
602 |
runner.setOutputMode(ScriptConstants.SCRIPT_OUTPUT_MODE_INTERNAL_OUTPUT); |
2 |
26 Feb 07 |
jari |
603 |
runner.execute(); |
2 |
26 Feb 07 |
jari |
604 |
} |
2 |
26 Feb 07 |
jari |
605 |
|
2 |
26 Feb 07 |
jari |
/** Runs the script contained in the ScriptDocument. |
2 |
26 Feb 07 |
jari |
* @param scriptDoc Source script. |
2 |
26 Feb 07 |
jari |
608 |
*/ |
2 |
26 Feb 07 |
jari |
609 |
public void runScript(ScriptDocument scriptDoc) { |
2 |
26 Feb 07 |
jari |
610 |
Script script = getScriptObjectForDocument(scriptDoc); |
2 |
26 Feb 07 |
jari |
611 |
if(script == null) |
2 |
26 Feb 07 |
jari |
612 |
return; |
2 |
26 Feb 07 |
jari |
613 |
|
2 |
26 Feb 07 |
jari |
614 |
ScriptRunner runner = new ScriptRunner(script, actionManager, framework); |
2 |
26 Feb 07 |
jari |
615 |
runner.setOutputMode(ScriptConstants.SCRIPT_OUTPUT_MODE_INTERNAL_OUTPUT); |
2 |
26 Feb 07 |
jari |
616 |
runner.execute(); |
2 |
26 Feb 07 |
jari |
617 |
} |
2 |
26 Feb 07 |
jari |
618 |
|
2 |
26 Feb 07 |
jari |
/** Delivers a <CODE>Script</CODE> object in the collection that wraps the passed |
2 |
26 Feb 07 |
jari |
* <CODE>ScriptDocument</CODE> |
2 |
26 Feb 07 |
jari |
* @param doc source document. |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
623 |
*/ |
2 |
26 Feb 07 |
jari |
624 |
public Script getScriptObjectForDocument(ScriptDocument doc) { |
2 |
26 Feb 07 |
jari |
625 |
Script script; |
2 |
26 Feb 07 |
jari |
626 |
for(int i = 0; i < scripts.size(); i++) { |
2 |
26 Feb 07 |
jari |
627 |
script = (Script)(scripts.elementAt(i)); |
2 |
26 Feb 07 |
jari |
628 |
if(script.getScriptDocument() == doc) |
2 |
26 Feb 07 |
jari |
629 |
return script; |
2 |
26 Feb 07 |
jari |
630 |
} |
2 |
26 Feb 07 |
jari |
631 |
return null; |
2 |
26 Feb 07 |
jari |
632 |
} |
2 |
26 Feb 07 |
jari |
633 |
|
2 |
26 Feb 07 |
jari |
/** Returns MeV's main frame component |
2 |
26 Feb 07 |
jari |
635 |
*/ |
2 |
26 Feb 07 |
jari |
636 |
public Frame getFrame() { |
2 |
26 Feb 07 |
jari |
637 |
return this.framework.getFrame(); |
2 |
26 Feb 07 |
jari |
638 |
} |
2 |
26 Feb 07 |
jari |
639 |
|
2 |
26 Feb 07 |
jari |
/** Serves the current experiment object in MeV. This is the primary |
2 |
26 Feb 07 |
jari |
* (initial) data source. |
2 |
26 Feb 07 |
jari |
* @return */ |
2 |
26 Feb 07 |
jari |
643 |
public Experiment getCurrentExperiment() { |
2 |
26 Feb 07 |
jari |
644 |
return framework.getData().getExperiment(); |
2 |
26 Feb 07 |
jari |
645 |
} |
2 |
26 Feb 07 |
jari |
646 |
|
2 |
26 Feb 07 |
jari |
/** Validates script for parameter rule violations of type or possibly |
2 |
26 Feb 07 |
jari |
* range constraints when appropriate. Return of true signifies valid |
2 |
26 Feb 07 |
jari |
* parameters based on current supporting parameter information XML. |
2 |
26 Feb 07 |
jari |
* Errors are logged to the passed <CODE>ErrorLog</CODE>. |
2 |
26 Feb 07 |
jari |
* @param tree ScriptTree to validate. |
2 |
26 Feb 07 |
jari |
* @param log <CODE>ErrorLog</CODE> to collect possible violations. |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
654 |
*/ |
2 |
26 Feb 07 |
jari |
655 |
public boolean validateParameters(ScriptTree tree, ErrorLog log) { |
2 |
26 Feb 07 |
jari |
656 |
boolean isValid = true; |
2 |
26 Feb 07 |
jari |
657 |
if(this.validator != null && this.validator.isEnabled()) { |
2 |
26 Feb 07 |
jari |
658 |
if( ! (validator.validate(this, tree, log)) ) { |
2 |
26 Feb 07 |
jari |
//REPORT ERRORS |
2 |
26 Feb 07 |
jari |
660 |
log.reportAllListings(); |
2 |
26 Feb 07 |
jari |
661 |
isValid = false; |
2 |
26 Feb 07 |
jari |
662 |
} |
2 |
26 Feb 07 |
jari |
663 |
} else { |
2 |
26 Feb 07 |
jari |
//Report validation disabled |
2 |
26 Feb 07 |
jari |
665 |
isValid = false; |
2 |
26 Feb 07 |
jari |
666 |
} |
2 |
26 Feb 07 |
jari |
667 |
return isValid; |
2 |
26 Feb 07 |
jari |
668 |
} |
2 |
26 Feb 07 |
jari |
669 |
|
2 |
26 Feb 07 |
jari |
/** Returns a set of valid parameters given a passed algorithm name. |
2 |
26 Feb 07 |
jari |
* @param algName Algorithm name. |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
673 |
*/ |
2 |
26 Feb 07 |
jari |
674 |
public String getValidParametersTable(String algName) { |
2 |
26 Feb 07 |
jari |
675 |
if(validator == null) |
2 |
26 Feb 07 |
jari |
676 |
return null; |
2 |
26 Feb 07 |
jari |
677 |
return validator.getValidParameterTable(algName); |
2 |
26 Feb 07 |
jari |
678 |
} |
2 |
26 Feb 07 |
jari |
679 |
|
2 |
26 Feb 07 |
jari |
/** Returns a Hashtable of valid key value pairs for the algorithm |
2 |
26 Feb 07 |
jari |
* @param algName algorithm name |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
683 |
*/ |
2 |
26 Feb 07 |
jari |
684 |
public Hashtable getParameterHash(String algName) { |
2 |
26 Feb 07 |
jari |
685 |
if(validator == null) |
2 |
26 Feb 07 |
jari |
686 |
return null; |
2 |
26 Feb 07 |
jari |
687 |
return validator.getParameterHash(algName); |
2 |
26 Feb 07 |
jari |
688 |
} |
2 |
26 Feb 07 |
jari |
689 |
|
2 |
26 Feb 07 |
jari |
/** Returns <CODE>ParmaterAttributes</CODE> object for the specified algorithm. |
2 |
26 Feb 07 |
jari |
* @param algName Algorithm name |
2 |
26 Feb 07 |
jari |
* @param key parameter key |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
694 |
*/ |
2 |
26 Feb 07 |
jari |
695 |
public ParameterAttributes getParameterAttributes(String algName, String key) { |
2 |
26 Feb 07 |
jari |
696 |
if(validator == null) |
2 |
26 Feb 07 |
jari |
697 |
return null; |
2 |
26 Feb 07 |
jari |
698 |
return validator.getParameterAttributes(algName, key); |
2 |
26 Feb 07 |
jari |
699 |
|
2 |
26 Feb 07 |
jari |
700 |
} |
2 |
26 Feb 07 |
jari |
701 |
|
2 |
26 Feb 07 |
jari |
702 |
|
2 |
26 Feb 07 |
jari |
703 |
|
2 |
26 Feb 07 |
jari |
704 |
private void writeObject(java.io.ObjectOutputStream oos) throws java.io.IOException { |
2 |
26 Feb 07 |
jari |
705 |
|
2 |
26 Feb 07 |
jari |
// oos.writeObject(actionManager); |
2 |
26 Feb 07 |
jari |
//oos.writeObject(table); |
2 |
26 Feb 07 |
jari |
708 |
oos.writeInt(scriptNum); |
2 |
26 Feb 07 |
jari |
// oos.writeObject(framework); |
2 |
26 Feb 07 |
jari |
// oos.writeObject(validator); |
2 |
26 Feb 07 |
jari |
// oos.writeObject(scripts); |
2 |
26 Feb 07 |
jari |
712 |
|
2 |
26 Feb 07 |
jari |
713 |
} |
2 |
26 Feb 07 |
jari |
714 |
|
2 |
26 Feb 07 |
jari |
715 |
|
2 |
26 Feb 07 |
jari |
716 |
|
2 |
26 Feb 07 |
jari |
717 |
private void readObject(java.io.ObjectInputStream ois) throws java.io.IOException, ClassNotFoundException { |
2 |
26 Feb 07 |
jari |
718 |
|
2 |
26 Feb 07 |
jari |
//this.actionManager = (ActionManager)ois.readObject(); |
2 |
26 Feb 07 |
jari |
// this.table = (ScriptTable)ois.readObject(); |
2 |
26 Feb 07 |
jari |
721 |
this.scriptNum = ois.readInt(); |
2 |
26 Feb 07 |
jari |
// this.framework = (IFramework)ois.readObject(); |
2 |
26 Feb 07 |
jari |
// this.scripts = (Vector)ois.readObject(); |
2 |
26 Feb 07 |
jari |
724 |
} |
2 |
26 Feb 07 |
jari |
725 |
|
2 |
26 Feb 07 |
jari |
726 |
} |