KickJava   Java API By Example, From Geeks To Geeks.

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


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.ParseException;
37 import com.genimen.djeneric.tools.scriptengine.core.SimpleNode;
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
42 public class PropertyPathNode extends SimpleNode implements ValueExpression
43 {
44   private String JavaDoc _path;
45   private boolean _negated = false;
46
47   public PropertyPathNode(int i)
48   {
49     super(i);
50   }
51
52   public PropertyPathNode(DjScriptParserEngine p, int i)
53   {
54     super(p, i);
55   }
56
57   public String JavaDoc getName()
58   {
59     return toString();
60   }
61
62   public String JavaDoc toString()
63   {
64     if (isNegated()) return "!" + _path;
65     return _path;
66   }
67
68   public void setPath(String JavaDoc path)
69   {
70     this._path = path;
71   }
72
73   public String JavaDoc getPath()
74   {
75     return _path;
76   }
77
78   public void setNegated(boolean negated)
79   {
80     this._negated = negated;
81   }
82
83   public boolean isNegated()
84   {
85     return _negated;
86   }
87
88   public Object JavaDoc getValue(DjScriptExecutionTimeScope context) throws DjScriptExecutionException
89   {
90     try
91     {
92       if (_negated)
93       {
94         Object JavaDoc o = context.getPropertyValue(getPath(), this);
95         if (!(o instanceof Boolean JavaDoc)) throw new ParseException(Messages.getString("PropertyNode.CanNotNegate"), this);
96         Boolean JavaDoc b = (Boolean JavaDoc) o;
97         return new Boolean JavaDoc(!b.booleanValue());
98       }
99       else return context.getPropertyValue(getPath(), this);
100     }
101     catch (Exception JavaDoc x)
102     {
103       throw new DjScriptExecutionException(x, this);
104     }
105   }
106
107   public void translateOql(DjScriptExecutionTimeScope ctxt, StringBuffer JavaDoc result, HashMap JavaDoc parameters)
108   {
109     result.append("(");
110
111     if (isNegated()) result.append("! ");
112
113     result.append(_path);
114     result.append(")");
115   }
116
117   public String JavaDoc getValidatedTypeName(DjScriptCompileTimeScope context) throws DjScriptExecutionException
118   {
119     return context.getPropertyType(_path, this);
120   }
121
122   public void validateScript(DjScriptCompileTimeScope ctxt) throws DjScriptExecutionException
123   {
124     getValidatedTypeName(ctxt);
125   }
126
127 }
Popular Tags