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:12 UTC

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

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.