jtulach@87: /** jtulach@87: * The MIT License (MIT) jtulach@87: * jtulach@87: * Copyright (C) 2013 Jaroslav Tulach jtulach@87: * jtulach@87: * Permission is hereby granted, free of charge, to any person obtaining a copy jtulach@87: * of this software and associated documentation files (the "Software"), to deal jtulach@87: * in the Software without restriction, including without limitation the rights jtulach@87: * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell jtulach@87: * copies of the Software, and to permit persons to whom the Software is jtulach@87: * furnished to do so, subject to the following conditions: jtulach@87: * jtulach@87: * The above copyright notice and this permission notice shall be included in jtulach@87: * all copies or substantial portions of the Software. jtulach@87: * jtulach@87: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR jtulach@87: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, jtulach@87: * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE jtulach@87: * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER jtulach@87: * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, jtulach@87: * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN jtulach@87: * THE SOFTWARE. jtulach@87: */ jtulach@87: package dew.demo.histogram; jtulach@87: jtulach@87: import java.util.ArrayList; jtulach@87: import java.util.List; jtulach@87: import net.java.html.json.ComputedProperty; jtulach@87: import net.java.html.json.Model; jtulach@87: import net.java.html.json.Property; jtulach@87: jtulach@87: /** Model annotation generates class Data with jtulach@87: * one property for list of of numbers and read-only property jtulach@87: * for ten of bars. jtulach@87: */ jtulach@87: @Model(className = "Data", properties = { jtulach@87: @Property(name = "numbers", type = String.class) jtulach@87: }) jtulach@87: final class DataModel { jtulach@87: @ComputedProperty static java.util.List bars(String numbers) { jtulach@87: List arr = new ArrayList(10); jtulach@87: for (int i = 0; i < 10; i++) { jtulach@87: arr.add(new Bar(i, 0)); jtulach@87: } jtulach@87: String[] words = numbers == null ? new String[0] : numbers.split(" "); jtulach@87: for (String word : words) { jtulach@87: try { jtulach@87: double n = Double.parseDouble(word); jtulach@87: if (n > 99) { jtulach@87: n = 99; jtulach@87: } else if (n <= 0) { jtulach@87: n = 0; jtulach@87: } jtulach@87: Bar b = arr.get((int) (n / 10)); jtulach@87: b.setValue(b.getValue() + 1); jtulach@87: }catch (NumberFormatException ex) { jtulach@87: // ignore jtulach@87: } jtulach@87: } jtulach@87: return arr; jtulach@87: } jtulach@87: jtulach@87: @Model(className = "Bar", properties = { jtulach@87: @Property(name = "index", type = int.class), jtulach@87: @Property(name = "value", type = int.class) jtulach@87: }) jtulach@87: static class BarModel { jtulach@87: @ComputedProperty static String left(int index) { jtulach@87: return (index * 50 + 20) + "px"; jtulach@87: } jtulach@87: jtulach@87: @ComputedProperty static String top(int value) { jtulach@87: return (199 - value * 20) + "px"; jtulach@87: } jtulach@87: jtulach@87: @ComputedProperty static String height(int value) { jtulach@87: return 20 * value + "px"; jtulach@87: } jtulach@87: } jtulach@87: }