1 30 package com.genimen.djeneric.tools.scriptengine.core.nodes; 31 32 import java.util.ArrayList ; 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 _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 getName() 61 { 62 return "edit"; 63 } 64 65 public String toString() 66 { 67 return "edit " + _editorName; 68 } 69 70 public String getEditorName() 71 { 72 return _editorName; 73 } 74 75 public void setEditorName(String 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 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 ev) throws DjScriptExecutionException 127 { 128 doCollectEvents(ctxt, ev); 129 ActionNode a = (ActionNode) getParent(ActionNode.class); 130 String actionName = a.getActionName(); 131 132 ScriptRunnerContainer container = ctxt.getContainer(); 133 EditorDefinition ed = container.getEditorDefinition(getEditorName()); 134 String [] 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 |