2018/08/26
In the previous article I started exploring the NetBeans Web Toolkit and I made a simple clock display.
Let's allow the user to change the city / timezone!
     
    
So first, we need to add a city property to our model:
    @Model(targetId = "", className = "ClockModel", properties = {
      @Property(name = "clock", type = String.class)
      ,
      @Property(name = "city", type = String.class)
    })
    
    Then we need some radio buttons which are bound to this property:
    <input type="radio" name="cityGroup" value="Europe/London" data-bind="checked: city">London
    <input type="radio" name="cityGroup" value="Europe/Paris" data-bind="checked: city"/>Paris
    <input type="radio" name="cityGroup" value="Asia/Tokyo" data-bind="checked: city"/>Tokyo
    
    The radio button value will be set to the city property.
Next, we just need to take into account the current city while setting the date:
    private static void updateClock(ClockModel model) {
        Instant instant = Instant.now();
        ZoneId zoneId = ZoneId.of(model.getCity());
        ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, zoneId);
        model.setClock(DateTimeFormatter.ofPattern("dd/MM/yyyy - hh:mm:ss").format(zdt));
    }
    
    Next, I want to also add a button that shows the current date/time:
    <button data-bind="click: $root.currentLocale">Current time</button>
    
   
    This will call currentLocale on our Clock class, which has to be static:
    @Function
    static void currentLocale(ClockModel model) {
        model.setCity(ZoneId.systemDefault().getId());
    }
    
    Note the @Function annotation and the fact that the 1st argument is our current model (there's no other way to get it otherwise).
The final version is at https://github.com/emilianbold/nbwt-clock-demo