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 |
* ScriptHandler.java |
2 |
26 Feb 07 |
jari |
7 |
* |
2 |
26 Feb 07 |
jari |
* Created on February 14, 2004, 10:44 PM |
2 |
26 Feb 07 |
jari |
9 |
*/ |
2 |
26 Feb 07 |
jari |
10 |
|
2 |
26 Feb 07 |
jari |
11 |
package org.tigr.microarray.mev.script.util; |
2 |
26 Feb 07 |
jari |
12 |
|
2 |
26 Feb 07 |
jari |
13 |
import java.io.File; |
2 |
26 Feb 07 |
jari |
14 |
import java.io.FileWriter; |
2 |
26 Feb 07 |
jari |
15 |
import java.io.IOException; |
2 |
26 Feb 07 |
jari |
16 |
import java.io.Serializable; |
2 |
26 Feb 07 |
jari |
17 |
import java.io.Writer; |
2 |
26 Feb 07 |
jari |
18 |
import java.util.Enumeration; |
2 |
26 Feb 07 |
jari |
19 |
import java.util.Hashtable; |
2 |
26 Feb 07 |
jari |
20 |
import java.util.Iterator; |
2 |
26 Feb 07 |
jari |
21 |
import java.util.Map; |
2 |
26 Feb 07 |
jari |
22 |
import java.util.Set; |
2 |
26 Feb 07 |
jari |
23 |
import java.util.StringTokenizer; |
2 |
26 Feb 07 |
jari |
24 |
import java.util.Vector; |
2 |
26 Feb 07 |
jari |
25 |
|
2 |
26 Feb 07 |
jari |
26 |
import org.apache.xerces.dom.DOMImplementationImpl; |
2 |
26 Feb 07 |
jari |
27 |
import org.apache.xerces.parsers.DOMParser; |
2 |
26 Feb 07 |
jari |
28 |
import org.tigr.microarray.mev.cluster.algorithm.AlgorithmData; |
2 |
26 Feb 07 |
jari |
29 |
import org.tigr.microarray.mev.cluster.algorithm.AlgorithmParameters; |
2 |
26 Feb 07 |
jari |
30 |
import org.tigr.microarray.mev.cluster.gui.impl.dialogs.Progress; |
2 |
26 Feb 07 |
jari |
31 |
import org.tigr.microarray.mev.script.ScriptManager; |
2 |
26 Feb 07 |
jari |
32 |
import org.tigr.microarray.mev.script.event.ScriptDocumentEvent; |
2 |
26 Feb 07 |
jari |
33 |
import org.tigr.microarray.mev.script.event.ScriptEventListener; |
2 |
26 Feb 07 |
jari |
34 |
import org.tigr.util.FloatMatrix; |
2 |
26 Feb 07 |
jari |
35 |
import org.w3c.dom.Comment; |
2 |
26 Feb 07 |
jari |
36 |
import org.w3c.dom.Document; |
2 |
26 Feb 07 |
jari |
37 |
import org.w3c.dom.DocumentType; |
2 |
26 Feb 07 |
jari |
38 |
import org.w3c.dom.Element; |
2 |
26 Feb 07 |
jari |
39 |
import org.w3c.dom.NamedNodeMap; |
2 |
26 Feb 07 |
jari |
40 |
import org.w3c.dom.Node; |
2 |
26 Feb 07 |
jari |
41 |
import org.w3c.dom.NodeList; |
2 |
26 Feb 07 |
jari |
42 |
import org.w3c.dom.Text; |
2 |
26 Feb 07 |
jari |
43 |
import org.xml.sax.SAXException; |
2 |
26 Feb 07 |
jari |
44 |
import org.xml.sax.SAXParseException; |
2 |
26 Feb 07 |
jari |
45 |
import org.xml.sax.helpers.DefaultHandler; |
2 |
26 Feb 07 |
jari |
46 |
|
2 |
26 Feb 07 |
jari |
47 |
|
2 |
26 Feb 07 |
jari |
48 |
|
2 |
26 Feb 07 |
jari |
/** DocumentBase is the base class for <CODE>ScriptDocument</CODE> objects |
2 |
26 Feb 07 |
jari |
* and maintains core function for DOM creation, modification, and output. |
2 |
26 Feb 07 |
jari |
* @author braisted |
2 |
26 Feb 07 |
jari |
52 |
*/ |
2 |
26 Feb 07 |
jari |
53 |
public class DocumentBase extends DefaultHandler implements Serializable { |
2 |
26 Feb 07 |
jari |
54 |
public static final long serialVersionUID = 1000102010302010001L; |
2 |
26 Feb 07 |
jari |
/** Current verson to append |
2 |
26 Feb 07 |
jari |
56 |
*/ |
2 |
26 Feb 07 |
jari |
57 |
protected String tm4ScriptVersion = "1.0"; |
2 |
26 Feb 07 |
jari |
/** script version |
2 |
26 Feb 07 |
jari |
59 |
*/ |
2 |
26 Feb 07 |
jari |
60 |
protected String mevScriptVersion = "1.0"; |
2 |
26 Feb 07 |
jari |
/** <CODE>ScriptManager</CODE> to be used as a outward communication mode. |
2 |
26 Feb 07 |
jari |
62 |
*/ |
2 |
26 Feb 07 |
jari |
63 |
protected ScriptManager manager; |
2 |
26 Feb 07 |
jari |
64 |
|
2 |
26 Feb 07 |
jari |
/** XML Document |
2 |
26 Feb 07 |
jari |
66 |
*/ |
2 |
26 Feb 07 |
jari |
67 |
protected Document document; |
2 |
26 Feb 07 |
jari |
/** Script text string. This is kept current for fast rendering. |
2 |
26 Feb 07 |
jari |
69 |
*/ |
2 |
26 Feb 07 |
jari |
70 |
protected String scriptText; |
2 |
26 Feb 07 |
jari |
/** Root element |
2 |
26 Feb 07 |
jari |
72 |
*/ |
2 |
26 Feb 07 |
jari |
73 |
protected Element root; |
2 |
26 Feb 07 |
jari |
/** mev Element |
2 |
26 Feb 07 |
jari |
75 |
*/ |
2 |
26 Feb 07 |
jari |
76 |
protected Element mevElement; |
2 |
26 Feb 07 |
jari |
/** Primary data element |
2 |
26 Feb 07 |
jari |
78 |
*/ |
2 |
26 Feb 07 |
jari |
79 |
protected Element primaryDataElement; |
2 |
26 Feb 07 |
jari |
/** main comment element. |
2 |
26 Feb 07 |
jari |
81 |
*/ |
2 |
26 Feb 07 |
jari |
82 |
protected Element commentElement; |
2 |
26 Feb 07 |
jari |
83 |
|
2 |
26 Feb 07 |
jari |
/** Analysis element. |
2 |
26 Feb 07 |
jari |
85 |
*/ |
2 |
26 Feb 07 |
jari |
86 |
protected Element analysisElement; |
2 |
26 Feb 07 |
jari |
87 |
|
2 |
26 Feb 07 |
jari |
/** Data id incrementer. Increases as document grows. |
2 |
26 Feb 07 |
jari |
89 |
*/ |
2 |
26 Feb 07 |
jari |
90 |
protected int currDataID = 1; |
2 |
26 Feb 07 |
jari |
/** <CODE>AlgorithmSet</CODE> ID incrementer to increase during |
2 |
26 Feb 07 |
jari |
* script expansion. |
2 |
26 Feb 07 |
jari |
93 |
*/ |
2 |
26 Feb 07 |
jari |
94 |
protected int currAlgSetID = 1; |
2 |
26 Feb 07 |
jari |
/** Line separator for script rendering. |
2 |
26 Feb 07 |
jari |
96 |
*/ |
2 |
26 Feb 07 |
jari |
97 |
protected String lineSeparator = System.getProperty("line.separator"); |
2 |
26 Feb 07 |
jari |
/** Indent. |
2 |
26 Feb 07 |
jari |
99 |
*/ |
2 |
26 Feb 07 |
jari |
100 |
protected String indent = " "; |
2 |
26 Feb 07 |
jari |
101 |
|
2 |
26 Feb 07 |
jari |
/** Records number of errors found on validation. |
2 |
26 Feb 07 |
jari |
103 |
*/ |
2 |
26 Feb 07 |
jari |
104 |
protected int parseErrors = 0; |
2 |
26 Feb 07 |
jari |
/** The <CODE>ErrorLog</CODE> object dedicated to this object. |
2 |
26 Feb 07 |
jari |
106 |
*/ |
2 |
26 Feb 07 |
jari |
107 |
protected ErrorLog errorLog; |
2 |
26 Feb 07 |
jari |
108 |
|
2 |
26 Feb 07 |
jari |
/** Script listner vector. This will permit update events |
2 |
26 Feb 07 |
jari |
* to be handled correctly. |
2 |
26 Feb 07 |
jari |
111 |
*/ |
2 |
26 Feb 07 |
jari |
112 |
private Vector listeners; |
2 |
26 Feb 07 |
jari |
113 |
protected boolean parsedScript = false; |
2 |
26 Feb 07 |
jari |
114 |
|
2 |
26 Feb 07 |
jari |
/** Inidicates if the text string represenation is current |
2 |
26 Feb 07 |
jari |
116 |
*/ |
2 |
26 Feb 07 |
jari |
117 |
protected boolean isTextCurrent = false; |
2 |
26 Feb 07 |
jari |
118 |
|
2 |
26 Feb 07 |
jari |
119 |
|
2 |
26 Feb 07 |
jari |
/** Creates a new instance of DocumentBase |
2 |
26 Feb 07 |
jari |
* @param manager <CODE>ScriptManager</CODE> object. |
2 |
26 Feb 07 |
jari |
122 |
*/ |
2 |
26 Feb 07 |
jari |
123 |
public DocumentBase(ScriptManager manager) { |
2 |
26 Feb 07 |
jari |
124 |
this.manager = manager; |
2 |
26 Feb 07 |
jari |
125 |
errorLog = new ErrorLog(manager); |
2 |
26 Feb 07 |
jari |
126 |
listeners = new Vector(); |
2 |
26 Feb 07 |
jari |
127 |
|
2 |
26 Feb 07 |
jari |
128 |
DOMImplementationImpl impl = new DOMImplementationImpl(); |
2 |
26 Feb 07 |
jari |
129 |
DocumentType docType = impl.createDocumentType("TM4ML",null,"../../config/mev_script_dtd.dtd"); |
2 |
26 Feb 07 |
jari |
130 |
|
2 |
26 Feb 07 |
jari |
131 |
document = impl.createDocument(null, "TM4ML", docType); |
2 |
26 Feb 07 |
jari |
132 |
|
2 |
26 Feb 07 |
jari |
133 |
root = document.getDocumentElement(); |
2 |
26 Feb 07 |
jari |
134 |
root.setAttribute("version", tm4ScriptVersion); |
2 |
26 Feb 07 |
jari |
135 |
|
2 |
26 Feb 07 |
jari |
136 |
mevElement = document.createElement("mev"); |
2 |
26 Feb 07 |
jari |
137 |
mevElement.setAttribute("version", mevScriptVersion); |
2 |
26 Feb 07 |
jari |
138 |
root.appendChild(mevElement); |
2 |
26 Feb 07 |
jari |
139 |
|
2 |
26 Feb 07 |
jari |
140 |
analysisElement = document.createElement("analysis"); |
2 |
26 Feb 07 |
jari |
141 |
primaryDataElement = document.createElement("primary_data"); |
2 |
26 Feb 07 |
jari |
142 |
primaryDataElement.setAttribute("id", "1"); |
2 |
26 Feb 07 |
jari |
143 |
|
2 |
26 Feb 07 |
jari |
144 |
createAlgorithmSet(1); //default algoritm set |
2 |
26 Feb 07 |
jari |
145 |
|
2 |
26 Feb 07 |
jari |
//Element fileListElement = document.createElement("file_list"); |
2 |
26 Feb 07 |
jari |
//primaryDataElement.appendChild(fileListElement); |
2 |
26 Feb 07 |
jari |
148 |
|
2 |
26 Feb 07 |
jari |
149 |
mevElement.appendChild(primaryDataElement); |
2 |
26 Feb 07 |
jari |
150 |
mevElement.appendChild(analysisElement); |
2 |
26 Feb 07 |
jari |
151 |
|
2 |
26 Feb 07 |
jari |
152 |
scriptText = new String(""); |
2 |
26 Feb 07 |
jari |
153 |
updateScript(); |
2 |
26 Feb 07 |
jari |
154 |
|
2 |
26 Feb 07 |
jari |
// Element rootElement = new Element("tm4"); |
2 |
26 Feb 07 |
jari |
// document = new Document(rootElement); |
2 |
26 Feb 07 |
jari |
157 |
} |
2 |
26 Feb 07 |
jari |
158 |
|
2 |
26 Feb 07 |
jari |
159 |
|
2 |
26 Feb 07 |
jari |
/** Creates a new instance of DocumentBase. |
2 |
26 Feb 07 |
jari |
* @param date creation datae |
2 |
26 Feb 07 |
jari |
* @param name name attribute |
2 |
26 Feb 07 |
jari |
* @param description Description attribute. |
2 |
26 Feb 07 |
jari |
* @param manager ScriptManager. |
2 |
26 Feb 07 |
jari |
165 |
*/ |
2 |
26 Feb 07 |
jari |
166 |
public DocumentBase(String date, String name, String description, ScriptManager manager) { |
2 |
26 Feb 07 |
jari |
167 |
this.manager = manager; |
2 |
26 Feb 07 |
jari |
168 |
errorLog = new ErrorLog(manager); |
2 |
26 Feb 07 |
jari |
169 |
listeners = new Vector(); |
2 |
26 Feb 07 |
jari |
170 |
|
2 |
26 Feb 07 |
jari |
171 |
DOMImplementationImpl impl = new DOMImplementationImpl(); |
2 |
26 Feb 07 |
jari |
172 |
DocumentType docType = impl.createDocumentType("TM4ML",null,"../../config/mev_script_dtd.dtd"); |
2 |
26 Feb 07 |
jari |
173 |
|
2 |
26 Feb 07 |
jari |
174 |
document = impl.createDocument(null, "TM4ML", docType); |
2 |
26 Feb 07 |
jari |
175 |
|
2 |
26 Feb 07 |
jari |
176 |
root = document.getDocumentElement(); |
2 |
26 Feb 07 |
jari |
177 |
root.setAttribute("version", tm4ScriptVersion); |
2 |
26 Feb 07 |
jari |
178 |
|
2 |
26 Feb 07 |
jari |
179 |
|
2 |
26 Feb 07 |
jari |
180 |
mevElement = document.createElement("mev"); |
2 |
26 Feb 07 |
jari |
181 |
mevElement.setAttribute("version", mevScriptVersion); |
2 |
26 Feb 07 |
jari |
182 |
root.appendChild(mevElement); |
2 |
26 Feb 07 |
jari |
183 |
|
2 |
26 Feb 07 |
jari |
184 |
if(date != null) { |
2 |
26 Feb 07 |
jari |
185 |
setDateComment(date); |
2 |
26 Feb 07 |
jari |
186 |
} |
2 |
26 Feb 07 |
jari |
187 |
|
2 |
26 Feb 07 |
jari |
188 |
if(name != null) { |
2 |
26 Feb 07 |
jari |
189 |
setNameComment(name); |
2 |
26 Feb 07 |
jari |
190 |
} |
2 |
26 Feb 07 |
jari |
191 |
|
2 |
26 Feb 07 |
jari |
192 |
if(description != null) { |
2 |
26 Feb 07 |
jari |
193 |
setDescriptionComment(description); |
2 |
26 Feb 07 |
jari |
194 |
} |
2 |
26 Feb 07 |
jari |
195 |
|
2 |
26 Feb 07 |
jari |
196 |
analysisElement = document.createElement("analysis"); |
2 |
26 Feb 07 |
jari |
197 |
primaryDataElement = document.createElement("primary_data"); |
2 |
26 Feb 07 |
jari |
198 |
primaryDataElement.setAttribute("id", "1"); |
2 |
26 Feb 07 |
jari |
199 |
|
2 |
26 Feb 07 |
jari |
200 |
createAlgorithmSet(1); //default algoritm set |
2 |
26 Feb 07 |
jari |
201 |
|
2 |
26 Feb 07 |
jari |
202 |
mevElement.appendChild(primaryDataElement); |
2 |
26 Feb 07 |
jari |
203 |
mevElement.appendChild(analysisElement); |
2 |
26 Feb 07 |
jari |
204 |
|
2 |
26 Feb 07 |
jari |
205 |
scriptText = new String(""); |
2 |
26 Feb 07 |
jari |
206 |
updateScript(); |
2 |
26 Feb 07 |
jari |
207 |
} |
2 |
26 Feb 07 |
jari |
208 |
|
2 |
26 Feb 07 |
jari |
/** Copy constructor |
2 |
26 Feb 07 |
jari |
* @param base base object to copy |
2 |
26 Feb 07 |
jari |
211 |
*/ |
2 |
26 Feb 07 |
jari |
212 |
public DocumentBase(DocumentBase base) { |
2 |
26 Feb 07 |
jari |
213 |
this.manager = base.getManager(); |
2 |
26 Feb 07 |
jari |
214 |
this.document = copyDocument(base.getDocument()); |
2 |
26 Feb 07 |
jari |
215 |
} |
2 |
26 Feb 07 |
jari |
216 |
|
2 |
26 Feb 07 |
jari |
217 |
|
2 |
26 Feb 07 |
jari |
/** Constructs a copy of the document passed |
2 |
26 Feb 07 |
jari |
* @param doc Document to copy |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
221 |
*/ |
2 |
26 Feb 07 |
jari |
222 |
private Document copyDocument(Document doc) { |
2 |
26 Feb 07 |
jari |
223 |
DOMImplementationImpl impl = new DOMImplementationImpl(); |
2 |
26 Feb 07 |
jari |
224 |
DocumentType docType = impl.createDocumentType("TM4ML",null,"../../config/mev_script_dtd.dtd"); |
2 |
26 Feb 07 |
jari |
225 |
|
2 |
26 Feb 07 |
jari |
226 |
Document newDoc = impl.createDocument(null, "TM4ML", docType); |
2 |
26 Feb 07 |
jari |
227 |
copyChildren(doc.getDocumentElement(), newDoc.getDocumentElement(), newDoc); |
2 |
26 Feb 07 |
jari |
228 |
isTextCurrent = false; |
2 |
26 Feb 07 |
jari |
229 |
return newDoc; |
2 |
26 Feb 07 |
jari |
230 |
} |
2 |
26 Feb 07 |
jari |
231 |
|
2 |
26 Feb 07 |
jari |
/** Recursive method to copy document children, used as |
2 |
26 Feb 07 |
jari |
* a Document copy utility. |
2 |
26 Feb 07 |
jari |
* @param docElement Document Element to use as source for |
2 |
26 Feb 07 |
jari |
* children to copy |
2 |
26 Feb 07 |
jari |
* @param newElement destination element for copied children |
2 |
26 Feb 07 |
jari |
* @param newDoc New Document to import new nodes. |
2 |
26 Feb 07 |
jari |
238 |
*/ |
2 |
26 Feb 07 |
jari |
239 |
private void copyChildren(org.w3c.dom.Node docElement, org.w3c.dom.Node newElement, org.w3c.dom.Document newDoc) { |
2 |
26 Feb 07 |
jari |
240 |
NodeList nodes = docElement.getChildNodes(); |
2 |
26 Feb 07 |
jari |
241 |
org.w3c.dom.Node newNode; |
2 |
26 Feb 07 |
jari |
242 |
org.w3c.dom.Node oldNode; |
2 |
26 Feb 07 |
jari |
243 |
|
2 |
26 Feb 07 |
jari |
244 |
for(int i = 0; i < nodes.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
245 |
oldNode = (org.w3c.dom.Node)(nodes.item(i)); |
2 |
26 Feb 07 |
jari |
246 |
|
2 |
26 Feb 07 |
jari |
247 |
newNode = newDoc.importNode(oldNode, false); |
2 |
26 Feb 07 |
jari |
248 |
newElement.appendChild(newNode); |
2 |
26 Feb 07 |
jari |
249 |
|
2 |
26 Feb 07 |
jari |
250 |
if(oldNode.hasChildNodes()) |
2 |
26 Feb 07 |
jari |
251 |
copyChildren(oldNode, newNode, newDoc); |
2 |
26 Feb 07 |
jari |
252 |
} |
2 |
26 Feb 07 |
jari |
253 |
isTextCurrent = false; |
2 |
26 Feb 07 |
jari |
254 |
} |
2 |
26 Feb 07 |
jari |
255 |
|
2 |
26 Feb 07 |
jari |
256 |
|
2 |
26 Feb 07 |
jari |
/** Set the Document object. |
2 |
26 Feb 07 |
jari |
* @param doc source Document |
2 |
26 Feb 07 |
jari |
259 |
*/ |
2 |
26 Feb 07 |
jari |
260 |
public void setDocument(Document doc) { |
2 |
26 Feb 07 |
jari |
261 |
document = doc; |
2 |
26 Feb 07 |
jari |
262 |
updateScript(); |
2 |
26 Feb 07 |
jari |
263 |
} |
2 |
26 Feb 07 |
jari |
264 |
|
2 |
26 Feb 07 |
jari |
/** Returns the base Document. |
2 |
26 Feb 07 |
jari |
266 |
*/ |
2 |
26 Feb 07 |
jari |
267 |
public Document getDocument() { |
2 |
26 Feb 07 |
jari |
268 |
return this.document; |
2 |
26 Feb 07 |
jari |
269 |
} |
2 |
26 Feb 07 |
jari |
270 |
|
2 |
26 Feb 07 |
jari |
271 |
|
2 |
26 Feb 07 |
jari |
/** Returns the <CODE>ScriptManager</CODE> for the script |
2 |
26 Feb 07 |
jari |
273 |
*/ |
2 |
26 Feb 07 |
jari |
274 |
public ScriptManager getManager() { |
2 |
26 Feb 07 |
jari |
275 |
return this.manager; |
2 |
26 Feb 07 |
jari |
276 |
} |
2 |
26 Feb 07 |
jari |
277 |
|
2 |
26 Feb 07 |
jari |
/** Sets the date |
2 |
26 Feb 07 |
jari |
* @param comment Date comment |
2 |
26 Feb 07 |
jari |
280 |
*/ |
2 |
26 Feb 07 |
jari |
281 |
public void setDateComment(String comment) { |
2 |
26 Feb 07 |
jari |
282 |
Comment nameElement = document.createComment(" Original Script Creation Date: " + comment +" "); |
2 |
26 Feb 07 |
jari |
283 |
mevElement.appendChild(nameElement); |
2 |
26 Feb 07 |
jari |
284 |
updateScript(); |
2 |
26 Feb 07 |
jari |
285 |
} |
2 |
26 Feb 07 |
jari |
286 |
|
2 |
26 Feb 07 |
jari |
/** Sets name comment. |
2 |
26 Feb 07 |
jari |
* @param comment name |
2 |
26 Feb 07 |
jari |
289 |
*/ |
2 |
26 Feb 07 |
jari |
290 |
public void setNameComment(String comment) { |
2 |
26 Feb 07 |
jari |
291 |
Comment nameElement = document.createComment(" Script Name: " + comment+" "); |
2 |
26 Feb 07 |
jari |
292 |
mevElement.appendChild(nameElement); |
2 |
26 Feb 07 |
jari |
293 |
updateScript(); |
2 |
26 Feb 07 |
jari |
294 |
} |
2 |
26 Feb 07 |
jari |
295 |
|
2 |
26 Feb 07 |
jari |
/** Sets description comment |
2 |
26 Feb 07 |
jari |
* @param comment description |
2 |
26 Feb 07 |
jari |
298 |
*/ |
2 |
26 Feb 07 |
jari |
299 |
public void setDescriptionComment(String comment) { |
2 |
26 Feb 07 |
jari |
300 |
Comment dElement = document.createComment(" Script Description: "+ comment + " "); |
2 |
26 Feb 07 |
jari |
301 |
mevElement.appendChild(dElement); |
2 |
26 Feb 07 |
jari |
302 |
updateScript(); |
2 |
26 Feb 07 |
jari |
303 |
} |
2 |
26 Feb 07 |
jari |
304 |
|
2 |
26 Feb 07 |
jari |
305 |
|
2 |
26 Feb 07 |
jari |
/** Creates a new algorithm set with the provided data id. |
2 |
26 Feb 07 |
jari |
* @param dataRef Data reference ID. |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
309 |
*/ |
2 |
26 Feb 07 |
jari |
310 |
private Element createAlgorithmSet(int dataRef){ |
2 |
26 Feb 07 |
jari |
311 |
Element algSetElement = document.createElement("alg_set"); |
2 |
26 Feb 07 |
jari |
312 |
algSetElement.setAttribute("set_id", String.valueOf(currAlgSetID)); |
2 |
26 Feb 07 |
jari |
313 |
algSetElement.setAttribute("input_data_ref", String.valueOf(dataRef)); |
2 |
26 Feb 07 |
jari |
314 |
analysisElement.appendChild(algSetElement); |
2 |
26 Feb 07 |
jari |
//updateScript(); |
2 |
26 Feb 07 |
jari |
316 |
currAlgSetID++; |
2 |
26 Feb 07 |
jari |
317 |
isTextCurrent = false; |
2 |
26 Feb 07 |
jari |
318 |
return algSetElement; |
2 |
26 Feb 07 |
jari |
319 |
} |
2 |
26 Feb 07 |
jari |
320 |
|
2 |
26 Feb 07 |
jari |
/** Returns an algorithm set by ID |
2 |
26 Feb 07 |
jari |
* @param setID id |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
324 |
*/ |
2 |
26 Feb 07 |
jari |
325 |
private Element getAlgorithmSetByID(int setID){ |
2 |
26 Feb 07 |
jari |
326 |
String id = String.valueOf(setID); |
2 |
26 Feb 07 |
jari |
327 |
NodeList elements = analysisElement.getElementsByTagName("alg_set"); |
2 |
26 Feb 07 |
jari |
328 |
|
2 |
26 Feb 07 |
jari |
329 |
for(int i = 0; i < elements.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
330 |
if(id.equals(((Element)elements.item(i)).getAttribute("set_id"))) |
2 |
26 Feb 07 |
jari |
331 |
return (Element)elements.item(i); |
2 |
26 Feb 07 |
jari |
332 |
} |
2 |
26 Feb 07 |
jari |
333 |
return null; |
2 |
26 Feb 07 |
jari |
334 |
} |
2 |
26 Feb 07 |
jari |
335 |
|
2 |
26 Feb 07 |
jari |
336 |
|
2 |
26 Feb 07 |
jari |
/** Returns an algorithm set by id |
2 |
26 Feb 07 |
jari |
* @param dataRef ref (data id) |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
340 |
*/ |
2 |
26 Feb 07 |
jari |
341 |
private Element getAlgorithmSetByDataRef(int dataRef) { |
2 |
26 Feb 07 |
jari |
342 |
int setID = -1; |
2 |
26 Feb 07 |
jari |
343 |
String dataID = String.valueOf(dataRef); |
2 |
26 Feb 07 |
jari |
//if data ref. is to primary data return default alg set |
2 |
26 Feb 07 |
jari |
345 |
if(dataRef == 1) |
2 |
26 Feb 07 |
jari |
346 |
return getAlgorithmSetByID(1); |
2 |
26 Feb 07 |
jari |
347 |
|
2 |
26 Feb 07 |
jari |
348 |
NodeList list = document.getElementsByTagName("algorithm"); |
2 |
26 Feb 07 |
jari |
349 |
Node algNode = null, node; |
2 |
26 Feb 07 |
jari |
350 |
for(int i = 0; i < list.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
351 |
node = list.item(i); |
2 |
26 Feb 07 |
jari |
352 |
if(dataID.equals(((Element)node).getAttribute("input_data_ref"))){ |
2 |
26 Feb 07 |
jari |
353 |
algNode = node; |
2 |
26 Feb 07 |
jari |
354 |
break; |
2 |
26 Feb 07 |
jari |
355 |
} |
2 |
26 Feb 07 |
jari |
356 |
} |
2 |
26 Feb 07 |
jari |
357 |
|
2 |
26 Feb 07 |
jari |
//the data node has no algs on it, create an alg set, pass the current id back |
2 |
26 Feb 07 |
jari |
359 |
if(algNode == null) { |
2 |
26 Feb 07 |
jari |
360 |
return this.createAlgorithmSet(dataRef); |
2 |
26 Feb 07 |
jari |
361 |
} else { |
2 |
26 Feb 07 |
jari |
362 |
return (Element)algNode.getParentNode(); |
2 |
26 Feb 07 |
jari |
363 |
} |
2 |
26 Feb 07 |
jari |
364 |
} |
2 |
26 Feb 07 |
jari |
365 |
|
2 |
26 Feb 07 |
jari |
366 |
|
2 |
26 Feb 07 |
jari |
367 |
|
2 |
26 Feb 07 |
jari |
368 |
|
2 |
26 Feb 07 |
jari |
//need to get an algorithm ID, and get or make an alg set ref. |
2 |
26 Feb 07 |
jari |
370 |
|
2 |
26 Feb 07 |
jari |
/** Returns true if algorithm is appended. This is a primary method for |
2 |
26 Feb 07 |
jari |
* script expansion. |
2 |
26 Feb 07 |
jari |
* @param data AlgorithmData with parameters. |
2 |
26 Feb 07 |
jari |
* @param inputDataRef Input data reference (ID) |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
376 |
*/ |
2 |
26 Feb 07 |
jari |
377 |
public boolean appendAlgorithm(AlgorithmData data, int inputDataRef) { |
2 |
26 Feb 07 |
jari |
378 |
|
2 |
26 Feb 07 |
jari |
379 |
Element algElement = document.createElement("algorithm"); |
2 |
26 Feb 07 |
jari |
380 |
Element currElement; |
2 |
26 Feb 07 |
jari |
381 |
boolean added = false; |
2 |
26 Feb 07 |
jari |
382 |
|
2 |
26 Feb 07 |
jari |
383 |
Element algSetElement = this.getAlgorithmSetByDataRef(inputDataRef); |
2 |
26 Feb 07 |
jari |
384 |
|
2 |
26 Feb 07 |
jari |
385 |
if(algSetElement == null) { |
2 |
26 Feb 07 |
jari |
386 |
return false; |
2 |
26 Feb 07 |
jari |
387 |
} |
2 |
26 Feb 07 |
jari |
388 |
|
2 |
26 Feb 07 |
jari |
389 |
Text nameText, keyText, valueText; |
2 |
26 Feb 07 |
jari |
390 |
|
2 |
26 Feb 07 |
jari |
391 |
AlgorithmParameters params = data.getParams(); |
2 |
26 Feb 07 |
jari |
392 |
String name = params.getString("name"); |
2 |
26 Feb 07 |
jari |
393 |
String alg_type = params.getString("alg-type"); |
2 |
26 Feb 07 |
jari |
394 |
int algID = algSetElement.getElementsByTagName("algorithm").getLength()+1; |
2 |
26 Feb 07 |
jari |
395 |
|
2 |
26 Feb 07 |
jari |
396 |
if(name != null){ |
2 |
26 Feb 07 |
jari |
//set attributes, name and input ref |
2 |
26 Feb 07 |
jari |
398 |
algElement.setAttribute("alg_name", name); |
2 |
26 Feb 07 |
jari |
399 |
algElement.setAttribute("input_data_ref", String.valueOf(inputDataRef)); |
2 |
26 Feb 07 |
jari |
400 |
algElement.setAttribute("alg_id", String.valueOf(algID)); |
2 |
26 Feb 07 |
jari |
401 |
algElement.setAttribute("alg_type", String.valueOf(alg_type)); |
2 |
26 Feb 07 |
jari |
//add parameter list with params |
2 |
26 Feb 07 |
jari |
403 |
addParameterList(algElement, params); |
2 |
26 Feb 07 |
jari |
404 |
|
2 |
26 Feb 07 |
jari |
//add matrices (or arrays, one dim matrices) |
2 |
26 Feb 07 |
jari |
406 |
Element matrices = document.createElement("mlist"); |
2 |
26 Feb 07 |
jari |
407 |
|
2 |
26 Feb 07 |
jari |
//Int arrays |
2 |
26 Feb 07 |
jari |
409 |
Map map = data.getIntArrays(); |
2 |
26 Feb 07 |
jari |
410 |
if(map.size() > 0) { |
2 |
26 Feb 07 |
jari |
411 |
addIntArrays(map, matrices); |
2 |
26 Feb 07 |
jari |
412 |
} |
2 |
26 Feb 07 |
jari |
413 |
|
2 |
26 Feb 07 |
jari |
//String arrays |
2 |
26 Feb 07 |
jari |
415 |
map = data.getStringArrays(); |
2 |
26 Feb 07 |
jari |
416 |
if(map.size() > 0) { |
2 |
26 Feb 07 |
jari |
417 |
addStringArrays(map, matrices); |
2 |
26 Feb 07 |
jari |
418 |
} |
2 |
26 Feb 07 |
jari |
419 |
|
2 |
26 Feb 07 |
jari |
//matrices |
2 |
26 Feb 07 |
jari |
421 |
map = data.getMatrixes(); |
2 |
26 Feb 07 |
jari |
422 |
if(map.size() > 0) { |
2 |
26 Feb 07 |
jari |
423 |
addMatrices(map, matrices); |
2 |
26 Feb 07 |
jari |
424 |
} |
2 |
26 Feb 07 |
jari |
425 |
|
2 |
26 Feb 07 |
jari |
//if there are matrices, add them |
2 |
26 Feb 07 |
jari |
427 |
if(matrices.getChildNodes().getLength() > 0) |
2 |
26 Feb 07 |
jari |
428 |
algElement.appendChild(matrices); |
2 |
26 Feb 07 |
jari |
429 |
|
2 |
26 Feb 07 |
jari |
//add output nodes |
2 |
26 Feb 07 |
jari |
431 |
String [] outputNodes = data.getStringArray("output-nodes"); |
2 |
26 Feb 07 |
jari |
432 |
Element outputNodeElement, dataElement; |
2 |
26 Feb 07 |
jari |
433 |
String outputClass; |
2 |
26 Feb 07 |
jari |
434 |
if(outputNodes != null){ |
2 |
26 Feb 07 |
jari |
435 |
|
2 |
26 Feb 07 |
jari |
436 |
outputNodeElement = document.createElement("output_data"); |
2 |
26 Feb 07 |
jari |
437 |
outputClass = data.getParams().getString("output-class"); |
2 |
26 Feb 07 |
jari |
438 |
if(outputClass != null) |
2 |
26 Feb 07 |
jari |
439 |
outputNodeElement.setAttribute("output_class", outputClass); |
2 |
26 Feb 07 |
jari |
440 |
for(int i = 0; i < outputNodes.length; i++) { |
2 |
26 Feb 07 |
jari |
441 |
currDataID++; |
2 |
26 Feb 07 |
jari |
442 |
dataElement = document.createElement("data_node"); |
2 |
26 Feb 07 |
jari |
443 |
dataElement.setAttribute("data_node_id", String.valueOf(this.currDataID)); |
2 |
26 Feb 07 |
jari |
444 |
dataElement.setAttribute("name", outputNodes[i]); |
2 |
26 Feb 07 |
jari |
445 |
outputNodeElement.appendChild(dataElement); |
2 |
26 Feb 07 |
jari |
446 |
} |
2 |
26 Feb 07 |
jari |
447 |
algElement.appendChild(outputNodeElement); |
2 |
26 Feb 07 |
jari |
448 |
} |
2 |
26 Feb 07 |
jari |
449 |
} |
2 |
26 Feb 07 |
jari |
450 |
algSetElement.appendChild(algElement); |
2 |
26 Feb 07 |
jari |
451 |
added = true; |
2 |
26 Feb 07 |
jari |
452 |
|
2 |
26 Feb 07 |
jari |
//don't automatically update text until needed -- Test 01.12.2005 -- |
2 |
26 Feb 07 |
jari |
//updateScript(); |
2 |
26 Feb 07 |
jari |
455 |
|
2 |
26 Feb 07 |
jari |
//set isTextCurrent to no to force update later |
2 |
26 Feb 07 |
jari |
457 |
isTextCurrent = false; |
2 |
26 Feb 07 |
jari |
458 |
|
2 |
26 Feb 07 |
jari |
459 |
fireScriptEvent(); |
2 |
26 Feb 07 |
jari |
460 |
return added; |
2 |
26 Feb 07 |
jari |
461 |
} |
2 |
26 Feb 07 |
jari |
462 |
|
2 |
26 Feb 07 |
jari |
463 |
|
2 |
26 Feb 07 |
jari |
/** Adds the parameter list to the model. |
2 |
26 Feb 07 |
jari |
* @param algElement Algorithm to recieve |
2 |
26 Feb 07 |
jari |
* @param params AlgorithmParameters |
2 |
26 Feb 07 |
jari |
467 |
*/ |
2 |
26 Feb 07 |
jari |
468 |
private void addParameterList(Element algElement, AlgorithmParameters params) { |
2 |
26 Feb 07 |
jari |
469 |
Map paramMap = params.getMap(); |
2 |
26 Feb 07 |
jari |
470 |
String key = "", value = ""; |
2 |
26 Feb 07 |
jari |
471 |
Element paramsElement, paramElement, keyElement, valueElement; |
2 |
26 Feb 07 |
jari |
472 |
|
2 |
26 Feb 07 |
jari |
473 |
if(paramMap.size() > 1) { |
2 |
26 Feb 07 |
jari |
474 |
Set keySet = paramMap.keySet(); |
2 |
26 Feb 07 |
jari |
475 |
Iterator iter = keySet.iterator(); |
2 |
26 Feb 07 |
jari |
476 |
paramsElement = document.createElement("plist"); |
2 |
26 Feb 07 |
jari |
477 |
|
2 |
26 Feb 07 |
jari |
478 |
while(iter.hasNext()){ |
2 |
26 Feb 07 |
jari |
479 |
key = (String)iter.next(); |
2 |
26 Feb 07 |
jari |
480 |
value = ((String)(paramMap.get(key))); |
2 |
26 Feb 07 |
jari |
481 |
|
2 |
26 Feb 07 |
jari |
//if key points to control data move on |
2 |
26 Feb 07 |
jari |
483 |
if(key.equals("name") || key.equals("output-class") || key.equals("alg-type")) |
2 |
26 Feb 07 |
jari |
484 |
continue; |
2 |
26 Feb 07 |
jari |
485 |
|
2 |
26 Feb 07 |
jari |
//make a param element |
2 |
26 Feb 07 |
jari |
487 |
paramElement = document.createElement("param"); |
2 |
26 Feb 07 |
jari |
488 |
|
2 |
26 Feb 07 |
jari |
//set key and value attributes |
2 |
26 Feb 07 |
jari |
490 |
paramElement.setAttribute("key", key); |
2 |
26 Feb 07 |
jari |
491 |
paramElement.setAttribute("value", value); |
2 |
26 Feb 07 |
jari |
492 |
|
2 |
26 Feb 07 |
jari |
//append param to params |
2 |
26 Feb 07 |
jari |
494 |
paramsElement.appendChild(paramElement); |
2 |
26 Feb 07 |
jari |
495 |
} |
2 |
26 Feb 07 |
jari |
496 |
algElement.appendChild(paramsElement); |
2 |
26 Feb 07 |
jari |
497 |
} |
2 |
26 Feb 07 |
jari |
498 |
} |
2 |
26 Feb 07 |
jari |
499 |
|
2 |
26 Feb 07 |
jari |
500 |
|
2 |
26 Feb 07 |
jari |
/** Adds integer arrays |
2 |
26 Feb 07 |
jari |
* @param map Map of the values. |
2 |
26 Feb 07 |
jari |
* @param mlist Matrix list Element |
2 |
26 Feb 07 |
jari |
504 |
*/ |
2 |
26 Feb 07 |
jari |
505 |
private void addIntArrays(Map map, Element mlist) { |
2 |
26 Feb 07 |
jari |
506 |
Object [] arrayObjectNames = map.keySet().toArray(); |
2 |
26 Feb 07 |
jari |
507 |
Element matrixElement, elementElement; |
2 |
26 Feb 07 |
jari |
508 |
int [] currentArray; |
2 |
26 Feb 07 |
jari |
509 |
|
2 |
26 Feb 07 |
jari |
510 |
String [] arrayNames = new String[arrayObjectNames.length]; |
2 |
26 Feb 07 |
jari |
511 |
|
2 |
26 Feb 07 |
jari |
512 |
for (int i = 0; i < arrayNames.length; i++) |
2 |
26 Feb 07 |
jari |
513 |
arrayNames[i] = (String)arrayObjectNames[i]; |
2 |
26 Feb 07 |
jari |
514 |
|
2 |
26 Feb 07 |
jari |
515 |
|
2 |
26 Feb 07 |
jari |
516 |
for(int i = 0; i < arrayNames.length; i++) { |
2 |
26 Feb 07 |
jari |
517 |
currentArray = (int [])map.get(arrayNames[i]); |
2 |
26 Feb 07 |
jari |
518 |
|
2 |
26 Feb 07 |
jari |
519 |
matrixElement = document.createElement("matrix"); |
2 |
26 Feb 07 |
jari |
520 |
matrixElement.setAttribute("name", arrayNames[i]); |
2 |
26 Feb 07 |
jari |
521 |
matrixElement.setAttribute("type", "int-array"); |
2 |
26 Feb 07 |
jari |
522 |
matrixElement.setAttribute("row_dim", String.valueOf(currentArray.length)); |
2 |
26 Feb 07 |
jari |
523 |
matrixElement.setAttribute("col_dim", "1"); |
2 |
26 Feb 07 |
jari |
524 |
|
2 |
26 Feb 07 |
jari |
525 |
for(int j = 0; j < currentArray.length; j++){ |
2 |
26 Feb 07 |
jari |
526 |
elementElement = document.createElement("element"); |
2 |
26 Feb 07 |
jari |
527 |
elementElement.setAttribute("row", String.valueOf(j)); |
2 |
26 Feb 07 |
jari |
528 |
elementElement.setAttribute("col", "0"); |
2 |
26 Feb 07 |
jari |
529 |
elementElement.setAttribute("value", String.valueOf(currentArray[j])); |
2 |
26 Feb 07 |
jari |
530 |
matrixElement.appendChild(elementElement); |
2 |
26 Feb 07 |
jari |
531 |
} |
2 |
26 Feb 07 |
jari |
532 |
|
2 |
26 Feb 07 |
jari |
533 |
mlist.appendChild(matrixElement); |
2 |
26 Feb 07 |
jari |
534 |
} |
2 |
26 Feb 07 |
jari |
535 |
} |
2 |
26 Feb 07 |
jari |
536 |
|
2 |
26 Feb 07 |
jari |
/** Add String arrays to the model |
2 |
26 Feb 07 |
jari |
* @param map value map |
2 |
26 Feb 07 |
jari |
* @param mlist Matrix list element. |
2 |
26 Feb 07 |
jari |
540 |
*/ |
2 |
26 Feb 07 |
jari |
541 |
private void addStringArrays(Map map, Element mlist) { |
2 |
26 Feb 07 |
jari |
542 |
Object [] arrayObjectNames = map.keySet().toArray(); |
2 |
26 Feb 07 |
jari |
543 |
Element matrixElement, elementElement; |
2 |
26 Feb 07 |
jari |
544 |
String [] currentArray; |
2 |
26 Feb 07 |
jari |
545 |
|
2 |
26 Feb 07 |
jari |
546 |
String key; |
2 |
26 Feb 07 |
jari |
547 |
|
2 |
26 Feb 07 |
jari |
548 |
Vector arrayNames = new Vector(); |
2 |
26 Feb 07 |
jari |
549 |
|
2 |
26 Feb 07 |
jari |
550 |
for (int i = 0; i < arrayObjectNames.length; i++) { |
2 |
26 Feb 07 |
jari |
551 |
key = (String)arrayObjectNames[i]; |
2 |
26 Feb 07 |
jari |
552 |
if(!(key.equals("output-nodes"))) |
2 |
26 Feb 07 |
jari |
553 |
arrayNames.add(key); |
2 |
26 Feb 07 |
jari |
554 |
} |
2 |
26 Feb 07 |
jari |
555 |
|
2 |
26 Feb 07 |
jari |
556 |
if(arrayNames.size() < 1) |
2 |
26 Feb 07 |
jari |
557 |
return; |
2 |
26 Feb 07 |
jari |
558 |
|
2 |
26 Feb 07 |
jari |
559 |
for(int i = 0; i < arrayNames.size(); i++) { |
2 |
26 Feb 07 |
jari |
560 |
currentArray = (String [])map.get((String)(arrayNames.elementAt(i))); |
2 |
26 Feb 07 |
jari |
561 |
|
2 |
26 Feb 07 |
jari |
562 |
matrixElement = document.createElement("matrix"); |
2 |
26 Feb 07 |
jari |
563 |
matrixElement.setAttribute("name", ((String)arrayNames.elementAt(i))); |
2 |
26 Feb 07 |
jari |
564 |
matrixElement.setAttribute("type", "string-array"); |
2 |
26 Feb 07 |
jari |
565 |
matrixElement.setAttribute("row_dim", String.valueOf(currentArray.length)); |
2 |
26 Feb 07 |
jari |
566 |
matrixElement.setAttribute("col_dim", "1"); |
2 |
26 Feb 07 |
jari |
567 |
|
2 |
26 Feb 07 |
jari |
568 |
for(int j = 0; j < currentArray.length; j++){ |
2 |
26 Feb 07 |
jari |
569 |
elementElement = document.createElement("element"); |
2 |
26 Feb 07 |
jari |
570 |
elementElement.setAttribute("row", String.valueOf(j)); |
2 |
26 Feb 07 |
jari |
571 |
elementElement.setAttribute("col", "0"); |
2 |
26 Feb 07 |
jari |
572 |
elementElement.setAttribute("value", currentArray[j]); |
2 |
26 Feb 07 |
jari |
573 |
matrixElement.appendChild(elementElement); |
2 |
26 Feb 07 |
jari |
574 |
} |
2 |
26 Feb 07 |
jari |
575 |
|
2 |
26 Feb 07 |
jari |
576 |
mlist.appendChild(matrixElement); |
2 |
26 Feb 07 |
jari |
577 |
} |
2 |
26 Feb 07 |
jari |
578 |
} |
2 |
26 Feb 07 |
jari |
579 |
|
2 |
26 Feb 07 |
jari |
/** Adds matices. |
2 |
26 Feb 07 |
jari |
* @param map Matrix refs. |
2 |
26 Feb 07 |
jari |
* @param mlist Matrix Element list. |
2 |
26 Feb 07 |
jari |
583 |
*/ |
2 |
26 Feb 07 |
jari |
584 |
private void addMatrices(Map map, Element mlist) { |
2 |
26 Feb 07 |
jari |
585 |
Object [] matrixObjectNames = map.keySet().toArray(); |
2 |
26 Feb 07 |
jari |
586 |
Element matrixElement; |
2 |
26 Feb 07 |
jari |
587 |
|
2 |
26 Feb 07 |
jari |
588 |
FloatMatrix currentFM; |
2 |
26 Feb 07 |
jari |
589 |
|
2 |
26 Feb 07 |
jari |
590 |
String [] matrixNames = new String[matrixObjectNames.length]; |
2 |
26 Feb 07 |
jari |
591 |
|
2 |
26 Feb 07 |
jari |
592 |
for (int i = 0; i < matrixNames.length; i++) |
2 |
26 Feb 07 |
jari |
593 |
matrixNames[i] = (String)matrixObjectNames[i]; |
2 |
26 Feb 07 |
jari |
594 |
|
2 |
26 Feb 07 |
jari |
595 |
|
2 |
26 Feb 07 |
jari |
596 |
for(int i = 0; i < matrixNames.length; i++) { |
2 |
26 Feb 07 |
jari |
597 |
currentFM = (FloatMatrix)map.get(matrixNames[i]); |
2 |
26 Feb 07 |
jari |
598 |
|
2 |
26 Feb 07 |
jari |
599 |
matrixElement = document.createElement("matrix"); |
2 |
26 Feb 07 |
jari |
600 |
matrixElement.setAttribute("name", matrixNames[i]); |
2 |
26 Feb 07 |
jari |
601 |
matrixElement.setAttribute("type", "FloatMatrix"); |
2 |
26 Feb 07 |
jari |
602 |
matrixElement.setAttribute("row_dim", String.valueOf(currentFM.getRowDimension())); |
2 |
26 Feb 07 |
jari |
603 |
matrixElement.setAttribute("col_dim", String.valueOf(currentFM.getColumnDimension())); |
2 |
26 Feb 07 |
jari |
604 |
|
2 |
26 Feb 07 |
jari |
605 |
addMatrixElements(currentFM, matrixElement); |
2 |
26 Feb 07 |
jari |
606 |
|
2 |
26 Feb 07 |
jari |
607 |
mlist.appendChild(matrixElement); |
2 |
26 Feb 07 |
jari |
608 |
} |
2 |
26 Feb 07 |
jari |
609 |
} |
2 |
26 Feb 07 |
jari |
610 |
|
2 |
26 Feb 07 |
jari |
/** Adds actual matrix elements. |
2 |
26 Feb 07 |
jari |
* @param matrix FloatMatrix to append |
2 |
26 Feb 07 |
jari |
* @param matrixElement Element to receive. */ |
2 |
26 Feb 07 |
jari |
614 |
private void addMatrixElements(FloatMatrix matrix, Element matrixElement) { |
2 |
26 Feb 07 |
jari |
615 |
Element elementElement; |
2 |
26 Feb 07 |
jari |
616 |
|
2 |
26 Feb 07 |
jari |
617 |
float [][] data = matrix.A; |
2 |
26 Feb 07 |
jari |
618 |
|
2 |
26 Feb 07 |
jari |
619 |
for(int i = 0; i < data.length; i++) { |
2 |
26 Feb 07 |
jari |
620 |
for(int j = 0; j < data[i].length; j++) { |
2 |
26 Feb 07 |
jari |
621 |
elementElement = document.createElement("element"); |
2 |
26 Feb 07 |
jari |
622 |
elementElement.setAttribute("row", String.valueOf(i)); |
2 |
26 Feb 07 |
jari |
623 |
elementElement.setAttribute("col", String.valueOf(j)); |
2 |
26 Feb 07 |
jari |
624 |
elementElement.setAttribute("value", String.valueOf(data[i][j])); |
2 |
26 Feb 07 |
jari |
625 |
matrixElement.appendChild(elementElement); |
2 |
26 Feb 07 |
jari |
626 |
} |
2 |
26 Feb 07 |
jari |
627 |
} |
2 |
26 Feb 07 |
jari |
628 |
} |
2 |
26 Feb 07 |
jari |
629 |
|
2 |
26 Feb 07 |
jari |
/** Writes the source to the file name. |
2 |
26 Feb 07 |
jari |
* @param fileName file name |
2 |
26 Feb 07 |
jari |
* @throws IOException |
2 |
26 Feb 07 |
jari |
633 |
*/ |
2 |
26 Feb 07 |
jari |
634 |
public void writeDocument(String fileName) throws IOException { |
2 |
26 Feb 07 |
jari |
635 |
FileWriter writer = new java.io.FileWriter(fileName); |
2 |
26 Feb 07 |
jari |
636 |
serialize(writer); |
2 |
26 Feb 07 |
jari |
637 |
|
2 |
26 Feb 07 |
jari |
638 |
writer.flush(); |
2 |
26 Feb 07 |
jari |
639 |
writer.close(); |
2 |
26 Feb 07 |
jari |
640 |
} |
2 |
26 Feb 07 |
jari |
641 |
|
2 |
26 Feb 07 |
jari |
642 |
|
2 |
26 Feb 07 |
jari |
/** Outputs document to Writer. |
2 |
26 Feb 07 |
jari |
* @param writer Output Writer |
2 |
26 Feb 07 |
jari |
* @throws IOException |
2 |
26 Feb 07 |
jari |
646 |
*/ |
2 |
26 Feb 07 |
jari |
647 |
private void writeDocument(Writer writer) throws IOException { |
2 |
26 Feb 07 |
jari |
648 |
serialize(writer); |
2 |
26 Feb 07 |
jari |
649 |
} |
2 |
26 Feb 07 |
jari |
650 |
|
2 |
26 Feb 07 |
jari |
651 |
|
2 |
26 Feb 07 |
jari |
652 |
|
2 |
26 Feb 07 |
jari |
653 |
/** |
2 |
26 Feb 07 |
jari |
* Serialization Code |
2 |
26 Feb 07 |
jari |
* @param writer Output Writer |
2 |
26 Feb 07 |
jari |
* @throws IOException */ |
2 |
26 Feb 07 |
jari |
657 |
private void serialize(Writer writer) throws IOException { |
2 |
26 Feb 07 |
jari |
658 |
serializeNode(document, writer, ""); |
2 |
26 Feb 07 |
jari |
659 |
} |
2 |
26 Feb 07 |
jari |
660 |
|
2 |
26 Feb 07 |
jari |
/** serializes a single node. |
2 |
26 Feb 07 |
jari |
* @param node Node to output |
2 |
26 Feb 07 |
jari |
* @param writer output writer |
2 |
26 Feb 07 |
jari |
* @param indentLevel Indent level |
2 |
26 Feb 07 |
jari |
* @throws IOException |
2 |
26 Feb 07 |
jari |
666 |
*/ |
2 |
26 Feb 07 |
jari |
667 |
private void serializeNode(Node node, Writer writer, String indentLevel) throws IOException { |
2 |
26 Feb 07 |
jari |
668 |
String name; |
2 |
26 Feb 07 |
jari |
669 |
String text; |
2 |
26 Feb 07 |
jari |
670 |
StringTokenizer stok; |
2 |
26 Feb 07 |
jari |
671 |
|
2 |
26 Feb 07 |
jari |
672 |
switch(node.getNodeType()) { |
2 |
26 Feb 07 |
jari |
673 |
case Node.DOCUMENT_NODE: |
2 |
26 Feb 07 |
jari |
674 |
writer.write("<?xml version=\"1.0\"?>"); |
2 |
26 Feb 07 |
jari |
675 |
writer.write(lineSeparator); |
2 |
26 Feb 07 |
jari |
676 |
writer.write(ScriptConstants.DOCTYPE_STRING); |
2 |
26 Feb 07 |
jari |
677 |
writer.write(lineSeparator); |
2 |
26 Feb 07 |
jari |
678 |
Document doc = (Document)node; |
2 |
26 Feb 07 |
jari |
679 |
serializeNode(doc.getDocumentElement(), writer, " "); |
2 |
26 Feb 07 |
jari |
680 |
break; |
2 |
26 Feb 07 |
jari |
681 |
case Node.ELEMENT_NODE: |
2 |
26 Feb 07 |
jari |
682 |
boolean haveContent = false; |
2 |
26 Feb 07 |
jari |
683 |
name = node.getNodeName(); |
2 |
26 Feb 07 |
jari |
684 |
writer.write(indentLevel + "<" + name); |
2 |
26 Feb 07 |
jari |
685 |
|
2 |
26 Feb 07 |
jari |
//posible attributes |
2 |
26 Feb 07 |
jari |
687 |
NamedNodeMap attrs = node.getAttributes(); |
2 |
26 Feb 07 |
jari |
688 |
for(int i = 0; i < attrs.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
689 |
Node attr = attrs.item(i); |
2 |
26 Feb 07 |
jari |
690 |
writer.write(" "+ attr.getNodeName()+"=\""+attr.getNodeValue()+"\""); |
2 |
26 Feb 07 |
jari |
691 |
} |
2 |
26 Feb 07 |
jari |
692 |
|
2 |
26 Feb 07 |
jari |
693 |
NodeList children = node.getChildNodes(); |
2 |
26 Feb 07 |
jari |
694 |
if(children.getLength() > 0) { |
2 |
26 Feb 07 |
jari |
695 |
|
2 |
26 Feb 07 |
jari |
696 |
writer.write(">"); |
2 |
26 Feb 07 |
jari |
697 |
|
2 |
26 Feb 07 |
jari |
698 |
if((children.item(0) != null) && |
2 |
26 Feb 07 |
jari |
699 |
(children.item(0).getNodeType() == Node.ELEMENT_NODE )){ |
2 |
26 Feb 07 |
jari |
700 |
writer.write(lineSeparator); |
2 |
26 Feb 07 |
jari |
701 |
} |
2 |
26 Feb 07 |
jari |
702 |
for(int i = 0; i < children.getLength(); i++){ |
2 |
26 Feb 07 |
jari |
703 |
serializeNode(children.item(i), writer, indentLevel + indent); |
2 |
26 Feb 07 |
jari |
704 |
} |
2 |
26 Feb 07 |
jari |
705 |
if((children.item(0) != null) && |
2 |
26 Feb 07 |
jari |
706 |
(children.item(children.getLength()-1).getNodeType() == Node.ELEMENT_NODE)) { |
2 |
26 Feb 07 |
jari |
707 |
writer.write(indentLevel); |
2 |
26 Feb 07 |
jari |
708 |
} |
2 |
26 Feb 07 |
jari |
709 |
|
2 |
26 Feb 07 |
jari |
710 |
writer.write("</" + name + ">"); |
2 |
26 Feb 07 |
jari |
711 |
|
2 |
26 Feb 07 |
jari |
712 |
} else { |
2 |
26 Feb 07 |
jari |
713 |
writer.write("/>"); |
2 |
26 Feb 07 |
jari |
714 |
} |
2 |
26 Feb 07 |
jari |
715 |
|
2 |
26 Feb 07 |
jari |
716 |
writer.write(lineSeparator); |
2 |
26 Feb 07 |
jari |
717 |
break; |
2 |
26 Feb 07 |
jari |
718 |
case Node.TEXT_NODE: |
2 |
26 Feb 07 |
jari |
719 |
writer.write(node.getNodeValue()); |
2 |
26 Feb 07 |
jari |
720 |
break; |
2 |
26 Feb 07 |
jari |
721 |
case Node.COMMENT_NODE: |
2 |
26 Feb 07 |
jari |
722 |
text = node.getNodeValue(); |
2 |
26 Feb 07 |
jari |
723 |
writer.write("<!--"); |
2 |
26 Feb 07 |
jari |
724 |
|
2 |
26 Feb 07 |
jari |
725 |
stok = new StringTokenizer(text, " "); |
2 |
26 Feb 07 |
jari |
726 |
int charCnt; |
2 |
26 Feb 07 |
jari |
727 |
String word; |
2 |
26 Feb 07 |
jari |
728 |
|
2 |
26 Feb 07 |
jari |
729 |
while(stok.hasMoreElements()) { |
2 |
26 Feb 07 |
jari |
730 |
charCnt = 0; |
2 |
26 Feb 07 |
jari |
731 |
while(charCnt < 50){ |
2 |
26 Feb 07 |
jari |
732 |
word = stok.nextToken(); |
2 |
26 Feb 07 |
jari |
733 |
writer.write(word); |
2 |
26 Feb 07 |
jari |
734 |
charCnt = word.length(); |
2 |
26 Feb 07 |
jari |
735 |
} |
2 |
26 Feb 07 |
jari |
736 |
writer.write(lineSeparator); |
2 |
26 Feb 07 |
jari |
737 |
} |
2 |
26 Feb 07 |
jari |
738 |
writer.write("-->"); |
2 |
26 Feb 07 |
jari |
739 |
break; |
2 |
26 Feb 07 |
jari |
740 |
} |
2 |
26 Feb 07 |
jari |
741 |
} |
2 |
26 Feb 07 |
jari |
742 |
|
2 |
26 Feb 07 |
jari |
/** Forces the script to update on events where the |
2 |
26 Feb 07 |
jari |
* underlying information changes. |
2 |
26 Feb 07 |
jari |
745 |
*/ |
2 |
26 Feb 07 |
jari |
746 |
public void updateScript() { |
2 |
26 Feb 07 |
jari |
747 |
if(!isTextCurrent) { |
2 |
26 Feb 07 |
jari |
748 |
try { |
2 |
26 Feb 07 |
jari |
749 |
scriptText = ""; |
2 |
26 Feb 07 |
jari |
750 |
writeScriptText(document, ""); |
2 |
26 Feb 07 |
jari |
//text is updated |
2 |
26 Feb 07 |
jari |
752 |
isTextCurrent = true; |
2 |
26 Feb 07 |
jari |
753 |
} catch (IOException e) { |
2 |
26 Feb 07 |
jari |
754 |
e.printStackTrace(); |
2 |
26 Feb 07 |
jari |
755 |
} |
2 |
26 Feb 07 |
jari |
756 |
} |
2 |
26 Feb 07 |
jari |
757 |
} |
2 |
26 Feb 07 |
jari |
758 |
|
2 |
26 Feb 07 |
jari |
759 |
|
2 |
26 Feb 07 |
jari |
/** Writes node serialized form to the internal text String. |
2 |
26 Feb 07 |
jari |
* @param node node to serialize |
2 |
26 Feb 07 |
jari |
* @param indentLevel indent level. |
2 |
26 Feb 07 |
jari |
* @throws IOException |
2 |
26 Feb 07 |
jari |
764 |
*/ /* |
2 |
26 Feb 07 |
jari |
private void writeScriptText(Node node, String indentLevel) throws IOException { |
2 |
26 Feb 07 |
jari |
String name; |
2 |
26 Feb 07 |
jari |
String text; |
2 |
26 Feb 07 |
jari |
StringTokenizer stok; |
2 |
26 Feb 07 |
jari |
769 |
|
2 |
26 Feb 07 |
jari |
switch(node.getNodeType()) { |
2 |
26 Feb 07 |
jari |
771 |
|
2 |
26 Feb 07 |
jari |
case Node.DOCUMENT_NODE: |
2 |
26 Feb 07 |
jari |
scriptText += ("<?xml version=\"1.0\"?>"); |
2 |
26 Feb 07 |
jari |
scriptText += (lineSeparator); |
2 |
26 Feb 07 |
jari |
775 |
|
2 |
26 Feb 07 |
jari |
NodeList nodes = node.getChildNodes(); |
2 |
26 Feb 07 |
jari |
if(nodes != null) { |
2 |
26 Feb 07 |
jari |
for(int i = 0; i < nodes.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
writeScriptText(nodes.item(i), ""); |
2 |
26 Feb 07 |
jari |
780 |
} |
2 |
26 Feb 07 |
jari |
781 |
} |
2 |
26 Feb 07 |
jari |
782 |
/* |
2 |
26 Feb 07 |
jari |
Document doc = (Document)node; |
2 |
26 Feb 07 |
jari |
writeScriptText(doc.getDocumentElement()," "); |
2 |
26 Feb 07 |
jari |
785 |
**/ |
2 |
26 Feb 07 |
jari |
/* break; |
2 |
26 Feb 07 |
jari |
case Node.ELEMENT_NODE: |
2 |
26 Feb 07 |
jari |
name = node.getNodeName(); |
2 |
26 Feb 07 |
jari |
// if(parsedScript) |
2 |
26 Feb 07 |
jari |
// scriptText += "<"+name; |
2 |
26 Feb 07 |
jari |
// else |
2 |
26 Feb 07 |
jari |
scriptText += (indentLevel + "<" + name); |
2 |
26 Feb 07 |
jari |
793 |
|
2 |
26 Feb 07 |
jari |
//posible attributes |
2 |
26 Feb 07 |
jari |
NamedNodeMap attrs = node.getAttributes(); |
2 |
26 Feb 07 |
jari |
for(int i = 0; i < attrs.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
Node attr = attrs.item(i); |
2 |
26 Feb 07 |
jari |
scriptText += (" "+ attr.getNodeName()+"=\""+attr.getNodeValue()+"\""); |
2 |
26 Feb 07 |
jari |
799 |
} |
2 |
26 Feb 07 |
jari |
800 |
|
2 |
26 Feb 07 |
jari |
NodeList children = node.getChildNodes(); |
2 |
26 Feb 07 |
jari |
if(children.getLength() > 0) { |
2 |
26 Feb 07 |
jari |
803 |
|
2 |
26 Feb 07 |
jari |
scriptText += (">"); |
2 |
26 Feb 07 |
jari |
805 |
|
2 |
26 Feb 07 |
jari |
if((children.item(0) != null) && |
2 |
26 Feb 07 |
jari |
(children.item(0).getNodeType() == Node.ELEMENT_NODE || children.item(0).getNodeType() == Node.COMMENT_NODE)){ |
2 |
26 Feb 07 |
jari |
scriptText += (lineSeparator); |
2 |
26 Feb 07 |
jari |
809 |
} |
2 |
26 Feb 07 |
jari |
for(int i = 0; i < children.getLength(); i++){ |
2 |
26 Feb 07 |
jari |
writeScriptText(children.item(i), indentLevel + indent); |
2 |
26 Feb 07 |
jari |
812 |
} |
2 |
26 Feb 07 |
jari |
if((children.item(0) != null) ){// && |
2 |
26 Feb 07 |
jari |
// (children.item(children.getLength()-1).getNodeType() == Node.ELEMENT_NODE)) { |
2 |
26 Feb 07 |
jari |
scriptText += (indentLevel); |
2 |
26 Feb 07 |
jari |
816 |
} |
2 |
26 Feb 07 |
jari |
817 |
|
2 |
26 Feb 07 |
jari |
scriptText += ("</" + name + ">"); |
2 |
26 Feb 07 |
jari |
819 |
|
2 |
26 Feb 07 |
jari |
} else { |
2 |
26 Feb 07 |
jari |
scriptText += ("/>"); |
2 |
26 Feb 07 |
jari |
822 |
} |
2 |
26 Feb 07 |
jari |
823 |
|
2 |
26 Feb 07 |
jari |
scriptText += (lineSeparator); |
2 |
26 Feb 07 |
jari |
break; |
2 |
26 Feb 07 |
jari |
case Node.TEXT_NODE: |
2 |
26 Feb 07 |
jari |
// text = node.getNodeValue(); |
2 |
26 Feb 07 |
jari |
// scriptText += indentLevel+text+lineSeparator; |
2 |
26 Feb 07 |
jari |
829 |
|
2 |
26 Feb 07 |
jari |
830 |
|
2 |
26 Feb 07 |
jari |
831 |
|
2 |
26 Feb 07 |
jari |
String newText = node.getNodeValue(); |
2 |
26 Feb 07 |
jari |
String preText = ""; |
2 |
26 Feb 07 |
jari |
int pt; |
2 |
26 Feb 07 |
jari |
if(newText.indexOf("\n") != -1 && scriptText.lastIndexOf('\n') == scriptText.length()-1){ |
2 |
26 Feb 07 |
jari |
pt = newText.lastIndexOf("\n")+1; |
2 |
26 Feb 07 |
jari |
if(pt < newText.length()) { |
2 |
26 Feb 07 |
jari |
preText = newText.substring(pt); |
2 |
26 Feb 07 |
jari |
preText +=newText.substring(0, pt-1); |
2 |
26 Feb 07 |
jari |
// preText = newText.substring(0, pt-1); |
2 |
26 Feb 07 |
jari |
newText = preText; |
2 |
26 Feb 07 |
jari |
842 |
} |
2 |
26 Feb 07 |
jari |
843 |
|
2 |
26 Feb 07 |
jari |
844 |
} |
2 |
26 Feb 07 |
jari |
845 |
|
2 |
26 Feb 07 |
jari |
846 |
|
2 |
26 Feb 07 |
jari |
scriptText += newText; |
2 |
26 Feb 07 |
jari |
848 |
|
2 |
26 Feb 07 |
jari |
849 |
|
2 |
26 Feb 07 |
jari |
850 |
|
2 |
26 Feb 07 |
jari |
851 |
|
2 |
26 Feb 07 |
jari |
// name = node.getNodeName(); |
2 |
26 Feb 07 |
jari |
//// String text = node.getNodeValue(); |
2 |
26 Feb 07 |
jari |
// scriptText += (indentLevel + "<" + name + ">" + text + "<\\" + name +">"); |
2 |
26 Feb 07 |
jari |
// scriptText += (lineSeparator); |
2 |
26 Feb 07 |
jari |
break; |
2 |
26 Feb 07 |
jari |
857 |
|
2 |
26 Feb 07 |
jari |
case Node.COMMENT_NODE: |
2 |
26 Feb 07 |
jari |
text = node.getNodeValue(); |
2 |
26 Feb 07 |
jari |
scriptText += indentLevel+"<!-- "; |
2 |
26 Feb 07 |
jari |
861 |
/* |
2 |
26 Feb 07 |
jari |
stok = new StringTokenizer(text, " "); |
2 |
26 Feb 07 |
jari |
int charCnt = 0; |
2 |
26 Feb 07 |
jari |
String word; |
2 |
26 Feb 07 |
jari |
865 |
|
2 |
26 Feb 07 |
jari |
while(stok.hasMoreElements()) { |
2 |
26 Feb 07 |
jari |
867 |
|
2 |
26 Feb 07 |
jari |
word = stok.nextToken(); |
2 |
26 Feb 07 |
jari |
if (charCnt < 50){ |
2 |
26 Feb 07 |
jari |
scriptText += word+" "; |
2 |
26 Feb 07 |
jari |
charCnt += word.length(); |
2 |
26 Feb 07 |
jari |
} else { |
2 |
26 Feb 07 |
jari |
scriptText += lineSeparator+indentLevel+" "; |
2 |
26 Feb 07 |
jari |
scriptText += word+" "; |
2 |
26 Feb 07 |
jari |
charCnt = 0; |
2 |
26 Feb 07 |
jari |
876 |
} |
2 |
26 Feb 07 |
jari |
877 |
} |
2 |
26 Feb 07 |
jari |
878 |
*/ |
2 |
26 Feb 07 |
jari |
/* scriptText += text; |
2 |
26 Feb 07 |
jari |
880 |
|
2 |
26 Feb 07 |
jari |
scriptText += " -->"+lineSeparator+lineSeparator; |
2 |
26 Feb 07 |
jari |
break; |
2 |
26 Feb 07 |
jari |
case Node.DOCUMENT_TYPE_NODE: |
2 |
26 Feb 07 |
jari |
DocumentType docType = (DocumentType)node; |
2 |
26 Feb 07 |
jari |
scriptText += ("<!DOCTYPE " + docType.getName()); |
2 |
26 Feb 07 |
jari |
scriptText += " SYSTEM "; |
2 |
26 Feb 07 |
jari |
scriptText += "\""+docType.getSystemId()+"\">"; |
2 |
26 Feb 07 |
jari |
scriptText += lineSeparator; |
2 |
26 Feb 07 |
jari |
break; |
2 |
26 Feb 07 |
jari |
890 |
} |
2 |
26 Feb 07 |
jari |
891 |
} |
2 |
26 Feb 07 |
jari |
892 |
*/ |
2 |
26 Feb 07 |
jari |
893 |
|
2 |
26 Feb 07 |
jari |
/** Writes node serialized form to the internal text String. |
2 |
26 Feb 07 |
jari |
* @param node node to serialize |
2 |
26 Feb 07 |
jari |
* @param indentLevel indent level. |
2 |
26 Feb 07 |
jari |
* @throws IOException |
2 |
26 Feb 07 |
jari |
898 |
*/ |
2 |
26 Feb 07 |
jari |
899 |
private void writeScriptText(Node node, String indentLevel) throws IOException { |
2 |
26 Feb 07 |
jari |
900 |
String name; |
2 |
26 Feb 07 |
jari |
901 |
String text; |
2 |
26 Feb 07 |
jari |
902 |
StringTokenizer stok; |
2 |
26 Feb 07 |
jari |
903 |
|
2 |
26 Feb 07 |
jari |
904 |
switch(node.getNodeType()) { |
2 |
26 Feb 07 |
jari |
905 |
|
2 |
26 Feb 07 |
jari |
906 |
case Node.DOCUMENT_NODE: |
2 |
26 Feb 07 |
jari |
907 |
scriptText += ("<?xml version=\"1.0\"?>"); |
2 |
26 Feb 07 |
jari |
908 |
scriptText += (lineSeparator); |
2 |
26 Feb 07 |
jari |
909 |
|
2 |
26 Feb 07 |
jari |
910 |
NodeList nodes = node.getChildNodes(); |
2 |
26 Feb 07 |
jari |
911 |
if(nodes != null) { |
2 |
26 Feb 07 |
jari |
912 |
for(int i = 0; i < nodes.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
913 |
writeScriptText(nodes.item(i), ""); |
2 |
26 Feb 07 |
jari |
914 |
} |
2 |
26 Feb 07 |
jari |
915 |
} |
2 |
26 Feb 07 |
jari |
916 |
/* |
2 |
26 Feb 07 |
jari |
Document doc = (Document)node; |
2 |
26 Feb 07 |
jari |
writeScriptText(doc.getDocumentElement()," "); |
2 |
26 Feb 07 |
jari |
919 |
**/ |
2 |
26 Feb 07 |
jari |
920 |
break; |
2 |
26 Feb 07 |
jari |
921 |
case Node.ELEMENT_NODE: |
2 |
26 Feb 07 |
jari |
922 |
name = node.getNodeName(); |
2 |
26 Feb 07 |
jari |
// if(parsedScript) |
2 |
26 Feb 07 |
jari |
// scriptText += "<"+name; |
2 |
26 Feb 07 |
jari |
// else |
2 |
26 Feb 07 |
jari |
926 |
scriptText += (indentLevel + "<" + name); |
2 |
26 Feb 07 |
jari |
927 |
|
2 |
26 Feb 07 |
jari |
//posible attributes |
2 |
26 Feb 07 |
jari |
929 |
NamedNodeMap attrs = node.getAttributes(); |
2 |
26 Feb 07 |
jari |
930 |
for(int i = 0; i < attrs.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
931 |
Node attr = attrs.item(i); |
2 |
26 Feb 07 |
jari |
932 |
scriptText += (" "+ attr.getNodeName()+"=\""+attr.getNodeValue()+"\""); |
2 |
26 Feb 07 |
jari |
933 |
} |
2 |
26 Feb 07 |
jari |
934 |
|
2 |
26 Feb 07 |
jari |
935 |
NodeList children = node.getChildNodes(); |
2 |
26 Feb 07 |
jari |
936 |
if(children.getLength() > 0) { |
2 |
26 Feb 07 |
jari |
937 |
|
2 |
26 Feb 07 |
jari |
938 |
scriptText += (">"); |
2 |
26 Feb 07 |
jari |
939 |
|
2 |
26 Feb 07 |
jari |
940 |
if((children.item(0) != null)){// && |
2 |
26 Feb 07 |
jari |
// (children.item(0).getNodeType() == Node.ELEMENT_NODE || children.item(0).getNodeType() == Node.COMMENT_NODE)){ |
2 |
26 Feb 07 |
jari |
942 |
scriptText += (lineSeparator); |
2 |
26 Feb 07 |
jari |
943 |
} |
2 |
26 Feb 07 |
jari |
944 |
for(int i = 0; i < children.getLength(); i++){ |
2 |
26 Feb 07 |
jari |
945 |
if(children.item(i).getNodeType() != Node.TEXT_NODE) |
2 |
26 Feb 07 |
jari |
946 |
writeScriptText(children.item(i), indentLevel + indent); |
2 |
26 Feb 07 |
jari |
947 |
} |
2 |
26 Feb 07 |
jari |
948 |
if((children.item(0) != null) ){// && |
2 |
26 Feb 07 |
jari |
// (children.item(children.getLength()-1).getNodeType() == Node.ELEMENT_NODE)) { |
2 |
26 Feb 07 |
jari |
950 |
scriptText += (indentLevel); |
2 |
26 Feb 07 |
jari |
951 |
} |
2 |
26 Feb 07 |
jari |
952 |
|
2 |
26 Feb 07 |
jari |
953 |
scriptText += ("</" + name + ">"); |
2 |
26 Feb 07 |
jari |
954 |
|
2 |
26 Feb 07 |
jari |
955 |
} else { |
2 |
26 Feb 07 |
jari |
956 |
scriptText += ("/>"); |
2 |
26 Feb 07 |
jari |
957 |
} |
2 |
26 Feb 07 |
jari |
958 |
|
2 |
26 Feb 07 |
jari |
959 |
scriptText += (lineSeparator); |
2 |
26 Feb 07 |
jari |
960 |
break; |
2 |
26 Feb 07 |
jari |
961 |
case Node.TEXT_NODE: |
2 |
26 Feb 07 |
jari |
// text = node.getNodeValue(); |
2 |
26 Feb 07 |
jari |
// scriptText += indentLevel+text+lineSeparator; |
2 |
26 Feb 07 |
jari |
964 |
|
2 |
26 Feb 07 |
jari |
965 |
|
2 |
26 Feb 07 |
jari |
966 |
|
2 |
26 Feb 07 |
jari |
967 |
String newText = node.getNodeValue(); |
2 |
26 Feb 07 |
jari |
968 |
String preText = ""; |
2 |
26 Feb 07 |
jari |
969 |
int pt; |
2 |
26 Feb 07 |
jari |
970 |
if(newText.indexOf("\n") != -1 && scriptText.lastIndexOf('\n') == scriptText.length()-1){ |
2 |
26 Feb 07 |
jari |
971 |
pt = newText.lastIndexOf("\n")+1; |
2 |
26 Feb 07 |
jari |
972 |
if(pt < newText.length()) { |
2 |
26 Feb 07 |
jari |
973 |
preText = newText.substring(pt); |
2 |
26 Feb 07 |
jari |
974 |
preText +=newText.substring(0, pt-1); |
2 |
26 Feb 07 |
jari |
// preText = newText.substring(0, pt-1); |
2 |
26 Feb 07 |
jari |
976 |
newText = preText; |
2 |
26 Feb 07 |
jari |
977 |
} |
2 |
26 Feb 07 |
jari |
978 |
|
2 |
26 Feb 07 |
jari |
979 |
} |
2 |
26 Feb 07 |
jari |
980 |
|
2 |
26 Feb 07 |
jari |
981 |
|
2 |
26 Feb 07 |
jari |
982 |
scriptText += newText; |
2 |
26 Feb 07 |
jari |
983 |
|
2 |
26 Feb 07 |
jari |
984 |
|
2 |
26 Feb 07 |
jari |
985 |
|
2 |
26 Feb 07 |
jari |
986 |
|
2 |
26 Feb 07 |
jari |
// name = node.getNodeName(); |
2 |
26 Feb 07 |
jari |
//// String text = node.getNodeValue(); |
2 |
26 Feb 07 |
jari |
// scriptText += (indentLevel + "<" + name + ">" + text + "<\\" + name +">"); |
2 |
26 Feb 07 |
jari |
// scriptText += (lineSeparator); |
2 |
26 Feb 07 |
jari |
991 |
break; |
2 |
26 Feb 07 |
jari |
992 |
|
2 |
26 Feb 07 |
jari |
993 |
case Node.COMMENT_NODE: |
2 |
26 Feb 07 |
jari |
994 |
text = node.getNodeValue(); |
2 |
26 Feb 07 |
jari |
995 |
scriptText += indentLevel+"<!--"; |
2 |
26 Feb 07 |
jari |
996 |
/* |
2 |
26 Feb 07 |
jari |
stok = new StringTokenizer(text, " "); |
2 |
26 Feb 07 |
jari |
int charCnt = 0; |
2 |
26 Feb 07 |
jari |
String word; |
2 |
26 Feb 07 |
jari |
1000 |
|
2 |
26 Feb 07 |
jari |
while(stok.hasMoreElements()) { |
2 |
26 Feb 07 |
jari |
1002 |
|
2 |
26 Feb 07 |
jari |
word = stok.nextToken(); |
2 |
26 Feb 07 |
jari |
if (charCnt < 50){ |
2 |
26 Feb 07 |
jari |
scriptText += word+" "; |
2 |
26 Feb 07 |
jari |
charCnt += word.length(); |
2 |
26 Feb 07 |
jari |
} else { |
2 |
26 Feb 07 |
jari |
scriptText += lineSeparator+indentLevel+" "; |
2 |
26 Feb 07 |
jari |
scriptText += word+" "; |
2 |
26 Feb 07 |
jari |
charCnt = 0; |
2 |
26 Feb 07 |
jari |
1011 |
} |
2 |
26 Feb 07 |
jari |
1012 |
} |
2 |
26 Feb 07 |
jari |
1013 |
*/ |
2 |
26 Feb 07 |
jari |
1014 |
scriptText += text; |
2 |
26 Feb 07 |
jari |
1015 |
|
2 |
26 Feb 07 |
jari |
1016 |
scriptText += "-->"+lineSeparator+lineSeparator; |
2 |
26 Feb 07 |
jari |
1017 |
break; |
2 |
26 Feb 07 |
jari |
1018 |
case Node.DOCUMENT_TYPE_NODE: |
2 |
26 Feb 07 |
jari |
1019 |
DocumentType docType = (DocumentType)node; |
2 |
26 Feb 07 |
jari |
1020 |
scriptText += ("<!DOCTYPE " + docType.getName()); |
2 |
26 Feb 07 |
jari |
1021 |
scriptText += " SYSTEM "; |
2 |
26 Feb 07 |
jari |
1022 |
scriptText += "\""+docType.getSystemId()+"\">"; |
2 |
26 Feb 07 |
jari |
1023 |
scriptText += lineSeparator; |
2 |
26 Feb 07 |
jari |
1024 |
break; |
2 |
26 Feb 07 |
jari |
1025 |
} |
2 |
26 Feb 07 |
jari |
1026 |
} |
2 |
26 Feb 07 |
jari |
1027 |
|
2 |
26 Feb 07 |
jari |
/** Returns the current String representation of the script. |
2 |
26 Feb 07 |
jari |
* @return */ |
2 |
26 Feb 07 |
jari |
1030 |
public String toString() { |
2 |
26 Feb 07 |
jari |
1031 |
return scriptText; |
2 |
26 Feb 07 |
jari |
1032 |
} |
2 |
26 Feb 07 |
jari |
1033 |
|
2 |
26 Feb 07 |
jari |
/** Returns the document's <CODE>ErrorLog</CODE> |
2 |
26 Feb 07 |
jari |
* @return */ |
2 |
26 Feb 07 |
jari |
1036 |
public ErrorLog getErrorLog() { |
2 |
26 Feb 07 |
jari |
1037 |
return errorLog; |
2 |
26 Feb 07 |
jari |
1038 |
} |
2 |
26 Feb 07 |
jari |
1039 |
|
2 |
26 Feb 07 |
jari |
/** Opens the document's <CODE>ErrorLog</CODE> |
2 |
26 Feb 07 |
jari |
1041 |
*/ |
2 |
26 Feb 07 |
jari |
1042 |
public void showErrorLog() { |
2 |
26 Feb 07 |
jari |
1043 |
|
2 |
26 Feb 07 |
jari |
1044 |
} |
2 |
26 Feb 07 |
jari |
1045 |
|
2 |
26 Feb 07 |
jari |
/** Returns the number of validation errors found during a load or requested |
2 |
26 Feb 07 |
jari |
* validation. |
2 |
26 Feb 07 |
jari |
1048 |
*/ |
2 |
26 Feb 07 |
jari |
1049 |
public int getErrorCount() { |
2 |
26 Feb 07 |
jari |
1050 |
return parseErrors; |
2 |
26 Feb 07 |
jari |
1051 |
} |
2 |
26 Feb 07 |
jari |
1052 |
|
2 |
26 Feb 07 |
jari |
1053 |
|
2 |
26 Feb 07 |
jari |
1054 |
|
2 |
26 Feb 07 |
jari |
/** Loads the specified file using the passed progress bar. |
2 |
26 Feb 07 |
jari |
* @param inputFile File |
2 |
26 Feb 07 |
jari |
* @param progress Progress monitor |
2 |
26 Feb 07 |
jari |
* @throws Exception |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
1060 |
*/ |
2 |
26 Feb 07 |
jari |
1061 |
public boolean loadXMLFile(File inputFile, Progress progress) throws Exception{ |
2 |
26 Feb 07 |
jari |
1062 |
if(!inputFile.exists()) |
2 |
26 Feb 07 |
jari |
1063 |
return false; |
2 |
26 Feb 07 |
jari |
1064 |
|
2 |
26 Feb 07 |
jari |
1065 |
progress.setUnits(4); |
2 |
26 Feb 07 |
jari |
1066 |
progress.setValue(1); |
2 |
26 Feb 07 |
jari |
1067 |
progress.setDescription("Parsing File"); |
2 |
26 Feb 07 |
jari |
1068 |
|
2 |
26 Feb 07 |
jari |
1069 |
errorLog.setFile(inputFile); |
2 |
26 Feb 07 |
jari |
1070 |
|
2 |
26 Feb 07 |
jari |
1071 |
|
2 |
26 Feb 07 |
jari |
1072 |
DOMParser parser = new DOMParser(); |
2 |
26 Feb 07 |
jari |
1073 |
|
2 |
26 Feb 07 |
jari |
1074 |
try { |
2 |
26 Feb 07 |
jari |
1075 |
parser.setFeature("http://xml.org/sax/features/validation", true); |
2 |
26 Feb 07 |
jari |
1076 |
parser.setErrorHandler(this); |
2 |
26 Feb 07 |
jari |
1077 |
|
2 |
26 Feb 07 |
jari |
1078 |
parser.parse(inputFile.toURL().toString()); |
2 |
26 Feb 07 |
jari |
1079 |
|
2 |
26 Feb 07 |
jari |
1080 |
} catch ( Exception e ) { |
2 |
26 Feb 07 |
jari |
1081 |
return false; |
2 |
26 Feb 07 |
jari |
1082 |
} |
2 |
26 Feb 07 |
jari |
1083 |
|
2 |
26 Feb 07 |
jari |
1084 |
document = parser.getDocument(); |
2 |
26 Feb 07 |
jari |
1085 |
|
2 |
26 Feb 07 |
jari |
//now set key element references. |
2 |
26 Feb 07 |
jari |
1087 |
root = document.getDocumentElement(); |
2 |
26 Feb 07 |
jari |
1088 |
|
2 |
26 Feb 07 |
jari |
1089 |
|
2 |
26 Feb 07 |
jari |
1090 |
NodeList list = root.getElementsByTagName("mev"); |
2 |
26 Feb 07 |
jari |
1091 |
if(list != null && list.getLength() > 0) |
2 |
26 Feb 07 |
jari |
1092 |
mevElement = (Element)list.item(0); |
2 |
26 Feb 07 |
jari |
1093 |
|
2 |
26 Feb 07 |
jari |
1094 |
|
2 |
26 Feb 07 |
jari |
1095 |
list = root.getElementsByTagName("primary_data"); |
2 |
26 Feb 07 |
jari |
1096 |
if(list != null && list.getLength() > 0) |
2 |
26 Feb 07 |
jari |
1097 |
primaryDataElement = (Element)list.item(0); |
2 |
26 Feb 07 |
jari |
1098 |
|
2 |
26 Feb 07 |
jari |
1099 |
list = root.getElementsByTagName("analysis"); |
2 |
26 Feb 07 |
jari |
1100 |
if(list != null && list.getLength() > 0) |
2 |
26 Feb 07 |
jari |
1101 |
analysisElement = (Element)list.item(0); |
2 |
26 Feb 07 |
jari |
1102 |
|
2 |
26 Feb 07 |
jari |
1103 |
progress.setValue(2); |
2 |
26 Feb 07 |
jari |
1104 |
progress.setDescription("Checking Algorithm Sets"); |
2 |
26 Feb 07 |
jari |
1105 |
|
2 |
26 Feb 07 |
jari |
//set alg_set counter value |
2 |
26 Feb 07 |
jari |
1107 |
list = root.getElementsByTagName("alg_set"); |
2 |
26 Feb 07 |
jari |
1108 |
if(list != null && list.getLength() > 0) { |
2 |
26 Feb 07 |
jari |
1109 |
int maxID = -1; |
2 |
26 Feb 07 |
jari |
1110 |
for(int i = 0; i < list.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
1111 |
currAlgSetID = Integer.parseInt(((Element)list.item(i)).getAttribute("set_id")); |
2 |
26 Feb 07 |
jari |
1112 |
if(currAlgSetID > maxID) |
2 |
26 Feb 07 |
jari |
1113 |
maxID = currAlgSetID; |
2 |
26 Feb 07 |
jari |
1114 |
} |
2 |
26 Feb 07 |
jari |
1115 |
if(currAlgSetID < 0) |
2 |
26 Feb 07 |
jari |
1116 |
currAlgSetID = 0; |
2 |
26 Feb 07 |
jari |
1117 |
else |
2 |
26 Feb 07 |
jari |
1118 |
currAlgSetID = maxID; |
2 |
26 Feb 07 |
jari |
1119 |
currAlgSetID++; //Increment for next |
2 |
26 Feb 07 |
jari |
1120 |
} |
2 |
26 Feb 07 |
jari |
1121 |
|
2 |
26 Feb 07 |
jari |
1122 |
progress.setValue(2); |
2 |
26 Feb 07 |
jari |
1123 |
progress.setDescription("Setting Output ID"); |
2 |
26 Feb 07 |
jari |
1124 |
|
2 |
26 Feb 07 |
jari |
//set data_node counter value |
2 |
26 Feb 07 |
jari |
1126 |
list = root.getElementsByTagName("data_node"); |
2 |
26 Feb 07 |
jari |
1127 |
if(list != null && list.getLength() > 0) { |
2 |
26 Feb 07 |
jari |
1128 |
int maxID = -1; |
2 |
26 Feb 07 |
jari |
1129 |
for(int i = 0; i < list.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
1130 |
currDataID = Integer.parseInt(((Element)list.item(i)).getAttribute("data_node_id")); |
2 |
26 Feb 07 |
jari |
1131 |
if(currDataID > maxID) |
2 |
26 Feb 07 |
jari |
1132 |
maxID = currDataID; |
2 |
26 Feb 07 |
jari |
1133 |
} |
2 |
26 Feb 07 |
jari |
1134 |
if(currDataID < 0) |
2 |
26 Feb 07 |
jari |
1135 |
currDataID = 0; |
2 |
26 Feb 07 |
jari |
1136 |
else |
2 |
26 Feb 07 |
jari |
1137 |
currDataID = maxID; //preincremented before use |
2 |
26 Feb 07 |
jari |
1138 |
} |
2 |
26 Feb 07 |
jari |
1139 |
|
2 |
26 Feb 07 |
jari |
1140 |
|
2 |
26 Feb 07 |
jari |
1141 |
progress.setValue(3); |
2 |
26 Feb 07 |
jari |
1142 |
progress.setDescription("Internal Serialization"); |
2 |
26 Feb 07 |
jari |
1143 |
|
2 |
26 Feb 07 |
jari |
1144 |
parsedScript = true; |
2 |
26 Feb 07 |
jari |
1145 |
updateScript(); |
2 |
26 Feb 07 |
jari |
1146 |
|
2 |
26 Feb 07 |
jari |
//Extract name, description and date tags if availible |
2 |
26 Feb 07 |
jari |
1148 |
progress.setValue(4); |
2 |
26 Feb 07 |
jari |
1149 |
progress.setDescription("Done"); |
2 |
26 Feb 07 |
jari |
1150 |
progress.dispose(); |
2 |
26 Feb 07 |
jari |
1151 |
|
2 |
26 Feb 07 |
jari |
1152 |
return validateDocument(); |
2 |
26 Feb 07 |
jari |
1153 |
} |
2 |
26 Feb 07 |
jari |
1154 |
|
2 |
26 Feb 07 |
jari |
/** Validates the document |
2 |
26 Feb 07 |
jari |
1156 |
*/ |
2 |
26 Feb 07 |
jari |
1157 |
public boolean validateDocument() { |
2 |
26 Feb 07 |
jari |
1158 |
return true; |
2 |
26 Feb 07 |
jari |
1159 |
} |
2 |
26 Feb 07 |
jari |
1160 |
|
2 |
26 Feb 07 |
jari |
1161 |
|
2 |
26 Feb 07 |
jari |
/** Modifies a parameter |
2 |
26 Feb 07 |
jari |
* @param attributes parameter attributes |
2 |
26 Feb 07 |
jari |
* @param modLine moddification line |
2 |
26 Feb 07 |
jari |
* @param value value |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
1167 |
*/ |
2 |
26 Feb 07 |
jari |
1168 |
public boolean modifyParameter(Hashtable attributes, String modLine, String value) { |
2 |
26 Feb 07 |
jari |
1169 |
NodeList list = document.getElementsByTagName("algorithm"); |
2 |
26 Feb 07 |
jari |
1170 |
Element algElement; |
2 |
26 Feb 07 |
jari |
1171 |
for(int i = 0; i < list.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
1172 |
algElement = (Element)list.item(i); |
2 |
26 Feb 07 |
jari |
1173 |
if(algorithmMatches(attributes, algElement)) { |
2 |
26 Feb 07 |
jari |
1174 |
return modifyAlgorithmParameter(algElement, modLine, value); |
2 |
26 Feb 07 |
jari |
1175 |
} |
2 |
26 Feb 07 |
jari |
1176 |
} |
2 |
26 Feb 07 |
jari |
1177 |
return false; |
2 |
26 Feb 07 |
jari |
1178 |
} |
2 |
26 Feb 07 |
jari |
1179 |
|
2 |
26 Feb 07 |
jari |
1180 |
|
2 |
26 Feb 07 |
jari |
//find and mod the parameter |
2 |
26 Feb 07 |
jari |
/** Modifies an a parameter given an elemement. |
2 |
26 Feb 07 |
jari |
* @param elem Element to mod. |
2 |
26 Feb 07 |
jari |
* @param modLine modified line |
2 |
26 Feb 07 |
jari |
* @param value value |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
1187 |
*/ |
2 |
26 Feb 07 |
jari |
1188 |
private boolean modifyAlgorithmParameter(Element elem, String modLine, String value) { |
2 |
26 Feb 07 |
jari |
1189 |
NodeList list = elem.getElementsByTagName("param"); |
2 |
26 Feb 07 |
jari |
1190 |
Element param; |
2 |
26 Feb 07 |
jari |
1191 |
String key; |
2 |
26 Feb 07 |
jari |
1192 |
|
2 |
26 Feb 07 |
jari |
1193 |
isTextCurrent = false; |
2 |
26 Feb 07 |
jari |
1194 |
|
2 |
26 Feb 07 |
jari |
1195 |
for(int i =0; i < list.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
1196 |
param = (Element)list.item(i); |
2 |
26 Feb 07 |
jari |
1197 |
key = param.getAttribute("key"); |
2 |
26 Feb 07 |
jari |
1198 |
|
2 |
26 Feb 07 |
jari |
1199 |
if(modLine.indexOf(key) > -1) { |
2 |
26 Feb 07 |
jari |
1200 |
param.setAttribute("value", value); |
2 |
26 Feb 07 |
jari |
1201 |
fireScriptEvent(); |
2 |
26 Feb 07 |
jari |
1202 |
return true; |
2 |
26 Feb 07 |
jari |
1203 |
} |
2 |
26 Feb 07 |
jari |
1204 |
} |
2 |
26 Feb 07 |
jari |
1205 |
return false; |
2 |
26 Feb 07 |
jari |
1206 |
} |
2 |
26 Feb 07 |
jari |
1207 |
|
2 |
26 Feb 07 |
jari |
//verify algorithm Element is correct |
2 |
26 Feb 07 |
jari |
/** Verifies algorithm identity |
2 |
26 Feb 07 |
jari |
* @param attributes Attribute hash |
2 |
26 Feb 07 |
jari |
* @param algorithm Algorithm element |
2 |
26 Feb 07 |
jari |
* @return |
2 |
26 Feb 07 |
jari |
1213 |
*/ |
2 |
26 Feb 07 |
jari |
1214 |
private boolean algorithmMatches(Hashtable attributes, Element algorithm) { |
2 |
26 Feb 07 |
jari |
1215 |
Enumeration _enum = attributes.keys(); |
2 |
26 Feb 07 |
jari |
1216 |
String key, value, algValue; |
2 |
26 Feb 07 |
jari |
1217 |
boolean match = true; |
2 |
26 Feb 07 |
jari |
1218 |
while(_enum.hasMoreElements()) { |
2 |
26 Feb 07 |
jari |
1219 |
key = (String)_enum.nextElement(); |
2 |
26 Feb 07 |
jari |
1220 |
value = (String)attributes.get(key); |
2 |
26 Feb 07 |
jari |
1221 |
algValue = algorithm.getAttribute(key); |
2 |
26 Feb 07 |
jari |
1222 |
if(!algValue.equals(value)) |
2 |
26 Feb 07 |
jari |
1223 |
return false; |
2 |
26 Feb 07 |
jari |
1224 |
} |
2 |
26 Feb 07 |
jari |
1225 |
return true; |
2 |
26 Feb 07 |
jari |
1226 |
} |
2 |
26 Feb 07 |
jari |
1227 |
|
2 |
26 Feb 07 |
jari |
1228 |
|
2 |
26 Feb 07 |
jari |
// WARNING Event Handler |
2 |
26 Feb 07 |
jari |
/** Reports Parser Exceptions (Warning level exp.) |
2 |
26 Feb 07 |
jari |
* @param e reported exception |
2 |
26 Feb 07 |
jari |
* @throws SAXException |
2 |
26 Feb 07 |
jari |
1233 |
*/ |
2 |
26 Feb 07 |
jari |
1234 |
public void warning(SAXParseException e) |
2 |
26 Feb 07 |
jari |
1235 |
throws SAXException { |
2 |
26 Feb 07 |
jari |
1236 |
System.err.println("Warning: "+e); |
2 |
26 Feb 07 |
jari |
1237 |
parseErrors++; |
2 |
26 Feb 07 |
jari |
1238 |
errorLog.recordWarning(e); |
2 |
26 Feb 07 |
jari |
1239 |
} |
2 |
26 Feb 07 |
jari |
1240 |
|
2 |
26 Feb 07 |
jari |
// ERROR Event Handler |
2 |
26 Feb 07 |
jari |
/** Parse error reporting. |
2 |
26 Feb 07 |
jari |
1243 |
*/ |
2 |
26 Feb 07 |
jari |
1244 |
public void error(SAXParseException e) |
2 |
26 Feb 07 |
jari |
1245 |
throws SAXException { |
2 |
26 Feb 07 |
jari |
1246 |
System.err.println("Error: "+e); |
2 |
26 Feb 07 |
jari |
1247 |
errorLog.recordError(e); |
2 |
26 Feb 07 |
jari |
1248 |
parseErrors++; |
2 |
26 Feb 07 |
jari |
1249 |
} |
2 |
26 Feb 07 |
jari |
1250 |
|
2 |
26 Feb 07 |
jari |
// FATAL ERROR Event Handler |
2 |
26 Feb 07 |
jari |
/** Parse Fatal errors |
2 |
26 Feb 07 |
jari |
1253 |
*/ |
2 |
26 Feb 07 |
jari |
1254 |
public void fatalError(SAXParseException e) |
2 |
26 Feb 07 |
jari |
1255 |
throws SAXException { |
2 |
26 Feb 07 |
jari |
1256 |
System.err.println("Fatal Error: "+e); |
2 |
26 Feb 07 |
jari |
1257 |
errorLog.recordFatalError(e); |
2 |
26 Feb 07 |
jari |
1258 |
parseErrors++; |
2 |
26 Feb 07 |
jari |
1259 |
} |
2 |
26 Feb 07 |
jari |
1260 |
|
2 |
26 Feb 07 |
jari |
1261 |
|
2 |
26 Feb 07 |
jari |
/** Adds a <CODE>ScriptEventListener</CODE> instance. |
2 |
26 Feb 07 |
jari |
* @param listener Listener to add |
2 |
26 Feb 07 |
jari |
1264 |
*/ |
2 |
26 Feb 07 |
jari |
1265 |
public void addDocumentListener(ScriptEventListener listener) { |
2 |
26 Feb 07 |
jari |
1266 |
if(!listeners.contains(listener)) |
2 |
26 Feb 07 |
jari |
1267 |
listeners.add(listener); |
2 |
26 Feb 07 |
jari |
1268 |
} |
2 |
26 Feb 07 |
jari |
1269 |
|
2 |
26 Feb 07 |
jari |
/** Fires events to cached listeners. |
2 |
26 Feb 07 |
jari |
1271 |
*/ |
2 |
26 Feb 07 |
jari |
1272 |
private void fireScriptEvent() { |
2 |
26 Feb 07 |
jari |
1273 |
ScriptDocumentEvent event = new ScriptDocumentEvent(this); |
2 |
26 Feb 07 |
jari |
1274 |
for(int i = 0; i < listeners.size(); i++) { |
2 |
26 Feb 07 |
jari |
1275 |
((ScriptEventListener)listeners.elementAt(i)).documentChanged(event); |
2 |
26 Feb 07 |
jari |
1276 |
} |
2 |
26 Feb 07 |
jari |
1277 |
} |
2 |
26 Feb 07 |
jari |
1278 |
|
2 |
26 Feb 07 |
jari |
/** Removes a specified listener |
2 |
26 Feb 07 |
jari |
* @param listener Listener to remove. |
2 |
26 Feb 07 |
jari |
1281 |
*/ |
2 |
26 Feb 07 |
jari |
1282 |
public void removeScriptListener(ScriptEventListener listener) { |
2 |
26 Feb 07 |
jari |
1283 |
listeners.remove(listener); |
2 |
26 Feb 07 |
jari |
1284 |
} |
2 |
26 Feb 07 |
jari |
1285 |
|
2 |
26 Feb 07 |
jari |
/** Removes a specified algorithm from the model. |
2 |
26 Feb 07 |
jari |
* @param node <CODE>AlgorithmNode</CODE> to delete. |
2 |
26 Feb 07 |
jari |
1288 |
*/ |
2 |
26 Feb 07 |
jari |
1289 |
public void removeAlgorithm(AlgorithmNode node) { |
2 |
26 Feb 07 |
jari |
1290 |
int algID = node.getID(); |
2 |
26 Feb 07 |
jari |
1291 |
int dataRef = node.getDataNodeRef(); |
2 |
26 Feb 07 |
jari |
1292 |
String name = node.getAlgorithmName(); |
2 |
26 Feb 07 |
jari |
1293 |
|
2 |
26 Feb 07 |
jari |
1294 |
Element algSetElement = getAlgorithmSetByDataRef(dataRef); |
2 |
26 Feb 07 |
jari |
1295 |
Element algorithmElement = null; |
2 |
26 Feb 07 |
jari |
1296 |
NodeList list; |
2 |
26 Feb 07 |
jari |
1297 |
boolean found = false; |
2 |
26 Feb 07 |
jari |
1298 |
if(algSetElement != null) { |
2 |
26 Feb 07 |
jari |
1299 |
list = algSetElement.getElementsByTagName("algorithm"); |
2 |
26 Feb 07 |
jari |
1300 |
for(int i = 0; i < list.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
1301 |
algorithmElement = (Element)list.item(i); |
2 |
26 Feb 07 |
jari |
1302 |
if((String.valueOf(algID)).equals(algorithmElement.getAttribute("alg_id")) |
2 |
26 Feb 07 |
jari |
1303 |
&& (name.equals(algorithmElement.getAttribute("alg_name")))) { |
2 |
26 Feb 07 |
jari |
1304 |
found = true; |
2 |
26 Feb 07 |
jari |
1305 |
break; |
2 |
26 Feb 07 |
jari |
1306 |
} |
2 |
26 Feb 07 |
jari |
1307 |
} |
2 |
26 Feb 07 |
jari |
1308 |
if(found) { |
2 |
26 Feb 07 |
jari |
1309 |
|
2 |
26 Feb 07 |
jari |
1310 |
if(algorithmElement == null) |
2 |
26 Feb 07 |
jari |
1311 |
return; |
2 |
26 Feb 07 |
jari |
1312 |
|
2 |
26 Feb 07 |
jari |
//Decided not to rollback alg id's for deleted |
2 |
26 Feb 07 |
jari |
1314 |
Node parentNode = algorithmElement.getParentNode(); |
2 |
26 Feb 07 |
jari |
1315 |
if(parentNode != null) { |
2 |
26 Feb 07 |
jari |
1316 |
|
2 |
26 Feb 07 |
jari |
//Get rid of alg sets that reference output from the algorithmElement |
2 |
26 Feb 07 |
jari |
1318 |
|
2 |
26 Feb 07 |
jari |
//Get output node and then the data node id's |
2 |
26 Feb 07 |
jari |
1320 |
list = algorithmElement.getElementsByTagName("data_node"); |
2 |
26 Feb 07 |
jari |
1321 |
|
2 |
26 Feb 07 |
jari |
//((Element)(algorithmElement.getElementsByTagName("output_data").item(0))).getElementsByTagName("data_node"); |
2 |
26 Feb 07 |
jari |
1323 |
String [] data_refs = new String[list.getLength()]; |
2 |
26 Feb 07 |
jari |
1324 |
Node dataNode; |
2 |
26 Feb 07 |
jari |
1325 |
for(int i = 0; i < list.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
1326 |
dataNode = list.item(i); |
2 |
26 Feb 07 |
jari |
1327 |
data_refs[i] = ((Element)dataNode).getAttribute("data_node_id"); |
2 |
26 Feb 07 |
jari |
1328 |
} |
2 |
26 Feb 07 |
jari |
1329 |
|
2 |
26 Feb 07 |
jari |
1330 |
|
2 |
26 Feb 07 |
jari |
1331 |
|
2 |
26 Feb 07 |
jari |
//Check if this analysis node has algorithm sets that reference |
2 |
26 Feb 07 |
jari |
//the output of the algorithm to delete, if so remove them. |
2 |
26 Feb 07 |
jari |
1334 |
/* |
2 |
26 Feb 07 |
jari |
1335 |
|
2 |
26 Feb 07 |
jari |
original version to delete child algsets |
2 |
26 Feb 07 |
jari |
1337 |
|
2 |
26 Feb 07 |
jari |
list = analysisElement.getElementsByTagName("alg_set"); |
2 |
26 Feb 07 |
jari |
Node algSetNode; |
2 |
26 Feb 07 |
jari |
String ref; |
2 |
26 Feb 07 |
jari |
for(int i = 0; i < list.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
algSetNode = list.item(i); |
2 |
26 Feb 07 |
jari |
ref = ((Element)algSetNode).getAttribute("input_data_ref"); |
2 |
26 Feb 07 |
jari |
for(int j = 0; j < data_refs.length; j++) { |
2 |
26 Feb 07 |
jari |
if(data_refs[j].equals(ref)) |
2 |
26 Feb 07 |
jari |
analysisElement.removeChild(algSetNode); |
2 |
26 Feb 07 |
jari |
1347 |
} |
2 |
26 Feb 07 |
jari |
1348 |
} |
2 |
26 Feb 07 |
jari |
1349 |
*/ |
2 |
26 Feb 07 |
jari |
1350 |
|
2 |
26 Feb 07 |
jari |
//new recursive method |
2 |
26 Feb 07 |
jari |
1352 |
Vector algSetIDs = getDependentDataIDs(algorithmElement, list); |
2 |
26 Feb 07 |
jari |
//have dependent algset ids |
2 |
26 Feb 07 |
jari |
1354 |
list = analysisElement.getElementsByTagName("alg_set"); |
2 |
26 Feb 07 |
jari |
1355 |
Node algSetNode; |
2 |
26 Feb 07 |
jari |
1356 |
String ref; |
2 |
26 Feb 07 |
jari |
1357 |
Vector setsToRemove = new Vector(); |
2 |
26 Feb 07 |
jari |
1358 |
int listLength = list.getLength(); |
2 |
26 Feb 07 |
jari |
1359 |
for(int i = 0; i < listLength; i++) { |
2 |
26 Feb 07 |
jari |
1360 |
algSetNode = list.item(i); |
2 |
26 Feb 07 |
jari |
1361 |
ref = ((Element)algSetNode).getAttribute("set_id"); |
2 |
26 Feb 07 |
jari |
1362 |
|
2 |
26 Feb 07 |
jari |
1363 |
for(int j = 0; j < algSetIDs.size(); j++) { |
2 |
26 Feb 07 |
jari |
1364 |
if(ref.equals((String)(algSetIDs.elementAt(j)))) |
2 |
26 Feb 07 |
jari |
1365 |
setsToRemove.addElement(algSetNode); |
2 |
26 Feb 07 |
jari |
1366 |
} |
2 |
26 Feb 07 |
jari |
1367 |
} |
2 |
26 Feb 07 |
jari |
1368 |
|
2 |
26 Feb 07 |
jari |
1369 |
for(int i = 0; i < setsToRemove.size(); i++) |
2 |
26 Feb 07 |
jari |
1370 |
analysisElement.removeChild(((Element)(setsToRemove.elementAt(i)))); |
2 |
26 Feb 07 |
jari |
1371 |
|
2 |
26 Feb 07 |
jari |
1372 |
parentNode.removeChild(algorithmElement); |
2 |
26 Feb 07 |
jari |
1373 |
|
2 |
26 Feb 07 |
jari |
//Check for more algorithms |
2 |
26 Feb 07 |
jari |
1375 |
if(parentNode.getChildNodes().getLength() == 0) { |
2 |
26 Feb 07 |
jari |
1376 |
Node grandparent = parentNode.getParentNode(); |
2 |
26 Feb 07 |
jari |
1377 |
if(grandparent != null && parentNode.getNodeName().equals("alg_set") |
2 |
26 Feb 07 |
jari |
1378 |
&& !(((Element)parentNode).getAttribute("set_id")).equals("1")){ |
2 |
26 Feb 07 |
jari |
//parent was an algset without children |
2 |
26 Feb 07 |
jari |
//and it was not the base algset "1" |
2 |
26 Feb 07 |
jari |
1381 |
grandparent.removeChild(parentNode); |
2 |
26 Feb 07 |
jari |
1382 |
} |
2 |
26 Feb 07 |
jari |
1383 |
} |
2 |
26 Feb 07 |
jari |
1384 |
} |
2 |
26 Feb 07 |
jari |
1385 |
|
2 |
26 Feb 07 |
jari |
//updateScript(); |
2 |
26 Feb 07 |
jari |
1387 |
isTextCurrent = false; |
2 |
26 Feb 07 |
jari |
1388 |
fireScriptEvent(); |
2 |
26 Feb 07 |
jari |
1389 |
} |
2 |
26 Feb 07 |
jari |
1390 |
} |
2 |
26 Feb 07 |
jari |
1391 |
} |
2 |
26 Feb 07 |
jari |
1392 |
|
2 |
26 Feb 07 |
jari |
1393 |
|
2 |
26 Feb 07 |
jari |
/** Returns the data ID's under the algorithm element |
2 |
26 Feb 07 |
jari |
1395 |
*/ |
2 |
26 Feb 07 |
jari |
1396 |
private Vector getDependentDataIDs(Element algElement, NodeList dataElements) { |
2 |
26 Feb 07 |
jari |
1397 |
Element dataElement; |
2 |
26 Feb 07 |
jari |
1398 |
Vector indices = new Vector(); |
2 |
26 Feb 07 |
jari |
1399 |
for(int i = 0; i < dataElements.getLength(); i++) { |
2 |
26 Feb 07 |
jari |
1400 |
dataElement = ((Element)(dataElements.item(i))); |
2 |
26 Feb 07 |
jari |
1401 |
indices.addElement(dataElement.getAttribute("data_node_id")); |
2 |
26 Feb 07 |
jari |
1402 |
} |
2 |
26 Feb 07 |
jari |
1403 |
|
2 |
26 Feb 07 |
jari |
1404 |
getDependentDataIDs(indices, 0, analysisElement.getElementsByTagName("alg_set")); |
2 |
26 Feb 07 |
jari |
1405 |
|
2 |
26 Feb 07 |
jari |
1406 |
return indices; |
2 |
26 Feb 07 |
jari |
1407 |
} |
2 |
26 Feb 07 |
jari |
1408 |
|
2 |
26 Feb 07 |
jari |
1409 |
|
2 |
26 Feb 07 |
jari |
/** accumulates data ID's below the passed data id indices |
2 |
26 Feb 07 |
jari |
1411 |
*/ |
2 |
26 Feb 07 |
jari |
1412 |
private void getDependentDataIDs(Vector indices, int start, NodeList algSets) { |
2 |
26 Feb 07 |
jari |
//exit stategy |
2 |
26 Feb 07 |
jari |
1414 |
if( indices.size() <= start) |
2 |
26 Feb 07 |
jari |
1415 |
return; |
2 |
26 Feb 07 |
jari |
//new hit accumulator |
2 |
26 Feb 07 |
jari |
1417 |
int initSize = indices.size(); |
2 |
26 Feb 07 |
jari |
1418 |
int newHits = 0; |
2 |
26 Feb 07 |
jari |
1419 |
String index, newIndex, algSetID; |
2 |
26 Feb 07 |
jari |
1420 |
Element algSet; |
2 |
26 Feb 07 |
jari |
1421 |
|
2 |
26 Feb 07 |
jari |
//algSets |
2 |
26 Feb 07 |
jari |
1423 |
for(int i = start; i < indices.size(); i++){ |
2 |
26 Feb 07 |
jari |
1424 |
index = (String)(indices.elementAt(i)); |
2 |
26 Feb 07 |
jari |
1425 |
for(int j = 0; j < algSets.getLength(); j++) { |
2 |
26 Feb 07 |
jari |
1426 |
algSet = ((Element)(algSets.item(j))); |
2 |
26 Feb 07 |
jari |
1427 |
algSetID = algSet.getAttribute("set_id"); |
2 |
26 Feb 07 |
jari |
1428 |
if(algSetID.equals(index)) { |
2 |
26 Feb 07 |
jari |
//this is a dependent alg set, need get all data references |
2 |
26 Feb 07 |
jari |
1430 |
NodeList dataList = algSet.getElementsByTagName("data_node"); |
2 |
26 Feb 07 |
jari |
1431 |
for(int k = 0; k < dataList.getLength(); k++) { |
2 |
26 Feb 07 |
jari |
1432 |
newIndex = ((Element)dataList.item(k)).getAttribute("data_node_id"); |
2 |
26 Feb 07 |
jari |
1433 |
if(!indices.contains(newIndex)) { |
2 |
26 Feb 07 |
jari |
1434 |
newHits++; |
2 |
26 Feb 07 |
jari |
1435 |
indices.addElement(newIndex); |
2 |
26 Feb 07 |
jari |
1436 |
} |
2 |
26 Feb 07 |
jari |
1437 |
} |
2 |
26 Feb 07 |
jari |
1438 |
} |
2 |
26 Feb 07 |
jari |
1439 |
} |
2 |
26 Feb 07 |
jari |
1440 |
} |
2 |
26 Feb 07 |
jari |
1441 |
|
2 |
26 Feb 07 |
jari |
//tail recursion |
2 |
26 Feb 07 |
jari |
1443 |
getDependentDataIDs(indices, initSize, algSets); |
2 |
26 Feb 07 |
jari |
1444 |
} |
2 |
26 Feb 07 |
jari |
1445 |
|
2 |
26 Feb 07 |
jari |
1446 |
|
2 |
26 Feb 07 |
jari |
1447 |
private void writeObject(java.io.ObjectOutputStream oos) throws java.io.IOException { |
2 |
26 Feb 07 |
jari |
1448 |
oos.writeObject(tm4ScriptVersion); |
2 |
26 Feb 07 |
jari |
1449 |
oos.writeObject(mevScriptVersion); |
2 |
26 Feb 07 |
jari |
1450 |
oos.writeObject(manager); |
2 |
26 Feb 07 |
jari |
1451 |
oos.writeObject(document); |
2 |
26 Feb 07 |
jari |
1452 |
oos.writeObject(scriptText); |
2 |
26 Feb 07 |
jari |
1453 |
oos.writeObject(root); |
2 |
26 Feb 07 |
jari |
1454 |
oos.writeObject(mevElement); |
2 |
26 Feb 07 |
jari |
1455 |
oos.writeObject(this.primaryDataElement); |
2 |
26 Feb 07 |
jari |
1456 |
oos.writeObject(this.commentElement); |
2 |
26 Feb 07 |
jari |
1457 |
oos.writeObject(this.analysisElement); |
2 |
26 Feb 07 |
jari |
1458 |
oos.writeInt(currDataID); |
2 |
26 Feb 07 |
jari |
1459 |
oos.writeInt(currAlgSetID); |
2 |
26 Feb 07 |
jari |
1460 |
oos.writeObject(lineSeparator); |
2 |
26 Feb 07 |
jari |
1461 |
oos.writeObject(indent); |
2 |
26 Feb 07 |
jari |
1462 |
oos.writeBoolean(errorLog != null); |
2 |
26 Feb 07 |
jari |
// if(errorLog != null) |
2 |
26 Feb 07 |
jari |
// oos.writeObject(errorLog); |
2 |
26 Feb 07 |
jari |
1465 |
oos.writeBoolean(parsedScript); |
2 |
26 Feb 07 |
jari |
1466 |
} |
2 |
26 Feb 07 |
jari |
1467 |
|
2 |
26 Feb 07 |
jari |
1468 |
|
2 |
26 Feb 07 |
jari |
1469 |
|
2 |
26 Feb 07 |
jari |
1470 |
private void readObject(java.io.ObjectInputStream ois) throws java.io.IOException, ClassNotFoundException { |
2 |
26 Feb 07 |
jari |
1471 |
this.tm4ScriptVersion = (String)ois.readObject(); |
2 |
26 Feb 07 |
jari |
1472 |
this.mevScriptVersion = (String)ois.readObject(); |
2 |
26 Feb 07 |
jari |
1473 |
this.manager = (ScriptManager)ois.readObject(); |
2 |
26 Feb 07 |
jari |
1474 |
this.document = (Document)ois.readObject(); |
2 |
26 Feb 07 |
jari |
1475 |
this.scriptText = (String)ois.readObject(); |
2 |
26 Feb 07 |
jari |
1476 |
this.root = (Element)ois.readObject(); |
2 |
26 Feb 07 |
jari |
1477 |
this.mevElement = (Element)ois.readObject(); |
2 |
26 Feb 07 |
jari |
1478 |
this.primaryDataElement = (Element)ois.readObject(); |
2 |
26 Feb 07 |
jari |
1479 |
this.commentElement = (Element)ois.readObject(); |
2 |
26 Feb 07 |
jari |
1480 |
this.analysisElement = (Element)ois.readObject(); |
2 |
26 Feb 07 |
jari |
1481 |
this.currDataID = ois.readInt(); |
2 |
26 Feb 07 |
jari |
1482 |
this.currAlgSetID = ois.readInt(); |
2 |
26 Feb 07 |
jari |
1483 |
this.lineSeparator = (String)ois.readObject(); |
2 |
26 Feb 07 |
jari |
1484 |
this.indent = (String)ois.readObject(); |
2 |
26 Feb 07 |
jari |
// if(ois.readBoolean()) |
2 |
26 Feb 07 |
jari |
// this.errorLog = (ErrorLog)ois.readObject(); |
2 |
26 Feb 07 |
jari |
1487 |
this.parsedScript = ois.readBoolean(); |
2 |
26 Feb 07 |
jari |
1488 |
} |
2 |
26 Feb 07 |
jari |
1489 |
} |