// Copyright 2012 Georg-August-Universität Göttingen, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package de.ugoe.cs.autoquest.plugin.html.eventcore; import java.util.Map; import java.util.logging.Level; import de.ugoe.cs.autoquest.eventcore.IEventType; import de.ugoe.cs.autoquest.eventcore.gui.IInteraction; import de.ugoe.cs.autoquest.eventcore.gui.KeyboardFocusChange; import de.ugoe.cs.autoquest.eventcore.gui.MouseButtonInteraction; import de.ugoe.cs.autoquest.eventcore.gui.MouseClick; import de.ugoe.cs.autoquest.eventcore.gui.MouseDoubleClick; import de.ugoe.cs.autoquest.eventcore.gui.Scroll; import de.ugoe.cs.autoquest.eventcore.gui.TextInput; import de.ugoe.cs.autoquest.eventcore.gui.ValueSelection; import de.ugoe.cs.autoquest.eventcore.guimodel.ICheckBox; import de.ugoe.cs.autoquest.eventcore.guimodel.IComboBox; import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement; import de.ugoe.cs.autoquest.eventcore.guimodel.IRadioButton; import de.ugoe.cs.autoquest.eventcore.guimodel.ITextArea; import de.ugoe.cs.autoquest.eventcore.guimodel.ITextField; import de.ugoe.cs.util.console.Console; /** *

* TODO comment *

* * @author Patrick Harms * @author Fabian Glaser */ public class HTMLEventTypeFactory { /** */ private static HTMLEventTypeFactory instance = new HTMLEventTypeFactory(); /** *

* TODO: comment *

* */ private HTMLEventTypeFactory() {} /** *

* TODO: comment *

* * @return */ public static HTMLEventTypeFactory getInstance() { return instance; } /** *

* TODO: comment *

* * @param eventName * @param eventParameters * @return */ public IEventType getEventType(String eventName, Map eventParameters, IGUIElement guiElement) { IInteraction result = null; if ("onscroll".equals(eventName)) { int[] coordinates = getCoordinateParameter("scrollX", "scrollY", eventName, eventParameters); result = new Scroll(coordinates[0], coordinates[1]); } else if ("onclick".equals(eventName)) { int[] coordinates = getCoordinateParameter("X", "Y", eventName, eventParameters); result = new MouseClick(MouseButtonInteraction.Button.LEFT, coordinates[0], coordinates[1]); } else if ("ondblclick".equals(eventName)) { int[] coordinates = getCoordinateParameter("X", "Y", eventName, eventParameters); result = new MouseDoubleClick (MouseButtonInteraction.Button.LEFT, coordinates[0], coordinates[1]); } else if ("onchange".equals(eventName)) { String value = eventParameters.get("selectedValue"); if ((guiElement instanceof ITextArea) || (guiElement instanceof ITextField)) { result = new TextInput(value, null); } else if ((guiElement instanceof IRadioButton) || (guiElement instanceof ICheckBox) || (guiElement instanceof IComboBox)) { result = new ValueSelection(value); } else { throw new IllegalArgumentException("can not handle onchange events on GUI " + "elements of type " + guiElement.getClass()); } } else if ("onfocus".equals(eventName)) { result = new KeyboardFocusChange(); } else if ("onunload".equals(eventName) || "onbeforeunload".equals(eventName) || "onpagehide".equals(eventName) || "onpageshow".equals(eventName) || "onsubmit".equals(eventName) || "onselect".equals(eventName) || "onreset".equals(eventName)) { Console.traceln(Level.FINE, "Ignored event name \"" + eventName + "\""); } else { throw new IllegalArgumentException("unknown event name: \"" + eventName + "\""); } return result; } /** *

* TODO: comment *

* * @param eventName * @param eventParameters * @return */ private int[] getCoordinateParameter(String xParamName, String yParamName, String eventName, Map eventParameters) { String xCoord = eventParameters.get(xParamName); if (xCoord == null) { Console.printerrln("eventParameters do not contain " + xParamName + " coordinate."); xCoord = "0"; } String yCoord = eventParameters.get(yParamName); if (yCoord == null) { Console.printerrln("eventParameters do not contain " + yParamName + " coordinate."); yCoord = "0"; } try { return new int[] { Integer.parseInt(xCoord), Integer.parseInt(yCoord) }; } catch (NumberFormatException e) { throw new IllegalArgumentException("the coordinates provided by an " + eventName + " event are no numbers"); } } }