001: package com.xoetrope.carousel.testpilot;
002:
003: import java.awt.AWTEvent;
004: import java.awt.Component;
005: import java.awt.ItemSelectable;
006: import java.awt.event.ActionEvent;
007: import java.awt.event.FocusEvent;
008: import java.awt.event.ItemEvent;
009: import java.awt.event.KeyEvent;
010: import java.awt.event.MouseEvent;
011: import java.awt.event.TextEvent;
012: import java.util.Hashtable;
013:
014: /**
015: * Create and populate event objects
016: * <p> Copyright (c) Xoetrope Ltd., 2001-2006, This software is licensed under
017: * the GNU Public License (GPL), please see license.txt for more details. If
018: * you make commercial use of this software you must purchase a commercial
019: * license from Xoetrope.</p>
020: * <p> $Revision: 1.2 $</p>
021: */
022: public class EventFactory {
023: public static int EVENT_NAME = 0;
024: public static int EVENT_VALUE = 1;
025: public static int EVENT_COMMAND = 2;
026: public static int EVENT_ID = 3;
027:
028: private static boolean recordMouseMotion = false;
029: private static Hashtable eventIdTable, eventNameTable;
030:
031: public static AWTEvent getEvent(Component comp, String eventType,
032: String value, String command, String id) {
033: int eventId;
034: Integer idObj = (Integer) eventNameTable.get(id);
035: if (idObj == null)
036: eventId = Integer.parseInt(id);
037: else
038: eventId = idObj.intValue();
039:
040: if (eventType.equals("ActionEvent"))
041: return new ActionEvent(comp, Integer.parseInt(id), command,
042: eventId);
043: else if (eventType.equals("FocusEvent"))
044: return new FocusEvent(comp, eventId);
045: else if (eventType.equals("KeyEvent")) {
046: int pos = -1;
047: String keyCodeStr = command.substring(0, pos = command
048: .indexOf(','));
049: String keyModifiersStr = command.substring(pos + 1);
050: return new KeyEvent(comp, eventId, System
051: .currentTimeMillis(), Integer
052: .parseInt(keyModifiersStr), Integer
053: .parseInt(keyCodeStr), value.charAt(0));
054: } else if (eventType.equals("MouseEvent")) {
055: int pos = -1;
056: String xStr = value.substring(0, pos = value.indexOf(','));
057: String yStr = value.substring(pos + 1);
058: String clickCountStr = command.substring(0, pos = command
059: .indexOf(','));
060: String isPopupStr = command.substring(pos + 1, pos + 2);
061: String modifiersStr = command.substring(pos + 3);
062:
063: return new MouseEvent(comp, eventId, System
064: .currentTimeMillis(), Integer
065: .parseInt(modifiersStr), Integer.parseInt(xStr),
066: Integer.parseInt(yStr), Integer
067: .parseInt(clickCountStr), isPopupStr
068: .equals("1"));
069: } else if (eventType.equals("ItemEvent")) {
070: ItemEvent ie = new ItemEvent((ItemSelectable) comp,
071: eventId, value, Integer.parseInt(command));
072: return ie;
073: }
074:
075: return null;
076: }
077:
078: public static void parseEvent(AWTEvent event, String[] args) {
079: getEventMap();
080: String name = (String) eventIdTable.get(new Integer(event
081: .getID()));
082: if (name == null)
083: args[EVENT_ID] = Integer.toString(event.getID());
084: else
085: args[EVENT_ID] = name;
086:
087: args[EVENT_NAME] = "?";
088: if (event instanceof ActionEvent) {
089: args[EVENT_NAME] = "ActionEvent";
090: args[EVENT_VALUE] = Integer.toString(((ActionEvent) event)
091: .getModifiers());
092: args[EVENT_COMMAND] = ((ActionEvent) event)
093: .getActionCommand();
094: } else if (event instanceof ItemEvent) {
095: ItemEvent ie = (ItemEvent) event;
096: args[EVENT_NAME] = "ItemEvent";
097: args[EVENT_VALUE] = ie.getItem().toString();
098: args[EVENT_COMMAND] = Integer.toString(ie.getStateChange());
099: } else if (event instanceof KeyEvent) {
100: KeyEvent keyEvent = (KeyEvent) event;
101: if (event.getID() != KeyEvent.KEY_TYPED) {
102: args[EVENT_NAME] = null;
103: return;
104: }
105: args[EVENT_NAME] = "KeyEvent";
106: char[] chars = new char[1];
107: chars[0] = keyEvent.getKeyChar();
108: args[EVENT_VALUE] = new String(chars);
109: args[EVENT_COMMAND] = Integer.toString(keyEvent
110: .getKeyCode())
111: + "," + Integer.toString(keyEvent.getModifiersEx());
112: } else if (event instanceof MouseEvent) {
113: int id = event.getID();
114:
115: switch (id) {
116: case MouseEvent.MOUSE_DRAGGED:
117: case MouseEvent.MOUSE_MOVED:
118: if (!recordMouseMotion) {
119: args[EVENT_NAME] = null;
120: break;
121: }
122: default:
123: MouseEvent me = (MouseEvent) event;
124: args[EVENT_NAME] = "MouseEvent";
125: args[EVENT_VALUE] = Integer.toString(me.getX()) + ","
126: + Integer.toString(me.getY());
127: args[EVENT_COMMAND] = Integer.toString(me
128: .getClickCount())
129: + ","
130: + (me.isPopupTrigger() ? "1" : "0")
131: + ","
132: + Integer.toString(me.getModifiers());
133: break;
134: }
135: } else if (event instanceof TextEvent)
136: args[EVENT_NAME] = "TextEvent";
137: else if (event instanceof FocusEvent)
138: args[EVENT_NAME] = "FocusEvent";
139: }
140:
141: /**
142: * Turn the recording of mouse motion events on or off
143: * @param record true to record mouse motion events
144: */
145: public void setRecordMouseMotion(boolean record) {
146: recordMouseMotion = record;
147: }
148:
149: private static void getEventMap() {
150: if (eventIdTable == null) {
151: eventIdTable = new Hashtable();
152: eventNameTable = new Hashtable();
153:
154: addEventMapping(MouseEvent.MOUSE_DRAGGED, "MOUSE_DRAGGED");
155: addEventMapping(MouseEvent.MOUSE_MOVED, "MOUSE_MOVED");
156: addEventMapping(MouseEvent.MOUSE_CLICKED, "MOUSE_CLICKED");
157: addEventMapping(MouseEvent.MOUSE_ENTERED, "MOUSE_ENTERED");
158: addEventMapping(MouseEvent.MOUSE_EXITED, "MOUSE_EXITED");
159: addEventMapping(MouseEvent.MOUSE_PRESSED, "MOUSE_PRESSED");
160: addEventMapping(MouseEvent.MOUSE_RELEASED, "MOUSE_RELEASED");
161: addEventMapping(MouseEvent.MOUSE_WHEEL, "MOUSE_WHEEL");
162: addEventMapping(MouseEvent.MOUSE_FIRST, "MOUSE_FIRST");
163: addEventMapping(MouseEvent.MOUSE_LAST, "MOUSE_LAST");
164: addEventMapping(ItemEvent.DESELECTED, "DESELECTED");
165: addEventMapping(ItemEvent.ITEM_FIRST, "ITEM_FIRST");
166: addEventMapping(ItemEvent.ITEM_LAST, "ITEM_LAST");
167: addEventMapping(ItemEvent.ITEM_STATE_CHANGED,
168: "ITEM_STATE_CHANGED");
169: addEventMapping(ItemEvent.SELECTED, "SELECTED");
170: addEventMapping(FocusEvent.FOCUS_FIRST, "FOCUS_FIRST");
171: addEventMapping(FocusEvent.FOCUS_GAINED, "FOCUS_GAINED");
172: addEventMapping(FocusEvent.FOCUS_LAST, "FOCUS_LAST");
173: addEventMapping(KeyEvent.KEY_PRESSED, "KEY_PRESSED");
174: addEventMapping(KeyEvent.KEY_RELEASED, "KEY_RELEASED");
175: addEventMapping(KeyEvent.KEY_TYPED, "KEY_TYPED");
176: addEventMapping(ActionEvent.ACTION_PERFORMED,
177: "ACTION_PERFORMED");
178: addEventMapping(ActionEvent.ACTION_FIRST, "ACTION_FIRST");
179: addEventMapping(ActionEvent.ACTION_LAST, "ACTION_LAST");
180: }
181: }
182:
183: private static void addEventMapping(int id, String name) {
184: Integer idObj = new Integer(id);
185: eventIdTable.put(idObj, name);
186: eventNameTable.put(name, idObj);
187: }
188: }
|