001package jmri.jmrit.logixng.expressions.swing; 002 003import java.text.ParseException; 004import java.util.List; 005import java.util.Locale; 006 007import javax.annotation.CheckForNull; 008import javax.annotation.Nonnull; 009import javax.swing.JLabel; 010import javax.swing.JPanel; 011import javax.swing.JTextField; 012 013import jmri.InstanceManager; 014import jmri.jmrit.logixng.Base; 015import jmri.jmrit.logixng.AnalogExpressionManager; 016import jmri.jmrit.logixng.MaleSocket; 017import jmri.jmrit.logixng.expressions.AnalogExpressionConstant; 018import jmri.util.IntlUtilities; 019 020/** 021 * Configures an ActionTurnout object with a Swing JPanel. 022 * 023 * @author Daniel Bergqvist Copyright 2021 024 */ 025public class AnalogExpressionConstantSwing extends AbstractAnalogExpressionSwing { 026 027 private JTextField _constant; 028 029 @Override 030 protected void createPanel(@CheckForNull Base object, @Nonnull JPanel buttonPanel) { 031 AnalogExpressionConstant expression = (AnalogExpressionConstant)object; 032 panel = new JPanel(); 033 JLabel label = new JLabel(Bundle.getMessage("AnalogExpressionConstant_Constant")); 034 _constant = new JTextField(); 035 _constant.setColumns(10); 036 if (expression != null) { 037 _constant.setText(String.format(Locale.getDefault(), "%1.2f", expression.getValue())); 038 } 039 panel.add(label); 040 panel.add(_constant); 041 } 042 043 /** {@inheritDoc} */ 044 @Override 045 public boolean validate(@Nonnull List<String> errorMessages) { 046 if (_constant.getText().isEmpty()) { 047 return true; 048 } 049 050 try { 051 Double d = IntlUtilities.doubleValue(_constant.getText()); 052 log.debug("validated number {} passes try / catch", d); 053 return true; 054 } catch (ParseException e) { 055 errorMessages.add(Bundle.getMessage("AnalogExpressionConstant_NotANumber", _constant.getText())); 056 return false; 057 } 058 } 059 060 /** {@inheritDoc} */ 061 @Override 062 public MaleSocket createNewObject(@Nonnull String systemName, @CheckForNull String userName) { 063 AnalogExpressionConstant expression = new AnalogExpressionConstant(systemName, userName); 064 updateObject(expression); 065 return InstanceManager.getDefault(AnalogExpressionManager.class).registerExpression(expression); 066 } 067 068 /** {@inheritDoc} */ 069 @Override 070 public void updateObject(@Nonnull Base object) { 071 if (!(object instanceof AnalogExpressionConstant)) { 072 throw new IllegalArgumentException("object must be an AnalogExpressionConstant but is a: " 073 + object.getClass().getName()); 074 } 075 076 AnalogExpressionConstant expression = (AnalogExpressionConstant)object; 077 078 if (!_constant.getText().isEmpty()) { 079 try { 080 expression.setValue(IntlUtilities.doubleValue(_constant.getText())); 081 } catch (ParseException ex) { 082 log.error("Could not generate Double constant from {}", _constant.getText(), ex); 083 } 084 } else { 085 expression.setValue(0.0); 086 } 087 } 088 089 /** {@inheritDoc} */ 090 @Override 091 public String toString() { 092 return Bundle.getMessage("AnalogExpressionConstant_Short"); 093 } 094 095 @Override 096 public void dispose() { 097 } 098 099 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(AnalogExpressionConstantSwing.class); 100 101}