blob: e93bfc22513b619dcfa72a037d1fdf272d9b8962 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2020 Original authors and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.data.convert;
import static org.eclipse.nebula.widgets.nattable.util.ObjectUtils.isNotEmpty;
import static org.eclipse.nebula.widgets.nattable.util.ObjectUtils.isNotNull;
import java.text.NumberFormat;
import org.eclipse.nebula.widgets.nattable.Messages;
/**
* Converts the display value to a double and vice versa.
*/
public abstract class NumericDisplayConverter extends DisplayConverter {
protected NumberFormat nf = NumberFormat.getInstance();
@Override
public Object canonicalToDisplayValue(Object canonicalValue) {
try {
if (isNotNull(canonicalValue)) {
if (this.nf != null) {
return this.nf.format(canonicalValue);
}
return canonicalValue.toString();
}
return null;
} catch (Exception e) {
return canonicalValue;
}
}
@Override
public Object displayToCanonicalValue(Object displayValue) {
try {
if (isNotNull(displayValue) && isNotEmpty(displayValue.toString())) {
return convertToNumericValue(displayValue.toString().trim());
}
return null;
} catch (Exception e) {
throw new ConversionFailedException(Messages.getString("NumericDisplayConverter.failure", //$NON-NLS-1$
displayValue), e);
}
}
protected abstract Object convertToNumericValue(String value);
/**
*
* @return The {@link NumberFormat} that is used to format numeric values.
*/
public NumberFormat getNumberFormat() {
return this.nf;
}
/**
*
* @param nf
* The {@link NumberFormat} that should be used to format numeric
* values.
*/
public void setNumberFormat(NumberFormat nf) {
this.nf = nf;
}
}