/* 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.interactors.editor;
import static it.slumdroid.droidmodels.model.InteractionType.WRITE_TEXT;
import static it.slumdroid.droidmodels.model.SimpleType.AUTOC_TEXT;
import static it.slumdroid.droidmodels.model.SimpleType.EDIT_TEXT;
import static it.slumdroid.droidmodels.model.SimpleType.SEARCH_BAR;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import it.slumdroid.droidmodels.model.UserEvent;
import it.slumdroid.droidmodels.model.UserInput;
import it.slumdroid.droidmodels.model.WidgetState;
import it.slumdroid.tool.utilities.adapters.SimpleInteractorAdapter;
// TODO: Auto-generated Javadoc
/**
* The Class AdditionalWriteEditor.
*/
public class AdditionalWriteEditor extends SimpleInteractorAdapter {
/** The id value pairs. */
private Map<String,ArrayList<String>> idValuePairs = new Hashtable<String,ArrayList<String>>();
/**
* Instantiates a new additional write editor.
*/
public AdditionalWriteEditor() {
this(EDIT_TEXT, AUTOC_TEXT, SEARCH_BAR);
}
/**
* Instantiates a new additional write editor.
*
* @param simpleTypes the simple types
*/
public AdditionalWriteEditor(String ... simpleTypes) {
super(simpleTypes);
}
/* (non-Javadoc)
* @see it.slumdroid.tool.utilities.adapters.SimpleInteractorAdapter#canUseWidget(it.slumdroid.droidmodels.model.WidgetState)
*/
@Override
public boolean canUseWidget(WidgetState widget) {
return super.canUseWidget(widget) && hasId(widget.getId());
}
/**
* Checks for id.
*
* @param id the id
* @return true, if successful
*/
public boolean hasId(String id) {
for (Map.Entry<String,ArrayList<String>> entry: this.idValuePairs.entrySet()) {
if (id.equals(entry.getKey())) {
return true;
}
}
return false;
}
/* (non-Javadoc)
* @see it.slumdroid.tool.utilities.adapters.SimpleInteractorAdapter#getEvents(it.slumdroid.droidmodels.model.WidgetState)
*/
@Override
public List<UserEvent> getEvents(WidgetState widget) {
ArrayList<UserEvent> events = new ArrayList<UserEvent>();
if (canUseWidget(widget)) {
ArrayList<String> values = this.idValuePairs.get(widget.getId());
for (String value: values) {
events.add(generateEvent(widget, value));
}
}
return events;
}
/* (non-Javadoc)
* @see it.slumdroid.tool.utilities.adapters.SimpleInteractorAdapter#getInputs(it.slumdroid.droidmodels.model.WidgetState)
*/
@Override
public List<UserInput> getInputs(WidgetState widget) {
ArrayList<UserInput> inputs = new ArrayList<UserInput>();
if (canUseWidget(widget)) {
ArrayList<String> values = this.idValuePairs.get(widget.getId());
for (String value: values) {
inputs.add(generateInput(widget, value));
}
}
return inputs;
}
/* (non-Javadoc)
* @see it.slumdroid.tool.utilities.adapters.SimpleInteractorAdapter#getInteractionType()
*/
public String getInteractionType() {
return WRITE_TEXT;
}
/**
* Sets the id value pairs.
*
* @param pairs the pairs
*/
public void setIdValuePairs(Map<String,ArrayList<String>> pairs) {
this.idValuePairs = pairs;
}
/**
* Adds the id value pair.
*
* @param id the id
* @param values the values
* @return the additional write editor
*/
public AdditionalWriteEditor addIdValuePair(String id, String ... values) {
ArrayList<String> valuesForId;
if (!hasId(id)) {
valuesForId = new ArrayList<String>();
this.idValuePairs.put(id, valuesForId);
} else {
valuesForId = this.idValuePairs.get(id);
}
for (String value: values) {
valuesForId.add(value);
}
return this;
}
}