package com.tibco.as.spacebar.ui.editor; import org.eclipse.nebula.widgets.nattable.data.convert.ConversionFailedException; import org.eclipse.nebula.widgets.nattable.data.convert.DisplayConverter; import org.eclipse.osgi.util.NLS; import com.tibco.as.convert.Attributes; import com.tibco.as.convert.ConverterFactory; import com.tibco.as.convert.IConverter; import com.tibco.as.convert.UnsupportedConversionException; /** * Converts a byte array to a string and vice versa */ public class FieldDisplayConverter<T> extends DisplayConverter { private IConverter<T, String> formatter; private IConverter<String, T> parser; private String typeName; private FieldDisplayConverter(String typeName, IConverter<T, String> formatter, IConverter<String, T> parser) { this.typeName = typeName; this.formatter = formatter; this.parser = parser; } @SuppressWarnings("unchecked") public static <T> FieldDisplayConverter<T> create(Class<T> clazz, String typeName, Attributes attributes) throws UnsupportedConversionException { ConverterFactory factory = new ConverterFactory(); factory.setAttributes(attributes); return new FieldDisplayConverter<T>(typeName, factory.getConverter( clazz, String.class), factory.getConverter(String.class, clazz)); } @SuppressWarnings("unchecked") @Override public Object canonicalToDisplayValue(Object canonicalValue) { try { return formatter.convert((T) canonicalValue); } catch (Exception e) { return canonicalValue; } } @Override public Object displayToCanonicalValue(Object displayValue) { String string = displayValue.toString(); try { return parser.convert(string); } catch (Exception e) { throw new ConversionFailedException(NLS.bind( "[{0}] is not a valid {1}", string, typeName), e); } } }