/*******************************************************************************
* Copyright (c) 2004, 2010 BREDEX GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jubula.client.core.constants;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.eclipse.jubula.client.core.i18n.Messages;
import org.eclipse.jubula.toolkit.enums.ValueSets.InteractionMode;
import org.eclipse.jubula.tools.internal.constants.InputConstants;
/**
* Provides helper methods and classes for mapping input codes and input types
* to their corresponding inputs.
*
* @author BREDEX GmbH
* @created 08.07.2005
*/
public class InputCodeHelper {
/**
* Encapsulates the information for a single input
* (ex. key press, mouse click).
*
* @author BREDEX GmbH
* @created Sep 18, 2009
*/
public static class UserInput {
/** the type of input represented */
private int m_type;
/**
* a code containing additional information about the input
* the actual meaning of the code is dependant on the input type
*/
private int m_code;
/**
* Constructor
*
* @param code Specific information about the content of the input.
* @param type The type of input.
*/
public UserInput(int code, int type) {
m_code = code;
m_type = type;
}
/**
*
* @return type-specific information about the content of the input.
*/
public int getCode() {
return m_code;
}
/**
*
* @return the type of the input.
*/
public int getType() {
return m_type;
}
/**
* {@inheritDoc}
*/
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof UserInput) {
UserInput input = (UserInput)obj;
return new EqualsBuilder().append(getCode(), input.getCode())
.append(getType(), input.getType()).isEquals();
}
return false;
}
/**
* {@inheritDoc}
*/
public int hashCode() {
return new HashCodeBuilder().append(getCode())
.append(getType()).toHashCode();
}
}
/**
* instance
*/
private static InputCodeHelper instance = null;
/**
* modifier keycodes
*/
private int[] m_modifier = new int[6];
/** all key-press inputs */
private UserInput[] m_keys;
/** all inputs */
private UserInput[] m_inputs;
/**
* general inputs text
*/
private String[] m_inputStrings;
/**
* keys text
*/
private String[] m_keyStrings;
/**
* modifier text
*/
private String[] m_modifierString;
/**
* private constructor
*
*/
private InputCodeHelper() {
m_modifier[0] = InputEvent.CTRL_DOWN_MASK;
m_modifier[1] = InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK;
m_modifier[2] = InputEvent.CTRL_DOWN_MASK | InputEvent.ALT_DOWN_MASK;
m_modifier[3] = InputEvent.ALT_DOWN_MASK;
m_modifier[4] = InputEvent.ALT_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK;
m_modifier[5] = 0; // no modifier pressed
List<UserInput> inputList = new ArrayList<UserInput>();
List<String> inputStringList = new ArrayList<String>();
for (int i = KeyEvent.VK_0; i <= KeyEvent.VK_9; i++) {
inputList.add(new UserInput(i, InputConstants.TYPE_KEY_PRESS));
inputStringList.add(KeyEvent.getKeyText(i));
}
for (int i = KeyEvent.VK_A; i <= KeyEvent.VK_Z; i++) {
inputList.add(new UserInput(i, InputConstants.TYPE_KEY_PRESS));
inputStringList.add(KeyEvent.getKeyText(i));
}
for (int i = KeyEvent.VK_NUMPAD0; i <= KeyEvent.VK_ADD; i++) {
inputList.add(new UserInput(i, InputConstants.TYPE_KEY_PRESS));
inputStringList.add(KeyEvent.getKeyText(i));
}
for (int i = KeyEvent.VK_SUBTRACT; i <= KeyEvent.VK_DIVIDE; i++) {
inputList.add(new UserInput(i, InputConstants.TYPE_KEY_PRESS));
inputStringList.add(KeyEvent.getKeyText(i));
}
for (int i = KeyEvent.VK_F1; i <= KeyEvent.VK_F12; i++) {
inputList.add(new UserInput(i, InputConstants.TYPE_KEY_PRESS));
inputStringList.add(KeyEvent.getKeyText(i));
}
m_modifierString = new String[m_modifier.length];
for (int i = 0; i < m_modifier.length; i++) {
m_modifierString[i] = InputEvent.getModifiersExText(m_modifier[i]);
}
m_keys = inputList.toArray(new UserInput[inputList.size()]);
m_keyStrings =
inputStringList.toArray(new String[inputStringList.size()]);
inputList.add(new UserInput(
InteractionMode.primary.rcIntValue(),
InputConstants.TYPE_MOUSE_CLICK));
inputList.add(new UserInput(
InteractionMode.tertiary.rcIntValue(),
InputConstants.TYPE_MOUSE_CLICK));
inputList.add(new UserInput(
InteractionMode.secondary.rcIntValue(),
InputConstants.TYPE_MOUSE_CLICK));
inputStringList.add(Messages.ObjectMappingPreferencePageMouseButton1);
inputStringList.add(Messages.ObjectMappingPreferencePageMouseButton2);
inputStringList.add(Messages.ObjectMappingPreferencePageMouseButton3);
m_inputs = inputList.toArray(new UserInput[inputList.size()]);
m_inputStrings =
inputStringList.toArray(new String[inputStringList.size()]);
}
/**
* getInstance Method
* @return KeyCommands
*/
public static InputCodeHelper getInstance() {
if (instance == null) {
instance = new InputCodeHelper();
}
return instance;
}
/**
* @return all available key-press inputs.
*/
public UserInput[] getKeys() {
return m_keys;
}
/**
* @return all available inputs.
*/
public UserInput[] getInputs() {
return m_inputs;
}
/**
*
* @return text corresponding to all available inputs. This text is
* suitable for displaying to the user.
*/
public String[] getInputStrings() {
return m_inputStrings;
}
/**
*
* @return text corresponding to all available key-press inputs. This
* text is suitable for displaying to the user.
*/
public String[] getKeyStrings() {
return m_keyStrings;
}
/**
* @return Returns the modifier.
*/
public int[] getModifier() {
return m_modifier;
}
/**
* @return Returns the modifierString.
*/
public String[] getModifierString() {
return m_modifierString;
}
/**
* gives you the index of a modifier code
* @param modifier
* int
* @return
* int
*/
public int getIndexOfModifier(int modifier) {
return ArrayUtils.indexOf(m_modifier, modifier);
}
}