/* This file is part of SlumDroid <https://github.com/slumdroid/slumdroid>. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License <http://www.gnu.org/licenses/gpl-3.0.txt> * for more details. * * Copyright (C) 2012-2016 Gennaro Imparato */ package it.slumdroid.tool.utilities.adapters; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import it.slumdroid.droidmodels.model.UserEvent; import it.slumdroid.droidmodels.model.UserInput; import it.slumdroid.droidmodels.model.WidgetState; import it.slumdroid.tool.components.abstractor.Abstractor; import it.slumdroid.tool.model.Interactor; // TODO: Auto-generated Javadoc /** * The Class SimpleInteractorAdapter. */ public abstract class SimpleInteractorAdapter implements Interactor { /** The widget classes. */ protected HashSet<String> widgetClasses = new HashSet<String>(); /** The abstractor. */ private Abstractor theAbstractor; /** * Instantiates a new simple interactor adapter. * * @param simpleTypes the simple types */ public SimpleInteractorAdapter(String ... simpleTypes) { for (String type: simpleTypes) { this.widgetClasses.add(type); } } /* (non-Javadoc) * @see it.slumdroid.tool.model.Interactor#canUseWidget(it.slumdroid.droidmodels.model.WidgetState) */ public boolean canUseWidget(WidgetState widget) { return widget.isAvailable() && matchClass(widget.getSimpleType()); } /* (non-Javadoc) * @see it.slumdroid.tool.model.Interactor#getEvents(it.slumdroid.droidmodels.model.WidgetState) */ public List<UserEvent> getEvents(WidgetState widget) { ArrayList<UserEvent> events = new ArrayList<UserEvent>(); if (canUseWidget(widget)) { events.add(generateEvent(widget)); } return events; } /* (non-Javadoc) * @see it.slumdroid.tool.model.Interactor#getInputs(it.slumdroid.droidmodels.model.WidgetState) */ public List<UserInput> getInputs(WidgetState widget) { ArrayList<UserInput> inputs = new ArrayList<UserInput>(); if (canUseWidget(widget)) { inputs.add(generateInput(widget)); } return inputs; } /* (non-Javadoc) * @see it.slumdroid.tool.model.Interactor#getEvents(it.slumdroid.droidmodels.model.WidgetState, java.lang.String[]) */ public List<UserEvent> getEvents(WidgetState widget, String ... values) { ArrayList<UserEvent> events = new ArrayList<UserEvent>(); if (canUseWidget(widget)) { for (String value: values) { events.add(generateEvent(widget, value)); } } return events; } /* (non-Javadoc) * @see it.slumdroid.tool.model.Interactor#getInputs(it.slumdroid.droidmodels.model.WidgetState, java.lang.String[]) */ public List<UserInput> getInputs(WidgetState widget, String ... values) { ArrayList<UserInput> inputs = new ArrayList<UserInput>(); if (canUseWidget(widget)) { for (String value: values) { inputs.add(generateInput(widget, value)); } } return inputs; } /** * Creates the event. * * @param widget the widget * @return the user event */ protected UserEvent createEvent(WidgetState widget) { return getAbstractor().createEvent(widget, getInteractionType()); } /** * Generate event. * * @param widget the widget * @return the user event */ protected UserEvent generateEvent(WidgetState widget) { return createEvent(widget); } /** * Generate input. * * @param widget the widget * @return the user input */ protected UserInput generateInput(WidgetState widget) { return generateInput(widget, ""); } /** * Generate event. * * @param widget the widget * @param value the value * @return the user event */ protected UserEvent generateEvent(WidgetState widget, String value) { UserEvent event = createEvent(widget); event.setValue(value); return event; } /** * Generate input. * * @param widget the widget * @param value the value * @return the user input */ protected UserInput generateInput(WidgetState widget, String value) { return getAbstractor().createInput(widget, value, getInteractionType()); } /* (non-Javadoc) * @see it.slumdroid.tool.model.Interactor#getAbstractor() */ public Abstractor getAbstractor() { return this.theAbstractor; } /* (non-Javadoc) * @see it.slumdroid.tool.model.Interactor#setAbstractor(it.slumdroid.tool.model.Abstractor) */ public void setAbstractor(Abstractor abstractor) { this.theAbstractor = abstractor; } /* (non-Javadoc) * @see it.slumdroid.tool.model.Interactor#getInteractionType() */ public abstract String getInteractionType(); /** * Match class. * * @param type the type * @return true, if successful */ protected boolean matchClass(String type) { for (String storedType: this.widgetClasses) { if (storedType.equals(type)) { return true; } } return false; } }