package com.onaro.sanscreen.client.view.tabular.columns; import org.eclipse.core.runtime.IAdaptable; import com.onaro.client.swing.table.functional.IFunction; import com.onaro.client.swing.table.functional.IFunctionGroup; public class FunctionColumnValueRetriever> extends AbstractColumnValueRetriever { protected final Class functionClass; private Class functionValueType; public FunctionColumnValueRetriever(Class functionClass, Class functionValueType) { this.functionClass = functionClass; this.functionValueType = functionValueType; } @Override public Class getValueType() { return functionValueType; } @Override public V getValue(IAdaptable rowObj) { F function = getRequiredFunction(functionClass); V value = function.evaluate(rowObj); if (functionValueType == null && value != null) { // Lazily initialize the functionValueType by the value retrieved from the function @SuppressWarnings("unchecked") Class castClass = (Class)value.getClass(); functionValueType = castClass; } return value; } @Override public void getRequiredFunctions(IFunctionGroup functionGroup) { super.getRequiredFunctions(functionGroup); functionGroup.add(functionClass); } }