You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2018/05/16 21:43:10 UTC

[myfaces-tobago] branch master updated (9b1143c -> c7ff7e6)

This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git.


    from 9b1143c  demo: update tomee to 1.7.5
     new 990df07  demo: clean up
     new c7ff7e6  demo: clean up

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 tobago-example/pom.xml                             |   1 -
 .../myfaces/tobago/example/data/SolarObject.java   | 371 --------
 tobago-example/tobago-example-demo/pom.xml         |   9 +-
 .../myfaces/tobago/example/demo/AstroData.java     |  61 +-
 .../tobago/example/demo}/CantorInterval.java       |   2 +-
 .../myfaces/tobago/example/demo}/CategoryTree.java |   2 +-
 .../myfaces/tobago/example/demo}/CommandNode.java  |   2 +-
 .../tobago/example/demo}/CommandNodeFactory.java   |   2 +-
 .../tobago/example/demo/DemoController.java        |   1 -
 .../myfaces/tobago/example/demo}/Element.java      |   2 +-
 .../tobago/example/demo/EventController.java       |   1 -
 .../example/demo/ExceptionHandlerController.java   |   1 -
 .../myfaces/tobago/example/demo}/LocaleEntry.java  |   2 +-
 .../myfaces/tobago/example/demo}/LocaleList.java   |   2 +-
 .../tobago/example/demo}/MixedCommandTree.java     |   2 +-
 .../myfaces/tobago/example/demo}/NamedNode.java    |   2 +-
 .../apache/myfaces/tobago/example/demo}/Node.java  |   2 +-
 .../myfaces/tobago/example/demo}/Salutation.java   |   2 +-
 .../tobago/example/demo}/SalutationConverter.java  |   2 +-
 .../example/demo/SelectManyCheckboxController.java |   2 -
 .../example/demo/SelectManyShuttleController.java  |  15 +-
 .../example/demo/SelectOneRadioController.java     |   2 -
 .../tobago/example/demo/SheetController.java       |   1 -
 .../example/demo/SheetEditableController.java      |   2 -
 .../tobago/example/demo/SheetFilterController.java |   1 -
 .../example/demo/SheetSortingController.java       |   1 -
 .../tobago/example/demo/SheetTreeController.java   |  12 +-
 .../myfaces/tobago/example/demo}/SmallTree.java    |   2 +-
 .../tobago/example/demo/SolarConverter.java        |   2 -
 .../myfaces/tobago/example/demo/SolarObject.java   | 195 ++++
 .../tobago/example/demo/SuggestController.java     |   1 -
 .../example/demo/TreeCommandTypesController.java   |   3 -
 .../tobago/example/demo/TreeController.java        |   2 -
 .../tobago/example/demo/TreeEditorController.java  |   2 -
 .../tobago/example/demo/TreeSelectController.java  |   3 -
 ...eetController.java => SheetTestController.java} |  48 +-
 .../tobago/example/test/TreeController.java        |   6 +-
 .../example/test/UndefinedRowCountDataModel.java   |   7 +-
 .../resources/META-INF/resources/data/EUR-14.png   | Bin
 .../main/resources/META-INF/resources/data/EUR.png | Bin
 .../resources/META-INF/resources/data/JPY-14.png   | Bin
 .../main/resources/META-INF/resources/data/JPY.png | Bin
 .../resources/META-INF/resources/data/TTD-14.png   | Bin
 .../main/resources/META-INF/resources/data/TTD.png | Bin
 .../resources/META-INF/resources/data/USD-14.png   | Bin
 .../main/resources/META-INF/resources/data/USD.png | Bin
 .../resources/data/sun-behind-mountains.jpg        | Bin
 .../myfaces/tobago/example/demo/astro-data.json    | 977 +++++++++++++++++++++
 .../src/main/webapp/WEB-INF/faces-config.xml       |   8 +-
 .../10-getting-started/getting-started.xhtml       |   6 +-
 .../facelets-as-resources.xhtml                    |  42 -
 .../sheet/sheet-auto-height-header-footer.xhtml    |   8 +-
 .../90000-attic/sheet/sheet-auto-height-rows.xhtml |   8 +-
 .../90000-attic/sheet/sheet-auto-width.xhtml       |   2 +-
 .../90000-attic/sheet/sheet-bug-tobago-1090.xhtml  |   2 +-
 .../40-test/90000-attic/sheet/sheet-large.xhtml    |   2 +-
 .../90000-attic/sheet/sheet-multi-header.xhtml     |   4 +-
 .../40-test/90000-attic/sheet/sheet-paging-1.xhtml |   2 +-
 .../90000-attic/sheet/sheet-paging-11.xhtml        |   2 +-
 .../90000-attic/sheet/sheet-paging-20.xhtml        |   2 +-
 .../40-test/90000-attic/sheet/sheet-reload.xhtml   |   2 +-
 .../40-test/90000-attic/sheet/sheet-selector.xhtml |   2 +-
 .../40-test/90000-attic/sheet/sheet-simple.xhtml   |   2 +-
 .../sheet/sheet-unknown-row-count.xhtml            |   2 +-
 .../src/main/webapp/server-info.xhtml              |   7 +
 .../tobago/example/demo/AstroDataUnitTest.java     |  21 +-
 66 files changed, 1349 insertions(+), 528 deletions(-)
 delete mode 100644 tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/SolarObject.java
 rename tobago-example/{tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data => tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo}/CantorInterval.java (98%)
 rename tobago-example/{tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data => tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo}/CategoryTree.java (98%)
 rename tobago-example/{tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data => tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo}/CommandNode.java (96%)
 rename tobago-example/{tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data => tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo}/CommandNodeFactory.java (96%)
 rename tobago-example/{tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data => tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo}/Element.java (96%)
 rename tobago-example/{tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data => tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo}/LocaleEntry.java (97%)
 rename tobago-example/{tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data => tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo}/LocaleList.java (98%)
 rename tobago-example/{tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data => tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo}/MixedCommandTree.java (97%)
 rename tobago-example/{tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data => tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo}/NamedNode.java (97%)
 rename tobago-example/{tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data => tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo}/Node.java (98%)
 rename tobago-example/{tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data => tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo}/Salutation.java (96%)
 rename tobago-example/{tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data => tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo}/SalutationConverter.java (96%)
 rename tobago-example/{tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data => tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo}/SmallTree.java (96%)
 create mode 100644 tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SolarObject.java
 rename tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/{SheetController.java => SheetTestController.java} (50%)
 rename tobago-example/{tobago-example-data => tobago-example-demo}/src/main/resources/META-INF/resources/data/EUR-14.png (100%)
 rename tobago-example/{tobago-example-data => tobago-example-demo}/src/main/resources/META-INF/resources/data/EUR.png (100%)
 rename tobago-example/{tobago-example-data => tobago-example-demo}/src/main/resources/META-INF/resources/data/JPY-14.png (100%)
 rename tobago-example/{tobago-example-data => tobago-example-demo}/src/main/resources/META-INF/resources/data/JPY.png (100%)
 rename tobago-example/{tobago-example-data => tobago-example-demo}/src/main/resources/META-INF/resources/data/TTD-14.png (100%)
 rename tobago-example/{tobago-example-data => tobago-example-demo}/src/main/resources/META-INF/resources/data/TTD.png (100%)
 rename tobago-example/{tobago-example-data => tobago-example-demo}/src/main/resources/META-INF/resources/data/USD-14.png (100%)
 rename tobago-example/{tobago-example-data => tobago-example-demo}/src/main/resources/META-INF/resources/data/USD.png (100%)
 rename tobago-example/{tobago-example-data => tobago-example-demo}/src/main/resources/META-INF/resources/data/sun-behind-mountains.jpg (100%)
 create mode 100644 tobago-example/tobago-example-demo/src/main/resources/org/apache/myfaces/tobago/example/demo/astro-data.json
 delete mode 100644 tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/25-facelets-as-resources/facelets-as-resources.xhtml

-- 
To stop receiving notification emails like this one, please contact
lofwyr@apache.org.

[myfaces-tobago] 02/02: demo: clean up

Posted by lo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git

commit c7ff7e63ce69e758ff8f18dcd0aa14de18ae5187
Author: Udo Schnurpfeil <lo...@apache.org>
AuthorDate: Wed May 16 23:42:46 2018 +0200

    demo: clean up
    
    remove tobago-example-data
---
 tobago-example/pom.xml                             |   1 -
 .../myfaces/tobago/example/data/SolarObject.java   | 319 -------
 tobago-example/tobago-example-demo/pom.xml         |   9 +-
 .../myfaces/tobago/example/demo/AstroData.java     |  35 +-
 .../tobago/example/demo}/CantorInterval.java       |   2 +-
 .../myfaces/tobago/example/demo}/CategoryTree.java |   2 +-
 .../myfaces/tobago/example/demo}/CommandNode.java  |   2 +-
 .../tobago/example/demo}/CommandNodeFactory.java   |   2 +-
 .../tobago/example/demo/DemoController.java        |   1 -
 .../myfaces/tobago/example/demo}/Element.java      |   2 +-
 .../tobago/example/demo/EventController.java       |   1 -
 .../example/demo/ExceptionHandlerController.java   |   1 -
 .../myfaces/tobago/example/demo}/LocaleEntry.java  |   2 +-
 .../myfaces/tobago/example/demo}/LocaleList.java   |   2 +-
 .../tobago/example/demo}/MixedCommandTree.java     |   2 +-
 .../myfaces/tobago/example/demo}/NamedNode.java    |   2 +-
 .../apache/myfaces/tobago/example/demo}/Node.java  |   2 +-
 .../myfaces/tobago/example/demo}/Salutation.java   |   2 +-
 .../tobago/example/demo}/SalutationConverter.java  |   2 +-
 .../example/demo/SelectManyCheckboxController.java |   2 -
 .../example/demo/SelectManyShuttleController.java  |   2 -
 .../example/demo/SelectOneRadioController.java     |   2 -
 .../tobago/example/demo/SheetController.java       |   1 -
 .../example/demo/SheetEditableController.java      |   2 -
 .../tobago/example/demo/SheetFilterController.java |   1 -
 .../example/demo/SheetSortingController.java       |   1 -
 .../myfaces/tobago/example/demo}/SmallTree.java    |   2 +-
 .../tobago/example/demo/SolarConverter.java        |   2 -
 .../myfaces/tobago/example/demo/SolarObject.java   | 195 ++++
 .../tobago/example/demo/SuggestController.java     |   1 -
 .../example/demo/TreeCommandTypesController.java   |   3 -
 .../tobago/example/demo/TreeController.java        |   2 -
 .../tobago/example/demo/TreeEditorController.java  |   2 -
 .../tobago/example/demo/TreeSelectController.java  |   3 -
 .../tobago/example/test/SheetTestController.java   |  18 +-
 .../tobago/example/test/TreeController.java        |   6 +-
 .../example/test/UndefinedRowCountDataModel.java   |   2 +-
 .../resources/META-INF/resources/data/EUR-14.png   | Bin
 .../main/resources/META-INF/resources/data/EUR.png | Bin
 .../resources/META-INF/resources/data/JPY-14.png   | Bin
 .../main/resources/META-INF/resources/data/JPY.png | Bin
 .../resources/META-INF/resources/data/TTD-14.png   | Bin
 .../main/resources/META-INF/resources/data/TTD.png | Bin
 .../resources/META-INF/resources/data/USD-14.png   | Bin
 .../main/resources/META-INF/resources/data/USD.png | Bin
 .../resources/data/sun-behind-mountains.jpg        | Bin
 .../myfaces/tobago/example/demo/astro-data.json    | 977 +++++++++++++++++++++
 .../src/main/webapp/WEB-INF/faces-config.xml       |   2 +-
 .../facelets-as-resources.xhtml                    |  42 -
 .../tobago/example/demo/AstroDataUnitTest.java     |  21 +-
 50 files changed, 1259 insertions(+), 421 deletions(-)

diff --git a/tobago-example/pom.xml b/tobago-example/pom.xml
index 6d4a63b..890d11a 100644
--- a/tobago-example/pom.xml
+++ b/tobago-example/pom.xml
@@ -28,7 +28,6 @@
 
   <modules>
     <module>tobago-example-blank</module>
-    <module>tobago-example-data</module>
     <module>tobago-example-demo</module>
     <module>tobago-example-assembly</module>
   </modules>
diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/SolarObject.java b/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/SolarObject.java
deleted file mode 100644
index 31e0369..0000000
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/SolarObject.java
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.myfaces.tobago.example.data;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.faces.event.AjaxBehaviorEvent;
-import java.io.Serializable;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.stream.Stream;
-
-import static java.util.stream.Collectors.toList;
-
-public class SolarObject implements Serializable {
-
-  private static final Logger LOG = LoggerFactory.getLogger(SolarObject.class);
-
-  private String name;
-
-  private String number;
-
-  private String orbit;
-
-  private Integer distance;
-
-  private Double period;
-
-  private Double incl;
-
-  private Double eccen;
-
-  private String discoverer;
-
-  private Integer discoverYear;
-
-  private String population;
-
-  private List<Element> chemicalComposition;
-
-  public SolarObject(
-      final String name, final String number, final String orbit, final Integer distance, final Double period,
-      final Double incl, final Double eccen, final String discoverer, final Integer discoverYear) {
-    this.name = name;
-    this.number = number;
-    this.orbit = orbit;
-    this.distance = distance;
-    this.period = period;
-    this.incl = incl;
-    this.eccen = eccen;
-    this.discoverer = discoverer;
-    this.discoverYear = discoverYear;
-    this.population = "Earth".equals(name) ? "~ 8.000.000.000" : "0";
-  }
-
-  public SolarObject(final SolarObject solarObject) {
-    this.name = solarObject.getName();
-    this.number = solarObject.getNumber();
-    this.orbit = solarObject.getOrbit();
-    this.distance = solarObject.getDistance();
-    this.period = solarObject.getPeriod();
-    this.incl = solarObject.getIncl();
-    this.eccen = solarObject.getEccen();
-    this.discoverer = solarObject.getDiscoverer();
-    this.discoverYear = solarObject.getDiscoverYear();
-    this.population = getPopulation();
-    this.chemicalComposition
-        = chemicalComposition != null ? chemicalComposition.stream().map(Element::new).collect(toList()) : null;
-  }
-
-  public String getName() {
-    return name;
-  }
-
-  public void update(final AjaxBehaviorEvent event) {
-    LOG.info("AjaxBehaviorEvent called. New value: '{}' event: {}", name, event);
-  }
-
-  public void setName(final String name) {
-    this.name = name;
-  }
-
-  public String getMarkup() {
-    if (name.equals("Sun")) {
-      return "sun";
-    } else {
-      if (orbit.equals("Sun")) {
-        return "planet";
-      } else {
-        return "moon";
-      }
-    }
-  }
-
-  public String getNumber() {
-    return number;
-  }
-
-  public void setNumber(final String number) {
-    this.number = number;
-  }
-
-  public String getOrbit() {
-    return orbit;
-  }
-
-  public void setOrbit(final String orbit) {
-    this.orbit = orbit;
-  }
-
-  public Integer getDistance() {
-    return distance;
-  }
-
-  public void setDistance(final Integer distance) {
-    this.distance = distance;
-  }
-
-  public Double getPeriod() {
-    return period;
-  }
-
-  public void setPeriod(final Double period) {
-    this.period = period;
-  }
-
-  public Double getIncl() {
-    return incl;
-  }
-
-  public void setIncl(final Double incl) {
-    this.incl = incl;
-  }
-
-  public Double getEccen() {
-    return eccen;
-  }
-
-  public void setEccen(final Double eccen) {
-    this.eccen = eccen;
-  }
-
-  public String getDiscoverer() {
-    return discoverer;
-  }
-
-  public void setDiscoverer(final String discoverer) {
-    this.discoverer = discoverer;
-  }
-
-  public Integer getDiscoverYear() {
-    return discoverYear;
-  }
-
-  public void setDiscoverYear(final Integer discoverYear) {
-    this.discoverYear = discoverYear;
-  }
-
-  public String getPopulation() {
-    return population;
-  }
-
-  public void setPopulation(final String population) {
-    this.population = population;
-  }
-
-  public List<Element> getChemicalComposition() {
-    return chemicalComposition != null ? chemicalComposition : Collections.emptyList();
-  }
-
-  public void setChemicalComposition(final List<Element> chemicalComposition) {
-    this.chemicalComposition = chemicalComposition;
-  }
-
-  public String toString() {
-    return name;
-  }
-
-  public static Stream<SolarObject> getDataStream() {
-    return Arrays.stream(DATA);
-  }
-
-  private static final SolarObject SUN = new SolarObject("Sun", "-", "-", 0, 0.0, 0.0, 0.0, "-", null);
-  private static final SolarObject EARTH =
-      new SolarObject("Earth", "III", "Sun", 149600, 365.26, 0.00, 0.02, "-", null);
-  private static final SolarObject MOON = new SolarObject("Moon", "I", "Earth", 384, 27.32, 5.14, 0.05, "-", null);
-
-  private static final SolarObject[] DATA = {
-      SUN,
-      new SolarObject("Mercury", "I", "Sun", 57910, 87.97, 7.00, 0.21, "-", null),
-      new SolarObject("Venus", "II", "Sun", 108200, 224.70, 3.39, 0.01, "-", null),
-      EARTH,
-      new SolarObject("Mars", "IV", "Sun", 227940, 686.98, 1.85, 0.09, "-", null),
-      new SolarObject("Jupiter", "V", "Sun", 778330, 4332.71, 1.31, 0.05, "-", null),
-      new SolarObject("Saturn", "VI", "Sun", 1429400, 10759.50, 2.49, 0.06, "-", null),
-      new SolarObject("Uranus", "VII", "Sun", 2870990, 30685.0, 0.77, 0.05, "Herschel", 1781),
-      new SolarObject("Neptune", "VIII", "Sun", 4504300, 60190.0, 1.77, 0.01, "Adams", 1846),
-      new SolarObject("Pluto", "IX", "Sun", 5913520, 90800.0, 17.15, 0.25, "Tombaugh", 1930),
-      MOON,
-      new SolarObject("Phobos", "I", "Mars", 9, 0.32, 1.00, 0.02, "Hall", 1877),
-      new SolarObject("Deimos", "II", "Mars", 23, 1.26, 1.80, 0.00, "Hall", 1877),
-      new SolarObject("Metis", "XVI", "Jupiter", 128, 0.29, 0.00, 0.00, "Synnott", 1979),
-      new SolarObject("Adrastea", "XV", "Jupiter", 129, 0.30, 0.00, 0.00, "Jewitt", 1979),
-      new SolarObject("Amalthea", "V", "Jupiter", 181, 0.50, 0.40, 0.00, "Barnard", 1892),
-      new SolarObject("Thebe", "XIV", "Jupiter", 222, 0.67, 0.80, 0.02, "Synnott", 1979),
-      new SolarObject("Io", "I", "Jupiter", 422, 1.77, 0.04, 0.00, "Galileo", 1610),
-      new SolarObject("Europa", "II", "Jupiter", 671, 3.55, 0.47, 0.01, "Galileo", 1610),
-      new SolarObject("Ganymede", "III", "Jupiter", 1070, 7.15, 0.19, 0.00, "Galileo", 1610),
-      new SolarObject("Callisto", "IV", "Jupiter", 1883, 16.69, 0.28, 0.01, "Galileo", 1610),
-      new SolarObject("Themisto", "XVIII", "Jupiter", 7507, 130.02, null, null, "Sheppard", 2000),
-      new SolarObject("Leda", "XIII", "Jupiter", 11094, 238.72, 27.00, 0.15, "Kowal", 1974),
-      new SolarObject("Himalia", "VI", "Jupiter", 11480, 250.57, 28.00, 0.16, "Perrine", 1904),
-      new SolarObject("Lysithea", "X", "Jupiter", 11720, 259.22, 29.00, 0.11, "Nicholson", 1938),
-      new SolarObject("Elara", "VII", "Jupiter", 11737, 259.65, 28.00, 0.21, "Perrine", 1905),
-      new SolarObject("Ananke", "XII", "Jupiter", 21200, -629.770, 147.00, 0.17, "Nicholson", 1951),
-      new SolarObject("Carme", "XI", "Jupiter", 22600, -702.30, 163.00, 0.21, "Nicholson", 1938),
-      new SolarObject("Pasiphae", "VIII", "Jupiter", 23500, -708.0, 147.00, 0.38, "Melotte", 1908),
-      new SolarObject("Sinope", "IX", "Jupiter", 23700, -758.9, 153.00, 0.28, "Nicholson", 1914),
-      new SolarObject("Iocaste", "XXIV", "Jupiter", 20216, 631.5, null, null, "Sheppard", 2000),
-      new SolarObject("Harpalyke", "XXII", "Jupiter", 21132, 623.3, null, null, "Sheppard", 2000),
-      new SolarObject("Praxidike", "XXVII", "Jupiter", 20964, 625.3, null, null, "Sheppard", 2000),
-      new SolarObject("Taygete", "XX", "Jupiter", 23312, 732.2, null, null, "Sheppard", 2000),
-      new SolarObject("Chaldene", "XXI", "Jupiter", 23387, 723.8, null, null, "Sheppard", 2000),
-      new SolarObject("Kalyke", "XXIII", "Jupiter", 23745, 743.0, null, null, "Sheppard", 2000),
-      new SolarObject("Callirrhoe", "XVII", "Jupiter", 24100, 758.8, null, null, "Sheppard", 2000),
-      new SolarObject("Megaclite", "XIX", "Jupiter", 23911, 752.8, null, null, "Sheppard", 2000),
-      new SolarObject("Isonoe", "XXVI", "Jupiter", 23078, 725.5, null, null, "Sheppard", 2000),
-      new SolarObject("Erinome", "XXV", "Jupiter", 23168, 728.3, null, null, "Sheppard", 2000),
-      new SolarObject("Pan", "XVIII", "Saturn", 134, 0.58, 0.00, 0.00, "Showalter", 1990),
-      new SolarObject("Atlas", "XV", "Saturn", 138, 0.60, 0.00, 0.00, "Terrile", 1980),
-      new SolarObject("Prometheus", "XVI", "Saturn", 139, 0.61, 0.00, 0.00, "Collins", 1980),
-      new SolarObject("Pandora", "XVII", "Saturn", 142, 0.63, 0.00, 0.00, "Collins", 1980),
-      new SolarObject("Epimetheus", "XI", "Saturn", 151, 0.69, 0.34, 0.01, "Walker", 1980),
-      new SolarObject("Janus", "X", "Saturn", 151, 0.69, 0.14, 0.01, "Dollfus", 1966),
-      new SolarObject("Mimas", "I", "Saturn", 186, 0.94, 1.53, 0.02, "Herschel", 1789),
-      new SolarObject("Enceladus", "II", "Saturn", 238, 1.37, 0.02, 0.00, "Herschel", 1789),
-      new SolarObject("Tethys", "III", "Saturn", 295, 1.89, 1.09, 0.00, "Cassini", 1684),
-      new SolarObject("Telesto", "XIII", "Saturn", 295, 1.89, 0.00, 0.00, "Smith", 1980),
-      new SolarObject("Calypso", "XIV", "Saturn", 295, 1.89, 0.00, 0.00, "Pascu", 1980),
-      new SolarObject("Dione", "IV", "Saturn", 377, 2.74, 0.02, 0.00, "Cassini", 1684),
-      new SolarObject("Helene", "XII", "Saturn", 377, 2.74, 0.20, 0.01, "Laques", 1980),
-      new SolarObject("Rhea", "V", "Saturn", 527, 4.52, 0.35, 0.00, "Cassini", 1672),
-      new SolarObject("Titan", "VI", "Saturn", 1222, 15.95, 0.33, 0.03, "Huygens", 1655),
-      new SolarObject("Hyperion", "VII", "Saturn", 1481, 21.28, 0.43, 0.10, "Bond", 1848),
-      new SolarObject("Iapetus", "VIII", "Saturn", 3561, 79.33, 14.72, 0.03, "Cassini", 1671),
-      new SolarObject("Phoebe", "IX", "Saturn", 12952, -550.48, 175.30, 0.16, "Pickering", 1898),
-      new SolarObject("Cordelia", "VI", "Uranus", 50, 0.34, 0.14, 0.00, "Voyager 2", 1986),
-      new SolarObject("Ophelia", "VII", "Uranus", 54, 0.38, 0.09, 0.00, "Voyager 2", 1986),
-      new SolarObject("Bianca", "VIII", "Uranus", 59, 0.43, 0.16, 0.00, "Voyager 2", 1986),
-      new SolarObject("Cressida", "IX", "Uranus", 62, 0.46, 0.04, 0.00, "Voyager 2", 1986),
-      new SolarObject("Desdemona", "X", "Uranus", 63, 0.47, 0.16, 0.00, "Voyager 2", 1986),
-      new SolarObject("Juliet", "XI", "Uranus", 64, 0.49, 0.06, 0.00, "Voyager 2", 1986),
-      new SolarObject("Portia", "XII", "Uranus", 66, 0.51, 0.09, 0.00, "Voyager 2", 1986),
-      new SolarObject("Rosalind", "XIII", "Uranus", 70, 0.56, 0.28, 0.00, "Voyager 2", 1986),
-      new SolarObject("Belinda", "XIV", "Uranus", 75, 0.62, 0.03, 0.00, "Voyager 2", 1986),
-      new SolarObject("1986U10", "", "Uranus", 76, 0.64, null, null, "Karkoschka", 1999),
-      new SolarObject("Puck", "XV", "Uranus", 86, 0.76, 0.31, 0.00, "Voyager 2", 1985),
-      new SolarObject("Miranda", "V", "Uranus", 130, 1.41, 4.22, 0.00, "Kuiper", 1948),
-      new SolarObject("Ariel", "I", "Uranus", 191, 2.52, 0.00, 0.00, "Lassell", 1851),
-      new SolarObject("Umbriel", "II", "Uranus", 266, 4.14, 0.00, 0.00, "Lassell", 1851),
-      new SolarObject("Titania", "III", "Uranus", 436, 8.71, 0.00, 0.00, "Herschel", 1787),
-      new SolarObject("Oberon", "IV", "Uranus", 583, 13.46, 0.00, 0.00, "Herschel", 1787),
-      new SolarObject("Caliban", "XVI", "Uranus", 7169, -579.39, 140., 0.08, "Gladman", 1997),
-      new SolarObject("Stephano", "XX", "Uranus", 7948, -677.48, 143., 0.24, "Gladman", 1999),
-      new SolarObject("Sycorax", "XVII", "Uranus", 12213, -1283.48, 153., 0.51, "Nicholson", 1997),
-      new SolarObject("Prospero", "XVIII", "Uranus", 16568, -1962.95, 152., 0.44, "Holman", 1999),
-      new SolarObject("Setebos", "XIX", "Uranus", 17681, -2196.35, 158., 0.57, "Kavelaars", 1999),
-      new SolarObject("Naiad", "III", "Neptune", 48, 0.29, 0.00, 0.00, "Voyager 2", 1989),
-      new SolarObject("Thalassa", "IV", "Neptune", 50, 0.31, 4.50, 0.00, "Voyager 2", 1989),
-      new SolarObject("Despina", "V", "Neptune", 53, 0.33, 0.00, 0.00, "Voyager 2", 1989),
-      new SolarObject("Galatea", "VI", "Neptune", 62, 0.43, 0.00, 0.00, "Voyager 2", 1989),
-      new SolarObject("Larissa", "VII", "Neptune", 74, 0.55, 0.00, 0.00, "Reitsema", 1989),
-      new SolarObject("Proteus", "VIII", "Neptune", 118, 1.12, 0.00, 0.00, "Voyager 2", 1989),
-      new SolarObject("Triton", "I", "Neptune", 355, -5.88, 157.00, 0.00, "Lassell", 1846),
-      new SolarObject("Nereid", "II", "Neptune", 5513, 360.13, 29.00, 0.75, "Kuiper", 1949),
-      new SolarObject("Charon", "I", "Pluto", 20, 6.39, 98.80, 0.00, "Christy", 1978)
-  };
-
-  static {
-    final List<Element> sun = Arrays.asList(
-        new Element("Hydrogen", 0.74),
-        new Element("Helium", 0.25)
-    );
-    SUN.setChemicalComposition(sun);
-    final List<Element> earth = Arrays.asList(
-        new Element("Silica", 0.60),
-        new Element("Alimina", 0.15),
-        new Element("Lime", 0.05)
-    );
-    EARTH.setChemicalComposition(earth);
-    final List<Element> moon = Arrays.asList(
-        new Element("Silica", 0.45),
-        new Element("Alimina", 0.24),
-        new Element("Lime", 0.16)
-    );
-    MOON.setChemicalComposition(moon);
-  }
-
-
-}
diff --git a/tobago-example/tobago-example-demo/pom.xml b/tobago-example/tobago-example-demo/pom.xml
index 724dd63..982fd2a 100644
--- a/tobago-example/tobago-example-demo/pom.xml
+++ b/tobago-example/tobago-example-demo/pom.xml
@@ -224,8 +224,6 @@
   </dependencyManagement>
 
   <dependencies>
