/******************************************************************************* * Copyright (c) 2012, 2013 Original authors and others. * 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: * Original authors and others - initial API and implementation ******************************************************************************/ package org.eclipse.nebula.widgets.nattable.tickupdate; /** * Interface for handler that is responsible for handling tick updates. Will * return information about which type of objects it can handle and will do the * increment/decrement calculation. Also specifies the default implementation * that can handle {@link Number} values. */ public interface ITickUpdateHandler { /** * Checks if the given object can be handled by this handler. Usually it * will simply perform a instanceof check. * * @param value * The value to check. * @return <code>true</code> if this handler is able to perform tick updates * on the given value, <code>false</code> if not. */ boolean isApplicableFor(Object value); /** * Perform an increment of the current value by a default value. * * @param currentValue * The value to perform the increment on. * @return The new value after increment it by a default value. */ public Object getIncrementedValue(Object currentValue); /** * Perform an increment of the current value by the given increment value. * * @param currentValue * The value to perform the increment on. * @param incrementSize * The value the currentValue should be incremented by. * @return The new value after increment it by the specified value. */ public Object getIncrementedValue(Object currentValue, double incrementSize); /** * Perform an decrement of the current value by a default value. * * @param currentValue * The value to perform the decrement on. * @return The new value after decrement it by a default value. */ public Object getDecrementedValue(Object currentValue); /** * Perform an decrement of the current value by the given decrement value. * * @param currentValue * The value to perform the decrement on. * @param decrementSize * The value the currentValue should be decremented by. * @return The new value after decrement it by the specified value. */ public Object getDecrementedValue(Object currentValue, double decrementSize); /** * The default implementation of {@link ITickUpdateHandler} that handles * {@link Byte}, {@link Short}, {@link Integer}, {@link Long}, * {@link Double} and {@link Float} values. */ ITickUpdateHandler DEFAULT_TICK_UPDATE_HANDLER = new ITickUpdateHandler() { @Override public boolean isApplicableFor(Object value) { return (value instanceof Byte || value instanceof Short || value instanceof Integer || value instanceof Long || value instanceof Double || value instanceof Float); } @Override public Object getIncrementedValue(Object currentValue) { return getIncrementedValue(currentValue, 1); } @Override public Object getIncrementedValue(Object currentValue, double incrementSize) { if (currentValue instanceof Byte) { return Integer.valueOf( ((Byte) currentValue) + Double.valueOf(Math.abs(incrementSize)) .byteValue()).byteValue(); } if (currentValue instanceof Short) { return Integer.valueOf(((Integer) currentValue) + Double.valueOf(Math.abs(incrementSize)).intValue()); } if (currentValue instanceof Integer) { return Integer.valueOf(((Integer) currentValue) + Double.valueOf(Math.abs(incrementSize)).intValue()); } if (currentValue instanceof Long) { return Long.valueOf(((Long) currentValue) + Double.valueOf(Math.abs(incrementSize)).longValue()); } if (currentValue instanceof Double) { return Double.valueOf(((Double) currentValue) + Math.abs(incrementSize)); } if (currentValue instanceof Float) { return Float.valueOf(((Float) currentValue) + Double.valueOf(Math.abs(incrementSize)).floatValue()); } return currentValue; } @Override public Object getDecrementedValue(Object currentValue) { return getDecrementedValue(currentValue, 1); } @Override public Object getDecrementedValue(Object currentValue, double decrementSize) { if (currentValue instanceof Byte) { return Integer.valueOf( ((Byte) currentValue) - Double.valueOf(Math.abs(decrementSize)) .byteValue()).byteValue(); } if (currentValue instanceof Short) { return Integer.valueOf(((Integer) currentValue) - Double.valueOf(Math.abs(decrementSize)).intValue()); } if (currentValue instanceof Integer) { return Integer.valueOf(((Integer) currentValue) - Double.valueOf(Math.abs(decrementSize)).intValue()); } if (currentValue instanceof Long) { return Long.valueOf(((Long) currentValue) - Double.valueOf(Math.abs(decrementSize)).longValue()); } if (currentValue instanceof Double) { return Double.valueOf(((Double) currentValue) - Math.abs(decrementSize)); } if (currentValue instanceof Float) { return Float.valueOf(((Float) currentValue) - Double.valueOf(Math.abs(decrementSize)).floatValue()); } return currentValue; } }; }