KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > genimen > djeneric > tools > scriptengine > core > nodes > JavaStatementNode


1 /*
2  * Copyright (c) 2001-2005 by Genimen BV (www.genimen.com) All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, is permitted provided that the following conditions are met: -
6  * Redistributions of source code must retain the above copyright notice, this
7  * list of conditions and the following disclaimer. - Redistributions in binary
8  * form must reproduce the above copyright notice, this list of conditions and
9  * the following disclaimer in the documentation and/or other materials
10  * provided with the distribution. - All advertising materials mentioning
11  * features or use of this software must display the following acknowledgment:
12  * "This product includes Djeneric." - Products derived from this software may
13  * not be called "Djeneric" nor may "Djeneric" appear in their names without
14  * prior written permission of Genimen BV. - Redistributions of any form
15  * whatsoever must retain the following acknowledgment: "This product includes
16  * Djeneric."
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL GENIMEN BV, DJENERIC.ORG, OR CONTRIBUTORS
22  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  */

30 package com.genimen.djeneric.tools.scriptengine.core.nodes;
31
32 import java.util.HashMap JavaDoc;
33
34 import com.genimen.djeneric.language.Messages;
35 import com.genimen.djeneric.tools.scriptengine.core.DjScriptParserEngine;
36 import com.genimen.djeneric.tools.scriptengine.core.SimpleNode;
37 import com.genimen.djeneric.tools.scriptengine.core.util.DjScriptCallable;
38 import com.genimen.djeneric.tools.scriptengine.core.util.DjScriptCompileTimeScope;
39 import com.genimen.djeneric.tools.scriptengine.core.util.DjScriptExecutionException;
40 import com.genimen.djeneric.tools.scriptengine.core.util.DjScriptExecutionTimeScope;
41 import com.genimen.djeneric.tools.scriptengine.core.util.Variable;
42 import com.genimen.djeneric.util.DjStringReplacer;
43
44 public class JavaStatementNode extends SimpleNode
45 {
46   String JavaDoc _typeName;
47   String JavaDoc _variableName;
48
49   public JavaStatementNode(int i)
50   {
51     super(i);
52   }
53
54   public JavaStatementNode(DjScriptParserEngine p, int i)
55   {
56     super(p, i);
57   }
58
59   public String JavaDoc getName()
60   {
61     return "java";
62   }
63
64   public String JavaDoc toString()
65   {
66     return getName();
67   }
68
69   public String JavaDoc getTypeName()
70   {
71     return _typeName;
72   }
73
74   public String JavaDoc getVariableName()
75   {
76     return _variableName;
77   }
78
79   public void setTypeName(String JavaDoc type)
80   {
81     DjStringReplacer sr = new DjStringReplacer(type);
82     _typeName = sr.replace("\"", "");
83   }
84
85   public void setVariableName(String JavaDoc string)
86   {
87     _variableName = string;
88   }
89
90   public void execute(DjScriptExecutionTimeScope ctxt) throws DjScriptExecutionException
91   {
92     String JavaDoc className = getTypeName();
93     Object JavaDoc obj = null;
94     try
95     {
96       Class JavaDoc clz = ctxt.getContainer().loadClass(className);
97       obj = clz.newInstance();
98     }
99     catch (Exception JavaDoc e)
100     {
101       throw new DjScriptExecutionException(e, this);
102     }
103
104     if (!(obj instanceof DjScriptCallable))
105     {
106       throw new DjScriptExecutionException(Messages.getString("JavaStatementNode.JavaObject", className,
107                                                               DjScriptCallable.class.getName()));
108     }
109
110     Variable variable = new Variable(getVariableName(), obj);
111
112     ctxt.pushVariable(variable);
113   }
114
115   public void validateScript(DjScriptCompileTimeScope ctxt) throws DjScriptExecutionException
116   {
117     ctxt.addJavaBean(getVariableName(), getTypeName());
118   }
119
120   public void collectVariables(DjScriptCompileTimeScope ctxt, HashMap JavaDoc variables, int stopAtLine)
121       throws DjScriptExecutionException
122   {
123     if (stopAtLine >= 0 && getLine() > stopAtLine) return;
124     variables.put(_variableName, _typeName);
125   }
126 }
Popular Tags