001: package com.xoetrope.carousel.testpilot;
002:
003: import java.awt.AWTEvent;
004: import java.awt.Component;
005: import java.awt.Toolkit;
006: import java.awt.event.AWTEventListener;
007:
008: import net.n3.nanoxml.IXMLElement;
009: import net.n3.nanoxml.XMLElement;
010: import net.xoetrope.swing.XButton;
011: import net.xoetrope.swing.XTable;
012: import net.xoetrope.builder.helper.XTableModelHelper;
013: import net.xoetrope.xui.XPageManager;
014: import net.xoetrope.xui.XProjectManager;
015: import net.xoetrope.xui.data.XBaseModel;
016: import net.xoetrope.xui.data.XModel;
017: import net.xoetrope.swing.XTable2;
018: import javax.swing.table.TableModel;
019:
020: /**
021: * Support for Recording applet events
022: * <p> Copyright (c) Xoetrope Ltd., 2001-2006, This software is licensed under
023: * the GNU Public License (GPL), please see license.txt for more details. If
024: * you make commercial use of this software you must purchase a commercial
025: * license from Xoetrope.</p>
026: * <p> $Revision: 1.2 $</p>
027: */
028: public class ApplicationRecorder extends ScriptPage implements
029: AWTEventListener {
030: private boolean recording;
031: private String[] args = new String[4];
032:
033: private XTable2 table;
034: XMLElement elt;
035: IXMLElement eleRun, eleCurrent;
036: int item = 0;
037: XBaseModel dset, tableModel, currentModel;
038: XButton btnPause, btnSave, btnAssert;
039: boolean pauseAfterNext = false;
040:
041: public ApplicationRecorder() {
042: super ();
043: recording = false;
044: }
045:
046: public void pageCreated() {
047: try {
048: table = (XTable2) findComponent("table");
049: table.setStyle("TableData");
050: table.setHeaderStyle("TableHeading");
051: table.setSelectedStyle("TableSelection");
052: table.setInteractiveTable(true);
053: table.repaint();
054: btnStart = (XButton) findComponent("btnStart");
055: btnPause = (XButton) findComponent("btnPause");
056: btnSave = (XButton) findComponent("btnSave");
057: btnBack = (XButton) findComponent("btnBack");
058: btnAssert = (XButton) findComponent("btnAssert");
059: } catch (Exception ex) {
060: ex.printStackTrace();
061: }
062: }
063:
064: /**
065: * Invoked when an event is dispatched in the AWT.
066: */
067: public void eventDispatched(AWTEvent event) {
068: // Filter the event source.
069: Object source = event.getSource();
070: while ((source != null) && (source instanceof Component)) {
071: if (source == mainClassObject) {
072: EventFactory.parseEvent(event, args);
073: if (args[EventFactory.EVENT_NAME] != null)
074: recordEvent((Component) event.getSource(), args);
075: break;
076: }
077: source = ((Component) source).getParent();
078: }
079:
080: }
081:
082: public void addAssert() {
083: if (wasMouseClicked())
084: pageMgr.showPage("tpassert");
085: }
086:
087: public void startScript() {
088: if (wasMouseClicked()) {
089: if (recording) {
090: Toolkit.getDefaultToolkit()
091: .removeAWTEventListener(this );
092: recording = false;
093:
094: btnStart.setText("Start");
095: btnPause.setEnabled(false);
096: btnSave.setEnabled(dset == null ? false : true);
097: btnBack.setEnabled(true);
098: btnAssert.setEnabled(false);
099: } else {
100: btnStart.setText("Stop");
101: btnPause.setEnabled(true);
102: btnSave.setEnabled(false);
103: btnBack.setEnabled(false);
104: btnAssert.setEnabled(true);
105:
106: createScript();
107: Toolkit.getDefaultToolkit().addAWTEventListener(
108: this ,
109: AWTEvent.ACTION_EVENT_MASK
110: | AWTEvent.ITEM_EVENT_MASK
111: | AWTEvent.FOCUS_EVENT_MASK
112: | AWTEvent.KEY_EVENT_MASK
113: | AWTEvent.MOUSE_EVENT_MASK); //|
114: // AWTEvent.MOUSE_MOTION_EVENT_MASK |
115: // AWTEvent.TEXT_EVENT_MASK );
116: addShutdownHook();
117: recording = true;
118: }
119: }
120: }
121:
122: public void setOptions() {
123: }
124:
125: public void goBack() {
126: if (wasMouseClicked())
127: pageMgr.showPrevious();
128: }
129:
130: public void createScript() {
131: if (dset == null) {
132: dset = (XBaseModel) XTableModelHelper
133: .createDataSet("application/events");
134: tableModel = (XBaseModel) XTableModelHelper.createTable(
135: dset, "items");
136: XBaseModel header = (XBaseModel) XTableModelHelper
137: .addHeader(tableModel);
138: XTableModelHelper.addData(header, "event", "Event");
139: XTableModelHelper.addData(header, "reference", "Control");
140: XTableModelHelper.addData(header, "value", "Value");
141: XTableModelHelper.addData(header, "cmd", "Command");
142: XTableModelHelper.addData(header, "eid", "ID");
143: table.setModel(tableModel);
144: table.repaint();
145: item++;
146:
147: XBaseModel settings = (XBaseModel) project.getModel().get(
148: "application/settings");
149: ApplicationConfig appConfig = (ApplicationConfig) pageMgr
150: .getPage("tpApplicationConfig");
151: settings.set("mainClass", appConfig.getMainClass());
152: settings.set("arguments", appConfig.getArguments());
153: settings.set("classpath", appConfig.getClasspath());
154: settings.set("home", appConfig.getHomeDir());
155: settings.set("cmd_delay", appConfig.getDelay());
156: }
157:
158: table.repaint();
159: }
160:
161: public void addEvent(String comp) {
162: XBaseModel rowdata = (XBaseModel) XTableModelHelper
163: .addRow(tableModel);
164: XTableModelHelper.addData(rowdata, "event", "");
165: XTableModelHelper.addData(rowdata, "reference", comp);
166: XTableModelHelper.addData(rowdata, "value", "");
167: XTableModelHelper.addData(rowdata, "cmd", "");
168: XTableModelHelper.addData(rowdata, "eid", "");
169: table.doLayout();
170: table.repaint();
171: }
172:
173: public void addPause() {
174: /* if ( wasMouseClicked() ) {
175: Pause pauseDlg = new Pause( true );
176: int ret = pauseDlg.showDialog( this );
177: if ( ret == 1 ) {
178: addPause( pauseDlg.getReturnObject().toString() );
179: }
180: }*/
181: }
182:
183: /*
184: public void addPause( String len )
185: {
186: XBaseModel rowdata = ( XBaseModel )XTableModelHelper.addRow( tableModel );
187: XTableModelHelper.addData( rowdata, "event", "pause" );
188: XTableModelHelper.addData( rowdata, "reference", "" );
189: XTableModelHelper.addData( rowdata, "value", len );
190: XTableModelHelper.addData( rowdata, "cmd", "pause" );
191: table.repaint();
192: }
193:
194: public void pauseAdded()
195: {
196: XBaseModel rowdata = ( XBaseModel )XTableModelHelper.addRow( tableModel );
197: XTableModelHelper.addData( rowdata, "event", null );
198: XTableModelHelper.addData( rowdata, "reference", null );
199: XTableModelHelper.addData( rowdata, "cmd", "pause" );
200: table.repaint();
201: }*/
202:
203: public void recordEvent(Component srcComp, String[] args) {
204: if (!recording)
205: return;
206: currentModel = (XBaseModel) XTableModelHelper
207: .addRow(tableModel);
208: XTableModelHelper.addData(currentModel, "event",
209: args[EventFactory.EVENT_NAME]);
210:
211: XTableModelHelper.addData(currentModel, "reference",
212: getComponentReference(srcComp));
213:
214: XTableModelHelper.addData(currentModel, "value",
215: args[EventFactory.EVENT_VALUE]);
216: XTableModelHelper.addData(currentModel, "cmd",
217: args[EventFactory.EVENT_COMMAND]);
218: XTableModelHelper.addData(currentModel, "eid",
219: args[EventFactory.EVENT_ID]);
220:
221: // table.scrollToBottom();
222: table.updateTable();
223:
224: /* if ( pauseAfterNext ) {
225: addPause( "200" );
226: pauseAfterNext = false;
227: }*/
228: }
229:
230: /*
231: public void recordAlert( String value )
232: {
233: XBaseModel rowdata = ( XBaseModel )XTableModelHelper.addRow( tableModel );
234: XTableModelHelper.addData( rowdata, "event", "alert" );
235: XTableModelHelper.addData( rowdata, "reference", "" );
236: XTableModelHelper.addData( rowdata, "value", value );
237: XTableModelHelper.addData( rowdata, "cmd", "info" );
238: table.repaint();
239: }
240:
241: public void recordConfirm( String value, String ret )
242: {
243: XBaseModel rowdata = ( XBaseModel )XTableModelHelper.addRow( tableModel );
244: XTableModelHelper.addData( rowdata, "event", "confirm" );
245: XTableModelHelper.addData( rowdata, "reference", ret );
246: XTableModelHelper.addData( rowdata, "value", value );
247: XTableModelHelper.addData( rowdata, "cmd", "info" );
248: table.repaint();
249: }
250: */
251:
252: public void setKeyCode(String key) {
253: // eleCurrent.setAttribute( "key", key );
254: }
255:
256: public void setInputValue(String value) {
257: XBaseModel valueModel = (XBaseModel) currentModel.get("Value");
258: valueModel.set(value);
259: }
260:
261: public void saveScript() {
262: if (wasMouseClicked())
263: pageMgr.showPage("tpsavescript");
264: }
265:
266: public void pageActivated() {
267: dset = null;
268: tableModel = null;
269: currentModel = null;
270: table.setModel((XModel) null);
271: table.repaint();
272: }
273:
274: public void addPauseAfterNext() {
275: pauseAfterNext = true;
276: }
277:
278: private void addShutdownHook() {
279: final ApplicationRecorder recorder = this ;
280: try {
281: Runtime.getRuntime().addShutdownHook(new Thread() {
282: public void run() {
283: if (recording)
284: Toolkit.getDefaultToolkit()
285: .removeAWTEventListener(recorder);
286: }
287: });
288: } catch (Exception ex1) {
289: }
290: }
291: }
|