jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: Simple Calculator in HTML5 and Java jtulach@197: jtulach@197: jtulach@197: jaroslav@141: jaroslav@198:

Java and HTML5 - Together at Last!

jaroslav@141: jaroslav@141: jaroslav@141: jtulach@197: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141: jaroslav@141:
jtulach@197:
jaroslav@141: jaroslav@357: jaroslav@357: jaroslav@357: jtulach@197: jtulach@197:
jaroslav@198:
jaroslav@198:     package org.apidesign.bck2brwsr.mavenhtml;
jaroslav@198: 
jaroslav@198:     import org.apidesign.bck2brwsr.htmlpage.api.OnClick;
jaroslav@198:     import org.apidesign.bck2brwsr.htmlpage.api.Page;
jaroslav@198: 
jaroslav@198:     /** HTML5 & Java demo showing the power of annotation processors
jaroslav@198:      * as well as other goodies, including type-safe association between
jaroslav@198:      * an XHTML page and Java.
jaroslav@198:      * 
jaroslav@198:      * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
jaroslav@198:      */
jaroslav@198:     @Page(xhtml="Calculator.xhtml")
jaroslav@198:     public class App {
jaroslav@198:         private static double memory;
jaroslav@198:         private static String operation;
jaroslav@198: 
jaroslav@198:         @OnClick(id="clear")
jaroslav@198:         static void clear() {
jaroslav@198:             memory = 0;
jaroslav@198:             operation = null;
jaroslav@198:             Calculator.DISPLAY.setValue("0");
jaroslav@198:         }
jaroslav@198: 
jaroslav@198:         @OnClick(id= { "plus", "minus", "mul", "div" })
jaroslav@198:         static void applyOp(String op) {
jaroslav@198:             memory = getValue();
jaroslav@198:             operation = op;
jaroslav@198:             Calculator.DISPLAY.setValue("0");
jaroslav@198:         }
jaroslav@198: 
jaroslav@198:         @OnClick(id="result")
jaroslav@198:         static void computeTheValue() {
jaroslav@198:             switch (operation) {
jaroslav@198:                 case "plus": setValue(memory + getValue()); break;
jaroslav@198:                 case "minus": setValue(memory - getValue()); break;
jaroslav@198:                 case "mul": setValue(memory * getValue()); break;
jaroslav@198:                 case "div": setValue(memory / getValue()); break;
jaroslav@198:                 default: throw new IllegalStateException(operation);
jaroslav@198:             }
jaroslav@198:         }
jaroslav@198: 
jaroslav@198:         @OnClick(id={"n0", "n1", "n2", "n3", "n4", "n5", "n6", "n7", "n8", "n9"}) 
jaroslav@198:         static void addDigit(String digit) {
jaroslav@198:             digit = digit.substring(1);
jaroslav@198:             String v = Calculator.DISPLAY.getValue();
jaroslav@198:             if (getValue() == 0.0) {
jaroslav@198:                 Calculator.DISPLAY.setValue(digit);
jaroslav@198:             } else {
jaroslav@198:                 Calculator.DISPLAY.setValue(v + digit);
jaroslav@198:             }
jaroslav@198:         }
jaroslav@198: 
jaroslav@198:         private static void setValue(double v) {
jaroslav@198:             StringBuilder sb = new StringBuilder();
jaroslav@198:             sb.append(v);
jaroslav@198:             Calculator.DISPLAY.setValue(sb.toString());
jaroslav@198:         }
jaroslav@198: 
jaroslav@198:         private static double getValue() {
jaroslav@198:             try {
jaroslav@198:                 return Double.parseDouble(Calculator.DISPLAY.getValue());
jaroslav@198:             } catch (NumberFormatException ex) {
jaroslav@198:                 Calculator.DISPLAY.setValue("err");
jaroslav@198:                 return 0.0;
jaroslav@198:             }
jaroslav@198:         }
jaroslav@198:     }
jaroslav@198: 
jaroslav@198:     
jaroslav@141: jaroslav@141: