/* * Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org * Use is subject to license terms. See license.txt. */ package org.beanfabrics.test; import org.beanfabrics.model.AbstractPM; import org.beanfabrics.model.IOperationPM; import org.beanfabrics.model.IntegerPM; import org.beanfabrics.model.OperationPM; import org.beanfabrics.model.PMManager; import org.beanfabrics.model.TextPM; import org.beanfabrics.support.Operation; import org.beanfabrics.support.Property; import org.beanfabrics.validation.ValidationRule; import org.beanfabrics.validation.ValidationState; /** * @author Michael Karneim */ public class CalculatorPM extends AbstractPM { @Property public final TextPM operator = new TextPM(); @Property public final IntegerPM result = new IntegerPM(); @Property public final IntegerPM input = new IntegerPM(); @Property public final IOperationPM plus = new OperationPM(); @Property public final IOperationPM minus = new OperationPM(); @Property public final IOperationPM showResult = new OperationPM(); public CalculatorPM() { init(); } private void init() { PMManager.setup(this); result.setInteger(0); operator.setText("+"); input.setMandatory(true); plus.getValidator().add(new ValidationRule() { public ValidationState validate() { if (!input.isValid()) { return new ValidationState("Enter a number"); } return null; } }); minus.getValidator().add(new ValidationRule() { public ValidationState validate() { if (!input.isValid()) { return new ValidationState("Enter a number"); } return null; } }); } @Operation public void plus() { plus.check(); this.evaluate(); operator.setText("+"); input.setInteger(result.getInteger()); } @Operation public void minus() { minus.check(); this.evaluate(); operator.setText("-"); input.setInteger(result.getInteger()); } @Operation public void showResult() { // TODO (mk) this behaves not really like a pocket calculator showResult.check(); this.evaluate(); input.setInteger(result.getInteger()); } private void evaluate() { if (operator.getText().equals("+")) { result.setInteger(result.getInteger() + input.getInteger()); } else if (operator.getText().equals("-")) { result.setInteger(result.getInteger() - input.getInteger()); } } }