/* 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;
import static it.slumdroid.droidmodels.model.InteractionType.CLICK;
import static it.slumdroid.droidmodels.model.InteractionType.WRITE_TEXT;
import static it.slumdroid.tool.Prefs.ADDITIONAL_EVENTS;
import static it.slumdroid.tool.Prefs.ADDITIONAL_INPUTS;
import static it.slumdroid.tool.Resources.HASH_VALUES;
import static it.slumdroid.tool.Resources.RANDOM_SEED;
import java.util.HashMap;
import java.util.Random;
import it.slumdroid.tool.components.abstractor.Abstractor;
import it.slumdroid.tool.model.UserAdapter;
import it.slumdroid.tool.utilities.adapters.SimpleInteractorAdapter;
import it.slumdroid.tool.utilities.adapters.SimpleUserAdapter;
import it.slumdroid.tool.utilities.interactors.BarSlider;
import it.slumdroid.tool.utilities.interactors.Clicker;
import it.slumdroid.tool.utilities.interactors.LongClicker;
import it.slumdroid.tool.utilities.interactors.TabSwapper;
import it.slumdroid.tool.utilities.interactors.TabSwiper;
import it.slumdroid.tool.utilities.interactors.editor.HashEnterEditor;
import it.slumdroid.tool.utilities.interactors.editor.HashWriteEditor;
import it.slumdroid.tool.utilities.interactors.editor.RandomEnterEditor;
import it.slumdroid.tool.utilities.interactors.editor.RandomWriteEditor;
import it.slumdroid.tool.utilities.interactors.selector.ListLongSelector;
import it.slumdroid.tool.utilities.interactors.selector.ListSelector;
import it.slumdroid.tool.utilities.interactors.selector.RadioSelector;
import it.slumdroid.tool.utilities.interactors.selector.RandomSpinnerSelector;
import it.slumdroid.tool.utilities.interactors.selector.SpinnerSelector;
// TODO: Auto-generated Javadoc
/**
* A factory for creating User objects.
*/
public class UserFactory {
/** The event to type map. */
private static HashMap<String,String[]> eventsMap = new HashMap<String,String[]>();
/** The input to type map. */
private static HashMap<String,String[]> inputsMap = new HashMap<String,String[]>();
/**
* Adds the event.
*
* @param eventType the event type
* @param widgetTypes the widget types
*/
public static void addEvent(String eventType, String ... widgetTypes) {
eventsMap.put(eventType, widgetTypes);
}
/**
* Adds the input.
*
* @param inputType the input type
* @param widgetTypes the widget types
*/
public static void addInput(String inputType, String ... widgetTypes) {
inputsMap.put(inputType, widgetTypes);
}
/**
* Types for event.
*
* @param interaction the interaction
* @return the string[]
*/
private static String[] typesForEvent(String interaction) {
return eventsMap.get(interaction);
}
/**
* Types for input.
*
* @param interaction the interaction
* @return the string[]
*/
private static String[] typesForInput(String interaction) {
return inputsMap.get(interaction);
}
/**
* Checks if is required event.
*
* @param interaction the interaction
* @return true, if is required event
*/
private static boolean isRequiredEvent(String interaction) {
return UserFactory.eventsMap.containsKey(interaction);
}
/**
* Checks if is required input.
*
* @param interaction the interaction
* @return true, if is required input
*/
private static boolean isRequiredInput(String interaction) {
return UserFactory.inputsMap.containsKey(interaction);
}
/**
* Gets the user.
*
* @param abstractor the abstractor
* @return the user
*/
public static UserAdapter getUser(Abstractor abstractor) {
UserAdapter userAdapter = new SimpleUserAdapter(abstractor, new Random(RANDOM_SEED));
userAdapter.addEvent(new Clicker(typesForEvent(CLICK)));
userAdapter.addEvent(new LongClicker());
if (isRequiredEvent(WRITE_TEXT)) {
if(HASH_VALUES) {
userAdapter.addEvent(new HashWriteEditor(typesForEvent(WRITE_TEXT)));
} else {
userAdapter.addEvent(new RandomWriteEditor(typesForEvent(WRITE_TEXT)));
}
}
if(HASH_VALUES) {
userAdapter.addEvent(new HashEnterEditor());
} else {
userAdapter.addEvent(new RandomEnterEditor());
}
userAdapter.addEvent(new ListSelector());
userAdapter.addEvent(new ListLongSelector());
userAdapter.addEvent(new SpinnerSelector());
userAdapter.addEvent(new RadioSelector());
userAdapter.addEvent(new TabSwapper());
userAdapter.addEvent(new TabSwiper());
for (SimpleInteractorAdapter interactor: ADDITIONAL_EVENTS) {
userAdapter.addEvent(interactor);
}
userAdapter.addInput(new Clicker(typesForInput(CLICK)));
if (isRequiredInput(WRITE_TEXT)) {
if (HASH_VALUES) {
userAdapter.addInput(new HashWriteEditor(typesForInput(WRITE_TEXT)));
} else {
userAdapter.addInput(new RandomWriteEditor(typesForInput(WRITE_TEXT)));
}
}
userAdapter.addInput(new BarSlider());
userAdapter.addInput(new RandomSpinnerSelector());
for (SimpleInteractorAdapter interactor: ADDITIONAL_INPUTS) {
userAdapter.addInput(interactor);
}
return userAdapter;
}
}