-
-
     <!-- Tobago -->
     <dependency>
       <groupId>org.apache.myfaces.tobago</groupId>
@@ -256,6 +254,13 @@
     </dependency>
 
     <dependency>
+      <groupId>com.google.code.gson</groupId>
+      <artifactId>gson</artifactId>
+      <version>2.8.4</version>
+      <scope>compile</scope>
+    </dependency>
+
+    <dependency>
       <groupId>org.apache.geronimo.specs</groupId>
       <artifactId>geronimo-annotation_1.0_spec</artifactId>
       <!-- compile or provided depends on the used server -->
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/AstroData.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/AstroData.java
index 133cf8a..152298f 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/AstroData.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/AstroData.java
@@ -19,12 +19,15 @@
 
 package org.apache.myfaces.tobago.example.demo;
 
-import org.apache.myfaces.tobago.example.data.SolarObject;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.reflect.TypeToken;
 import org.apache.myfaces.tobago.model.SelectItem;
 
 import javax.inject.Named;
 import javax.inject.Singleton;
 import javax.swing.tree.DefaultMutableTreeNode;
+import java.io.InputStreamReader;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -38,11 +41,25 @@ import java.util.stream.Stream;
 @Named
 public class AstroData implements Serializable {
 
+  private List<SolarObject> dataList;
+  private Map<String, SolarObject> dataMap;
+
   private List<SelectItem> planets;
   private List<SelectItem> terrestrialPlanets;
   private List<SelectItem> giantPlanets;
 
   public AstroData() {
+
+    final InputStreamReader reader
+        = new InputStreamReader(AstroData.class.getResourceAsStream("astro-data.json"));
+
+    Gson gson = new GsonBuilder().create();
+    dataList = gson.fromJson(reader, new TypeToken<ArrayList<SolarObject>>(){}.getType());
+    dataMap = new HashMap<>(dataList.size());
+    for (SolarObject solarObject : dataList) {
+      dataMap.put(solarObject.getName(), solarObject);
+    }
+
     planets = findByName("Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune")
         .map(planet -> new SelectItem(planet, planet.getName())).collect(Collectors.toList());
     terrestrialPlanets = findByName("Mercury", "Venus", "Earth", "Mars")
@@ -52,26 +69,30 @@ public class AstroData implements Serializable {
   }
 
   public Stream<SolarObject> findAll() {
-    return SolarObject.getDataStream();
+    return dataList.stream();
+  }
+
+  public Map<String, SolarObject> findAllAsMap() {
+    return dataMap;
   }
 
   public Stream<SolarObject> findAllAsCopy() {
-    return SolarObject.getDataStream().map(SolarObject::new);
+    return dataList.stream().map(SolarObject::new);
   }
 
   public SolarObject find(final String name) {
-    return SolarObject.getDataStream().filter(solarObject -> name.equals(solarObject.getName())).findFirst()
+    return dataList.stream().filter(solarObject -> name.equals(solarObject.getName())).findFirst()
         .orElse(null);
   }
 
   public Stream<SolarObject> findByName(String... filter) {
-    return SolarObject.getDataStream()
+    return dataList.stream()
         .filter(solarObject -> Arrays.asList(filter).contains(solarObject.getName()));
   }
 
   public DefaultMutableTreeNode getAllAsTree() {
     final Map<String, DefaultMutableTreeNode> cache = new HashMap<>();
-    for (final SolarObject solar : (Iterable<SolarObject>)findAll()::iterator) {
+    for (final SolarObject solar : (Iterable<SolarObject>) dataList.stream()::iterator) {
       final DefaultMutableTreeNode node = new DefaultMutableTreeNode(solar);
       cache.put(solar.getName(), node);
       final String orbitName = solar.getOrbit();
@@ -86,7 +107,7 @@ public class AstroData implements Serializable {
 
   public List<SolarObject> getSatellites(final String center) {
     final List<SolarObject> collect = new ArrayList<>();
-    for (final SolarObject solar : (Iterable<SolarObject>)findAll()::iterator) {
+    for (final SolarObject solar : (Iterable<SolarObject>) dataList.stream()::iterator) {
       // todo: use lambda
       if (solar.getOrbit().equals(center)) {
         collect.add(solar);
diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/CantorInterval.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/CantorInterval.java
similarity index 98%
rename from tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/CantorInterval.java
rename to tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/CantorInterval.java
index fc97c44..07453a2 100644
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/CantorInterval.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/CantorInterval.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.tobago.example.data;
+package org.apache.myfaces.tobago.example.demo;
 
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.TreeNode;
diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/CategoryTree.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/CategoryTree.java
similarity index 98%
rename from tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/CategoryTree.java
rename to tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/CategoryTree.java
index 3b0989c..d2f96c3 100644
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/CategoryTree.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/CategoryTree.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.tobago.example.data;
+package org.apache.myfaces.tobago.example.demo;
 
 import org.apache.myfaces.tobago.context.Markup;
 
diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/CommandNode.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/CommandNode.java
similarity index 96%
rename from tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/CommandNode.java
rename to tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/CommandNode.java
index feccf02..9ca3d94 100644
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/CommandNode.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/CommandNode.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.tobago.example.data;
+package org.apache.myfaces.tobago.example.demo;
 
 import javax.swing.tree.DefaultMutableTreeNode;
 
diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/CommandNodeFactory.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/CommandNodeFactory.java
similarity index 96%
rename from tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/CommandNodeFactory.java
rename to tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/CommandNodeFactory.java
index b3fdfb3..1a34cf3 100644
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/CommandNodeFactory.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/CommandNodeFactory.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.tobago.example.data;
+package org.apache.myfaces.tobago.example.demo;
 
 public class CommandNodeFactory {
 
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/DemoController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/DemoController.java
index 2c1b822..ff45348 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/DemoController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/DemoController.java
@@ -21,7 +21,6 @@ package org.apache.myfaces.tobago.example.demo;
 
 import org.apache.deltaspike.core.api.scope.WindowScoped;
 import org.apache.myfaces.tobago.component.UISheet;
-import org.apache.myfaces.tobago.example.data.Salutation;
 import org.apache.myfaces.tobago.model.SelectItem;
 import org.apache.myfaces.tobago.model.Selectable;
 import org.slf4j.Logger;
diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/Element.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/Element.java
similarity index 96%
rename from tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/Element.java
rename to tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/Element.java
index 97b614c..44047a0 100644
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/Element.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/Element.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.tobago.example.data;
+package org.apache.myfaces.tobago.example.demo;
 
 public class Element {
 
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/EventController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/EventController.java
index c2dca80..5aee1de 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/EventController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/EventController.java
@@ -73,7 +73,6 @@ import org.apache.myfaces.tobago.component.UITreeLabel;
 import org.apache.myfaces.tobago.component.UITreeListbox;
 import org.apache.myfaces.tobago.component.UITreeMenu;
 import org.apache.myfaces.tobago.component.UITreeSelect;
-import org.apache.myfaces.tobago.example.data.SolarObject;
 import org.apache.myfaces.tobago.util.ComponentUtils;
 
 import javax.enterprise.context.SessionScoped;
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/ExceptionHandlerController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/ExceptionHandlerController.java
index 4cb3266..8440369 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/ExceptionHandlerController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/ExceptionHandlerController.java
@@ -19,7 +19,6 @@
 
 package org.apache.myfaces.tobago.example.demo;
 
-import org.apache.myfaces.tobago.example.data.SolarObject;
 import org.apache.myfaces.tobago.model.SheetState;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/LocaleEntry.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/LocaleEntry.java
similarity index 97%
rename from tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/LocaleEntry.java
rename to tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/LocaleEntry.java
index 521b514..a10f559 100644
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/LocaleEntry.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/LocaleEntry.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.tobago.example.data;
+package org.apache.myfaces.tobago.example.demo;
 
 import org.apache.commons.lang3.StringUtils;
 
diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/LocaleList.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/LocaleList.java
similarity index 98%
rename from tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/LocaleList.java
rename to tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/LocaleList.java
index d01491d..c2128aa 100644
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/LocaleList.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/LocaleList.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.tobago.example.data;
+package org.apache.myfaces.tobago.example.demo;
 
 import org.apache.commons.lang3.StringUtils;
 
diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/MixedCommandTree.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/MixedCommandTree.java
similarity index 97%
rename from tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/MixedCommandTree.java
rename to tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/MixedCommandTree.java
index b47a3d7..f170902 100644
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/MixedCommandTree.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/MixedCommandTree.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.tobago.example.data;
+package org.apache.myfaces.tobago.example.demo;
 
 public class MixedCommandTree {
 
diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/NamedNode.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/NamedNode.java
similarity index 97%
rename from tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/NamedNode.java
rename to tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/NamedNode.java
index 3e427ec..5cacaf8 100644
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/NamedNode.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/NamedNode.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.tobago.example.data;
+package org.apache.myfaces.tobago.example.demo;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/Node.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/Node.java
similarity index 98%
rename from tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/Node.java
rename to tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/Node.java
index b582f86..a1b2cbe 100644
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/Node.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/Node.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.tobago.example.data;
+package org.apache.myfaces.tobago.example.demo;
 
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.event.TreeExpansionEvent;
diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/Salutation.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/Salutation.java
similarity index 96%
rename from tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/Salutation.java
rename to tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/Salutation.java
index 08573ca..acfb8aa 100644
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/Salutation.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/Salutation.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.tobago.example.data;
+package org.apache.myfaces.tobago.example.demo;
 
 public enum Salutation {
 
diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/SalutationConverter.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SalutationConverter.java
similarity index 96%
rename from tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/SalutationConverter.java
rename to tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SalutationConverter.java
index 04e4b99..a901a05 100644
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/SalutationConverter.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SalutationConverter.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.tobago.example.data;
+package org.apache.myfaces.tobago.example.demo;
 
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectManyCheckboxController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectManyCheckboxController.java
index 09a96c3..815928d 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectManyCheckboxController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectManyCheckboxController.java
@@ -19,8 +19,6 @@
 
 package org.apache.myfaces.tobago.example.demo;
 
-import org.apache.myfaces.tobago.example.data.SolarObject;
-
 import javax.enterprise.context.RequestScoped;
 import javax.inject.Named;
 import java.io.Serializable;
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectManyShuttleController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectManyShuttleController.java
index d4cd53c..f607417 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectManyShuttleController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectManyShuttleController.java
@@ -19,8 +19,6 @@
 
 package org.apache.myfaces.tobago.example.demo;
 
-import org.apache.myfaces.tobago.example.data.SolarObject;
-
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.SessionScoped;
 import javax.inject.Inject;
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectOneRadioController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectOneRadioController.java
index 908d688..de12fdb 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectOneRadioController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectOneRadioController.java
@@ -19,8 +19,6 @@
 
 package org.apache.myfaces.tobago.example.demo;
 
-import org.apache.myfaces.tobago.example.data.SolarObject;
-
 import javax.enterprise.context.RequestScoped;
 import javax.inject.Named;
 import java.io.Serializable;
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetController.java
index 7d76dc8..0eb27e1 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetController.java
@@ -20,7 +20,6 @@
 package org.apache.myfaces.tobago.example.demo;
 
 import org.apache.myfaces.tobago.context.Markup;
-import org.apache.myfaces.tobago.example.data.SolarObject;
 import org.apache.myfaces.tobago.model.SelectItem;
 import org.apache.myfaces.tobago.model.Selectable;
 import org.apache.myfaces.tobago.model.SheetState;
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetEditableController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetEditableController.java
index eed6746..13261f0 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetEditableController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetEditableController.java
@@ -19,8 +19,6 @@
 
 package org.apache.myfaces.tobago.example.demo;
 
-import org.apache.myfaces.tobago.example.data.SolarObject;
-
 import javax.annotation.PostConstruct;
 import javax.enterprise.context.SessionScoped;
 import javax.inject.Inject;
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetFilterController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetFilterController.java
index d6f249f..8472d34 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetFilterController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetFilterController.java
@@ -20,7 +20,6 @@
 package org.apache.myfaces.tobago.example.demo;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.myfaces.tobago.example.data.SolarObject;
 import org.apache.myfaces.tobago.model.SelectItem;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetSortingController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetSortingController.java
index bed5417..c9d137d 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetSortingController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetSortingController.java
@@ -21,7 +21,6 @@ package org.apache.myfaces.tobago.example.demo;
 
 import org.apache.myfaces.tobago.component.UISheet;
 import org.apache.myfaces.tobago.event.SortActionEvent;
-import org.apache.myfaces.tobago.example.data.SolarObject;
 import org.apache.myfaces.tobago.model.SheetState;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/SmallTree.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SmallTree.java
similarity index 96%
rename from tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/SmallTree.java
rename to tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SmallTree.java
index fb6aab6..4ef4fe5 100644
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/SmallTree.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SmallTree.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.myfaces.tobago.example.data;
+package org.apache.myfaces.tobago.example.demo;
 
 import javax.swing.tree.DefaultMutableTreeNode;
 
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SolarConverter.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SolarConverter.java
index c93e602..33c4b8b 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SolarConverter.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SolarConverter.java
@@ -19,8 +19,6 @@
 
 package org.apache.myfaces.tobago.example.demo;
 
-import org.apache.myfaces.tobago.example.data.SolarObject;
-
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.convert.Converter;
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SolarObject.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SolarObject.java
new file mode 100644
index 0000000..5701f53
--- /dev/null
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SolarObject.java
@@ -0,0 +1,195 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.tobago.example.demo;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.faces.event.AjaxBehaviorEvent;
+import java.io.Serializable;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class SolarObject implements Serializable {
+
+  private static final Logger LOG = LoggerFactory.getLogger(SolarObject.class);
+
+  private String name;
+
+  private String number;
+
+  private String orbit;
+
+  private Integer distance;
+
+  private Double period;
+
+  private Double incl;
+
+  private Double eccen;
+
+  private String discoverer;
+
+  private Integer discoverYear;
+
+  private String population;
+
+  private List<Element> chemicalComposition;
+
+  public SolarObject(
+      final String name, final String number, final String orbit, final Integer distance, final Double period,
+      final Double incl, final Double eccen, final String discoverer, final Integer discoverYear) {
+    this.name = name;
+    this.number = number;
+    this.orbit = orbit;
+    this.distance = distance;
+    this.period = period;
+    this.incl = incl;
+    this.eccen = eccen;
+    this.discoverer = discoverer;
+    this.discoverYear = discoverYear;
+    this.population = "Earth".equals(name) ? "~ 8.000.000.000" : "0";
+  }
+
+  public SolarObject(final SolarObject solarObject) {
+    this.name = solarObject.getName();
+    this.number = solarObject.getNumber();
+    this.orbit = solarObject.getOrbit();
+    this.distance = solarObject.getDistance();
+    this.period = solarObject.getPeriod();
+    this.incl = solarObject.getIncl();
+    this.eccen = solarObject.getEccen();
+    this.discoverer = solarObject.getDiscoverer();
+    this.discoverYear = solarObject.getDiscoverYear();
+    this.population = getPopulation();
+    this.chemicalComposition = chemicalComposition != null
+        ? chemicalComposition.stream().map(Element::new).collect(Collectors.toList())
+        : null;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void update(final AjaxBehaviorEvent event) {
+    LOG.info("AjaxBehaviorEvent called. New value: '{}' event: {}", name, event);
+  }
+
+  public void setName(final String name) {
+    this.name = name;
+  }
+
+  public String getMarkup() {
+    if (name.equals("Sun")) {
+      return "sun";
+    } else {
+      if (orbit.equals("Sun")) {
+        return "planet";
+      } else {
+        return "moon";
+      }
+    }
+  }
+
+  public String getNumber() {
+    return number;
+  }
+
+  public void setNumber(final String number) {
+    this.number = number;
+  }
+
+  public String getOrbit() {
+    return orbit;
+  }
+
+  public void setOrbit(final String orbit) {
+    this.orbit = orbit;
+  }
+
+  public Integer getDistance() {
+    return distance;
+  }
+
+  public void setDistance(final Integer distance) {
+    this.distance = distance;
+  }
+
+  public Double getPeriod() {
+    return period;
+  }
+
+  public void setPeriod(final Double period) {
+    this.period = period;
+  }
+
+  public Double getIncl() {
+    return incl;
+  }
+
+  public void setIncl(final Double incl) {
+    this.incl = incl;
+  }
+
+  public Double getEccen() {
+    return eccen;
+  }
+
+  public void setEccen(final Double eccen) {
+    this.eccen = eccen;
+  }
+
+  public String getDiscoverer() {
+    return discoverer;
+  }
+
+  public void setDiscoverer(final String discoverer) {
+    this.discoverer = discoverer;
+  }
+
+  public Integer getDiscoverYear() {
+    return discoverYear;
+  }
+
+  public void setDiscoverYear(final Integer discoverYear) {
+    this.discoverYear = discoverYear;
+  }
+
+  public String getPopulation() {
+    return population;
+  }
+
+  public void setPopulation(final String population) {
+    this.population = population;
+  }
+
+  public List<Element> getChemicalComposition() {
+    return chemicalComposition != null ? chemicalComposition : Collections.emptyList();
+  }
+
+  public void setChemicalComposition(final List<Element> chemicalComposition) {
+    this.chemicalComposition = chemicalComposition;
+  }
+
+  public String toString() {
+    return name;
+  }
+}
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SuggestController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SuggestController.java
index a61e04d..7329330 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SuggestController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SuggestController.java
@@ -20,7 +20,6 @@
 package org.apache.myfaces.tobago.example.demo;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.myfaces.tobago.example.data.SolarObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeCommandTypesController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeCommandTypesController.java
index 0981c08..667022f 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeCommandTypesController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeCommandTypesController.java
@@ -19,9 +19,6 @@
 
 package org.apache.myfaces.tobago.example.demo;
 
-import org.apache.myfaces.tobago.example.data.CommandNode;
-import org.apache.myfaces.tobago.example.data.CommandNodeFactory;
-
 import javax.enterprise.context.SessionScoped;
 import javax.inject.Named;
 import java.io.Serializable;
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeController.java
index dd59170..dbd8b15 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeController.java
@@ -19,8 +19,6 @@
 
 package org.apache.myfaces.tobago.example.demo;
 
-import org.apache.myfaces.tobago.example.data.CategoryTree;
-
 import javax.enterprise.context.SessionScoped;
 import javax.inject.Named;
 import javax.swing.tree.DefaultMutableTreeNode;
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeEditorController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeEditorController.java
index db1bb63..f822251 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeEditorController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeEditorController.java
@@ -19,8 +19,6 @@
 
 package org.apache.myfaces.tobago.example.demo;
 
-import org.apache.myfaces.tobago.example.data.CategoryTree;
-import org.apache.myfaces.tobago.example.data.Node;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeSelectController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeSelectController.java
index ad210ad..f54f8d4 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeSelectController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/TreeSelectController.java
@@ -19,9 +19,6 @@
 
 package org.apache.myfaces.tobago.example.demo;
 
-import org.apache.myfaces.tobago.example.data.CategoryTree;
-import org.apache.myfaces.tobago.example.data.Node;
-
 import javax.enterprise.context.SessionScoped;
 import javax.inject.Named;
 import javax.swing.tree.DefaultMutableTreeNode;
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/SheetTestController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/SheetTestController.java
index c8752ab..ee2bc59 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/SheetTestController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/SheetTestController.java
@@ -19,7 +19,9 @@
 
 package org.apache.myfaces.tobago.example.test;
 
-import org.apache.myfaces.tobago.example.data.SolarObject;
+import org.apache.myfaces.tobago.example.demo.LocaleEntry;
+import org.apache.myfaces.tobago.example.demo.LocaleList;
+import org.apache.myfaces.tobago.example.demo.SolarObject;
 import org.apache.myfaces.tobago.example.demo.AstroData;
 
 import javax.annotation.PostConstruct;
@@ -28,6 +30,7 @@ import javax.faces.model.DataModel;
 import javax.inject.Inject;
 import javax.inject.Named;
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -39,18 +42,31 @@ public class SheetTestController implements Serializable {
   private AstroData astroData;
 
   private List<SolarObject> solarArray;
+  private List<SolarObject> solarArray3;
   private DataModel undefined;
+  private List<LocaleEntry> localeList;
 
   @PostConstruct
   private void init() {
     solarArray = astroData.findAll().collect(Collectors.toList());
+    solarArray3 = astroData.findAll().limit(3).collect(Collectors.toList());
     undefined = new UndefinedRowCountDataModel(solarArray);
+    // Create a copy for sorting, because the LocaleList.DATA is not modifiable.
+    localeList = new ArrayList<>(LocaleList.DATA);
   }
 
   public List<SolarObject> getSolarArray() {
     return solarArray;
   }
 
+  public List<SolarObject> getSolarArray3() {
+    return solarArray3;
+  }
+
+  public List<LocaleEntry> getLocaleList() {
+    return localeList;
+  }
+
   public DataModel getUndefined() {
     return undefined;
   }
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/TreeController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/TreeController.java
index 6f53a9e..b5bc9bd 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/TreeController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/TreeController.java
@@ -19,9 +19,9 @@
 
 package org.apache.myfaces.tobago.example.test;
 
-import org.apache.myfaces.tobago.example.data.CantorInterval;
-import org.apache.myfaces.tobago.example.data.CategoryTree;
-import org.apache.myfaces.tobago.example.data.SmallTree;
+import org.apache.myfaces.tobago.example.demo.CantorInterval;
+import org.apache.myfaces.tobago.example.demo.CategoryTree;
+import org.apache.myfaces.tobago.example.demo.SmallTree;
 import org.apache.myfaces.tobago.model.ExpandedState;
 import org.apache.myfaces.tobago.model.SelectedState;
 import org.apache.myfaces.tobago.model.TreeDataModel;
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/UndefinedRowCountDataModel.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/UndefinedRowCountDataModel.java
index d66d819..ce58132 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/UndefinedRowCountDataModel.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/UndefinedRowCountDataModel.java
@@ -19,7 +19,7 @@
 
 package org.apache.myfaces.tobago.example.test;
 
-import org.apache.myfaces.tobago.example.data.SolarObject;
+import org.apache.myfaces.tobago.example.demo.SolarObject;
 
 import javax.faces.model.ArrayDataModel;
 import java.util.List;
diff --git a/tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/EUR-14.png b/tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/EUR-14.png
similarity index 100%
rename from tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/EUR-14.png
rename to tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/EUR-14.png
diff --git a/tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/EUR.png b/tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/EUR.png
similarity index 100%
rename from tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/EUR.png
rename to tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/EUR.png
diff --git a/tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/JPY-14.png b/tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/JPY-14.png
similarity index 100%
rename from tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/JPY-14.png
rename to tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/JPY-14.png
diff --git a/tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/JPY.png b/tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/JPY.png
similarity index 100%
rename from tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/JPY.png
rename to tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/JPY.png
diff --git a/tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/TTD-14.png b/tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/TTD-14.png
similarity index 100%
rename from tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/TTD-14.png
rename to tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/TTD-14.png
diff --git a/tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/TTD.png b/tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/TTD.png
similarity index 100%
rename from tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/TTD.png
rename to tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/TTD.png
diff --git a/tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/USD-14.png b/tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/USD-14.png
similarity index 100%
rename from tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/USD-14.png
rename to tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/USD-14.png
diff --git a/tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/USD.png b/tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/USD.png
similarity index 100%
rename from tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/USD.png
rename to tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/USD.png
diff --git a/tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/sun-behind-mountains.jpg b/tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/sun-behind-mountains.jpg
similarity index 100%
rename from tobago-example/tobago-example-data/src/main/resources/META-INF/resources/data/sun-behind-mountains.jpg
rename to tobago-example/tobago-example-demo/src/main/resources/META-INF/resources/data/sun-behind-mountains.jpg
diff --git a/tobago-example/tobago-example-demo/src/main/resources/org/apache/myfaces/tobago/example/demo/astro-data.json b/tobago-example/tobago-example-demo/src/main/resources/org/apache/myfaces/tobago/example/demo/astro-data.json
new file mode 100644
index 0000000..8e5708b
--- /dev/null
+++ b/tobago-example/tobago-example-demo/src/main/resources/org/apache/myfaces/tobago/example/demo/astro-data.json
@@ -0,0 +1,977 @@
+[
+  {
+    "name": "Sun",
+    "number": "-",
+    "orbit": "-",
+    "distance": 0,
+    "period": 0.0,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "-",
+    "chemicalComposition": [
+      {
+        "name": "Hydrogen",
+        "ratio": 0.74
+      },
+      {
+        "name": "Helium",
+        "ratio": 0.25
+      }
+    ]
+  },
+  {
+    "name": "Mercury",
+    "number": "I",
+    "orbit": "Sun",
+    "distance": 57910,
+    "period": 87.97,
+    "incl": 7.0,
+    "eccen": 0.21,
+    "discoverer": "-"
+  },
+  {
+    "name": "Venus",
+    "number": "II",
+    "orbit": "Sun",
+    "distance": 108200,
+    "period": 224.7,
+    "incl": 3.39,
+    "eccen": 0.01,
+    "discoverer": "-"
+  },
+  {
+    "name": "Earth",
+    "number": "III",
+    "orbit": "Sun",
+    "distance": 149600,
+    "period": 365.26,
+    "incl": 0.0,
+    "eccen": 0.02,
+    "discoverer": "-",
+    "population": "~ 8.000.000.000",
+    "chemicalComposition": [
+      {
+        "name": "Silica",
+        "ratio": 0.6
+      },
+      {
+        "name": "Alimina",
+        "ratio": 0.15
+      },
+      {
+        "name": "Lime",
+        "ratio": 0.05
+      }
+    ]
+  },
+  {
+    "name": "Mars",
+    "number": "IV",
+    "orbit": "Sun",
+    "distance": 227940,
+    "period": 686.98,
+    "incl": 1.85,
+    "eccen": 0.09,
+    "discoverer": "-"
+  },
+  {
+    "name": "Jupiter",
+    "number": "V",
+    "orbit": "Sun",
+    "distance": 778330,
+    "period": 4332.71,
+    "incl": 1.31,
+    "eccen": 0.05,
+    "discoverer": "-"
+  },
+  {
+    "name": "Saturn",
+    "number": "VI",
+    "orbit": "Sun",
+    "distance": 1429400,
+    "period": 10759.5,
+    "incl": 2.49,
+    "eccen": 0.06,
+    "discoverer": "-"
+  },
+  {
+    "name": "Uranus",
+    "number": "VII",
+    "orbit": "Sun",
+    "distance": 2870990,
+    "period": 30685.0,
+    "incl": 0.77,
+    "eccen": 0.05,
+    "discoverer": "Herschel",
+    "discoverYear": 1781
+  },
+  {
+    "name": "Neptune",
+    "number": "VIII",
+    "orbit": "Sun",
+    "distance": 4504300,
+    "period": 60190.0,
+    "incl": 1.77,
+    "eccen": 0.01,
+    "discoverer": "Adams",
+    "discoverYear": 1846
+  },
+  {
+    "name": "Pluto",
+    "number": "IX",
+    "orbit": "Sun",
+    "distance": 5913520,
+    "period": 90800.0,
+    "incl": 17.15,
+    "eccen": 0.25,
+    "discoverer": "Tombaugh",
+    "discoverYear": 1930
+  },
+  {
+    "name": "Moon",
+    "number": "I",
+    "orbit": "Earth",
+    "distance": 384,
+    "period": 27.32,
+    "incl": 5.14,
+    "eccen": 0.05,
+    "discoverer": "-",
+    "chemicalComposition": [
+      {
+        "name": "Silica",
+        "ratio": 0.45
+      },
+      {
+        "name": "Alimina",
+        "ratio": 0.24
+      },
+      {
+        "name": "Lime",
+        "ratio": 0.16
+      }
+    ]
+  },
+  {
+    "name": "Phobos",
+    "number": "I",
+    "orbit": "Mars",
+    "distance": 9,
+    "period": 0.32,
+    "incl": 1.0,
+    "eccen": 0.02,
+    "discoverer": "Hall",
+    "discoverYear": 1877
+  },
+  {
+    "name": "Deimos",
+    "number": "II",
+    "orbit": "Mars",
+    "distance": 23,
+    "period": 1.26,
+    "incl": 1.8,
+    "eccen": 0.0,
+    "discoverer": "Hall",
+    "discoverYear": 1877
+  },
+  {
+    "name": "Metis",
+    "number": "XVI",
+    "orbit": "Jupiter",
+    "distance": 128,
+    "period": 0.29,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Synnott",
+    "discoverYear": 1979
+  },
+  {
+    "name": "Adrastea",
+    "number": "XV",
+    "orbit": "Jupiter",
+    "distance": 129,
+    "period": 0.3,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Jewitt",
+    "discoverYear": 1979
+  },
+  {
+    "name": "Amalthea",
+    "number": "V",
+    "orbit": "Jupiter",
+    "distance": 181,
+    "period": 0.5,
+    "incl": 0.4,
+    "eccen": 0.0,
+    "discoverer": "Barnard",
+    "discoverYear": 1892
+  },
+  {
+    "name": "Thebe",
+    "number": "XIV",
+    "orbit": "Jupiter",
+    "distance": 222,
+    "period": 0.67,
+    "incl": 0.8,
+    "eccen": 0.02,
+    "discoverer": "Synnott",
+    "discoverYear": 1979
+  },
+  {
+    "name": "Io",
+    "number": "I",
+    "orbit": "Jupiter",
+    "distance": 422,
+    "period": 1.77,
+    "incl": 0.04,
+    "eccen": 0.0,
+    "discoverer": "Galileo",
+    "discoverYear": 1610
+  },
+  {
+    "name": "Europa",
+    "number": "II",
+    "orbit": "Jupiter",
+    "distance": 671,
+    "period": 3.55,
+    "incl": 0.47,
+    "eccen": 0.01,
+    "discoverer": "Galileo",
+    "discoverYear": 1610
+  },
+  {
+    "name": "Ganymede",
+    "number": "III",
+    "orbit": "Jupiter",
+    "distance": 1070,
+    "period": 7.15,
+    "incl": 0.19,
+    "eccen": 0.0,
+    "discoverer": "Galileo",
+    "discoverYear": 1610
+  },
+  {
+    "name": "Callisto",
+    "number": "IV",
+    "orbit": "Jupiter",
+    "distance": 1883,
+    "period": 16.69,
+    "incl": 0.28,
+    "eccen": 0.01,
+    "discoverer": "Galileo",
+    "discoverYear": 1610
+  },
+  {
+    "name": "Themisto",
+    "number": "XVIII",
+    "orbit": "Jupiter",
+    "distance": 7507,
+    "period": 130.02,
+    "discoverer": "Sheppard",
+    "discoverYear": 2000
+  },
+  {
+    "name": "Leda",
+    "number": "XIII",
+    "orbit": "Jupiter",
+    "distance": 11094,
+    "period": 238.72,
+    "incl": 27.0,
+    "eccen": 0.15,
+    "discoverer": "Kowal",
+    "discoverYear": 1974
+  },
+  {
+    "name": "Himalia",
+    "number": "VI",
+    "orbit": "Jupiter",
+    "distance": 11480,
+    "period": 250.57,
+    "incl": 28.0,
+    "eccen": 0.16,
+    "discoverer": "Perrine",
+    "discoverYear": 1904
+  },
+  {
+    "name": "Lysithea",
+    "number": "X",
+    "orbit": "Jupiter",
+    "distance": 11720,
+    "period": 259.22,
+    "incl": 29.0,
+    "eccen": 0.11,
+    "discoverer": "Nicholson",
+    "discoverYear": 1938
+  },
+  {
+    "name": "Elara",
+    "number": "VII",
+    "orbit": "Jupiter",
+    "distance": 11737,
+    "period": 259.65,
+    "incl": 28.0,
+    "eccen": 0.21,
+    "discoverer": "Perrine",
+    "discoverYear": 1905
+  },
+  {
+    "name": "Ananke",
+    "number": "XII",
+    "orbit": "Jupiter",
+    "distance": 21200,
+    "period": -629.77,
+    "incl": 147.0,
+    "eccen": 0.17,
+    "discoverer": "Nicholson",
+    "discoverYear": 1951
+  },
+  {
+    "name": "Carme",
+    "number": "XI",
+    "orbit": "Jupiter",
+    "distance": 22600,
+    "period": -702.3,
+    "incl": 163.0,
+    "eccen": 0.21,
+    "discoverer": "Nicholson",
+    "discoverYear": 1938
+  },
+  {
+    "name": "Pasiphae",
+    "number": "VIII",
+    "orbit": "Jupiter",
+    "distance": 23500,
+    "period": -708.0,
+    "incl": 147.0,
+    "eccen": 0.38,
+    "discoverer": "Melotte",
+    "discoverYear": 1908
+  },
+  {
+    "name": "Sinope",
+    "number": "IX",
+    "orbit": "Jupiter",
+    "distance": 23700,
+    "period": -758.9,
+    "incl": 153.0,
+    "eccen": 0.28,
+    "discoverer": "Nicholson",
+    "discoverYear": 1914
+  },
+  {
+    "name": "Iocaste",
+    "number": "XXIV",
+    "orbit": "Jupiter",
+    "distance": 20216,
+    "period": 631.5,
+    "discoverer": "Sheppard",
+    "discoverYear": 2000
+  },
+  {
+    "name": "Harpalyke",
+    "number": "XXII",
+    "orbit": "Jupiter",
+    "distance": 21132,
+    "period": 623.3,
+    "discoverer": "Sheppard",
+    "discoverYear": 2000
+  },
+  {
+    "name": "Praxidike",
+    "number": "XXVII",
+    "orbit": "Jupiter",
+    "distance": 20964,
+    "period": 625.3,
+    "discoverer": "Sheppard",
+    "discoverYear": 2000
+  },
+  {
+    "name": "Taygete",
+    "number": "XX",
+    "orbit": "Jupiter",
+    "distance": 23312,
+    "period": 732.2,
+    "discoverer": "Sheppard",
+    "discoverYear": 2000
+  },
+  {
+    "name": "Chaldene",
+    "number": "XXI",
+    "orbit": "Jupiter",
+    "distance": 23387,
+    "period": 723.8,
+    "discoverer": "Sheppard",
+    "discoverYear": 2000
+  },
+  {
+    "name": "Kalyke",
+    "number": "XXIII",
+    "orbit": "Jupiter",
+    "distance": 23745,
+    "period": 743.0,
+    "discoverer": "Sheppard",
+    "discoverYear": 2000
+  },
+  {
+    "name": "Callirrhoe",
+    "number": "XVII",
+    "orbit": "Jupiter",
+    "distance": 24100,
+    "period": 758.8,
+    "discoverer": "Sheppard",
+    "discoverYear": 2000
+  },
+  {
+    "name": "Megaclite",
+    "number": "XIX",
+    "orbit": "Jupiter",
+    "distance": 23911,
+    "period": 752.8,
+    "discoverer": "Sheppard",
+    "discoverYear": 2000
+  },
+  {
+    "name": "Isonoe",
+    "number": "XXVI",
+    "orbit": "Jupiter",
+    "distance": 23078,
+    "period": 725.5,
+    "discoverer": "Sheppard",
+    "discoverYear": 2000
+  },
+  {
+    "name": "Erinome",
+    "number": "XXV",
+    "orbit": "Jupiter",
+    "distance": 23168,
+    "period": 728.3,
+    "discoverer": "Sheppard",
+    "discoverYear": 2000
+  },
+  {
+    "name": "Pan",
+    "number": "XVIII",
+    "orbit": "Saturn",
+    "distance": 134,
+    "period": 0.58,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Showalter",
+    "discoverYear": 1990
+  },
+  {
+    "name": "Atlas",
+    "number": "XV",
+    "orbit": "Saturn",
+    "distance": 138,
+    "period": 0.6,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Terrile",
+    "discoverYear": 1980
+  },
+  {
+    "name": "Prometheus",
+    "number": "XVI",
+    "orbit": "Saturn",
+    "distance": 139,
+    "period": 0.61,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Collins",
+    "discoverYear": 1980
+  },
+  {
+    "name": "Pandora",
+    "number": "XVII",
+    "orbit": "Saturn",
+    "distance": 142,
+    "period": 0.63,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Collins",
+    "discoverYear": 1980
+  },
+  {
+    "name": "Epimetheus",
+    "number": "XI",
+    "orbit": "Saturn",
+    "distance": 151,
+    "period": 0.69,
+    "incl": 0.34,
+    "eccen": 0.01,
+    "discoverer": "Walker",
+    "discoverYear": 1980
+  },
+  {
+    "name": "Janus",
+    "number": "X",
+    "orbit": "Saturn",
+    "distance": 151,
+    "period": 0.69,
+    "incl": 0.14,
+    "eccen": 0.01,
+    "discoverer": "Dollfus",
+    "discoverYear": 1966
+  },
+  {
+    "name": "Mimas",
+    "number": "I",
+    "orbit": "Saturn",
+    "distance": 186,
+    "period": 0.94,
+    "incl": 1.53,
+    "eccen": 0.02,
+    "discoverer": "Herschel",
+    "discoverYear": 1789
+  },
+  {
+    "name": "Enceladus",
+    "number": "II",
+    "orbit": "Saturn",
+    "distance": 238,
+    "period": 1.37,
+    "incl": 0.02,
+    "eccen": 0.0,
+    "discoverer": "Herschel",
+    "discoverYear": 1789
+  },
+  {
+    "name": "Tethys",
+    "number": "III",
+    "orbit": "Saturn",
+    "distance": 295,
+    "period": 1.89,
+    "incl": 1.09,
+    "eccen": 0.0,
+    "discoverer": "Cassini",
+    "discoverYear": 1684
+  },
+  {
+    "name": "Telesto",
+    "number": "XIII",
+    "orbit": "Saturn",
+    "distance": 295,
+    "period": 1.89,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Smith",
+    "discoverYear": 1980
+  },
+  {
+    "name": "Calypso",
+    "number": "XIV",
+    "orbit": "Saturn",
+    "distance": 295,
+    "period": 1.89,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Pascu",
+    "discoverYear": 1980
+  },
+  {
+    "name": "Dione",
+    "number": "IV",
+    "orbit": "Saturn",
+    "distance": 377,
+    "period": 2.74,
+    "incl": 0.02,
+    "eccen": 0.0,
+    "discoverer": "Cassini",
+    "discoverYear": 1684
+  },
+  {
+    "name": "Helene",
+    "number": "XII",
+    "orbit": "Saturn",
+    "distance": 377,
+    "period": 2.74,
+    "incl": 0.2,
+    "eccen": 0.01,
+    "discoverer": "Laques",
+    "discoverYear": 1980
+  },
+  {
+    "name": "Rhea",
+    "number": "V",
+    "orbit": "Saturn",
+    "distance": 527,
+    "period": 4.52,
+    "incl": 0.35,
+    "eccen": 0.0,
+    "discoverer": "Cassini",
+    "discoverYear": 1672
+  },
+  {
+    "name": "Titan",
+    "number": "VI",
+    "orbit": "Saturn",
+    "distance": 1222,
+    "period": 15.95,
+    "incl": 0.33,
+    "eccen": 0.03,
+    "discoverer": "Huygens",
+    "discoverYear": 1655
+  },
+  {
+    "name": "Hyperion",
+    "number": "VII",
+    "orbit": "Saturn",
+    "distance": 1481,
+    "period": 21.28,
+    "incl": 0.43,
+    "eccen": 0.1,
+    "discoverer": "Bond",
+    "discoverYear": 1848
+  },
+  {
+    "name": "Iapetus",
+    "number": "VIII",
+    "orbit": "Saturn",
+    "distance": 3561,
+    "period": 79.33,
+    "incl": 14.72,
+    "eccen": 0.03,
+    "discoverer": "Cassini",
+    "discoverYear": 1671
+  },
+  {
+    "name": "Phoebe",
+    "number": "IX",
+    "orbit": "Saturn",
+    "distance": 12952,
+    "period": -550.48,
+    "incl": 175.3,
+    "eccen": 0.16,
+    "discoverer": "Pickering",
+    "discoverYear": 1898
+  },
+  {
+    "name": "Cordelia",
+    "number": "VI",
+    "orbit": "Uranus",
+    "distance": 50,
+    "period": 0.34,
+    "incl": 0.14,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1986
+  },
+  {
+    "name": "Ophelia",
+    "number": "VII",
+    "orbit": "Uranus",
+    "distance": 54,
+    "period": 0.38,
+    "incl": 0.09,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1986
+  },
+  {
+    "name": "Bianca",
+    "number": "VIII",
+    "orbit": "Uranus",
+    "distance": 59,
+    "period": 0.43,
+    "incl": 0.16,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1986
+  },
+  {
+    "name": "Cressida",
+    "number": "IX",
+    "orbit": "Uranus",
+    "distance": 62,
+    "period": 0.46,
+    "incl": 0.04,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1986
+  },
+  {
+    "name": "Desdemona",
+    "number": "X",
+    "orbit": "Uranus",
+    "distance": 63,
+    "period": 0.47,
+    "incl": 0.16,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1986
+  },
+  {
+    "name": "Juliet",
+    "number": "XI",
+    "orbit": "Uranus",
+    "distance": 64,
+    "period": 0.49,
+    "incl": 0.06,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1986
+  },
+  {
+    "name": "Portia",
+    "number": "XII",
+    "orbit": "Uranus",
+    "distance": 66,
+    "period": 0.51,
+    "incl": 0.09,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1986
+  },
+  {
+    "name": "Rosalind",
+    "number": "XIII",
+    "orbit": "Uranus",
+    "distance": 70,
+    "period": 0.56,
+    "incl": 0.28,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1986
+  },
+  {
+    "name": "Belinda",
+    "number": "XIV",
+    "orbit": "Uranus",
+    "distance": 75,
+    "period": 0.62,
+    "incl": 0.03,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1986
+  },
+  {
+    "name": "1986U10",
+    "number": "",
+    "orbit": "Uranus",
+    "distance": 76,
+    "period": 0.64,
+    "discoverer": "Karkoschka",
+    "discoverYear": 1999
+  },
+  {
+    "name": "Puck",
+    "number": "XV",
+    "orbit": "Uranus",
+    "distance": 86,
+    "period": 0.76,
+    "incl": 0.31,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1985
+  },
+  {
+    "name": "Miranda",
+    "number": "V",
+    "orbit": "Uranus",
+    "distance": 130,
+    "period": 1.41,
+    "incl": 4.22,
+    "eccen": 0.0,
+    "discoverer": "Kuiper",
+    "discoverYear": 1948
+  },
+  {
+    "name": "Ariel",
+    "number": "I",
+    "orbit": "Uranus",
+    "distance": 191,
+    "period": 2.52,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Lassell",
+    "discoverYear": 1851
+  },
+  {
+    "name": "Umbriel",
+    "number": "II",
+    "orbit": "Uranus",
+    "distance": 266,
+    "period": 4.14,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Lassell",
+    "discoverYear": 1851
+  },
+  {
+    "name": "Titania",
+    "number": "III",
+    "orbit": "Uranus",
+    "distance": 436,
+    "period": 8.71,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Herschel",
+    "discoverYear": 1787
+  },
+  {
+    "name": "Oberon",
+    "number": "IV",
+    "orbit": "Uranus",
+    "distance": 583,
+    "period": 13.46,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Herschel",
+    "discoverYear": 1787
+  },
+  {
+    "name": "Caliban",
+    "number": "XVI",
+    "orbit": "Uranus",
+    "distance": 7169,
+    "period": -579.39,
+    "incl": 140.0,
+    "eccen": 0.08,
+    "discoverer": "Gladman",
+    "discoverYear": 1997
+  },
+  {
+    "name": "Stephano",
+    "number": "XX",
+    "orbit": "Uranus",
+    "distance": 7948,
+    "period": -677.48,
+    "incl": 143.0,
+    "eccen": 0.24,
+    "discoverer": "Gladman",
+    "discoverYear": 1999
+  },
+  {
+    "name": "Sycorax",
+    "number": "XVII",
+    "orbit": "Uranus",
+    "distance": 12213,
+    "period": -1283.48,
+    "incl": 153.0,
+    "eccen": 0.51,
+    "discoverer": "Nicholson",
+    "discoverYear": 1997
+  },
+  {
+    "name": "Prospero",
+    "number": "XVIII",
+    "orbit": "Uranus",
+    "distance": 16568,
+    "period": -1962.95,
+    "incl": 152.0,
+    "eccen": 0.44,
+    "discoverer": "Holman",
+    "discoverYear": 1999
+  },
+  {
+    "name": "Setebos",
+    "number": "XIX",
+    "orbit": "Uranus",
+    "distance": 17681,
+    "period": -2196.35,
+    "incl": 158.0,
+    "eccen": 0.57,
+    "discoverer": "Kavelaars",
+    "discoverYear": 1999
+  },
+  {
+    "name": "Naiad",
+    "number": "III",
+    "orbit": "Neptune",
+    "distance": 48,
+    "period": 0.29,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1989
+  },
+  {
+    "name": "Thalassa",
+    "number": "IV",
+    "orbit": "Neptune",
+    "distance": 50,
+    "period": 0.31,
+    "incl": 4.5,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1989
+  },
+  {
+    "name": "Despina",
+    "number": "V",
+    "orbit": "Neptune",
+    "distance": 53,
+    "period": 0.33,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1989
+  },
+  {
+    "name": "Galatea",
+    "number": "VI",
+    "orbit": "Neptune",
+    "distance": 62,
+    "period": 0.43,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1989
+  },
+  {
+    "name": "Larissa",
+    "number": "VII",
+    "orbit": "Neptune",
+    "distance": 74,
+    "period": 0.55,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Reitsema",
+    "discoverYear": 1989
+  },
+  {
+    "name": "Proteus",
+    "number": "VIII",
+    "orbit": "Neptune",
+    "distance": 118,
+    "period": 1.12,
+    "incl": 0.0,
+    "eccen": 0.0,
+    "discoverer": "Voyager 2",
+    "discoverYear": 1989
+  },
+  {
+    "name": "Triton",
+    "number": "I",
+    "orbit": "Neptune",
+    "distance": 355,
+    "period": -5.88,
+    "incl": 157.0,
+    "eccen": 0.0,
+    "discoverer": "Lassell",
+    "discoverYear": 1846
+  },
+  {
+    "name": "Nereid",
+    "number": "II",
+    "orbit": "Neptune",
+    "distance": 5513,
+    "period": 360.13,
+    "incl": 29.0,
+    "eccen": 0.75,
+    "discoverer": "Kuiper",
+    "discoverYear": 1949
+  },
+  {
+    "name": "Charon",
+    "number": "I",
+    "orbit": "Pluto",
+    "distance": 20,
+    "period": 6.39,
+    "incl": 98.8,
+    "eccen": 0.0,
+    "discoverer": "Christy",
+    "discoverYear": 1978
+  }
+]
\ No newline at end of file
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/WEB-INF/faces-config.xml b/tobago-example/tobago-example-demo/src/main/webapp/WEB-INF/faces-config.xml
index 65a03ec..884f59a 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/WEB-INF/faces-config.xml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/WEB-INF/faces-config.xml
@@ -48,7 +48,7 @@
 
   <converter>
     <converter-id>salutationId</converter-id>
-    <converter-class>org.apache.myfaces.tobago.example.data.SalutationConverter</converter-class>
+    <converter-class>org.apache.myfaces.tobago.example.demo.SalutationConverter</converter-class>
   </converter>
 
   <lifecycle>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/25-facelets-as-resources/facelets-as-resources.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/25-facelets-as-resources/facelets-as-resources.xhtml
deleted file mode 100644
index 0853420..0000000
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/30-concept/25-facelets-as-resources/facelets-as-resources.xhtml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
--->
-
-<ui:composition template="/main.xhtml"
-                xmlns="http://www.w3.org/1999/xhtml"
-                xmlns:tc="http://myfaces.apache.org/tobago/component"
-                xmlns:ui="http://java.sun.com/jsf/facelets">
-  <ui:param name="title" value="Loading Facelets from JARs"/>
-  <tc:panel>
-
-    <p>
-      This example demonstrates how to load parts of the view of an application from a library JAR file.
-      The content has to reside in the <code>/META-INF/resources</code> directory of the JAR.
-    </p>
-
-    <p>
-      The content of this box is included from the tobago-example-data JAR.
-    </p>
-
-    <tc:box label="Included content">
-
-      <ui:include src="/data/edit-solar.xhtml"/>
-
-    </tc:box>
-  </tc:panel>
-</ui:composition>
diff --git a/tobago-example/tobago-example-demo/src/test/java/org/apache/myfaces/tobago/example/demo/AstroDataUnitTest.java b/tobago-example/tobago-example-demo/src/test/java/org/apache/myfaces/tobago/example/demo/AstroDataUnitTest.java
index a5aadcb..917b0af 100644
--- a/tobago-example/tobago-example-demo/src/test/java/org/apache/myfaces/tobago/example/demo/AstroDataUnitTest.java
+++ b/tobago-example/tobago-example-demo/src/test/java/org/apache/myfaces/tobago/example/demo/AstroDataUnitTest.java
@@ -5,21 +5,34 @@ import org.junit.Assert;
 import org.junit.Test;
 
 import java.util.List;
+import java.util.Map;
 
 public class AstroDataUnitTest {
 
-//  @Inject // todo
+  //  @Inject // todo
   private AstroData astroData = new AstroData();
 
   @Test
-public void testTerrestrialPlanets() {
+  public void testTerrestrialPlanets() {
     final List<SelectItem> terrestrialPlanets = astroData.getTerrestrialPlanets();
+    Assert.assertEquals(4, terrestrialPlanets.size());
     Assert.assertEquals("Mercury", terrestrialPlanets.get(0).getValue().toString());
   }
 
   @Test
-public void testGiantPlanets() {
-    final  List<SelectItem>  giantPlanets = astroData.getGiantPlanets();
+  public void testGiantPlanets() {
+    final List<SelectItem> giantPlanets = astroData.getGiantPlanets();
+    Assert.assertEquals(4, giantPlanets.size());
     Assert.assertEquals("Jupiter", giantPlanets.get(0).getValue().toString());
   }
+
+  @Test
+  public void testOrbits() {
+    final Map<String, SolarObject> all = astroData.findAllAsMap();
+    for (SolarObject solarObject : all.values()) {
+      // every orbit must be inside the list
+      final String orbit = solarObject.getOrbit();
+      Assert.assertTrue(orbit.equals("-") || all.containsKey(orbit));
+    }
+  }
 }

-- 
To stop receiving notification emails like this one, please contact
lofwyr@apache.org.

[myfaces-tobago] 01/02: demo: clean up

Posted by lo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git

commit 990df0784cb68bca0c05690906f3497327a9d51d
Author: Udo Schnurpfeil <lo...@apache.org>
AuthorDate: Wed May 16 17:17:51 2018 +0200

    demo: clean up
---
 .../myfaces/tobago/example/data/SolarObject.java   | 52 ----------------------
 .../myfaces/tobago/example/demo/AstroData.java     | 30 +++++++++++++
 .../example/demo/SelectManyShuttleController.java  | 13 ++++--
 .../tobago/example/demo/SheetTreeController.java   | 12 +++--
 ...eetController.java => SheetTestController.java} | 46 ++++++++-----------
 .../example/test/UndefinedRowCountDataModel.java   |  5 ++-
 .../src/main/webapp/WEB-INF/faces-config.xml       |  6 ---
 .../10-getting-started/getting-started.xhtml       |  6 ++-
 .../sheet/sheet-auto-height-header-footer.xhtml    |  8 ++--
 .../90000-attic/sheet/sheet-auto-height-rows.xhtml |  8 ++--
 .../90000-attic/sheet/sheet-auto-width.xhtml       |  2 +-
 .../90000-attic/sheet/sheet-bug-tobago-1090.xhtml  |  2 +-
 .../40-test/90000-attic/sheet/sheet-large.xhtml    |  2 +-
 .../90000-attic/sheet/sheet-multi-header.xhtml     |  4 +-
 .../40-test/90000-attic/sheet/sheet-paging-1.xhtml |  2 +-
 .../90000-attic/sheet/sheet-paging-11.xhtml        |  2 +-
 .../90000-attic/sheet/sheet-paging-20.xhtml        |  2 +-
 .../40-test/90000-attic/sheet/sheet-reload.xhtml   |  2 +-
 .../40-test/90000-attic/sheet/sheet-selector.xhtml |  2 +-
 .../40-test/90000-attic/sheet/sheet-simple.xhtml   |  2 +-
 .../sheet/sheet-unknown-row-count.xhtml            |  2 +-
 .../src/main/webapp/server-info.xhtml              |  7 +++
 22 files changed, 100 insertions(+), 117 deletions(-)

diff --git a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/SolarObject.java b/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/SolarObject.java
index e24b12a..31e0369 100644
--- a/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/SolarObject.java
+++ b/tobago-example/tobago-example-data/src/main/java/org/apache/myfaces/tobago/example/data/SolarObject.java
@@ -23,14 +23,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.faces.event.AjaxBehaviorEvent;
-import javax.swing.tree.DefaultMutableTreeNode;
 import java.io.Serializable;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Stream;
 
 import static java.util.stream.Collectors.toList;
@@ -199,58 +195,10 @@ public class SolarObject implements Serializable {
     return name;
   }
 
-  public boolean isSelectionDisabled() {
-    return number.equals("II");
-  }
-
-  @Deprecated
-  public static SolarObject[] getArray() {
-    return DATA;
-  }
-
   public static Stream<SolarObject> getDataStream() {
     return Arrays.stream(DATA);
   }
 
-  public static List<SolarObject> getList() {
-    final SolarObject[] array = getArray();
-    final List<SolarObject> list = new ArrayList<>(array.length);
-    Collections.addAll(list, array);
-    return list;
-  }
-
-  public static DefaultMutableTreeNode getTree() {
-    final SolarObject[] array = getArray();
-    final Map<String, DefaultMutableTreeNode> cache = new HashMap<>();
-    for (final SolarObject solar : array) {
-      final DefaultMutableTreeNode node = new DefaultMutableTreeNode(solar);
-      cache.put(solar.getName(), node);
-      final String orbitName = solar.getOrbit();
-      if (orbitName.equals("-")) {
-        continue;
-      }
-      // adds a solar object as node to its orbit as tree child.
-      cache.get(orbitName).add(node);
-    }
-    return cache.get("Sun");
-  }
-
-  public static List<SolarObject> getSatellites(final String center) {
-    final List<SolarObject> collect = new ArrayList<>();
-    final SolarObject[] all = getArray();
-    for (final SolarObject anAll : all) {
-      if (anAll.getOrbit().equals(center)) {
-        collect.add(anAll);
-      }
-    }
-    return collect;
-  }
-
-  @Deprecated
-  public static SolarObject find(final String name) {
-    return getDataStream().filter(solarObject -> solarObject.getName().equals(name)).findFirst().orElse(null);
-  }
-
   private static final SolarObject SUN = new SolarObject("Sun", "-", "-", 0, 0.0, 0.0, 0.0, "-", null);
   private static final SolarObject EARTH =
       new SolarObject("Earth", "III", "Sun", 149600, 365.26, 0.00, 0.02, "-", null);
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/AstroData.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/AstroData.java
index 7ed5691..133cf8a 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/AstroData.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/AstroData.java
@@ -24,10 +24,13 @@ import org.apache.myfaces.tobago.model.SelectItem;
 
 import javax.inject.Named;
 import javax.inject.Singleton;
+import javax.swing.tree.DefaultMutableTreeNode;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -66,6 +69,33 @@ public class AstroData implements Serializable {
         .filter(solarObject -> Arrays.asList(filter).contains(solarObject.getName()));
   }
 
+  public DefaultMutableTreeNode getAllAsTree() {
+    final Map<String, DefaultMutableTreeNode> cache = new HashMap<>();
+    for (final SolarObject solar : (Iterable<SolarObject>)findAll()::iterator) {
+      final DefaultMutableTreeNode node = new DefaultMutableTreeNode(solar);
+      cache.put(solar.getName(), node);
+      final String orbitName = solar.getOrbit();
+      if (orbitName.equals("-")) {
+        continue;
+      }
+      // adds a solar object as node to its orbit as tree child.
+      cache.get(orbitName).add(node);
+    }
+    return cache.get("Sun");
+  }
+
+  public List<SolarObject> getSatellites(final String center) {
+    final List<SolarObject> collect = new ArrayList<>();
+    for (final SolarObject solar : (Iterable<SolarObject>)findAll()::iterator) {
+      // todo: use lambda
+      if (solar.getOrbit().equals(center)) {
+        collect.add(solar);
+      }
+    }
+    return collect;
+  }
+
+
   private List<SelectItem> createSelectItems(final List<SolarObject> objects) {
     final List<SelectItem> list = new ArrayList<>();
     for (SolarObject object : objects) {
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectManyShuttleController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectManyShuttleController.java
index 3c825ab..d4cd53c 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectManyShuttleController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SelectManyShuttleController.java
@@ -21,10 +21,11 @@ package org.apache.myfaces.tobago.example.demo;
 
 import org.apache.myfaces.tobago.example.data.SolarObject;
 
+import javax.annotation.PostConstruct;
 import javax.enterprise.context.SessionScoped;
+import javax.inject.Inject;
 import javax.inject.Named;
 import java.io.Serializable;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -32,13 +33,17 @@ import java.util.List;
 @Named
 public class SelectManyShuttleController implements Serializable {
 
-  private List<SolarObject> planets = new ArrayList<>();
+  @Inject
+  private AstroData astroData;
+
+  private List<SolarObject> planets;
   private SolarObject[] selectedPlanets = new SolarObject[0];
   private List<String> stars = Arrays.asList("Proxima Centauri", "Alpha Centauri", "Wolf 359", "Sirius");
   private String[] selectedStars = new String[0];
 
-  public SelectManyShuttleController() {
-    planets = SolarObject.getSatellites("Sun");
+  @PostConstruct
+  public void init() {
+    planets = astroData.getSatellites("Sun");
   }
 
   public List<SolarObject> getPlanets() {
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetTreeController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetTreeController.java
index 1f79ecf..aa4dc79 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetTreeController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/SheetTreeController.java
@@ -19,9 +19,9 @@
 
 package org.apache.myfaces.tobago.example.demo;
 
-import org.apache.myfaces.tobago.example.data.SolarObject;
-
+import javax.annotation.PostConstruct;
 import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
 import javax.inject.Named;
 import javax.swing.tree.DefaultMutableTreeNode;
 import java.io.Serializable;
@@ -30,10 +30,14 @@ import java.io.Serializable;
 @Named
 public class SheetTreeController implements Serializable {
 
+  @Inject
+  private AstroData astroData;
+
   private DefaultMutableTreeNode solarTree;
 
-  public SheetTreeController() {
-    solarTree = SolarObject.getTree();
+  @PostConstruct
+  public void init() {
+    solarTree = astroData.getAllAsTree();
   }
 
   public DefaultMutableTreeNode getSolarTree() {
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/SheetController.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/SheetTestController.java
similarity index 54%
rename from tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/SheetController.java
rename to tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/SheetTestController.java
index 83195f0..c8752ab 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/SheetController.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/SheetTestController.java
@@ -19,48 +19,38 @@
 
 package org.apache.myfaces.tobago.example.test;
 
-import org.apache.myfaces.tobago.example.data.LocaleEntry;
-import org.apache.myfaces.tobago.example.data.LocaleList;
 import org.apache.myfaces.tobago.example.data.SolarObject;
+import org.apache.myfaces.tobago.example.demo.AstroData;
 
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.SessionScoped;
 import javax.faces.model.DataModel;
+import javax.inject.Inject;
+import javax.inject.Named;
 import java.io.Serializable;
-import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
-public class SheetController implements Serializable {
+@SessionScoped
+@Named
+public class SheetTestController implements Serializable {
 
-  private SolarObject[] solarArray = SolarObject.getArray();
-  private SolarObject[] solarArray3 = init3();
-  private DataModel undefined = new UndefinedRowCountDataModel(solarArray);
+  @Inject
+  private AstroData astroData;
 
-  public SheetController() {
-    init3();
-  }
+  private List<SolarObject> solarArray;
+  private DataModel undefined;
 
-  private SolarObject[] init3() {
-    final SolarObject[] help = new SolarObject[3];
-    for (int i = 0; i < 3; i++) {
-      help[i] = solarArray[i];
-    }
-    return help;
+  @PostConstruct
+  private void init() {
+    solarArray = astroData.findAll().collect(Collectors.toList());
+    undefined = new UndefinedRowCountDataModel(solarArray);
   }
 
-  // Create a copy for sorting, because the LocaleList.DATA is not modifiable.
-  private List<LocaleEntry> localeList = new ArrayList<>(LocaleList.DATA);
-
-  public SolarObject[] getSolarArray() {
+  public List<SolarObject> getSolarArray() {
     return solarArray;
   }
 
-  public SolarObject[] getSolarArray3() {
-    return solarArray3;
-  }
-
-  public List<LocaleEntry> getLocaleList() {
-    return localeList;
-  }
-
   public DataModel getUndefined() {
     return undefined;
   }
diff --git a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/UndefinedRowCountDataModel.java b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/UndefinedRowCountDataModel.java
index 68714f9..d66d819 100644
--- a/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/UndefinedRowCountDataModel.java
+++ b/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/test/UndefinedRowCountDataModel.java
@@ -22,11 +22,12 @@ package org.apache.myfaces.tobago.example.test;
 import org.apache.myfaces.tobago.example.data.SolarObject;
 
 import javax.faces.model.ArrayDataModel;
+import java.util.List;
 
 public class UndefinedRowCountDataModel extends ArrayDataModel {
 
-  public UndefinedRowCountDataModel(final SolarObject[] array) {
-    super(array);
+  public UndefinedRowCountDataModel(final List<SolarObject> array) {
+    super(array.toArray());
   }
 
   @Override
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/WEB-INF/faces-config.xml b/tobago-example/tobago-example-demo/src/main/webapp/WEB-INF/faces-config.xml
index b8788d3..65a03ec 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/WEB-INF/faces-config.xml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/WEB-INF/faces-config.xml
@@ -119,12 +119,6 @@
   </managed-bean>
 
   <managed-bean>
-    <managed-bean-name>sheet</managed-bean-name>
-    <managed-bean-class>org.apache.myfaces.tobago.example.test.SheetController</managed-bean-class>
-    <managed-bean-scope>session</managed-bean-scope>
-  </managed-bean>
-
-  <managed-bean>
     <managed-bean-name>sort</managed-bean-name>
     <managed-bean-class>org.apache.myfaces.tobago.example.test.SheetSortController</managed-bean-class>
     <managed-bean-scope>session</managed-bean-scope>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/10-intro/10-getting-started/getting-started.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/10-intro/10-getting-started/getting-started.xhtml
index 6dbed3f..5a2e415 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/10-intro/10-getting-started/getting-started.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/10-intro/10-getting-started/getting-started.xhtml
@@ -104,12 +104,16 @@ $ mvn jetty:run -Djsf=mojarra-2.2
 $ mvn jetty:run -Djsf=mojarra-2.3</code></pre>
     </tc:section>
 
-    <!-- TODO -->
+    <!-- XXX -->
     <p>
       <tc:badge markup="warning" value="Warning: The example Jetty currently works not JSF 2.3 in combination with Java 9 or higher!" /><br/>
       because of <code>java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter</code>, which is a problem with Jigsaw.
     </p>
 
+    It's also possible to run the demo in TomEE from Maven directly
+
+    <pre><code class="language-bash">$ mvn clean package tomee:run -Djsf=provided</code></pre>
+
   </tc:section>
 
 </ui:composition>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-auto-height-header-footer.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-auto-height-header-footer.xhtml
index 91a4aa8..2d1d7af 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-auto-height-header-footer.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-auto-height-header-footer.xhtml
@@ -35,7 +35,7 @@
         haeder: false
         footer: false
        -->
-      <tc:sheet value="#{sheet.solarArray3}" id="sheet1" columns="1fr 1fr" var="luminary" rows="3"
+      <tc:sheet value="#{sheetTestController.solarArray3}" id="sheet1" columns="1fr 1fr" var="luminary" rows="3"
                 showHeader="false">
         <tc:column label="Name" id="name" sortable="true">
           <tc:out value="#{luminary.name}"/>
@@ -49,7 +49,7 @@
         haeder: true
         footer: false
        -->
-      <tc:sheet value="#{sheet.solarArray3}" id="sheet2" columns="1fr 1fr" var="luminary" rows="3"
+      <tc:sheet value="#{sheetTestController.solarArray3}" id="sheet2" columns="1fr 1fr" var="luminary" rows="3"
                 showHeader="true">
         <tc:column label="Name" id="name" sortable="true">
           <tc:out value="#{luminary.name}"/>
@@ -63,7 +63,7 @@
         haeder: false
         footer: true
        -->
-      <tc:sheet value="#{sheet.solarArray3}" id="sheet3" columns="1fr 1fr" var="luminary" rows="3"
+      <tc:sheet value="#{sheetTestController.solarArray3}" id="sheet3" columns="1fr 1fr" var="luminary" rows="3"
                 showHeader="false" showPagingAlways="true">
         <tc:column label="Name" id="name" sortable="true">
           <tc:out value="#{luminary.name}"/>
@@ -77,7 +77,7 @@
         haeder: true
         footer: true
        -->
-      <tc:sheet value="#{sheet.solarArray3}" id="sheet4" columns="1fr 1fr" var="luminary" rows="3"
+      <tc:sheet value="#{sheetTestController.solarArray3}" id="sheet4" columns="1fr 1fr" var="luminary" rows="3"
                 showHeader="true" showPagingAlways="true">
         <tc:column label="Name" id="name" sortable="true">
           <tc:out value="#{luminary.name}"/>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-auto-height-rows.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-auto-height-rows.xhtml
index c90ed15..ae76d0c 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-auto-height-rows.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-auto-height-rows.xhtml
@@ -32,7 +32,7 @@
       </f:facet>
 
       <!-- fixed rows = 3 - show exactly 3 rows, but have more -->
-      <tc:sheet value="#{sheet.solarArray}" id="sheet1" columns="1fr 1fr" var="luminary" rows="3"
+      <tc:sheet value="#{sheetTestController.solarArray}" id="sheet1" columns="1fr 1fr" var="luminary" rows="3"
                 showHeader="true" showPagingAlways="true">
         <tc:column label="Name" id="name" sortable="true">
           <tc:out value="#{luminary.name}"/>
@@ -43,7 +43,7 @@
       </tc:sheet>
 
       <!-- rows = undefined (default 0), data model has 3 => show all = 3 -->
-      <tc:sheet value="#{sheet.solarArray3}" id="sheet2" columns="1fr 1fr" var="luminary"
+      <tc:sheet value="#{sheetTestController.solarArray3}" id="sheet2" columns="1fr 1fr" var="luminary"
                 showHeader="true" showPagingAlways="true">
         <tc:column label="Name" id="name" sortable="true">
           <tc:out value="#{luminary.name}"/>
@@ -54,7 +54,7 @@
       </tc:sheet>
 
       <!-- data-model has undefined rowCount, rows=3 -->
-      <tc:sheet value="#{sheet.undefined}" id="sheet3" columns="1fr 1fr" var="luminary" rows="3"
+      <tc:sheet value="#{sheetTestController.undefined}" id="sheet3" columns="1fr 1fr" var="luminary" rows="3"
                 showHeader="true" showPagingAlways="true">
         <tc:column label="Name" id="name" sortable="true">
           <tc:out value="#{luminary.name}"/>
@@ -65,7 +65,7 @@
       </tc:sheet>
 
       <!-- data-model has undefined rowCount, rows = undefined -->
-      <tc:sheet value="#{sheet.undefined}" id="sheet4" columns="1fr 1fr" var="luminary"
+      <tc:sheet value="#{sheetTestController.undefined}" id="sheet4" columns="1fr 1fr" var="luminary"
                 showHeader="true" showPagingAlways="true">
         <tc:column label="Name" id="name" sortable="true">
           <tc:out value="#{luminary.name}"/>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-auto-width.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-auto-width.xhtml
index 1b59220..41a836f 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-auto-width.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-auto-width.xhtml
@@ -31,7 +31,7 @@
         <tc:gridLayout columns="auto" rows="auto"/>
       </f:facet>
 
-      <tc:sheet value="#{sheet.solarArray}" id="sheet1" columns="1fr 1fr" var="luminary" rows="3"
+      <tc:sheet value="#{sheetTestController.solarArray}" id="sheet1" columns="1fr 1fr" var="luminary" rows="3"
                 showHeader="true" showPagingAlways="true">
         <tc:column label="Name" id="name" sortable="true">
           <tc:out value="#{luminary.name}"/>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-bug-tobago-1090.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-bug-tobago-1090.xhtml
index c2ce6a1..3b7fb1f 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-bug-tobago-1090.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-bug-tobago-1090.xhtml
@@ -42,7 +42,7 @@
             &lt;li>Check: 2nd row (Saturn) must be selected&lt;/li>
             &lt;/ol>"/>
 
-      <tc:sheet value="#{sheet.solarArray}" id="sheet" columns="1fr 1fr" var="luminary" rows="5" selectable="single">
+      <tc:sheet value="#{sheetTestController.solarArray}" id="sheet" columns="1fr 1fr" var="luminary" rows="5" selectable="single">
         <tc:column label="Name" sortable="true">
           <tc:out value="#{luminary.name}" id="name"/>
         </tc:column>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-large.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-large.xhtml
index 981d1d7..a280bdb 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-large.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-large.xhtml
@@ -28,7 +28,7 @@
       <tc:gridLayout rows="1fr auto"/>
     </f:facet>
 
-    <tc:sheet value="#{sheet.localeList}" id="sheet" columns="auto 5fr 5fr 5fr 1fr" var="entry" rows="1000">
+    <tc:sheet value="#{sheetTestController.localeList}" id="sheet" columns="auto 5fr 5fr 5fr 1fr" var="entry" rows="1000">
       <tc:columnSelector disabled="#{entry.disabled}"/>
       <tc:column label="Locale" id="l" sortable="true">
         <tc:out value="#{entry.locale}"/>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-multi-header.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-multi-header.xhtml
index 8982e05..49206fe 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-multi-header.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-multi-header.xhtml
@@ -50,8 +50,8 @@
 
     <tc:messages />
 
-    <tc:sheet value="#{sheet.solarArray}" id="sheet" columns="1fr 1fr 1fr 1fr" var="luminary" showRoot="true"
-        showRowRange="left" rows="5">
+    <tc:sheet value="#{sheetTestController.solarArray}" id="sheet" columns="1fr 1fr 1fr 1fr" var="luminary" showRoot="true"
+              showRowRange="left" rows="5">
 
       <f:facet name="header">
         <tc:panel>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-paging-1.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-paging-1.xhtml
index 95382d8..e6ea1cb 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-paging-1.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-paging-1.xhtml
@@ -24,7 +24,7 @@
   <tc:page id="page">
     <!-- <tc:gridLayoutConstraint width="600px" height="600px"/> -->
 
-    <tc:sheet value="#{sheet.solarArray}" id="s3" columns="1fr 1fr" var="luminary" rows="1">
+    <tc:sheet value="#{sheetTestController.solarArray}" id="s3" columns="1fr 1fr" var="luminary" rows="1">
       <tc:column label="Name" id="name" sortable="true">
         <tc:out value="#{luminary.name}"/>
       </tc:column>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-paging-11.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-paging-11.xhtml
index f75d5ec..2155e23 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-paging-11.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-paging-11.xhtml
@@ -27,7 +27,7 @@
       <tc:gridLayout rows="100px"/>
     </f:facet>
 
-    <tc:sheet value="#{sheet.solarArray}" id="s2" columns="1fr 1fr" var="luminary" rows="11">
+    <tc:sheet value="#{sheetTestController.solarArray}" id="s2" columns="1fr 1fr" var="luminary" rows="11">
       <tc:column label="Name" id="name" sortable="true">
         <tc:out value="#{luminary.name}"/>
       </tc:column>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-paging-20.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-paging-20.xhtml
index 1c99b2d..2ca48a7 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-paging-20.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-paging-20.xhtml
@@ -24,7 +24,7 @@
   <tc:page id="page">
     <!-- <tc:gridLayoutConstraint width="600px" height="600px"/> -->
 
-    <tc:sheet value="#{sheet.solarArray}" id="s1" columns="1fr 1fr" var="luminary" rows="20">
+    <tc:sheet value="#{sheetTestController.solarArray}" id="s1" columns="1fr 1fr" var="luminary" rows="20">
       <tc:column label="Name" id="name" sortable="true">
         <tc:out value="#{luminary.name}"/>
       </tc:column>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-reload.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-reload.xhtml
index 40945c6..df742ce 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-reload.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-reload.xhtml
@@ -34,7 +34,7 @@
     <tc:out value="After 3 seconds there must only a 304 (not modified) reload, so we expect 0 as value."/>
     <tc:out value="After 5 seconds there must be a normal reload, so we expect 2 as value."/>
 
-    <tc:sheet value="#{sheet.solarArray}" id="sheet" columns="1fr 1fr" var="luminary" rows="5">
+    <tc:sheet value="#{sheetTestController.solarArray}" id="sheet" columns="1fr 1fr" var="luminary" rows="5">
 
       <f:facet name="reload">
         <tc:reload frequency="2000" update="#{reload.onlyEven}" />
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-selector.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-selector.xhtml
index e9a58aa..e1c7bba 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-selector.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-selector.xhtml
@@ -62,7 +62,7 @@
 
     </tc:flowLayout>
 
-    <tc:sheet value="#{sheet.solarArray}" id="sheet" columns="auto 1fr 1fr" var="luminary" rows="20">
+    <tc:sheet value="#{sheetTestController.solarArray}" id="sheet" columns="auto 1fr 1fr" var="luminary" rows="20">
 
       <tc:columnSelector disabled="#{luminary.orbit == 'Sun'}"/>
 
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-simple.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-simple.xhtml
index 0e810d7..170abe7 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-simple.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-simple.xhtml
@@ -25,7 +25,7 @@
   <tc:page id="page">
     <!-- <tc:gridLayoutConstraint width="600px" height="600px"/> -->
 
-    <tc:sheet value="#{sheet.solarArray}" id="sheet" columns="1fr 1fr" var="luminary" rows="5">
+    <tc:sheet value="#{sheetTestController.solarArray}" id="sheet" columns="1fr 1fr" var="luminary" rows="5">
       <tc:column label="Name" id="name" sortable="true">
         <tc:out value="#{luminary.name}"/>
       </tc:column>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-unknown-row-count.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-unknown-row-count.xhtml
index d09d0ba..c7d9a0f 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-unknown-row-count.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/content/40-test/90000-attic/sheet/sheet-unknown-row-count.xhtml
@@ -28,7 +28,7 @@
       <tc:gridLayout rows="600px"/>
     </f:facet>
 
-    <tc:sheet value="#{sheet.undefined}" id="sheet" columns="1fr 1fr" var="luminary" rows="20">
+    <tc:sheet value="#{sheetTestController.undefined}" id="sheet" columns="1fr 1fr" var="luminary" rows="20">
       <tc:column label="Name" id="name" sortable="true">
         <tc:out value="#{luminary.name}"/>
       </tc:column>
diff --git a/tobago-example/tobago-example-demo/src/main/webapp/server-info.xhtml b/tobago-example/tobago-example-demo/src/main/webapp/server-info.xhtml
index c184d28..073ca8d 100644
--- a/tobago-example/tobago-example-demo/src/main/webapp/server-info.xhtml
+++ b/tobago-example/tobago-example-demo/src/main/webapp/server-info.xhtml
@@ -58,6 +58,13 @@
         <tc:selectBooleanCheckbox value="#{version.myfaces}" readonly="true" label="MyFaces"/>
       </tc:segmentLayout>
 
+      <tc:segmentLayout medium="6seg 6seg" large="4seg 4seg 4seg" extraLarge="3seg 3seg 3seg">
+        <tc:selectBooleanCheckbox value="#{facesContext.isProjectStage('Production')}" readonly="true" label="Production"/>
+        <tc:selectBooleanCheckbox value="#{facesContext.isProjectStage('Development')}" readonly="true" label="Development"/>
+        <tc:selectBooleanCheckbox value="#{facesContext.isProjectStage('SystemTest')}" readonly="true" label="SystemTest"/>
+        <tc:selectBooleanCheckbox value="#{facesContext.isProjectStage('UnitTest')}" readonly="true" label="UnitTest"/>
+      </tc:segmentLayout>
+
     </tc:section>
 
     <tc:section label="System Properties">

-- 
To stop receiving notification emails like this one, please contact
lofwyr@apache.org.