KickJava   Java API By Example, From Geeks To Geeks.

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


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.ArrayList JavaDoc;
33
34 import com.genimen.djeneric.language.Messages;
35 import com.genimen.djeneric.repository.DjList;
36 import com.genimen.djeneric.repository.DjObject;
37 import com.genimen.djeneric.structure.EditorDefinition;
38 import com.genimen.djeneric.tools.scriptengine.core.DjScriptParserEngine;
39 import com.genimen.djeneric.tools.scriptengine.core.EditorEventDefinition;
40 import com.genimen.djeneric.tools.scriptengine.core.ScriptRunnerContainer;
41 import com.genimen.djeneric.tools.scriptengine.core.SimpleNode;
42 import com.genimen.djeneric.tools.scriptengine.core.util.DjScriptCompileTimeScope;
43 import com.genimen.djeneric.tools.scriptengine.core.util.DjScriptExecutionException;
44 import com.genimen.djeneric.tools.scriptengine.core.util.DjScriptExecutionTimeScope;
45
46 public class EditStatementNode extends SimpleNode
47 {
48   String JavaDoc _editorName = null;
49
50   public EditStatementNode(int i)
51   {
52     super(i);
53   }
54
55   public EditStatementNode(DjScriptParserEngine p, int i)
56   {
57     super(p, i);
58   }
59
60   public String JavaDoc getName()
61   {
62     return "edit";
63   }
64
65   public String JavaDoc toString()
66   {
67     return "edit " + _editorName;
68   }
69
70   public String JavaDoc getEditorName()
71   {
72     return _editorName;
73   }
74
75   public void setEditorName(String JavaDoc string)
76   {
77     _editorName = string;
78   }
79
80   public void execute(DjScriptExecutionTimeScope context) throws DjScriptExecutionException
81   {
82     EventDefinitionNode events[] = (EventDefinitionNode[]) getChildren(EventDefinitionNode.class)
83         .toArray(new EventDefinitionNode[0]);
84
85     EditorEventDefinition[] eventDefs = new EditorEventDefinition[events.length];
86     for (int i = 0; i < eventDefs.length; i++)
87     {
88       eventDefs[i] = new EditorEventDefinition(events[i].getEventName(), events[i].getEventTitle(), events[i]
89           .getOption());
90     }
91
92     ScriptRunnerContainer container = context.getContainer();
93     PropertyPathNode propNode = (PropertyPathNode) getChild(PropertyPathNode.class);
94
95     Object JavaDoc o = context.getPropertyValue(propNode.getPath(), this);
96     if (!(o instanceof DjObject) && !(o instanceof DjList))
97     {
98       throw new DjScriptExecutionException(Messages.getString("EditStatementNode.CannotEdit", o.getClass().getName()),
99           this);
100     }
101     try
102     {
103       DjList lst;
104
105       if (o instanceof DjList) lst = (DjList) o;
106       else
107       {
108         lst = new DjList();
109         lst.add(o);
110       }
111       ActionNode actionNode = (ActionNode) getParent(ActionNode.class);
112       container.edit(getEditorName(), context.getSession(), lst, eventDefs, actionNode.getActionName());
113     }
114     catch (DjScriptExecutionException e)
115     {
116       throw new DjScriptExecutionException(e.getMessage(), this);
117     }
118   }
119
120   public void validateScript(DjScriptCompileTimeScope ctxt) throws DjScriptExecutionException
121   {
122     if (!ctxt.getContainer().editorExists(_editorName)) throw new DjScriptExecutionException("Editor " + _editorName
123                                                                                              + " is not defined", this);
124   }
125
126   public void collectEvents(DjScriptCompileTimeScope ctxt, ArrayList JavaDoc ev) throws DjScriptExecutionException
127   {
128     doCollectEvents(ctxt, ev);
129     ActionNode a = (ActionNode) getParent(ActionNode.class);
130     String JavaDoc actionName = a.getActionName();
131
132     ScriptRunnerContainer container = ctxt.getContainer();
133     EditorDefinition ed = container.getEditorDefinition(getEditorName());
134     String JavaDoc[] events = ed.getEvents();
135
136     for (int i = 0; i < events.length; i++)
137     {
138       ev.add(actionName + "." + events[i]);
139     }
140   }
141
142 }
Popular Tags