package com.vistatec.ocelot.lqi.model; import java.awt.event.KeyEvent; import javax.swing.KeyStroke; /** * The LQI shortcut. */ public class LQIShortCut { /** The related severity. */ private LQISeverity severity; /** The key code. */ private int keyCode; /** The modifiers. */ private int[] modifiers; /** The shortcut. */ private String shortCut; /** * Constructor. * * @param severity * the severity * @param keyCode * the key code * @param modifiers * the modifiers. */ public LQIShortCut(LQISeverity severity, int keyCode, int[] modifiers) { this.severity = severity; setShortCut(keyCode, modifiers); } /** * Constructor. * * @param severity * the severity * @param keyCode * the key code * @param modifiersString * the modifier string */ public LQIShortCut(LQISeverity severity, int keyCode, String modifiersString) { this.severity = severity; this.keyCode = keyCode; buildModifiersFromString(modifiersString); } /** * Gets the key code. * * @return the key code. */ public int getKeyCode() { return keyCode; } /** * Sets the shortcut by setting the key code and the modifiers. * * @param keyCode * the key code. * @param modifiers * the modifiers. */ public final void setShortCut(int keyCode, int[] modifiers) { this.keyCode = keyCode; this.modifiers = modifiers; buildShortCut(); } /** * Gets the modifiers. * * @return the modifiers. */ public int[] getModifiers() { return modifiers; } /** * Gets the key stroke. * * @return the key stroke. */ public KeyStroke getKeyStroke() { return KeyStroke.getKeyStroke(keyCode, getModifiersSum()); } public void setSeverity(LQISeverity severity) { this.severity = severity; } public LQISeverity getSeverity() { return severity; } public LQIShortCut clone(LQISeverity severity) { return new LQIShortCut(severity, keyCode, modifiers); } private int getModifiersSum() { int modifiersSum = 0; if (modifiers != null) { for (int modifier : modifiers) { modifiersSum += modifier; } } return modifiersSum; } private void buildShortCut() { StringBuilder shortcutBuilder = new StringBuilder(); shortcutBuilder.append(KeyEvent.getModifiersExText(getModifiersSum())); if (shortcutBuilder.length() > 0) { shortcutBuilder.append("+"); } shortcutBuilder.append(KeyEvent.getKeyText(keyCode)); shortCut = shortcutBuilder.toString(); } /** * Gets the shortcut string * * @return the sshortcut string. */ public String getShortCut() { return shortCut; } /** * Gets the modifiers string. * * @return the modifiers string. */ public String getModifiersString() { return KeyEvent.getModifiersExText(getModifiersSum()); } /** * Builds the modifiers from the modifiers string. * * @param modifiersString * the modifiers string. */ private void buildModifiersFromString(String modifiersString) { if (modifiersString != null && !modifiersString.isEmpty()) { String[] modStringSplit = modifiersString.split("\\+"); modifiers = new int[modStringSplit.length]; for (int i = 0; i < modStringSplit.length; i++) { if (modStringSplit[i].equals(KeyEvent .getModifiersExText(KeyEvent.CTRL_DOWN_MASK))) { modifiers[i] = KeyEvent.CTRL_DOWN_MASK; } else if (modStringSplit[i].equals(KeyEvent .getModifiersExText(KeyEvent.ALT_DOWN_MASK))) { modifiers[i] = KeyEvent.ALT_DOWN_MASK; } else if (modStringSplit[i].equals(KeyEvent .getModifiersExText(KeyEvent.SHIFT_DOWN_MASK))) { modifiers[i] = KeyEvent.SHIFT_DOWN_MASK; } } shortCut = modifiersString + "+" + KeyEvent.getKeyText(keyCode); } else { shortCut = KeyEvent.getKeyText(keyCode); } } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ @Override public String toString() { return shortCut; } /* * (non-Javadoc) * * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { boolean retValue = false; if (obj instanceof LQIShortCut) { LQIShortCut shotrcutObj = (LQIShortCut) obj; retValue = keyCode == shotrcutObj.getKeyCode() && shotrcutObj.getModifiersSum() == getModifiersSum(); } else { retValue = super.equals(obj); } return retValue; } /* * (non-Javadoc) * * @see java.lang.Object#hashCode() */ @Override public int hashCode() { return keyCode + getModifiersSum(); } }