// 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.Scroll; import de.ugoe.cs.autoquest.eventcore.gui.TextInput; import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement; 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(eventName, eventParameters); result = new Scroll(coordinates[0], coordinates[1]); } else if ("onclick".equals(eventName)) { int[] coordinates = getCoordinateParameter(eventName, eventParameters); result = new MouseClick(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 { 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)) { 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 eventName, Map eventParameters) { String xCoord = eventParameters.get("X"); if (xCoord == null) { throw new IllegalArgumentException("eventParameters do not contain X coordinate."); } String yCoord = eventParameters.get("Y"); if (yCoord == null) { throw new IllegalArgumentException("eventParameters do not contain Y coordinate."); } try { return new int[] { Integer.parseInt(xCoord), Integer.parseInt(yCoord) }; } catch (NumberFormatException e) { throw new IllegalArgumentException("the coordinates provided" + " of an " + eventName + " event are no numbers"); } } }