| /******************************************************************************* |
| * Copyright (c) 2015 Dirk Fauth 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: |
| * Dirk Fauth <dirk.fauth@gmail.com> - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.nebula.widgets.nattable.util; |
| |
| import org.eclipse.nebula.widgets.nattable.layer.ILayer; |
| |
| /** |
| * Interface for specifying a value cache to support value calculations in a |
| * background thread. |
| * |
| * @see CalculatedValueCache |
| * @since 1.3 |
| */ |
| public interface ICalculatedValueCache { |
| |
| /** |
| * Returns the calculated value for the specified column and row position. |
| * If there is no calculated value for that coordinates in the cache or |
| * there is a potentially stale value, the re-calculation of the value is |
| * executed. |
| * <p> |
| * This method tries to use a predefined cache key dependent on the |
| * configuration of this CalculatedValueCache. |
| * |
| * @param columnPosition |
| * The column position of the requested value. |
| * @param rowPosition |
| * The row position of the requested value. |
| * @param calculateInBackground |
| * Flag to specify whether the value calculation should be |
| * processed in the background or not. Setting this value to |
| * <code>false</code> will cause calculation in the UI thread, |
| * which is usually necessary in case of exporting and printing. |
| * @param calculator |
| * The {@link ICalculator} that is used for calculating the |
| * values. |
| * @return The value for the given coordinates. |
| * |
| * @throws IllegalStateException |
| * if this CalculatedValueCache is configured to not use the |
| * column and row position for cache key definition. |
| */ |
| public abstract Object getCalculatedValue(int columnPosition, |
| int rowPosition, boolean calculateInBackground, |
| ICalculator calculator); |
| |
| /** |
| * Returns the calculated value for the specified column and row position. |
| * If there is no calculated value for that coordinates in the cache or |
| * there is a potentially stale value, the re-calculation of the value is |
| * executed. |
| * <p> |
| * This method uses the given ICalculatedValueCacheKey instead of |
| * determining the cache key out of the CalculatedValueCache key |
| * configuration. |
| * |
| * @param columnPosition |
| * The column position of the requested value. |
| * @param rowPosition |
| * The row position of the requested value. |
| * @param key |
| * The key that is used by this CalculatedValueCache. |
| * @param calculateInBackground |
| * Flag to specify whether the value calculation should be |
| * processed in the background or not. Setting this value to |
| * <code>false</code> will cause calculation in the UI thread, |
| * which is usually necessary in case of exporting and printing. |
| * @param calculator |
| * The {@link ICalculator} that is used for calculating the |
| * values. |
| * @return The value for the given coordinates. |
| */ |
| public abstract Object getCalculatedValue(int columnPosition, |
| int rowPosition, ICalculatedValueCacheKey key, |
| boolean calculateInBackground, ICalculator calculator); |
| |
| /** |
| * Clear the internal cache. Doing this will result in triggering new |
| * calculations. If the values where calculated before, using the cache copy |
| * still the already calculated values will be returned until the new |
| * calculation is done. |
| */ |
| public abstract void clearCache(); |
| |
| /** |
| * Kills all cached values. The internal cache aswell as the cache copy to |
| * support smooth updates of values. This is necessary because on structural |
| * changes, e.g. deleting/adding rows, the cache copy would return false |
| * values. |
| */ |
| public abstract void killCache(); |
| |
| /** |
| * Cleaning up internal resources like shutting down the ExecutorService. |
| */ |
| public abstract void dispose(); |
| |
| /** |
| * Set the layer that should be used by this CalculatedValueCache to trigger |
| * updates after the calculation processing is done. Necessary if the |
| * caching is connected to a data provider for example, which is not able to |
| * fire events itself. |
| * |
| * @param layer |
| * The ILayer that should be used to fire the |
| * CellVisualChangeEvent after the background calculation process |
| * is done. |
| */ |
| public abstract void setLayer(ILayer layer); |
| |
| } |