01: /* *****************************************************************************
02: * DataCompiler.java
03: * ****************************************************************************/
04:
05: /* J_LZ_COPYRIGHT_BEGIN *******************************************************
06: * Copyright 2001-2007 Laszlo Systems, Inc. All Rights Reserved. *
07: * Use is subject to license terms. *
08: * J_LZ_COPYRIGHT_END *********************************************************/
09:
10: package org.openlaszlo.compiler;
11:
12: import org.openlaszlo.auth.AuthenticationException;
13: import org.openlaszlo.iv.flash.api.action.*;
14: import java.io.*;
15: import org.openlaszlo.sc.ScriptCompiler;
16: import org.jdom.Element;
17: import org.jdom.Text;
18: import org.jdom.Content;
19: import org.jdom.JDOMException;
20: import org.openlaszlo.xml.internal.XMLUtils;
21:
22: /** Compiler for local data elements.
23: *
24: * @author Henry Minsky
25: * @author Oliver Steele
26: */
27: class DataCompiler extends ElementCompiler {
28:
29: /* TODO [hqm 2007-07] This is for top level datasets only. The function in the LFC,
30: * lzAddLocalData, creates the dataset
31: * *immediately*, it is not queued for instantiation. This happens to
32: * allow forward references to datasets in LZX code. It also happens to slow
33: * down initialization of an app if it has large static datasets. This could be
34: * made better by queuing the data for quantized lzIdle processing, although it
35: * would mean delaying the "ondata" of the datasets until they were processed.
36: */
37:
38: static final String LOCAL_DATA_FNAME = "lzAddLocalData";
39:
40: DataCompiler(CompilationEnvironment env) {
41: super (env);
42: }
43:
44: static boolean isElement(Element element) {
45: if (element.getName().equals("dataset")) {
46: // return type in ('soap', 'http') or src is url
47: String src = element.getAttributeValue("src");
48: String type = element.getAttributeValue("type");
49: if (type != null
50: && (type.equals("soap") || type.equals("http"))) {
51: return false;
52: }
53: if (src != null && src.indexOf("http:") == 0) {
54: return false;
55: }
56: return src == null || !XMLUtils.isURL(src);
57: }
58: return false;
59: }
60:
61: public void compile(Element element) {
62: String dsetname = XMLUtils.requireAttributeValue(element,
63: "name");
64: boolean trimwhitespace = "true".equals(element
65: .getAttributeValue("trimwhitespace"));
66: String content = NodeModel.getDatasetContent(element, mEnv,
67: trimwhitespace);
68: mEnv.compileScript(LOCAL_DATA_FNAME + "("
69: + ScriptCompiler.quote(dsetname) + ", " + content + ","
70: + trimwhitespace + ");\n");
71: }
72:
73: }
|