package org.goko.common.preferences.fieldeditor.preference; import java.math.BigDecimal; import org.apache.commons.lang3.StringUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.goko.core.common.exception.GkException; import org.goko.core.common.utils.BigDecimalUtils; public class BigDecimalFieldEditor extends StringFieldEditor { public BigDecimalFieldEditor(Composite parent, int style) { super(parent, style); setErrorMessage("A valid number is required"); } @Override protected void createControls(Composite parent, int style) { createLayout(parent); labelControl = new Label(this, style); labelControl.setText("Default"); labelControl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); control = new Text(this, SWT.BORDER | SWT.RIGHT); control.setText("Text"); control.setLayoutData(new GridData(SWT.LEFT, SWT.RIGHT, true, false, 1, 1)); control.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { valueChanged(); } }); control.pack(); this.pack(); } /** (inheritDoc) * @see org.goko.common.preferences.fieldeditor.preference.StringFieldEditor#isValidValue() */ @Override protected boolean isValidValue() { boolean valid = true; if(StringUtils.isNotBlank(getText())){ valid = BigDecimalUtils.isBigDecimal(getText()); } return valid; } @Override protected void loadValue() throws GkException { BigDecimal decimalValue = new BigDecimal(getPreferenceStore().getString(getPreferenceName())); getControl().setText( BigDecimalUtils.toString(decimalValue)); refreshValidState(); } protected BigDecimal getBigDecimalValue(){ return new BigDecimal(getPreferenceStore().getString(getPreferenceName())); } /** (inheritDoc) * @see org.goko.common.preferences.fieldeditor.preference.StringFieldEditor#storeValue() */ @Override protected void storeValue() throws GkException { BigDecimal decimalValue = BigDecimalUtils.parse(getControl().getText()); getPreferenceStore().setValue(getPreferenceName(), decimalValue.toString()); } }