changeset 5301:e6331b4daf15 8.0-b111

Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8.0/MASTER/jfx/rt
author jgodinez
date Tue, 08 Oct 2013 09:38:54 -0700
parents b3fa96512e75 ab9489903f7b
children 88d3bef80ffc 23a4702aac22 548a2cec1c7f a19b6f85332b
files .idea/RegionTests.iml modules/fxml/src/test/java/javafx/fxml/RT_23413Test.java modules/fxml/src/test/resources/javafx/fxml/rt_23413.fxml modules/graphics/src/main/java/com/sun/prism/tkal/Window.java tests/manual/RegionTests/src/main/java/region/RegionBackgroundFillUITest.java tests/manual/RegionTests/src/main/java/region/RegionBackgroundImageUITest.java tests/manual/RegionTests/src/main/java/region/RegionBorderImageUITest.java tests/manual/RegionTests/src/main/java/region/RegionBorderStrokeUITest.java tests/manual/RegionTests/src/main/java/region/RegionShapeUITest.java tests/manual/RegionTests/src/main/java/region/RegionUITestBase.java tests/manual/RegionTests/src/main/resources/region/BlackButton.png tests/manual/RegionTests/src/main/resources/region/WindowsButton.png tests/manual/RegionTests/src/main/resources/region/border.png tests/manual/RegionTests/src/main/resources/region/border@2x.png tests/manual/RegionTests/src/main/resources/region/checker.png tests/manual/RegionTests/src/main/resources/region/popover-no-arrow-empty.png tests/manual/RegionTests/src/main/resources/region/popover-no-arrow-empty@2x.png tests/manual/RegionTests/src/main/resources/region/test20x20.png tests/manual/RegionTests/src/main/resources/region/test20x20@2x.png tests/manual/RegionTests/src/main/resources/region/test48x48.png tests/manual/RegionTests/src/main/resources/region/test48x48@2x.png
diffstat 223 files changed, 11236 insertions(+), 6132 deletions(-) [+]
line wrap: on
line diff
--- a/.classpath	Thu Oct 03 16:58:53 2013 -0700
+++ b/.classpath	Tue Oct 08 09:38:54 2013 -0700
@@ -1,8 +1,5 @@
 <classpath>
   <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="src" path="tests/manual/RegionTests/src/main/java"/>
-  <classpathentry kind="src" path="tests/manual/RegionTests/src/main/resources"/>
-
   <classpathentry kind="src" exported="true" path="/web"/>
   <classpathentry kind="src" exported="true" path="/fxml"/>
   <classpathentry kind="src" exported="true" path="/fxpackager"/>
--- a/.idea/RegionTests.iml	Thu Oct 03 16:58:53 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$/tests/manual/RegionTests">
-      <sourceFolder url="file://$MODULE_DIR$/tests/manual/RegionTests/src/main/java" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/tests/manual/RegionTests/src/main/resources" isTestSource="false" />
-    </content>
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="base" />
-    <orderEntry type="module" module-name="graphics" />
-    <orderEntry type="module" module-name="controls" />
-    <orderEntry type="inheritedJdk" />
-  </component>
-</module>
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.idea/SystemTests.iml	Tue Oct 08 09:38:54 2013 -0700
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$/tests/system">
+      <sourceFolder url="file://$MODULE_DIR$/tests/system/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/tests/system/src/test/resources" isTestSource="true" />
+    </content>
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="base" />
+    <orderEntry type="module" module-name="buildSrc" />
+    <orderEntry type="module" module-name="controls" />
+    <orderEntry type="module" module-name="fxml" />
+    <orderEntry type="module" module-name="graphics" />
+    <orderEntry type="module" module-name="media" />
+    <orderEntry type="module" module-name="swing" />
+    <orderEntry type="module" module-name="swt" />
+    <orderEntry type="module" module-name="web" />
+    <orderEntry type="inheritedJdk" />
+  </component>
+</module>
+
--- a/.idea/modules.xml	Thu Oct 03 16:58:53 2013 -0700
+++ b/.idea/modules.xml	Tue Oct 08 09:38:54 2013 -0700
@@ -7,9 +7,9 @@
       <module fileurl="file://$PROJECT_DIR$/.idea/GraphicsPerformance.iml" filepath="$PROJECT_DIR$/.idea/GraphicsPerformance.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/Hello.iml" filepath="$PROJECT_DIR$/.idea/Hello.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/Modena.iml" filepath="$PROJECT_DIR$/.idea/Modena.iml" />
-      <module fileurl="file://$PROJECT_DIR$/.idea/RegionTests.iml" filepath="$PROJECT_DIR$/.idea/RegionTests.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/Shape3DToy.iml" filepath="$PROJECT_DIR$/.idea/Shape3DToy.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/StretchyGrid.iml" filepath="$PROJECT_DIR$/.idea/StretchyGrid.iml" />
+      <module fileurl="file://$PROJECT_DIR$/.idea/SystemTests.iml" filepath="$PROJECT_DIR$/.idea/SystemTests.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/base.iml" filepath="$PROJECT_DIR$/.idea/base.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/buildSrc.iml" filepath="$PROJECT_DIR$/.idea/buildSrc.iml" />
       <module fileurl="file://$PROJECT_DIR$/.idea/builders.iml" filepath="$PROJECT_DIR$/.idea/builders.iml" />
--- a/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/Description.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/Description.java	Tue Oct 08 09:38:54 2013 -0700
@@ -78,7 +78,7 @@
             relatedDocumentsList.getChildren().add(link);
         }
         for (final String classpath : sampleInfo.apiClasspaths) {
-            Hyperlink link = new Hyperlink(classpath);
+            Hyperlink link = new Hyperlink(classpath.replace('$', '.'));
             link.setOnAction(new EventHandler<ActionEvent>() {
                 @Override
                 public void handle(ActionEvent t) {
--- a/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/PlaygroundTabs.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/PlaygroundTabs.java	Tue Oct 08 09:38:54 2013 -0700
@@ -56,24 +56,18 @@
 import javafx.scene.chart.PieChart;
 import javafx.scene.chart.XYChart;
 import javafx.scene.control.CheckBox;
-import javafx.scene.control.CheckBoxBuilder;
 import javafx.scene.control.ChoiceBox;
 import javafx.scene.control.ComboBox;
 import javafx.scene.control.ContentDisplay;
 import javafx.scene.control.Label;
-import javafx.scene.control.LabelBuilder;
 import javafx.scene.control.OverrunStyle;
 import javafx.scene.control.ScrollPane;
-import javafx.scene.control.ScrollPaneBuilder;
 import javafx.scene.control.Separator;
 import javafx.scene.control.Slider;
-import javafx.scene.control.SliderBuilder;
-import javafx.scene.control.TabBuilder;
+import javafx.scene.control.Tab;
 import javafx.scene.control.TabPane;
 import javafx.scene.control.TextField;
-import javafx.scene.control.TextFieldBuilder;
 import javafx.scene.layout.GridPane;
-import javafx.scene.layout.GridPaneBuilder;
 import javafx.scene.layout.HBox;
 import javafx.scene.layout.Priority;
 import javafx.scene.layout.Region;
@@ -90,7 +84,10 @@
 
     PlaygroundTabs(final SamplePage samplePage) {
         this.samplePage = samplePage;
-        GridPane grid = GridPaneBuilder.create().hgap(SamplePage.INDENT).vgap(SamplePage.INDENT).padding(new Insets(SamplePage.INDENT)).build();
+        GridPane grid = new GridPane();
+        grid.setHgap(SamplePage.INDENT);
+        grid.setVgap(SamplePage.INDENT);
+        grid.setPadding(new Insets(SamplePage.INDENT));
         int rowIndex = 0;
         for (PlaygroundProperty prop : samplePage.sample.playgroundProperties) {
             try {
@@ -131,17 +128,13 @@
                     }
                 }
                 if (object instanceof XYChart && prop.propertyName.equals("data")) {
-                    getTabs().add(
-                            TabBuilder.create()
-                                .text("Data")
-                                .content(new XYDataVisualizer((XYChart) object))
-                                .build());
+                    Tab tab = new Tab("Data");
+                    tab.setContent(new XYDataVisualizer((XYChart) object));
+                    getTabs().add(tab);
                 } else if (object instanceof PieChart && prop.propertyName.equals("data")) {
-                    getTabs().add(
-                            TabBuilder.create()
-                                .text("Data")
-                                .content(new PieChartDataVisualizer((PieChart) object))
-                                .build());
+                    Tab tab = new Tab("Data");
+                    tab.setContent(new PieChartDataVisualizer((PieChart) object));
+                    getTabs().add(tab);
                 } else {
                     PropertyController controller = newPropertyController(prop, object, property);
                     if (controller != null) {
@@ -162,15 +155,11 @@
             }
         }
         getStyleClass().add("floating");
-        ScrollPane scrollPane = ScrollPaneBuilder.create()
-                .content(grid)
-                .build();
+        ScrollPane scrollPane = new ScrollPane(grid);
         scrollPane.getStyleClass().clear();
-        getTabs().add(
-                TabBuilder.create()
-                    .text("Properties")
-                    .content(scrollPane)
-                    .build());
+        Tab tab = new Tab("Properties");
+        tab.setContent(scrollPane);
+        getTabs().add(tab);
         setMinSize(100, 100);
     }
 
@@ -228,7 +217,11 @@
 
         public Region getLabel() {
             if (label == null) {
-                label = LabelBuilder.create().text(name).alignment(Pos.BASELINE_RIGHT).labelFor(getController()).textOverrun(OverrunStyle.ELLIPSIS).maxWidth(200).build();
+                label = new Label(name);
+                label.setAlignment(Pos.BASELINE_RIGHT);
+                label.setLabelFor(getController());
+                label.setTextOverrun(OverrunStyle.ELLIPSIS);
+                label.setMaxWidth(200);
             }
             return label;
         }
@@ -268,7 +261,7 @@
     private class DoublePropertyController extends PropertyController {
         public DoublePropertyController(PlaygroundProperty playgroundProperty, Object object, Property<Number> prop) {
             super(playgroundProperty);
-            Slider slider = SliderBuilder.create().build();
+            Slider slider = new Slider();
             slider.setMin(getProperty(playgroundProperty, "min", 0));
             slider.setMax(getProperty(playgroundProperty, "max", 100));
             double step = getProperty(playgroundProperty, "step", 0);
@@ -306,7 +299,7 @@
     private class IntegerPropertyController extends PropertyController {
         public IntegerPropertyController(PlaygroundProperty playgroundProperty, Object object, Property<Number> prop) {
             super(playgroundProperty);
-            Slider slider = SliderBuilder.create().build();
+            Slider slider = new Slider();
             slider.setMin(getProperty(playgroundProperty, "min", 0));
             slider.setMax(getProperty(playgroundProperty, "max", 100));
             slider.setSnapToTicks(true);
@@ -340,7 +333,7 @@
     private class BooleanPropertyController extends PropertyController {
         public BooleanPropertyController(PlaygroundProperty playgroundProperty, Object object, Property<Boolean> prop) {
             super(playgroundProperty);
-            CheckBox checkbox = CheckBoxBuilder.create().build();
+            CheckBox checkbox = new CheckBox();
             checkbox.selectedProperty().bindBidirectional(prop);
             setController(checkbox);
         }
@@ -350,7 +343,7 @@
         
         public StringPropertyController(PlaygroundProperty playgroundProperty, Object object, Property<String> prop) {
             super(playgroundProperty);
-            TextField textField = TextFieldBuilder.create().build();
+            TextField textField = new TextField();
             textField.textProperty().bindBidirectional(prop);
             setController(textField);
         }
--- a/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/SamplePage.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/SamplePage.java	Tue Oct 08 09:38:54 2013 -0700
@@ -107,7 +107,7 @@
     }
     
     String apiClassToUrl(String classname) {
-        String urlEnd = classname.replaceAll("\\.", "/");
+        String urlEnd = classname.replace('.', '/').replace('$', '.');
         if (classname.startsWith("javafx")) {
             return "http://download.java.net/jdk8/jfxdocs/"+urlEnd+".html";
         } else {
--- a/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/XYDataVisualizer.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/XYDataVisualizer.java	Tue Oct 08 09:38:54 2013 -0700
@@ -57,8 +57,8 @@
 import javafx.scene.chart.NumberAxis;
 import javafx.scene.chart.XYChart.Data;
 import javafx.scene.chart.XYChart.Series;
-import javafx.scene.control.ContextMenuBuilder;
-import javafx.scene.control.MenuItemBuilder;
+import javafx.scene.control.ContextMenu;
+import javafx.scene.control.MenuItem;
 import javafx.scene.control.TreeTableCell;
 import javafx.scene.control.TreeTableColumn;
 import javafx.scene.control.TreeTableColumn.CellDataFeatures;
@@ -72,6 +72,7 @@
 public class XYDataVisualizer<X, Y> extends TreeTableView<XYChartItem<X, Y>> {
     
     XYChart<X, Y> chart;
+    private Class<?> clzX;
     double minY, maxY;
 
     public XYDataVisualizer(final XYChart<X, Y> chart) {
@@ -101,7 +102,11 @@
 
             @Override
             public ObservableValue<String> call(CellDataFeatures<XYChartItem<X, Y>, String> p) {
-                return p.getValue().getValue().nameProperty();
+                if (p.getValue() != null) {
+                    return p.getValue().getValue().nameProperty();
+                } else {
+                    return null;
+                }
             }
         });
         nameColumn.setEditable(true);
@@ -113,29 +118,48 @@
 
             @Override
             public ObservableValue<X> call(CellDataFeatures<XYChartItem<X, Y>, X> p) {
-                return p.getValue().getValue().xValueProperty();
+                if (p.getValue() != null) {
+                    return p.getValue().getValue().xValueProperty();
+                } else {
+                    return null;
+                }
             }
         });
         xValueColumn.setCellFactory(new Callback<TreeTableColumn<XYChartItem<X, Y>, X>, TreeTableCell<XYChartItem<X, Y>, X>>() {
 
             @Override
             public TreeTableCell<XYChartItem<X, Y>, X> call(TreeTableColumn<XYChartItem<X, Y>, X> p) {
-                return new TextFieldTreeTableCell<>(new StringConverter<X>() {
+                return new TextFieldTreeTableCell<XYChartItem<X, Y>, X>() {
+                    {
+                        setConverter(new StringConverter<X>() {
+                            @Override
+                            public String toString(X t) {
+                                return t == null ? null : t.toString();
+                            }
 
-                    @Override
-                    public String toString(X t) {
-                        return t == null ? null : t.toString();
+                            @Override
+                            public X fromString(String string) {
+                                if (string == null) {
+                                    return null;
+                                }
+                                try {
+                                    if (clzX.isAssignableFrom(String.class)) {
+                                        return (X) string;
+                                    } else if (clzX.isAssignableFrom(Double.class)) {
+                                        return (X) new Double(string);
+                                    } else if (clzX.isAssignableFrom(Integer.class)) {
+                                        return (X) new Integer(string);
+                                    }
+                                } catch (NumberFormatException ex) {
+                                    new IllegalArgumentException("Failed to parse " + string + " to type " + clzX, ex).printStackTrace(System.err);
+                                    return getItem();
+                                }
+                                new IllegalStateException("This valueX type is not supported: " + clzX).printStackTrace(System.err);
+                                return getItem();
+                            }
+                        });
                     }
-
-                    @Override
-                    public X fromString(String string) {
-                        if (string == null) {
-                            return null;
-                        }
-                        X x = (X) new Double(string);
-                        return x;
-                    }
-                });
+                };
             }
         });
         xValueColumn.setEditable(true);
@@ -147,7 +171,11 @@
 
             @Override
             public ObservableValue<Y> call(CellDataFeatures<XYChartItem<X, Y>, Y> p) {
-                return p.getValue().getValue().yValueProperty();
+                if (p.getValue() != null) {
+                    return p.getValue().getValue().yValueProperty();
+                } else {
+                    return null;
+                }
             }
         });
         yValueColumn.setCellFactory(new Callback<TreeTableColumn<XYChartItem<X, Y>, Y>, TreeTableCell<XYChartItem<X, Y>, Y>>() {
@@ -176,17 +204,20 @@
         yValueColumn.setSortable(false);
         yValueColumn.setMinWidth(50);
         
-        Class<XYChartItem<X, Y>> clz = (Class<XYChartItem<X, Y>>) root.getClass();
         TreeTableColumn<XYChartItem<X, Y>, Object> extraValueColumn = new TreeTableColumn<>("Extra Value");
         extraValueColumn.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<XYChartItem<X, Y>, Object>, ObservableValue<Object>>() {
             @Override
             public ObservableValue<Object> call(CellDataFeatures<XYChartItem<X, Y>, Object> p) {
-                return p.getValue().getValue().extraValueProperty();
+                if (p.getValue() != null) {
+                    return p.getValue().getValue().extraValueProperty();
+                } else {
+                    return null;
+                }
             }
         });
         extraValueColumn.setMinWidth(100);
         extraValueColumn.setSortable(false);
-
+        
         getColumns().setAll(nameColumn, xValueColumn, yValueColumn, extraValueColumn);
         
         setOnContextMenuRequested(new EventHandler<ContextMenuEvent>() {
@@ -213,106 +244,104 @@
                     }
                 }
             }
-        });    
-        
-        setContextMenu(ContextMenuBuilder.create()
-                .items(
-                    MenuItemBuilder.create()
-                        .text("Insert data item")
-                        .disable(!isEditable())
-                        .onAction(new EventHandler<ActionEvent>() {
+        });
 
-                            @Override
-                            public void handle(ActionEvent t) {
-                                TreeItem<XYChartItem<X, Y>> selectedItem = getSelectionModel().getSelectedItem();
-                                if (selectedItem == null || selectedItem.getParent() == null) {
-                                    return;
-                                }
-                                Object value = selectedItem.getValue().getValue();
-                                Object parentValue = selectedItem.getParent().getValue().getValue();
-                                if (value instanceof Series) {
-                                    Series series = (Series) value;
-                                    insertItem(series.getData());
-                                } else if (parentValue instanceof Series) {
-                                    Series series = (Series) parentValue;
-                                    insertItem(series.getData().indexOf(value), series.getData());
-                                }
-                            }
-                        })
-                        .build(),
-                    MenuItemBuilder.create()
-                        .text("Insert Series")
-                        .disable(!isEditable())
-                        .onAction(new EventHandler<ActionEvent>() {
-                            
+        MenuItem insertDataItemMenuItem = new MenuItem("Insert data item");
+        insertDataItemMenuItem.setDisable(!isEditable());
+        insertDataItemMenuItem.setOnAction(new EventHandler<ActionEvent>() {
 
-                            @Override
-                            public void handle(ActionEvent t) {
-                                TreeItem<XYChartItem<X, Y>> selectedItem = getSelectionModel().getSelectedItem();
-                                if (selectedItem == null) {
-                                    return;
-                                }
-                                Object value = selectedItem.getValue().getValue();
-                                if (value instanceof ObservableList) {
-                                    ObservableList parentList = (ObservableList) value;
-                                    insertSeries(parentList.size(), parentList);
-                                } else {
-                                    Object parentValue = selectedItem.getParent().getValue().getValue();
-                                    if (parentValue instanceof ObservableList) {
-                                        ObservableList parentList = (ObservableList) parentValue;
+            @Override
+            public void handle(ActionEvent t) {
+                TreeItem<XYChartItem<X, Y>> selectedItem = getSelectionModel().getSelectedItem();
+                if (selectedItem == null || selectedItem.getParent() == null) {
+                    return;
+                }
+                Object value = selectedItem.getValue().getValue();
+                Object parentValue = selectedItem.getParent().getValue().getValue();
+                if (value instanceof Series) {
+                    Series series = (Series) value;
+                    insertItem(series.getData());
+                } else if (parentValue instanceof Series) {
+                    Series series = (Series) parentValue;
+                    insertItem(series.getData().indexOf(value), series.getData());
+                }
+            }
+        });
 
-                                        insertSeries(parentList.indexOf(value), parentList);
-                                    }
-                                }
-                            }
-                        })
-                        .build(),
-                    MenuItemBuilder.create()
-                        .text("Delete item")
-                        .disable(!isEditable())
-                        .onAction(new EventHandler<ActionEvent>() {
+        MenuItem insertSeriesMenuitem = new MenuItem("Insert Series");
+        insertSeriesMenuitem.setDisable(!isEditable());
+        insertSeriesMenuitem.setOnAction(new EventHandler<ActionEvent>() {
 
-                            @Override
-                            public void handle(ActionEvent t) {
-                                TreeItem<XYChartItem<X, Y>> selectedItem = getSelectionModel().getSelectedItem();
-                                if (selectedItem == null) {
-                                    return;
-                                }
-                                Object value = selectedItem.getValue().getValue();
-                                Object parentValue = selectedItem.getParent().getValue().getValue();
-                                if (parentValue instanceof ObservableList) {
-                                    ((ObservableList) parentValue).remove(value);
-                                } else if (parentValue instanceof Series) {
-                                    ((Series) parentValue).getData().remove(value);
-                                }
-                            }
-                        })
-                        .build(),
-                    MenuItemBuilder.create()
-                        .text("Remove all data")
-                        .disable(!isEditable())
-                        .onAction(new EventHandler<ActionEvent>() {
+            @Override
+            public void handle(ActionEvent t) {
+                TreeItem<XYChartItem<X, Y>> selectedItem = getSelectionModel().getSelectedItem();
+                if (selectedItem == null) {
+                    return;
+                }
+                Object value = selectedItem.getValue().getValue();
+                if (value instanceof ObservableList) {
+                    ObservableList parentList = (ObservableList) value;
+                    insertSeries(parentList.size(), parentList);
+                } else {
+                    Object parentValue = selectedItem.getParent().getValue().getValue();
+                    if (parentValue instanceof ObservableList) {
+                        ObservableList parentList = (ObservableList) parentValue;
 
-                            @Override
-                            public void handle(ActionEvent t) {
-                                chart.getData().clear();
+                        insertSeries(parentList.indexOf(value), parentList);
+                    }
+                }
+            }
+        });
+
+        MenuItem deleteItemMenuItem = new MenuItem("Delete item");
+        deleteItemMenuItem.setDisable(!isEditable());
+        deleteItemMenuItem.setOnAction(new EventHandler<ActionEvent>() {
+
+            @Override
+            public void handle(ActionEvent t) {
+                TreeItem<XYChartItem<X, Y>> selectedItem = getSelectionModel().getSelectedItem();
+                if (selectedItem == null) {
+                    return;
+                }
+                Object value = selectedItem.getValue().getValue();
+                Object parentValue = selectedItem.getParent().getValue().getValue();
+                if (parentValue instanceof ObservableList) {
+                    ((ObservableList) parentValue).remove(value);
+                } else if (parentValue instanceof Series) {
+                    ((Series) parentValue).getData().remove(value);
+                }
+            }
+        });
+
+        MenuItem removeAllDataMenuItem = new MenuItem("Remove all data");
+        removeAllDataMenuItem.setDisable(!isEditable());
+        removeAllDataMenuItem.setOnAction(new EventHandler<ActionEvent>() {
+
+            @Override
+            public void handle(ActionEvent t) {
+                chart.getData().clear();
 //                                chart.setData(null);
-                            }
-                        })
-                        .build(),
-                    MenuItemBuilder.create()
-                        .text("Set new data")
-                        .disable(!isEditable())
-                        .onAction(new EventHandler<ActionEvent>() {
+            }
+        });
 
-                            @Override
-                            public void handle(ActionEvent t) {
-                                chart.setData(generateData());
-                            }
-                        })
-                        .build()
-                )
-                .build());
+        MenuItem setNewDataMenuItem = new MenuItem("Set new data");
+        setNewDataMenuItem.setDisable(!isEditable());
+        setNewDataMenuItem.setOnAction(new EventHandler<ActionEvent>() {
+
+            @Override
+            public void handle(ActionEvent t) {
+                chart.setData(generateData());
+            }
+        });
+
+        ContextMenu contextMenu = new ContextMenu(
+                insertDataItemMenuItem,
+                insertSeriesMenuitem,
+                deleteItemMenuItem,
+                removeAllDataMenuItem,
+                setNewDataMenuItem);
+
+        setContextMenu(contextMenu);
     }
     
     private ObservableList generateData() {
@@ -416,6 +445,10 @@
         boolean editable = true;
         for (Series<X, Y> series : chart.getData()) {
             for (XYChart.Data<X, Y> data : series.getData()) {
+                X x = data.getXValue();
+                if (x != null) {
+                    clzX = x.getClass();
+                }
                 Y y = data.getYValue();
                 if (y != null) {
                     if (chart.getYAxis() instanceof NumberAxis) {
--- a/apps/samples/Ensemble8/src/compiletime/java/ensemble/compiletime/BuildSamplesList.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/compiletime/java/ensemble/compiletime/BuildSamplesList.java	Tue Oct 08 09:38:54 2013 -0700
@@ -76,7 +76,7 @@
         // write
         PrintWriter fout = null;
         try {
-            fout = new PrintWriter(new FileWriter(samplesSourceFile));
+            fout = new PrintWriter(samplesSourceFile, "UTF-8");
             fout.println("package ensemble.generated;");
             fout.println("import ensemble.*;");
             fout.println("import ensemble.playground.PlaygroundProperty;");
@@ -101,7 +101,7 @@
             fout.println("    private static final HashMap<String,SampleInfo[]> DOCS_URL_TO_SAMPLE = new HashMap<String,SampleInfo[]>("+DOCS_TO_SAMPLE_MAP.size()+");");
             fout.println("    static {");
             for (Map.Entry<String,Set<String>> entry: DOCS_TO_SAMPLE_MAP.entrySet()) {
-                fout.println("        DOCS_URL_TO_SAMPLE.put(\""+entry.getKey()+"\","+variableNameArrayToCode("SampleInfo",entry.getValue())+");");
+                fout.println("        DOCS_URL_TO_SAMPLE.put(\""+entry.getKey().replace('$', '.')+"\","+variableNameArrayToCode("SampleInfo",entry.getValue())+");");
             }
             fout.println("    }");
             fout.println("    public static SampleInfo[] getSamplesForDoc(String docUrl) {");
@@ -298,7 +298,7 @@
         try {
             // load src into String
             in = new FileInputStream(file);
-            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+            BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
             String line;
             while((line = reader.readLine()) != null) {
                 builder.append(line);
--- a/apps/samples/Ensemble8/src/generated/java/ensemble/generated/Samples.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/generated/java/ensemble/generated/Samples.java	Tue Oct 08 09:38:54 2013 -0700
@@ -1,320 +1,325 @@
-package ensemble.generated;
-import ensemble.*;
-import ensemble.playground.PlaygroundProperty;
-import javafx.application.ConditionalFeature;
-import java.util.HashMap;
-public class Samples{
-    private static final SampleInfo SAMPLE_0 = new SampleInfo("Interpolator","A sample that shows various types of interpolation between key frames in a timeline. There are five circles, each animated with a different interpolation method. The Linear interpolator is the default. Use the controls to reduce opacity to zero for some circles to compare with others, or change circle color to distinguish between individual interpolators. ","/Animation/Interpolator","/ensemble/samples/animation/interpolator","ensemble.samples.animation.interpolator.InterpolatorApp","/ensemble/samples/animation/interpolator/preview.png",new String[]{"/ensemble/samples/animation/interpolator/InterpolatorApp.java",},new String[]{"javafx.animation.Interpolator","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/animation/interpolator/InterpolatorApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"-","name","LINEAR"),new PlaygroundProperty("circle1","opacity","min","0","max","1"),new PlaygroundProperty("circle1","fill"),new PlaygroundProperty(null,"-","name","EASE_BOTH"),new PlaygroundProperty("circle2","opacity","min","0","max","1"),new PlaygroundProperty("circle2","fill"),new PlaygroundProperty(null,"-","name","EASE_IN"),new PlaygroundProperty("circle3","opacity","min","0","max","1"),new PlaygroundProperty("circle3","fill"),new PlaygroundProperty(null,"-","name","EASE_OUT"),new PlaygroundProperty("circle4","opacity","min","0","max","1"),new PlaygroundProperty("circle4","fill"),new PlaygroundProperty(null,"-","name","SPLINE"),new PlaygroundProperty("circle5","opacity","min","0","max","1"),new PlaygroundProperty("circle5","fill"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_1 = new SampleInfo("Timeline","A sample that demonstrates the basics of timeline creation. ","/Animation/Timeline/Timeline","/ensemble/samples/animation/timeline/timeline","ensemble.samples.animation.timeline.timeline.TimelineApp","/ensemble/samples/animation/timeline/timeline/preview.png",new String[]{"/ensemble/samples/animation/timeline/timeline/TimelineApp.java",},new String[]{"javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/animation/timeline/timeline/TimelineApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_2 = new SampleInfo("Timeline Events","A sample that demonstrates events triggered during time line play. The circle changes its radius in a linear fashion during each key frame and randomly jumps to a new location along the x coordinate at the end of the key frame. ","/Animation/Timeline/Timeline Events","/ensemble/samples/animation/timeline/timelineevents","ensemble.samples.animation.timeline.timelineevents.TimelineEventsApp","/ensemble/samples/animation/timeline/timelineevents/preview.png",new String[]{"/ensemble/samples/animation/timeline/timelineevents/TimelineEventsApp.java",},new String[]{"javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration","javafx.event.ActionEvent","javafx.event.EventHandler",},new String[]{},new String[]{},"/ensemble/samples/animation/timeline/timelineevents/TimelineEventsApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_3 = new SampleInfo("Fade Transition","A sample in which the opacity of a node changes over a given time. ","/Animation/Transitions/Fade Transition","/ensemble/samples/animation/transitions/fadetransition","ensemble.samples.animation.transitions.fadetransition.FadeTransitionApp","/ensemble/samples/animation/transitions/fadetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/fadetransition/FadeTransitionApp.java",},new String[]{"javafx.animation.FadeTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/fadetransition/FadeTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_4 = new SampleInfo("Fill Transition","A sample in which the filling of a shape changes over a given time. ","/Animation/Transitions/Fill Transition","/ensemble/samples/animation/transitions/filltransition","ensemble.samples.animation.transitions.filltransition.FillTransitionApp","/ensemble/samples/animation/transitions/filltransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/filltransition/FillTransitionApp.java",},new String[]{"javafx.animation.FillTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/filltransition/FillTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_5 = new SampleInfo("Parallel Transition","A sample in which various transitions are executed in parallel. ","/Animation/Transitions/Parallel Transition","/ensemble/samples/animation/transitions/paralleltransition","ensemble.samples.animation.transitions.paralleltransition.ParallelTransitionApp","/ensemble/samples/animation/transitions/paralleltransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/paralleltransition/ParallelTransitionApp.java",},new String[]{"javafx.animation.ParallelTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/paralleltransition/ParallelTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_6 = new SampleInfo("Path Transition","A sample in which a node moves along a path from end to end over a given time. ","/Animation/Transitions/Path Transition","/ensemble/samples/animation/transitions/pathtransition","ensemble.samples.animation.transitions.pathtransition.PathTransitionApp","/ensemble/samples/animation/transitions/pathtransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/pathtransition/PathTransitionApp.java",},new String[]{"javafx.animation.PathTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/pathtransition/PathTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_7 = new SampleInfo("Pause Transition","A sample in which a node pauses over a given time. ","/Animation/Transitions/Pause Transition","/ensemble/samples/animation/transitions/pausetransition","ensemble.samples.animation.transitions.pausetransition.PauseTransitionApp","/ensemble/samples/animation/transitions/pausetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/pausetransition/PauseTransitionApp.java",},new String[]{"javafx.animation.PauseTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/pausetransition/PauseTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_8 = new SampleInfo("Rotate Transition","A sample in which a node rotates around its center over a given time. ","/Animation/Transitions/Rotate Transition","/ensemble/samples/animation/transitions/rotatetransition","ensemble.samples.animation.transitions.rotatetransition.RotateTransitionApp","/ensemble/samples/animation/transitions/rotatetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/rotatetransition/RotateTransitionApp.java",},new String[]{"javafx.animation.RotateTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/rotatetransition/RotateTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_9 = new SampleInfo("Scale Transition","A sample in which a node scales larger and smaller over a given time. ","/Animation/Transitions/Scale Transition","/ensemble/samples/animation/transitions/scaletransition","ensemble.samples.animation.transitions.scaletransition.ScaleTransitionApp","/ensemble/samples/animation/transitions/scaletransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/scaletransition/ScaleTransitionApp.java",},new String[]{"javafx.animation.ScaleTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/scaletransition/ScaleTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_10 = new SampleInfo("Sequential Transition","A sample in which various transitions are executed sequentially. ","/Animation/Transitions/Sequential Transition","/ensemble/samples/animation/transitions/sequentialtransition","ensemble.samples.animation.transitions.sequentialtransition.SequentialTransitionApp","/ensemble/samples/animation/transitions/sequentialtransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/sequentialtransition/SequentialTransitionApp.java",},new String[]{"javafx.animation.SequentialTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/sequentialtransition/SequentialTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_11 = new SampleInfo("Stroke Transition","A sample in which the stroke color of a shape changes over a given time. ","/Animation/Transitions/Stroke Transition","/ensemble/samples/animation/transitions/stroketransition","ensemble.samples.animation.transitions.stroketransition.StrokeTransitionApp","/ensemble/samples/animation/transitions/stroketransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/stroketransition/StrokeTransitionApp.java",},new String[]{"javafx.animation.StrokeTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/stroketransition/StrokeTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_12 = new SampleInfo("Translate Transition","A sample in which a node moves from one location to another over a given time. ","/Animation/Transitions/Translate Transition","/ensemble/samples/animation/transitions/translatetransition","ensemble.samples.animation.transitions.translatetransition.TranslateTransitionApp","/ensemble/samples/animation/transitions/translatetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/translatetransition/TranslateTransitionApp.java",},new String[]{"javafx.animation.TranslateTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition",},"/ensemble/samples/animation/transitions/translatetransition/TranslateTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_13 = new SampleInfo("Fireworks","A sample that demonstrates how to draw and paint shapes, apply visual effects, blend colors in overlapping objects, and animate objects. ","/Canvas/Fireworks","/ensemble/samples/canvas/fireworks","ensemble.samples.canvas.fireworks.FireworksApp","/ensemble/samples/canvas/fireworks/preview.png",new String[]{"/ensemble/samples/canvas/fireworks/FireworksApp.java","/ensemble/samples/canvas/fireworks/Particle.java","/ensemble/samples/shared-resources/sf.jpg","/ensemble/samples/canvas/fireworks/SanFranciscoFireworks.java",},new String[]{"javafx.scene.canvas.Canvas","javafx.scene.canvas.GraphicsContext","javafx.scene.effect.BlendMode","javafx.scene.effect.BoxBlur","javafx.scene.shape.Circle","javafx.scene.Group","javafx.scene.paint.LinearGradient","javafx.animation.Timeline",},new String[]{},new String[]{},"/ensemble/samples/canvas/fireworks/FireworksApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_14 = new SampleInfo("Audio Area Chart","An area chart that shows audio spectrum of a music file being played. ","/Charts/Area/Audio Area Chart","/ensemble/samples/charts/area/audio","ensemble.samples.charts.area.audio.AudioAreaChartApp","/ensemble/samples/charts/area/audio/preview.png",new String[]{"/ensemble/samples/charts/area/audio/AudioAreaChartApp.java","/ensemble/samples/charts/area/audio/AudioAreaChart.css",},new String[]{"javafx.scene.chart.AreaChart","javafx.scene.chart.Chart","javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart","javafx.scene.media.AudioSpectrumListener","javafx.scene.media.Media","javafx.scene.media.MediaPlayer",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{},"/ensemble/samples/charts/area/audio/AudioAreaChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_15 = new SampleInfo("Area Chart","A chart that fills in the area between a line of data points and the axes. Good for comparing accumulated totals over time. ","/Charts/Area/Area Chart","/ensemble/samples/charts/area/chart","ensemble.samples.charts.area.chart.AreaChartApp","/ensemble/samples/charts/area/chart/preview.png",new String[]{"/ensemble/samples/charts/area/chart/AreaChartApp.java",},new String[]{"javafx.scene.chart.AreaChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Line/Line Chart","/Charts/Scatter/Scatter Chart",},"/ensemble/samples/charts/area/chart/AreaChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","upperBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","10","step","0.5"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-10","max","10","step","1"),new PlaygroundProperty("yAxis","upperBound","min","-10","max","10","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","10","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_16 = new SampleInfo("Curve-Fitted Area Chart","An area chart that demonstrates curve fitting. Styling is done through CSS. ","/Charts/Area/Curve-Fitted Area Chart","/ensemble/samples/charts/area/curvefitted","ensemble.samples.charts.area.curvefitted.CurveFittedAreaChartApp","/ensemble/samples/charts/area/curvefitted/preview.png",new String[]{"/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChart.java","/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChartApp.java","/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChart.css",},new String[]{"javafx.scene.chart.AreaChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart",},"/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10000","max","10000","step","1"),new PlaygroundProperty("xAxis","upperBound","min","-10000","max","10000","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","10000","step","1"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-1000","max","1000","step","1"),new PlaygroundProperty("yAxis","upperBound","min","-1000","max","2000","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","1000","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_17 = new SampleInfo("Stacked Area Chart","A sample that displays data in a stacked area chart. ","/Charts/Area/Stacked Area Chart","/ensemble/samples/charts/area/stacked","ensemble.samples.charts.area.stacked.StackedAreaChartApp","/ensemble/samples/charts/area/stacked/preview.png",new String[]{"/ensemble/samples/charts/area/stacked/StackedAreaChartApp.java",},new String[]{"javafx.scene.chart.StackedAreaChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart",},"/ensemble/samples/charts/area/stacked/StackedAreaChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","upperBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","10"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-10","max","20","step","1"),new PlaygroundProperty("yAxis","upperBound","min","-10","max","40","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","10"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_18 = new SampleInfo("Audio Bar Chart","Bar chart that shows audio spectrum of a music file being played. ","/Charts/Bar/Audio Bar Chart","/ensemble/samples/charts/bar/audio","ensemble.samples.charts.bar.audio.AudioBarChartApp","/ensemble/samples/charts/bar/audio/preview.png",new String[]{"/ensemble/samples/charts/bar/audio/AudioBarChartApp.java","/ensemble/samples/charts/bar/audio/AudioBarChart.css",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.Chart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart","javafx.scene.media.AudioSpectrumListener","javafx.scene.media.Media","javafx.scene.media.MediaPlayer",},new String[]{},new String[]{},"/ensemble/samples/charts/bar/audio/AudioBarChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    private static final SampleInfo SAMPLE_19 = new SampleInfo("Bar Chart","A chart that displays rectangular bars with heights indicating data values for categories. Used for displaying information when at least one axis has discontinuous or discrete data. ","/Charts/Bar/Bar Chart","/ensemble/samples/charts/bar/chart","ensemble.samples.charts.bar.chart.BarChartApp","/ensemble/samples/charts/bar/chart/preview.png",new String[]{"/ensemble/samples/charts/bar/chart/BarChartApp.java",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart","/Charts/Line/Line Chart","/Charts/Scatter/Scatter Chart",},"/ensemble/samples/charts/bar/chart/BarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-1000","max","3000","step","1"),new PlaygroundProperty("yAxis","upperBound","max","4000","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","3000","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_20 = new SampleInfo("Horizontal Bar Chart","Horizontal bar chart with a variety of actions and settable properties for experimenting with the charts features. ","/Charts/Bar/Horizontal Bar Chart","/ensemble/samples/charts/bar/horizontal","ensemble.samples.charts.bar.horizontal.HorizontalBarChartApp","/ensemble/samples/charts/bar/horizontal/preview.png",new String[]{"/ensemble/samples/charts/bar/horizontal/HorizontalBarChartApp.java",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{},"/ensemble/samples/charts/bar/horizontal/HorizontalBarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-1000","max","3000","step","1"),new PlaygroundProperty("xAxis","upperBound","max","4000","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","3000","step","1"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","gapStartAndEnd"),new PlaygroundProperty("yAxis","startMargin"),new PlaygroundProperty("yAxis","endMargin"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_21 = new SampleInfo("Image Bar Chart","A bar chart that uses CSS to display stacks of car images to indicate data values for categories. ","/Charts/Bar/Image Bar Chart","/ensemble/samples/charts/bar/image","ensemble.samples.charts.bar.image.ImageBarChartApp","/ensemble/samples/charts/bar/image/preview.png",new String[]{"/ensemble/samples/charts/bar/image/ImageBarChartApp.java","/ensemble/samples/charts/bar/image/ImageBarChart.css","/ensemble/samples/charts/bar/image/sedan-s.png","/ensemble/samples/charts/bar/image/suv-s.png","/ensemble/samples/charts/bar/image/truck-s.png","/ensemble/samples/charts/bar/image/van-s.png",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{},"/ensemble/samples/charts/bar/image/ImageBarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","max","0","step","1"),new PlaygroundProperty("yAxis","upperBound","max","200","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_22 = new SampleInfo("Stacked Bar Chart","A sample that displays data in a stacked bar chart. ","/Charts/Bar/Stacked Bar Chart","/ensemble/samples/charts/bar/stacked","ensemble.samples.charts.bar.stacked.StackedBarChartApp","/ensemble/samples/charts/bar/stacked/preview.png",new String[]{"/ensemble/samples/charts/bar/stacked/StackedBarChartApp.java",},new String[]{"javafx.scene.chart.StackedBarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{"/Charts/Bar/Bar Chart",},"/ensemble/samples/charts/bar/stacked/StackedBarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-3000","max","0","step","1"),new PlaygroundProperty("yAxis","upperBound","min","0","max","8000","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","5000","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_23 = new SampleInfo("Bubble Chart","An advanced bubble chart with a variety of actions and settable properties. ","/Charts/Bubble/Bubble Chart","/ensemble/samples/charts/bubble/chart","ensemble.samples.charts.bubble.chart.BubbleChartApp","/ensemble/samples/charts/bubble/chart/preview.png",new String[]{"/ensemble/samples/charts/bubble/chart/BubbleChartApp.java",},new String[]{"javafx.scene.chart.BubbleChart","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{"/Charts/Scatter/Advanced Scatter Chart",},"/ensemble/samples/charts/bubble/chart/BubbleChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-100","max","100","step","1"),new PlaygroundProperty("xAxis","upperBound","min","0","max","200","step","1"),new PlaygroundProperty("xAxis","tickUnit","step","1"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","max","100","step","1"),new PlaygroundProperty("yAxis","upperBound","min","0","max","200","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_24 = new SampleInfo("Candle Stick Chart","A custom candlestick chart. This sample shows how to extend XYChart base class to create your own two axis chart type. ","/Charts/Custom/Candle Stick Chart","/ensemble/samples/charts/custom/candlestick","ensemble.samples.charts.custom.candlestick.CandleStickChartApp","/ensemble/samples/charts/custom/candlestick/preview.png",new String[]{"/ensemble/samples/charts/custom/candlestick/Candle.java","/ensemble/samples/charts/custom/candlestick/CandleStickChart.java","/ensemble/samples/charts/custom/candlestick/CandleStickChartApp.java","/ensemble/samples/charts/custom/candlestick/CandleStickExtraValues.java","/ensemble/samples/charts/custom/candlestick/TooltipContent.java","/ensemble/samples/charts/custom/candlestick/CandleStickChart.css",},new String[]{"javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Scatter/Scatter Chart","/Charts/Scatter/Advanced Scatter Chart",},"/ensemble/samples/charts/custom/candlestick/CandleStickChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-100","max","100","step","1"),new PlaygroundProperty("xAxis","upperBound","step","1"),new PlaygroundProperty("xAxis","tickUnit","step","0.5"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","max","30","step","1"),new PlaygroundProperty("yAxis","upperBound","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","0.5"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_25 = new SampleInfo("Category Line Chart","A line chart demonstrating a CategoryAxis implementation. ","/Charts/Line/Category Line Chart","/ensemble/samples/charts/line/category","ensemble.samples.charts.line.category.CategoryLineChartApp","/ensemble/samples/charts/line/category/preview.png",new String[]{"/ensemble/samples/charts/line/category/CategoryLineChartApp.java",},new String[]{"javafx.scene.chart.CategoryAxis","javafx.scene.chart.LineChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{},"/ensemble/samples/charts/line/category/CategoryLineChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","step","1"),new PlaygroundProperty("yAxis","upperBound","max","200","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_26 = new SampleInfo("Line Chart","A chart in which lines connect a series of data points. Useful for viewing data trends over time. ","/Charts/Line/Line Chart","/ensemble/samples/charts/line/chart","ensemble.samples.charts.line.chart.LineChartApp","/ensemble/samples/charts/line/chart/preview.png",new String[]{"/ensemble/samples/charts/line/chart/LineChartApp.java",},new String[]{"javafx.scene.chart.LineChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart","/Charts/Scatter/Scatter Chart",},"/ensemble/samples/charts/line/chart/LineChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","0.2"),new PlaygroundProperty("xAxis","upperBound","max","10","step","0.2"),new PlaygroundProperty("xAxis","tickUnit","max","3","step","0.2"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-5","max","5","step","0.2"),new PlaygroundProperty("yAxis","upperBound","max","10","step","0.2"),new PlaygroundProperty("yAxis","tickUnit","max","3","step","0.2"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_27 = new SampleInfo("Stock Line Chart","A simulated stock line chart. ","/Charts/Line/Stock Line Chart","/ensemble/samples/charts/line/stock","ensemble.samples.charts.line.stock.StockLineChartApp","/ensemble/samples/charts/line/stock/preview.png",new String[]{"/ensemble/samples/charts/line/stock/StockLineChartApp.java","/ensemble/samples/charts/line/stock/StockLineChart.css",},new String[]{"javafx.scene.chart.LineChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{},"/ensemble/samples/charts/line/stock/StockLineChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_28 = new SampleInfo("Pie Chart","A circular chart divided into segments. The value of each segment represents a proportion of the total. ","/Charts/Pie/Pie Chart","/ensemble/samples/charts/pie/chart","ensemble.samples.charts.pie.chart.PieChartApp","/ensemble/samples/charts/pie/chart/preview.png",new String[]{"/ensemble/samples/charts/pie/chart/PieChartApp.java",},new String[]{"javafx.scene.chart.PieChart",},new String[]{},new String[]{},"/ensemble/samples/charts/pie/chart/PieChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty("chart","clockwise"),new PlaygroundProperty("chart","labelLineLength"),new PlaygroundProperty("chart","labelsVisible"),new PlaygroundProperty("chart","startAngle","max","360"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_29 = new SampleInfo("Drilldown Pie Chart","A pie chart that provides the ability to drill down through data. Selecting a segment in the initial pie chart causes the pie chart to display detailed data for the selected segment. ","/Charts/Pie/Drilldown Pie Chart","/ensemble/samples/charts/pie/drilldown","ensemble.samples.charts.pie.drilldown.DrilldownPieChartApp","/ensemble/samples/charts/pie/drilldown/preview.png",new String[]{"/ensemble/samples/charts/pie/drilldown/DrilldownPieChartApp.java","/ensemble/samples/charts/pie/drilldown/DrilldownChart.css",},new String[]{"javafx.event.EventHandler","javafx.scene.chart.PieChart","javafx.scene.input.MouseEvent",},new String[]{},new String[]{},"/ensemble/samples/charts/pie/drilldown/DrilldownPieChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_30 = new SampleInfo("Live Scatter Chart","A live scatter chart. ","/Charts/Scatter/Live Scatter Chart","/ensemble/samples/charts/scatter/animated","ensemble.samples.charts.scatter.animated.LiveScatterChartApp","/ensemble/samples/charts/scatter/animated/preview.png",new String[]{"/ensemble/samples/charts/scatter/animated/LiveScatterChartApp.java","/ensemble/samples/charts/scatter/animated/LiveScatterChart.css",},new String[]{"javafx.scene.chart.ScatterChart","javafx.scene.chart.NumberAxis","javafx.animation.Timeline","javafx.animation.SequentialTransition",},new String[]{},new String[]{},"/ensemble/samples/charts/scatter/animated/LiveScatterChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_31 = new SampleInfo("Scatter Chart","A chart that displays plotted symbols for a series of data points. Useful for viewing the distribution of data to see if there is any pattern, indicating a correlation. ","/Charts/Scatter/Scatter Chart","/ensemble/samples/charts/scatter/chart","ensemble.samples.charts.scatter.chart.ScatterChartApp","/ensemble/samples/charts/scatter/chart/preview.png",new String[]{"/ensemble/samples/charts/scatter/chart/ScatterChartApp.java",},new String[]{"javafx.scene.chart.ScatterChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Line/Line Chart","/Charts/Area/Area Chart",},"/ensemble/samples/charts/scatter/chart/ScatterChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","0.25"),new PlaygroundProperty("xAxis","upperBound","max","20","step","0.25"),new PlaygroundProperty("xAxis","tickUnit","max","10","step","0.25"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-5","max","5","step","0.25"),new PlaygroundProperty("yAxis","upperBound","max","10","step","0.25"),new PlaygroundProperty("yAxis","tickUnit","max","10","step","0.25"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_32 = new SampleInfo("Service","A sample showing use of a Service to retrieve data in a background thread. Selecting the Refresh button restarts the Service. ","/Concurrency/Service","/ensemble/samples/concurrency/service","ensemble.samples.concurrency.service.ServiceApp","/ensemble/samples/concurrency/service/preview.png",new String[]{"/ensemble/samples/concurrency/service/DailySales.java","/ensemble/samples/concurrency/service/GetDailySalesService.java","/ensemble/samples/concurrency/service/GetDailySalesTask.java","/ensemble/samples/concurrency/service/ServiceApp.java",},new String[]{"javafx.collections.FXCollections","javafx.concurrent.Service","javafx.concurrent.Task","javafx.scene.control.ProgressIndicator","javafx.scene.control.TableColumn","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/concurrency/service/ServiceApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_33 = new SampleInfo("Task","A sample showing use of an an asynchronous Task to populate a table. ","/Concurrency/Task","/ensemble/samples/concurrency/task","ensemble.samples.concurrency.task.TaskApp","/ensemble/samples/concurrency/task/preview.png",new String[]{"/ensemble/samples/concurrency/task/DailySales.java","/ensemble/samples/concurrency/task/GetDailySalesTask.java","/ensemble/samples/concurrency/task/TaskApp.java",},new String[]{"javafx.collections.FXCollections","javafx.concurrent.Task","javafx.scene.control.ProgressIndicator","javafx.scene.control.TableColumn","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/concurrency/task/TaskApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_34 = new SampleInfo("Accordion","An example of an accordion control. You can use accordion controls to define individual panes and  display them one at a time. ","/Controls/Accordion","/ensemble/samples/controls/accordion","ensemble.samples.controls.accordion.AccordionApp","/ensemble/samples/controls/accordion/preview.png",new String[]{"/ensemble/samples/controls/accordion/AccordionApp.java",},new String[]{"javafx.scene.control.Accordion",},new String[]{},new String[]{"/Controls/Toggle Button","/Controls/Toolbar/ToolBar",},"/ensemble/samples/controls/accordion/AccordionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_35 = new SampleInfo("Check Box","An example of CheckBoxes in various states. ","/Controls/Check Box","/ensemble/samples/controls/checkbox","ensemble.samples.controls.checkbox.CheckBoxApp","/ensemble/samples/controls/checkbox/preview.png",new String[]{"/ensemble/samples/controls/checkbox/CheckBoxApp.java",},new String[]{"javafx.scene.control.CheckBox",},new String[]{},new String[]{"/Controls/Radiobutton/Radio Button",},"/ensemble/samples/controls/checkbox/CheckBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_36 = new SampleInfo("ChoiceBox","An example of a ChoiceBox with several options. The ChoiceBox control displays a default or current selection, with an icon to click that expands the list for a selection. ","/Controls/ChoiceBox","/ensemble/samples/controls/choicebox","ensemble.samples.controls.choicebox.ChoiceBoxApp","/ensemble/samples/controls/choicebox/preview.png",new String[]{"/ensemble/samples/controls/choicebox/ChoiceBoxApp.java",},new String[]{"javafx.scene.control.ChoiceBox",},new String[]{},new String[]{},"/ensemble/samples/controls/choicebox/ChoiceBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_37 = new SampleInfo("ColorPicker","A sample that demonstrates the ColorPicker. ","/Controls/ColorPicker","/ensemble/samples/controls/colorpicker","ensemble.samples.controls.colorpicker.ColorPickerApp","/ensemble/samples/controls/colorpicker/preview.png",new String[]{"/ensemble/samples/controls/colorpicker/ColorPickerApp.java",},new String[]{"javafx.scene.control.ColorPicker",},new String[]{},new String[]{},"/ensemble/samples/controls/colorpicker/ColorPickerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_38 = new SampleInfo("DatePicker","A sample that demonstrates the DatePicker. The sample uses a new Stage for the DatePicker to allow changing of locales. ","/Controls/DatePicker","/ensemble/samples/controls/datepicker","ensemble.samples.controls.datepicker.DatePickerApp","/ensemble/samples/controls/datepicker/preview.png",new String[]{"/ensemble/samples/controls/datepicker/DatePickerApp.java",},new String[]{"javafx.scene.control.DateCell","javafx.scene.control.DatePicker",},new String[]{},new String[]{},"/ensemble/samples/controls/datepicker/DatePickerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_39 = new SampleInfo("HyperLink","A sample that shows a simple hyperlink and a hyperlink with an image. ","/Controls/HyperLink","/ensemble/samples/controls/hyperlink","ensemble.samples.controls.hyperlink.HyperLinkApp","/ensemble/samples/controls/hyperlink/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/hyperlink/HyperLinkApp.java",},new String[]{"javafx.scene.control.Hyperlink",},new String[]{},new String[]{},"/ensemble/samples/controls/hyperlink/HyperLinkApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_40 = new SampleInfo("Menu","An example of a menu bar. The example includes use of the system bar, if the current platform supports a system bar. ","/Controls/Menu","/ensemble/samples/controls/menu","ensemble.samples.controls.menu.MenuApp","/ensemble/samples/controls/menu/preview.png",new String[]{"/ensemble/samples/shared-resources/menuInfo.png","/ensemble/samples/controls/menu/MenuApp.java",},new String[]{"javafx.scene.control.MenuBar","javafx.scene.control.Menu","javafx.scene.control.MenuItem",},new String[]{},new String[]{},"/ensemble/samples/controls/menu/MenuApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_41 = new SampleInfo("Pagination","A sample that demonstrates pagination. ","/Controls/Pagination","/ensemble/samples/controls/pagination","ensemble.samples.controls.pagination.PaginationApp","/ensemble/samples/controls/pagination/preview.png",new String[]{"/ensemble/samples/shared-resources/Animal1.jpg","/ensemble/samples/shared-resources/Animal2.jpg","/ensemble/samples/shared-resources/Animal3.jpg","/ensemble/samples/shared-resources/Animal4.jpg","/ensemble/samples/shared-resources/Animal5.jpg","/ensemble/samples/shared-resources/Animal6.jpg","/ensemble/samples/shared-resources/Animal7.jpg","/ensemble/samples/controls/pagination/PaginationApp.java",},new String[]{"javafx.scene.control.Pagination",},new String[]{},new String[]{},"/ensemble/samples/controls/pagination/PaginationApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_42 = new SampleInfo("Progress Bar","A sample that demonstrates the ProgressBar control. ","/Controls/Progress Bar","/ensemble/samples/controls/progressbar","ensemble.samples.controls.progressbar.ProgressBarApp","/ensemble/samples/controls/progressbar/preview.png",new String[]{"/ensemble/samples/controls/progressbar/ProgressBarApp.java",},new String[]{"javafx.scene.control.ProgressBar",},new String[]{},new String[]{"/Controls/Progress Indicator",},"/ensemble/samples/controls/progressbar/ProgressBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_43 = new SampleInfo("Progress Indicator","A sample that demonstrates the Progress Indicator control in various modes. ","/Controls/Progress Indicator","/ensemble/samples/controls/progressindicator","ensemble.samples.controls.progressindicator.ProgressIndicatorApp","/ensemble/samples/controls/progressindicator/preview.png",new String[]{"/ensemble/samples/controls/progressindicator/ProgressIndicatorApp.java",},new String[]{"javafx.scene.control.ProgressIndicator",},new String[]{},new String[]{"/Controls/Progress Bar",},"/ensemble/samples/controls/progressindicator/ProgressIndicatorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_44 = new SampleInfo("Radio Button","An example of radio buttons in various states. ","/Controls/Radio Button","/ensemble/samples/controls/radiobutton","ensemble.samples.controls.radiobutton.RadioButtonApp","/ensemble/samples/controls/radiobutton/preview.png",new String[]{"/ensemble/samples/controls/radiobutton/RadioButtonApp.java",},new String[]{"javafx.scene.control.RadioButton",},new String[]{},new String[]{"/Controls/Check Box",},"/ensemble/samples/controls/radiobutton/RadioButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_45 = new SampleInfo("ScrollBar","A sample showing horizontal and vertical scroll bars. ","/Controls/ScrollBar","/ensemble/samples/controls/scrollbar","ensemble.samples.controls.scrollbar.ScrollBarApp","/ensemble/samples/controls/scrollbar/preview.png",new String[]{"/ensemble/samples/controls/scrollbar/ScrollBarApp.java",},new String[]{"javafx.scene.control.ScrollBar",},new String[]{},new String[]{},"/ensemble/samples/controls/scrollbar/ScrollBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_46 = new SampleInfo("Toggle Button","Toggle buttons in a toggle group. ","/Controls/Toggle Button","/ensemble/samples/controls/togglebutton","ensemble.samples.controls.togglebutton.ToggleButtonApp","/ensemble/samples/controls/togglebutton/preview.png",new String[]{"/ensemble/samples/controls/togglebutton/ToggleButtonApp.java",},new String[]{"javafx.scene.control.ToggleButton",},new String[]{},new String[]{"/Controls/Choice Box","/Controls/Accordion","/Controls/Toolbar/Tool Bar",},"/ensemble/samples/controls/togglebutton/ToggleButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_47 = new SampleInfo("TreeView","An implementation of the TreeView control displaying an expandable tree root node. ","/Controls/TreeView","/ensemble/samples/controls/treeview","ensemble.samples.controls.treeview.TreeViewApp","/ensemble/samples/controls/treeview/preview.png",new String[]{"/ensemble/samples/controls/treeview/TreeViewApp.java",},new String[]{"javafx.scene.control.TreeView",},new String[]{},new String[]{},"/ensemble/samples/controls/treeview/TreeViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_48 = new SampleInfo("Colored Buttons","An example of Buttons with different background colors. ","/Controls/Button/Colored Buttons","/ensemble/samples/controls/button/colorbutton","ensemble.samples.controls.button.colorbutton.ColorButtonApp","/ensemble/samples/controls/button/colorbutton/preview.png",new String[]{"/ensemble/samples/controls/button/colorbutton/ColorButtonApp.java",},new String[]{"javafx.scene.control.Button",},new String[]{},new String[]{"/Controls/Button/Graphic Button",},"/ensemble/samples/controls/button/colorbutton/ColorButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_49 = new SampleInfo("Graphic Button","A button with an embedded image. ","/Controls/Button/Graphic Button","/ensemble/samples/controls/button/graphicbutton","ensemble.samples.controls.button.graphicbutton.GraphicButtonApp","/ensemble/samples/controls/button/graphicbutton/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/button/graphicbutton/GraphicButtonApp.java",},new String[]{"javafx.scene.control.Button",},new String[]{},new String[]{"/Controls/Button/Colored Buttons",},"/ensemble/samples/controls/button/graphicbutton/GraphicButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_50 = new SampleInfo("Pill Button","This sample demonstrates styling toggle buttons with CSS. ","/Controls/Button/Pill Button","/ensemble/samples/controls/button/pillbutton","ensemble.samples.controls.button.pillbutton.PillButtonApp","/ensemble/samples/controls/button/pillbutton/preview.png",new String[]{"/ensemble/samples/controls/button/pillbutton/PillButtonApp.java","/ensemble/samples/controls/button/pillbutton/PillButton.css",},new String[]{"javafx.scene.control.ToggleButton",},new String[]{},new String[]{"/Controls/Button/Toggle Button",},"/ensemble/samples/controls/button/pillbutton/PillButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_51 = new SampleInfo("HorizontalListView","A sample showing an implementation of the ListView control, in which a list of items is displayed in a horizontal row. ListView is a powerful multi-row control, in which each of a virtually unlimited number of horizontal or vertical rows is defined as a cell. The control also supports dynamically variable non-homogenous row heights. ","/Controls/Listview/HorizontalListView","/ensemble/samples/controls/listview/horizontallistview","ensemble.samples.controls.listview.horizontallistview.HorizontalListViewApp","/ensemble/samples/controls/listview/horizontallistview/preview.png",new String[]{"/ensemble/samples/controls/listview/horizontallistview/HorizontalListViewApp.java",},new String[]{"javafx.scene.control.ListView","javafx.scene.control.SelectionModel",},new String[]{},new String[]{"/Controls/Listview/ListViewCellFactory","/Controls/Listview/Simple ListView",},"/ensemble/samples/controls/listview/horizontallistview/HorizontalListViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_52 = new SampleInfo("ListViewCellFactory","A simple implementation of the ListView control that uses a CellFactory to customize the ListView cell contents. Positive values in the list are green, and negative values are red and enclosed in parentheses. Zero values are black. ","/Controls/Listview/ListViewCellFactory","/ensemble/samples/controls/listview/listviewcellfactory","ensemble.samples.controls.listview.listviewcellfactory.ListViewCellFactoryApp","/ensemble/samples/controls/listview/listviewcellfactory/preview.png",new String[]{"/ensemble/samples/controls/listview/listviewcellfactory/ListViewCellFactoryApp.java","/ensemble/samples/controls/listview/listviewcellfactory/MoneyFormatCell.java",},new String[]{"javafx.scene.control.ListView","javafx.scene.control.SelectionModel",},new String[]{},new String[]{"/Controls/Listview/HorizontalListView","/Controls/Listview/Simple ListView",},"/ensemble/samples/controls/listview/listviewcellfactory/ListViewCellFactoryApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_53 = new SampleInfo("Simple ListView","A simple implementation of the ListView control, in which a list of items is displayed vertically.  ListView is a powerful multirow control, in which each of a virtually unlimited number of horizontal or vertical rows is defined as a cell. The control also supports dynamically variable nonhomogenous row heights. ","/Controls/Listview/Simple ListView","/ensemble/samples/controls/listview/simplelistview","ensemble.samples.controls.listview.simplelistview.SimpleListViewApp","/ensemble/samples/controls/listview/simplelistview/preview.png",new String[]{"/ensemble/samples/controls/listview/simplelistview/SimpleListViewApp.java",},new String[]{"javafx.scene.control.ListView","javafx.scene.control.SelectionModel",},new String[]{},new String[]{"/Controls/Listview/HorizontalListView","/Controls/Listview/ListViewCellFactory",},"/ensemble/samples/controls/listview/simplelistview/SimpleListViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_54 = new SampleInfo("Hidden SplitPane","A sample that demonstrates styling a hidden split pane with CSS. ","/Controls/Splitpane/Hidden SplitPane","/ensemble/samples/controls/splitpane/hiddensplitpane","ensemble.samples.controls.splitpane.hiddensplitpane.HiddenSplitPaneApp","/ensemble/samples/controls/splitpane/hiddensplitpane/preview.png",new String[]{"/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPaneApp.java","/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPane.css",},new String[]{"javafx.scene.control.SplitPane",},new String[]{},new String[]{},"/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_55 = new SampleInfo("TabPane","Some implementations of tabs using the TabPane class. ","/Controls/Tab/TabPane","/ensemble/samples/controls/tab/tabpane","ensemble.samples.controls.tab.tabpane.TabPaneApp","/ensemble/samples/controls/tab/tabpane/preview.png",new String[]{"/ensemble/samples/controls/tab/tabpane/TabPaneApp.java","/ensemble/samples/controls/tab/tabpane/tab_16.png",},new String[]{"javafx.scene.control.Tab","javafx.scene.control.TabPane","javafx.scene.control.TabBuilder",},new String[]{},new String[]{},"/ensemble/samples/controls/tab/tabpane/TabPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_56 = new SampleInfo("TableCellFactory","A simple table that uses cell factories to add a checkbox to a table column and to add textfields to table columns. The latter enables editing of first name, last name, and email. ","/Controls/Table/TableCellFactory","/ensemble/samples/controls/table/tablecellfactory","ensemble.samples.controls.table.tablecellfactory.TableCellFactoryApp","/ensemble/samples/controls/table/tablecellfactory/preview.png",new String[]{"/ensemble/samples/controls/table/tablecellfactory/Person.java","/ensemble/samples/controls/table/tablecellfactory/TableCellFactoryApp.java",},new String[]{"javafx.scene.control.TableCell","javafx.scene.control.TableColumn","javafx.scene.control.TablePosition","javafx.scene.control.TableRow","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/controls/table/tablecellfactory/TableCellFactoryApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_57 = new SampleInfo("TableView","A simple table with a header row. ","/Controls/Table/TableView","/ensemble/samples/controls/table/tableview","ensemble.samples.controls.table.tableview.TableViewApp","/ensemble/samples/controls/table/tableview/preview.png",new String[]{"/ensemble/samples/controls/table/tableview/Person.java","/ensemble/samples/controls/table/tableview/TableViewApp.java",},new String[]{"javafx.scene.control.TableColumn","javafx.scene.control.TablePosition","javafx.scene.control.TableRow","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/controls/table/tableview/TableViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_58 = new SampleInfo("Advanced Label","Several Label controls, displayed in various alignments with respect to an image. ","/Controls/Text/Advanced Label","/ensemble/samples/controls/text/advancedlabel","ensemble.samples.controls.text.advancedlabel.AdvancedLabelApp","/ensemble/samples/controls/text/advancedlabel/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/text/advancedlabel/AdvancedLabelApp.java",},new String[]{"javafx.scene.control.Label",},new String[]{},new String[]{"/Controls/Text/Simple Label","/Controls/Button/Graphic Button",},"/ensemble/samples/controls/text/advancedlabel/AdvancedLabelApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_59 = new SampleInfo("Inset Text","A sample that shows styling of text through CSS. ","/Controls/Text/Inset Text","/ensemble/samples/controls/text/insettext","ensemble.samples.controls.text.insettext.InsetTextApp","/ensemble/samples/controls/text/insettext/preview.png",new String[]{"/ensemble/samples/controls/text/insettext/InsetTextApp.java","/ensemble/samples/controls/text/insettext/InsetText.css",},new String[]{"javafx.geometry.Insets","javafx.scene.control.LabelBuilder",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/controls/text/insettext/InsetTextApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_60 = new SampleInfo("Search Box","A sample that demonstrates use of CSS to create a search box. ","/Controls/Text/Search Box","/ensemble/samples/controls/text/searchbox","ensemble.samples.controls.text.searchbox.SearchBoxApp","/ensemble/samples/controls/text/searchbox/preview.png",new String[]{"/ensemble/samples/controls/text/searchbox/SearchBox.java","/ensemble/samples/controls/text/searchbox/SearchBoxApp.java","/ensemble/samples/controls/text/searchbox/SearchBox.css",},new String[]{"javafx.scene.control.TextField",},new String[]{},new String[]{},"/ensemble/samples/controls/text/searchbox/SearchBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_61 = new SampleInfo("Simple Label","A simple implementation of the Label control, with an image to the left of the label. ","/Controls/Text/Simple Label","/ensemble/samples/controls/text/simplelabel","ensemble.samples.controls.text.simplelabel.SimpleLabelApp","/ensemble/samples/controls/text/simplelabel/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/text/simplelabel/SimpleLabelApp.java",},new String[]{"javafx.scene.control.Label",},new String[]{},new String[]{"/Controls/Text/Advanced Label","/Controls/Button/Graphic Button","/Controls/Text/Inset Text",},"/ensemble/samples/controls/text/simplelabel/SimpleLabelApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_62 = new SampleInfo("Text Field","Demonstrates a TextField control that allows you to enter text. ","/Controls/Text/Text Field","/ensemble/samples/controls/text/textfield","ensemble.samples.controls.text.textfield.TextFieldApp","/ensemble/samples/controls/text/textfield/preview.png",new String[]{"/ensemble/samples/controls/text/textfield/TextFieldApp.java",},new String[]{"javafx.scene.control.TextField",},new String[]{},new String[]{},"/ensemble/samples/controls/text/textfield/TextFieldApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_63 = new SampleInfo("Text Validator","A sample that demonstrates text validation. If the value in the TextField is a small number, the field becomes yellow. If the value in the TextField is not a number, the field becomes red. ","/Controls/Text/Text Validator","/ensemble/samples/controls/text/textvalidator","ensemble.samples.controls.text.textvalidator.TextValidatorApp","/ensemble/samples/controls/text/textvalidator/preview.png",new String[]{"/ensemble/samples/controls/text/textvalidator/TextInputValidatorPane.java","/ensemble/samples/controls/text/textvalidator/TextValidatorApp.java","/ensemble/samples/controls/text/textvalidator/ValidationEvent.java","/ensemble/samples/controls/text/textvalidator/ValidationResult.java","/ensemble/samples/controls/text/textvalidator/Validator.java","/ensemble/samples/controls/text/textvalidator/ValidatorPane.java","/ensemble/samples/controls/text/textvalidator/Validators.css",},new String[]{"javafx.scene.control.TextField",},new String[]{},new String[]{"/Controls/Text/Text Field",},"/ensemble/samples/controls/text/textvalidator/TextValidatorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_64 = new SampleInfo("Styled Tool Bar","A sample that shows three ToolBars, two of which are styled specifically with a separate CSS style sheet. ","/Controls/Toolbar/Styled Tool Bar","/ensemble/samples/controls/toolbar/styledtoolbar","ensemble.samples.controls.toolbar.styledtoolbar.StyledToolBarApp","/ensemble/samples/controls/toolbar/styledtoolbar/preview.png",new String[]{"/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBarApp.java","/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBar.css",},new String[]{"javafx.scene.control.ToolBar",},new String[]{},new String[]{"/Controls/Toolbar/Tool Bar",},"/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_65 = new SampleInfo("Tool Bar","A toolbar with three buttons. ","/Controls/Toolbar/Tool Bar","/ensemble/samples/controls/toolbar/toolbar","ensemble.samples.controls.toolbar.toolbar.ToolBarApp","/ensemble/samples/controls/toolbar/toolbar/preview.png",new String[]{"/ensemble/samples/controls/toolbar/toolbar/ToolBarApp.java",},new String[]{"javafx.scene.control.ToolBar",},new String[]{},new String[]{},"/ensemble/samples/controls/toolbar/toolbar/ToolBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_66 = new SampleInfo("FXML Login Demo","FXML-based Login screen sample ","/Fxml/FXML Login Demo","/ensemble/samples/fxml/fxmldemo","ensemble.samples.fxml.fxmldemo.FXMLLoginDemoApp","/ensemble/samples/fxml/fxmldemo/preview.png",new String[]{"/ensemble/samples/fxml/fxmldemo/Authenticator.java","/ensemble/samples/fxml/fxmldemo/FXMLLoginDemoApp.java","/ensemble/samples/fxml/fxmldemo/LoginController.java","/ensemble/samples/fxml/fxmldemo/ProfileController.java","/ensemble/samples/fxml/fxmldemo/User.java","/ensemble/samples/fxml/fxmldemo/Login.css","/ensemble/samples/fxml/fxmldemo/Login.fxml","/ensemble/samples/fxml/fxmldemo/Profile.fxml",},new String[]{"java.util.HashMap","java.util.Map","java.io.InputStream","java.util.logging.Level","java.util.logging.Logger","javafx.fxml.FXML","javafx.fxml.FXMLLoader","javafx.fxml.Initializable","javafx.fxml.JavaFXBuilderFactory","javafx.stage.Stage",},new String[]{},new String[]{},"/ensemble/samples/fxml/fxmldemo/FXMLLoginDemoApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_67 = new SampleInfo("Bouncing Balls","A sample that shows animated bouncing balls. Select a ball to start or stop the animation. Select the reset button to stop all the balls. ","/Graphics/Bouncing Balls","/ensemble/samples/graphics/bouncingballs","ensemble.samples.graphics.bouncingballs.BouncingBallsApp","/ensemble/samples/graphics/bouncingballs/preview.png",new String[]{"/ensemble/samples/graphics/bouncingballs/Ball.java","/ensemble/samples/graphics/bouncingballs/BallsPane.java","/ensemble/samples/graphics/bouncingballs/BallsScreen.java","/ensemble/samples/graphics/bouncingballs/BouncingBallsApp.java","/ensemble/samples/graphics/bouncingballs/Constants.java",},new String[]{"java.util.ArrayList","java.util.List","javafx.util.Duration","javafx.stage.Stage","javafx.stage.Screen","javafx.scene.Parent","javafx.scene.Group","javafx.scene.Scene","javafx.scene.Node","javafx.scene.effect.Reflection","javafx.scene.shape.Rectangle","javafx.scene.shape.Line","javafx.scene.shape.Circle","javafx.scene.paint.Color","javafx.scene.paint.CycleMethod","javafx.scene.paint.RadialGradient","javafx.scene.paint.Stop","javafx.scene.control.Button","javafx.scene.text.Text","javafx.application.Application","javafx.animation.Interpolator","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.animation.Animation.Status","javafx.event.EventHandler","javafx.event.ActionEvent","javafx.scene.input.MouseEvent","javafx.geometry.Insets",},new String[]{},new String[]{},"/ensemble/samples/graphics/bouncingballs/BouncingBallsApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_68 = new SampleInfo("Brick Breaker","The main purpose of the game is to break all the bricks and not drop the ball. ","/Graphics/Brick Breaker","/ensemble/samples/graphics/brickbreaker","ensemble.samples.graphics.brickbreaker.BrickBreakerApp","/ensemble/samples/graphics/brickbreaker/preview.png",new String[]{"/ensemble/samples/graphics/brickbreaker/Ball.java","/ensemble/samples/graphics/brickbreaker/Bat.java","/ensemble/samples/graphics/brickbreaker/Bonus.java","/ensemble/samples/graphics/brickbreaker/Brick.java","/ensemble/samples/graphics/brickbreaker/BrickBreakerApp.java","/ensemble/samples/shared-resources/brickImages/background.png","/ensemble/samples/shared-resources/brickImages/bat/left.png","/ensemble/samples/shared-resources/brickImages/bat/center.png","/ensemble/samples/shared-resources/brickImages/bat/right.png","/ensemble/samples/shared-resources/brickImages/ball/ball0.png","/ensemble/samples/shared-resources/brickImages/ball/ball1.png","/ensemble/samples/shared-resources/brickImages/ball/ball2.png","/ensemble/samples/shared-resources/brickImages/ball/ball3.png","/ensemble/samples/shared-resources/brickImages/ball/ball4.png","/ensemble/samples/shared-resources/brickImages/ball/ball5.png","/ensemble/samples/shared-resources/brickImages/logo.png","/ensemble/samples/shared-resources/brickImages/splash/brick.png","/ensemble/samples/shared-resources/brickImages/splash/brickshadow.png","/ensemble/samples/shared-resources/brickImages/splash/breaker.png","/ensemble/samples/shared-resources/brickImages/splash/breakershadow.png","/ensemble/samples/shared-resources/brickImages/splash/pressanykey.png","/ensemble/samples/shared-resources/brickImages/splash/pressanykeyshadow.png","/ensemble/samples/shared-resources/brickImages/splash/strike.png","/ensemble/samples/shared-resources/brickImages/splash/strikeshadow.png","/ensemble/samples/shared-resources/brickImages/splash/sun.png","/ensemble/samples/shared-resources/brickImages/ready.png","/ensemble/samples/shared-resources/brickImages/gameover.png","/ensemble/samples/shared-resources/brickImages/brick/blue.png","/ensemble/samples/shared-resources/brickImages/brick/broken1.png","/ensemble/samples/shared-resources/brickImages/brick/broken2.png","/ensemble/samples/shared-resources/brickImages/brick/brown.png","/ensemble/samples/shared-resources/brickImages/brick/cyan.png","/ensemble/samples/shared-resources/brickImages/brick/green.png","/ensemble/samples/shared-resources/brickImages/brick/grey.png","/ensemble/samples/shared-resources/brickImages/brick/magenta.png","/ensemble/samples/shared-resources/brickImages/brick/orange.png","/ensemble/samples/shared-resources/brickImages/brick/red.png","/ensemble/samples/shared-resources/brickImages/brick/violet.png","/ensemble/samples/shared-resources/brickImages/brick/white.png","/ensemble/samples/shared-resources/brickImages/brick/yellow.png","/ensemble/samples/shared-resources/brickImages/bonus/ballslow.png","/ensemble/samples/shared-resources/brickImages/bonus/ballfast.png","/ensemble/samples/shared-resources/brickImages/bonus/catch.png","/ensemble/samples/shared-resources/brickImages/bonus/batgrow.png","/ensemble/samples/shared-resources/brickImages/bonus/batreduce.png","/ensemble/samples/shared-resources/brickImages/bonus/ballgrow.png","/ensemble/samples/shared-resources/brickImages/bonus/ballreduce.png","/ensemble/samples/shared-resources/brickImages/bonus/strike.png","/ensemble/samples/shared-resources/brickImages/bonus/extralife.png","/ensemble/samples/graphics/brickbreaker/Config.java","/ensemble/samples/shared-resources/brickImages/vline.png","/ensemble/samples/graphics/brickbreaker/Level.java","/ensemble/samples/graphics/brickbreaker/LevelData.java","/ensemble/samples/graphics/brickbreaker/Splash.java","/ensemble/samples/graphics/brickbreaker/Utils.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView","javafx.util.Duration","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.application.Application","javafx.application.Platform","javafx.collections.ObservableList","javafx.geometry.Rectangle2D","javafx.geometry.VPos",},new String[]{},new String[]{},"/ensemble/samples/graphics/brickbreaker/BrickBreakerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_69 = new SampleInfo("Calculator","A calculator that performs simple math exercises. ","/Graphics/Calculator","/ensemble/samples/graphics/calc","ensemble.samples.graphics.calc.CalculatorApp","/ensemble/samples/graphics/calc/preview.png",new String[]{"/ensemble/samples/graphics/calc/Calculator.java","/ensemble/samples/graphics/calc/CalculatorApp.java","/ensemble/samples/graphics/calc/Key.java","/ensemble/samples/graphics/calc/Util.java",},new String[]{"javafx.application.Application","javafx.stage.Stage","javafx.scene.Scene","javafx.scene.Group","javafx.scene.Parent","javafx.scene.paint.Color","javafx.scene.paint.CycleMethod","javafx.scene.paint.LinearGradient","javafx.scene.paint.Stop","javafx.scene.input.KeyEvent","javafx.scene.input.MouseEvent","javafx.scene.shape.Rectangle","javafx.scene.text.Font","javafx.scene.text.Text","javafx.event.EventHandler","javafx.geometry.VPos",},new String[]{},new String[]{},"/ensemble/samples/graphics/calc/CalculatorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_70 = new SampleInfo("Colorful Circles","A sample that demonstrates how to draw and paint shapes, apply visual effects, blend colors in overlapping objects, and animate objects. ","/Graphics/Colorful Circles","/ensemble/samples/graphics/colorfulcircles","ensemble.samples.graphics.colorfulcircles.ColorfulCirclesApp","/ensemble/samples/graphics/colorfulcircles/preview.png",new String[]{"/ensemble/samples/graphics/colorfulcircles/ColorfulCirclesApp.java",},new String[]{"javafx.scene.effect.BlendMode","javafx.scene.effect.BoxBlur","javafx.scene.shape.Circle","javafx.scene.Group","javafx.scene.paint.LinearGradient","javafx.animation.Timeline",},new String[]{},new String[]{},"/ensemble/samples/graphics/colorfulcircles/ColorfulCirclesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_71 = new SampleInfo("Digital Clock","A digital clock application that demonstrates JavaFX animation, images, and effects. ","/Graphics/Digital Clock","/ensemble/samples/graphics/digitalclock","ensemble.samples.graphics.digitalclock.DigitalClockApp","/ensemble/samples/graphics/digitalclock/preview.png",new String[]{"/ensemble/samples/graphics/digitalclock/Clock.java","/ensemble/samples/graphics/digitalclock/Digit.java","/ensemble/samples/shared-resources/DigitalClock-background.png","/ensemble/samples/graphics/digitalclock/DigitalClockApp.java",},new String[]{"javafx.scene.effect.Glow","javafx.scene.shape.Polygon","javafx.scene.transform.Shear",},new String[]{},new String[]{},"/ensemble/samples/graphics/digitalclock/DigitalClockApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_72 = new SampleInfo("Display Shelf","A display shelf of images using the PerspectiveTransform effect. ","/Graphics/Display Shelf","/ensemble/samples/graphics/displayshelf","ensemble.samples.graphics.displayshelf.DisplayShelfApp","/ensemble/samples/graphics/displayshelf/preview.png",new String[]{"/ensemble/samples/graphics/displayshelf/DisplayShelf.java","/ensemble/samples/shared-resources/Animal1.jpg","/ensemble/samples/shared-resources/Animal2.jpg","/ensemble/samples/shared-resources/Animal3.jpg","/ensemble/samples/shared-resources/Animal4.jpg","/ensemble/samples/shared-resources/Animal5.jpg","/ensemble/samples/shared-resources/Animal6.jpg","/ensemble/samples/shared-resources/Animal7.jpg","/ensemble/samples/shared-resources/Animal8.jpg","/ensemble/samples/shared-resources/Animal9.jpg","/ensemble/samples/shared-resources/Animal10.jpg","/ensemble/samples/shared-resources/Animal11.jpg","/ensemble/samples/shared-resources/Animal12.jpg","/ensemble/samples/shared-resources/Animal13.jpg","/ensemble/samples/shared-resources/Animal14.jpg","/ensemble/samples/graphics/displayshelf/DisplayShelfApp.java","/ensemble/samples/graphics/displayshelf/PerspectiveImage.java","/ensemble/samples/graphics/displayshelf/DisplayShelf.css",},new String[]{"javafx.scene.effect.PerspectiveTransform","javafx.scene.effect.Reflection","javafx.scene.control.ScrollBar","javafx.scene.input.MouseEvent","javafx.scene.input.KeyEvent",},new String[]{},new String[]{},"/ensemble/samples/graphics/displayshelf/DisplayShelfApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_73 = new SampleInfo("Puzzle Pieces","A sample in which an image is broken into pieces to create a jigsaw puzzle. ","/Graphics/Puzzle Pieces","/ensemble/samples/graphics/puzzle","ensemble.samples.graphics.puzzle.PuzzlePiecesApp","/ensemble/samples/graphics/puzzle/preview.png",new String[]{"/ensemble/samples/graphics/puzzle/Desk.java","/ensemble/samples/graphics/puzzle/Piece.java","/ensemble/samples/shared-resources/PuzzlePieces-picture.jpg","/ensemble/samples/graphics/puzzle/PuzzlePiecesApp.java",},new String[]{"javafx.scene.shape.Path","javafx.scene.image.Image","javafx.scene.image.ImageView","javafx.scene.control.Button","javafx.scene.layout.Pane","javafx.scene.input.MouseEvent","javafx.scene.effect.DropShadow",},new String[]{},new String[]{},"/ensemble/samples/graphics/puzzle/PuzzlePiecesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_74 = new SampleInfo("Stopwatch","An animated stopwatch. Click the green button to start the stopwatch and click the red button to stop it. ","/Graphics/Stopwatch","/ensemble/samples/graphics/stopwatch","ensemble.samples.graphics.stopwatch.StopWatchApp","/ensemble/samples/graphics/stopwatch/preview.png",new String[]{"/ensemble/samples/graphics/stopwatch/Dial.java","/ensemble/samples/graphics/stopwatch/DigitalClock.java","/ensemble/samples/graphics/stopwatch/StopWatchApp.java","/ensemble/samples/graphics/stopwatch/StopWatchButton.java","/ensemble/samples/shared-resources/stopwatch.png","/ensemble/samples/graphics/stopwatch/Watch.java",},new String[]{"javafx.scene.effect.DropShadow","javafx.scene.effect.GaussianBlur","javafx.scene.effect.Light","javafx.scene.effect.Lighting","javafx.scene.image.Image","javafx.scene.image.ImageView","javafx.scene.shape.Circle","javafx.scene.Group","javafx.scene.shape.Ellipse","javafx.scene.shape.Rectangle","javafx.scene.text.Font","javafx.scene.text.Text","javafx.scene.text.TextAlignment","javafx.scene.text.TextBoundsType","javafx.scene.transform.Rotate","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/graphics/stopwatch/StopWatchApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_75 = new SampleInfo("Drop Shadow","A sample that demonstrates how a drop shadow effect is affected by various settings. ","/Graphics/Effects/Drop Shadow","/ensemble/samples/graphics/effects/dropshadow","ensemble.samples.graphics.effects.dropshadow.DropShadowApp","/ensemble/samples/graphics/effects/dropshadow/preview.png",new String[]{"/ensemble/samples/graphics/effects/dropshadow/DropShadowApp.java",},new String[]{"javafx.scene.effect.DropShadow","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/dropshadow/DropShadowApp.java",new PlaygroundProperty[]{new PlaygroundProperty("dropShadow","radius","min","0","max","20","name","Drop Shadow Radius"),new PlaygroundProperty("dropShadow","offsetX","min","-10","max","10","name","Drop Shadow Offset X"),new PlaygroundProperty("dropShadow","offsetY","min","-10","max","10","name","Drop Shadow Offset Y"),new PlaygroundProperty("dropShadow","radius","min","0","max","1","name","Drop Shadow Spread"),new PlaygroundProperty("dropShadow","color","name","Drop Shadow Color"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_76 = new SampleInfo("Gaussian Blur","A sample that demonstrates a Gaussian blur effect on an image, with varying degrees of blurriness. ","/Graphics/Effects/Gaussian Blur","/ensemble/samples/graphics/effects/gaussianblur","ensemble.samples.graphics.effects.gaussianblur.GaussianBlurApp","/ensemble/samples/graphics/effects/gaussianblur/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/graphics/effects/gaussianblur/GaussianBlurApp.java",},new String[]{"javafx.scene.effect.GaussianBlur","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/gaussianblur/GaussianBlurApp.java",new PlaygroundProperty[]{new PlaygroundProperty("gaussianBlur","radius","min","0","max","15","name","Gaussian Blur Level"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_77 = new SampleInfo("Inner Shadow","A sample that demonstrates how an inner shadow effect is affected by various settings. ","/Graphics/Effects/Inner Shadow","/ensemble/samples/graphics/effects/innershadow","ensemble.samples.graphics.effects.innershadow.InnerShadowApp","/ensemble/samples/graphics/effects/innershadow/preview.png",new String[]{"/ensemble/samples/graphics/effects/innershadow/InnerShadowApp.java",},new String[]{"javafx.scene.effect.InnerShadow","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/innershadow/InnerShadowApp.java",new PlaygroundProperty[]{new PlaygroundProperty("sample","fill","name","Text Fill"),new PlaygroundProperty("innerShadow","radius","min","0","max","20","name","Inner Shadow Radius"),new PlaygroundProperty("innerShadow","offsetX","min","-10","max","10","name","Inner Shadow Offset X"),new PlaygroundProperty("innerShadow","offsetY","min","-10","max","10","name","Inner Shadow Offset Y"),new PlaygroundProperty("innerShadow","color","name","Inner Shadow Color"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_78 = new SampleInfo("Reflection","A sample that demonstrates how a reflection effect is affected by various settings. ","/Graphics/Effects/Reflection","/ensemble/samples/graphics/effects/reflection","ensemble.samples.graphics.effects.reflection.ReflectionApp","/ensemble/samples/graphics/effects/reflection/preview.png",new String[]{"/ensemble/samples/shared-resources/boat.jpg","/ensemble/samples/graphics/effects/reflection/ReflectionApp.java",},new String[]{"javafx.scene.effect.Reflection","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/reflection/ReflectionApp.java",new PlaygroundProperty[]{new PlaygroundProperty("reflection","bottomOpacity","min","0","max","1","name","Reflection Bottom Opacity"),new PlaygroundProperty("reflection","topOpacity","min","0","max","1","name","Reflection Top Opacity"),new PlaygroundProperty("reflection","fraction","min","0","max","1","name","Reflection Fraction"),new PlaygroundProperty("reflection","topOffset","min","-10","max","10","name","Reflection Top Offset"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_79 = new SampleInfo("Sepia Tone","A sample that demonstrates varying degrees of a sepia tone effect. ","/Graphics/Effects/Sepia Tone","/ensemble/samples/graphics/effects/sepiatone","ensemble.samples.graphics.effects.sepiatone.SepiaToneApp","/ensemble/samples/graphics/effects/sepiatone/preview.png",new String[]{"/ensemble/samples/shared-resources/boat.jpg","/ensemble/samples/graphics/effects/sepiatone/SepiaToneApp.java",},new String[]{"javafx.scene.effect.SepiaTone","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/sepiatone/SepiaToneApp.java",new PlaygroundProperty[]{new PlaygroundProperty("sepiaTone","level","min","0","max","1","name","SepiaTone Level"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_80 = new SampleInfo("Image Creation","A sample that demonstrates the use of two different constructors in the Image class. ","/Graphics/Images/Image Creation","/ensemble/samples/graphics/images/imagecreation","ensemble.samples.graphics.images.imagecreation.ImageCreationApp","/ensemble/samples/graphics/images/imagecreation/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/graphics/images/imagecreation/ImageCreationApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics/images/imagecreation/ImageCreationApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_81 = new SampleInfo("Image Operation","A sample that demonstrates the use of two different constructors in the Image class. ","/Graphics/Images/Image Operation","/ensemble/samples/graphics/images/imageoperator","ensemble.samples.graphics.images.imageoperator.ImageOperationApp","/ensemble/samples/graphics/images/imageoperator/preview.png",new String[]{"/ensemble/samples/graphics/images/imageoperator/ImageOperationApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics/images/imageoperator/ImageOperationApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"gridSize","min","0","max","10","name","Grid Size"),new PlaygroundProperty(null,"hueFactor","min","0","max","32","name","Hue Factor"),new PlaygroundProperty(null,"hueOffset","min","0","max","360","name","Hue Offset"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_82 = new SampleInfo("Image Properties","A sample that demonstrates how to resize images and use the Viewport property. ","/Graphics/Images/Image Properties","/ensemble/samples/graphics/images/imageproperties","ensemble.samples.graphics.images.imageproperties.ImagePropertiesApp","/ensemble/samples/graphics/images/imageproperties/preview.png",new String[]{"/ensemble/samples/shared-resources/sanfran.jpg","/ensemble/samples/graphics/images/imageproperties/ImagePropertiesApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{"/Graphics/Images/Image Creation",},"/ensemble/samples/graphics/images/imageproperties/ImagePropertiesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_83 = new SampleInfo("Color","Rectangles filled with colors. ","/Graphics/Paints/Color","/ensemble/samples/graphics/paints/color","ensemble.samples.graphics.paints.color.ColorApp","/ensemble/samples/graphics/paints/color/preview.png",new String[]{"/ensemble/samples/graphics/paints/color/ColorApp.java",},new String[]{"javafx.scene.shape.Shape","javafx.scene.paint.Color","javafx.scene.paint.Paint",},new String[]{},new String[]{"/Graphics/Paints/Radial Gradient","/Graphics/Paints/Linear Gradient",},"/ensemble/samples/graphics/paints/color/ColorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_84 = new SampleInfo("Linear Gradient","A sample with two rectangles, one filled with a simple linear gradient and one filled with a more complex gradient using the reflection cycle method. ","/Graphics/Paints/Linear Gradient","/ensemble/samples/graphics/paints/lineargradient","ensemble.samples.graphics.paints.lineargradient.LinearGradientApp","/ensemble/samples/graphics/paints/lineargradient/preview.png",new String[]{"/ensemble/samples/graphics/paints/lineargradient/LinearGradientApp.java",},new String[]{"javafx.scene.paint.LinearGradient","javafx.scene.shape.Shape","javafx.scene.paint.Paint","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Paints/Color","/Graphics/Paints/Radial Gradient",},"/ensemble/samples/graphics/paints/lineargradient/LinearGradientApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_85 = new SampleInfo("Radial Gradient","A sample that demonstrates two circles, one filled with a simple radial gradient and one filled with a more complex radial gradient. ","/Graphics/Paints/Radial Gradient","/ensemble/samples/graphics/paints/radialgradient","ensemble.samples.graphics.paints.radialgradient.RadialGradientApp","/ensemble/samples/graphics/paints/radialgradient/preview.png",new String[]{"/ensemble/samples/graphics/paints/radialgradient/RadialGradientApp.java",},new String[]{"javafx.scene.paint.RadialGradient","javafx.scene.shape.Shape","javafx.scene.paint.Paint","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Paints/Color","/Graphics/Paints/Linear Gradient",},"/ensemble/samples/graphics/paints/radialgradient/RadialGradientApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_86 = new SampleInfo("Arc","A sample that demonstrates how various settings affect a line shape. ","/Graphics/Shapes/Arc","/ensemble/samples/graphics/shapes/arc","ensemble.samples.graphics.shapes.arc.ArcApp","/ensemble/samples/graphics/shapes/arc/preview.png",new String[]{"/ensemble/samples/graphics/shapes/arc/ArcApp.java",},new String[]{"javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Shapes/Circle","/Graphics/Shapes/Ellipse",},"/ensemble/samples/graphics/shapes/arc/ArcApp.java",new PlaygroundProperty[]{new PlaygroundProperty("arc1","fill","name","Arc1 Fill"),new PlaygroundProperty("arc1","startAngle","min","0","max","360","name","Arc 1 Start Angle"),new PlaygroundProperty("arc1","length","min","0","max","360","name","Arc 1 Length"),new PlaygroundProperty("arc2","stroke","name","Arc 2 Stroke"),new PlaygroundProperty("arc2","strokeWidth","min","0","max","5","name","Arc 2 Stroke Width"),new PlaygroundProperty("arc2","radiusX","min","0","max","50","name","Arc 2 Radius X"),new PlaygroundProperty("arc2","radiusY","min","0","max","50","name","Arc 2 Radius Y"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_87 = new SampleInfo("Circle","A sample showing two circles with controls to change fill, stroke, and radius. ","/Graphics/Shapes/Circle","/ensemble/samples/graphics/shapes/circle","ensemble.samples.graphics.shapes.circle.CircleApp","/ensemble/samples/graphics/shapes/circle/preview.png",new String[]{"/ensemble/samples/graphics/shapes/circle/CircleApp.java",},new String[]{"javafx.scene.shape.Circle","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Shapes/Arc","/Graphics/Shapes/Ellipse",},"/ensemble/samples/graphics/shapes/circle/CircleApp.java",new PlaygroundProperty[]{new PlaygroundProperty("circle1","fill","name","Circle 1 Fill"),new PlaygroundProperty("circle1","radius","min","10","max","40","name","Circle 1 Radius"),new PlaygroundProperty("circle2","stroke","name","Circle 1 Stroke"),new PlaygroundProperty("circle2","strokeWidth","min","1","max","5","name","Circle 2 Stroke Width"),new PlaygroundProperty("circle2","radius","min","10","max","40","name","Circle 2 Radius"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_88 = new SampleInfo("Cubic Curve","A sample showing how various settings change a cubic B??zier parametric curve. ","/Graphics/Shapes/Cubic Curve","/ensemble/samples/graphics/shapes/cubiccurve","ensemble.samples.graphics.shapes.cubiccurve.CubicCurveApp","/ensemble/samples/graphics/shapes/cubiccurve/preview.png",new String[]{"/ensemble/samples/graphics/shapes/cubiccurve/CubicCurveApp.java",},new String[]{"javafx.scene.shape.CubicCurve","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/cubiccurve/CubicCurveApp.java",new PlaygroundProperty[]{new PlaygroundProperty("cubicCurve","fill","name","Cubic Curve Fill"),new PlaygroundProperty("cubicCurve","stroke","name","Cubic Curve Stroke"),new PlaygroundProperty("cubicCurve","startX","min","0","max","170","name","Cubic Curve Start X"),new PlaygroundProperty("cubicCurve","startY","min","10","max","80","name","Cubic Curve Start Y"),new PlaygroundProperty("cubicCurve","controlX1","min","0","max","180","name","Cubic Curve Control X1"),new PlaygroundProperty("cubicCurve","controlY1","min","0","max","90","name","Cubic Curve Control Y1"),new PlaygroundProperty("cubicCurve","controlX2","min","0","max","180","name","Cubic Curve Control X2"),new PlaygroundProperty("cubicCurve","controlY2","min","0","max","90","name","Cubic Curve Control Y2"),new PlaygroundProperty("cubicCurve","endX","min","10","max","180","name","Cubic Curve End X"),new PlaygroundProperty("cubicCurve","endY","min","0","max","80","name","Cubic Curve End Y"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_89 = new SampleInfo("Ellipse","A sample that demonstrates how various settings affect two elliptical shapes. ","/Graphics/Shapes/Ellipse","/ensemble/samples/graphics/shapes/ellipse","ensemble.samples.graphics.shapes.ellipse.EllipseApp","/ensemble/samples/graphics/shapes/ellipse/preview.png",new String[]{"/ensemble/samples/graphics/shapes/ellipse/EllipseApp.java",},new String[]{"javafx.scene.shape.Ellipse","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Shapes/Circle","/Graphics/Shapes/Arc",},"/ensemble/samples/graphics/shapes/ellipse/EllipseApp.java",new PlaygroundProperty[]{new PlaygroundProperty("ellipse1","fill","name","Ellipse 1 Fill"),new PlaygroundProperty("ellipse1","radiusX","min","10","max","40","name","Ellipse 1 Width"),new PlaygroundProperty("ellipse1","radiusY","min","10","max","45","name","Ellipse 1 Height"),new PlaygroundProperty("ellipse2","stroke","name","Ellipse 2 Stroke"),new PlaygroundProperty("ellipse2","strokeWidth","min","1","max","5","name","Ellipse 2 Stroke Width"),new PlaygroundProperty("ellipse2","radiusX","min","10","max","40","name","Ellipse 2 Width"),new PlaygroundProperty("ellipse2","radiusY","min","10","max","45","name","Ellipse 2 Height"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_90 = new SampleInfo("Line","A sample that demonstrates how various settings affect a line shape. ","/Graphics/Shapes/Line","/ensemble/samples/graphics/shapes/line","ensemble.samples.graphics.shapes.line.LineApp","/ensemble/samples/graphics/shapes/line/preview.png",new String[]{"/ensemble/samples/graphics/shapes/line/LineApp.java",},new String[]{"javafx.scene.shape.Line","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/line/LineApp.java",new PlaygroundProperty[]{new PlaygroundProperty("exampleLine","startX","min","50","max","550"),new PlaygroundProperty("exampleLine","startY","min","50","max","350"),new PlaygroundProperty("exampleLine","endX","min","50","max","550"),new PlaygroundProperty("exampleLine","endY","min","50","max","350"),new PlaygroundProperty("exampleLine","stroke"),new PlaygroundProperty("exampleLine","strokeWidth","min","0.1","max","50"),new PlaygroundProperty("exampleLine","strokeLineCap"),new PlaygroundProperty("exampleLine","getStrokeDashArray"),new PlaygroundProperty("exampleLine","strokeDashOffset","min","0","max","500"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_91 = new SampleInfo("Path","A sample that demonstrates two path shapes. ","/Graphics/Shapes/Path","/ensemble/samples/graphics/shapes/path","ensemble.samples.graphics.shapes.path.PathApp","/ensemble/samples/graphics/shapes/path/preview.png",new String[]{"/ensemble/samples/graphics/shapes/path/PathApp.java",},new String[]{"javafx.scene.shape.Path","javafx.scene.shape.ArcTo","javafx.scene.shape.ClosePath","javafx.scene.shape.CubicCurveTo","javafx.scene.shape.HLineTo","javafx.scene.shape.LineTo","javafx.scene.shape.MoveTo","javafx.scene.shape.QuadCurveTo","javafx.scene.shape.VLineTo","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/path/PathApp.java",new PlaygroundProperty[]{new PlaygroundProperty("path1","stroke","name","Path 1 Stroke"),new PlaygroundProperty("path2","stroke","name","Path 2 Stroke"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_92 = new SampleInfo("Polygon","A sample that demonstrates polygon construction. ","/Graphics/Shapes/Polygon","/ensemble/samples/graphics/shapes/polygon","ensemble.samples.graphics.shapes.polygon.PolygonApp","/ensemble/samples/graphics/shapes/polygon/preview.png",new String[]{"/ensemble/samples/graphics/shapes/polygon/PolygonApp.java",},new String[]{"javafx.scene.shape.Polygon","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/polygon/PolygonApp.java",new PlaygroundProperty[]{new PlaygroundProperty("polygon1","fill","name","Polygon 1 Fill"),new PlaygroundProperty("polygon2","stroke","name","Polygon 2 Stroke"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_93 = new SampleInfo("Polyline","A sample that demonstrates polyline construction with stroke and fill. ","/Graphics/Shapes/Polyline","/ensemble/samples/graphics/shapes/polyline","ensemble.samples.graphics.shapes.polyline.PolylineApp","/ensemble/samples/graphics/shapes/polyline/preview.png",new String[]{"/ensemble/samples/graphics/shapes/polyline/PolylineApp.java",},new String[]{"javafx.scene.shape.Polyline","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/polyline/PolylineApp.java",new PlaygroundProperty[]{new PlaygroundProperty("polyline1","fill","name","Polyline 1 Fill"),new PlaygroundProperty("polyline1","stroke","name","Polyline 1 Stroke"),new PlaygroundProperty("polyline2","stroke","name","Polyline 2 Stroke"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_94 = new SampleInfo("Quad Curve","An example of how various settings affect a quadratic B??zier parametric curve. ","/Graphics/Shapes/Quad Curve","/ensemble/samples/graphics/shapes/quadcurve","ensemble.samples.graphics.shapes.quadcurve.QuadCurveApp","/ensemble/samples/graphics/shapes/quadcurve/preview.png",new String[]{"/ensemble/samples/graphics/shapes/quadcurve/QuadCurveApp.java",},new String[]{"javafx.scene.shape.QuadCurve","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/quadcurve/QuadCurveApp.java",new PlaygroundProperty[]{new PlaygroundProperty("quadCurve","fill","name","Cubic Curve Fill"),new PlaygroundProperty("quadCurve","stroke","name","Cubic Curve Stroke"),new PlaygroundProperty("quadCurve","startX","min","0","max","170","name","Cubic Curve Start X"),new PlaygroundProperty("quadCurve","startY","min","10","max","80","name","Cubic Curve Start Y"),new PlaygroundProperty("quadCurve","controlX","min","0","max","180","name","Cubic Curve Control X"),new PlaygroundProperty("quadCurve","controlY","min","0","max","90","name","Cubic Curve Control Y"),new PlaygroundProperty("quadCurve","endX","min","10","max","180","name","Cubic Curve End X"),new PlaygroundProperty("quadCurve","endY","min","10","max","80","name","Cubic Curve End Y"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_95 = new SampleInfo("Rectangle","A sample showing how various settings effect two rectangles. ","/Graphics/Shapes/Rectangle","/ensemble/samples/graphics/shapes/rectangle","ensemble.samples.graphics.shapes.rectangle.RectangleApp","/ensemble/samples/graphics/shapes/rectangle/preview.png",new String[]{"/ensemble/samples/graphics/shapes/rectangle/RectangleApp.java",},new String[]{"javafx.scene.shape.Rectangle","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/rectangle/RectangleApp.java",new PlaygroundProperty[]{new PlaygroundProperty("rect1","fill","name","Rectangle 1 Fill"),new PlaygroundProperty("rect1","width","min","10","max","50","name","Rectangle 1 Width"),new PlaygroundProperty("rect1","height","min","10","max","50","name","Rectangle 1 Height"),new PlaygroundProperty("rect1","arcWidth","min","0","max","50","name","Rectangle 1 Arc Width"),new PlaygroundProperty("rect1","arcHeight","min","0","max","50","name","Rectangle 1 Arc Height"),new PlaygroundProperty("rect2","stroke","name","Rectangle 2 Stroke"),new PlaygroundProperty("rect2","strokeWidth","min","1","max","5","name","Rectangle 2 Stroke Width"),new PlaygroundProperty("rect2","width","min","10","max","50","name","Rectangle 2 Width"),new PlaygroundProperty("rect2","height","min","10","max","50","name","Rectangle 2 Height"),new PlaygroundProperty("rect2","arcWidth","min","0","max","50","name","Rectangle 2 Arc Width"),new PlaygroundProperty("rect2","arcHeight","min","0","max","50","name","Rectangle 2 Arc Height"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_96 = new SampleInfo("3D Cubes","A sample that demonstrates an animated rotation of 3D cubes. ","/Graphics 3d/3D Cubes","/ensemble/samples/graphics3d/cube","ensemble.samples.graphics3d.cube.CubeApp","/ensemble/samples/graphics3d/cube/preview.png",new String[]{"/ensemble/samples/graphics3d/cube/Cube.java","/ensemble/samples/graphics3d/cube/CubeApp.java",},new String[]{"javafx.scene.PerspectiveCamera","javafx.scene.SubScene","javafx.scene.paint.Color","javafx.scene.transform.Rotate","javafx.scene.transform.Translate",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cube/CubeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,});
-    private static final SampleInfo SAMPLE_97 = new SampleInfo("3D Cube System","A sample that demonstrates an animated rotation of 3D cubes. When the application runs in standalone mode, the scene must be constructed with the depthBuffer argument set to true, and the root node must have depthTest set to true. ","/Graphics 3d/3D Cube System","/ensemble/samples/graphics3d/cubesystem","ensemble.samples.graphics3d.cubesystem.CubeSystemApp","/ensemble/samples/graphics3d/cubesystem/preview.png",new String[]{"/ensemble/samples/graphics3d/cubesystem/Cube.java","/ensemble/samples/graphics3d/cubesystem/CubeSystemApp.java","/ensemble/samples/graphics3d/cubesystem/Xform.java",},new String[]{"javafx.scene.transform.Rotate","javafx.scene.paint.Color","javafx.scene.shape.RectangleBuilder",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cubesystem/CubeSystemApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,});
-    private static final SampleInfo SAMPLE_98 = new SampleInfo("3D Box","A sample that shows a 3D box and uses a perspective camera for rendering the scene. ","/Graphics 3d/3D Box","/ensemble/samples/graphics3d/simple3dbox","ensemble.samples.graphics3d.simple3dbox.Simple3DBoxApp","/ensemble/samples/graphics3d/simple3dbox/preview.png",new String[]{"/ensemble/samples/graphics3d/simple3dbox/Simple3DBoxApp.java",},new String[]{"javafx.scene.paint.Color","javafx.scene.transform.Rotate","javafx.scene.transform.Translate",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/simple3dbox/Simple3DBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,});
-    private static final SampleInfo SAMPLE_99 = new SampleInfo("Xylophone","A sample that demonstrates a xylophone made of 3D cubes. ","/Graphics 3d/Xylophone","/ensemble/samples/graphics3d/xylophone","ensemble.samples.graphics3d.xylophone.XylophoneApp","/ensemble/samples/graphics3d/xylophone/preview.png",new String[]{"/ensemble/samples/graphics3d/xylophone/Cube.java","/ensemble/samples/graphics3d/xylophone/Xform.java","/ensemble/samples/shared-resources/Note1.wav","/ensemble/samples/shared-resources/Note2.wav","/ensemble/samples/shared-resources/Note3.wav","/ensemble/samples/shared-resources/Note4.wav","/ensemble/samples/shared-resources/Note5.wav","/ensemble/samples/shared-resources/Note6.wav","/ensemble/samples/shared-resources/Note7.wav","/ensemble/samples/shared-resources/Note8.wav","/ensemble/samples/graphics3d/xylophone/XylophoneApp.java",},new String[]{"javafx.scene.transform.Rotate","javafx.scene.paint.Color","javafx.scene.PerspectiveCamera","javafx.scene.shape.RectangleBuilder","javafx.scene.SubScene",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/xylophone/XylophoneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,});
-    private static final SampleInfo SAMPLE_100 = new SampleInfo("ChangeListener","A sample that demonstrates how to add or remove a change listener on a node (for example, a Rectangle node) for some property (for example, Rectangle.hover). Once you add a listener, the text field  shows the hover property change. ","/Language/Beans/ChangeListener","/ensemble/samples/language/beans/changelistener","ensemble.samples.language.beans.changelistener.ChangeListenerApp","/ensemble/samples/language/beans/changelistener/preview.png",new String[]{"/ensemble/samples/language/beans/changelistener/ChangeListenerApp.java",},new String[]{"javafx.beans.value.ChangeListener","javafx.beans.InvalidationListener","javafx.beans.value.ObservableValue",},new String[]{},new String[]{},"/ensemble/samples/language/beans/changelistener/ChangeListenerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_101 = new SampleInfo("String Binding","A sample that demonstrates how to bind text properties so the value of the bound property is updated automatically when the value of the original property is changed. ","/Language/Beans/String Binding","/ensemble/samples/language/beans/stringbinding","ensemble.samples.language.beans.stringbinding.StringBindingApp","/ensemble/samples/language/beans/stringbinding/preview.png",new String[]{"/ensemble/samples/language/beans/stringbinding/StringBindingApp.java",},new String[]{"javafx.beans.binding.StringBinding","javafx.scene.control.TextField","javafx.scene.control.Label",},new String[]{},new String[]{},"/ensemble/samples/language/beans/stringbinding/StringBindingApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_102 = new SampleInfo("ObservableList","A sample that demonstrates the ObservableList interface, which extends the java.util.List interface. Click the button to change an integer to a new random number in a random position in the list. Once you add a listener, the index of the changed number is displayed above the buttons. ","/Language/Collections/ObservableList","/ensemble/samples/language/collections/observablelist","ensemble.samples.language.collections.observablelist.ObservableListApp","/ensemble/samples/language/collections/observablelist/preview.png",new String[]{"/ensemble/samples/language/collections/observablelist/ObservableListApp.java",},new String[]{"javafx.beans.value.ChangeListener","javafx.collections.FXCollections","javafx.collections.ListChangeListener","javafx.collections.ObservableList",},new String[]{},new String[]{},"/ensemble/samples/language/collections/observablelist/ObservableListApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_103 = new SampleInfo("AnchorPane","A simple example of an AnchorPane layout. ","/Layout/AnchorPane","/ensemble/samples/layout/anchorpane","ensemble.samples.layout.anchorpane.AnchorPaneApp","/ensemble/samples/layout/anchorpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/anchorpane/AnchorPaneApp.java",},new String[]{"javafx.scene.layout.AnchorPane","javafx.collections.ObservableList",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/layout/anchorpane/AnchorPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_104 = new SampleInfo("BorderPane","An example of  a BorderPane layout, with placement of children in the top, left, center, right, and bottom positions. ","/Layout/BorderPane","/ensemble/samples/layout/borderpane","ensemble.samples.layout.borderpane.BorderPaneApp","/ensemble/samples/layout/borderpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/borderpane/BorderPaneApp.java",},new String[]{"javafx.scene.layout.BorderPane",},new String[]{},new String[]{"/Controls/Text/Simple Label","/Graphics/Images/Image Creation",},"/ensemble/samples/layout/borderpane/BorderPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_105 = new SampleInfo("FlowPane","A simple example of a FlowPane layout. ","/Layout/FlowPane","/ensemble/samples/layout/flowpane","ensemble.samples.layout.flowpane.FlowPaneApp","/ensemble/samples/layout/flowpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/shared-resources/icon-68x68.png","/ensemble/samples/shared-resources/icon-88x88.png","/ensemble/samples/layout/flowpane/FlowPaneApp.java",},new String[]{"javafx.scene.layout.FlowPane",},new String[]{},new String[]{"/Graphics/Images/Image Creation",},"/ensemble/samples/layout/flowpane/FlowPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_106 = new SampleInfo("GridPane","An example of a GridPane layout. There is more than one approach to using a GridPane. The code can specify which rows and/or columns should contain the content. Alternatively, the code can alter the constraints of the rows and/or columns themselves, either by specifying the preferred minimum or  maximum heights or widths, or by specifying the percentage of the GridPane that belongs to certain rows or columns.  Note that grid lines can be made visible to help in debugging. ","/Layout/GridPane","/ensemble/samples/layout/gridpane","ensemble.samples.layout.gridpane.GridPaneApp","/ensemble/samples/layout/gridpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/gridpane/GridPaneApp.java",},new String[]{"javafx.scene.layout.GridPane",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/layout/gridpane/GridPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_107 = new SampleInfo("HBox","A simple example of an HBox layout. ","/Layout/HBox","/ensemble/samples/layout/hbox","ensemble.samples.layout.hbox.HBoxApp","/ensemble/samples/layout/hbox/preview.png",new String[]{"/ensemble/samples/layout/hbox/HBoxApp.java",},new String[]{"javafx.scene.layout.HBox",},new String[]{},new String[]{"/Controls/Text/Text Field",},"/ensemble/samples/layout/hbox/HBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_108 = new SampleInfo("StackPane","A simple example of a StackPane layout. ","/Layout/StackPane","/ensemble/samples/layout/stackpane","ensemble.samples.layout.stackpane.StackPaneApp","/ensemble/samples/layout/stackpane/preview.png",new String[]{"/ensemble/samples/layout/stackpane/StackPaneApp.java",},new String[]{"javafx.scene.layout.StackPane",},new String[]{},new String[]{},"/ensemble/samples/layout/stackpane/StackPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_109 = new SampleInfo("TilePane","An example of a TilePane layout. ","/Layout/TilePane","/ensemble/samples/layout/tilepane","ensemble.samples.layout.tilepane.TilePaneApp","/ensemble/samples/layout/tilepane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/tilepane/TilePaneApp.java",},new String[]{"javafx.scene.layout.TilePane",},new String[]{},new String[]{"/Graphics/Images/Image Creation",},"/ensemble/samples/layout/tilepane/TilePaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_110 = new SampleInfo("VBox","A simple example of a VBox layout. ","/Layout/VBox","/ensemble/samples/layout/vbox","ensemble.samples.layout.vbox.VBoxApp","/ensemble/samples/layout/vbox/preview.png",new String[]{"/ensemble/samples/layout/vbox/VBoxApp.java",},new String[]{"javafx.scene.layout.VBox",},new String[]{},new String[]{},"/ensemble/samples/layout/vbox/VBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_111 = new SampleInfo("Advanced Media","An advanced media player with controls for play/pause, seek, and volume. ","/Media/Advanced Media","/ensemble/samples/media/advancedmedia","ensemble.samples.media.advancedmedia.AdvancedMediaApp","/ensemble/samples/media/advancedmedia/preview.png",new String[]{"/ensemble/samples/media/advancedmedia/AdvancedMediaApp.java","/ensemble/samples/shared-resources/playbutton.png","/ensemble/samples/shared-resources/pausebutton.png","/ensemble/samples/media/advancedmedia/MediaControl.java",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Alpha Media Player","/Media/Overlay Media Player","/Media/Streaming Media Player",},"/ensemble/samples/media/advancedmedia/AdvancedMediaApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    private static final SampleInfo SAMPLE_112 = new SampleInfo("Alpha Media Player","An alpha media player with 2 different media views and alpha channels. ","/Media/Alpha Media Player","/ensemble/samples/media/alphamediaplayer","ensemble.samples.media.alphamediaplayer.AlphaMediaPlayerApp","/ensemble/samples/media/alphamediaplayer/preview.png",new String[]{"/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayerApp.java","/ensemble/samples/media/alphamediaplayer/PlanetaryPlayerPane.java","/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayer.css",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Advanced Media","/Media/Overlay Media Player","/Media/Streaming Media Player",},"/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayerApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"arthPos","min","-100","max","100","name","Arth Position"),new PlaygroundProperty(null,"fierPos","min","-100","max","100","name","Fier Position"),new PlaygroundProperty(null,"arthRate","min","0.1","max","1","name","Arth Rate"),new PlaygroundProperty(null,"fierRate","min","0.1","max","1","name","Fier Rate"),},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    private static final SampleInfo SAMPLE_113 = new SampleInfo("Audio Clip","A sample that demonstrates the basics of AudioClips. ","/Media/Audio Clip","/ensemble/samples/media/audioclip","ensemble.samples.media.audioclip.AudioClipApp","/ensemble/samples/media/audioclip/preview.png",new String[]{"/ensemble/samples/shared-resources/Note1.wav","/ensemble/samples/shared-resources/Note2.wav","/ensemble/samples/shared-resources/Note3.wav","/ensemble/samples/shared-resources/Note4.wav","/ensemble/samples/shared-resources/Note5.wav","/ensemble/samples/shared-resources/Note6.wav","/ensemble/samples/shared-resources/Note7.wav","/ensemble/samples/shared-resources/Note8.wav","/ensemble/samples/media/audioclip/AudioClipApp.java",},new String[]{"javafx.scene.media.AudioClip",},new String[]{},new String[]{"/Graphics3d/Xylophone",},"/ensemble/samples/media/audioclip/AudioClipApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    private static final SampleInfo SAMPLE_114 = new SampleInfo("Overlay Media Player","A media player with controls for play, pause, stop, seek, and volume. This media player also demonstrates overlaying the player controls on top of the media. ","/Media/Overlay Media Player","/ensemble/samples/media/overlaymediaplayer","ensemble.samples.media.overlaymediaplayer.OverlayMediaPlayerApp","/ensemble/samples/media/overlaymediaplayer/preview.png",new String[]{"/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayerApp.java","/ensemble/samples/media/overlaymediaplayer/PlayerPane.java","/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayer.css",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Advanced Media","/Media/Alpha Media Player","/Media/Streaming Media Player",},"/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    private static final SampleInfo SAMPLE_115 = new SampleInfo("Streaming Media Player","A media player with controls for play, pause, stop, seek, and volume. This media player is playing media via HTTP Live Streaming, also known as HLS. ","/Media/Streaming Media Player","/ensemble/samples/media/streamingmediaplayer","ensemble.samples.media.streamingmediaplayer.StreamingMediaPlayerApp","/ensemble/samples/media/streamingmediaplayer/preview.png",new String[]{"/ensemble/samples/media/streamingmediaplayer/PlayerPane.java","/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayerApp.java","/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayer.css",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Advanced Media","/Media/Alpha Media Player","/Media/Overlay Media Player",},"/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    private static final SampleInfo SAMPLE_116 = new SampleInfo("Cursor","A sample that demonstrates changing the cursor icon. ","/Scenegraph/Events/Cursor","/ensemble/samples/scenegraph/events/cursor","ensemble.samples.scenegraph.events.cursor.CursorApp","/ensemble/samples/scenegraph/events/cursor/preview.png",new String[]{"/ensemble/samples/scenegraph/events/cursor/CursorApp.java",},new String[]{"javafx.scene.Cursor",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/cursor/CursorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_117 = new SampleInfo("Gesture Event","A sample that demonstrates various gesture events and their usage. Scroll the rectangle or the background behind the rectangle to move the rectangle itself. Similarly, rotate, zoom in, or zoom out the rectangle. All events are logged to the console. ","/Scenegraph/Events/Gesture Event","/ensemble/samples/scenegraph/events/gestureevent","ensemble.samples.scenegraph.events.gestureevent.GestureEventApp","/ensemble/samples/scenegraph/events/gestureevent/preview.png",new String[]{"/ensemble/samples/scenegraph/events/gestureevent/GestureEventApp.java",},new String[]{"javafx.collections.ObservableList","javafx.scene.Cursor","javafx.scene.input.GestureEvent","javafx.scene.input.RotateEvent","javafx.scene.input.ScrollEvent","javafx.scene.input.SwipeEvent","javafx.scene.input.ZoomEvent","javafx.event.EventHandler",},new String[]{},new String[]{"/Scenegraph/Events/MouseEvent",},"/ensemble/samples/scenegraph/events/gestureevent/GestureEventApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_118 = new SampleInfo("KeyEvent","A sample that demonstrates various key events and their usage. Type in the text box to view the triggered events: key pressed, key typed and key released. Pressing the Shift, Ctrl, and Alt keys also trigger events. ","/Scenegraph/Events/KeyEvent","/ensemble/samples/scenegraph/events/keyevent","ensemble.samples.scenegraph.events.keyevent.KeyEventApp","/ensemble/samples/scenegraph/events/keyevent/preview.png",new String[]{"/ensemble/samples/scenegraph/events/keyevent/KeyEventApp.java",},new String[]{"javafx.scene.input.KeyCode","javafx.scene.input.KeyEvent","javafx.event.EventHandler",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/keyevent/KeyEventApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_119 = new SampleInfo("Key Stroke Motion","An example of animation generated from key events. Click the grey area to give it focus and try typing letters. ","/Scenegraph/Events/Key Stroke Motion","/ensemble/samples/scenegraph/events/keystrokemotion","ensemble.samples.scenegraph.events.keystrokemotion.KeyStrokeMotionApp","/ensemble/samples/scenegraph/events/keystrokemotion/preview.png",new String[]{"/ensemble/samples/scenegraph/events/keystrokemotion/KeyStrokeMotionApp.java","/ensemble/samples/scenegraph/events/keystrokemotion/LettersPane.java",},new String[]{"javafx.scene.input.KeyEvent","javafx.animation.Interpolator",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/keystrokemotion/KeyStrokeMotionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_120 = new SampleInfo("MouseEvent","A sample that demonstrates various mouse and scroll events and their usage. Click the circles and drag them across the screen. Scroll the whole screen. All events are logged to the console. ","/Scenegraph/Events/MouseEvent","/ensemble/samples/scenegraph/events/mouseevent","ensemble.samples.scenegraph.events.mouseevent.MouseEventApp","/ensemble/samples/scenegraph/events/mouseevent/preview.png",new String[]{"/ensemble/samples/scenegraph/events/mouseevent/MouseEventApp.java",},new String[]{"javafx.scene.Cursor","javafx.scene.input.MouseEvent","javafx.event.EventHandler",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/mouseevent/MouseEventApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_121 = new SampleInfo("Multi-Touch","A sample that demonstrates multi-touch support. You can zoom in and out of the images and also rotate the images with multi-touch. ","/Scenegraph/Events/Multi-Touch","/ensemble/samples/scenegraph/events/multitouch","ensemble.samples.scenegraph.events.multitouch.MultiTouchApp","/ensemble/samples/scenegraph/events/multitouch/preview.png",new String[]{"/ensemble/samples/scenegraph/events/multitouch/MultiTouchApp.java","/ensemble/samples/scenegraph/events/multitouch/MultiTouchImageView.java","/ensemble/samples/shared-resources/warning.png","/ensemble/samples/shared-resources/Animal1.jpg","/ensemble/samples/shared-resources/Animal2.jpg","/ensemble/samples/shared-resources/Animal3.jpg","/ensemble/samples/scenegraph/events/multitouch/MultiTouchPane.java",},new String[]{"javafx.scene.input.MouseEvent","javafx.event.EventHandler","javafx.scene.input.RotateEvent","javafx.scene.input.ZoomEvent",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/multitouch/MultiTouchApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.INPUT_MULTITOUCH,});
-    private static final SampleInfo SAMPLE_122 = new SampleInfo("Custom Node","A sample that demonstrates how to create a custom node by extending the Parent class. ","/Scenegraph/Node/Custom Node","/ensemble/samples/scenegraph/node/customnode","ensemble.samples.scenegraph.node.customnode.CustomNodeApp","/ensemble/samples/scenegraph/node/customnode/preview.png",new String[]{"/ensemble/samples/scenegraph/node/customnode/CustomNodeApp.java","/ensemble/samples/scenegraph/node/customnode/MyNode.java",},new String[]{"javafx.scene.Parent","javafx.scene.Node",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/node/customnode/CustomNodeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_123 = new SampleInfo("Node Properties","A sample that demonstrates some properties of nodes. Use the radio buttons to send any of the rectangles to the front or back. Use the controls to change opacity or horizontal position. ","/Scenegraph/Node/Node Properties","/ensemble/samples/scenegraph/node/nodeproperties","ensemble.samples.scenegraph.node.nodeproperties.NodePropertiesApp","/ensemble/samples/scenegraph/node/nodeproperties/preview.png",new String[]{"/ensemble/samples/scenegraph/node/nodeproperties/NodePropertiesApp.java",},new String[]{"javafx.scene.Node",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/node/nodeproperties/NodePropertiesApp.java",new PlaygroundProperty[]{new PlaygroundProperty("rectA","translateX","min","0","max","50","name","Rectangle A translate X"),new PlaygroundProperty("rectB","translateX","min","0","max","50","name","Rectangle B translate X"),new PlaygroundProperty("rectC","translateX","min","0","max","50","name","Rectangle C translate X"),new PlaygroundProperty("rectA","opacity","min","0","max","1","name","Rectangle A Opacity"),new PlaygroundProperty("rectB","opacity","min","0","max","1","name","Rectangle B Opacity"),new PlaygroundProperty("rectC","opacity","min","0","max","1","name","Rectangle C Opacity"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_124 = new SampleInfo("Advanced Stage","A sample with a control that creates a transparent stage that is centered on your desktop. You can drag the stage with your mouse or use the scene controls to minimize or close it. With a transparent stage, you must add your own event handlers to perform these actions. ","/Scenegraph/Stage/Advanced Stage","/ensemble/samples/scenegraph/stage/advancedstage","ensemble.samples.scenegraph.stage.advancedstage.AdvancedStageApp","/ensemble/samples/scenegraph/stage/advancedstage/preview.png",new String[]{"/ensemble/samples/scenegraph/stage/advancedstage/AdvancedStageApp.java",},new String[]{"javafx.stage.Stage","javafx.scene.Scene","javafx.stage.StageStyle","javafx.application.Platform",},new String[]{},new String[]{"/Scenegraph/Stage/Stage",},"/ensemble/samples/scenegraph/stage/advancedstage/AdvancedStageApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_125 = new SampleInfo("Stage","A sample with a control that creates a decorated stage that is centered on your desktop. ","/Scenegraph/Stage/Stage","/ensemble/samples/scenegraph/stage/stage","ensemble.samples.scenegraph.stage.stage.StageApp","/ensemble/samples/scenegraph/stage/stage/preview.png",new String[]{"/ensemble/samples/scenegraph/stage/stage/StageApp.java",},new String[]{"javafx.stage.Stage","javafx.scene.Scene",},new String[]{},new String[]{"/Scenegraph/Stage/Advanced Stage",},"/ensemble/samples/scenegraph/stage/stage/StageApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_126 = new SampleInfo("SwingInterop","A sample that invokes SwingInterop to run in a separate JVM.  SwingInterop shows how to embed JavaFX components, like Chart and WebView components, in a Swing application. ","/Swing/SwingInterop","/ensemble/samples/swing/swinginterop","ensemble.samples.swing.swinginterop.SwingInteropApp","/ensemble/samples/swing/swinginterop/preview.png",new String[]{"/ensemble/samples/swing/swinginterop/ProcessListener.java","/ensemble/samples/swing/swinginterop/SampleTableModel.java","/ensemble/samples/swing/swinginterop/SwingInterop.java","/ensemble/samples/swing/swinginterop/SwingInteropApp.java","/ensemble/samples/swing/swinginterop/SwingInteropService.java","/ensemble/samples/swing/swinginterop/SwingInteropTask.java",},new String[]{"javafx.application.Application","javafx.stage.Stage","javafx.scene.Scene","javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.Chart","javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart","javafx.scene.web.WebEngine","javafx.scene.web.WebView",},new String[]{},new String[]{},"/ensemble/samples/swing/swinginterop/SwingInteropApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_127 = new SampleInfo("Bidi","Demonstrates bi-directional text. ","/Text/Bidi","/ensemble/samples/text/bidi","ensemble.samples.text.bidi.BidiApp","/ensemble/samples/text/bidi/preview.png",new String[]{"/ensemble/samples/text/bidi/BidiApp.java",},new String[]{"javafx.scene.text.Text","javafx.scene.text.TextFlow",},new String[]{},new String[]{},"/ensemble/samples/text/bidi/BidiApp.java",new PlaygroundProperty[]{new PlaygroundProperty("text1","strikethrough","name","He said... strikethrough"),new PlaygroundProperty("text1","underline","name","He said... underline"),new PlaygroundProperty("text1","fill","name","He said... fill"),new PlaygroundProperty("text1","rotate","min","-180","max","180","name","He said... rotate"),new PlaygroundProperty("text1","translateX","name","He said... translateX"),new PlaygroundProperty("text1","translateY","name","He said... translateY"),new PlaygroundProperty("text2","strikethrough","name","He said... strikethrough"),new PlaygroundProperty("text2","underline","name","...to me. underline"),new PlaygroundProperty("text2","fill","name","...to me. fill"),new PlaygroundProperty("text2","rotate","min","-180","max","180","name","...to me. rotate"),new PlaygroundProperty("text2","translateX","name","...to me. translateX"),new PlaygroundProperty("text2","translateY","name","...to me. translateY"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_128 = new SampleInfo("TextFlow","Demonstrates some simple uses of rich text and TextFlow.The first example shows use of text with different fonts in a TextFlow. Use the Playground to experiment with different Text properties. The second example shows TextFlow and embedded objects. ","/Text/TextFlow","/ensemble/samples/text/textflow","ensemble.samples.text.textflow.TextFlowApp","/ensemble/samples/text/textflow/preview.png",new String[]{"/ensemble/samples/shared-resources/oracle.png","/ensemble/samples/text/textflow/TextFlowApp.java",},new String[]{"javafx.scene.text.Font","javafx.scene.text.FontPosture","javafx.scene.text.Text","javafx.scene.text.TextFlow",},new String[]{},new String[]{},"/ensemble/samples/text/textflow/TextFlowApp.java",new PlaygroundProperty[]{new PlaygroundProperty("textHello","strikethrough","name","Hello strikethrough"),new PlaygroundProperty("textHello","underline","name","Hello underline"),new PlaygroundProperty("textHello","fill","name","Hello fill"),new PlaygroundProperty("textHello","rotate","min","-180","max","180","name","Hello rotate"),new PlaygroundProperty("textHello","translateX","name","Hello translateX"),new PlaygroundProperty("textHello","translateY","name","Hello translateY"),new PlaygroundProperty("textBold","strikethrough","name","Bold strikethrough"),new PlaygroundProperty("textBold","underline","name","Bold underline"),new PlaygroundProperty("textBold","fill","name","Bold fill"),new PlaygroundProperty("textBold","rotate","min","-180","max","180","name","Bold rotate"),new PlaygroundProperty("textBold","translateX","name","Bold translateX"),new PlaygroundProperty("textBold","translateY","name","Bold translateY"),new PlaygroundProperty("textWorld","strikethrough","name","World strikethrough"),new PlaygroundProperty("textWorld","underline","name","World underline"),new PlaygroundProperty("textWorld","fill","name","World fill"),new PlaygroundProperty("textWorld","rotate","min","-180","max","180","name","World rotate"),new PlaygroundProperty("textWorld","translateX","name","World translateX"),new PlaygroundProperty("textWorld","translateY","name","World translateY"),},new ConditionalFeature[]{});
-    private static final SampleInfo SAMPLE_129 = new SampleInfo("HTML Editor","A sample that demonstrates the HTML Editor. You can make changes to the example text, and the resulting generated HTML is displayed. ","/Web/HTML Editor","/ensemble/samples/web/htmleditor","ensemble.samples.web.htmleditor.HTMLEditorApp","/ensemble/samples/web/htmleditor/preview.png",new String[]{"/ensemble/samples/web/htmleditor/HTMLEditorApp.java",},new String[]{"javafx.scene.web.HTMLEditor",},new String[]{},new String[]{"controls/text/SimpleLabel",},"/ensemble/samples/web/htmleditor/HTMLEditorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    private static final SampleInfo SAMPLE_130 = new SampleInfo("WebView","A sample that demonstrates a WebView object accessing a web page. ","/Web/WebView","/ensemble/samples/web/webview","ensemble.samples.web.webview.WebViewApp","/ensemble/samples/web/webview/preview.png",new String[]{"/ensemble/samples/web/webview/WebViewApp.java",},new String[]{"javafx.scene.web.WebView","javafx.scene.web.WebEngine",},new String[]{},new String[]{},"/ensemble/samples/web/webview/WebViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
-    public static final SampleCategory ROOT = new SampleCategory("ROOT",null,null,new SampleCategory[]{new SampleCategory("Animation",new SampleInfo[]{SAMPLE_0,},new SampleInfo[]{SAMPLE_0,SAMPLE_1,SAMPLE_2,SAMPLE_3,SAMPLE_4,SAMPLE_5,SAMPLE_6,SAMPLE_7,SAMPLE_8,SAMPLE_9,SAMPLE_10,SAMPLE_11,SAMPLE_12,},new SampleCategory[]{new SampleCategory("Timeline",new SampleInfo[]{SAMPLE_1,SAMPLE_2,},null,null),new SampleCategory("Transitions",new SampleInfo[]{SAMPLE_3,SAMPLE_4,SAMPLE_5,SAMPLE_6,SAMPLE_7,SAMPLE_8,SAMPLE_9,SAMPLE_10,SAMPLE_11,SAMPLE_12,},null,null),}),new SampleCategory("Canvas",new SampleInfo[]{SAMPLE_13,},new SampleInfo[]{SAMPLE_13,},null),new SampleCategory("Charts",null,new SampleInfo[]{SAMPLE_14,SAMPLE_15,SAMPLE_16,SAMPLE_17,SAMPLE_18,SAMPLE_19,SAMPLE_20,SAMPLE_21,SAMPLE_22,SAMPLE_23,SAMPLE_24,SAMPLE_25,SAMPLE_26,SAMPLE_27,SAMPLE_28,SAMPLE_29,SAMPLE_30,SAMPLE_31,},new SampleCategory[]{new SampleCategory("Area",new SampleInfo[]{SAMPLE_14,SAMPLE_15,SAMPLE_16,SAMPLE_17,},null,null),new SampleCategory("Bar",new SampleInfo[]{SAMPLE_18,SAMPLE_19,SAMPLE_20,SAMPLE_21,SAMPLE_22,},null,null),new SampleCategory("Bubble",new SampleInfo[]{SAMPLE_23,},null,null),new SampleCategory("Custom",new SampleInfo[]{SAMPLE_24,},null,null),new SampleCategory("Line",new SampleInfo[]{SAMPLE_25,SAMPLE_26,SAMPLE_27,},null,null),new SampleCategory("Pie",new SampleInfo[]{SAMPLE_28,SAMPLE_29,},null,null),new SampleCategory("Scatter",new SampleInfo[]{SAMPLE_30,SAMPLE_31,},null,null),}),new SampleCategory("Concurrency",new SampleInfo[]{SAMPLE_32,SAMPLE_33,},new SampleInfo[]{SAMPLE_32,SAMPLE_33,},null),new SampleCategory("Controls",new SampleInfo[]{SAMPLE_34,SAMPLE_35,SAMPLE_36,SAMPLE_37,SAMPLE_38,SAMPLE_39,SAMPLE_40,SAMPLE_41,SAMPLE_42,SAMPLE_43,SAMPLE_44,SAMPLE_45,SAMPLE_46,SAMPLE_47,},new SampleInfo[]{SAMPLE_34,SAMPLE_48,SAMPLE_49,SAMPLE_50,SAMPLE_35,SAMPLE_36,SAMPLE_37,SAMPLE_38,SAMPLE_39,SAMPLE_51,SAMPLE_52,SAMPLE_53,SAMPLE_40,SAMPLE_41,SAMPLE_42,SAMPLE_43,SAMPLE_44,SAMPLE_45,SAMPLE_54,SAMPLE_55,SAMPLE_56,SAMPLE_57,SAMPLE_58,SAMPLE_59,SAMPLE_60,SAMPLE_61,SAMPLE_62,SAMPLE_63,SAMPLE_46,SAMPLE_64,SAMPLE_65,SAMPLE_47,},new SampleCategory[]{new SampleCategory("Button",new SampleInfo[]{SAMPLE_48,SAMPLE_49,SAMPLE_50,},null,null),new SampleCategory("Listview",new SampleInfo[]{SAMPLE_51,SAMPLE_52,SAMPLE_53,},null,null),new SampleCategory("Splitpane",new SampleInfo[]{SAMPLE_54,},null,null),new SampleCategory("Tab",new SampleInfo[]{SAMPLE_55,},null,null),new SampleCategory("Table",new SampleInfo[]{SAMPLE_56,SAMPLE_57,},null,null),new SampleCategory("Text",new SampleInfo[]{SAMPLE_58,SAMPLE_59,SAMPLE_60,SAMPLE_61,SAMPLE_62,SAMPLE_63,},null,null),new SampleCategory("Toolbar",new SampleInfo[]{SAMPLE_64,SAMPLE_65,},null,null),}),new SampleCategory("Fxml",new SampleInfo[]{SAMPLE_66,},new SampleInfo[]{SAMPLE_66,},null),new SampleCategory("Graphics",new SampleInfo[]{SAMPLE_67,SAMPLE_68,SAMPLE_69,SAMPLE_70,SAMPLE_71,SAMPLE_72,SAMPLE_73,SAMPLE_74,},new SampleInfo[]{SAMPLE_67,SAMPLE_68,SAMPLE_69,SAMPLE_70,SAMPLE_71,SAMPLE_72,SAMPLE_75,SAMPLE_76,SAMPLE_77,SAMPLE_78,SAMPLE_79,SAMPLE_80,SAMPLE_81,SAMPLE_82,SAMPLE_83,SAMPLE_84,SAMPLE_85,SAMPLE_73,SAMPLE_86,SAMPLE_87,SAMPLE_88,SAMPLE_89,SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,SAMPLE_94,SAMPLE_95,SAMPLE_74,},new SampleCategory[]{new SampleCategory("Effects",new SampleInfo[]{SAMPLE_75,SAMPLE_76,SAMPLE_77,SAMPLE_78,SAMPLE_79,},null,null),new SampleCategory("Images",new SampleInfo[]{SAMPLE_80,SAMPLE_81,SAMPLE_82,},null,null),new SampleCategory("Paints",new SampleInfo[]{SAMPLE_83,SAMPLE_84,SAMPLE_85,},null,null),new SampleCategory("Shapes",new SampleInfo[]{SAMPLE_86,SAMPLE_87,SAMPLE_88,SAMPLE_89,SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,SAMPLE_94,SAMPLE_95,},null,null),}),new SampleCategory("Graphics 3d",new SampleInfo[]{SAMPLE_96,SAMPLE_97,SAMPLE_98,SAMPLE_99,},new SampleInfo[]{SAMPLE_96,SAMPLE_97,SAMPLE_98,SAMPLE_99,},null),new SampleCategory("Language",null,new SampleInfo[]{SAMPLE_100,SAMPLE_101,SAMPLE_102,},new SampleCategory[]{new SampleCategory("Beans",new SampleInfo[]{SAMPLE_100,SAMPLE_101,},null,null),new SampleCategory("Collections",new SampleInfo[]{SAMPLE_102,},null,null),}),new SampleCategory("Layout",new SampleInfo[]{SAMPLE_103,SAMPLE_104,SAMPLE_105,SAMPLE_106,SAMPLE_107,SAMPLE_108,SAMPLE_109,SAMPLE_110,},new SampleInfo[]{SAMPLE_103,SAMPLE_104,SAMPLE_105,SAMPLE_106,SAMPLE_107,SAMPLE_108,SAMPLE_109,SAMPLE_110,},null),new SampleCategory("Media",new SampleInfo[]{SAMPLE_111,SAMPLE_112,SAMPLE_113,SAMPLE_114,SAMPLE_115,},new SampleInfo[]{SAMPLE_111,SAMPLE_112,SAMPLE_113,SAMPLE_114,SAMPLE_115,},null),new SampleCategory("Scenegraph",null,new SampleInfo[]{SAMPLE_116,SAMPLE_117,SAMPLE_118,SAMPLE_119,SAMPLE_120,SAMPLE_121,SAMPLE_122,SAMPLE_123,SAMPLE_124,SAMPLE_125,},new SampleCategory[]{new SampleCategory("Events",new SampleInfo[]{SAMPLE_116,SAMPLE_117,SAMPLE_118,SAMPLE_119,SAMPLE_120,SAMPLE_121,},null,null),new SampleCategory("Node",new SampleInfo[]{SAMPLE_122,SAMPLE_123,},null,null),new SampleCategory("Stage",new SampleInfo[]{SAMPLE_124,SAMPLE_125,},null,null),}),new SampleCategory("Swing",new SampleInfo[]{SAMPLE_126,},new SampleInfo[]{SAMPLE_126,},null),new SampleCategory("Text",new SampleInfo[]{SAMPLE_127,SAMPLE_128,},new SampleInfo[]{SAMPLE_127,SAMPLE_128,},null),new SampleCategory("Web",new SampleInfo[]{SAMPLE_129,SAMPLE_130,},new SampleInfo[]{SAMPLE_129,SAMPLE_130,},null),});
-    public static final SampleInfo[] HIGHLIGHTS = new SampleInfo[]{SAMPLE_24,SAMPLE_113,};
-    private static final HashMap<String,SampleInfo[]> DOCS_URL_TO_SAMPLE = new HashMap<String,SampleInfo[]>(174);
-    static {
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.PauseTransition",new SampleInfo[]{SAMPLE_7,});
-        DOCS_URL_TO_SAMPLE.put("java.io.InputStream",new SampleInfo[]{SAMPLE_66,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.GridPane",new SampleInfo[]{SAMPLE_106,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.InvalidationListener",new SampleInfo[]{SAMPLE_100,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.DateCell",new SampleInfo[]{SAMPLE_38,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.RadialGradient",new SampleInfo[]{SAMPLE_85,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ClosePath",new SampleInfo[]{SAMPLE_91,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.RadioButton",new SampleInfo[]{SAMPLE_44,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Scene",new SampleInfo[]{SAMPLE_124,SAMPLE_125,SAMPLE_69,SAMPLE_67,SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurve",new SampleInfo[]{SAMPLE_88,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Lighting",new SampleInfo[]{SAMPLE_74,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Glow",new SampleInfo[]{SAMPLE_71,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.BorderPane",new SampleInfo[]{SAMPLE_104,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.DropShadow",new SampleInfo[]{SAMPLE_73,SAMPLE_75,SAMPLE_74,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TextField",new SampleInfo[]{SAMPLE_60,SAMPLE_101,SAMPLE_63,SAMPLE_62,});
-        DOCS_URL_TO_SAMPLE.put("javafx.geometry.VPos",new SampleInfo[]{SAMPLE_69,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Rectangle2D",new SampleInfo[]{SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Color",new SampleInfo[]{SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,SAMPLE_99,SAMPLE_86,SAMPLE_98,SAMPLE_85,SAMPLE_84,SAMPLE_83,SAMPLE_95,SAMPLE_94,SAMPLE_89,SAMPLE_97,SAMPLE_69,SAMPLE_88,SAMPLE_96,SAMPLE_87,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.collections.FXCollections",new SampleInfo[]{SAMPLE_102,SAMPLE_32,SAMPLE_33,});
-        DOCS_URL_TO_SAMPLE.put("javafx.application.Platform",new SampleInfo[]{SAMPLE_124,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TabPane",new SampleInfo[]{SAMPLE_55,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToolBar",new SampleInfo[]{SAMPLE_65,SAMPLE_64,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.MediaPlayer",new SampleInfo[]{SAMPLE_114,SAMPLE_112,SAMPLE_111,SAMPLE_18,SAMPLE_115,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.collections.ObservableList",new SampleInfo[]{SAMPLE_68,SAMPLE_103,SAMPLE_102,SAMPLE_117,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressIndicator",new SampleInfo[]{SAMPLE_32,SAMPLE_33,SAMPLE_43,});
-        DOCS_URL_TO_SAMPLE.put("java.util.List",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.GaussianBlur",new SampleInfo[]{SAMPLE_74,SAMPLE_76,});
-        DOCS_URL_TO_SAMPLE.put("javafx.fxml.Initializable",new SampleInfo[]{SAMPLE_66,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.LineTo",new SampleInfo[]{SAMPLE_91,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.TilePane",new SampleInfo[]{SAMPLE_109,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.SequentialTransition",new SampleInfo[]{SAMPLE_10,SAMPLE_30,});
-        DOCS_URL_TO_SAMPLE.put("javafx.concurrent.Task",new SampleInfo[]{SAMPLE_32,SAMPLE_33,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Translate",new SampleInfo[]{SAMPLE_98,SAMPLE_96,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.StackPane",new SampleInfo[]{SAMPLE_108,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.PieChart",new SampleInfo[]{SAMPLE_29,SAMPLE_28,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.NumberAxis",new SampleInfo[]{SAMPLE_22,SAMPLE_21,SAMPLE_24,SAMPLE_23,SAMPLE_20,SAMPLE_19,SAMPLE_18,SAMPLE_26,SAMPLE_17,SAMPLE_16,SAMPLE_25,SAMPLE_15,SAMPLE_27,SAMPLE_14,SAMPLE_30,SAMPLE_31,SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeView",new SampleInfo[]{SAMPLE_47,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuBar",new SampleInfo[]{SAMPLE_40,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.ParallelTransition",new SampleInfo[]{SAMPLE_5,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ObservableValue",new SampleInfo[]{SAMPLE_100,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Shear",new SampleInfo[]{SAMPLE_71,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.SubScene",new SampleInfo[]{SAMPLE_99,SAMPLE_96,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.Media",new SampleInfo[]{SAMPLE_114,SAMPLE_112,SAMPLE_111,SAMPLE_18,SAMPLE_115,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.XYChart",new SampleInfo[]{SAMPLE_24,SAMPLE_18,SAMPLE_126,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Hyperlink",new SampleInfo[]{SAMPLE_39,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Group",new SampleInfo[]{SAMPLE_13,SAMPLE_74,SAMPLE_69,SAMPLE_67,SAMPLE_70,});
-        DOCS_URL_TO_SAMPLE.put("javafx.event.ActionEvent",new SampleInfo[]{SAMPLE_2,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ChoiceBox",new SampleInfo[]{SAMPLE_36,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableCell",new SampleInfo[]{SAMPLE_56,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polyline",new SampleInfo[]{SAMPLE_93,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.SwipeEvent",new SampleInfo[]{SAMPLE_117,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.PerspectiveTransform",new SampleInfo[]{SAMPLE_72,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ListView",new SampleInfo[]{SAMPLE_51,SAMPLE_52,SAMPLE_53,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Line",new SampleInfo[]{SAMPLE_90,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ScrollBar",new SampleInfo[]{SAMPLE_72,SAMPLE_45,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableView",new SampleInfo[]{SAMPLE_56,SAMPLE_57,SAMPLE_32,SAMPLE_33,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.GestureEvent",new SampleInfo[]{SAMPLE_117,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.ScrollEvent",new SampleInfo[]{SAMPLE_117,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.CheckBox",new SampleInfo[]{SAMPLE_35,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyCode",new SampleInfo[]{SAMPLE_118,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Ellipse",new SampleInfo[]{SAMPLE_74,SAMPLE_89,});
-        DOCS_URL_TO_SAMPLE.put("java.util.HashMap",new SampleInfo[]{SAMPLE_66,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.PerspectiveCamera",new SampleInfo[]{SAMPLE_99,SAMPLE_96,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Menu",new SampleInfo[]{SAMPLE_40,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioClip",new SampleInfo[]{SAMPLE_113,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TabBuilder",new SampleInfo[]{SAMPLE_55,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TablePosition",new SampleInfo[]{SAMPLE_56,SAMPLE_57,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BarChart",new SampleInfo[]{SAMPLE_21,SAMPLE_20,SAMPLE_19,SAMPLE_18,SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.GraphicsContext",new SampleInfo[]{SAMPLE_13,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.ZoomEvent",new SampleInfo[]{SAMPLE_121,SAMPLE_117,});
-        DOCS_URL_TO_SAMPLE.put("javafx.application.Application",new SampleInfo[]{SAMPLE_69,SAMPLE_67,SAMPLE_68,SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.LineChart",new SampleInfo[]{SAMPLE_26,SAMPLE_25,SAMPLE_27,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.SepiaTone",new SampleInfo[]{SAMPLE_79,});
-        DOCS_URL_TO_SAMPLE.put("java.util.ArrayList",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.RectangleBuilder",new SampleInfo[]{SAMPLE_99,SAMPLE_97,});
-        DOCS_URL_TO_SAMPLE.put("javafx.stage.Stage",new SampleInfo[]{SAMPLE_124,SAMPLE_125,SAMPLE_69,SAMPLE_67,SAMPLE_66,SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Reflection",new SampleInfo[]{SAMPLE_72,SAMPLE_78,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Pagination",new SampleInfo[]{SAMPLE_41,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebView",new SampleInfo[]{SAMPLE_130,SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Stop",new SampleInfo[]{SAMPLE_69,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Button",new SampleInfo[]{SAMPLE_73,SAMPLE_49,SAMPLE_48,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Animation.Status",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Rotate",new SampleInfo[]{SAMPLE_99,SAMPLE_98,SAMPLE_74,SAMPLE_97,SAMPLE_96,});
-        DOCS_URL_TO_SAMPLE.put("javafx.concurrent.Service",new SampleInfo[]{SAMPLE_32,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SelectionModel",new SampleInfo[]{SAMPLE_51,SAMPLE_52,SAMPLE_53,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ColorPicker",new SampleInfo[]{SAMPLE_37,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.FlowPane",new SampleInfo[]{SAMPLE_105,});
-        DOCS_URL_TO_SAMPLE.put("java.util.logging.Logger",new SampleInfo[]{SAMPLE_66,});
-        DOCS_URL_TO_SAMPLE.put("javafx.collections.ListChangeListener",new SampleInfo[]{SAMPLE_102,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.ScatterChart",new SampleInfo[]{SAMPLE_30,SAMPLE_31,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.DatePicker",new SampleInfo[]{SAMPLE_38,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Light",new SampleInfo[]{SAMPLE_74,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BubbleChart",new SampleInfo[]{SAMPLE_23,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BoxBlur",new SampleInfo[]{SAMPLE_13,SAMPLE_70,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.Chart",new SampleInfo[]{SAMPLE_18,SAMPLE_126,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.event.EventHandler",new SampleInfo[]{SAMPLE_2,SAMPLE_120,SAMPLE_121,SAMPLE_69,SAMPLE_67,SAMPLE_29,SAMPLE_118,SAMPLE_117,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Path",new SampleInfo[]{SAMPLE_73,SAMPLE_91,});
-        DOCS_URL_TO_SAMPLE.put("http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm",new SampleInfo[]{SAMPLE_24,SAMPLE_19,SAMPLE_31,SAMPLE_26,SAMPLE_17,SAMPLE_25,SAMPLE_16,SAMPLE_15,SAMPLE_27,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.MoveTo",new SampleInfo[]{SAMPLE_91,});
-        DOCS_URL_TO_SAMPLE.put("javafx.util.Duration",new SampleInfo[]{SAMPLE_2,SAMPLE_74,SAMPLE_1,SAMPLE_0,SAMPLE_67,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.MouseEvent",new SampleInfo[]{SAMPLE_73,SAMPLE_72,SAMPLE_120,SAMPLE_121,SAMPLE_69,SAMPLE_67,SAMPLE_29,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.PathTransition",new SampleInfo[]{SAMPLE_6,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.LinearGradient",new SampleInfo[]{SAMPLE_13,SAMPLE_84,SAMPLE_69,SAMPLE_70,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.HBox",new SampleInfo[]{SAMPLE_107,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.LabelBuilder",new SampleInfo[]{SAMPLE_59,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.AnchorPane",new SampleInfo[]{SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Timeline",new SampleInfo[]{SAMPLE_13,SAMPLE_2,SAMPLE_1,SAMPLE_0,SAMPLE_67,SAMPLE_68,SAMPLE_30,SAMPLE_70,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurve",new SampleInfo[]{SAMPLE_94,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.CategoryAxis",new SampleInfo[]{SAMPLE_22,SAMPLE_21,SAMPLE_20,SAMPLE_19,SAMPLE_18,SAMPLE_126,SAMPLE_25,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.ScaleTransition",new SampleInfo[]{SAMPLE_9,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Effect",new SampleInfo[]{SAMPLE_75,SAMPLE_77,SAMPLE_76,SAMPLE_79,SAMPLE_78,});
-        DOCS_URL_TO_SAMPLE.put("javafx.fxml.FXMLLoader",new SampleInfo[]{SAMPLE_66,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.FadeTransition",new SampleInfo[]{SAMPLE_3,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.Image",new SampleInfo[]{SAMPLE_73,SAMPLE_74,SAMPLE_68,SAMPLE_81,SAMPLE_82,SAMPLE_80,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.TranslateTransition",new SampleInfo[]{SAMPLE_12,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyValue",new SampleInfo[]{SAMPLE_2,SAMPLE_1,SAMPLE_0,SAMPLE_67,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Font",new SampleInfo[]{SAMPLE_74,SAMPLE_69,SAMPLE_128,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.VBox",new SampleInfo[]{SAMPLE_110,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ChangeListener",new SampleInfo[]{SAMPLE_100,SAMPLE_102,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.RotateTransition",new SampleInfo[]{SAMPLE_8,});
-        DOCS_URL_TO_SAMPLE.put("javafx.fxml.JavaFXBuilderFactory",new SampleInfo[]{SAMPLE_66,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.Pane",new SampleInfo[]{SAMPLE_73,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.StrokeTransition",new SampleInfo[]{SAMPLE_11,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressBar",new SampleInfo[]{SAMPLE_42,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Text",new SampleInfo[]{SAMPLE_74,SAMPLE_69,SAMPLE_67,SAMPLE_127,SAMPLE_128,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Rectangle",new SampleInfo[]{SAMPLE_74,SAMPLE_95,SAMPLE_69,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Tab",new SampleInfo[]{SAMPLE_55,});
-        DOCS_URL_TO_SAMPLE.put("javafx.fxml.FXML",new SampleInfo[]{SAMPLE_66,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.CycleMethod",new SampleInfo[]{SAMPLE_69,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Insets",new SampleInfo[]{SAMPLE_59,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableRow",new SampleInfo[]{SAMPLE_56,SAMPLE_57,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.FillTransition",new SampleInfo[]{SAMPLE_4,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Node",new SampleInfo[]{SAMPLE_122,SAMPLE_123,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.binding.StringBinding",new SampleInfo[]{SAMPLE_101,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.HLineTo",new SampleInfo[]{SAMPLE_91,});
-        DOCS_URL_TO_SAMPLE.put("java.util.Map",new SampleInfo[]{SAMPLE_66,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedBarChart",new SampleInfo[]{SAMPLE_22,});
-        DOCS_URL_TO_SAMPLE.put("javafx.stage.StageStyle",new SampleInfo[]{SAMPLE_124,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuItem",new SampleInfo[]{SAMPLE_40,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.HTMLEditor",new SampleInfo[]{SAMPLE_129,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Cursor",new SampleInfo[]{SAMPLE_120,SAMPLE_117,SAMPLE_116,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Paint",new SampleInfo[]{SAMPLE_85,SAMPLE_84,SAMPLE_83,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Parent",new SampleInfo[]{SAMPLE_122,SAMPLE_69,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebEngine",new SampleInfo[]{SAMPLE_130,SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BlendMode",new SampleInfo[]{SAMPLE_13,SAMPLE_70,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurveTo",new SampleInfo[]{SAMPLE_91,});
-        DOCS_URL_TO_SAMPLE.put("javafx.stage.Screen",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.RotateEvent",new SampleInfo[]{SAMPLE_121,SAMPLE_117,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedAreaChart",new SampleInfo[]{SAMPLE_17,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.AreaChart",new SampleInfo[]{SAMPLE_16,SAMPLE_15,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polygon",new SampleInfo[]{SAMPLE_92,SAMPLE_71,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Accordion",new SampleInfo[]{SAMPLE_34,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.VLineTo",new SampleInfo[]{SAMPLE_91,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Circle",new SampleInfo[]{SAMPLE_13,SAMPLE_74,SAMPLE_87,SAMPLE_67,SAMPLE_70,});
-        DOCS_URL_TO_SAMPLE.put("java.util.logging.Level",new SampleInfo[]{SAMPLE_66,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurveTo",new SampleInfo[]{SAMPLE_91,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextAlignment",new SampleInfo[]{SAMPLE_74,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyEvent",new SampleInfo[]{SAMPLE_72,SAMPLE_69,SAMPLE_119,SAMPLE_118,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.Canvas",new SampleInfo[]{SAMPLE_13,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Interpolator",new SampleInfo[]{SAMPLE_0,SAMPLE_67,SAMPLE_119,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.ImageView",new SampleInfo[]{SAMPLE_73,SAMPLE_74,SAMPLE_68,SAMPLE_81,SAMPLE_82,SAMPLE_80,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextFlow",new SampleInfo[]{SAMPLE_127,SAMPLE_128,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextBoundsType",new SampleInfo[]{SAMPLE_74,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioSpectrumListener",new SampleInfo[]{SAMPLE_18,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Transition",new SampleInfo[]{SAMPLE_4,SAMPLE_12,SAMPLE_3,SAMPLE_11,SAMPLE_10,SAMPLE_9,SAMPLE_5,SAMPLE_6,SAMPLE_7,SAMPLE_8,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.InnerShadow",new SampleInfo[]{SAMPLE_77,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Shape",new SampleInfo[]{SAMPLE_86,SAMPLE_85,SAMPLE_84,SAMPLE_83,SAMPLE_95,SAMPLE_94,SAMPLE_89,SAMPLE_88,SAMPLE_87,SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Label",new SampleInfo[]{SAMPLE_58,SAMPLE_101,SAMPLE_61,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SplitPane",new SampleInfo[]{SAMPLE_54,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.FontPosture",new SampleInfo[]{SAMPLE_128,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableColumn",new SampleInfo[]{SAMPLE_56,SAMPLE_57,SAMPLE_32,SAMPLE_33,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyFrame",new SampleInfo[]{SAMPLE_2,SAMPLE_1,SAMPLE_0,SAMPLE_67,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToggleButton",new SampleInfo[]{SAMPLE_50,SAMPLE_46,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ArcTo",new SampleInfo[]{SAMPLE_91,});
-    }
-    public static SampleInfo[] getSamplesForDoc(String docUrl) {
-        return DOCS_URL_TO_SAMPLE.get(docUrl);
-    }
-}
+package ensemble.generated;
+import ensemble.*;
+import ensemble.playground.PlaygroundProperty;
+import javafx.application.ConditionalFeature;
+import java.util.HashMap;
+public class Samples{
+    private static final SampleInfo SAMPLE_0 = new SampleInfo("Interpolator","A sample that shows various types of interpolation between key frames in a timeline. There are five circles, each animated with a different interpolation method. The Linear interpolator is the default. Use the controls to reduce opacity to zero for some circles to compare with others, or change circle color to distinguish between individual interpolators. ","/Animation/Interpolator","/ensemble/samples/animation/interpolator","ensemble.samples.animation.interpolator.InterpolatorApp","/ensemble/samples/animation/interpolator/preview.png",new String[]{"/ensemble/samples/animation/interpolator/InterpolatorApp.java",},new String[]{"javafx.animation.Interpolator","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/animation/interpolator/InterpolatorApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"-","name","LINEAR"),new PlaygroundProperty("circle1","opacity","min","0","max","1"),new PlaygroundProperty("circle1","fill"),new PlaygroundProperty(null,"-","name","EASE_BOTH"),new PlaygroundProperty("circle2","opacity","min","0","max","1"),new PlaygroundProperty("circle2","fill"),new PlaygroundProperty(null,"-","name","EASE_IN"),new PlaygroundProperty("circle3","opacity","min","0","max","1"),new PlaygroundProperty("circle3","fill"),new PlaygroundProperty(null,"-","name","EASE_OUT"),new PlaygroundProperty("circle4","opacity","min","0","max","1"),new PlaygroundProperty("circle4","fill"),new PlaygroundProperty(null,"-","name","SPLINE"),new PlaygroundProperty("circle5","opacity","min","0","max","1"),new PlaygroundProperty("circle5","fill"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_1 = new SampleInfo("Timeline","A sample that demonstrates the basics of timeline creation. ","/Animation/Timeline/Timeline","/ensemble/samples/animation/timeline/timeline","ensemble.samples.animation.timeline.timeline.TimelineApp","/ensemble/samples/animation/timeline/timeline/preview.png",new String[]{"/ensemble/samples/animation/timeline/timeline/TimelineApp.java",},new String[]{"javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/animation/timeline/timeline/TimelineApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_2 = new SampleInfo("Timeline Events","A sample that demonstrates events triggered during time line play. The circle changes its radius in a linear fashion during each key frame and randomly jumps to a new location along the x coordinate at the end of the key frame. ","/Animation/Timeline/Timeline Events","/ensemble/samples/animation/timeline/timelineevents","ensemble.samples.animation.timeline.timelineevents.TimelineEventsApp","/ensemble/samples/animation/timeline/timelineevents/preview.png",new String[]{"/ensemble/samples/animation/timeline/timelineevents/TimelineEventsApp.java",},new String[]{"javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration","javafx.event.ActionEvent","javafx.event.EventHandler",},new String[]{},new String[]{},"/ensemble/samples/animation/timeline/timelineevents/TimelineEventsApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_3 = new SampleInfo("Fade Transition","A sample in which the opacity of a node changes over a given time. ","/Animation/Transitions/Fade Transition","/ensemble/samples/animation/transitions/fadetransition","ensemble.samples.animation.transitions.fadetransition.FadeTransitionApp","/ensemble/samples/animation/transitions/fadetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/fadetransition/FadeTransitionApp.java",},new String[]{"javafx.animation.FadeTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/fadetransition/FadeTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_4 = new SampleInfo("Fill Transition","A sample in which the filling of a shape changes over a given time. ","/Animation/Transitions/Fill Transition","/ensemble/samples/animation/transitions/filltransition","ensemble.samples.animation.transitions.filltransition.FillTransitionApp","/ensemble/samples/animation/transitions/filltransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/filltransition/FillTransitionApp.java",},new String[]{"javafx.animation.FillTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/filltransition/FillTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_5 = new SampleInfo("Parallel Transition","A sample in which various transitions are executed in parallel. ","/Animation/Transitions/Parallel Transition","/ensemble/samples/animation/transitions/paralleltransition","ensemble.samples.animation.transitions.paralleltransition.ParallelTransitionApp","/ensemble/samples/animation/transitions/paralleltransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/paralleltransition/ParallelTransitionApp.java",},new String[]{"javafx.animation.ParallelTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/paralleltransition/ParallelTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_6 = new SampleInfo("Path Transition","A sample in which a node moves along a path from end to end over a given time. ","/Animation/Transitions/Path Transition","/ensemble/samples/animation/transitions/pathtransition","ensemble.samples.animation.transitions.pathtransition.PathTransitionApp","/ensemble/samples/animation/transitions/pathtransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/pathtransition/PathTransitionApp.java",},new String[]{"javafx.animation.PathTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/pathtransition/PathTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_7 = new SampleInfo("Pause Transition","A sample in which a node pauses over a given time. ","/Animation/Transitions/Pause Transition","/ensemble/samples/animation/transitions/pausetransition","ensemble.samples.animation.transitions.pausetransition.PauseTransitionApp","/ensemble/samples/animation/transitions/pausetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/pausetransition/PauseTransitionApp.java",},new String[]{"javafx.animation.PauseTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/pausetransition/PauseTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_8 = new SampleInfo("Rotate Transition","A sample in which a node rotates around its center over a given time. ","/Animation/Transitions/Rotate Transition","/ensemble/samples/animation/transitions/rotatetransition","ensemble.samples.animation.transitions.rotatetransition.RotateTransitionApp","/ensemble/samples/animation/transitions/rotatetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/rotatetransition/RotateTransitionApp.java",},new String[]{"javafx.animation.RotateTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/rotatetransition/RotateTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_9 = new SampleInfo("Scale Transition","A sample in which a node scales larger and smaller over a given time. ","/Animation/Transitions/Scale Transition","/ensemble/samples/animation/transitions/scaletransition","ensemble.samples.animation.transitions.scaletransition.ScaleTransitionApp","/ensemble/samples/animation/transitions/scaletransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/scaletransition/ScaleTransitionApp.java",},new String[]{"javafx.animation.ScaleTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/scaletransition/ScaleTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_10 = new SampleInfo("Sequential Transition","A sample in which various transitions are executed sequentially. ","/Animation/Transitions/Sequential Transition","/ensemble/samples/animation/transitions/sequentialtransition","ensemble.samples.animation.transitions.sequentialtransition.SequentialTransitionApp","/ensemble/samples/animation/transitions/sequentialtransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/sequentialtransition/SequentialTransitionApp.java",},new String[]{"javafx.animation.SequentialTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Stroke Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/sequentialtransition/SequentialTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_11 = new SampleInfo("Stroke Transition","A sample in which the stroke color of a shape changes over a given time. ","/Animation/Transitions/Stroke Transition","/ensemble/samples/animation/transitions/stroketransition","ensemble.samples.animation.transitions.stroketransition.StrokeTransitionApp","/ensemble/samples/animation/transitions/stroketransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/stroketransition/StrokeTransitionApp.java",},new String[]{"javafx.animation.StrokeTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Translate Transition",},"/ensemble/samples/animation/transitions/stroketransition/StrokeTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_12 = new SampleInfo("Translate Transition","A sample in which a node moves from one location to another over a given time. ","/Animation/Transitions/Translate Transition","/ensemble/samples/animation/transitions/translatetransition","ensemble.samples.animation.transitions.translatetransition.TranslateTransitionApp","/ensemble/samples/animation/transitions/translatetransition/preview.png",new String[]{"/ensemble/samples/animation/transitions/translatetransition/TranslateTransitionApp.java",},new String[]{"javafx.animation.TranslateTransition","javafx.animation.Transition",},new String[]{},new String[]{"/Animation/Transitions/Fade Transition","/Animation/Transitions/Fill Transition","/Animation/Transitions/Parallel Transition","/Animation/Transitions/Path Transition","/Animation/Transitions/Pause Transition","/Animation/Transitions/Rotate Transition","/Animation/Transitions/Scale Transition","/Animation/Transitions/Sequential Transition","/Animation/Transitions/Stroke Transition",},"/ensemble/samples/animation/transitions/translatetransition/TranslateTransitionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_13 = new SampleInfo("Fireworks","A sample that demonstrates how to draw and paint shapes, apply visual effects, blend colors in overlapping objects, and animate objects. ","/Canvas/Fireworks","/ensemble/samples/canvas/fireworks","ensemble.samples.canvas.fireworks.FireworksApp","/ensemble/samples/canvas/fireworks/preview.png",new String[]{"/ensemble/samples/canvas/fireworks/FireworksApp.java","/ensemble/samples/canvas/fireworks/Particle.java","/ensemble/samples/shared-resources/sf.jpg","/ensemble/samples/canvas/fireworks/SanFranciscoFireworks.java",},new String[]{"javafx.scene.canvas.Canvas","javafx.scene.canvas.GraphicsContext","javafx.scene.effect.BlendMode","javafx.scene.effect.BoxBlur","javafx.scene.shape.Circle","javafx.scene.Group","javafx.scene.paint.LinearGradient","javafx.animation.Timeline",},new String[]{},new String[]{},"/ensemble/samples/canvas/fireworks/FireworksApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_14 = new SampleInfo("Audio Area Chart","An area chart that shows audio spectrum of a music file being played. ","/Charts/Area/Audio Area Chart","/ensemble/samples/charts/area/audio","ensemble.samples.charts.area.audio.AudioAreaChartApp","/ensemble/samples/charts/area/audio/preview.png",new String[]{"/ensemble/samples/charts/area/audio/AudioAreaChartApp.java","/ensemble/samples/charts/area/audio/AudioAreaChart.css",},new String[]{"javafx.scene.chart.AreaChart","javafx.scene.chart.Chart","javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart","javafx.scene.media.AudioSpectrumListener","javafx.scene.media.Media","javafx.scene.media.MediaPlayer",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{},"/ensemble/samples/charts/area/audio/AudioAreaChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_15 = new SampleInfo("Area Chart","A chart that fills in the area between a line of data points and the axes. Good for comparing accumulated totals over time. ","/Charts/Area/Area Chart","/ensemble/samples/charts/area/chart","ensemble.samples.charts.area.chart.AreaChartApp","/ensemble/samples/charts/area/chart/preview.png",new String[]{"/ensemble/samples/charts/area/chart/AreaChartApp.java",},new String[]{"javafx.scene.chart.AreaChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Line/Line Chart","/Charts/Scatter/Scatter Chart",},"/ensemble/samples/charts/area/chart/AreaChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","upperBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","10","step","0.5"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-10","max","10","step","1"),new PlaygroundProperty("yAxis","upperBound","min","-10","max","10","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","10","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_16 = new SampleInfo("Curve-Fitted Area Chart","An area chart that demonstrates curve fitting. Styling is done through CSS. ","/Charts/Area/Curve-Fitted Area Chart","/ensemble/samples/charts/area/curvefitted","ensemble.samples.charts.area.curvefitted.CurveFittedAreaChartApp","/ensemble/samples/charts/area/curvefitted/preview.png",new String[]{"/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChart.java","/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChartApp.java","/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChart.css",},new String[]{"javafx.scene.chart.AreaChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart",},"/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10000","max","10000","step","1"),new PlaygroundProperty("xAxis","upperBound","min","-10000","max","10000","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","10000","step","1"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-1000","max","1000","step","1"),new PlaygroundProperty("yAxis","upperBound","min","-1000","max","2000","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","1000","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_17 = new SampleInfo("Stacked Area Chart","A sample that displays data in a stacked area chart. ","/Charts/Area/Stacked Area Chart","/ensemble/samples/charts/area/stacked","ensemble.samples.charts.area.stacked.StackedAreaChartApp","/ensemble/samples/charts/area/stacked/preview.png",new String[]{"/ensemble/samples/charts/area/stacked/StackedAreaChartApp.java",},new String[]{"javafx.scene.chart.StackedAreaChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart",},"/ensemble/samples/charts/area/stacked/StackedAreaChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","upperBound","min","-10","max","10","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","10"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-10","max","20","step","1"),new PlaygroundProperty("yAxis","upperBound","min","-10","max","40","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","10"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_18 = new SampleInfo("Audio Bar Chart","Bar chart that shows audio spectrum of a music file being played. ","/Charts/Bar/Audio Bar Chart","/ensemble/samples/charts/bar/audio","ensemble.samples.charts.bar.audio.AudioBarChartApp","/ensemble/samples/charts/bar/audio/preview.png",new String[]{"/ensemble/samples/charts/bar/audio/AudioBarChartApp.java","/ensemble/samples/charts/bar/audio/AudioBarChart.css",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.Chart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart","javafx.scene.media.AudioSpectrumListener","javafx.scene.media.Media","javafx.scene.media.MediaPlayer",},new String[]{},new String[]{},"/ensemble/samples/charts/bar/audio/AudioBarChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_19 = new SampleInfo("Bar Chart","A chart that displays rectangular bars with heights indicating data values for categories. Used for displaying information when at least one axis has discontinuous or discrete data. ","/Charts/Bar/Bar Chart","/ensemble/samples/charts/bar/chart","ensemble.samples.charts.bar.chart.BarChartApp","/ensemble/samples/charts/bar/chart/preview.png",new String[]{"/ensemble/samples/charts/bar/chart/BarChartApp.java",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart","/Charts/Line/Line Chart","/Charts/Scatter/Scatter Chart",},"/ensemble/samples/charts/bar/chart/BarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-1000","max","3000","step","1"),new PlaygroundProperty("yAxis","upperBound","max","4000","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","3000","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_20 = new SampleInfo("Horizontal Bar Chart","Horizontal bar chart with a variety of actions and settable properties for experimenting with the charts features. ","/Charts/Bar/Horizontal Bar Chart","/ensemble/samples/charts/bar/horizontal","ensemble.samples.charts.bar.horizontal.HorizontalBarChartApp","/ensemble/samples/charts/bar/horizontal/preview.png",new String[]{"/ensemble/samples/charts/bar/horizontal/HorizontalBarChartApp.java",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{},"/ensemble/samples/charts/bar/horizontal/HorizontalBarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-1000","max","3000","step","1"),new PlaygroundProperty("xAxis","upperBound","max","4000","step","1"),new PlaygroundProperty("xAxis","tickUnit","max","3000","step","1"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","gapStartAndEnd"),new PlaygroundProperty("yAxis","startMargin"),new PlaygroundProperty("yAxis","endMargin"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_21 = new SampleInfo("Image Bar Chart","A bar chart that uses CSS to display stacks of car images to indicate data values for categories. ","/Charts/Bar/Image Bar Chart","/ensemble/samples/charts/bar/image","ensemble.samples.charts.bar.image.ImageBarChartApp","/ensemble/samples/charts/bar/image/preview.png",new String[]{"/ensemble/samples/charts/bar/image/ImageBarChartApp.java","/ensemble/samples/charts/bar/image/ImageBarChart.css","/ensemble/samples/charts/bar/image/sedan-s.png","/ensemble/samples/charts/bar/image/suv-s.png","/ensemble/samples/charts/bar/image/truck-s.png","/ensemble/samples/charts/bar/image/van-s.png",},new String[]{"javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{},"/ensemble/samples/charts/bar/image/ImageBarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","max","0","step","1"),new PlaygroundProperty("yAxis","upperBound","max","200","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_22 = new SampleInfo("Stacked Bar Chart","A sample that displays data in a stacked bar chart. ","/Charts/Bar/Stacked Bar Chart","/ensemble/samples/charts/bar/stacked","ensemble.samples.charts.bar.stacked.StackedBarChartApp","/ensemble/samples/charts/bar/stacked/preview.png",new String[]{"/ensemble/samples/charts/bar/stacked/StackedBarChartApp.java",},new String[]{"javafx.scene.chart.StackedBarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{"/Charts/Bar/Bar Chart",},"/ensemble/samples/charts/bar/stacked/StackedBarChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-3000","max","0","step","1"),new PlaygroundProperty("yAxis","upperBound","min","0","max","8000","step","1"),new PlaygroundProperty("yAxis","tickUnit","max","5000","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_23 = new SampleInfo("Bubble Chart","An advanced bubble chart with a variety of actions and settable properties. ","/Charts/Bubble/Bubble Chart","/ensemble/samples/charts/bubble/chart","ensemble.samples.charts.bubble.chart.BubbleChartApp","/ensemble/samples/charts/bubble/chart/preview.png",new String[]{"/ensemble/samples/charts/bubble/chart/BubbleChartApp.java",},new String[]{"javafx.scene.chart.BubbleChart","javafx.scene.chart.NumberAxis",},new String[]{},new String[]{"/Charts/Scatter/Advanced Scatter Chart",},"/ensemble/samples/charts/bubble/chart/BubbleChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-100","max","100","step","1"),new PlaygroundProperty("xAxis","upperBound","min","0","max","200","step","1"),new PlaygroundProperty("xAxis","tickUnit","step","1"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","max","100","step","1"),new PlaygroundProperty("yAxis","upperBound","min","0","max","200","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_24 = new SampleInfo("Candle Stick Chart","A custom candlestick chart. This sample shows how to extend XYChart base class to create your own two axis chart type. ","/Charts/Custom/Candle Stick Chart","/ensemble/samples/charts/custom/candlestick","ensemble.samples.charts.custom.candlestick.CandleStickChartApp","/ensemble/samples/charts/custom/candlestick/preview.png",new String[]{"/ensemble/samples/charts/custom/candlestick/Candle.java","/ensemble/samples/charts/custom/candlestick/CandleStickChart.java","/ensemble/samples/charts/custom/candlestick/CandleStickChartApp.java","/ensemble/samples/charts/custom/candlestick/CandleStickExtraValues.java","/ensemble/samples/charts/custom/candlestick/TooltipContent.java","/ensemble/samples/charts/custom/candlestick/CandleStickChart.css",},new String[]{"javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Scatter/Scatter Chart","/Charts/Scatter/Advanced Scatter Chart",},"/ensemble/samples/charts/custom/candlestick/CandleStickChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-100","max","100","step","1"),new PlaygroundProperty("xAxis","upperBound","step","1"),new PlaygroundProperty("xAxis","tickUnit","step","0.5"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","max","30","step","1"),new PlaygroundProperty("yAxis","upperBound","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","0.5"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_25 = new SampleInfo("Category Line Chart","A line chart demonstrating a CategoryAxis implementation. ","/Charts/Line/Category Line Chart","/ensemble/samples/charts/line/category","ensemble.samples.charts.line.category.CategoryLineChartApp","/ensemble/samples/charts/line/category/preview.png",new String[]{"/ensemble/samples/charts/line/category/CategoryLineChartApp.java",},new String[]{"javafx.scene.chart.CategoryAxis","javafx.scene.chart.LineChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{},"/ensemble/samples/charts/line/category/CategoryLineChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","gapStartAndEnd"),new PlaygroundProperty("xAxis","startMargin"),new PlaygroundProperty("xAxis","endMargin"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-100","step","1"),new PlaygroundProperty("yAxis","upperBound","max","200","step","1"),new PlaygroundProperty("yAxis","tickUnit","step","1"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_26 = new SampleInfo("Line Chart","A chart in which lines connect a series of data points. Useful for viewing data trends over time. ","/Charts/Line/Line Chart","/ensemble/samples/charts/line/chart","ensemble.samples.charts.line.chart.LineChartApp","/ensemble/samples/charts/line/chart/preview.png",new String[]{"/ensemble/samples/charts/line/chart/LineChartApp.java",},new String[]{"javafx.scene.chart.LineChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Area/Area Chart","/Charts/Scatter/Scatter Chart",},"/ensemble/samples/charts/line/chart/LineChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","0.2"),new PlaygroundProperty("xAxis","upperBound","max","10","step","0.2"),new PlaygroundProperty("xAxis","tickUnit","max","3","step","0.2"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-5","max","5","step","0.2"),new PlaygroundProperty("yAxis","upperBound","max","10","step","0.2"),new PlaygroundProperty("yAxis","tickUnit","max","3","step","0.2"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_27 = new SampleInfo("Stock Line Chart","A simulated stock line chart. ","/Charts/Line/Stock Line Chart","/ensemble/samples/charts/line/stock","ensemble.samples.charts.line.stock.StockLineChartApp","/ensemble/samples/charts/line/stock/preview.png",new String[]{"/ensemble/samples/charts/line/stock/StockLineChartApp.java","/ensemble/samples/charts/line/stock/StockLineChart.css",},new String[]{"javafx.scene.chart.LineChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{},"/ensemble/samples/charts/line/stock/StockLineChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_28 = new SampleInfo("Pie Chart","A circular chart divided into segments. The value of each segment represents a proportion of the total. ","/Charts/Pie/Pie Chart","/ensemble/samples/charts/pie/chart","ensemble.samples.charts.pie.chart.PieChartApp","/ensemble/samples/charts/pie/chart/preview.png",new String[]{"/ensemble/samples/charts/pie/chart/PieChartApp.java",},new String[]{"javafx.scene.chart.PieChart",},new String[]{},new String[]{},"/ensemble/samples/charts/pie/chart/PieChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty("chart","clockwise"),new PlaygroundProperty("chart","labelLineLength"),new PlaygroundProperty("chart","labelsVisible"),new PlaygroundProperty("chart","startAngle","max","360"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_29 = new SampleInfo("Drilldown Pie Chart","A pie chart that provides the ability to drill down through data. Selecting a segment in the initial pie chart causes the pie chart to display detailed data for the selected segment. ","/Charts/Pie/Drilldown Pie Chart","/ensemble/samples/charts/pie/drilldown","ensemble.samples.charts.pie.drilldown.DrilldownPieChartApp","/ensemble/samples/charts/pie/drilldown/preview.png",new String[]{"/ensemble/samples/charts/pie/drilldown/DrilldownPieChartApp.java","/ensemble/samples/charts/pie/drilldown/DrilldownChart.css",},new String[]{"javafx.event.EventHandler","javafx.scene.chart.PieChart","javafx.scene.input.MouseEvent",},new String[]{},new String[]{},"/ensemble/samples/charts/pie/drilldown/DrilldownPieChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_30 = new SampleInfo("Live Scatter Chart","A live scatter chart. ","/Charts/Scatter/Live Scatter Chart","/ensemble/samples/charts/scatter/animated","ensemble.samples.charts.scatter.animated.LiveScatterChartApp","/ensemble/samples/charts/scatter/animated/preview.png",new String[]{"/ensemble/samples/charts/scatter/animated/LiveScatterChartApp.java","/ensemble/samples/charts/scatter/animated/LiveScatterChart.css",},new String[]{"javafx.scene.chart.ScatterChart","javafx.scene.chart.NumberAxis","javafx.animation.Timeline","javafx.animation.SequentialTransition",},new String[]{},new String[]{},"/ensemble/samples/charts/scatter/animated/LiveScatterChartApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_31 = new SampleInfo("Scatter Chart","A chart that displays plotted symbols for a series of data points. Useful for viewing the distribution of data to see if there is any pattern, indicating a correlation. ","/Charts/Scatter/Scatter Chart","/ensemble/samples/charts/scatter/chart","ensemble.samples.charts.scatter.chart.ScatterChartApp","/ensemble/samples/charts/scatter/chart/preview.png",new String[]{"/ensemble/samples/charts/scatter/chart/ScatterChartApp.java",},new String[]{"javafx.scene.chart.ScatterChart","javafx.scene.chart.NumberAxis",},new String[]{"http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm","Using JavaFX Charts Tutorial",},new String[]{"/Charts/Line/Line Chart","/Charts/Area/Area Chart",},"/ensemble/samples/charts/scatter/chart/ScatterChartApp.java",new PlaygroundProperty[]{new PlaygroundProperty("chart","data"),new PlaygroundProperty(null,"-","name","xAxis"),new PlaygroundProperty("xAxis","autoRanging"),new PlaygroundProperty("xAxis","forceZeroInRange"),new PlaygroundProperty("xAxis","lowerBound","min","-10","max","10","step","0.25"),new PlaygroundProperty("xAxis","upperBound","max","20","step","0.25"),new PlaygroundProperty("xAxis","tickUnit","max","10","step","0.25"),new PlaygroundProperty("xAxis","minorTickCount","max","16"),new PlaygroundProperty("xAxis","minorTickLength","max","15"),new PlaygroundProperty("xAxis","minorTickVisible"),new PlaygroundProperty("xAxis","animated"),new PlaygroundProperty("xAxis","label"),new PlaygroundProperty("xAxis","side"),new PlaygroundProperty("xAxis","tickLabelFill"),new PlaygroundProperty("xAxis","tickLabelGap"),new PlaygroundProperty("xAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("xAxis","tickLabelsVisible"),new PlaygroundProperty("xAxis","tickLength"),new PlaygroundProperty("xAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","yAxis"),new PlaygroundProperty("yAxis","autoRanging"),new PlaygroundProperty("yAxis","forceZeroInRange"),new PlaygroundProperty("yAxis","lowerBound","min","-5","max","5","step","0.25"),new PlaygroundProperty("yAxis","upperBound","max","10","step","0.25"),new PlaygroundProperty("yAxis","tickUnit","max","10","step","0.25"),new PlaygroundProperty("yAxis","minorTickCount","max","16"),new PlaygroundProperty("yAxis","minorTickLength","max","15"),new PlaygroundProperty("yAxis","minorTickVisible"),new PlaygroundProperty("yAxis","animated"),new PlaygroundProperty("yAxis","label"),new PlaygroundProperty("yAxis","side"),new PlaygroundProperty("yAxis","tickLabelFill"),new PlaygroundProperty("yAxis","tickLabelGap"),new PlaygroundProperty("yAxis","tickLabelRotation","min","-180","max","180","step","1"),new PlaygroundProperty("yAxis","tickLabelsVisible"),new PlaygroundProperty("yAxis","tickLength"),new PlaygroundProperty("yAxis","tickMarkVisible"),new PlaygroundProperty(null,"-","name","chart"),new PlaygroundProperty("chart","alternativeColumnFillVisible"),new PlaygroundProperty("chart","alternativeRowFillVisible"),new PlaygroundProperty("chart","horizontalGridLinesVisible"),new PlaygroundProperty("chart","horizontalZeroLineVisible"),new PlaygroundProperty("chart","verticalGridLinesVisible"),new PlaygroundProperty("chart","verticalZeroLineVisible"),new PlaygroundProperty("chart","animated"),new PlaygroundProperty("chart","legendSide"),new PlaygroundProperty("chart","legendVisible"),new PlaygroundProperty("chart","title"),new PlaygroundProperty("chart","titleSide"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_32 = new SampleInfo("Service","A sample showing use of a Service to retrieve data in a background thread. Selecting the Refresh button restarts the Service. ","/Concurrency/Service","/ensemble/samples/concurrency/service","ensemble.samples.concurrency.service.ServiceApp","/ensemble/samples/concurrency/service/preview.png",new String[]{"/ensemble/samples/concurrency/service/DailySales.java","/ensemble/samples/concurrency/service/GetDailySalesService.java","/ensemble/samples/concurrency/service/GetDailySalesTask.java","/ensemble/samples/concurrency/service/ServiceApp.java",},new String[]{"javafx.collections.FXCollections","javafx.concurrent.Service","javafx.concurrent.Task","javafx.scene.control.ProgressIndicator","javafx.scene.control.TableColumn","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/concurrency/service/ServiceApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_33 = new SampleInfo("Task","A sample showing use of an an asynchronous Task to populate a table. ","/Concurrency/Task","/ensemble/samples/concurrency/task","ensemble.samples.concurrency.task.TaskApp","/ensemble/samples/concurrency/task/preview.png",new String[]{"/ensemble/samples/concurrency/task/DailySales.java","/ensemble/samples/concurrency/task/GetDailySalesTask.java","/ensemble/samples/concurrency/task/TaskApp.java",},new String[]{"javafx.collections.FXCollections","javafx.concurrent.Task","javafx.scene.control.ProgressIndicator","javafx.scene.control.TableColumn","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/concurrency/task/TaskApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_34 = new SampleInfo("Accordion","An example of an accordion control. You can use accordion controls to define individual panes and  display them one at a time. ","/Controls/Accordion","/ensemble/samples/controls/accordion","ensemble.samples.controls.accordion.AccordionApp","/ensemble/samples/controls/accordion/preview.png",new String[]{"/ensemble/samples/controls/accordion/AccordionApp.java",},new String[]{"javafx.scene.control.Accordion",},new String[]{},new String[]{"/Controls/Toggle Button","/Controls/Toolbar/ToolBar",},"/ensemble/samples/controls/accordion/AccordionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_35 = new SampleInfo("Check Box","An example of CheckBoxes in various states. ","/Controls/Check Box","/ensemble/samples/controls/checkbox","ensemble.samples.controls.checkbox.CheckBoxApp","/ensemble/samples/controls/checkbox/preview.png",new String[]{"/ensemble/samples/controls/checkbox/CheckBoxApp.java",},new String[]{"javafx.scene.control.CheckBox",},new String[]{},new String[]{"/Controls/Radiobutton/Radio Button",},"/ensemble/samples/controls/checkbox/CheckBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_36 = new SampleInfo("ChoiceBox","An example of a ChoiceBox with several options. The ChoiceBox control displays a default or current selection, with an icon to click that expands the list for a selection. ","/Controls/ChoiceBox","/ensemble/samples/controls/choicebox","ensemble.samples.controls.choicebox.ChoiceBoxApp","/ensemble/samples/controls/choicebox/preview.png",new String[]{"/ensemble/samples/controls/choicebox/ChoiceBoxApp.java",},new String[]{"javafx.scene.control.ChoiceBox",},new String[]{},new String[]{},"/ensemble/samples/controls/choicebox/ChoiceBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_37 = new SampleInfo("ColorPicker","A sample that demonstrates the ColorPicker. ","/Controls/ColorPicker","/ensemble/samples/controls/colorpicker","ensemble.samples.controls.colorpicker.ColorPickerApp","/ensemble/samples/controls/colorpicker/preview.png",new String[]{"/ensemble/samples/controls/colorpicker/ColorPickerApp.java",},new String[]{"javafx.scene.control.ColorPicker",},new String[]{},new String[]{},"/ensemble/samples/controls/colorpicker/ColorPickerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_38 = new SampleInfo("DatePicker","A sample that demonstrates the DatePicker. The sample uses a new Stage for the DatePicker to allow changing of locales. ","/Controls/DatePicker","/ensemble/samples/controls/datepicker","ensemble.samples.controls.datepicker.DatePickerApp","/ensemble/samples/controls/datepicker/preview.png",new String[]{"/ensemble/samples/controls/datepicker/DatePickerApp.java",},new String[]{"javafx.scene.control.DateCell","javafx.scene.control.DatePicker",},new String[]{},new String[]{},"/ensemble/samples/controls/datepicker/DatePickerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_39 = new SampleInfo("HyperLink","A sample that shows a simple hyperlink and a hyperlink with an image. ","/Controls/HyperLink","/ensemble/samples/controls/hyperlink","ensemble.samples.controls.hyperlink.HyperLinkApp","/ensemble/samples/controls/hyperlink/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/hyperlink/HyperLinkApp.java",},new String[]{"javafx.scene.control.Hyperlink",},new String[]{},new String[]{},"/ensemble/samples/controls/hyperlink/HyperLinkApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_40 = new SampleInfo("Menu","An example of a menu bar. The example includes use of the system bar, if the current platform supports a system bar. ","/Controls/Menu","/ensemble/samples/controls/menu","ensemble.samples.controls.menu.MenuApp","/ensemble/samples/controls/menu/preview.png",new String[]{"/ensemble/samples/shared-resources/menuInfo.png","/ensemble/samples/controls/menu/MenuApp.java",},new String[]{"javafx.scene.control.MenuBar","javafx.scene.control.Menu","javafx.scene.control.MenuItem",},new String[]{},new String[]{},"/ensemble/samples/controls/menu/MenuApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_41 = new SampleInfo("Pagination","A sample that demonstrates pagination. ","/Controls/Pagination","/ensemble/samples/controls/pagination","ensemble.samples.controls.pagination.PaginationApp","/ensemble/samples/controls/pagination/preview.png",new String[]{"/ensemble/samples/shared-resources/Animal1.jpg","/ensemble/samples/shared-resources/Animal2.jpg","/ensemble/samples/shared-resources/Animal3.jpg","/ensemble/samples/shared-resources/Animal4.jpg","/ensemble/samples/shared-resources/Animal5.jpg","/ensemble/samples/shared-resources/Animal6.jpg","/ensemble/samples/shared-resources/Animal7.jpg","/ensemble/samples/controls/pagination/PaginationApp.java",},new String[]{"javafx.scene.control.Pagination",},new String[]{},new String[]{},"/ensemble/samples/controls/pagination/PaginationApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_42 = new SampleInfo("Progress Bar","A sample that demonstrates the ProgressBar control. ","/Controls/Progress Bar","/ensemble/samples/controls/progressbar","ensemble.samples.controls.progressbar.ProgressBarApp","/ensemble/samples/controls/progressbar/preview.png",new String[]{"/ensemble/samples/controls/progressbar/ProgressBarApp.java",},new String[]{"javafx.scene.control.ProgressBar",},new String[]{},new String[]{"/Controls/Progress Indicator",},"/ensemble/samples/controls/progressbar/ProgressBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_43 = new SampleInfo("Progress Indicator","A sample that demonstrates the Progress Indicator control in various modes. ","/Controls/Progress Indicator","/ensemble/samples/controls/progressindicator","ensemble.samples.controls.progressindicator.ProgressIndicatorApp","/ensemble/samples/controls/progressindicator/preview.png",new String[]{"/ensemble/samples/controls/progressindicator/ProgressIndicatorApp.java",},new String[]{"javafx.scene.control.ProgressIndicator",},new String[]{},new String[]{"/Controls/Progress Bar",},"/ensemble/samples/controls/progressindicator/ProgressIndicatorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_44 = new SampleInfo("Radio Button","An example of radio buttons in various states. ","/Controls/Radio Button","/ensemble/samples/controls/radiobutton","ensemble.samples.controls.radiobutton.RadioButtonApp","/ensemble/samples/controls/radiobutton/preview.png",new String[]{"/ensemble/samples/controls/radiobutton/RadioButtonApp.java",},new String[]{"javafx.scene.control.RadioButton",},new String[]{},new String[]{"/Controls/Check Box",},"/ensemble/samples/controls/radiobutton/RadioButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_45 = new SampleInfo("ScrollBar","A sample showing horizontal and vertical scroll bars. ","/Controls/ScrollBar","/ensemble/samples/controls/scrollbar","ensemble.samples.controls.scrollbar.ScrollBarApp","/ensemble/samples/controls/scrollbar/preview.png",new String[]{"/ensemble/samples/controls/scrollbar/ScrollBarApp.java",},new String[]{"javafx.scene.control.ScrollBar",},new String[]{},new String[]{},"/ensemble/samples/controls/scrollbar/ScrollBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_46 = new SampleInfo("Toggle Button","Toggle buttons in a toggle group. ","/Controls/Toggle Button","/ensemble/samples/controls/togglebutton","ensemble.samples.controls.togglebutton.ToggleButtonApp","/ensemble/samples/controls/togglebutton/preview.png",new String[]{"/ensemble/samples/controls/togglebutton/ToggleButtonApp.java",},new String[]{"javafx.scene.control.ToggleButton",},new String[]{},new String[]{"/Controls/Choice Box","/Controls/Accordion","/Controls/Toolbar/Tool Bar",},"/ensemble/samples/controls/togglebutton/ToggleButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_47 = new SampleInfo("TreeTableView","A simple implementation of TreeTableView. The Notes column is editable. ","/Controls/TreeTableView","/ensemble/samples/controls/treetableview","ensemble.samples.controls.treetableview.TreeTableViewApp","/ensemble/samples/controls/treetableview/preview.png",new String[]{"/ensemble/samples/controls/treetableview/Inventory.java","/ensemble/samples/controls/treetableview/Part.java","/ensemble/samples/controls/treetableview/TreeTableViewApp.java",},new String[]{"javafx.scene.control.cell.TextFieldTreeTableCell","javafx.scene.control.TreeItem","javafx.scene.control.TreeTableCell","javafx.scene.control.TreeTableColumn","javafx.scene.control.TreeTableView",},new String[]{},new String[]{},"/ensemble/samples/controls/treetableview/TreeTableViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_48 = new SampleInfo("TreeView","An implementation of the TreeView control displaying an expandable tree root node. ","/Controls/TreeView","/ensemble/samples/controls/treeview","ensemble.samples.controls.treeview.TreeViewApp","/ensemble/samples/controls/treeview/preview.png",new String[]{"/ensemble/samples/controls/treeview/TreeViewApp.java",},new String[]{"javafx.scene.control.TreeView",},new String[]{},new String[]{},"/ensemble/samples/controls/treeview/TreeViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_49 = new SampleInfo("Colored Buttons","An example of Buttons with different background colors. ","/Controls/Button/Colored Buttons","/ensemble/samples/controls/button/colorbutton","ensemble.samples.controls.button.colorbutton.ColorButtonApp","/ensemble/samples/controls/button/colorbutton/preview.png",new String[]{"/ensemble/samples/controls/button/colorbutton/ColorButtonApp.java",},new String[]{"javafx.scene.control.Button",},new String[]{},new String[]{"/Controls/Button/Graphic Button",},"/ensemble/samples/controls/button/colorbutton/ColorButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_50 = new SampleInfo("Graphic Button","A button with an embedded image. ","/Controls/Button/Graphic Button","/ensemble/samples/controls/button/graphicbutton","ensemble.samples.controls.button.graphicbutton.GraphicButtonApp","/ensemble/samples/controls/button/graphicbutton/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/button/graphicbutton/GraphicButtonApp.java",},new String[]{"javafx.scene.control.Button",},new String[]{},new String[]{"/Controls/Button/Colored Buttons",},"/ensemble/samples/controls/button/graphicbutton/GraphicButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_51 = new SampleInfo("Pill Button","This sample demonstrates styling toggle buttons with CSS. ","/Controls/Button/Pill Button","/ensemble/samples/controls/button/pillbutton","ensemble.samples.controls.button.pillbutton.PillButtonApp","/ensemble/samples/controls/button/pillbutton/preview.png",new String[]{"/ensemble/samples/controls/button/pillbutton/PillButtonApp.java","/ensemble/samples/controls/button/pillbutton/PillButton.css",},new String[]{"javafx.scene.control.ToggleButton",},new String[]{},new String[]{"/Controls/Button/Toggle Button",},"/ensemble/samples/controls/button/pillbutton/PillButtonApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_52 = new SampleInfo("HorizontalListView","A sample showing an implementation of the ListView control, in which a list of items is displayed in a horizontal row. ListView is a powerful multi-row control, in which each of a virtually unlimited number of horizontal or vertical rows is defined as a cell. The control also supports dynamically variable non-homogenous row heights. ","/Controls/Listview/HorizontalListView","/ensemble/samples/controls/listview/horizontallistview","ensemble.samples.controls.listview.horizontallistview.HorizontalListViewApp","/ensemble/samples/controls/listview/horizontallistview/preview.png",new String[]{"/ensemble/samples/controls/listview/horizontallistview/HorizontalListViewApp.java",},new String[]{"javafx.scene.control.ListView","javafx.scene.control.SelectionModel",},new String[]{},new String[]{"/Controls/Listview/ListViewCellFactory","/Controls/Listview/Simple ListView",},"/ensemble/samples/controls/listview/horizontallistview/HorizontalListViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_53 = new SampleInfo("ListViewCellFactory","A simple implementation of the ListView control that uses a CellFactory to customize the ListView cell contents. Positive values in the list are green, and negative values are red and enclosed in parentheses. Zero values are black. ","/Controls/Listview/ListViewCellFactory","/ensemble/samples/controls/listview/listviewcellfactory","ensemble.samples.controls.listview.listviewcellfactory.ListViewCellFactoryApp","/ensemble/samples/controls/listview/listviewcellfactory/preview.png",new String[]{"/ensemble/samples/controls/listview/listviewcellfactory/ListViewCellFactoryApp.java","/ensemble/samples/controls/listview/listviewcellfactory/MoneyFormatCell.java",},new String[]{"javafx.scene.control.ListView","javafx.scene.control.SelectionModel",},new String[]{},new String[]{"/Controls/Listview/HorizontalListView","/Controls/Listview/Simple ListView",},"/ensemble/samples/controls/listview/listviewcellfactory/ListViewCellFactoryApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_54 = new SampleInfo("Simple ListView","A simple implementation of the ListView control, in which a list of items is displayed vertically.  ListView is a powerful multirow control, in which each of a virtually unlimited number of horizontal or vertical rows is defined as a cell. The control also supports dynamically variable nonhomogenous row heights. ","/Controls/Listview/Simple ListView","/ensemble/samples/controls/listview/simplelistview","ensemble.samples.controls.listview.simplelistview.SimpleListViewApp","/ensemble/samples/controls/listview/simplelistview/preview.png",new String[]{"/ensemble/samples/controls/listview/simplelistview/SimpleListViewApp.java",},new String[]{"javafx.scene.control.ListView","javafx.scene.control.SelectionModel",},new String[]{},new String[]{"/Controls/Listview/HorizontalListView","/Controls/Listview/ListViewCellFactory",},"/ensemble/samples/controls/listview/simplelistview/SimpleListViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_55 = new SampleInfo("Hidden SplitPane","A sample that demonstrates styling a hidden split pane with CSS. ","/Controls/Splitpane/Hidden SplitPane","/ensemble/samples/controls/splitpane/hiddensplitpane","ensemble.samples.controls.splitpane.hiddensplitpane.HiddenSplitPaneApp","/ensemble/samples/controls/splitpane/hiddensplitpane/preview.png",new String[]{"/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPaneApp.java","/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPane.css",},new String[]{"javafx.scene.control.SplitPane",},new String[]{},new String[]{},"/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_56 = new SampleInfo("TabPane","Some implementations of tabs using the TabPane class. ","/Controls/Tab/TabPane","/ensemble/samples/controls/tab/tabpane","ensemble.samples.controls.tab.tabpane.TabPaneApp","/ensemble/samples/controls/tab/tabpane/preview.png",new String[]{"/ensemble/samples/controls/tab/tabpane/TabPaneApp.java","/ensemble/samples/controls/tab/tabpane/tab_16.png",},new String[]{"javafx.scene.control.Tab","javafx.scene.control.TabPane",},new String[]{},new String[]{},"/ensemble/samples/controls/tab/tabpane/TabPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_57 = new SampleInfo("TableCellFactory","A simple table that uses cell factories to add a checkbox to a table column and to add textfields to table columns. The latter enables editing of first name, last name, and email. ","/Controls/Table/TableCellFactory","/ensemble/samples/controls/table/tablecellfactory","ensemble.samples.controls.table.tablecellfactory.TableCellFactoryApp","/ensemble/samples/controls/table/tablecellfactory/preview.png",new String[]{"/ensemble/samples/controls/table/tablecellfactory/Person.java","/ensemble/samples/controls/table/tablecellfactory/TableCellFactoryApp.java",},new String[]{"javafx.scene.control.TableCell","javafx.scene.control.TableColumn","javafx.scene.control.TablePosition","javafx.scene.control.TableRow","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/controls/table/tablecellfactory/TableCellFactoryApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_58 = new SampleInfo("TableView","A simple table with a header row. ","/Controls/Table/TableView","/ensemble/samples/controls/table/tableview","ensemble.samples.controls.table.tableview.TableViewApp","/ensemble/samples/controls/table/tableview/preview.png",new String[]{"/ensemble/samples/controls/table/tableview/Person.java","/ensemble/samples/controls/table/tableview/TableViewApp.java",},new String[]{"javafx.scene.control.TableColumn","javafx.scene.control.TablePosition","javafx.scene.control.TableRow","javafx.scene.control.TableView",},new String[]{},new String[]{},"/ensemble/samples/controls/table/tableview/TableViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_59 = new SampleInfo("Advanced Label","Several Label controls, displayed in various alignments with respect to an image. ","/Controls/Text/Advanced Label","/ensemble/samples/controls/text/advancedlabel","ensemble.samples.controls.text.advancedlabel.AdvancedLabelApp","/ensemble/samples/controls/text/advancedlabel/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/text/advancedlabel/AdvancedLabelApp.java",},new String[]{"javafx.scene.control.Label",},new String[]{},new String[]{"/Controls/Text/Simple Label","/Controls/Button/Graphic Button",},"/ensemble/samples/controls/text/advancedlabel/AdvancedLabelApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_60 = new SampleInfo("Inset Text","A sample that shows styling of text through CSS. ","/Controls/Text/Inset Text","/ensemble/samples/controls/text/insettext","ensemble.samples.controls.text.insettext.InsetTextApp","/ensemble/samples/controls/text/insettext/preview.png",new String[]{"/ensemble/samples/controls/text/insettext/InsetTextApp.java","/ensemble/samples/controls/text/insettext/InsetText.css",},new String[]{"javafx.geometry.Insets","javafx.scene.control.LabelBuilder",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/controls/text/insettext/InsetTextApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_61 = new SampleInfo("Search Box","A sample that demonstrates use of CSS to create a search box. ","/Controls/Text/Search Box","/ensemble/samples/controls/text/searchbox","ensemble.samples.controls.text.searchbox.SearchBoxApp","/ensemble/samples/controls/text/searchbox/preview.png",new String[]{"/ensemble/samples/controls/text/searchbox/SearchBox.java","/ensemble/samples/controls/text/searchbox/SearchBoxApp.java","/ensemble/samples/controls/text/searchbox/SearchBox.css",},new String[]{"javafx.scene.control.TextField",},new String[]{},new String[]{},"/ensemble/samples/controls/text/searchbox/SearchBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_62 = new SampleInfo("Simple Label","A simple implementation of the Label control, with an image to the left of the label. ","/Controls/Text/Simple Label","/ensemble/samples/controls/text/simplelabel","ensemble.samples.controls.text.simplelabel.SimpleLabelApp","/ensemble/samples/controls/text/simplelabel/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/controls/text/simplelabel/SimpleLabelApp.java",},new String[]{"javafx.scene.control.Label",},new String[]{},new String[]{"/Controls/Text/Advanced Label","/Controls/Button/Graphic Button","/Controls/Text/Inset Text",},"/ensemble/samples/controls/text/simplelabel/SimpleLabelApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_63 = new SampleInfo("Text Field","Demonstrates a TextField control that allows you to enter text. ","/Controls/Text/Text Field","/ensemble/samples/controls/text/textfield","ensemble.samples.controls.text.textfield.TextFieldApp","/ensemble/samples/controls/text/textfield/preview.png",new String[]{"/ensemble/samples/controls/text/textfield/TextFieldApp.java",},new String[]{"javafx.scene.control.TextField",},new String[]{},new String[]{},"/ensemble/samples/controls/text/textfield/TextFieldApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_64 = new SampleInfo("Text Validator","A sample that demonstrates text validation. If the value in the TextField is a small number, the field becomes yellow. If the value in the TextField is not a number, the field becomes red. ","/Controls/Text/Text Validator","/ensemble/samples/controls/text/textvalidator","ensemble.samples.controls.text.textvalidator.TextValidatorApp","/ensemble/samples/controls/text/textvalidator/preview.png",new String[]{"/ensemble/samples/controls/text/textvalidator/TextInputValidatorPane.java","/ensemble/samples/controls/text/textvalidator/TextValidatorApp.java","/ensemble/samples/controls/text/textvalidator/ValidationEvent.java","/ensemble/samples/controls/text/textvalidator/ValidationResult.java","/ensemble/samples/controls/text/textvalidator/Validator.java","/ensemble/samples/controls/text/textvalidator/ValidatorPane.java","/ensemble/samples/controls/text/textvalidator/Validators.css",},new String[]{"javafx.scene.control.TextField",},new String[]{},new String[]{"/Controls/Text/Text Field",},"/ensemble/samples/controls/text/textvalidator/TextValidatorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_65 = new SampleInfo("Styled Tool Bar","A sample that shows three ToolBars, two of which are styled specifically with a separate CSS style sheet. ","/Controls/Toolbar/Styled Tool Bar","/ensemble/samples/controls/toolbar/styledtoolbar","ensemble.samples.controls.toolbar.styledtoolbar.StyledToolBarApp","/ensemble/samples/controls/toolbar/styledtoolbar/preview.png",new String[]{"/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBarApp.java","/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBar.css",},new String[]{"javafx.scene.control.ToolBar",},new String[]{},new String[]{"/Controls/Toolbar/Tool Bar",},"/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_66 = new SampleInfo("Tool Bar","A toolbar with three buttons. ","/Controls/Toolbar/Tool Bar","/ensemble/samples/controls/toolbar/toolbar","ensemble.samples.controls.toolbar.toolbar.ToolBarApp","/ensemble/samples/controls/toolbar/toolbar/preview.png",new String[]{"/ensemble/samples/controls/toolbar/toolbar/ToolBarApp.java",},new String[]{"javafx.scene.control.ToolBar",},new String[]{},new String[]{},"/ensemble/samples/controls/toolbar/toolbar/ToolBarApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_67 = new SampleInfo("FXML Login Demo","FXML-based Login screen sample ","/Fxml/FXML Login Demo","/ensemble/samples/fxml/fxmldemo","ensemble.samples.fxml.fxmldemo.FXMLLoginDemoApp","/ensemble/samples/fxml/fxmldemo/preview.png",new String[]{"/ensemble/samples/fxml/fxmldemo/Authenticator.java","/ensemble/samples/fxml/fxmldemo/FXMLLoginDemoApp.java","/ensemble/samples/fxml/fxmldemo/LoginController.java","/ensemble/samples/fxml/fxmldemo/ProfileController.java","/ensemble/samples/fxml/fxmldemo/User.java","/ensemble/samples/fxml/fxmldemo/Login.css","/ensemble/samples/fxml/fxmldemo/Login.fxml","/ensemble/samples/fxml/fxmldemo/Profile.fxml",},new String[]{"java.util.HashMap","java.util.Map","java.io.InputStream","java.util.logging.Level","java.util.logging.Logger","javafx.fxml.FXML","javafx.fxml.FXMLLoader","javafx.fxml.Initializable","javafx.fxml.JavaFXBuilderFactory","javafx.stage.Stage",},new String[]{},new String[]{},"/ensemble/samples/fxml/fxmldemo/FXMLLoginDemoApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_68 = new SampleInfo("Bouncing Balls","A sample that shows animated bouncing balls. Select a ball to start or stop the animation. Select the reset button to stop all the balls. ","/Graphics/Bouncing Balls","/ensemble/samples/graphics/bouncingballs","ensemble.samples.graphics.bouncingballs.BouncingBallsApp","/ensemble/samples/graphics/bouncingballs/preview.png",new String[]{"/ensemble/samples/graphics/bouncingballs/Ball.java","/ensemble/samples/graphics/bouncingballs/BallsPane.java","/ensemble/samples/graphics/bouncingballs/BallsScreen.java","/ensemble/samples/graphics/bouncingballs/BouncingBallsApp.java","/ensemble/samples/graphics/bouncingballs/Constants.java",},new String[]{"java.util.ArrayList","java.util.List","javafx.util.Duration","javafx.stage.Stage","javafx.stage.Screen","javafx.scene.Parent","javafx.scene.Group","javafx.scene.Scene","javafx.scene.Node","javafx.scene.effect.Reflection","javafx.scene.shape.Rectangle","javafx.scene.shape.Line","javafx.scene.shape.Circle","javafx.scene.paint.Color","javafx.scene.paint.CycleMethod","javafx.scene.paint.RadialGradient","javafx.scene.paint.Stop","javafx.scene.control.Button","javafx.scene.text.Text","javafx.application.Application","javafx.animation.Interpolator","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.animation.Animation$Status","javafx.event.EventHandler","javafx.event.ActionEvent","javafx.scene.input.MouseEvent","javafx.geometry.Insets",},new String[]{},new String[]{},"/ensemble/samples/graphics/bouncingballs/BouncingBallsApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_69 = new SampleInfo("Brick Breaker","The main purpose of the game is to break all the bricks and not drop the ball. ","/Graphics/Brick Breaker","/ensemble/samples/graphics/brickbreaker","ensemble.samples.graphics.brickbreaker.BrickBreakerApp","/ensemble/samples/graphics/brickbreaker/preview.png",new String[]{"/ensemble/samples/graphics/brickbreaker/Ball.java","/ensemble/samples/graphics/brickbreaker/Bat.java","/ensemble/samples/graphics/brickbreaker/Bonus.java","/ensemble/samples/graphics/brickbreaker/Brick.java","/ensemble/samples/graphics/brickbreaker/BrickBreakerApp.java","/ensemble/samples/shared-resources/brickImages/background.png","/ensemble/samples/shared-resources/brickImages/bat/left.png","/ensemble/samples/shared-resources/brickImages/bat/center.png","/ensemble/samples/shared-resources/brickImages/bat/right.png","/ensemble/samples/shared-resources/brickImages/ball/ball0.png","/ensemble/samples/shared-resources/brickImages/ball/ball1.png","/ensemble/samples/shared-resources/brickImages/ball/ball2.png","/ensemble/samples/shared-resources/brickImages/ball/ball3.png","/ensemble/samples/shared-resources/brickImages/ball/ball4.png","/ensemble/samples/shared-resources/brickImages/ball/ball5.png","/ensemble/samples/shared-resources/brickImages/logo.png","/ensemble/samples/shared-resources/brickImages/splash/brick.png","/ensemble/samples/shared-resources/brickImages/splash/brickshadow.png","/ensemble/samples/shared-resources/brickImages/splash/breaker.png","/ensemble/samples/shared-resources/brickImages/splash/breakershadow.png","/ensemble/samples/shared-resources/brickImages/splash/pressanykey.png","/ensemble/samples/shared-resources/brickImages/splash/pressanykeyshadow.png","/ensemble/samples/shared-resources/brickImages/splash/strike.png","/ensemble/samples/shared-resources/brickImages/splash/strikeshadow.png","/ensemble/samples/shared-resources/brickImages/splash/sun.png","/ensemble/samples/shared-resources/brickImages/ready.png","/ensemble/samples/shared-resources/brickImages/gameover.png","/ensemble/samples/shared-resources/brickImages/brick/blue.png","/ensemble/samples/shared-resources/brickImages/brick/broken1.png","/ensemble/samples/shared-resources/brickImages/brick/broken2.png","/ensemble/samples/shared-resources/brickImages/brick/brown.png","/ensemble/samples/shared-resources/brickImages/brick/cyan.png","/ensemble/samples/shared-resources/brickImages/brick/green.png","/ensemble/samples/shared-resources/brickImages/brick/grey.png","/ensemble/samples/shared-resources/brickImages/brick/magenta.png","/ensemble/samples/shared-resources/brickImages/brick/orange.png","/ensemble/samples/shared-resources/brickImages/brick/red.png","/ensemble/samples/shared-resources/brickImages/brick/violet.png","/ensemble/samples/shared-resources/brickImages/brick/white.png","/ensemble/samples/shared-resources/brickImages/brick/yellow.png","/ensemble/samples/shared-resources/brickImages/bonus/ballslow.png","/ensemble/samples/shared-resources/brickImages/bonus/ballfast.png","/ensemble/samples/shared-resources/brickImages/bonus/catch.png","/ensemble/samples/shared-resources/brickImages/bonus/batgrow.png","/ensemble/samples/shared-resources/brickImages/bonus/batreduce.png","/ensemble/samples/shared-resources/brickImages/bonus/ballgrow.png","/ensemble/samples/shared-resources/brickImages/bonus/ballreduce.png","/ensemble/samples/shared-resources/brickImages/bonus/strike.png","/ensemble/samples/shared-resources/brickImages/bonus/extralife.png","/ensemble/samples/graphics/brickbreaker/Config.java","/ensemble/samples/shared-resources/brickImages/vline.png","/ensemble/samples/graphics/brickbreaker/Level.java","/ensemble/samples/graphics/brickbreaker/LevelData.java","/ensemble/samples/graphics/brickbreaker/Splash.java","/ensemble/samples/graphics/brickbreaker/Utils.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView","javafx.util.Duration","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.application.Application","javafx.application.Platform","javafx.collections.ObservableList","javafx.geometry.Rectangle2D","javafx.geometry.VPos",},new String[]{},new String[]{},"/ensemble/samples/graphics/brickbreaker/BrickBreakerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_70 = new SampleInfo("Calculator","A calculator that performs simple math exercises. ","/Graphics/Calculator","/ensemble/samples/graphics/calc","ensemble.samples.graphics.calc.CalculatorApp","/ensemble/samples/graphics/calc/preview.png",new String[]{"/ensemble/samples/graphics/calc/Calculator.java","/ensemble/samples/graphics/calc/CalculatorApp.java","/ensemble/samples/graphics/calc/Key.java","/ensemble/samples/graphics/calc/Util.java",},new String[]{"javafx.application.Application","javafx.stage.Stage","javafx.scene.Scene","javafx.scene.Group","javafx.scene.Parent","javafx.scene.paint.Color","javafx.scene.paint.CycleMethod","javafx.scene.paint.LinearGradient","javafx.scene.paint.Stop","javafx.scene.input.KeyEvent","javafx.scene.input.MouseEvent","javafx.scene.shape.Rectangle","javafx.scene.text.Font","javafx.scene.text.Text","javafx.event.EventHandler","javafx.geometry.VPos",},new String[]{},new String[]{},"/ensemble/samples/graphics/calc/CalculatorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_71 = new SampleInfo("Colorful Circles","A sample that demonstrates how to draw and paint shapes, apply visual effects, blend colors in overlapping objects, and animate objects. ","/Graphics/Colorful Circles","/ensemble/samples/graphics/colorfulcircles","ensemble.samples.graphics.colorfulcircles.ColorfulCirclesApp","/ensemble/samples/graphics/colorfulcircles/preview.png",new String[]{"/ensemble/samples/graphics/colorfulcircles/ColorfulCirclesApp.java",},new String[]{"javafx.scene.effect.BlendMode","javafx.scene.effect.BoxBlur","javafx.scene.shape.Circle","javafx.scene.Group","javafx.scene.paint.LinearGradient","javafx.animation.Timeline",},new String[]{},new String[]{},"/ensemble/samples/graphics/colorfulcircles/ColorfulCirclesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_72 = new SampleInfo("Digital Clock","A digital clock application that demonstrates JavaFX animation, images, and effects. ","/Graphics/Digital Clock","/ensemble/samples/graphics/digitalclock","ensemble.samples.graphics.digitalclock.DigitalClockApp","/ensemble/samples/graphics/digitalclock/preview.png",new String[]{"/ensemble/samples/graphics/digitalclock/Clock.java","/ensemble/samples/graphics/digitalclock/Digit.java","/ensemble/samples/shared-resources/DigitalClock-background.png","/ensemble/samples/graphics/digitalclock/DigitalClockApp.java",},new String[]{"javafx.scene.effect.Glow","javafx.scene.shape.Polygon","javafx.scene.transform.Shear",},new String[]{},new String[]{},"/ensemble/samples/graphics/digitalclock/DigitalClockApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_73 = new SampleInfo("Display Shelf","A display shelf of images using the PerspectiveTransform effect. ","/Graphics/Display Shelf","/ensemble/samples/graphics/displayshelf","ensemble.samples.graphics.displayshelf.DisplayShelfApp","/ensemble/samples/graphics/displayshelf/preview.png",new String[]{"/ensemble/samples/graphics/displayshelf/DisplayShelf.java","/ensemble/samples/shared-resources/Animal1.jpg","/ensemble/samples/shared-resources/Animal2.jpg","/ensemble/samples/shared-resources/Animal3.jpg","/ensemble/samples/shared-resources/Animal4.jpg","/ensemble/samples/shared-resources/Animal5.jpg","/ensemble/samples/shared-resources/Animal6.jpg","/ensemble/samples/shared-resources/Animal7.jpg","/ensemble/samples/shared-resources/Animal8.jpg","/ensemble/samples/shared-resources/Animal9.jpg","/ensemble/samples/shared-resources/Animal10.jpg","/ensemble/samples/shared-resources/Animal11.jpg","/ensemble/samples/shared-resources/Animal12.jpg","/ensemble/samples/shared-resources/Animal13.jpg","/ensemble/samples/shared-resources/Animal14.jpg","/ensemble/samples/graphics/displayshelf/DisplayShelfApp.java","/ensemble/samples/graphics/displayshelf/PerspectiveImage.java","/ensemble/samples/graphics/displayshelf/DisplayShelf.css",},new String[]{"javafx.scene.effect.PerspectiveTransform","javafx.scene.effect.Reflection","javafx.scene.control.ScrollBar","javafx.scene.input.MouseEvent","javafx.scene.input.KeyEvent",},new String[]{},new String[]{},"/ensemble/samples/graphics/displayshelf/DisplayShelfApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_74 = new SampleInfo("Puzzle Pieces","A sample in which an image is broken into pieces to create a jigsaw puzzle. ","/Graphics/Puzzle Pieces","/ensemble/samples/graphics/puzzle","ensemble.samples.graphics.puzzle.PuzzlePiecesApp","/ensemble/samples/graphics/puzzle/preview.png",new String[]{"/ensemble/samples/graphics/puzzle/Desk.java","/ensemble/samples/graphics/puzzle/Piece.java","/ensemble/samples/shared-resources/PuzzlePieces-picture.jpg","/ensemble/samples/graphics/puzzle/PuzzlePiecesApp.java",},new String[]{"javafx.scene.shape.Path","javafx.scene.image.Image","javafx.scene.image.ImageView","javafx.scene.control.Button","javafx.scene.layout.Pane","javafx.scene.input.MouseEvent","javafx.scene.effect.DropShadow",},new String[]{},new String[]{},"/ensemble/samples/graphics/puzzle/PuzzlePiecesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_75 = new SampleInfo("Stopwatch","An animated stopwatch. Click the green button to start the stopwatch and click the red button to stop it. ","/Graphics/Stopwatch","/ensemble/samples/graphics/stopwatch","ensemble.samples.graphics.stopwatch.StopWatchApp","/ensemble/samples/graphics/stopwatch/preview.png",new String[]{"/ensemble/samples/graphics/stopwatch/Dial.java","/ensemble/samples/graphics/stopwatch/DigitalClock.java","/ensemble/samples/graphics/stopwatch/StopWatchApp.java","/ensemble/samples/graphics/stopwatch/StopWatchButton.java","/ensemble/samples/shared-resources/stopwatch.png","/ensemble/samples/graphics/stopwatch/Watch.java",},new String[]{"javafx.scene.effect.DropShadow","javafx.scene.effect.GaussianBlur","javafx.scene.effect.Light","javafx.scene.effect.Lighting","javafx.scene.image.Image","javafx.scene.image.ImageView","javafx.scene.shape.Circle","javafx.scene.Group","javafx.scene.shape.Ellipse","javafx.scene.shape.Rectangle","javafx.scene.text.Font","javafx.scene.text.Text","javafx.scene.text.TextAlignment","javafx.scene.text.TextBoundsType","javafx.scene.transform.Rotate","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/graphics/stopwatch/StopWatchApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_76 = new SampleInfo("Drop Shadow","A sample that demonstrates how a drop shadow effect is affected by various settings. ","/Graphics/Effects/Drop Shadow","/ensemble/samples/graphics/effects/dropshadow","ensemble.samples.graphics.effects.dropshadow.DropShadowApp","/ensemble/samples/graphics/effects/dropshadow/preview.png",new String[]{"/ensemble/samples/graphics/effects/dropshadow/DropShadowApp.java",},new String[]{"javafx.scene.effect.DropShadow","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/dropshadow/DropShadowApp.java",new PlaygroundProperty[]{new PlaygroundProperty("dropShadow","radius","min","0","max","20","name","Drop Shadow Radius"),new PlaygroundProperty("dropShadow","offsetX","min","-10","max","10","name","Drop Shadow Offset X"),new PlaygroundProperty("dropShadow","offsetY","min","-10","max","10","name","Drop Shadow Offset Y"),new PlaygroundProperty("dropShadow","radius","min","0","max","1","name","Drop Shadow Spread"),new PlaygroundProperty("dropShadow","color","name","Drop Shadow Color"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_77 = new SampleInfo("Gaussian Blur","A sample that demonstrates a Gaussian blur effect on an image, with varying degrees of blurriness. ","/Graphics/Effects/Gaussian Blur","/ensemble/samples/graphics/effects/gaussianblur","ensemble.samples.graphics.effects.gaussianblur.GaussianBlurApp","/ensemble/samples/graphics/effects/gaussianblur/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/graphics/effects/gaussianblur/GaussianBlurApp.java",},new String[]{"javafx.scene.effect.GaussianBlur","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/gaussianblur/GaussianBlurApp.java",new PlaygroundProperty[]{new PlaygroundProperty("gaussianBlur","radius","min","0","max","15","name","Gaussian Blur Level"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_78 = new SampleInfo("Inner Shadow","A sample that demonstrates how an inner shadow effect is affected by various settings. ","/Graphics/Effects/Inner Shadow","/ensemble/samples/graphics/effects/innershadow","ensemble.samples.graphics.effects.innershadow.InnerShadowApp","/ensemble/samples/graphics/effects/innershadow/preview.png",new String[]{"/ensemble/samples/graphics/effects/innershadow/InnerShadowApp.java",},new String[]{"javafx.scene.effect.InnerShadow","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/innershadow/InnerShadowApp.java",new PlaygroundProperty[]{new PlaygroundProperty("sample","fill","name","Text Fill"),new PlaygroundProperty("innerShadow","radius","min","0","max","20","name","Inner Shadow Radius"),new PlaygroundProperty("innerShadow","offsetX","min","-10","max","10","name","Inner Shadow Offset X"),new PlaygroundProperty("innerShadow","offsetY","min","-10","max","10","name","Inner Shadow Offset Y"),new PlaygroundProperty("innerShadow","color","name","Inner Shadow Color"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_79 = new SampleInfo("Reflection","A sample that demonstrates how a reflection effect is affected by various settings. ","/Graphics/Effects/Reflection","/ensemble/samples/graphics/effects/reflection","ensemble.samples.graphics.effects.reflection.ReflectionApp","/ensemble/samples/graphics/effects/reflection/preview.png",new String[]{"/ensemble/samples/shared-resources/boat.jpg","/ensemble/samples/graphics/effects/reflection/ReflectionApp.java",},new String[]{"javafx.scene.effect.Reflection","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/reflection/ReflectionApp.java",new PlaygroundProperty[]{new PlaygroundProperty("reflection","bottomOpacity","min","0","max","1","name","Reflection Bottom Opacity"),new PlaygroundProperty("reflection","topOpacity","min","0","max","1","name","Reflection Top Opacity"),new PlaygroundProperty("reflection","fraction","min","0","max","1","name","Reflection Fraction"),new PlaygroundProperty("reflection","topOffset","min","-10","max","10","name","Reflection Top Offset"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_80 = new SampleInfo("Sepia Tone","A sample that demonstrates varying degrees of a sepia tone effect. ","/Graphics/Effects/Sepia Tone","/ensemble/samples/graphics/effects/sepiatone","ensemble.samples.graphics.effects.sepiatone.SepiaToneApp","/ensemble/samples/graphics/effects/sepiatone/preview.png",new String[]{"/ensemble/samples/shared-resources/boat.jpg","/ensemble/samples/graphics/effects/sepiatone/SepiaToneApp.java",},new String[]{"javafx.scene.effect.SepiaTone","javafx.scene.effect.Effect",},new String[]{},new String[]{},"/ensemble/samples/graphics/effects/sepiatone/SepiaToneApp.java",new PlaygroundProperty[]{new PlaygroundProperty("sepiaTone","level","min","0","max","1","name","SepiaTone Level"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_81 = new SampleInfo("Image Creation","A sample that demonstrates the use of two different constructors in the Image class. ","/Graphics/Images/Image Creation","/ensemble/samples/graphics/images/imagecreation","ensemble.samples.graphics.images.imagecreation.ImageCreationApp","/ensemble/samples/graphics/images/imagecreation/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/graphics/images/imagecreation/ImageCreationApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics/images/imagecreation/ImageCreationApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_82 = new SampleInfo("Image Operation","A sample that demonstrates the use of two different constructors in the Image class. ","/Graphics/Images/Image Operation","/ensemble/samples/graphics/images/imageoperator","ensemble.samples.graphics.images.imageoperator.ImageOperationApp","/ensemble/samples/graphics/images/imageoperator/preview.png",new String[]{"/ensemble/samples/graphics/images/imageoperator/ImageOperationApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics/images/imageoperator/ImageOperationApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"gridSize","min","0","max","10","name","Grid Size"),new PlaygroundProperty(null,"hueFactor","min","0","max","32","name","Hue Factor"),new PlaygroundProperty(null,"hueOffset","min","0","max","360","name","Hue Offset"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_83 = new SampleInfo("Image Properties","A sample that demonstrates how to resize images and use the Viewport property. ","/Graphics/Images/Image Properties","/ensemble/samples/graphics/images/imageproperties","ensemble.samples.graphics.images.imageproperties.ImagePropertiesApp","/ensemble/samples/graphics/images/imageproperties/preview.png",new String[]{"/ensemble/samples/shared-resources/sanfran.jpg","/ensemble/samples/graphics/images/imageproperties/ImagePropertiesApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{"/Graphics/Images/Image Creation",},"/ensemble/samples/graphics/images/imageproperties/ImagePropertiesApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_84 = new SampleInfo("Color","Rectangles filled with colors. ","/Graphics/Paints/Color","/ensemble/samples/graphics/paints/color","ensemble.samples.graphics.paints.color.ColorApp","/ensemble/samples/graphics/paints/color/preview.png",new String[]{"/ensemble/samples/graphics/paints/color/ColorApp.java",},new String[]{"javafx.scene.shape.Shape","javafx.scene.paint.Color","javafx.scene.paint.Paint",},new String[]{},new String[]{"/Graphics/Paints/Radial Gradient","/Graphics/Paints/Linear Gradient",},"/ensemble/samples/graphics/paints/color/ColorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_85 = new SampleInfo("Linear Gradient","A sample with two rectangles, one filled with a simple linear gradient and one filled with a more complex gradient using the reflection cycle method. ","/Graphics/Paints/Linear Gradient","/ensemble/samples/graphics/paints/lineargradient","ensemble.samples.graphics.paints.lineargradient.LinearGradientApp","/ensemble/samples/graphics/paints/lineargradient/preview.png",new String[]{"/ensemble/samples/graphics/paints/lineargradient/LinearGradientApp.java",},new String[]{"javafx.scene.paint.LinearGradient","javafx.scene.shape.Shape","javafx.scene.paint.Paint","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Paints/Color","/Graphics/Paints/Radial Gradient",},"/ensemble/samples/graphics/paints/lineargradient/LinearGradientApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_86 = new SampleInfo("Radial Gradient","A sample that demonstrates two circles, one filled with a simple radial gradient and one filled with a more complex radial gradient. ","/Graphics/Paints/Radial Gradient","/ensemble/samples/graphics/paints/radialgradient","ensemble.samples.graphics.paints.radialgradient.RadialGradientApp","/ensemble/samples/graphics/paints/radialgradient/preview.png",new String[]{"/ensemble/samples/graphics/paints/radialgradient/RadialGradientApp.java",},new String[]{"javafx.scene.paint.RadialGradient","javafx.scene.shape.Shape","javafx.scene.paint.Paint","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Paints/Color","/Graphics/Paints/Linear Gradient",},"/ensemble/samples/graphics/paints/radialgradient/RadialGradientApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_87 = new SampleInfo("Arc","A sample that demonstrates how various settings affect a line shape. ","/Graphics/Shapes/Arc","/ensemble/samples/graphics/shapes/arc","ensemble.samples.graphics.shapes.arc.ArcApp","/ensemble/samples/graphics/shapes/arc/preview.png",new String[]{"/ensemble/samples/graphics/shapes/arc/ArcApp.java",},new String[]{"javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Shapes/Circle","/Graphics/Shapes/Ellipse",},"/ensemble/samples/graphics/shapes/arc/ArcApp.java",new PlaygroundProperty[]{new PlaygroundProperty("arc1","fill","name","Arc1 Fill"),new PlaygroundProperty("arc1","startAngle","min","0","max","360","name","Arc 1 Start Angle"),new PlaygroundProperty("arc1","length","min","0","max","360","name","Arc 1 Length"),new PlaygroundProperty("arc2","stroke","name","Arc 2 Stroke"),new PlaygroundProperty("arc2","strokeWidth","min","0","max","5","name","Arc 2 Stroke Width"),new PlaygroundProperty("arc2","radiusX","min","0","max","50","name","Arc 2 Radius X"),new PlaygroundProperty("arc2","radiusY","min","0","max","50","name","Arc 2 Radius Y"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_88 = new SampleInfo("Circle","A sample showing two circles with controls to change fill, stroke, and radius. ","/Graphics/Shapes/Circle","/ensemble/samples/graphics/shapes/circle","ensemble.samples.graphics.shapes.circle.CircleApp","/ensemble/samples/graphics/shapes/circle/preview.png",new String[]{"/ensemble/samples/graphics/shapes/circle/CircleApp.java",},new String[]{"javafx.scene.shape.Circle","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Shapes/Arc","/Graphics/Shapes/Ellipse",},"/ensemble/samples/graphics/shapes/circle/CircleApp.java",new PlaygroundProperty[]{new PlaygroundProperty("circle1","fill","name","Circle 1 Fill"),new PlaygroundProperty("circle1","radius","min","10","max","40","name","Circle 1 Radius"),new PlaygroundProperty("circle2","stroke","name","Circle 1 Stroke"),new PlaygroundProperty("circle2","strokeWidth","min","1","max","5","name","Circle 2 Stroke Width"),new PlaygroundProperty("circle2","radius","min","10","max","40","name","Circle 2 Radius"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_89 = new SampleInfo("Cubic Curve","A sample showing how various settings change a cubic Bézier parametric curve. ","/Graphics/Shapes/Cubic Curve","/ensemble/samples/graphics/shapes/cubiccurve","ensemble.samples.graphics.shapes.cubiccurve.CubicCurveApp","/ensemble/samples/graphics/shapes/cubiccurve/preview.png",new String[]{"/ensemble/samples/graphics/shapes/cubiccurve/CubicCurveApp.java",},new String[]{"javafx.scene.shape.CubicCurve","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/cubiccurve/CubicCurveApp.java",new PlaygroundProperty[]{new PlaygroundProperty("cubicCurve","fill","name","Cubic Curve Fill"),new PlaygroundProperty("cubicCurve","stroke","name","Cubic Curve Stroke"),new PlaygroundProperty("cubicCurve","startX","min","0","max","170","name","Cubic Curve Start X"),new PlaygroundProperty("cubicCurve","startY","min","10","max","80","name","Cubic Curve Start Y"),new PlaygroundProperty("cubicCurve","controlX1","min","0","max","180","name","Cubic Curve Control X1"),new PlaygroundProperty("cubicCurve","controlY1","min","0","max","90","name","Cubic Curve Control Y1"),new PlaygroundProperty("cubicCurve","controlX2","min","0","max","180","name","Cubic Curve Control X2"),new PlaygroundProperty("cubicCurve","controlY2","min","0","max","90","name","Cubic Curve Control Y2"),new PlaygroundProperty("cubicCurve","endX","min","10","max","180","name","Cubic Curve End X"),new PlaygroundProperty("cubicCurve","endY","min","0","max","80","name","Cubic Curve End Y"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_90 = new SampleInfo("Ellipse","A sample that demonstrates how various settings affect two elliptical shapes. ","/Graphics/Shapes/Ellipse","/ensemble/samples/graphics/shapes/ellipse","ensemble.samples.graphics.shapes.ellipse.EllipseApp","/ensemble/samples/graphics/shapes/ellipse/preview.png",new String[]{"/ensemble/samples/graphics/shapes/ellipse/EllipseApp.java",},new String[]{"javafx.scene.shape.Ellipse","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{"/Graphics/Shapes/Circle","/Graphics/Shapes/Arc",},"/ensemble/samples/graphics/shapes/ellipse/EllipseApp.java",new PlaygroundProperty[]{new PlaygroundProperty("ellipse1","fill","name","Ellipse 1 Fill"),new PlaygroundProperty("ellipse1","radiusX","min","10","max","40","name","Ellipse 1 Width"),new PlaygroundProperty("ellipse1","radiusY","min","10","max","45","name","Ellipse 1 Height"),new PlaygroundProperty("ellipse2","stroke","name","Ellipse 2 Stroke"),new PlaygroundProperty("ellipse2","strokeWidth","min","1","max","5","name","Ellipse 2 Stroke Width"),new PlaygroundProperty("ellipse2","radiusX","min","10","max","40","name","Ellipse 2 Width"),new PlaygroundProperty("ellipse2","radiusY","min","10","max","45","name","Ellipse 2 Height"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_91 = new SampleInfo("Line","A sample that demonstrates how various settings affect a line shape. ","/Graphics/Shapes/Line","/ensemble/samples/graphics/shapes/line","ensemble.samples.graphics.shapes.line.LineApp","/ensemble/samples/graphics/shapes/line/preview.png",new String[]{"/ensemble/samples/graphics/shapes/line/LineApp.java",},new String[]{"javafx.scene.shape.Line","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/line/LineApp.java",new PlaygroundProperty[]{new PlaygroundProperty("exampleLine","startX","min","50","max","550"),new PlaygroundProperty("exampleLine","startY","min","50","max","350"),new PlaygroundProperty("exampleLine","endX","min","50","max","550"),new PlaygroundProperty("exampleLine","endY","min","50","max","350"),new PlaygroundProperty("exampleLine","stroke"),new PlaygroundProperty("exampleLine","strokeWidth","min","0.1","max","50"),new PlaygroundProperty("exampleLine","strokeLineCap"),new PlaygroundProperty("exampleLine","getStrokeDashArray"),new PlaygroundProperty("exampleLine","strokeDashOffset","min","0","max","500"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_92 = new SampleInfo("Path","A sample that demonstrates two path shapes. ","/Graphics/Shapes/Path","/ensemble/samples/graphics/shapes/path","ensemble.samples.graphics.shapes.path.PathApp","/ensemble/samples/graphics/shapes/path/preview.png",new String[]{"/ensemble/samples/graphics/shapes/path/PathApp.java",},new String[]{"javafx.scene.shape.Path","javafx.scene.shape.ArcTo","javafx.scene.shape.ClosePath","javafx.scene.shape.CubicCurveTo","javafx.scene.shape.HLineTo","javafx.scene.shape.LineTo","javafx.scene.shape.MoveTo","javafx.scene.shape.QuadCurveTo","javafx.scene.shape.VLineTo","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/path/PathApp.java",new PlaygroundProperty[]{new PlaygroundProperty("path1","stroke","name","Path 1 Stroke"),new PlaygroundProperty("path2","stroke","name","Path 2 Stroke"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_93 = new SampleInfo("Polygon","A sample that demonstrates polygon construction. ","/Graphics/Shapes/Polygon","/ensemble/samples/graphics/shapes/polygon","ensemble.samples.graphics.shapes.polygon.PolygonApp","/ensemble/samples/graphics/shapes/polygon/preview.png",new String[]{"/ensemble/samples/graphics/shapes/polygon/PolygonApp.java",},new String[]{"javafx.scene.shape.Polygon","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/polygon/PolygonApp.java",new PlaygroundProperty[]{new PlaygroundProperty("polygon1","fill","name","Polygon 1 Fill"),new PlaygroundProperty("polygon2","stroke","name","Polygon 2 Stroke"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_94 = new SampleInfo("Polyline","A sample that demonstrates polyline construction with stroke and fill. ","/Graphics/Shapes/Polyline","/ensemble/samples/graphics/shapes/polyline","ensemble.samples.graphics.shapes.polyline.PolylineApp","/ensemble/samples/graphics/shapes/polyline/preview.png",new String[]{"/ensemble/samples/graphics/shapes/polyline/PolylineApp.java",},new String[]{"javafx.scene.shape.Polyline","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/polyline/PolylineApp.java",new PlaygroundProperty[]{new PlaygroundProperty("polyline1","fill","name","Polyline 1 Fill"),new PlaygroundProperty("polyline1","stroke","name","Polyline 1 Stroke"),new PlaygroundProperty("polyline2","stroke","name","Polyline 2 Stroke"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_95 = new SampleInfo("Quad Curve","An example of how various settings affect a quadratic Bézier parametric curve. ","/Graphics/Shapes/Quad Curve","/ensemble/samples/graphics/shapes/quadcurve","ensemble.samples.graphics.shapes.quadcurve.QuadCurveApp","/ensemble/samples/graphics/shapes/quadcurve/preview.png",new String[]{"/ensemble/samples/graphics/shapes/quadcurve/QuadCurveApp.java",},new String[]{"javafx.scene.shape.QuadCurve","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/quadcurve/QuadCurveApp.java",new PlaygroundProperty[]{new PlaygroundProperty("quadCurve","fill","name","Cubic Curve Fill"),new PlaygroundProperty("quadCurve","stroke","name","Cubic Curve Stroke"),new PlaygroundProperty("quadCurve","startX","min","0","max","170","name","Cubic Curve Start X"),new PlaygroundProperty("quadCurve","startY","min","10","max","80","name","Cubic Curve Start Y"),new PlaygroundProperty("quadCurve","controlX","min","0","max","180","name","Cubic Curve Control X"),new PlaygroundProperty("quadCurve","controlY","min","0","max","90","name","Cubic Curve Control Y"),new PlaygroundProperty("quadCurve","endX","min","10","max","180","name","Cubic Curve End X"),new PlaygroundProperty("quadCurve","endY","min","10","max","80","name","Cubic Curve End Y"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_96 = new SampleInfo("Rectangle","A sample showing how various settings effect two rectangles. ","/Graphics/Shapes/Rectangle","/ensemble/samples/graphics/shapes/rectangle","ensemble.samples.graphics.shapes.rectangle.RectangleApp","/ensemble/samples/graphics/shapes/rectangle/preview.png",new String[]{"/ensemble/samples/graphics/shapes/rectangle/RectangleApp.java",},new String[]{"javafx.scene.shape.Rectangle","javafx.scene.shape.Shape","javafx.scene.paint.Color",},new String[]{},new String[]{},"/ensemble/samples/graphics/shapes/rectangle/RectangleApp.java",new PlaygroundProperty[]{new PlaygroundProperty("rect1","fill","name","Rectangle 1 Fill"),new PlaygroundProperty("rect1","width","min","10","max","50","name","Rectangle 1 Width"),new PlaygroundProperty("rect1","height","min","10","max","50","name","Rectangle 1 Height"),new PlaygroundProperty("rect1","arcWidth","min","0","max","50","name","Rectangle 1 Arc Width"),new PlaygroundProperty("rect1","arcHeight","min","0","max","50","name","Rectangle 1 Arc Height"),new PlaygroundProperty("rect2","stroke","name","Rectangle 2 Stroke"),new PlaygroundProperty("rect2","strokeWidth","min","1","max","5","name","Rectangle 2 Stroke Width"),new PlaygroundProperty("rect2","width","min","10","max","50","name","Rectangle 2 Width"),new PlaygroundProperty("rect2","height","min","10","max","50","name","Rectangle 2 Height"),new PlaygroundProperty("rect2","arcWidth","min","0","max","50","name","Rectangle 2 Arc Width"),new PlaygroundProperty("rect2","arcHeight","min","0","max","50","name","Rectangle 2 Arc Height"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_97 = new SampleInfo("3D Cubes","A sample that demonstrates an animated rotation of 3D cubes. ","/Graphics 3d/3D Cubes","/ensemble/samples/graphics3d/cube","ensemble.samples.graphics3d.cube.CubeApp","/ensemble/samples/graphics3d/cube/preview.png",new String[]{"/ensemble/samples/graphics3d/cube/Cube.java","/ensemble/samples/graphics3d/cube/CubeApp.java",},new String[]{"javafx.scene.PerspectiveCamera","javafx.scene.SubScene","javafx.scene.paint.Color","javafx.scene.transform.Rotate","javafx.scene.transform.Translate",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cube/CubeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,});
+    private static final SampleInfo SAMPLE_98 = new SampleInfo("3D Cube System","A sample that demonstrates an animated rotation of 3D cubes. When the application runs in standalone mode, the scene must be constructed with the depthBuffer argument set to true, and the root node must have depthTest set to true. ","/Graphics 3d/3D Cube System","/ensemble/samples/graphics3d/cubesystem","ensemble.samples.graphics3d.cubesystem.CubeSystemApp","/ensemble/samples/graphics3d/cubesystem/preview.png",new String[]{"/ensemble/samples/graphics3d/cubesystem/Cube.java","/ensemble/samples/graphics3d/cubesystem/CubeSystemApp.java","/ensemble/samples/graphics3d/cubesystem/Xform.java",},new String[]{"javafx.scene.transform.Rotate","javafx.scene.paint.Color","javafx.scene.shape.RectangleBuilder",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cubesystem/CubeSystemApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,});
+    private static final SampleInfo SAMPLE_99 = new SampleInfo("3D Box","A sample that shows a 3D box and uses a perspective camera for rendering the scene. ","/Graphics 3d/3D Box","/ensemble/samples/graphics3d/simple3dbox","ensemble.samples.graphics3d.simple3dbox.Simple3DBoxApp","/ensemble/samples/graphics3d/simple3dbox/preview.png",new String[]{"/ensemble/samples/graphics3d/simple3dbox/Simple3DBoxApp.java",},new String[]{"javafx.scene.paint.Color","javafx.scene.transform.Rotate","javafx.scene.transform.Translate",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/simple3dbox/Simple3DBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,});
+    private static final SampleInfo SAMPLE_100 = new SampleInfo("Xylophone","A sample that demonstrates a xylophone made of 3D cubes. ","/Graphics 3d/Xylophone","/ensemble/samples/graphics3d/xylophone","ensemble.samples.graphics3d.xylophone.XylophoneApp","/ensemble/samples/graphics3d/xylophone/preview.png",new String[]{"/ensemble/samples/graphics3d/xylophone/Cube.java","/ensemble/samples/graphics3d/xylophone/Xform.java","/ensemble/samples/shared-resources/Note1.wav","/ensemble/samples/shared-resources/Note2.wav","/ensemble/samples/shared-resources/Note3.wav","/ensemble/samples/shared-resources/Note4.wav","/ensemble/samples/shared-resources/Note5.wav","/ensemble/samples/shared-resources/Note6.wav","/ensemble/samples/shared-resources/Note7.wav","/ensemble/samples/shared-resources/Note8.wav","/ensemble/samples/graphics3d/xylophone/XylophoneApp.java",},new String[]{"javafx.scene.transform.Rotate","javafx.scene.paint.Color","javafx.scene.PerspectiveCamera","javafx.scene.shape.RectangleBuilder","javafx.scene.SubScene",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/xylophone/XylophoneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,});
+    private static final SampleInfo SAMPLE_101 = new SampleInfo("ChangeListener","A sample that demonstrates how to add or remove a change listener on a node (for example, a Rectangle node) for some property (for example, Rectangle.hover). Once you add a listener, the text field  shows the hover property change. ","/Language/Beans/ChangeListener","/ensemble/samples/language/beans/changelistener","ensemble.samples.language.beans.changelistener.ChangeListenerApp","/ensemble/samples/language/beans/changelistener/preview.png",new String[]{"/ensemble/samples/language/beans/changelistener/ChangeListenerApp.java",},new String[]{"javafx.beans.value.ChangeListener","javafx.beans.InvalidationListener","javafx.beans.value.ObservableValue",},new String[]{},new String[]{},"/ensemble/samples/language/beans/changelistener/ChangeListenerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_102 = new SampleInfo("String Binding","A sample that demonstrates how to bind text properties so the value of the bound property is updated automatically when the value of the original property is changed. ","/Language/Beans/String Binding","/ensemble/samples/language/beans/stringbinding","ensemble.samples.language.beans.stringbinding.StringBindingApp","/ensemble/samples/language/beans/stringbinding/preview.png",new String[]{"/ensemble/samples/language/beans/stringbinding/StringBindingApp.java",},new String[]{"javafx.beans.binding.StringBinding","javafx.scene.control.TextField","javafx.scene.control.Label",},new String[]{},new String[]{},"/ensemble/samples/language/beans/stringbinding/StringBindingApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_103 = new SampleInfo("ObservableList","A sample that demonstrates the ObservableList interface, which extends the java.util.List interface. Click the button to change an integer to a new random number in a random position in the list. Once you add a listener, the index of the changed number is displayed above the buttons. ","/Language/Collections/ObservableList","/ensemble/samples/language/collections/observablelist","ensemble.samples.language.collections.observablelist.ObservableListApp","/ensemble/samples/language/collections/observablelist/preview.png",new String[]{"/ensemble/samples/language/collections/observablelist/ObservableListApp.java",},new String[]{"javafx.beans.value.ChangeListener","javafx.collections.FXCollections","javafx.collections.ListChangeListener","javafx.collections.ObservableList",},new String[]{},new String[]{},"/ensemble/samples/language/collections/observablelist/ObservableListApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_104 = new SampleInfo("AnchorPane","A simple example of an AnchorPane layout. ","/Layout/AnchorPane","/ensemble/samples/layout/anchorpane","ensemble.samples.layout.anchorpane.AnchorPaneApp","/ensemble/samples/layout/anchorpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/anchorpane/AnchorPaneApp.java",},new String[]{"javafx.scene.layout.AnchorPane","javafx.collections.ObservableList",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/layout/anchorpane/AnchorPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_105 = new SampleInfo("BorderPane","An example of  a BorderPane layout, with placement of children in the top, left, center, right, and bottom positions. ","/Layout/BorderPane","/ensemble/samples/layout/borderpane","ensemble.samples.layout.borderpane.BorderPaneApp","/ensemble/samples/layout/borderpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/borderpane/BorderPaneApp.java",},new String[]{"javafx.scene.layout.BorderPane",},new String[]{},new String[]{"/Controls/Text/Simple Label","/Graphics/Images/Image Creation",},"/ensemble/samples/layout/borderpane/BorderPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_106 = new SampleInfo("FlowPane","A simple example of a FlowPane layout. ","/Layout/FlowPane","/ensemble/samples/layout/flowpane","ensemble.samples.layout.flowpane.FlowPaneApp","/ensemble/samples/layout/flowpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/shared-resources/icon-68x68.png","/ensemble/samples/shared-resources/icon-88x88.png","/ensemble/samples/layout/flowpane/FlowPaneApp.java",},new String[]{"javafx.scene.layout.FlowPane",},new String[]{},new String[]{"/Graphics/Images/Image Creation",},"/ensemble/samples/layout/flowpane/FlowPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_107 = new SampleInfo("GridPane","An example of a GridPane layout. There is more than one approach to using a GridPane. The code can specify which rows and/or columns should contain the content. Alternatively, the code can alter the constraints of the rows and/or columns themselves, either by specifying the preferred minimum or  maximum heights or widths, or by specifying the percentage of the GridPane that belongs to certain rows or columns.  Note that grid lines can be made visible to help in debugging. ","/Layout/GridPane","/ensemble/samples/layout/gridpane","ensemble.samples.layout.gridpane.GridPaneApp","/ensemble/samples/layout/gridpane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/gridpane/GridPaneApp.java",},new String[]{"javafx.scene.layout.GridPane",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/layout/gridpane/GridPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_108 = new SampleInfo("HBox","A simple example of an HBox layout. ","/Layout/HBox","/ensemble/samples/layout/hbox","ensemble.samples.layout.hbox.HBoxApp","/ensemble/samples/layout/hbox/preview.png",new String[]{"/ensemble/samples/layout/hbox/HBoxApp.java",},new String[]{"javafx.scene.layout.HBox",},new String[]{},new String[]{"/Controls/Text/Text Field",},"/ensemble/samples/layout/hbox/HBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_109 = new SampleInfo("StackPane","A simple example of a StackPane layout. ","/Layout/StackPane","/ensemble/samples/layout/stackpane","ensemble.samples.layout.stackpane.StackPaneApp","/ensemble/samples/layout/stackpane/preview.png",new String[]{"/ensemble/samples/layout/stackpane/StackPaneApp.java",},new String[]{"javafx.scene.layout.StackPane",},new String[]{},new String[]{},"/ensemble/samples/layout/stackpane/StackPaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_110 = new SampleInfo("TilePane","An example of a TilePane layout. ","/Layout/TilePane","/ensemble/samples/layout/tilepane","ensemble.samples.layout.tilepane.TilePaneApp","/ensemble/samples/layout/tilepane/preview.png",new String[]{"/ensemble/samples/shared-resources/icon-48x48.png","/ensemble/samples/layout/tilepane/TilePaneApp.java",},new String[]{"javafx.scene.layout.TilePane",},new String[]{},new String[]{"/Graphics/Images/Image Creation",},"/ensemble/samples/layout/tilepane/TilePaneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_111 = new SampleInfo("VBox","A simple example of a VBox layout. ","/Layout/VBox","/ensemble/samples/layout/vbox","ensemble.samples.layout.vbox.VBoxApp","/ensemble/samples/layout/vbox/preview.png",new String[]{"/ensemble/samples/layout/vbox/VBoxApp.java",},new String[]{"javafx.scene.layout.VBox",},new String[]{},new String[]{},"/ensemble/samples/layout/vbox/VBoxApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_112 = new SampleInfo("Advanced Media","An advanced media player with controls for play/pause, seek, and volume. ","/Media/Advanced Media","/ensemble/samples/media/advancedmedia","ensemble.samples.media.advancedmedia.AdvancedMediaApp","/ensemble/samples/media/advancedmedia/preview.png",new String[]{"/ensemble/samples/media/advancedmedia/AdvancedMediaApp.java","/ensemble/samples/shared-resources/playbutton.png","/ensemble/samples/shared-resources/pausebutton.png","/ensemble/samples/media/advancedmedia/MediaControl.java",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Alpha Media Player","/Media/Overlay Media Player","/Media/Streaming Media Player",},"/ensemble/samples/media/advancedmedia/AdvancedMediaApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_113 = new SampleInfo("Alpha Media Player","An alpha media player with 2 different media views and alpha channels. ","/Media/Alpha Media Player","/ensemble/samples/media/alphamediaplayer","ensemble.samples.media.alphamediaplayer.AlphaMediaPlayerApp","/ensemble/samples/media/alphamediaplayer/preview.png",new String[]{"/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayerApp.java","/ensemble/samples/media/alphamediaplayer/PlanetaryPlayerPane.java","/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayer.css",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Advanced Media","/Media/Overlay Media Player","/Media/Streaming Media Player",},"/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayerApp.java",new PlaygroundProperty[]{new PlaygroundProperty(null,"arthPos","min","-100","max","100","name","Arth Position"),new PlaygroundProperty(null,"fierPos","min","-100","max","100","name","Fier Position"),new PlaygroundProperty(null,"arthRate","min","0.1","max","1","name","Arth Rate"),new PlaygroundProperty(null,"fierRate","min","0.1","max","1","name","Fier Rate"),},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_114 = new SampleInfo("Audio Clip","A sample that demonstrates the basics of AudioClips. ","/Media/Audio Clip","/ensemble/samples/media/audioclip","ensemble.samples.media.audioclip.AudioClipApp","/ensemble/samples/media/audioclip/preview.png",new String[]{"/ensemble/samples/shared-resources/Note1.wav","/ensemble/samples/shared-resources/Note2.wav","/ensemble/samples/shared-resources/Note3.wav","/ensemble/samples/shared-resources/Note4.wav","/ensemble/samples/shared-resources/Note5.wav","/ensemble/samples/shared-resources/Note6.wav","/ensemble/samples/shared-resources/Note7.wav","/ensemble/samples/shared-resources/Note8.wav","/ensemble/samples/media/audioclip/AudioClipApp.java",},new String[]{"javafx.scene.media.AudioClip",},new String[]{},new String[]{"/Graphics3d/Xylophone",},"/ensemble/samples/media/audioclip/AudioClipApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_115 = new SampleInfo("Overlay Media Player","A media player with controls for play, pause, stop, seek, and volume. This media player also demonstrates overlaying the player controls on top of the media. ","/Media/Overlay Media Player","/ensemble/samples/media/overlaymediaplayer","ensemble.samples.media.overlaymediaplayer.OverlayMediaPlayerApp","/ensemble/samples/media/overlaymediaplayer/preview.png",new String[]{"/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayerApp.java","/ensemble/samples/media/overlaymediaplayer/PlayerPane.java","/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayer.css",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Advanced Media","/Media/Alpha Media Player","/Media/Streaming Media Player",},"/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_116 = new SampleInfo("Streaming Media Player","A media player with controls for play, pause, stop, seek, and volume. This media player is playing media via HTTP Live Streaming, also known as HLS. ","/Media/Streaming Media Player","/ensemble/samples/media/streamingmediaplayer","ensemble.samples.media.streamingmediaplayer.StreamingMediaPlayerApp","/ensemble/samples/media/streamingmediaplayer/preview.png",new String[]{"/ensemble/samples/media/streamingmediaplayer/PlayerPane.java","/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayerApp.java","/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayer.css",},new String[]{"javafx.scene.media.MediaPlayer","javafx.scene.media.Media",},new String[]{},new String[]{"/Media/Advanced Media","/Media/Alpha Media Player","/Media/Overlay Media Player",},"/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayerApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_117 = new SampleInfo("Cursor","A sample that demonstrates changing the cursor icon. ","/Scenegraph/Events/Cursor","/ensemble/samples/scenegraph/events/cursor","ensemble.samples.scenegraph.events.cursor.CursorApp","/ensemble/samples/scenegraph/events/cursor/preview.png",new String[]{"/ensemble/samples/scenegraph/events/cursor/CursorApp.java",},new String[]{"javafx.scene.Cursor",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/cursor/CursorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_118 = new SampleInfo("Gesture Event","A sample that demonstrates various gesture events and their usage. Scroll the rectangle or the background behind the rectangle to move the rectangle itself. Similarly, rotate, zoom in, or zoom out the rectangle. All events are logged to the console. ","/Scenegraph/Events/Gesture Event","/ensemble/samples/scenegraph/events/gestureevent","ensemble.samples.scenegraph.events.gestureevent.GestureEventApp","/ensemble/samples/scenegraph/events/gestureevent/preview.png",new String[]{"/ensemble/samples/scenegraph/events/gestureevent/GestureEventApp.java",},new String[]{"javafx.collections.ObservableList","javafx.scene.Cursor","javafx.scene.input.GestureEvent","javafx.scene.input.RotateEvent","javafx.scene.input.ScrollEvent","javafx.scene.input.SwipeEvent","javafx.scene.input.ZoomEvent","javafx.event.EventHandler",},new String[]{},new String[]{"/Scenegraph/Events/MouseEvent",},"/ensemble/samples/scenegraph/events/gestureevent/GestureEventApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_119 = new SampleInfo("KeyEvent","A sample that demonstrates various key events and their usage. Type in the text box to view the triggered events: key pressed, key typed and key released. Pressing the Shift, Ctrl, and Alt keys also trigger events. ","/Scenegraph/Events/KeyEvent","/ensemble/samples/scenegraph/events/keyevent","ensemble.samples.scenegraph.events.keyevent.KeyEventApp","/ensemble/samples/scenegraph/events/keyevent/preview.png",new String[]{"/ensemble/samples/scenegraph/events/keyevent/KeyEventApp.java",},new String[]{"javafx.scene.input.KeyCode","javafx.scene.input.KeyEvent","javafx.event.EventHandler",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/keyevent/KeyEventApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_120 = new SampleInfo("Key Stroke Motion","An example of animation generated from key events. Click the grey area to give it focus and try typing letters. ","/Scenegraph/Events/Key Stroke Motion","/ensemble/samples/scenegraph/events/keystrokemotion","ensemble.samples.scenegraph.events.keystrokemotion.KeyStrokeMotionApp","/ensemble/samples/scenegraph/events/keystrokemotion/preview.png",new String[]{"/ensemble/samples/scenegraph/events/keystrokemotion/KeyStrokeMotionApp.java","/ensemble/samples/scenegraph/events/keystrokemotion/LettersPane.java",},new String[]{"javafx.scene.input.KeyEvent","javafx.animation.Interpolator",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/keystrokemotion/KeyStrokeMotionApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_121 = new SampleInfo("MouseEvent","A sample that demonstrates various mouse and scroll events and their usage. Click the circles and drag them across the screen. Scroll the whole screen. All events are logged to the console. ","/Scenegraph/Events/MouseEvent","/ensemble/samples/scenegraph/events/mouseevent","ensemble.samples.scenegraph.events.mouseevent.MouseEventApp","/ensemble/samples/scenegraph/events/mouseevent/preview.png",new String[]{"/ensemble/samples/scenegraph/events/mouseevent/MouseEventApp.java",},new String[]{"javafx.scene.Cursor","javafx.scene.input.MouseEvent","javafx.event.EventHandler",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/mouseevent/MouseEventApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_122 = new SampleInfo("Multi-Touch","A sample that demonstrates multi-touch support. You can zoom in and out of the images and also rotate the images with multi-touch. ","/Scenegraph/Events/Multi-Touch","/ensemble/samples/scenegraph/events/multitouch","ensemble.samples.scenegraph.events.multitouch.MultiTouchApp","/ensemble/samples/scenegraph/events/multitouch/preview.png",new String[]{"/ensemble/samples/scenegraph/events/multitouch/MultiTouchApp.java","/ensemble/samples/scenegraph/events/multitouch/MultiTouchImageView.java","/ensemble/samples/shared-resources/warning.png","/ensemble/samples/shared-resources/Animal1.jpg","/ensemble/samples/shared-resources/Animal2.jpg","/ensemble/samples/shared-resources/Animal3.jpg","/ensemble/samples/scenegraph/events/multitouch/MultiTouchPane.java",},new String[]{"javafx.scene.input.MouseEvent","javafx.event.EventHandler","javafx.scene.input.RotateEvent","javafx.scene.input.ZoomEvent",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/events/multitouch/MultiTouchApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.INPUT_MULTITOUCH,});
+    private static final SampleInfo SAMPLE_123 = new SampleInfo("Custom Node","A sample that demonstrates how to create a custom node by extending the Parent class. ","/Scenegraph/Node/Custom Node","/ensemble/samples/scenegraph/node/customnode","ensemble.samples.scenegraph.node.customnode.CustomNodeApp","/ensemble/samples/scenegraph/node/customnode/preview.png",new String[]{"/ensemble/samples/scenegraph/node/customnode/CustomNodeApp.java","/ensemble/samples/scenegraph/node/customnode/MyNode.java",},new String[]{"javafx.scene.Parent","javafx.scene.Node",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/node/customnode/CustomNodeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_124 = new SampleInfo("Node Properties","A sample that demonstrates some properties of nodes. Use the radio buttons to send any of the rectangles to the front or back. Use the controls to change opacity or horizontal position. ","/Scenegraph/Node/Node Properties","/ensemble/samples/scenegraph/node/nodeproperties","ensemble.samples.scenegraph.node.nodeproperties.NodePropertiesApp","/ensemble/samples/scenegraph/node/nodeproperties/preview.png",new String[]{"/ensemble/samples/scenegraph/node/nodeproperties/NodePropertiesApp.java",},new String[]{"javafx.scene.Node",},new String[]{},new String[]{},"/ensemble/samples/scenegraph/node/nodeproperties/NodePropertiesApp.java",new PlaygroundProperty[]{new PlaygroundProperty("rectA","translateX","min","0","max","50","name","Rectangle A translate X"),new PlaygroundProperty("rectB","translateX","min","0","max","50","name","Rectangle B translate X"),new PlaygroundProperty("rectC","translateX","min","0","max","50","name","Rectangle C translate X"),new PlaygroundProperty("rectA","opacity","min","0","max","1","name","Rectangle A Opacity"),new PlaygroundProperty("rectB","opacity","min","0","max","1","name","Rectangle B Opacity"),new PlaygroundProperty("rectC","opacity","min","0","max","1","name","Rectangle C Opacity"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_125 = new SampleInfo("Advanced Stage","A sample with a control that creates a transparent stage that is centered on your desktop. You can drag the stage with your mouse or use the scene controls to minimize or close it. With a transparent stage, you must add your own event handlers to perform these actions. ","/Scenegraph/Stage/Advanced Stage","/ensemble/samples/scenegraph/stage/advancedstage","ensemble.samples.scenegraph.stage.advancedstage.AdvancedStageApp","/ensemble/samples/scenegraph/stage/advancedstage/preview.png",new String[]{"/ensemble/samples/scenegraph/stage/advancedstage/AdvancedStageApp.java",},new String[]{"javafx.stage.Stage","javafx.scene.Scene","javafx.stage.StageStyle","javafx.application.Platform",},new String[]{},new String[]{"/Scenegraph/Stage/Stage",},"/ensemble/samples/scenegraph/stage/advancedstage/AdvancedStageApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_126 = new SampleInfo("Stage","A sample with a control that creates a decorated stage that is centered on your desktop. ","/Scenegraph/Stage/Stage","/ensemble/samples/scenegraph/stage/stage","ensemble.samples.scenegraph.stage.stage.StageApp","/ensemble/samples/scenegraph/stage/stage/preview.png",new String[]{"/ensemble/samples/scenegraph/stage/stage/StageApp.java",},new String[]{"javafx.stage.Stage","javafx.scene.Scene",},new String[]{},new String[]{"/Scenegraph/Stage/Advanced Stage",},"/ensemble/samples/scenegraph/stage/stage/StageApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_127 = new SampleInfo("SwingInterop","A sample that invokes SwingInterop to run in a separate JVM.  SwingInterop shows how to embed JavaFX components, like Chart and WebView components, in a Swing application. ","/Swing/SwingInterop","/ensemble/samples/swing/swinginterop","ensemble.samples.swing.swinginterop.SwingInteropApp","/ensemble/samples/swing/swinginterop/preview.png",new String[]{"/ensemble/samples/swing/swinginterop/ProcessListener.java","/ensemble/samples/swing/swinginterop/SampleTableModel.java","/ensemble/samples/swing/swinginterop/SwingInterop.java","/ensemble/samples/swing/swinginterop/SwingInteropApp.java","/ensemble/samples/swing/swinginterop/SwingInteropService.java","/ensemble/samples/swing/swinginterop/SwingInteropTask.java",},new String[]{"javafx.application.Application","javafx.stage.Stage","javafx.scene.Scene","javafx.scene.chart.BarChart","javafx.scene.chart.CategoryAxis","javafx.scene.chart.Chart","javafx.scene.chart.NumberAxis","javafx.scene.chart.XYChart","javafx.scene.web.WebEngine","javafx.scene.web.WebView",},new String[]{},new String[]{},"/ensemble/samples/swing/swinginterop/SwingInteropApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_128 = new SampleInfo("Bidi","Demonstrates bi-directional text. ","/Text/Bidi","/ensemble/samples/text/bidi","ensemble.samples.text.bidi.BidiApp","/ensemble/samples/text/bidi/preview.png",new String[]{"/ensemble/samples/text/bidi/BidiApp.java",},new String[]{"javafx.scene.text.Text","javafx.scene.text.TextFlow",},new String[]{},new String[]{},"/ensemble/samples/text/bidi/BidiApp.java",new PlaygroundProperty[]{new PlaygroundProperty("text1","strikethrough","name","He said... strikethrough"),new PlaygroundProperty("text1","underline","name","He said... underline"),new PlaygroundProperty("text1","fill","name","He said... fill"),new PlaygroundProperty("text1","rotate","min","-180","max","180","name","He said... rotate"),new PlaygroundProperty("text1","translateX","name","He said... translateX"),new PlaygroundProperty("text1","translateY","name","He said... translateY"),new PlaygroundProperty("text2","strikethrough","name","He said... strikethrough"),new PlaygroundProperty("text2","underline","name","...to me. underline"),new PlaygroundProperty("text2","fill","name","...to me. fill"),new PlaygroundProperty("text2","rotate","min","-180","max","180","name","...to me. rotate"),new PlaygroundProperty("text2","translateX","name","...to me. translateX"),new PlaygroundProperty("text2","translateY","name","...to me. translateY"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_129 = new SampleInfo("TextFlow","Demonstrates some simple uses of rich text and TextFlow.The first example shows use of text with different fonts in a TextFlow. Use the Playground to experiment with different Text properties. The second example shows TextFlow and embedded objects. ","/Text/TextFlow","/ensemble/samples/text/textflow","ensemble.samples.text.textflow.TextFlowApp","/ensemble/samples/text/textflow/preview.png",new String[]{"/ensemble/samples/shared-resources/oracle.png","/ensemble/samples/text/textflow/TextFlowApp.java",},new String[]{"javafx.scene.text.Font","javafx.scene.text.FontPosture","javafx.scene.text.Text","javafx.scene.text.TextFlow",},new String[]{},new String[]{},"/ensemble/samples/text/textflow/TextFlowApp.java",new PlaygroundProperty[]{new PlaygroundProperty("textHello","strikethrough","name","Hello strikethrough"),new PlaygroundProperty("textHello","underline","name","Hello underline"),new PlaygroundProperty("textHello","fill","name","Hello fill"),new PlaygroundProperty("textHello","rotate","min","-180","max","180","name","Hello rotate"),new PlaygroundProperty("textHello","translateX","name","Hello translateX"),new PlaygroundProperty("textHello","translateY","name","Hello translateY"),new PlaygroundProperty("textBold","strikethrough","name","Bold strikethrough"),new PlaygroundProperty("textBold","underline","name","Bold underline"),new PlaygroundProperty("textBold","fill","name","Bold fill"),new PlaygroundProperty("textBold","rotate","min","-180","max","180","name","Bold rotate"),new PlaygroundProperty("textBold","translateX","name","Bold translateX"),new PlaygroundProperty("textBold","translateY","name","Bold translateY"),new PlaygroundProperty("textWorld","strikethrough","name","World strikethrough"),new PlaygroundProperty("textWorld","underline","name","World underline"),new PlaygroundProperty("textWorld","fill","name","World fill"),new PlaygroundProperty("textWorld","rotate","min","-180","max","180","name","World rotate"),new PlaygroundProperty("textWorld","translateX","name","World translateX"),new PlaygroundProperty("textWorld","translateY","name","World translateY"),},new ConditionalFeature[]{});
+    private static final SampleInfo SAMPLE_130 = new SampleInfo("HTML Editor","A sample that demonstrates the HTML Editor. You can make changes to the example text, and the resulting generated HTML is displayed. ","/Web/HTML Editor","/ensemble/samples/web/htmleditor","ensemble.samples.web.htmleditor.HTMLEditorApp","/ensemble/samples/web/htmleditor/preview.png",new String[]{"/ensemble/samples/web/htmleditor/HTMLEditorApp.java",},new String[]{"javafx.scene.web.HTMLEditor",},new String[]{},new String[]{"controls/text/SimpleLabel",},"/ensemble/samples/web/htmleditor/HTMLEditorApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    private static final SampleInfo SAMPLE_131 = new SampleInfo("WebView","A sample that demonstrates a WebView object accessing a web page. ","/Web/WebView","/ensemble/samples/web/webview","ensemble.samples.web.webview.WebViewApp","/ensemble/samples/web/webview/preview.png",new String[]{"/ensemble/samples/web/webview/WebViewApp.java",},new String[]{"javafx.scene.web.WebView","javafx.scene.web.WebEngine",},new String[]{},new String[]{},"/ensemble/samples/web/webview/WebViewApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.WEB,});
+    public static final SampleCategory ROOT = new SampleCategory("ROOT",null,null,new SampleCategory[]{new SampleCategory("Animation",new SampleInfo[]{SAMPLE_0,},new SampleInfo[]{SAMPLE_0,SAMPLE_1,SAMPLE_2,SAMPLE_3,SAMPLE_4,SAMPLE_5,SAMPLE_6,SAMPLE_7,SAMPLE_8,SAMPLE_9,SAMPLE_10,SAMPLE_11,SAMPLE_12,},new SampleCategory[]{new SampleCategory("Timeline",new SampleInfo[]{SAMPLE_1,SAMPLE_2,},null,null),new SampleCategory("Transitions",new SampleInfo[]{SAMPLE_3,SAMPLE_4,SAMPLE_5,SAMPLE_6,SAMPLE_7,SAMPLE_8,SAMPLE_9,SAMPLE_10,SAMPLE_11,SAMPLE_12,},null,null),}),new SampleCategory("Canvas",new SampleInfo[]{SAMPLE_13,},new SampleInfo[]{SAMPLE_13,},null),new SampleCategory("Charts",null,new SampleInfo[]{SAMPLE_14,SAMPLE_15,SAMPLE_16,SAMPLE_17,SAMPLE_18,SAMPLE_19,SAMPLE_20,SAMPLE_21,SAMPLE_22,SAMPLE_23,SAMPLE_24,SAMPLE_25,SAMPLE_26,SAMPLE_27,SAMPLE_28,SAMPLE_29,SAMPLE_30,SAMPLE_31,},new SampleCategory[]{new SampleCategory("Area",new SampleInfo[]{SAMPLE_14,SAMPLE_15,SAMPLE_16,SAMPLE_17,},null,null),new SampleCategory("Bar",new SampleInfo[]{SAMPLE_18,SAMPLE_19,SAMPLE_20,SAMPLE_21,SAMPLE_22,},null,null),new SampleCategory("Bubble",new SampleInfo[]{SAMPLE_23,},null,null),new SampleCategory("Custom",new SampleInfo[]{SAMPLE_24,},null,null),new SampleCategory("Line",new SampleInfo[]{SAMPLE_25,SAMPLE_26,SAMPLE_27,},null,null),new SampleCategory("Pie",new SampleInfo[]{SAMPLE_28,SAMPLE_29,},null,null),new SampleCategory("Scatter",new SampleInfo[]{SAMPLE_30,SAMPLE_31,},null,null),}),new SampleCategory("Concurrency",new SampleInfo[]{SAMPLE_32,SAMPLE_33,},new SampleInfo[]{SAMPLE_32,SAMPLE_33,},null),new SampleCategory("Controls",new SampleInfo[]{SAMPLE_34,SAMPLE_35,SAMPLE_36,SAMPLE_37,SAMPLE_38,SAMPLE_39,SAMPLE_40,SAMPLE_41,SAMPLE_42,SAMPLE_43,SAMPLE_44,SAMPLE_45,SAMPLE_46,SAMPLE_47,SAMPLE_48,},new SampleInfo[]{SAMPLE_34,SAMPLE_49,SAMPLE_50,SAMPLE_51,SAMPLE_35,SAMPLE_36,SAMPLE_37,SAMPLE_38,SAMPLE_39,SAMPLE_52,SAMPLE_53,SAMPLE_54,SAMPLE_40,SAMPLE_41,SAMPLE_42,SAMPLE_43,SAMPLE_44,SAMPLE_45,SAMPLE_55,SAMPLE_56,SAMPLE_57,SAMPLE_58,SAMPLE_59,SAMPLE_60,SAMPLE_61,SAMPLE_62,SAMPLE_63,SAMPLE_64,SAMPLE_46,SAMPLE_65,SAMPLE_66,SAMPLE_47,SAMPLE_48,},new SampleCategory[]{new SampleCategory("Button",new SampleInfo[]{SAMPLE_49,SAMPLE_50,SAMPLE_51,},null,null),new SampleCategory("Listview",new SampleInfo[]{SAMPLE_52,SAMPLE_53,SAMPLE_54,},null,null),new SampleCategory("Splitpane",new SampleInfo[]{SAMPLE_55,},null,null),new SampleCategory("Tab",new SampleInfo[]{SAMPLE_56,},null,null),new SampleCategory("Table",new SampleInfo[]{SAMPLE_57,SAMPLE_58,},null,null),new SampleCategory("Text",new SampleInfo[]{SAMPLE_59,SAMPLE_60,SAMPLE_61,SAMPLE_62,SAMPLE_63,SAMPLE_64,},null,null),new SampleCategory("Toolbar",new SampleInfo[]{SAMPLE_65,SAMPLE_66,},null,null),}),new SampleCategory("Fxml",new SampleInfo[]{SAMPLE_67,},new SampleInfo[]{SAMPLE_67,},null),new SampleCategory("Graphics",new SampleInfo[]{SAMPLE_68,SAMPLE_69,SAMPLE_70,SAMPLE_71,SAMPLE_72,SAMPLE_73,SAMPLE_74,SAMPLE_75,},new SampleInfo[]{SAMPLE_68,SAMPLE_69,SAMPLE_70,SAMPLE_71,SAMPLE_72,SAMPLE_73,SAMPLE_76,SAMPLE_77,SAMPLE_78,SAMPLE_79,SAMPLE_80,SAMPLE_81,SAMPLE_82,SAMPLE_83,SAMPLE_84,SAMPLE_85,SAMPLE_86,SAMPLE_74,SAMPLE_87,SAMPLE_88,SAMPLE_89,SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,SAMPLE_94,SAMPLE_95,SAMPLE_96,SAMPLE_75,},new SampleCategory[]{new SampleCategory("Effects",new SampleInfo[]{SAMPLE_76,SAMPLE_77,SAMPLE_78,SAMPLE_79,SAMPLE_80,},null,null),new SampleCategory("Images",new SampleInfo[]{SAMPLE_81,SAMPLE_82,SAMPLE_83,},null,null),new SampleCategory("Paints",new SampleInfo[]{SAMPLE_84,SAMPLE_85,SAMPLE_86,},null,null),new SampleCategory("Shapes",new SampleInfo[]{SAMPLE_87,SAMPLE_88,SAMPLE_89,SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,SAMPLE_94,SAMPLE_95,SAMPLE_96,},null,null),}),new SampleCategory("Graphics 3d",new SampleInfo[]{SAMPLE_97,SAMPLE_98,SAMPLE_99,SAMPLE_100,},new SampleInfo[]{SAMPLE_97,SAMPLE_98,SAMPLE_99,SAMPLE_100,},null),new SampleCategory("Language",null,new SampleInfo[]{SAMPLE_101,SAMPLE_102,SAMPLE_103,},new SampleCategory[]{new SampleCategory("Beans",new SampleInfo[]{SAMPLE_101,SAMPLE_102,},null,null),new SampleCategory("Collections",new SampleInfo[]{SAMPLE_103,},null,null),}),new SampleCategory("Layout",new SampleInfo[]{SAMPLE_104,SAMPLE_105,SAMPLE_106,SAMPLE_107,SAMPLE_108,SAMPLE_109,SAMPLE_110,SAMPLE_111,},new SampleInfo[]{SAMPLE_104,SAMPLE_105,SAMPLE_106,SAMPLE_107,SAMPLE_108,SAMPLE_109,SAMPLE_110,SAMPLE_111,},null),new SampleCategory("Media",new SampleInfo[]{SAMPLE_112,SAMPLE_113,SAMPLE_114,SAMPLE_115,SAMPLE_116,},new SampleInfo[]{SAMPLE_112,SAMPLE_113,SAMPLE_114,SAMPLE_115,SAMPLE_116,},null),new SampleCategory("Scenegraph",null,new SampleInfo[]{SAMPLE_117,SAMPLE_118,SAMPLE_119,SAMPLE_120,SAMPLE_121,SAMPLE_122,SAMPLE_123,SAMPLE_124,SAMPLE_125,SAMPLE_126,},new SampleCategory[]{new SampleCategory("Events",new SampleInfo[]{SAMPLE_117,SAMPLE_118,SAMPLE_119,SAMPLE_120,SAMPLE_121,SAMPLE_122,},null,null),new SampleCategory("Node",new SampleInfo[]{SAMPLE_123,SAMPLE_124,},null,null),new SampleCategory("Stage",new SampleInfo[]{SAMPLE_125,SAMPLE_126,},null,null),}),new SampleCategory("Swing",new SampleInfo[]{SAMPLE_127,},new SampleInfo[]{SAMPLE_127,},null),new SampleCategory("Text",new SampleInfo[]{SAMPLE_128,SAMPLE_129,},new SampleInfo[]{SAMPLE_128,SAMPLE_129,},null),new SampleCategory("Web",new SampleInfo[]{SAMPLE_130,SAMPLE_131,},new SampleInfo[]{SAMPLE_130,SAMPLE_131,},null),});
+    public static final SampleInfo[] HIGHLIGHTS = new SampleInfo[]{SAMPLE_24,SAMPLE_114,};
+    private static final HashMap<String,SampleInfo[]> DOCS_URL_TO_SAMPLE = new HashMap<String,SampleInfo[]>(178);
+    static {
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.PauseTransition",new SampleInfo[]{SAMPLE_7,});
+        DOCS_URL_TO_SAMPLE.put("java.io.InputStream",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.GridPane",new SampleInfo[]{SAMPLE_107,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.InvalidationListener",new SampleInfo[]{SAMPLE_101,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.DateCell",new SampleInfo[]{SAMPLE_38,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.RadialGradient",new SampleInfo[]{SAMPLE_86,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ClosePath",new SampleInfo[]{SAMPLE_92,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Scene",new SampleInfo[]{SAMPLE_125,SAMPLE_68,SAMPLE_127,SAMPLE_126,SAMPLE_70,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.RadioButton",new SampleInfo[]{SAMPLE_44,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurve",new SampleInfo[]{SAMPLE_89,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Lighting",new SampleInfo[]{SAMPLE_75,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Glow",new SampleInfo[]{SAMPLE_72,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.BorderPane",new SampleInfo[]{SAMPLE_105,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.DropShadow",new SampleInfo[]{SAMPLE_75,SAMPLE_74,SAMPLE_76,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TextField",new SampleInfo[]{SAMPLE_102,SAMPLE_63,SAMPLE_64,SAMPLE_61,});
+        DOCS_URL_TO_SAMPLE.put("javafx.geometry.VPos",new SampleInfo[]{SAMPLE_69,SAMPLE_70,});
+        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Rectangle2D",new SampleInfo[]{SAMPLE_69,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Color",new SampleInfo[]{SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,SAMPLE_70,SAMPLE_99,SAMPLE_86,SAMPLE_98,SAMPLE_85,SAMPLE_84,SAMPLE_95,SAMPLE_94,SAMPLE_89,SAMPLE_97,SAMPLE_88,SAMPLE_96,SAMPLE_87,SAMPLE_100,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.collections.FXCollections",new SampleInfo[]{SAMPLE_103,SAMPLE_32,SAMPLE_33,});
+        DOCS_URL_TO_SAMPLE.put("javafx.application.Platform",new SampleInfo[]{SAMPLE_125,SAMPLE_69,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeItem",new SampleInfo[]{SAMPLE_47,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TabPane",new SampleInfo[]{SAMPLE_56,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToolBar",new SampleInfo[]{SAMPLE_65,SAMPLE_66,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.MediaPlayer",new SampleInfo[]{SAMPLE_113,SAMPLE_112,SAMPLE_18,SAMPLE_116,SAMPLE_115,SAMPLE_14,});
+        DOCS_URL_TO_SAMPLE.put("javafx.collections.ObservableList",new SampleInfo[]{SAMPLE_104,SAMPLE_69,SAMPLE_103,SAMPLE_118,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressIndicator",new SampleInfo[]{SAMPLE_32,SAMPLE_33,SAMPLE_43,});
+        DOCS_URL_TO_SAMPLE.put("java.util.List",new SampleInfo[]{SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.GaussianBlur",new SampleInfo[]{SAMPLE_75,SAMPLE_77,});
+        DOCS_URL_TO_SAMPLE.put("javafx.fxml.Initializable",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.LineTo",new SampleInfo[]{SAMPLE_92,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.TilePane",new SampleInfo[]{SAMPLE_110,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.SequentialTransition",new SampleInfo[]{SAMPLE_10,SAMPLE_30,});
+        DOCS_URL_TO_SAMPLE.put("javafx.concurrent.Task",new SampleInfo[]{SAMPLE_32,SAMPLE_33,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Translate",new SampleInfo[]{SAMPLE_99,SAMPLE_97,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.StackPane",new SampleInfo[]{SAMPLE_109,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.PieChart",new SampleInfo[]{SAMPLE_29,SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.NumberAxis",new SampleInfo[]{SAMPLE_22,SAMPLE_21,SAMPLE_24,SAMPLE_23,SAMPLE_20,SAMPLE_19,SAMPLE_18,SAMPLE_26,SAMPLE_17,SAMPLE_16,SAMPLE_25,SAMPLE_15,SAMPLE_27,SAMPLE_14,SAMPLE_30,SAMPLE_31,SAMPLE_127,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeView",new SampleInfo[]{SAMPLE_48,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuBar",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.ParallelTransition",new SampleInfo[]{SAMPLE_5,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ObservableValue",new SampleInfo[]{SAMPLE_101,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Shear",new SampleInfo[]{SAMPLE_72,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.SubScene",new SampleInfo[]{SAMPLE_97,SAMPLE_100,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.Media",new SampleInfo[]{SAMPLE_113,SAMPLE_112,SAMPLE_18,SAMPLE_116,SAMPLE_115,SAMPLE_14,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.XYChart",new SampleInfo[]{SAMPLE_24,SAMPLE_18,SAMPLE_127,SAMPLE_14,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Hyperlink",new SampleInfo[]{SAMPLE_39,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Group",new SampleInfo[]{SAMPLE_13,SAMPLE_75,SAMPLE_68,SAMPLE_70,SAMPLE_71,});
+        DOCS_URL_TO_SAMPLE.put("javafx.event.ActionEvent",new SampleInfo[]{SAMPLE_2,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ChoiceBox",new SampleInfo[]{SAMPLE_36,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableCell",new SampleInfo[]{SAMPLE_57,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polyline",new SampleInfo[]{SAMPLE_94,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.SwipeEvent",new SampleInfo[]{SAMPLE_118,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.PerspectiveTransform",new SampleInfo[]{SAMPLE_73,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ListView",new SampleInfo[]{SAMPLE_54,SAMPLE_52,SAMPLE_53,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Line",new SampleInfo[]{SAMPLE_91,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ScrollBar",new SampleInfo[]{SAMPLE_73,SAMPLE_45,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableView",new SampleInfo[]{SAMPLE_58,SAMPLE_57,SAMPLE_32,SAMPLE_33,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.GestureEvent",new SampleInfo[]{SAMPLE_118,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.ScrollEvent",new SampleInfo[]{SAMPLE_118,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.CheckBox",new SampleInfo[]{SAMPLE_35,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyCode",new SampleInfo[]{SAMPLE_119,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Ellipse",new SampleInfo[]{SAMPLE_75,SAMPLE_90,});
+        DOCS_URL_TO_SAMPLE.put("java.util.HashMap",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.PerspectiveCamera",new SampleInfo[]{SAMPLE_97,SAMPLE_100,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableColumn",new SampleInfo[]{SAMPLE_47,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Menu",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioClip",new SampleInfo[]{SAMPLE_114,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TablePosition",new SampleInfo[]{SAMPLE_58,SAMPLE_57,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BarChart",new SampleInfo[]{SAMPLE_21,SAMPLE_20,SAMPLE_19,SAMPLE_18,SAMPLE_127,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.GraphicsContext",new SampleInfo[]{SAMPLE_13,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.ZoomEvent",new SampleInfo[]{SAMPLE_122,SAMPLE_118,});
+        DOCS_URL_TO_SAMPLE.put("javafx.application.Application",new SampleInfo[]{SAMPLE_69,SAMPLE_68,SAMPLE_127,SAMPLE_70,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.LineChart",new SampleInfo[]{SAMPLE_26,SAMPLE_25,SAMPLE_27,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.SepiaTone",new SampleInfo[]{SAMPLE_80,});
+        DOCS_URL_TO_SAMPLE.put("java.util.ArrayList",new SampleInfo[]{SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.RectangleBuilder",new SampleInfo[]{SAMPLE_98,SAMPLE_100,});
+        DOCS_URL_TO_SAMPLE.put("javafx.stage.Stage",new SampleInfo[]{SAMPLE_125,SAMPLE_67,SAMPLE_68,SAMPLE_127,SAMPLE_126,SAMPLE_70,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Reflection",new SampleInfo[]{SAMPLE_73,SAMPLE_79,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Pagination",new SampleInfo[]{SAMPLE_41,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebView",new SampleInfo[]{SAMPLE_131,SAMPLE_127,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Stop",new SampleInfo[]{SAMPLE_68,SAMPLE_70,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Button",new SampleInfo[]{SAMPLE_49,SAMPLE_74,SAMPLE_68,SAMPLE_50,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Rotate",new SampleInfo[]{SAMPLE_99,SAMPLE_98,SAMPLE_75,SAMPLE_97,SAMPLE_100,});
+        DOCS_URL_TO_SAMPLE.put("javafx.concurrent.Service",new SampleInfo[]{SAMPLE_32,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SelectionModel",new SampleInfo[]{SAMPLE_54,SAMPLE_52,SAMPLE_53,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ColorPicker",new SampleInfo[]{SAMPLE_37,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.FlowPane",new SampleInfo[]{SAMPLE_106,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Animation.Status",new SampleInfo[]{SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("java.util.logging.Logger",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.collections.ListChangeListener",new SampleInfo[]{SAMPLE_103,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.ScatterChart",new SampleInfo[]{SAMPLE_30,SAMPLE_31,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.DatePicker",new SampleInfo[]{SAMPLE_38,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Light",new SampleInfo[]{SAMPLE_75,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BubbleChart",new SampleInfo[]{SAMPLE_23,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BoxBlur",new SampleInfo[]{SAMPLE_13,SAMPLE_71,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.Chart",new SampleInfo[]{SAMPLE_18,SAMPLE_127,SAMPLE_14,});
+        DOCS_URL_TO_SAMPLE.put("javafx.event.EventHandler",new SampleInfo[]{SAMPLE_122,SAMPLE_2,SAMPLE_121,SAMPLE_68,SAMPLE_29,SAMPLE_119,SAMPLE_118,SAMPLE_70,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Path",new SampleInfo[]{SAMPLE_74,SAMPLE_92,});
+        DOCS_URL_TO_SAMPLE.put("http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm",new SampleInfo[]{SAMPLE_24,SAMPLE_19,SAMPLE_31,SAMPLE_26,SAMPLE_17,SAMPLE_25,SAMPLE_16,SAMPLE_15,SAMPLE_27,SAMPLE_14,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.MoveTo",new SampleInfo[]{SAMPLE_92,});
+        DOCS_URL_TO_SAMPLE.put("javafx.util.Duration",new SampleInfo[]{SAMPLE_75,SAMPLE_2,SAMPLE_1,SAMPLE_0,SAMPLE_69,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableView",new SampleInfo[]{SAMPLE_47,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.MouseEvent",new SampleInfo[]{SAMPLE_73,SAMPLE_122,SAMPLE_74,SAMPLE_121,SAMPLE_68,SAMPLE_29,SAMPLE_70,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.PathTransition",new SampleInfo[]{SAMPLE_6,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.LinearGradient",new SampleInfo[]{SAMPLE_13,SAMPLE_85,SAMPLE_70,SAMPLE_71,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.cell.TextFieldTreeTableCell",new SampleInfo[]{SAMPLE_47,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableCell",new SampleInfo[]{SAMPLE_47,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.HBox",new SampleInfo[]{SAMPLE_108,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.LabelBuilder",new SampleInfo[]{SAMPLE_60,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.AnchorPane",new SampleInfo[]{SAMPLE_104,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Timeline",new SampleInfo[]{SAMPLE_13,SAMPLE_2,SAMPLE_1,SAMPLE_0,SAMPLE_69,SAMPLE_68,SAMPLE_30,SAMPLE_71,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurve",new SampleInfo[]{SAMPLE_95,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.CategoryAxis",new SampleInfo[]{SAMPLE_22,SAMPLE_21,SAMPLE_20,SAMPLE_19,SAMPLE_18,SAMPLE_127,SAMPLE_25,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.ScaleTransition",new SampleInfo[]{SAMPLE_9,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Effect",new SampleInfo[]{SAMPLE_77,SAMPLE_76,SAMPLE_79,SAMPLE_78,SAMPLE_80,});
+        DOCS_URL_TO_SAMPLE.put("javafx.fxml.FXMLLoader",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.FadeTransition",new SampleInfo[]{SAMPLE_3,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.Image",new SampleInfo[]{SAMPLE_75,SAMPLE_83,SAMPLE_74,SAMPLE_69,SAMPLE_81,SAMPLE_82,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.TranslateTransition",new SampleInfo[]{SAMPLE_12,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyValue",new SampleInfo[]{SAMPLE_2,SAMPLE_1,SAMPLE_0,SAMPLE_69,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Font",new SampleInfo[]{SAMPLE_75,SAMPLE_129,SAMPLE_70,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.VBox",new SampleInfo[]{SAMPLE_111,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ChangeListener",new SampleInfo[]{SAMPLE_101,SAMPLE_103,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.RotateTransition",new SampleInfo[]{SAMPLE_8,});
+        DOCS_URL_TO_SAMPLE.put("javafx.fxml.JavaFXBuilderFactory",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.Pane",new SampleInfo[]{SAMPLE_74,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.StrokeTransition",new SampleInfo[]{SAMPLE_11,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressBar",new SampleInfo[]{SAMPLE_42,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Text",new SampleInfo[]{SAMPLE_75,SAMPLE_68,SAMPLE_129,SAMPLE_70,SAMPLE_128,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Rectangle",new SampleInfo[]{SAMPLE_75,SAMPLE_96,SAMPLE_68,SAMPLE_70,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Tab",new SampleInfo[]{SAMPLE_56,});
+        DOCS_URL_TO_SAMPLE.put("javafx.fxml.FXML",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.CycleMethod",new SampleInfo[]{SAMPLE_68,SAMPLE_70,});
+        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Insets",new SampleInfo[]{SAMPLE_60,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableRow",new SampleInfo[]{SAMPLE_58,SAMPLE_57,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.FillTransition",new SampleInfo[]{SAMPLE_4,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Node",new SampleInfo[]{SAMPLE_124,SAMPLE_123,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.binding.StringBinding",new SampleInfo[]{SAMPLE_102,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.HLineTo",new SampleInfo[]{SAMPLE_92,});
+        DOCS_URL_TO_SAMPLE.put("java.util.Map",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedBarChart",new SampleInfo[]{SAMPLE_22,});
+        DOCS_URL_TO_SAMPLE.put("javafx.stage.StageStyle",new SampleInfo[]{SAMPLE_125,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuItem",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.HTMLEditor",new SampleInfo[]{SAMPLE_130,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Cursor",new SampleInfo[]{SAMPLE_121,SAMPLE_118,SAMPLE_117,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Paint",new SampleInfo[]{SAMPLE_86,SAMPLE_85,SAMPLE_84,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Parent",new SampleInfo[]{SAMPLE_123,SAMPLE_68,SAMPLE_70,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebEngine",new SampleInfo[]{SAMPLE_131,SAMPLE_127,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BlendMode",new SampleInfo[]{SAMPLE_13,SAMPLE_71,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurveTo",new SampleInfo[]{SAMPLE_92,});
+        DOCS_URL_TO_SAMPLE.put("javafx.stage.Screen",new SampleInfo[]{SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.RotateEvent",new SampleInfo[]{SAMPLE_122,SAMPLE_118,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedAreaChart",new SampleInfo[]{SAMPLE_17,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.AreaChart",new SampleInfo[]{SAMPLE_16,SAMPLE_15,SAMPLE_14,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polygon",new SampleInfo[]{SAMPLE_72,SAMPLE_93,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Accordion",new SampleInfo[]{SAMPLE_34,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.VLineTo",new SampleInfo[]{SAMPLE_92,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Circle",new SampleInfo[]{SAMPLE_13,SAMPLE_75,SAMPLE_88,SAMPLE_68,SAMPLE_71,});
+        DOCS_URL_TO_SAMPLE.put("java.util.logging.Level",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurveTo",new SampleInfo[]{SAMPLE_92,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextAlignment",new SampleInfo[]{SAMPLE_75,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyEvent",new SampleInfo[]{SAMPLE_73,SAMPLE_120,SAMPLE_119,SAMPLE_70,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.Canvas",new SampleInfo[]{SAMPLE_13,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Interpolator",new SampleInfo[]{SAMPLE_120,SAMPLE_0,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.ImageView",new SampleInfo[]{SAMPLE_75,SAMPLE_83,SAMPLE_74,SAMPLE_69,SAMPLE_81,SAMPLE_82,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextFlow",new SampleInfo[]{SAMPLE_129,SAMPLE_128,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextBoundsType",new SampleInfo[]{SAMPLE_75,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioSpectrumListener",new SampleInfo[]{SAMPLE_18,SAMPLE_14,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Transition",new SampleInfo[]{SAMPLE_4,SAMPLE_12,SAMPLE_3,SAMPLE_11,SAMPLE_10,SAMPLE_9,SAMPLE_5,SAMPLE_6,SAMPLE_7,SAMPLE_8,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.InnerShadow",new SampleInfo[]{SAMPLE_78,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Shape",new SampleInfo[]{SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,SAMPLE_86,SAMPLE_85,SAMPLE_84,SAMPLE_95,SAMPLE_89,SAMPLE_94,SAMPLE_88,SAMPLE_96,SAMPLE_87,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Label",new SampleInfo[]{SAMPLE_59,SAMPLE_102,SAMPLE_62,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SplitPane",new SampleInfo[]{SAMPLE_55,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.FontPosture",new SampleInfo[]{SAMPLE_129,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableColumn",new SampleInfo[]{SAMPLE_58,SAMPLE_57,SAMPLE_32,SAMPLE_33,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyFrame",new SampleInfo[]{SAMPLE_2,SAMPLE_1,SAMPLE_0,SAMPLE_69,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToggleButton",new SampleInfo[]{SAMPLE_51,SAMPLE_46,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ArcTo",new SampleInfo[]{SAMPLE_92,});
+    }
+    public static SampleInfo[] getSamplesForDoc(String docUrl) {
+        return DOCS_URL_TO_SAMPLE.get(docUrl);
+    }
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/sequentialtransition/SequentialTransitionApp.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/sequentialtransition/SequentialTransitionApp.java	Tue Oct 08 09:38:54 2013 -0700
@@ -32,16 +32,11 @@
 package ensemble.samples.animation.transitions.sequentialtransition;
 
 import javafx.animation.FadeTransition;
-import javafx.animation.FadeTransitionBuilder;
 import javafx.animation.RotateTransition;
-import javafx.animation.RotateTransitionBuilder;
 import javafx.animation.ScaleTransition;
-import javafx.animation.ScaleTransitionBuilder;
 import javafx.animation.SequentialTransition;
-import javafx.animation.SequentialTransitionBuilder;
 import javafx.animation.Timeline;
 import javafx.animation.TranslateTransition;
-import javafx.animation.TranslateTransitionBuilder;
 import javafx.application.Application;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
@@ -87,45 +82,34 @@
         rect.setTranslateY(50);
         root.getChildren().add(rect);
         // create 4 transitions
-        FadeTransition fadeTransition =
-                FadeTransitionBuilder.create()
-                .duration(Duration.seconds(1))
-                .fromValue(1)
-                .toValue(0.3)
-                .cycleCount(2)
-                .autoReverse(true)
-                .build();
-        TranslateTransition translateTransition =
-                TranslateTransitionBuilder.create()
-                .duration(Duration.seconds(2))
-                .fromX(50)
-                .toX(220)
-                .cycleCount(2)
-                .autoReverse(true)
-                .build();       
-        RotateTransition rotateTransition = 
-                RotateTransitionBuilder.create()
-                .duration(Duration.seconds(2))
-                .byAngle(180)
-                .cycleCount(4)
-                .autoReverse(true)
-                .build();
-        ScaleTransition scaleTransition =
-                ScaleTransitionBuilder.create()
-                .duration(Duration.seconds(2))
-                .toX(2)
-                .toY(2)
-                .cycleCount(2)
-                .autoReverse(true)
-                .build();
+        FadeTransition fadeTransition = new FadeTransition(Duration.seconds(1));
+        fadeTransition.setFromValue(1);
+        fadeTransition.setToValue(0.3);
+        fadeTransition.setCycleCount(2);
+        fadeTransition.setAutoReverse(true);
+        
+        TranslateTransition translateTransition = new TranslateTransition(Duration.seconds(2));
+        translateTransition.setFromX(50);
+        translateTransition.setToX(220);
+        translateTransition.setCycleCount(2);
+        translateTransition.setAutoReverse(true);
+        
+        RotateTransition rotateTransition = new RotateTransition(Duration.seconds(2));
+        rotateTransition.setByAngle(180);
+        rotateTransition.setCycleCount(4);
+        rotateTransition.setAutoReverse(true);
+               
+        ScaleTransition scaleTransition = new ScaleTransition(Duration.seconds(2));
+        scaleTransition.setToX(2);
+        scaleTransition.setToY(2);
+        scaleTransition.setCycleCount(2);
+        scaleTransition.setAutoReverse(true);
         // create sequential transition to do 4 transitions one after another       
-        sequentialTransition = SequentialTransitionBuilder.create()
-                .node(rect)
-                .children(fadeTransition, translateTransition, rotateTransition,
-                           scaleTransition)
-                .cycleCount(Timeline.INDEFINITE)
-                .autoReverse(true)
-                .build();
+        sequentialTransition = new SequentialTransition(rect, 
+                fadeTransition, translateTransition, rotateTransition, scaleTransition);
+        sequentialTransition.setCycleCount(Timeline.INDEFINITE);
+        sequentialTransition.setAutoReverse(true);
+        
         return root;
     }
 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/area/stacked/StackedAreaChartApp.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/area/stacked/StackedAreaChartApp.java	Tue Oct 08 09:38:54 2013 -0700
@@ -39,7 +39,6 @@
 import javafx.scene.Scene;
 import javafx.scene.chart.StackedAreaChart;
 import javafx.scene.chart.NumberAxis;
-import javafx.scene.chart.NumberAxisBuilder;
 import javafx.stage.Stage;
 
 
@@ -115,16 +114,8 @@
     private NumberAxis yAxis;
 
     public Parent createContent() {
-        xAxis = NumberAxisBuilder.create()
-                .label("X Values")
-                .lowerBound(1.0d)
-                .upperBound(9.0d)
-                .tickUnit(2.0d).build();
-        yAxis = NumberAxisBuilder.create()
-                .label("Y Values")
-                .lowerBound(0.0d)
-                .upperBound(30.0d)
-                .tickUnit(2.0d).build();
+        xAxis = new NumberAxis("X Values", 1.0d, 9.0d, 2.0d);
+        yAxis = new NumberAxis("Y Values", 0.0d, 30.0d, 2.0d);
                 
         ObservableList<StackedAreaChart.Series> areaChartData = FXCollections.observableArrayList(
                 new StackedAreaChart.Series("Series 1",FXCollections.observableArrayList(
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bar/stacked/StackedBarChartApp.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bar/stacked/StackedBarChartApp.java	Tue Oct 08 09:38:54 2013 -0700
@@ -38,9 +38,7 @@
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.scene.chart.CategoryAxis;
-import javafx.scene.chart.CategoryAxisBuilder;
 import javafx.scene.chart.NumberAxis;
-import javafx.scene.chart.NumberAxisBuilder;
 import javafx.scene.chart.StackedBarChart;
 import javafx.stage.Stage;
 
@@ -114,14 +112,9 @@
 
     public Parent createContent() {
         String[] years = {"2007", "2008", "2009"};
-        xAxis = CategoryAxisBuilder.create()
-                .categories(observableArrayList(years))
-                .build();
-        yAxis = NumberAxisBuilder.create()
-                .label("Units Sold")
-                .lowerBound(0.0d)
-                .upperBound(10000.0d)
-                .tickUnit(1000.0d).build();
+        xAxis = new CategoryAxis(observableArrayList(years));
+        yAxis = new NumberAxis("Units Sold", 0.0d, 10000.0d, 1000.0d);
+        
         ObservableList<StackedBarChart.Series> barChartData = 
                 observableArrayList(
                     new StackedBarChart.Series("Region 1", 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/colorpicker/ColorPickerApp.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/colorpicker/ColorPickerApp.java	Tue Oct 08 09:38:54 2013 -0700
@@ -41,7 +41,6 @@
 import javafx.scene.control.ColorPicker;
 import javafx.scene.control.Label;
 import javafx.scene.layout.VBox;
-import javafx.scene.layout.VBoxBuilder;
 import javafx.scene.paint.Color;
 import javafx.scene.text.Font;
 import javafx.stage.Stage;
@@ -73,13 +72,11 @@
             }
         });
 
-        VBox outerVBox = VBoxBuilder.create()
-                .alignment(Pos.CENTER)
-                .spacing(20)
-                .maxWidth(VBox.USE_PREF_SIZE)
-                .maxHeight(VBox.USE_PREF_SIZE)
-                .children(coloredText, coloredButton, colorPicker)
-                .build();
+        VBox outerVBox = new VBox(coloredText, coloredButton, colorPicker);
+        outerVBox.setAlignment(Pos.CENTER);
+        outerVBox.setSpacing(20);
+        outerVBox.setMaxSize(VBox.USE_PREF_SIZE, VBox.USE_PREF_SIZE);
+        
         return outerVBox;
     }
 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/pagination/PaginationApp.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/pagination/PaginationApp.java	Tue Oct 08 09:38:54 2013 -0700
@@ -39,10 +39,8 @@
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.scene.control.Button;
-import javafx.scene.control.ButtonBuilder;
 import javafx.scene.control.Label;
 import javafx.scene.control.Pagination;
-import javafx.scene.control.PaginationBuilder;
 import javafx.scene.image.Image;
 import javafx.scene.image.ImageView;
 import javafx.scene.layout.VBox;
@@ -73,21 +71,25 @@
         images[5] = new Image(PaginationApp.class.getResource("/ensemble/samples/shared-resources/Animal6.jpg").toExternalForm(), false);
         images[6] = new Image(PaginationApp.class.getResource("/ensemble/samples/shared-resources/Animal7.jpg").toExternalForm(), false);
 
-        pagination = PaginationBuilder.create().pageCount(7).pageFactory(new Callback<Integer, Node>() {
-            @Override public Node call(Integer pageIndex) {
+        pagination = new Pagination(7);
+        pagination.setPageFactory(new Callback<Integer, Node>() {
+            @Override
+            public Node call(Integer pageIndex) {
                 return createAnimalPage(pageIndex);
             }
-        }).build();
+        });
         //Style can be numeric page indicators or bullet indicators
-        Button styleButton = ButtonBuilder.create().text("Toggle pagination style").onAction(new EventHandler<ActionEvent>() {
-            @Override public void handle(ActionEvent me) {
+        Button styleButton = new Button("Toggle pagination style");
+        styleButton.setOnAction(new EventHandler<ActionEvent>() {
+            @Override
+            public void handle(ActionEvent me) {
                 if (!pagination.getStyleClass().contains(Pagination.STYLE_CLASS_BULLET)) {
                     pagination.getStyleClass().add(Pagination.STYLE_CLASS_BULLET);
                 } else {
                     pagination.getStyleClass().remove(Pagination.STYLE_CLASS_BULLET);
                 }
             }
-        }).build();
+        });
 
         outerBox.getChildren().addAll(pagination, styleButton);
         return outerBox;
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPaneApp.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPaneApp.java	Tue Oct 08 09:38:54 2013 -0700
@@ -35,8 +35,7 @@
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.scene.control.SplitPane;
-import javafx.scene.control.SplitPaneBuilder;
-import javafx.scene.layout.RegionBuilder;
+import javafx.scene.layout.Region;
 import javafx.stage.Stage;
 
 /**
@@ -50,10 +49,17 @@
 
     public Parent createContent() {
         String hidingSplitPaneCss = HiddenSplitPaneApp.class.getResource("HiddenSplitPane.css").toExternalForm();
-        final SplitPane splitPane = SplitPaneBuilder.create().id("hiddenSplitter").items(
-                RegionBuilder.create().styleClass("rounded").build(),
-                RegionBuilder.create().styleClass("rounded").build(),
-                RegionBuilder.create().styleClass("rounded").build()).dividerPositions(new double[]{0.33, 0.66}).build();
+
+        final SplitPane splitPane = new SplitPane();
+        splitPane.setId("hiddenSplitter");
+        Region region1 = new Region();
+        region1.getStyleClass().add("rounded");
+        Region region2 = new Region();
+        region2.getStyleClass().add("rounded");
+        Region region3 = new Region();
+        region3.getStyleClass().add("rounded");
+        splitPane.getItems().addAll(region1, region2, region3);
+        splitPane.setDividerPositions(0.33, 0.66);
         splitPane.getStylesheets().add(hidingSplitPaneCss);
 
         return splitPane;
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/tab/tabpane/TabPaneApp.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/tab/tabpane/TabPaneApp.java	Tue Oct 08 09:38:54 2013 -0700
@@ -42,7 +42,6 @@
 import javafx.scene.control.Label;
 import javafx.scene.control.RadioButton;
 import javafx.scene.control.Tab;
-import javafx.scene.control.TabBuilder;
 import javafx.scene.control.TabPane;
 import javafx.scene.control.ToggleGroup;
 import javafx.scene.control.Tooltip;
@@ -60,7 +59,6 @@
  * @preview preview.png
  * @see javafx.scene.control.Tab
  * @see javafx.scene.control.TabPane
- * @see javafx.scene.control.TabBuilder
  */
 public class TabPaneApp extends Application {
 
@@ -238,9 +236,10 @@
         });
         // Add tab and switch to it
         final Button newTabButton = new Button("Switch to New Tab");
-        newTabButton.setOnAction(new EventHandler<ActionEvent>() {           
+        newTabButton.setOnAction(new EventHandler<ActionEvent>() {
             @Override public void handle(ActionEvent e) {
-                Tab t = TabBuilder.create().text("Testing").content(new Button("Howdy")).build();
+                Tab t = new Tab("Testing");
+                t.setContent(new Button("Howdy"));
                 tabPane.getTabs().add(t);
                 tabPane.getSelectionModel().select(t);
             }
@@ -248,9 +247,10 @@
         vbox.getChildren().add(newTabButton);
         // Add tab
         final Button addTabButton = new Button("Add Tab");
-        addTabButton.setOnAction(new EventHandler<ActionEvent>() {           
+        addTabButton.setOnAction(new EventHandler<ActionEvent>() {
             @Override public void handle(ActionEvent e) {
-                Tab t = TabBuilder.create().text("New Tab").content(new Region()).build();
+                Tab t = new Tab("New Tab");
+                t.setContent(new Region());
                 tabPane.getTabs().add(t);
             }
         });
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/treetableview/Inventory.java	Tue Oct 08 09:38:54 2013 -0700
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package ensemble.samples.controls.treetableview;
+
+import javafx.beans.property.BooleanProperty;
+import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.SimpleBooleanProperty;
+import javafx.beans.property.SimpleObjectProperty;
+import javafx.beans.property.SimpleStringProperty;
+import javafx.beans.property.StringProperty;
+
+public class Inventory {
+
+        private BooleanProperty ordered;
+        private StringProperty name;
+        private ObjectProperty ob1;
+        private StringProperty d1;
+        private StringProperty d2;
+
+        public Inventory(boolean ordered, String name, String d1, String d2, Part bigPart) {
+            this.ordered = new SimpleBooleanProperty(ordered);
+            this.name = new SimpleStringProperty(name);
+            this.ob1 = new SimpleObjectProperty<>(bigPart);
+            this.d1 = new SimpleStringProperty(d1);
+            this.d2 = new SimpleStringProperty(d2);
+        }
+
+        public BooleanProperty orderedProperty() { return ordered; }
+
+        public StringProperty nameProperty() { return name; }
+
+        public StringProperty p1Property() { return d1; }
+
+        public StringProperty p2Property() { return d2; }
+        
+        public ObjectProperty<Part> ob1Property() { return ob1; }
+
+        public void setName(String name) { this.name.set(name); }
+
+        public void setP1(String d1) { this.d1.set(d1); }
+
+        public void setP2(String d2) { this.d2.set(d2); }
+        
+        public void setBigPart(Part bigPart) {this.ob1.set(bigPart);}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/treetableview/Part.java	Tue Oct 08 09:38:54 2013 -0700
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package ensemble.samples.controls.treetableview;
+
+import javafx.beans.property.SimpleStringProperty;
+import javafx.beans.property.StringProperty;
+
+public class Part {
+        private StringProperty data;
+        private StringProperty part1;
+        private StringProperty part2;
+
+        public Part(String data, String part1, String part2) {
+            this.data = new SimpleStringProperty(data);
+            this.part1 = new SimpleStringProperty(part1);
+            this.part2 = new SimpleStringProperty(part2);           
+        }
+
+        public StringProperty dataProperty() { return data; }
+        
+        public StringProperty part1Property() { return part1; }
+
+        public StringProperty part2Property() { return part2; }
+
+        public void setPart1(String part1) { this.part1.set(part1); }
+
+        public void setpart2(String part2) { this.part2.set(part2); }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/treetableview/TreeTableViewApp.java	Tue Oct 08 09:38:54 2013 -0700
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
+ *
+ * This file is available and licensed under the following license:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *  - Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Oracle Corporation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+package ensemble.samples.controls.treetableview;
+
+import javafx.application.Application;
+import javafx.beans.property.ReadOnlyObjectWrapper;
+import javafx.beans.property.ReadOnlyStringWrapper;
+import javafx.beans.value.ObservableValue;
+import javafx.event.EventHandler;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.scene.control.SelectionMode;
+import javafx.scene.control.TreeItem;
+import javafx.scene.control.TreeTableCell;
+import javafx.scene.control.TreeTableColumn;
+import javafx.scene.control.TreeTableView;
+import javafx.scene.control.cell.TextFieldTreeTableCell;
+import javafx.stage.Stage;
+import javafx.util.Callback;
+import javafx.util.converter.DefaultStringConverter;
+
+/**
+ * A simple implementation of TreeTableView. The Notes column is editable.
+ *
+ * @sampleName TreeTableView
+ * @preview preview.png
+ * @see javafx.scene.control.cell.TextFieldTreeTableCell
+ * @see javafx.scene.control.TreeItem
+ * @see javafx.scene.control.TreeTableCell
+ * @see javafx.scene.control.TreeTableColumn
+ * @see javafx.scene.control.TreeTableView
+ */
+public class TreeTableViewApp extends Application {
+
+    public Parent createContent() {
+
+        final TreeItem<Inventory> rootItem = new TreeItem<>(new Inventory(false, "Root", "Data", "Data2", new Part("data 1", "part 1", "part 2")));
+
+        final TreeItem<Inventory> child1Item = new TreeItem<>(new Inventory(true, "Child 1", "Data 1", "My notes", new Part("my data", "part 1", "part 2")));
+        final TreeItem<Inventory> child2Item = new TreeItem<>(new Inventory(false, "Child 2", "Data", "Notes", new Part("no, my data", "part 3", "part 4")));
+        TreeItem<Inventory> child3Item = new TreeItem<>(new Inventory(false, "Child 3", "Data 3", "Observations", new Part("even I have data", "part 3", "part 4")));
+
+        rootItem.setExpanded(true);
+        rootItem.getChildren().addAll(child1Item, child2Item);
+        child1Item.getChildren().add(child3Item);
+
+        // Name column
+        final TreeTableColumn<Inventory, String> nameColumn = new TreeTableColumn<>("Name");
+        nameColumn.setEditable(false);
+        nameColumn.setMinWidth(130);
+        nameColumn.setCellValueFactory(
+                new Callback<TreeTableColumn.CellDataFeatures<Inventory, String>, ObservableValue<String>>() {
+            @Override
+            public ObservableValue<String> call(TreeTableColumn.CellDataFeatures<Inventory, String> p) {
+                Inventory inv = p.getValue().getValue();
+                return new ReadOnlyObjectWrapper(inv.nameProperty().getValue());
+            }
+        });
+
+        // Data column
+        final TreeTableColumn<Inventory, String> dataColumn = new TreeTableColumn<>("Data");
+        dataColumn.setEditable(true);
+        dataColumn.setMinWidth(150);
+        dataColumn.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Inventory, String>, ObservableValue<String>>() {
+            @Override
+            public ObservableValue<String> call(TreeTableColumn.CellDataFeatures<Inventory, String> p) {
+                final Inventory value = p.getValue().getValue();
+                if (value.equals(rootItem.getValue())) {
+                    return new ReadOnlyStringWrapper(" ");
+                } else {
+                    return new ReadOnlyStringWrapper(value.ob1Property().getValue().dataProperty().getValue());
+                }
+            }
+        });
+
+        // Note column
+        final TreeTableColumn<Inventory, String> noteColumn = new TreeTableColumn<>("Notes (editable)");
+        noteColumn.setEditable(true);
+        noteColumn.setMinWidth(150);
+        noteColumn.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Inventory, String>, ObservableValue<String>>() {
+            @Override
+            public ObservableValue<String> call(TreeTableColumn.CellDataFeatures<Inventory, String> p) {
+                final Inventory value = p.getValue().getValue();
+                if (value.equals(rootItem.getValue())) {
+                    return new ReadOnlyStringWrapper(" ");
+                } else {
+                    return new ReadOnlyStringWrapper(value.p2Property().getValue());
+                }
+            }
+        });
+        noteColumn.setOnEditCommit(new EventHandler<TreeTableColumn.CellEditEvent<Inventory, String>>() {
+            @Override
+            public void handle(TreeTableColumn.CellEditEvent<Inventory, String> t) {
+                System.out.println("Note column entry was edited. Old value = " + t.getOldValue() + " New value = " + t.getNewValue());
+            }
+        });
+        noteColumn.setCellFactory(new Callback<TreeTableColumn<Inventory, String>, TreeTableCell<Inventory, String>>() {
+            @Override
+            public TreeTableCell<Inventory, String> call(TreeTableColumn<Inventory, String> p) {
+                return new TextFieldTreeTableCell(new DefaultStringConverter());
+            }
+        });
+
+        final TreeTableView treeTableView = new TreeTableView(rootItem);
+        treeTableView.setEditable(true);
+        treeTableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
+        treeTableView.setPrefSize(430, 200);
+        treeTableView.setLayoutX(10);
+        treeTableView.setLayoutY(10);
+        treeTableView.getColumns().setAll(nameColumn, dataColumn, noteColumn);
+
+        return treeTableView;
+    }
+
+    @Override
+    public void start(Stage primaryStage) throws Exception {
+        primaryStage.setScene(new Scene(createContent()));
+        primaryStage.show();
+    }
+
+    /**
+     * Java main for when running without JavaFX launcher
+     */
+    public static void main(String[] args) {
+        launch(args);
+    }
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/bouncingballs/BouncingBallsApp.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/bouncingballs/BouncingBallsApp.java	Tue Oct 08 09:38:54 2013 -0700
@@ -75,7 +75,7 @@
  * @see javafx.animation.KeyFrame
  * @see javafx.animation.KeyValue
  * @see javafx.animation.Timeline
- * @see javafx.animation.Animation.Status
+ * @see javafx.animation.Animation$Status
  * @see javafx.event.EventHandler
  * @see javafx.event.ActionEvent
  * @see javafx.scene.input.MouseEvent 
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/cursor/CursorApp.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/cursor/CursorApp.java	Tue Oct 08 09:38:54 2013 -0700
@@ -38,7 +38,6 @@
 import javafx.scene.Parent;
 import javafx.scene.Scene;
 import javafx.scene.control.Label;
-import javafx.scene.control.ScrollPane;
 import javafx.scene.layout.TilePane;
 import javafx.stage.Stage;
 
@@ -53,12 +52,9 @@
     
     public Parent createContent() {
 
-        ScrollPane root = new ScrollPane();
-        root.setPrefSize(435, 269);
-        root.setMinSize(ScrollPane.USE_PREF_SIZE, ScrollPane.USE_PREF_SIZE);
-        root.setMaxSize(ScrollPane.USE_PREF_SIZE, ScrollPane.USE_PREF_SIZE);
-
         TilePane tilePaneRoot = new TilePane(5, 5);
+        tilePaneRoot.setMinSize(TilePane.USE_PREF_SIZE, TilePane.USE_PREF_SIZE);
+        tilePaneRoot.setMaxSize(TilePane.USE_PREF_SIZE, TilePane.USE_PREF_SIZE);
         tilePaneRoot.setHgap(2);
         tilePaneRoot.setVgap(2);
         tilePaneRoot.getChildren().addAll(
@@ -82,14 +78,12 @@
                 createBox(Cursor.H_RESIZE),
                 createBox(Cursor.V_RESIZE),
                 createBox(Cursor.NONE));
-        root.setContent(tilePaneRoot);
-        return root;
+        return tilePaneRoot;
     }
 
     private Node createBox(Cursor cursor) {
         Label label = new Label(cursor.toString());
         label.setAlignment(Pos.CENTER);
-        label.setWrapText(true);
         label.setPrefSize(85, 65);
         label.setStyle("-fx-border-color: #aaaaaa; -fx-background-color: #dddddd;");
         label.setCursor(cursor);
Binary file apps/samples/Ensemble8/src/samples/resources/ensemble/samples/controls/treetableview/preview.png has changed
Binary file apps/samples/Ensemble8/src/samples/resources/ensemble/samples/controls/treetableview/preview@2x.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/toys/Hello/src/main/java/hello/HelloTask.java	Tue Oct 08 09:38:54 2013 -0700
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package hello;
+
+import javafx.application.Application;
+import javafx.concurrent.Task;
+import javafx.geometry.Pos;
+import javafx.scene.Scene;
+import javafx.scene.control.Label;
+import javafx.scene.control.ProgressBar;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+
+/**
+ */
+public class HelloTask extends Application {
+    private ProgressBar bar = new ProgressBar();
+    private Label label = new Label();
+
+    @Override
+    public void init() throws Exception {
+        Task<String> task = new Task<String>() {
+            @Override protected String call() throws Exception {
+                for (int i=0; i<100; i++) {
+                    Thread.sleep(100);
+                    updateProgress(i, 99);
+                }
+                return "Finished!";
+            }
+        };
+        bar.progressProperty().bind(task.progressProperty());
+        label.textProperty().bind(task.valueProperty());
+        Thread th = new Thread(task);
+        th.setDaemon(false);
+        th.start();
+    }
+
+    @Override
+    public void start(Stage stage) throws Exception {
+        VBox root = new VBox(15, bar, label);
+        root.setAlignment(Pos.CENTER);
+        Scene s = new Scene(root, 640, 480);
+        stage.setScene(s);
+        stage.show();
+    }
+
+    public static void main(String[] args) {
+        launch(args);
+    }
+}
--- a/build.gradle	Thu Oct 03 16:58:53 2013 -0700
+++ b/build.gradle	Tue Oct 08 09:38:54 2013 -0700
@@ -330,6 +330,10 @@
 }
 ext.BUILD_JAVADOC = buildJavadoc;
 
+// Specifies whether to build the javafx-src bundle
+defineProperty("BUILD_SRC_ZIP", "false")
+ext.IS_BUILD_SRC_ZIP = Boolean.parseBoolean(BUILD_SRC_ZIP)
+
 // Specifies whether to run full tests (true) or smoke tests (false)
 def isFullTest = false;
 if (hasProperty("FULL_TEST")) {
@@ -337,9 +341,10 @@
 }
 ext.IS_FULL_TEST = isFullTest;
 
-// Specify the build configuration (Release or Debug)
-defineProperty("CONF", "Release")
-ext.IS_DEBUG = CONF == "Debug"
+// Specify the build configuration (Release, Debug, or DebugNative)
+defineProperty("CONF", "Debug")
+ext.IS_DEBUG_JAVA = CONF == "Debug" || CONF == "DebugNative"
+ext.IS_DEBUG_NATIVE = CONF == "DebugNative"
 
 // Defines the compiler warning levels to use. If empty, then no warnings are generated. If
 // not empty, then the expected syntax is as a space or comma separated list of names, such
@@ -973,8 +978,6 @@
         testLogging.exceptionFormat = "full";
         scanForTestClasses = false;
         include("**/*Test.*");
-        exclude("**/DepthTest.*");
-        exclude("**/*Abstract*.*");
         if (BUILD_CLOSED && DO_JCOV) {
             addJCov(project, test)
         }
@@ -1287,7 +1290,6 @@
         testLogging.exceptionFormat = "full"
         scanForTestClasses = false
         include "**/*Test.*"
-        exclude "**/*Abstract*.*"
         if (BUILD_CLOSED && DO_JCOV) {
             addJCov(project, test)
         }
@@ -1654,7 +1656,7 @@
         // TODO need to file issue with Gradle
         compile.options.useAnt = true
         compile.options.debug = true // we always generate debugging info in the class files
-        compile.options.debugOptions.debugLevel = IS_DEBUG ? "source,lines,vars" : "source,lines"
+        compile.options.debugOptions.debugLevel = IS_DEBUG_JAVA ? "source,lines,vars" : "source,lines"
         compile.options.fork = true
         compile.options.forkOptions.executable = JAVAC
         compile.options.warnings = IS_LINT
@@ -1816,6 +1818,34 @@
     }
 }
 
+task copySources(type: Copy) {
+    enabled = IS_BUILD_SRC_ZIP
+    def projectsToCopy = [
+            project(":base"), project(":graphics"), project(":controls"),
+            project(":swing"), project(":swt"), project(":fxml"),
+            project(":builders"), project(":web")]
+    from(projectsToCopy.collect({
+        ["${it.projectDir}/src/main/java"]
+    }))
+    include "**/*.java"
+    into "${buildDir}/javafx-src"
+}
+
+task zipSources(type: Zip) {
+    enabled = IS_BUILD_SRC_ZIP
+    dependsOn(copySources)
+    archiveName = "javafx-src.zip"
+    destinationDir = file("$buildDir")
+    includeEmptyDirs = false
+    from "${buildDir}/javafx-src"
+}
+
+task src {
+    enabled = IS_BUILD_SRC_ZIP
+    description = "Created the javafx-src.zip bundle"
+    dependsOn(zipSources)
+}
+
 task all() {
     dependsOn(sdk,publicExports,apps,perf,zips)
 }
@@ -1948,6 +1978,14 @@
                 }
             }
 
+            // Copy over the javafx-src bundle
+            if (IS_BUILD_SRC_ZIP) {
+                copy {
+                    from "build/javafx-src.zip"
+                    into "build/${t.name}-sdk"
+                }
+            }
+
             // Copy over the fxpackager and rename as ant-javafx.jar
             copy {
                 from "modules/fxpackager/build/libs"
@@ -1970,6 +2008,7 @@
         }
         dependsOn(jfxrtTask)
         dependsOn(javadoc)
+        dependsOn(src)
     }
 
     def generateSymbols = targetProperties.containsKey('generateSymbols') ? targetProperties.generateSymbols : false
--- a/buildSrc/android.gradle	Thu Oct 03 16:58:53 2013 -0700
+++ b/buildSrc/android.gradle	Tue Oct 08 09:38:54 2013 -0700
@@ -360,7 +360,7 @@
 def ccWarnFlags = ["-Wa,--noexecstack", "-Wno-psabi"]
 def ccArchFlags = ["-mthumb", "-msoft-float", "-D__ARM_ARCH_5__", "-D__ARM_ARCH_5T__", "-D__ARM_ARCH_5E__",
                    "-D__ARM_ARCH_5TE__", "-march=armv5te" , "-mtune=xscale"]
-def ccDebugFlags = [IS_DEBUG ? "-DDEBUG" : "-DNDEBUG"]
+def ccDebugFlags = [IS_DEBUG_NATIVE ? "-DDEBUG" : "-DNDEBUG"]
 def ccDefaultIncludeFlags = ["-I$ndk/platforms/$ndk_target/arch-arm/usr/include"]
 
 def linkFlags = ["--sysroot=$sysroot",
--- a/buildSrc/armv6hf.gradle	Thu Oct 03 16:58:53 2013 -0700
+++ b/buildSrc/armv6hf.gradle	Tue Oct 08 09:38:54 2013 -0700
@@ -93,7 +93,7 @@
 // Specify the compilation parameters and link parameters
 def ccFlags = [
         commonFlags, "-I$JDK_HOME/include", "-I$JDK_HOME/include/linux", "-c",
-        IS_DEBUG ? ["-ggdb", "-DVERBOSE"] : "-O2"].flatten()
+        IS_DEBUG_NATIVE ? ["-ggdb", "-DVERBOSE"] : "-O2"].flatten()
 //ccFlags.addAll(["-Wnon-virtual-dtor", "-Woverloaded-virtual", "-std=c++0x"])
 def linkFlags = ["-shared", commonFlags].flatten()
 
--- a/buildSrc/armv6sf.gradle	Thu Oct 03 16:58:53 2013 -0700
+++ b/buildSrc/armv6sf.gradle	Tue Oct 08 09:38:54 2013 -0700
@@ -96,7 +96,7 @@
 // Specify the compilation parameters and link parameters
 def ccFlags = [
         commonFlags, "-I$JDK_HOME/include", "-I$JDK_HOME/include/linux", "-c",
-        IS_DEBUG ? ["-ggdb", "-DVERBOSE"] : "-O2"].flatten()
+        IS_DEBUG_NATIVE ? ["-ggdb", "-DVERBOSE"] : "-O2"].flatten()
 //ccFlags.addAll(["-Wnon-virtual-dtor", "-Woverloaded-virtual", "-std=c++0x"])
 def linkFlags = ["-shared", commonFlags].flatten()
 
--- a/buildSrc/ios.gradle	Thu Oct 03 16:58:53 2013 -0700
+++ b/buildSrc/ios.gradle	Tue Oct 08 09:38:54 2013 -0700
@@ -111,7 +111,7 @@
     "-miphoneos-version-min=6.0", "-fmessage-length=0", "-std=c99", "-fno-common",
     "-Wall", "-fno-strict-aliasing", "-fwrapv", "-fpascal-strings", "-fobjc-abi-version=2", "-fobjc-legacy-dispatch",
     "-I$JDK_HOME/include", "-I$JDK_HOME/include/darwin", "-c",
-    IS_DEBUG ? ["-O0", "-DDEBUG", "-g"] : ["-O3", "-DNDEBUG"]].flatten()
+    IS_DEBUG_NATIVE ? ["-O0", "-DDEBUG", "-g"] : ["-O3", "-DNDEBUG"]].flatten()
 
 def compiler = "clang"
 def linker = "libtool"
--- a/buildSrc/linux.gradle	Thu Oct 03 16:58:53 2013 -0700
+++ b/buildSrc/linux.gradle	Tue Oct 08 09:38:54 2013 -0700
@@ -77,7 +77,7 @@
 // Specify the compilation parameters and link parameters
 def ccFlags = [
         commonFlags, "-I$JDK_HOME/include", "-I$JDK_HOME/include/linux", "-c",
-        IS_DEBUG ? ["-ggdb", "-DVERBOSE"] : "-O2"].flatten()
+        IS_DEBUG_NATIVE ? ["-ggdb", "-DVERBOSE"] : "-O2"].flatten()
 //ccFlags.addAll(["-Wnon-virtual-dtor", "-Woverloaded-virtual", "-std=c++0x"])
 def linkFlags = ["-shared", commonFlags].flatten()
 
--- a/buildSrc/mac.gradle	Thu Oct 03 16:58:53 2013 -0700
+++ b/buildSrc/mac.gradle	Tue Oct 08 09:38:54 2013 -0700
@@ -89,7 +89,7 @@
         "-I$JDK_HOME/include",
         "-I$JDK_HOME/include/darwin",
         commonParams,
-        IS_DEBUG ? "-DDEBUG" : ["-O3", "-DNDEBUG"]].flatten()
+        IS_DEBUG_NATIVE ? "-DDEBUG" : ["-O3", "-DNDEBUG"]].flatten()
 
 def compiler = COMPILE_PARFAIT ? "parfait-gcc" : "gcc";
 def cc_compiler = COMPILE_PARFAIT ? "parfait-cc" : "cc";
@@ -154,7 +154,7 @@
         "-mmacosx-version-min=$MACOSX_MIN_VERSION",
         "-arch", "x86_64",
         "-framework", "Cocoa",
-        IS_DEBUG ? ["-DDEBUG", "-O0"] : ["-O3", "-DNDEBUG"]].flatten()
+        IS_DEBUG_NATIVE ? ["-DDEBUG", "-O0"] : ["-O3", "-DNDEBUG"]].flatten()
 MAC.launcher.linker = linker
 MAC.launcher.linkFlags = ["-ldl"]
 
--- a/buildSrc/src/main/groovy/com/sun/javafx/gradle/LinkTask.groovy	Thu Oct 03 16:58:53 2013 -0700
+++ b/buildSrc/src/main/groovy/com/sun/javafx/gradle/LinkTask.groovy	Tue Oct 08 09:38:54 2013 -0700
@@ -46,7 +46,7 @@
             } else {
                 args("-o", "$lib");
             }
-            if (project.IS_DEBUG && !project.IS_WINDOWS) args("-g");
+            if (project.IS_DEBUG_NATIVE && !project.IS_WINDOWS) args("-g");
             if (linkParams != null) args(linkParams);
             if (project.IS_WINDOWS){
                 final String libPath = lib.toString();
--- a/buildSrc/win.gradle	Thu Oct 03 16:58:53 2013 -0700
+++ b/buildSrc/win.gradle	Tue Oct 08 09:38:54 2013 -0700
@@ -62,10 +62,10 @@
         "/D_STATIC_CPPLIB", "/D_DISABLE_DEPRECATE_STATIC_CPPLIB", "/DINLINE=__inline",
         "/DUNICODE", "/D_UNICODE", "/DWIN32", "/DIAL", "/D_LITTLE_ENDIAN", "/DWIN32_LEAN_AND_MEAN",
         "/I$JDK_HOME/include", "/I$JDK_HOME/include/win32",
-        IS_DEBUG ? ["/MDd", "/Od", "/Zi", "/DDEBUG"] : ["/O2", "/MD"]].flatten();
+        IS_DEBUG_NATIVE ? ["/MDd", "/Od", "/Zi", "/DDEBUG"] : ["/O2", "/MD"]].flatten();
 
 def linkFlags = ["/nologo", "/dll", "/manifest", "/opt:REF", "/incremental:no"];
-if (IS_DEBUG) linkFlags.add("/debug");
+if (IS_DEBUG_NATIVE) linkFlags.add("/debug");
 
 setupTools("windows_tools",
     { propFile ->
--- a/buildSrc/x86egl.gradle	Thu Oct 03 16:58:53 2013 -0700
+++ b/buildSrc/x86egl.gradle	Tue Oct 08 09:38:54 2013 -0700
@@ -82,7 +82,7 @@
 // Specify the compilation parameters and link parameters
 def ccFlags = [
         commonFlags, "-I$JDK_HOME/include", "-I$JDK_HOME/include/linux", "-c",
-        IS_DEBUG ? ["-ggdb", "-DVERBOSE"] : "-O2"].flatten()
+        IS_DEBUG_NATIVE ? ["-ggdb", "-DVERBOSE"] : "-O2"].flatten()
 //ccFlags.addAll(["-Wnon-virtual-dtor", "-Woverloaded-virtual", "-std=c++0x"])
 def linkFlags = ["-shared", commonFlags].flatten()
 
--- a/gradle.properties.template	Thu Oct 03 16:58:53 2013 -0700
+++ b/gradle.properties.template	Tue Oct 08 09:38:54 2013 -0700
@@ -46,6 +46,12 @@
 
 #BUILD_JAVADOC = true
 
+# The building of the javafx-src bundle takes time. By default we disable the
+# building of javafx-src so as to speed up the time in incremental builds.
+# Uncomment this flag in order to build javafx-src.zip
+
+#BUILD_SRC_ZIP = true
+
 # Specifies whether to do a full test run or a "smoke test" run. By default we
 # do a smoke test run which excludes all tests that show a window or play media.
 # Certain long running tests might also be excluded when this is not set.
@@ -113,9 +119,9 @@
 #JDK_DOCS = file:///Library/Java/JavaVirtualMachines/jdk1.8.0/Content/Home/docs/api
 #JDK_DOCS = relative/path/to/docs/api
 
-# Specify the build configuration (Release or Debug). The default setting is Release.
+# Specify the build configuration: Release, Debug, or DebugNative. The default setting is Debug.
 
-#CONF = Debug
+#CONF = Release
 
 # Enables the use of the "use depend" feature. This speeds up incremental builds, but at the
 # cost of accuracy. Under normal circumstances, if you modify a single source file in the
--- a/modules/base/src/test/java/javafx/binding/expression/AbstractNumberExpressionTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/base/src/test/java/javafx/binding/expression/AbstractNumberExpressionTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -53,6 +53,7 @@
 import javafx.collections.FXCollections;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 
 @SuppressWarnings("WebTest")
@@ -447,6 +448,7 @@
         assertEquals("42", s.get());
     }
 
+    @Ignore("RT-33413")
     @Test
     public void testAsString_Format() {
         final Locale defaultLocale = Locale.getDefault();
@@ -471,6 +473,7 @@
         }
     }
 
+    @Ignore("RT-33413")
     @Test
     public void testAsString_LocaleFormat() {
         // checking German default
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/behavior/ListViewBehavior.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/behavior/ListViewBehavior.java	Tue Oct 08 09:38:54 2013 -0700
@@ -749,6 +749,11 @@
     private void discontinuousSelectPreviousRow() {
         MultipleSelectionModel<T> sm = getControl().getSelectionModel();
         if (sm == null) return;
+
+        if (sm.getSelectionMode() != SelectionMode.MULTIPLE) {
+            selectPreviousRow();
+            return;
+        }
         
         FocusModel<T> fm = getControl().getFocusModel();
         if (fm == null) return;
@@ -764,17 +769,26 @@
 
         sm.selectRange(newFocusIndex, startIndex + 1);
         fm.focus(newFocusIndex);
+
+        if (onFocusPreviousRow != null) onFocusPreviousRow.run();
     }
     
     private void discontinuousSelectNextRow() {
         MultipleSelectionModel<T> sm = getControl().getSelectionModel();
         if (sm == null) return;
+
+        if (sm.getSelectionMode() != SelectionMode.MULTIPLE) {
+            selectNextRow();
+            return;
+        }
         
         FocusModel<T> fm = getControl().getFocusModel();
         if (fm == null) return;
 
         int focusIndex = fm.getFocusedIndex();
         final int newFocusIndex = focusIndex + 1;
+        if (newFocusIndex >= getRowCount()) return;
+
         int startIndex = focusIndex;
         if (isShiftDown) {
             startIndex = getAnchor() == -1 ? focusIndex : getAnchor();
@@ -782,6 +796,8 @@
 
         sm.selectRange(startIndex, newFocusIndex + 1);
         fm.focus(newFocusIndex);
+
+        if (onFocusNextRow != null) onFocusNextRow.run();
     }
     
     private void discontinuousSelectPageUp() {
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/behavior/ScrollPaneBehavior.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/behavior/ScrollPaneBehavior.java	Tue Oct 08 09:38:54 2013 -0700
@@ -27,6 +27,8 @@
 
 import javafx.event.EventType;
 import javafx.geometry.NodeOrientation;
+import javafx.scene.Node;
+import javafx.scene.Parent;
 import javafx.scene.control.Control;
 import javafx.scene.control.ScrollPane;
 import javafx.scene.input.KeyCode;
@@ -34,6 +36,7 @@
 import javafx.scene.input.MouseEvent;
 import java.util.ArrayList;
 import java.util.List;
+import com.sun.javafx.scene.traversal.Direction;
 import com.sun.javafx.scene.control.skin.ScrollPaneSkin;
 import static javafx.scene.input.KeyCode.DOWN;
 import static javafx.scene.input.KeyCode.F4;
@@ -45,6 +48,7 @@
 import static javafx.scene.input.KeyCode.UP;
 import static javafx.scene.input.KeyCode.HOME;
 import static javafx.scene.input.KeyCode.END;
+import static javafx.scene.input.KeyCode.TAB;
 
 
 /**
@@ -125,6 +129,18 @@
      *                                                                         *
      **************************************************************************/
 
+    static final String TRAVERSE_DEBUG = "TraverseDebug";
+    static final String HORIZONTAL_UNITDECREMENT = "HorizontalUnitDecrement";
+    static final String HORIZONTAL_UNITINCREMENT = "HorizontalUnitIncrement";
+    static final String VERTICAL_UNITDECREMENT = "VerticalUnitDecrement";
+    static final String VERTICAL_UNITINCREMENT = "VerticalUnitIncrement";
+    static final String VERTICAL_PAGEDECREMENT = "VerticalPageDecrement";
+    static final String VERTICAL_PAGEINCREMENT = "VerticalPageIncrement";
+    static final String VERTICAL_HOME = "VerticalHome";
+    static final String VERTICAL_END = "VerticalEnd";
+    static final String TRAVERSE_NEXT = "TraverseNext";
+    static final String TRAVERSE_PREVIOUS = "TraversePrevious";
+
     /**
      * We manually handle focus traversal keys due to the ScrollPane binding
      * the left/right/up/down keys specially.
@@ -132,20 +148,24 @@
     protected static final List<KeyBinding> SCROLL_PANE_BINDINGS = new ArrayList<>();
     static {
         // TODO XXX DEBUGGING ONLY
-        SCROLL_PANE_BINDINGS.add(new KeyBinding(F4, "TraverseDebug").alt().ctrl().shift());
+        SCROLL_PANE_BINDINGS.add(new KeyBinding(F4, TRAVERSE_DEBUG).alt().ctrl().shift());
 
-        SCROLL_PANE_BINDINGS.add(new KeyBinding(LEFT, "HorizontalUnitDecrement"));
-        SCROLL_PANE_BINDINGS.add(new KeyBinding(RIGHT, "HorizontalUnitIncrement"));
+        SCROLL_PANE_BINDINGS.add(new KeyBinding(LEFT, HORIZONTAL_UNITDECREMENT));
+        SCROLL_PANE_BINDINGS.add(new KeyBinding(RIGHT, HORIZONTAL_UNITINCREMENT));
 
-        SCROLL_PANE_BINDINGS.add(new KeyBinding(UP, "VerticalUnitDecrement"));
-        SCROLL_PANE_BINDINGS.add(new KeyBinding(DOWN, "VerticalUnitIncrement"));
+        SCROLL_PANE_BINDINGS.add(new KeyBinding(UP, VERTICAL_UNITDECREMENT));
+        SCROLL_PANE_BINDINGS.add(new KeyBinding(DOWN, VERTICAL_UNITINCREMENT));
 
-        SCROLL_PANE_BINDINGS.add(new KeyBinding(PAGE_UP, "VerticalPageDecrement"));
-        SCROLL_PANE_BINDINGS.add(new KeyBinding(PAGE_DOWN, "VerticalPageIncrement"));
-        SCROLL_PANE_BINDINGS.add(new KeyBinding(SPACE, "VerticalPageIncrement"));
+        SCROLL_PANE_BINDINGS.add(new KeyBinding(PAGE_UP, VERTICAL_PAGEDECREMENT));
+        SCROLL_PANE_BINDINGS.add(new KeyBinding(PAGE_DOWN, VERTICAL_PAGEINCREMENT));
+        SCROLL_PANE_BINDINGS.add(new KeyBinding(SPACE, VERTICAL_PAGEINCREMENT));
 
-        SCROLL_PANE_BINDINGS.add(new KeyBinding(HOME, "VerticalHome"));
-        SCROLL_PANE_BINDINGS.add(new KeyBinding(END, "VerticalEnd"));
+        SCROLL_PANE_BINDINGS.add(new KeyBinding(HOME, VERTICAL_HOME));
+        SCROLL_PANE_BINDINGS.add(new KeyBinding(END, VERTICAL_END));
+
+        SCROLL_PANE_BINDINGS.add(new KeyBinding(TAB, TRAVERSE_NEXT));
+        SCROLL_PANE_BINDINGS.add(new KeyBinding(TAB, TRAVERSE_PREVIOUS).shift());
+
     }
 
     protected /*final*/ String matchActionForEvent(KeyEvent e) {
@@ -166,17 +186,130 @@
     }
 
     @Override protected void callAction(String name) {
-        if ("HorizontalUnitDecrement".equals(name)) horizontalUnitDecrement();
-        else if ("HorizontalUnitIncrement".equals(name)) horizontalUnitIncrement();
-        else if ("VerticalUnitDecrement".equals(name)) verticalUnitDecrement();
-        else if ("VerticalUnitIncrement".equals(name)) verticalUnitIncrement();
-        else if ("VerticalPageDecrement".equals(name)) verticalPageDecrement();
-        else if ("VerticalPageIncrement".equals(name)) verticalPageIncrement();
-        else if ("VerticalHome".equals(name)) verticalHome();
-        else if ("VerticalEnd".equals(name)) verticalEnd();
-        else super.callAction(name);
+        switch (name) {
+        case HORIZONTAL_UNITDECREMENT:
+            horizontalUnitDecrement();
+            break;
+        case HORIZONTAL_UNITINCREMENT:
+            horizontalUnitIncrement();
+            break;
+        case VERTICAL_UNITDECREMENT:
+            verticalUnitDecrement();
+            break;
+        case VERTICAL_UNITINCREMENT:
+            verticalUnitIncrement();
+            break;
+        case VERTICAL_PAGEDECREMENT:
+            verticalPageDecrement();
+            break;
+        case VERTICAL_PAGEINCREMENT:
+            verticalPageIncrement();
+            break;
+        case VERTICAL_HOME:
+            verticalHome();
+            break;
+        case VERTICAL_END:
+            verticalEnd();
+            break;
+        case TRAVERSE_NEXT:
+            // Are there any focusable node in the TitlePane content
+            if (getControl().getImpl_traversalEngine().registeredNodes.isEmpty()) {
+                super.callAction(name);
+            }
+            else {
+                /**
+                 *if we have the focus owner then traverse from it, otherwise
+                 * request focus in the top-left
+                 */
+                List<Node> children = getControl().getChildrenUnmodifiable();
+                Node focusNode = getControl().getScene().getFocusOwner();
+                if (focusNode != null && (isChildFocused(focusNode, children) == true)) {
+                    focusNode.impl_traverse(Direction.NEXT);
+                }
+                else {
+                    focusFirstChild(children);
+                }
+            }
+            break;
+
+        case TRAVERSE_PREVIOUS:
+            // Are there any focusable node in the TitlePane content
+            if (getControl().getImpl_traversalEngine().registeredNodes.isEmpty()) {
+                super.callAction(name);
+            }
+            else {
+                /**
+                 * if we have the focus owner then traverse from it, otherwise
+                 * request focus in the top-left
+                 */
+                List<Node> children = getControl().getChildrenUnmodifiable();
+                Node focusNode = getControl().getScene().getFocusOwner();
+
+                if (focusNode != null && (isChildFocused(focusNode, children) == true)) {
+                    focusNode.impl_traverse(Direction.PREVIOUS);
+                }
+                else {
+                    super.callAction(name);
+                }
+            }
+            break;
+        default :
+         super.callAction(name);
+            break;
+        }
     }
 
+    public static boolean isChildFocused(Node focusedNode, List<Node> children) {
+        boolean answer = false;
+        for(int i = 0; i < children.size(); i++) {
+            if (children.get(i) == focusedNode) {
+                answer = true;
+                break;
+            }
+            if (children.get(i) instanceof Parent) {
+                if (isChildFocused(focusedNode, ((Parent)children.get(i)).getChildrenUnmodifiable())) {
+                    return true;
+                }
+            }
+        }
+        return answer;
+    }
+
+    public static boolean focusFirstChild(List<Node> children) {
+        for(int i = 0; i < children.size(); i++) {
+            Node n = children.get(i);
+            if (n.isFocusTraversable() && n.impl_isTreeVisible() && !n.isDisabled()) {
+                n.requestFocus();
+                return true;
+            }
+            else if (n instanceof Parent) {
+                if (focusFirstChild(((Parent)n).getChildrenUnmodifiable())) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    public static boolean focusLastChild(List<Node> children) {
+        for(int i = children.size()-1 ; i > -1; i--) {
+            Node n = children.get(i);
+            if (n.isFocusTraversable() && n.impl_isTreeVisible() && !n.isDisabled()) {
+                n.requestFocus();
+                return true;
+            }
+            else if (n instanceof Parent) {
+                if (focusFirstChild(((Parent)n).getChildrenUnmodifiable())) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+
+
+
     /***************************************************************************
      *                                                                         *
      * Mouse event handling                                                    *
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/behavior/TableViewBehaviorBase.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/behavior/TableViewBehaviorBase.java	Tue Oct 08 09:38:54 2013 -0700
@@ -1091,6 +1091,11 @@
     protected void discontinuousSelectPreviousRow() {
         TableSelectionModel sm = getSelectionModel();
         if (sm == null) return;
+
+        if (sm.getSelectionMode() != SelectionMode.MULTIPLE) {
+            selectPreviousRow();
+            return;
+        }
         
         TableFocusModel fm = getFocusModel();
         if (fm == null) return;
@@ -1114,17 +1119,26 @@
             }
             fm.focus(newFocusIndex, col);
         }
+
+        if (onFocusPreviousRow != null) onFocusPreviousRow.run();
     }
     
     protected void discontinuousSelectNextRow() {
         TableSelectionModel sm = getSelectionModel();
         if (sm == null) return;
-        
+
+        if (sm.getSelectionMode() != SelectionMode.MULTIPLE) {
+            selectNextRow();
+            return;
+        }
+
         TableFocusModel fm = getFocusModel();
         if (fm == null) return;
 
         int focusIndex = fm.getFocusedIndex();
         final int newFocusIndex = focusIndex + 1;
+        if (newFocusIndex >= getItemCount()) return;
+
         int startIndex = focusIndex;
         final TableColumnBase col = sm.isCellSelectionEnabled() ? getFocusedCell().getTableColumn() : null;
         if (isShiftDown) {
@@ -1140,6 +1154,8 @@
             }
             fm.focus(newFocusIndex, col);
         }
+
+        if (onFocusNextRow != null) onFocusNextRow.run();
     }
     
     protected void discontinuousSelectPreviousColumn() {
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/behavior/TextBinding.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/behavior/TextBinding.java	Tue Oct 08 09:38:54 2013 -0700
@@ -29,6 +29,8 @@
 import java.util.StringTokenizer;
 
 import javafx.scene.input.KeyCode;
+import javafx.scene.input.KeyEvent;
+import javafx.scene.input.KeyCombination;
 
 /**
  * <p>
@@ -104,21 +106,37 @@
     }
 
     /**
-     * The mnemonic or {@link KeyCode#UNDEFINED} if there is no mnemonic.
+     * The mnemonic or {@code null} if there is no mnemonic.
      */
-    private KeyCode mnemonic = KeyCode.UNDEFINED;
+    private String mnemonic = null;
+    private KeyCombination mnemonicKeyCombination = null;
 
     /**
-     * Returns the mnemonic or {@link KeyCode#UNDEFINED} if there is no
+     * Returns the mnemonic or {@code null} if there is no
      * mnemonic.
      * 
-     * @return the mnemonic or {@link KeyCode#UNDEFINED} if there is no
+     * @return the mnemonic or {@code null} if there is no
      *         mnemonic
      */
-    public KeyCode getMnemonic() {
+    public String getMnemonic() {
         return mnemonic;
     }
 
+
+    /**
+     * Returns the mnemonic KeyCombination or {@code null} if there is no
+     * mnemonic.
+     * 
+     * @return the mnemonic KeyCombination or {@code null} if there is no
+     *         mnemonic
+     */
+    public KeyCombination getMnemonicKeyCombination() {
+        if (mnemonic != null && mnemonicKeyCombination == null) {
+            mnemonicKeyCombination = new MnemonicKeyCombination(mnemonic);
+        }
+        return mnemonicKeyCombination;
+    }
+
     /**
      * The index of the mnemonic character in the text property or -1 if there
      * is no mnemonic character in the text. This is only non-negative if the
@@ -281,8 +299,7 @@
                 temp.delete(index, index + 1); // delete the extra MNEMONIC_SYMBOL
             } else if (temp.charAt(index + 1) != '('
                        || index == temp.length() - 2) {
-                String mnemonicChar = temp.substring(index + 1, index + 2);
-                mnemonic = KeyCode.getKeyCode(mnemonicChar.toUpperCase());
+                mnemonic = temp.substring(index + 1, index + 2);
                 if (mnemonic != null) {
                     mnemonicIndex = index;
                 }
@@ -291,16 +308,14 @@
             } else {
                 int endIndex = temp.indexOf(")", index + 3);
                 if (endIndex == -1) { // "(" is actually the mnemonic
-                    String mnemonicChar = temp.substring(index + 1, index + 2);
-                    mnemonic = KeyCode.getKeyCode(mnemonicChar.toUpperCase());
+                    mnemonic = temp.substring(index + 1, index + 2);
                     if (mnemonic != null) {
                         mnemonicIndex = index;
                     }
                     temp.delete(index, index + 1);
                     break;
                 } else if (endIndex == index + 3) {
-                    String mnemonicChar = temp.substring(index + 2, index + 3);
-                    mnemonic = KeyCode.getKeyCode(mnemonicChar.toUpperCase());
+                    mnemonic = temp.substring(index + 2, index + 3);
                     extendedMnemonicText = temp.substring(index + 1, index + 4);
                     temp.delete(index, endIndex + 3);
                     break;
@@ -392,4 +407,107 @@
             + ", accelerator=" + getAccelerator() + ", acceleratorText="
             + getAcceleratorText() + "]";
     }
+
+    /**
+     * A modified version of KeyCharacterCombination, which matches
+     * on the text property of a KeyEvent instead of on the KeyCode.
+     */
+    public static class MnemonicKeyCombination extends KeyCombination {
+        private String character = "";
+
+        /**
+         * Constructs a {@code MnemonicKeyCombination} for the specified main key
+         * character.
+         *
+         * @param character the main key character
+         */
+        public MnemonicKeyCombination(String character) {
+            super(com.sun.javafx.PlatformUtil.isMac()
+                                  ? KeyCombination.META_DOWN
+                                  : KeyCombination.ALT_DOWN);
+            this.character = character;
+        }
+
+        /** 
+         * Gets the key character associated with this key combination. 
+         * @return The key character associated with this key combination
+         */
+        public final String getCharacter() {
+            return character;
+        }
+
+        /**
+         * Tests whether this key combination matches the key combination in the
+         * given {@code KeyEvent}.
+         *
+         * @param event the key event
+         * @return {@code true} if the key combinations match, {@code false}
+         *      otherwise
+         */
+        @Override public boolean match(final KeyEvent event) {
+            String text = event.getText();
+            return (text != null
+                    && !text.isEmpty()
+                    && text.equalsIgnoreCase(getCharacter())
+                    && super.match(event));
+        }
+
+        /**
+         * Returns a string representation of this {@code MnemonicKeyCombination}.
+         * <p>
+         * The string representation consists of sections separated by plus
+         * characters. Each section specifies either a modifier key or the main key.
+         * <p>
+         * A modifier key section contains the {@code KeyCode} name of a modifier
+         * key. It can be prefixed with the {@code Ignored} keyword. A non-prefixed
+         * modifier key implies its {@code PRESSED} value while the prefixed version
+         * implies the {@code IGNORED} value. If some modifier key is not specified
+         * in the string at all, it means it has the default {@code RELEASED} value.
+         * <p>
+         * The main key section contains the main key character enclosed in single
+         * quotes and is the last section in the returned string.
+         *
+         * @return the string representation of this {@code MnemonicKeyCombination}
+         */
+        @Override public String getName() {
+            StringBuilder sb = new StringBuilder();
+
+            sb.append(super.getName());
+            if (sb.length() > 0) {
+                sb.append("+");
+            }
+
+            return sb.append('\'').append(character.replace("'", "\\'"))
+                    .append('\'').toString();
+        }
+
+        /**
+         * Tests whether this {@code MnemonicKeyCombination} equals to the
+         * specified object.
+         *
+         * @param obj the object to compare to
+         * @return {@code true} if the objects are equal, {@code false} otherwise
+         */
+        @Override public boolean equals(final Object obj) {
+            if (this == obj) {
+                return true;
+            }
+
+            if (!(obj instanceof MnemonicKeyCombination)) {
+                return false;
+            }
+
+            return (this.character.equals(((MnemonicKeyCombination)obj).getCharacter())
+                    && super.equals(obj));
+        }
+
+        /**
+         * Returns a hash code value for this {@code MnemonicKeyCombination}.
+         *
+         * @return the hash code value
+         */
+        @Override public int hashCode() {
+            return 23 * super.hashCode() + character.hashCode();
+        }
+    }
 }
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/behavior/TreeViewBehavior.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/behavior/TreeViewBehavior.java	Tue Oct 08 09:38:54 2013 -0700
@@ -740,6 +740,11 @@
     private void discontinuousSelectPreviousRow() {
         MultipleSelectionModel<TreeItem<T>> sm = getControl().getSelectionModel();
         if (sm == null) return;
+
+        if (sm.getSelectionMode() != SelectionMode.MULTIPLE) {
+            selectPreviousRow();
+            return;
+        }
         
         FocusModel<TreeItem<T>> fm = getControl().getFocusModel();
         if (fm == null) return;
@@ -756,18 +761,25 @@
         sm.selectRange(newFocusIndex, startIndex + 1);
         fm.focus(newFocusIndex);
 
-        onSelectPreviousRow.run();
+        if (onFocusPreviousRow != null) onFocusPreviousRow.run();
     }
     
     private void discontinuousSelectNextRow() {
         MultipleSelectionModel<TreeItem<T>> sm = getControl().getSelectionModel();
         if (sm == null) return;
+
+        if (sm.getSelectionMode() != SelectionMode.MULTIPLE) {
+            selectNextRow();
+            return;
+        }
         
         FocusModel<TreeItem<T>> fm = getControl().getFocusModel();
         if (fm == null) return;
 
         int focusIndex = fm.getFocusedIndex();
         final int newFocusIndex = focusIndex + 1;
+        if (newFocusIndex >= getControl().getExpandedItemCount()) return;
+
         int startIndex = focusIndex;
         if (isShiftDown) {
             startIndex = getAnchor() == -1 ? focusIndex : getAnchor();
@@ -776,7 +788,7 @@
         sm.selectRange(startIndex, newFocusIndex + 1);
         fm.focus(newFocusIndex);
 
-        onSelectNextRow.run();
+        if (onFocusNextRow != null) onFocusNextRow.run();
     }
     
     private void discontinuousSelectPageUp() {
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/LabeledSkinBase.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/LabeledSkinBase.java	Tue Oct 08 09:38:54 2013 -0700
@@ -40,8 +40,6 @@
 import javafx.scene.control.Label;
 import javafx.scene.control.Labeled;
 import javafx.scene.control.OverrunStyle;
-import javafx.scene.input.KeyCode;
-import javafx.scene.input.KeyCodeCombination;
 import javafx.scene.input.KeyCombination;
 import javafx.scene.input.Mnemonic;
 import javafx.scene.shape.Line;
@@ -262,12 +260,7 @@
     */
     protected void mnemonicTargetChanged() {
         if (containsMnemonic == true) {
-            KeyCodeCombination mnemonicKeyCombo =
-                new KeyCodeCombination(
-                                       mnemonicCode,
-                                       com.sun.javafx.PlatformUtil.isMac()
-                                       ? KeyCombination.META_DOWN
-                                       : KeyCombination.ALT_DOWN);
+            KeyCombination mnemonicKeyCombo = mnemonicCode;
 
             /*
             ** was there previously a labelFor
@@ -326,13 +319,7 @@
             ** left on the scene
             */
             if (mnemonicScene != null) {
-                KeyCodeCombination mnemonicKeyCombo =
-                    new KeyCodeCombination(
-                                           mnemonicCode,
-                                           com.sun.javafx.PlatformUtil.isMac()
-                                           ? KeyCombination.META_DOWN
-                                           : KeyCombination.ALT_DOWN);
-
+                KeyCombination mnemonicKeyCombo = mnemonicCode;
                 Mnemonic myMnemonic = new Mnemonic(labeledNode, mnemonicKeyCombo);
                 mnemonicScene.removeMnemonic(myMnemonic);
                 mnemonicScene = null;
@@ -344,13 +331,7 @@
             ** add any mnemonics etc to the scene.
             */
             if (containsMnemonic == true) {
-                KeyCodeCombination mnemonicKeyCombo =
-                    new KeyCodeCombination(
-                                           mnemonicCode,
-                                           com.sun.javafx.PlatformUtil.isMac()
-                                           ? KeyCombination.META_DOWN
-                                           : KeyCombination.ALT_DOWN);
-
+                KeyCombination mnemonicKeyCombo = mnemonicCode;
                 if (labeledNode != null) {
                     Mnemonic myMnemonic = new Mnemonic(labeledNode, mnemonicKeyCombo);
                     mnemonicScene = labeledNode.getScene();
@@ -421,14 +402,10 @@
                 ** are we no longer a mnemonic, or have we changed code?
                 */
                 if (mnemonicScene != null) {
-                    if (mnemonicIndex == -1 || (bindings != null && bindings.getMnemonic() != mnemonicCode)) {
-                        KeyCodeCombination mnemonicKeyCombo =
-                            new KeyCodeCombination(
-                                                   mnemonicCode,
-                                                   com.sun.javafx.PlatformUtil.isMac()
-                                                   ? KeyCombination.META_DOWN
-                                                   : KeyCombination.ALT_DOWN);
-                        
+                    if (mnemonicIndex == -1 ||
+                        (bindings != null && !bindings.getMnemonicKeyCombination().equals(mnemonicCode))) {
+
+                        KeyCombination mnemonicKeyCombo = mnemonicCode;
                         Mnemonic myMnemonic = new Mnemonic(labeledNode, mnemonicKeyCombo);
                         mnemonicScene.removeMnemonic(myMnemonic);
                         mnemonicScene = null;
@@ -442,13 +419,7 @@
                 ** disabled on a previously valid mnemonic
                 */
                 if (mnemonicScene != null && labeledNode != null) {
-                    KeyCodeCombination mnemonicKeyCombo =
-                        new KeyCodeCombination(
-                                               mnemonicCode,
-                                               com.sun.javafx.PlatformUtil.isMac()
-                                               ? KeyCombination.META_DOWN
-                                               : KeyCombination.ALT_DOWN);
-
+                    KeyCombination mnemonicKeyCombo = mnemonicCode;
                     Mnemonic myMnemonic = new Mnemonic(labeledNode, mnemonicKeyCombo);
                     mnemonicScene.removeMnemonic(myMnemonic);
                     mnemonicScene = null;
@@ -461,15 +432,9 @@
             if (s != null && s.length() > 0) {
                 if (mnemonicIndex >= 0 && containsMnemonic == false) {
                     containsMnemonic = true;
-                    mnemonicCode = bindings.getMnemonic();
+                    mnemonicCode = bindings.getMnemonicKeyCombination();
 
-                    KeyCodeCombination mnemonicKeyCombo =
-                            new KeyCodeCombination(
-                                    mnemonicCode,
-                                    com.sun.javafx.PlatformUtil.isMac()
-                                            ? KeyCombination.META_DOWN
-                                            : KeyCombination.ALT_DOWN);
-
+                    KeyCombination mnemonicKeyCombo = mnemonicCode;
                     if (labeledNode != null) {
                         Mnemonic myMnemonic = new Mnemonic(labeledNode, mnemonicKeyCombo);
                         mnemonicScene = labeledNode.getScene();
@@ -911,7 +876,7 @@
 
     private boolean containsMnemonic = false;
     private Scene mnemonicScene = null;
-    private KeyCode mnemonicCode;
+    private KeyCombination mnemonicCode;
     // needs to be an object, as MenuItem isn't a node
     private Node labeledNode = null;
 
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableViewSkinBase.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TableViewSkinBase.java	Tue Oct 08 09:38:54 2013 -0700
@@ -296,7 +296,9 @@
             // using 'needCellsReconfigured' here rather than 'needCellsRebuilt'
             // as otherwise performance suffers massively (RT-27831)
             needCellsReconfigured = true;
-            getSkinnable().requestLayout();
+            if (getSkinnable() != null) {
+                getSkinnable().requestLayout();
+            }
         }
     };
     
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TitledPaneSkin.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/TitledPaneSkin.java	Tue Oct 08 09:38:54 2013 -0700
@@ -534,7 +534,7 @@
         }
     }
 
-    class Content extends StackPane implements TraverseListener {
+    class Content extends StackPane {
         private Node content;
         private TraversalEngine engine;
         private Direction direction;
@@ -548,7 +548,6 @@
                     super.trav(owner, dir);
                 }
             };
-            engine.addTraverseListener(this);
             setImpl_traversalEngine(engine);
         }
 
@@ -564,20 +563,5 @@
         public final Node getContent() {
             return content;
         }
-
-        @Override public void onTraverse(Node node, Bounds bounds) {
-            int index = engine.registeredNodes.indexOf(node);
-
-            if (index == -1 && direction.equals(Direction.PREVIOUS)) {
-                getSkinnable().requestFocus();
-            }
-            if (index == -1 && direction.equals(Direction.NEXT)) {
-                // If the parent is an accordion we want to focus to go outside of the
-                // accordion and to the next focusable control.
-                if (isInsideAccordion()) {
-                    new TraversalEngine(getSkinnable(), false).trav(getSkinnable().getParent(), Direction.NEXT);
-                }
-            }
-        }
     }
 }
--- a/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/Utils.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/com/sun/javafx/scene/control/skin/Utils.java	Tue Oct 08 09:38:54 2013 -0700
@@ -46,8 +46,6 @@
 import javafx.scene.control.ContextMenu;
 import javafx.scene.control.MenuItem;
 import javafx.scene.control.OverrunStyle;
-import javafx.scene.input.KeyCode;
-import javafx.scene.input.KeyCodeCombination;
 import javafx.scene.input.KeyCombination;
 import javafx.scene.input.Mnemonic;
 import javafx.scene.text.Font;
@@ -644,16 +642,7 @@
                     TextBinding bindings = new TextBinding(menuitem.getText());
                     int mnemonicIndex = bindings.getMnemonicIndex() ;
                     if (mnemonicIndex >= 0) {
-
-                        KeyCode mnemonicCode = bindings.getMnemonic();
-                    
-                        KeyCodeCombination mnemonicKeyCombo =
-                                new KeyCodeCombination(
-                                        mnemonicCode,
-                                        com.sun.javafx.PlatformUtil.isMac()
-                                                ? KeyCombination.META_DOWN
-                                                : KeyCombination.ALT_DOWN);
-
+                        KeyCombination mnemonicKeyCombo = bindings.getMnemonicKeyCombination();
                         Mnemonic myMnemonic = new Mnemonic(cmContent.getLabelAt(i), mnemonicKeyCombo);
                         scene.addMnemonic(myMnemonic);
                         cmContent.getLabelAt(i).impl_setShowMnemonics(initialState);
@@ -682,15 +671,7 @@
                     TextBinding bindings = new TextBinding(menuitem.getText());
                     int mnemonicIndex = bindings.getMnemonicIndex() ;
                     if (mnemonicIndex >= 0) {
-
-                        KeyCode mnemonicCode = bindings.getMnemonic();
-                    
-                        KeyCodeCombination mnemonicKeyCombo =
-                                new KeyCodeCombination(
-                                        mnemonicCode,
-                                        com.sun.javafx.PlatformUtil.isMac()
-                                                ? KeyCombination.META_DOWN
-                                                : KeyCombination.ALT_DOWN);
+                        KeyCombination mnemonicKeyCombo = bindings.getMnemonicKeyCombination();
 
                         ObservableList<Mnemonic> mnemonicsList = scene.getMnemonics().get(mnemonicKeyCombo);
                         if (mnemonicsList != null) {
--- a/modules/controls/src/main/java/javafx/scene/chart/PieChart.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/chart/PieChart.java	Tue Oct 08 09:38:54 2013 -0700
@@ -90,6 +90,7 @@
     private int defaultColorIndex = 0;
     private static final double LABEL_TICK_GAP = 6;
     private static final double LABEL_BALL_RADIUS = 2;
+    private static int uniqueId = 0;
     private double centerX;
     private double centerY;
     private double pieRadius;
@@ -145,7 +146,7 @@
             }
             for(int i=c.getFrom(); i<c.getTo(); i++) {
                 Data item = getData().get(i);
-                dataItemAdded(i, item);
+                dataItemAdded(item);
             }
             // update legend if any data has changed
             if (isLegendVisible() && (c.getRemoved().size() > 0 || c.getFrom() < c.getTo())) updateLegend();
@@ -336,6 +337,10 @@
 
     // -------------- METHODS --------------------------------------------------
 
+    private int getUniqueId() {
+        return uniqueId++;
+    }
+    
     private void dataNameChanged(Data item) {
         item.textNode.setText(item.getName());
         requestChartLayout();
@@ -356,7 +361,7 @@
         }
     }
 
-    private Node createArcRegion(int itemIndex, Data item) {
+    private Node createArcRegion(Data item) {
         Node arcRegion = item.getNode();
         // check if symbol has already been created
         if (arcRegion == null) {
@@ -365,26 +370,26 @@
             item.setNode(arcRegion);
         }
         // Note: not sure if we want to add or check, ie be more careful and efficient here
-        arcRegion.getStyleClass().setAll("chart-pie", "data" + itemIndex, item.defaultColorStyleString);
+        arcRegion.getStyleClass().setAll("chart-pie", "data" + getUniqueId(), item.defaultColorStyleString);
         if (item.getPieValue() < 0) {
             arcRegion.getStyleClass().add("negative");
         }
         return arcRegion;
     }
 
-    private Text createPieLabel(int itemIndex, Data item) {
+    private Text createPieLabel(Data item) {
         Text text = item.textNode;
         text.setText(item.getName());
         return text;
     }
 
-    private void dataItemAdded(int itemIndex, final Data item) {
+    private void dataItemAdded(final Data item) {
         // set default color styleClass
         item.defaultColorStyleString = "default-color"+(defaultColorIndex % 8);
         defaultColorIndex ++;
         // create shape
-        Node shape = createArcRegion(itemIndex, item);
-        final Text text = createPieLabel(itemIndex, item);
+        Node shape = createArcRegion(item);
+        final Text text = createPieLabel(item);
         item.getChart().getChartChildren().add(shape);
         if (shouldAnimate()) {
             // if the same data item is being removed, first stop the remove animation,
@@ -496,10 +501,6 @@
 
         labelLinePath.getElements().clear();
          // calculate combined bounds of all labels & pie radius
-        double minX = 0.0d;
-        double minY = 0.0d;
-        double maxX = 0.0d;
-        double maxY = 0.0d;
         double[] labelsX = null;
         double[] labelsY = null;
         double[] labelAngles = null;
@@ -507,6 +508,12 @@
         ArrayList<LabelLayoutInfo> fullPie = null;
         boolean shouldShowLabels = getLabelsVisible();
         if(getLabelsVisible()) {
+
+            double minX = begin != null ? Double.MAX_VALUE : 0d;
+            double minY = begin != null ? Double.MAX_VALUE : 0d;
+            double maxX = begin != null ? Double.MIN_VALUE : 0d;
+            double maxY = begin != null ? Double.MIN_VALUE : 0d;
+
             labelsX = new double[getDataSize()];
             labelsY = new double[getDataSize()];
             labelAngles = new double[getDataSize()];
@@ -780,29 +787,47 @@
             this.size = size;
         }
     }
+
     /**
      * PieChart Data Item, represents one slice in the PieChart
+     *
      * @since JavaFX 2.0
      */
     public final static class Data {
 
         private Text textNode = new Text();
-        /** Next pointer for the next data item : so we can do animation on data delete. */
+        /**
+         * Next pointer for the next data item : so we can do animation on data delete.
+         */
         private Data next = null;
         private String defaultColorStyleString;
 
         // -------------- PUBLIC PROPERTIES ------------------------------------
 
-        /** The chart which this data belongs to. */
+        /**
+         * The chart which this data belongs to.
+         */
         private ReadOnlyObjectWrapper<PieChart> chart = new ReadOnlyObjectWrapper<PieChart>(this, "chart");
-        public final PieChart getChart() { return chart.getValue(); }
-        private void setChart(PieChart value) { chart.setValue(value); }
-        public final ReadOnlyObjectProperty<PieChart> chartProperty() { return chart.getReadOnlyProperty(); }
 
-        /** The name of the pie slice */
-        private StringProperty name = new StringPropertyBase()  {
-            @Override protected void invalidated() {
-                if(getChart()!=null) getChart().dataNameChanged(Data.this);
+        public final PieChart getChart() {
+            return chart.getValue();
+        }
+
+        private void setChart(PieChart value) {
+            chart.setValue(value);
+        }
+
+        public final ReadOnlyObjectProperty<PieChart> chartProperty() {
+            return chart.getReadOnlyProperty();
+        }
+
+        /**
+         * The name of the pie slice
+         */
+        private StringProperty name = new StringPropertyBase() {
+            @Override
+            protected void invalidated() {
+                if (getChart() != null) getChart().dataNameChanged(Data.this);
             }
 
             @Override
@@ -815,14 +840,26 @@
                 return "name";
             }
         };
-        public final void setName(java.lang.String value) { name.setValue(value); }
-        public final java.lang.String getName() { return name.getValue(); }
-        public final StringProperty nameProperty() { return name; }
 
-        /** The value of the pie slice */
+        public final void setName(java.lang.String value) {
+            name.setValue(value);
+        }
+
+        public final java.lang.String getName() {
+            return name.getValue();
+        }
+
+        public final StringProperty nameProperty() {
+            return name;
+        }
+
+        /**
+         * The value of the pie slice
+         */
         private DoubleProperty pieValue = new DoublePropertyBase() {
-            @Override protected void invalidated() {
-                if(getChart() !=null) getChart().dataPieValueChanged(Data.this);
+            @Override
+            protected void invalidated() {
+                if (getChart() != null) getChart().dataPieValueChanged(Data.this);
             }
 
             @Override
@@ -835,39 +872,77 @@
                 return "pieValue";
             }
         };
-        public final double getPieValue() { return pieValue.getValue(); }
-        public final void setPieValue(double value) { pieValue.setValue(value); }
-        public final DoubleProperty pieValueProperty() { return pieValue; }
+
+        public final double getPieValue() {
+            return pieValue.getValue();
+        }
+
+        public final void setPieValue(double value) {
+            pieValue.setValue(value);
+        }
+
+        public final DoubleProperty pieValueProperty() {
+            return pieValue;
+        }
 
         /**
          * The current pie value, used during animation. This will be the last data value, new data value or
          * anywhere in between
          */
         private DoubleProperty currentPieValue = new SimpleDoubleProperty(this, "currentPieValue");
-        private double getCurrentPieValue() { return currentPieValue.getValue(); }
-        private void setCurrentPieValue(double value) { currentPieValue.setValue(value); }
-        private DoubleProperty currentPieValueProperty() { return currentPieValue; }
 
-        /** Multiplier that is used to animate the radius of the pie slice */
+        private double getCurrentPieValue() {
+            return currentPieValue.getValue();
+        }
+
+        private void setCurrentPieValue(double value) {
+            currentPieValue.setValue(value);
+        }
+
+        private DoubleProperty currentPieValueProperty() {
+            return currentPieValue;
+        }
+
+        /**
+         * Multiplier that is used to animate the radius of the pie slice
+         */
         private DoubleProperty radiusMultiplier = new SimpleDoubleProperty(this, "radiusMultiplier");
-        private double getRadiusMultiplier() { return radiusMultiplier.getValue(); }
-        private void setRadiusMultiplier(double value) { radiusMultiplier.setValue(value); }
-        private DoubleProperty radiusMultiplierProperty() { return radiusMultiplier; }
+
+        private double getRadiusMultiplier() {
+            return radiusMultiplier.getValue();
+        }
+
+        private void setRadiusMultiplier(double value) {
+            radiusMultiplier.setValue(value);
+        }
+
+        private DoubleProperty radiusMultiplierProperty() {
+            return radiusMultiplier;
+        }
 
         /**
          * Readonly access to the node that represents the pie slice. You can use this to add mouse event listeners etc.
          */
         private ObjectProperty<Node> node = new SimpleObjectProperty<Node>(this, "node");
-        public Node getNode() { return node.getValue(); }
-        private void setNode(Node value) { node.setValue(value); }
-        private ObjectProperty<Node> nodeProperty() { return node; }
+
+        public Node getNode() {
+            return node.getValue();
+        }
+
+        private void setNode(Node value) {
+            node.setValue(value);
+        }
+
+        private ObjectProperty<Node> nodeProperty() {
+            return node;
+        }
 
         // -------------- CONSTRUCTOR -------------------------------------------------
 
         /**
          * Constructs a PieChart.Data object with the given name and value.
          *
-         * @param name name for Pie
+         * @param name  name for Pie
          * @param value pie value
          */
         public Data(java.lang.String name, double value) {
@@ -880,10 +955,12 @@
 
         /**
          * Returns a string representation of this {@code Data} object.
+         *
          * @return a string representation of this {@code Data} object.
          */
-        @Override public java.lang.String toString() {
-            return "Data["+getName()+","+getPieValue()+"]";
+        @Override
+        public java.lang.String toString() {
+            return "Data[" + getName() + "," + getPieValue() + "]";
         }
     }
 
--- a/modules/controls/src/main/java/javafx/scene/control/ListCell.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/ListCell.java	Tue Oct 08 09:38:54 2013 -0700
@@ -423,12 +423,13 @@
 
     private boolean firstRun = true;
     private void updateItem() {
-        ListView<T> lv = getListView();
-        List<T> items = lv == null ? null : lv.getItems();
-        int index = getIndex();
+        final ListView<T> lv = getListView();
+        final List<T> items = lv == null ? null : lv.getItems();
+        final int index = getIndex();
+        final int itemCount = items == null ? -1 : items.size();
         
         // Compute whether the index for this cell is for a real item
-        boolean valid = items != null && index >=0 && index < items.size();
+        boolean valid = items != null && index >=0 && index < itemCount;
 
         final T oldValue = getItem();
         final boolean isEmpty = isEmpty();
@@ -437,12 +438,12 @@
         if (valid) {
             final T newValue = items.get(index);
 
-            if ((newValue != null && ! newValue.equals(oldValue)) ||
-                    oldValue != null && ! oldValue.equals(newValue)) {
-                updateItem(newValue, false);
-            } else if(isEmpty && newValue == null) {
-                updateItem(newValue, false);
-            }
+            // There used to be conditional code here to prevent updateItem from
+            // being called when the value didn't change, but that led us to
+            // issues such as RT-33108, where the value didn't change but the item
+            // we needed to be listening to did. Without calling updateItem we
+            // were breaking things, so once again the conditionals are gone.
+            updateItem(newValue, false);
         } else {
             // RT-30484 We need to allow a first run to be special-cased to allow
             // for the updateItem method to be called at least once to allow for
--- a/modules/controls/src/main/java/javafx/scene/control/SkinBase.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/SkinBase.java	Tue Oct 08 09:38:54 2013 -0700
@@ -203,14 +203,22 @@
      * @return A double representing the minimum width of this Skin.
      */
     protected double computeMinWidth(double height, double topInset, double rightInset, double bottomInset, double leftInset) {
+
         double minX = 0;
         double maxX = 0;
+        boolean firstManagedChild = true;
         for (int i = 0; i < children.size(); i++) {
             Node node = children.get(i);
             if (node.isManaged()) {
                 final double x = node.getLayoutBounds().getMinX() + node.getLayoutX();
-                minX = Math.min(minX, x);
-                maxX = Math.max(maxX, x + node.minWidth(-1));
+                if (!firstManagedChild) {  // branch prediction favors most often used condition
+                    minX = Math.min(minX, x);
+                    maxX = Math.max(maxX, x + node.minWidth(-1));
+                } else {
+                    minX = x;
+                    maxX = x + node.minWidth(-1);
+                    firstManagedChild = false;
+                }
             }
         }
         double minWidth = maxX - minX;
@@ -230,14 +238,22 @@
      * @return A double representing the minimum height of this Skin.
      */
     protected double computeMinHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) {
+
         double minY = 0;
         double maxY = 0;
+        boolean firstManagedChild = true;
         for (int i = 0; i < children.size(); i++) {
             Node node = children.get(i);
             if (node.isManaged()) {
                 final double y = node.getLayoutBounds().getMinY() + node.getLayoutY();
-                minY = Math.min(minY, y);
-                maxY = Math.max(maxY, y + node.minHeight(-1));
+                if (!firstManagedChild) {  // branch prediction favors most often used condition
+                    minY = Math.min(minY, y);
+                    maxY = Math.max(maxY, y + node.minHeight(-1));
+                } else {
+                    minY = y;
+                    maxY = y + node.minHeight(-1);
+                    firstManagedChild = false;
+                }
             }
         }
         double minHeight = maxY - minY;
@@ -291,14 +307,22 @@
      * @return the calculated preferred width
      */
     protected double computePrefWidth(double height, double topInset, double rightInset, double bottomInset, double leftInset) {
+
         double minX = 0;
         double maxX = 0;
+        boolean firstManagedChild = true;
         for (int i = 0; i < children.size(); i++) {
             Node node = children.get(i);
             if (node.isManaged()) {
                 final double x = node.getLayoutBounds().getMinX() + node.getLayoutX();
-                minX = Math.min(minX, x);
-                maxX = Math.max(maxX, x + node.prefWidth(-1));
+                if (!firstManagedChild) {  // branch prediction favors most often used condition
+                    minX = Math.min(minX, x);
+                    maxX = Math.max(maxX, x + node.prefWidth(-1));
+                } else {
+                    minX = x;
+                    maxX = x + node.prefWidth(-1);
+                    firstManagedChild = false;
+                }
             }
         }
         return maxX - minX;
@@ -319,14 +343,22 @@
      * @return the calculated preferred height
      */
     protected double computePrefHeight(double width, double topInset, double rightInset, double bottomInset, double leftInset) {
+
         double minY = 0;
         double maxY = 0;
+        boolean firstManagedChild = true;
         for (int i = 0; i < children.size(); i++) {
             Node node = children.get(i);
             if (node.isManaged()) {
                 final double y = node.getLayoutBounds().getMinY() + node.getLayoutY();
-                minY = Math.min(minY, y);
-                maxY = Math.max(maxY, y + node.prefHeight(-1));
+                if (!firstManagedChild) {  // branch prediction favors most often used condition
+                    minY = Math.min(minY, y);
+                    maxY = Math.max(maxY, y + node.prefHeight(-1));
+                } else {
+                    minY = y;
+                    maxY = y + node.prefHeight(-1);
+                    firstManagedChild = false;
+                }
             }
         }
         return maxY - minY;
--- a/modules/controls/src/main/java/javafx/scene/control/TableCell.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/TableCell.java	Tue Oct 08 09:38:54 2013 -0700
@@ -540,7 +540,7 @@
         final TableView tableView = getTableView();
         final List<T> items = tableView == null ? FXCollections.<T>emptyObservableList() : tableView.getItems();
         final TableColumn tableColumn = getTableColumn();
-        final int itemCount = items.size();
+        final int itemCount = items == null ? -1 : items.size();
         final int index = getIndex();
         final boolean isEmpty = isEmpty();
         final T oldValue = getItem();
@@ -575,12 +575,12 @@
             currentObservableValue = tableColumn.getCellObservableValue(index);
             final T newValue = currentObservableValue == null ? null : currentObservableValue.getValue();
 
-            if ((newValue != null && ! newValue.equals(oldValue)) ||
-                    oldValue != null && ! oldValue.equals(newValue)) {
-                updateItem(newValue, false);
-            } else if(isEmpty && newValue == null) {
-                updateItem(newValue, false);
-            }
+            // There used to be conditional code here to prevent updateItem from
+            // being called when the value didn't change, but that led us to
+            // issues such as RT-33108, where the value didn't change but the item
+            // we needed to be listening to did. Without calling updateItem we
+            // were breaking things, so once again the conditionals are gone.
+            updateItem(newValue, false);
         }
         
         if (currentObservableValue == null) {
--- a/modules/controls/src/main/java/javafx/scene/control/TableRow.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/TableRow.java	Tue Oct 08 09:38:54 2013 -0700
@@ -247,10 +247,11 @@
         TableView<T> tv = getTableView();
         if (tv == null || tv.getItems() == null) return;
         
-        List<T> items = tv.getItems();
+        final List<T> items = tv.getItems();
+        final int itemCount = items == null ? -1 : items.size();
 
         // Compute whether the index for this cell is for a real item
-        boolean valid = newIndex >= 0 && newIndex < items.size();
+        boolean valid = newIndex >= 0 && newIndex < itemCount;
 
         final T oldValue = getItem();
         final boolean isEmpty = isEmpty();
@@ -259,12 +260,12 @@
         if (valid) {
             final T newValue = items.get(newIndex);
 
-            if ((newValue != null && ! newValue.equals(oldValue)) ||
-                    oldValue != null && ! oldValue.equals(newValue)) {
-                updateItem(newValue, false);
-            } else if(isEmpty && newValue == null) {
-                updateItem(newValue, false);
-            }
+            // There used to be conditional code here to prevent updateItem from
+            // being called when the value didn't change, but that led us to
+            // issues such as RT-33108, where the value didn't change but the item
+            // we needed to be listening to did. Without calling updateItem we
+            // were breaking things, so once again the conditionals are gone.
+            updateItem(newValue, false);
         } else {
             // RT-30484 We need to allow a first run to be special-cased to allow
             // for the updateItem method to be called at least once to allow for
--- a/modules/controls/src/main/java/javafx/scene/control/TreeCell.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/TreeCell.java	Tue Oct 08 09:38:54 2013 -0700
@@ -489,14 +489,14 @@
             // likely that events will be fired where the item is null, even
             // though calling cell.getTreeItem().getValue() returns the value
             // as expected
-            if ((newTreeItem != null && ! newTreeItem.equals(oldTreeItem)) ||
-                    oldTreeItem != null && ! oldTreeItem.equals(newTreeItem)) {
-                updateTreeItem(newTreeItem);
-                updateItem(newValue, false);
-            } else if(isEmpty && newValue == null) {
-                updateTreeItem(newTreeItem);
-                updateItem(newValue, false);
-            }
+
+            // There used to be conditional code here to prevent updateItem from
+            // being called when the value didn't change, but that led us to
+            // issues such as RT-33108, where the value didn't change but the item
+            // we needed to be listening to did. Without calling updateItem we
+            // were breaking things, so once again the conditionals are gone.
+            updateTreeItem(newTreeItem);
+            updateItem(newValue, false);
         } else {
             // RT-30484 We need to allow a first run to be special-cased to allow
             // for the updateItem method to be called at least once to allow for
--- a/modules/controls/src/main/java/javafx/scene/control/TreeTableCell.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/TreeTableCell.java	Tue Oct 08 09:38:54 2013 -0700
@@ -567,13 +567,13 @@
             currentObservableValue = tableColumn.getCellObservableValue(index);
             
             final T newValue = currentObservableValue == null ? null : currentObservableValue.getValue();
-            
-            if ((newValue != null && ! newValue.equals(oldValue)) ||
-                    oldValue != null && ! oldValue.equals(newValue)) {
-                updateItem(newValue, false);
-            } else if(isEmpty && newValue == null) {
-                updateItem(newValue, false);
-            }
+
+            // There used to be conditional code here to prevent updateItem from
+            // being called when the value didn't change, but that led us to
+            // issues such as RT-33108, where the value didn't change but the item
+            // we needed to be listening to did. Without calling updateItem we
+            // were breaking things, so once again the conditionals are gone.
+            updateItem(newValue, false);
         }
         
         if (currentObservableValue == null) {
--- a/modules/controls/src/main/java/javafx/scene/control/TreeTableRow.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/TreeTableRow.java	Tue Oct 08 09:38:54 2013 -0700
@@ -401,14 +401,14 @@
             // likely that events will be fired where the item is null, even
             // though calling cell.getTreeItem().getValue() returns the value
             // as expected
-            if ((newTreeItem != null && ! newTreeItem.equals(oldTreeItem)) ||
-                    oldTreeItem != null && ! oldTreeItem.equals(newTreeItem)) {
-                updateTreeItem(newTreeItem);
-                updateItem(newValue, false);
-            } else if(isEmpty && newValue == null) {
-                updateTreeItem(newTreeItem);
-                updateItem(newValue, false);
-            }
+
+            // There used to be conditional code here to prevent updateItem from
+            // being called when the value didn't change, but that led us to
+            // issues such as RT-33108, where the value didn't change but the item
+            // we needed to be listening to did. Without calling updateItem we
+            // were breaking things, so once again the conditionals are gone.
+            updateTreeItem(newTreeItem);
+            updateItem(newValue, false);
         } else {
             // RT-30484 We need to allow a first run to be special-cased to allow
             // for the updateItem method to be called at least once to allow for
--- a/modules/controls/src/main/java/javafx/scene/control/cell/CellUtils.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/cell/CellUtils.java	Tue Oct 08 09:38:54 2013 -0700
@@ -25,6 +25,7 @@
 
 package javafx.scene.control.cell;
 
+import javafx.beans.property.ObjectProperty;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 import javafx.collections.ObservableList;
@@ -149,10 +150,12 @@
     };
     
     static <T> ChoiceBox<T> createChoiceBox(
-            final Cell<T> cell, 
-            final ObservableList<T> items) {
+            final Cell<T> cell,
+            final ObservableList<T> items,
+            final ObjectProperty<StringConverter<T>> converter) {
         ChoiceBox<T> choiceBox = new ChoiceBox<T>(items);
         choiceBox.setMaxWidth(Double.MAX_VALUE);
+        choiceBox.converterProperty().bind(converter);
         choiceBox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<T>() {
             @Override
             public void changed(ObservableValue<? extends T> ov, T oldValue, T newValue) {
@@ -291,9 +294,11 @@
         }
     };
     
-    static <T> ComboBox<T> createComboBox(final Cell<T> cell, final ObservableList<T> items, final StringConverter<T> converter) {
+    static <T> ComboBox<T> createComboBox(final Cell<T> cell,
+                                          final ObservableList<T> items,
+                                          final ObjectProperty<StringConverter<T>> converter) {
         ComboBox<T> comboBox = new ComboBox<T>(items);
-        comboBox.setConverter(converter);
+        comboBox.converterProperty().bind(converter);
         comboBox.setMaxWidth(Double.MAX_VALUE);
         comboBox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<T>() {
             @Override public void changed(ObservableValue<? extends T> ov, T oldValue, T newValue) {
--- a/modules/controls/src/main/java/javafx/scene/control/cell/CheckBoxTableCell.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/cell/CheckBoxTableCell.java	Tue Oct 08 09:38:54 2013 -0700
@@ -78,7 +78,7 @@
      * column will be bound bidirectionally. This means that the  CheckBox in 
      * the cell will set/unset this property based on user interactions, and the 
      * CheckBox will reflect the state of the {@code ObservableValue<Boolean>}, 
-     * if it changes externally).</li>
+     * if it changes externally).
      * 
      * @return A {@link Callback} that will return a {@link TableCell} that is 
      *      able to work on the type of element contained within the TableColumn.
--- a/modules/controls/src/main/java/javafx/scene/control/cell/ChoiceBoxListCell.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/cell/ChoiceBoxListCell.java	Tue Oct 08 09:38:54 2013 -0700
@@ -289,7 +289,7 @@
         }
         
         if (choiceBox == null) {
-            choiceBox = createChoiceBox(this, items);
+            choiceBox = createChoiceBox(this, items, converterProperty());
         }
         
         choiceBox.getSelectionModel().select(getItem());
--- a/modules/controls/src/main/java/javafx/scene/control/cell/ChoiceBoxTableCell.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/cell/ChoiceBoxTableCell.java	Tue Oct 08 09:38:54 2013 -0700
@@ -299,7 +299,7 @@
         }
         
         if (choiceBox == null) {
-            choiceBox = createChoiceBox(this, items);
+            choiceBox = createChoiceBox(this, items, converterProperty());
         }
         
         choiceBox.getSelectionModel().select(getItem());
--- a/modules/controls/src/main/java/javafx/scene/control/cell/ChoiceBoxTreeCell.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/cell/ChoiceBoxTreeCell.java	Tue Oct 08 09:38:54 2013 -0700
@@ -300,7 +300,7 @@
         }
 
         if (choiceBox == null) {
-            choiceBox = createChoiceBox(this, items);
+            choiceBox = createChoiceBox(this, items, converterProperty());
         }
         if (hbox == null) {
             hbox = new HBox(CellUtils.TREE_VIEW_HBOX_GRAPHIC_PADDING);
--- a/modules/controls/src/main/java/javafx/scene/control/cell/ChoiceBoxTreeTableCell.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/cell/ChoiceBoxTreeTableCell.java	Tue Oct 08 09:38:54 2013 -0700
@@ -299,7 +299,7 @@
         }
         
         if (choiceBox == null) {
-            choiceBox = createChoiceBox(this, items);
+            choiceBox = createChoiceBox(this, items, converterProperty());
         }
         
         choiceBox.getSelectionModel().select(getItem());
--- a/modules/controls/src/main/java/javafx/scene/control/cell/ComboBoxListCell.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/cell/ComboBoxListCell.java	Tue Oct 08 09:38:54 2013 -0700
@@ -316,7 +316,7 @@
         }
         
         if (comboBox == null) {
-            comboBox = createComboBox(this, items, getConverter());
+            comboBox = createComboBox(this, items, converterProperty());
             comboBox.editableProperty().bind(comboBoxEditableProperty());
         }
         
--- a/modules/controls/src/main/java/javafx/scene/control/cell/ComboBoxTableCell.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/cell/ComboBoxTableCell.java	Tue Oct 08 09:38:54 2013 -0700
@@ -331,7 +331,7 @@
         }
         
         if (comboBox == null) {
-            comboBox = createComboBox(this, items, getConverter());
+            comboBox = createComboBox(this, items, converterProperty());
             comboBox.editableProperty().bind(comboBoxEditableProperty());
         }
         
--- a/modules/controls/src/main/java/javafx/scene/control/cell/ComboBoxTreeCell.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/cell/ComboBoxTreeCell.java	Tue Oct 08 09:38:54 2013 -0700
@@ -328,7 +328,7 @@
         }
 
         if (comboBox == null) {
-            comboBox = createComboBox(this, items, getConverter());
+            comboBox = createComboBox(this, items, converterProperty());
             comboBox.editableProperty().bind(comboBoxEditableProperty());
         }
         if (hbox == null) {
--- a/modules/controls/src/main/java/javafx/scene/control/cell/ComboBoxTreeTableCell.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/java/javafx/scene/control/cell/ComboBoxTreeTableCell.java	Tue Oct 08 09:38:54 2013 -0700
@@ -331,7 +331,7 @@
         }
         
         if (comboBox == null) {
-            comboBox = createComboBox(this, items, getConverter());
+            comboBox = createComboBox(this, items, converterProperty());
             comboBox.editableProperty().bind(comboBoxEditableProperty());
         }
         
--- a/modules/controls/src/main/resources/com/sun/javafx/scene/control/skin/caspian/caspian.css	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/main/resources/com/sun/javafx/scene/control/skin/caspian/caspian.css	Tue Oct 08 09:38:54 2013 -0700
@@ -1112,7 +1112,7 @@
 
 .slider > .axis {
     -fx-tick-mark-stroke: ladder(-fx-background, derive(-fx-background,30%) 40%, derive(-fx-background,-30%) 41%);
-    -fx-tick-label-font: 0.833333em System; 
+    -fx-tick-label-font-size: 0.833333em; 
     -fx-tick-label-fill: -fx-text-background-color;
 }
 
@@ -2827,7 +2827,7 @@
 
 /* ====== AXIS ============================================================================ */
 .axis {
-    -fx-tick-label-font: 0.833333em System; /* 10 pix */
+    -fx-tick-label-font-size: 0.833333em;  /* 10 pix */ 
     -fx-tick-label-fill: -fx-text-background-color;
 }
 .axis:top {
@@ -3308,12 +3308,11 @@
 } 
 
 .color-palette > .separator > .line {
-    -fx-background-color: -fx-pressed-base;
-/*    -fx-background-color: white;*/
-    -fx-padding: 6 0 0 0;
-    -fx-background-insets: 4 -10 0 -10,5 -10 0 -10;
+    -fx-border-color: -fx-text-box-border transparent transparent transparent,
+        -fx-shadow-highlight-color transparent transparent transparent;
+    -fx-border-insets: 0, 1 0 0 0;
     -fx-border-style: none;
-    -fx-border-color: null;
+    -fx-padding: 0;
 }
 
 
--- a/modules/controls/src/test/java/com/sun/javafx/scene/control/skin/ButtonSkinTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/com/sun/javafx/scene/control/skin/ButtonSkinTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -35,10 +35,10 @@
 import javafx.stage.Stage;
 import javafx.scene.input.Mnemonic;
 import javafx.collections.ObservableList;
-import javafx.scene.input.KeyCode;
-import javafx.scene.input.KeyCodeCombination;
 import javafx.scene.input.KeyCombination;
 
+import com.sun.javafx.scene.control.behavior.TextBinding.MnemonicKeyCombination;
+
 import org.junit.Before;
 import org.junit.Test;
 
@@ -83,8 +83,7 @@
         
             stage.show();
         
-            KeyCodeCombination mnemonicKeyCombo =
-                new KeyCodeCombination(KeyCode.M,KeyCombination.ALT_DOWN);
+            KeyCombination mnemonicKeyCombo = new MnemonicKeyCombination("M");
 
             ObservableList<Mnemonic> mnemonicsList = scene.getMnemonics().get(mnemonicKeyCombo);
             if (mnemonicsList != null) {
@@ -114,8 +113,7 @@
         
             stage.show();
         
-            KeyCodeCombination mnemonicKeyCombo =
-                new KeyCodeCombination(KeyCode.A,KeyCombination.ALT_DOWN);
+            KeyCombination mnemonicKeyCombo = new MnemonicKeyCombination("A");
 
             ObservableList<Mnemonic> mnemonicsList = scene.getMnemonics().get(mnemonicKeyCombo);
             if (mnemonicsList != null) {
--- a/modules/controls/src/test/java/javafx/scene/control/ListCellTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/ListCellTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -707,8 +707,22 @@
         cell.updateIndex(1);
         assertNull(cell.getItem());
         assertFalse(cell.isEmpty());
-        assertEquals(1, rt_29923_count);    // even though the index has changed,
-                                            // the item is the same, so we don't
-                                            // update the cell item.
+
+        // This test used to be as shown below....but due to RT-33108, it changed
+        // to the enabled code beneath. Refer to the first comment in RT-33108
+        // for more detail, but in short we can't optimise and not call updateItem
+        // when the new and old items are the same - doing so means we can end
+        // up with bad bindings, etc in the individual cells (in other words,
+        // even if their item has not changed, the rest of their state may have)
+//        assertEquals(1, rt_29923_count);    // even though the index has changed,
+//                                            // the item is the same, so we don't
+//                                            // update the cell item.
+        assertEquals(2, rt_29923_count);
+    }
+
+    @Test public void test_rt_33106() {
+        cell.updateListView(list);
+        list.setItems(null);
+        cell.updateIndex(1);
     }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/ListViewKeyInputTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/ListViewKeyInputTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -1073,7 +1073,7 @@
         assertEquals("Apple", listView.getFocusModel().getFocusedItem());
     }
     
-    @Ignore @Test public void test_rt29930() {
+    @Test public void test_rt29930() {
         sm.setSelectionMode(SelectionMode.MULTIPLE);
         
         sm.clearAndSelect(0);
@@ -1084,7 +1084,7 @@
         assertEquals(2, fm.getFocusedIndex());
         assertEquals(0, getAnchor());
         
-        keyboard.doKeyPress(KeyCode.SPACE, KeyModifier.getShortcutKey()); // set new anchor point
+        keyboard.doKeyPress(KeyCode.SPACE, KeyModifier.getShortcutKey(), PlatformUtil.isMac() ? KeyModifier.CTRL : null); // set new anchor point
         assertTrue(isSelected(0,1));
         assertEquals(2, fm.getFocusedIndex());
         assertEquals(2, getAnchor());
@@ -1529,4 +1529,124 @@
         assertTrue(isSelected(7,5,4,3));
         assertEquals(4, sm.getSelectedItems().size());
     }
+
+    @Test public void test_rt33301_multipleSelection_down() {
+        final int items = 5;
+        listView.getItems().clear();
+        for (int i = 0; i < items; i++) {
+            listView.getItems().add("Row " + i);
+        }
+
+        final FocusModel fm = listView.getFocusModel();
+        final MultipleSelectionModel sm = listView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.MULTIPLE);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 3
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1));
+        assertTrue(isSelected(2,3,4));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(4));
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1));
+        assertTrue(isSelected(2,3,4));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue("Focus index incorrectly at: " + fm.getFocusedIndex(), fm.isFocused(4));
+    }
+
+    @Test public void test_rt33301_multipleSelection_up() {
+        final int items = 5;
+        listView.getItems().clear();
+        for (int i = 0; i < items; i++) {
+            listView.getItems().add("Row " + i);
+        }
+
+        final FocusModel fm = listView.getFocusModel();
+        final MultipleSelectionModel sm = listView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.MULTIPLE);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 1
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(3,4));
+        assertTrue(isSelected(0,1,2));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(3,4));
+        assertTrue(isSelected(0,1,2));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+    }
+
+    @Test public void test_rt33301_singleSelection_down() {
+        final int items = 5;
+        listView.getItems().clear();
+        for (int i = 0; i < items; i++) {
+            listView.getItems().add("Row " + i);
+        }
+
+        final FocusModel fm = listView.getFocusModel();
+        final MultipleSelectionModel sm = listView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.SINGLE);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 3
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1,2,3));
+        assertTrue(isSelected(4));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(4));
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1,2,3));
+        assertTrue(isSelected(4));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(4));
+    }
+
+    @Test public void test_rt33301_singleSelection_up() {
+        final int items = 5;
+        listView.getItems().clear();
+        for (int i = 0; i < items; i++) {
+            listView.getItems().add("Row " + i);
+        }
+
+        final FocusModel fm = listView.getFocusModel();
+        final MultipleSelectionModel sm = listView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.SINGLE);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 1
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(1,2,3,4));
+        assertTrue(isSelected(0));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(1,2,3,4));
+        assertTrue(isSelected(0));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+    }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/MiscellaneousTests.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/MiscellaneousTests.java	Tue Oct 08 09:38:54 2013 -0700
@@ -5,12 +5,14 @@
 import com.sun.javafx.tk.Toolkit;
 import javafx.scene.Group;
 import javafx.scene.Scene;
+import javafx.scene.layout.HBox;
 import javafx.scene.shape.Rectangle;
 import javafx.stage.Stage;
 import org.junit.Test;
 
 import static junit.framework.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
 
 /**
  * Created with IntelliJ IDEA.
@@ -67,4 +69,24 @@
         assertNotNull(button.getBackground());
 
     }
+
+    @Test public void test_RT_33103() {
+
+        HBox box = new HBox();
+
+        TextField field = new TextField();
+        Label badLabel = new Label("Field:", field);
+
+        box.getChildren().addAll(badLabel, field);
+
+        Scene scene = new Scene(box);
+        Stage stage = new Stage();
+        stage.setScene(scene);
+        stage.show();
+
+        ((StubToolkit)Toolkit.getToolkit()).fireTestPulse();
+
+        assertSame(badLabel, field.getParent());
+
+    }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/TableCellTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/TableCellTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -180,8 +180,22 @@
         cell.updateIndex(1);
         assertNull(cell.getItem());
         assertFalse(cell.isEmpty());
-        assertEquals(1, rt_29923_count);    // even though the index has changed,
-                                            // the item is the same, so we don't
-                                            // update the cell item.
+
+        // This test used to be as shown below....but due to RT-33108, it changed
+        // to the enabled code beneath. Refer to the first comment in RT-33108
+        // for more detail, but in short we can't optimise and not call updateItem
+        // when the new and old items are the same - doing so means we can end
+        // up with bad bindings, etc in the individual cells (in other words,
+        // even if their item has not changed, the rest of their state may have)
+//        assertEquals(1, rt_29923_count);    // even though the index has changed,
+//                                            // the item is the same, so we don't
+//                                            // update the cell item.
+        assertEquals(2, rt_29923_count);
+    }
+
+    @Test public void test_rt_33106() {
+        cell.updateTableView(table);
+        table.setItems(null);
+        cell.updateIndex(1);
     }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/TableViewKeyInputTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/TableViewKeyInputTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -1801,7 +1801,7 @@
         assertTrue(isSelected(5,6,7,8,9));
     }
     
-    @Ignore @Test public void test_rt29930() {
+    @Test public void test_rt29930() {
         sm.setCellSelectionEnabled(false);
         sm.setSelectionMode(SelectionMode.MULTIPLE);
         
@@ -1815,7 +1815,7 @@
         assertEquals(2, fm.getFocusedIndex());
         assertEquals(0, getAnchor().getRow());
         
-        keyboard.doKeyPress(KeyCode.SPACE, KeyModifier.getShortcutKey()); // set new anchor point
+        keyboard.doKeyPress(KeyCode.SPACE, KeyModifier.getShortcutKey(), PlatformUtil.isMac() ? KeyModifier.CTRL : null); // set new anchor point
         assertTrue(isSelected(0,1));
         assertEquals(2, sm.getSelectedIndices().size());
         assertEquals(2, sm.getSelectedCells().size());
@@ -2314,4 +2314,128 @@
         assertTrue(isSelected(7,5,4,3));
         assertEquals(4, sm.getSelectedItems().size());
     }
+
+    @Test public void test_rt33301_multipleSelection_down() {
+        final int items = 5;
+        tableView.getItems().clear();
+        for (int i = 0; i < items; i++) {
+            tableView.getItems().add("Row " + i);
+        }
+
+        final TableFocusModel fm = tableView.getFocusModel();
+        final TableSelectionModel sm = tableView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.MULTIPLE);
+        sm.setCellSelectionEnabled(false);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 3
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1));
+        assertTrue(isSelected(2,3,4));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(4));
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1));
+        assertTrue(isSelected(2,3,4));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue("Focus index incorrectly at: " + fm.getFocusedIndex(), fm.isFocused(4));
+    }
+
+    @Test public void test_rt33301_multipleSelection_up() {
+        final int items = 5;
+        tableView.getItems().clear();
+        for (int i = 0; i < items; i++) {
+            tableView.getItems().add("Row " + i);
+        }
+
+        final TableFocusModel fm = tableView.getFocusModel();
+        final TableSelectionModel sm = tableView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.MULTIPLE);
+        sm.setCellSelectionEnabled(false);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 1
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(3,4));
+        assertTrue(isSelected(0,1,2));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(3,4));
+        assertTrue(isSelected(0,1,2));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+    }
+
+    @Test public void test_rt33301_singleSelection_down() {
+        final int items = 5;
+        tableView.getItems().clear();
+        for (int i = 0; i < items; i++) {
+            tableView.getItems().add("Row " + i);
+        }
+
+        final TableFocusModel fm = tableView.getFocusModel();
+        final TableSelectionModel sm = tableView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.SINGLE);
+        sm.setCellSelectionEnabled(false);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 3
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1,2,3));
+        assertTrue(isSelected(4));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(4));
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1,2,3));
+        assertTrue(isSelected(4));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(4));
+    }
+
+    @Test public void test_rt33301_singleSelection_up() {
+        final int items = 5;
+        tableView.getItems().clear();
+        for (int i = 0; i < items; i++) {
+            tableView.getItems().add("Row " + i);
+        }
+
+        final TableFocusModel fm = tableView.getFocusModel();
+        final TableSelectionModel sm = tableView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.SINGLE);
+        sm.setCellSelectionEnabled(false);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 1
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(1,2,3,4));
+        assertTrue(isSelected(0));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(1,2,3,4));
+        assertTrue(isSelected(0));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+    }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/TableViewTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/TableViewTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -41,6 +41,7 @@
 import javafx.beans.value.ObservableValue;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
+import javafx.collections.transformation.SortedList;
 import javafx.event.Event;
 import javafx.event.EventHandler;
 import javafx.scene.control.cell.*;
--- a/modules/controls/src/test/java/javafx/scene/control/TreeCellTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/TreeCellTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -690,6 +690,15 @@
     // When the tree cell's index is changed while it is editing, then what?
 
 
+
+    @Test public void test_rt_33106() {
+        cell.updateTreeView(tree);
+        tree.setRoot(null);
+        cell.updateIndex(1);
+    }
+
+
+
     private final class SelectionModelMock extends MultipleSelectionModelBase<TreeItem<String>> {
         @Override protected int getItemCount() {
             return root.getChildren().size() + 1;
--- a/modules/controls/src/test/java/javafx/scene/control/TreeTableCellTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/TreeTableCellTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -490,8 +490,22 @@
         cell.updateIndex(1);
         assertNull(cell.getItem());
         assertFalse(cell.isEmpty());
-        assertEquals(1, rt_29923_count);    // even though the index has changed,
-                                            // the item is the same, so we don't
-                                            // update the cell item.
+
+        // This test used to be as shown below....but due to RT-33108, it changed
+        // to the enabled code beneath. Refer to the first comment in RT-33108
+        // for more detail, but in short we can't optimise and not call updateItem
+        // when the new and old items are the same - doing so means we can end
+        // up with bad bindings, etc in the individual cells (in other words,
+        // even if their item has not changed, the rest of their state may have)
+//        assertEquals(1, rt_29923_count);    // even though the index has changed,
+//                                            // the item is the same, so we don't
+//                                            // update the cell item.
+        assertEquals(2, rt_29923_count);
+    }
+
+    @Test public void test_rt_33106() {
+        cell.updateTreeTableView(tree);
+        tree.setRoot(null);
+        cell.updateIndex(1);
     }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/TreeTableRowTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/TreeTableRowTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -807,4 +807,12 @@
     @Test public void tableViewPropertyNameIs_treeTableView() {
         assertEquals("treeTableView", cell.treeTableViewProperty().getName());
     }
+
+
+
+    @Test public void test_rt_33106() {
+        cell.updateTreeTableView(tree);
+        tree.setRoot(null);
+        cell.updateIndex(1);
+    }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/TreeTableViewKeyInputTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/TreeTableViewKeyInputTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -2323,7 +2323,7 @@
         assertTrue(debug(), fm.isFocused(13));
     }
     
-    @Ignore @Test public void test_rt29930() {
+    @Test public void test_rt29930() {
         sm.setCellSelectionEnabled(false);
         sm.setSelectionMode(SelectionMode.MULTIPLE);
         
@@ -2335,7 +2335,7 @@
         assertEquals(2, fm.getFocusedIndex());
         assertEquals(0, getAnchor().getRow());
         
-        keyboard.doKeyPress(KeyCode.SPACE, KeyModifier.getShortcutKey()); // set new anchor point
+        keyboard.doKeyPress(KeyCode.SPACE, KeyModifier.getShortcutKey(), PlatformUtil.isMac() ? KeyModifier.CTRL : null); // set new anchor point
         assertTrue(isSelected(0,1));
         assertEquals(2, fm.getFocusedIndex());
         assertEquals(2, getAnchor().getRow());
@@ -2789,4 +2789,128 @@
         assertTrue(isSelected(7,5,4,3));
         assertEquals(4, sm.getSelectedItems().size());
     }
+
+    @Test public void test_rt33301_multipleSelection_down() {
+        final int items = 4;
+        root.getChildren().clear();
+        for (int i = 0; i < items; i++) {
+            root.getChildren().add(new TreeItem<>("Row " + i));
+        }
+
+        final TableFocusModel fm = tableView.getFocusModel();
+        final TableSelectionModel sm = tableView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.MULTIPLE);
+        sm.setCellSelectionEnabled(false);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 3
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1));
+        assertTrue(isSelected(2,3,4));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(4));
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1));
+        assertTrue(isSelected(2,3,4));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue("Focus index incorrectly at: " + fm.getFocusedIndex(), fm.isFocused(4));
+    }
+
+    @Test public void test_rt33301_multipleSelection_up() {
+        final int items = 4;
+        root.getChildren().clear();
+        for (int i = 0; i < items; i++) {
+            root.getChildren().add(new TreeItem<>("Row " + i));
+        }
+
+        final TableFocusModel fm = tableView.getFocusModel();
+        final TableSelectionModel sm = tableView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.MULTIPLE);
+        sm.setCellSelectionEnabled(false);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 1
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(3,4));
+        assertTrue(isSelected(0,1,2));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(3,4));
+        assertTrue(isSelected(0,1,2));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+    }
+
+    @Test public void test_rt33301_singleSelection_down() {
+        final int items = 4;
+        root.getChildren().clear();
+        for (int i = 0; i < items; i++) {
+            root.getChildren().add(new TreeItem<>("Row " + i));
+        }
+
+        final TableFocusModel fm = tableView.getFocusModel();
+        final TableSelectionModel sm = tableView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.SINGLE);
+        sm.setCellSelectionEnabled(false);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 3
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1,2,3));
+        assertTrue(isSelected(4));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(4));
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1,2,3));
+        assertTrue(isSelected(4));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(4));
+    }
+
+    @Test public void test_rt33301_singleSelection_up() {
+        final int items = 4;
+        root.getChildren().clear();
+        for (int i = 0; i < items; i++) {
+            root.getChildren().add(new TreeItem<>("Row " + i));
+        }
+
+        final TableFocusModel fm = tableView.getFocusModel();
+        final TableSelectionModel sm = tableView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.SINGLE);
+        sm.setCellSelectionEnabled(false);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 1
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(1,2,3,4));
+        assertTrue(isSelected(0));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(1,2,3,4));
+        assertTrue(isSelected(0));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+    }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/TreeViewKeyInputTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/TreeViewKeyInputTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -1274,7 +1274,7 @@
         assertEquals(root, treeView.getFocusModel().getFocusedItem());
     }
     
-    @Ignore @Test public void test_rt29930() {
+    @Test public void test_rt29930() {
         sm.setSelectionMode(SelectionMode.MULTIPLE);
         
         sm.clearAndSelect(0);
@@ -1284,7 +1284,7 @@
         assertTrue(isSelected(0,1,2));
         assertEquals(2, fm.getFocusedIndex());
         assertEquals(0, getAnchor());
-        
+
         keyboard.doKeyPress(KeyCode.SPACE, KeyModifier.getShortcutKey(),
                 (Utils.isMac()  ? KeyModifier.CTRL : null)); // set new anchor point
         assertTrue(isSelected(0,1));
@@ -1722,4 +1722,124 @@
         assertTrue(isSelected(7,5,4,3));
         assertEquals(4, sm.getSelectedItems().size());
     }
+
+    @Test public void test_rt33301_multipleSelection_down() {
+        final int items = 4;
+        root.getChildren().clear();
+        for (int i = 0; i < items; i++) {
+            root.getChildren().add(new TreeItem<>("Row " + i));
+        }
+
+        final FocusModel fm = treeView.getFocusModel();
+        final MultipleSelectionModel sm = treeView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.MULTIPLE);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 3
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1));
+        assertTrue(isSelected(2,3,4));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(4));
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1));
+        assertTrue(isSelected(2,3,4));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue("Focus index incorrectly at: " + fm.getFocusedIndex(), fm.isFocused(4));
+    }
+
+    @Test public void test_rt33301_multipleSelection_up() {
+        final int items = 4;
+        root.getChildren().clear();
+        for (int i = 0; i < items; i++) {
+            root.getChildren().add(new TreeItem<>("Row " + i));
+        }
+
+        final FocusModel fm = treeView.getFocusModel();
+        final MultipleSelectionModel sm = treeView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.MULTIPLE);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 1
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(3,4));
+        assertTrue(isSelected(0,1,2));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(3,4));
+        assertTrue(isSelected(0,1,2));
+        assertEquals(3, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+    }
+
+    @Test public void test_rt33301_singleSelection_down() {
+        final int items = 4;
+        root.getChildren().clear();
+        for (int i = 0; i < items; i++) {
+            root.getChildren().add(new TreeItem<>("Row " + i));
+        }
+
+        final FocusModel fm = treeView.getFocusModel();
+        final MultipleSelectionModel sm = treeView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.SINGLE);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 3
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1,2,3));
+        assertTrue(isSelected(4));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(4));
+
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        keyboard.doKeyPress(KeyCode.DOWN,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 4
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(0,1,2,3));
+        assertTrue(isSelected(4));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(4));
+    }
+
+    @Test public void test_rt33301_singleSelection_up() {
+        final int items = 4;
+        root.getChildren().clear();
+        for (int i = 0; i < items; i++) {
+            root.getChildren().add(new TreeItem<>("Row " + i));
+        }
+
+        final FocusModel fm = treeView.getFocusModel();
+        final MultipleSelectionModel sm = treeView.getSelectionModel();
+        sm.setSelectionMode(SelectionMode.SINGLE);
+        sm.clearAndSelect(2);
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 1
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(1,2,3,4));
+        assertTrue(isSelected(0));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        keyboard.doKeyPress(KeyCode.UP,  KeyModifier.getShortcutKey(), KeyModifier.SHIFT); // should stay at row 0
+        Toolkit.getToolkit().firePulse();
+        assertTrue(isNotSelected(1,2,3,4));
+        assertTrue(isSelected(0));
+        assertEquals(1, sm.getSelectedItems().size());
+        assertTrue(fm.isFocused(0));
+    }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/cell/ChoiceBoxListCellTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/cell/ChoiceBoxListCellTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -27,6 +27,7 @@
 
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
+import javafx.scene.control.ChoiceBox;
 import javafx.scene.control.ListCell;
 import javafx.scene.control.ListView;
 import javafx.util.Callback;
@@ -341,4 +342,32 @@
         assertFalse(cell.isEditing());
         assertNull(cell.getGraphic());
     }
+
+    @Test public void test_rt_29320() {
+        ListView listView = new ListView();
+        listView.setEditable(true);
+        ChoiceBoxListCell<Object> cell = new ChoiceBoxListCell<>();
+        cell.updateListView(listView);
+        cell.updateItem("TEST", false);
+        cell.setEditable(true);
+
+        cell.startEdit();
+        ChoiceBox cb = (ChoiceBox) cell.getGraphic();
+
+        // initially the choiceBox converter should equal the cell converter
+        assertNotNull(cell.getConverter());
+        assertNotNull(cb.getConverter());
+        assertEquals(cell.getConverter(), cb.getConverter());
+
+        // and if the cell changes the choicebox should follow
+        cell.setConverter(null);
+        assertNull(cb.getConverter());
+
+        StringConverter<Object> customConverter = new StringConverter<Object>() {
+            @Override public String toString(Object object) { return null; }
+            @Override public Object fromString(String string) { return null; }
+        };
+        cell.setConverter(customConverter);
+        assertEquals(customConverter, cb.getConverter());
+    }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/cell/ChoiceBoxTableCellTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/cell/ChoiceBoxTableCellTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -27,6 +27,7 @@
 
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
+import javafx.scene.control.ChoiceBox;
 import javafx.scene.control.TableCell;
 import javafx.scene.control.TableColumn;
 import javafx.scene.control.TableView;
@@ -417,4 +418,35 @@
         assertFalse(cell.isEditing());
         assertNull(cell.getGraphic());
     }
+
+    @Test public void test_rt_29320() {
+        TableColumn tc = new TableColumn();
+        TableView tableView = new TableView(FXCollections.observableArrayList("TEST"));
+        tableView.getColumns().add(tc);
+        tableView.setEditable(true);
+        ChoiceBoxTableCell<Object,Object> cell = new ChoiceBoxTableCell<>();
+        cell.updateTableView(tableView);
+        cell.updateIndex(0);
+        cell.updateTableColumn(tc);
+        cell.setEditable(true);
+
+        tableView.edit(0, tc);
+        ChoiceBox cb = (ChoiceBox) cell.getGraphic();
+
+        // initially the choiceBox converter should equal the cell converter
+        assertNotNull(cell.getConverter());
+        assertNotNull(cb.getConverter());
+        assertEquals(cell.getConverter(), cb.getConverter());
+
+        // and if the cell changes the choicebox should follow
+        cell.setConverter(null);
+        assertNull(cb.getConverter());
+
+        StringConverter<Object> customConverter = new StringConverter<Object>() {
+            @Override public String toString(Object object) { return null; }
+            @Override public Object fromString(String string) { return null; }
+        };
+        cell.setConverter(customConverter);
+        assertEquals(customConverter, cb.getConverter());
+    }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/cell/ChoiceBoxTreeCellTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/cell/ChoiceBoxTreeCellTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -27,6 +27,7 @@
 
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
+import javafx.scene.control.ChoiceBox;
 import javafx.scene.control.TreeCell;
 import javafx.scene.control.TreeItem;
 import javafx.scene.control.TreeView;
@@ -346,4 +347,33 @@
         assertFalse(cell.isEditing());
         assertNull(cell.getGraphic());
     }
+
+    @Test public void test_rt_29320() {
+        TreeItem root = new TreeItem("Root");
+        TreeView treeView = new TreeView(root);
+        treeView.setEditable(true);
+        ChoiceBoxTreeCell<Object> cell = new ChoiceBoxTreeCell<>();
+        cell.updateTreeView(treeView);
+        cell.updateIndex(0);
+        cell.setEditable(true);
+
+        cell.startEdit();
+        ChoiceBox cb = (ChoiceBox) cell.getGraphic();
+
+        // initially the choiceBox converter should equal the cell converter
+        assertNotNull(cell.getConverter());
+        assertNotNull(cb.getConverter());
+        assertEquals(cell.getConverter(), cb.getConverter());
+
+        // and if the cell changes the choicebox should follow
+        cell.setConverter(null);
+        assertNull(cb.getConverter());
+
+        StringConverter<Object> customConverter = new StringConverter<Object>() {
+            @Override public String toString(Object object) { return null; }
+            @Override public Object fromString(String string) { return null; }
+        };
+        cell.setConverter(customConverter);
+        assertEquals(customConverter, cb.getConverter());
+    }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/cell/ChoiceBoxTreeTableCellTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/cell/ChoiceBoxTreeTableCellTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -27,10 +27,7 @@
 
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
-import javafx.scene.control.TreeItem;
-import javafx.scene.control.TreeTableCell;
-import javafx.scene.control.TreeTableColumn;
-import javafx.scene.control.TreeTableView;
+import javafx.scene.control.*;
 import javafx.util.Callback;
 import javafx.util.StringConverter;
 import org.junit.Before;
@@ -418,4 +415,35 @@
         assertFalse(cell.isEditing());
         assertNull(cell.getGraphic());
     }
+
+    @Test public void test_rt_29320() {
+        TreeTableColumn tc = new TreeTableColumn();
+        TreeTableView tableView = new TreeTableView(new TreeItem("TEST"));
+        tableView.getColumns().add(tc);
+        tableView.setEditable(true);
+        ChoiceBoxTreeTableCell<Object,Object> cell = new ChoiceBoxTreeTableCell<>();
+        cell.updateTreeTableView(tableView);
+        cell.updateIndex(0);
+        cell.updateTreeTableColumn(tc);
+        cell.setEditable(true);
+
+        tableView.edit(0, tc);
+        ChoiceBox cb = (ChoiceBox) cell.getGraphic();
+
+        // initially the choiceBox converter should equal the cell converter
+        assertNotNull(cell.getConverter());
+        assertNotNull(cb.getConverter());
+        assertEquals(cell.getConverter(), cb.getConverter());
+
+        // and if the cell changes the choicebox should follow
+        cell.setConverter(null);
+        assertNull(cb.getConverter());
+
+        StringConverter<Object> customConverter = new StringConverter<Object>() {
+            @Override public String toString(Object object) { return null; }
+            @Override public Object fromString(String string) { return null; }
+        };
+        cell.setConverter(customConverter);
+        assertEquals(customConverter, cb.getConverter());
+    }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/cell/ComboBoxListCellTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/cell/ComboBoxListCellTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -27,6 +27,7 @@
 
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
+import javafx.scene.control.ComboBox;
 import javafx.scene.control.ListCell;
 import javafx.scene.control.ListView;
 import javafx.util.Callback;
@@ -341,4 +342,32 @@
         assertFalse(cell.isEditing());
         assertNull(cell.getGraphic());
     }
+
+    @Test public void test_rt_29320() {
+        ListView listView = new ListView();
+        listView.setEditable(true);
+        ComboBoxListCell<Object> cell = new ComboBoxListCell<>();
+        cell.updateListView(listView);
+        cell.updateItem("TEST", false);
+        cell.setEditable(true);
+
+        cell.startEdit();
+        ComboBox cb = (ComboBox) cell.getGraphic();
+
+        // initially the choiceBox converter should equal the cell converter
+        assertNotNull(cell.getConverter());
+        assertNotNull(cb.getConverter());
+        assertEquals(cell.getConverter(), cb.getConverter());
+
+        // and if the cell changes the choicebox should follow
+        cell.setConverter(null);
+        assertNull(cb.getConverter());
+
+        StringConverter<Object> customConverter = new StringConverter<Object>() {
+            @Override public String toString(Object object) { return null; }
+            @Override public Object fromString(String string) { return null; }
+        };
+        cell.setConverter(customConverter);
+        assertEquals(customConverter, cb.getConverter());
+    }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/cell/ComboBoxTableCellTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/cell/ComboBoxTableCellTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -27,6 +27,7 @@
 
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
+import javafx.scene.control.ComboBox;
 import javafx.scene.control.TableCell;
 import javafx.scene.control.TableColumn;
 import javafx.scene.control.TableView;
@@ -450,4 +451,35 @@
         assertFalse(cell.isEditing());
         assertNull(cell.getGraphic());
     }
+
+    @Test public void test_rt_29320() {
+        TableColumn tc = new TableColumn();
+        TableView tableView = new TableView(FXCollections.observableArrayList("TEST"));
+        tableView.getColumns().add(tc);
+        tableView.setEditable(true);
+        ComboBoxTableCell<Object,Object> cell = new ComboBoxTableCell<>();
+        cell.updateTableView(tableView);
+        cell.updateIndex(0);
+        cell.updateTableColumn(tc);
+        cell.setEditable(true);
+
+        tableView.edit(0, tc);
+        ComboBox cb = (ComboBox) cell.getGraphic();
+
+        // initially the choiceBox converter should equal the cell converter
+        assertNotNull(cell.getConverter());
+        assertNotNull(cb.getConverter());
+        assertEquals(cell.getConverter(), cb.getConverter());
+
+        // and if the cell changes the choicebox should follow
+        cell.setConverter(null);
+        assertNull(cb.getConverter());
+
+        StringConverter<Object> customConverter = new StringConverter<Object>() {
+            @Override public String toString(Object object) { return null; }
+            @Override public Object fromString(String string) { return null; }
+        };
+        cell.setConverter(customConverter);
+        assertEquals(customConverter, cb.getConverter());
+    }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/cell/ComboBoxTreeCellTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/cell/ComboBoxTreeCellTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -27,6 +27,7 @@
 
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
+import javafx.scene.control.ComboBox;
 import javafx.scene.control.TreeCell;
 import javafx.scene.control.TreeItem;
 import javafx.scene.control.TreeView;
@@ -346,4 +347,33 @@
         assertFalse(cell.isEditing());
         assertNull(cell.getGraphic());
     }
+
+    @Test public void test_rt_29320() {
+        TreeItem root = new TreeItem("Root");
+        TreeView treeView = new TreeView(root);
+        treeView.setEditable(true);
+        ComboBoxTreeCell<Object> cell = new ComboBoxTreeCell<>();
+        cell.updateTreeView(treeView);
+        cell.updateIndex(0);
+        cell.setEditable(true);
+
+        cell.startEdit();
+        ComboBox cb = (ComboBox) cell.getGraphic();
+
+        // initially the choiceBox converter should equal the cell converter
+        assertNotNull(cell.getConverter());
+        assertNotNull(cb.getConverter());
+        assertEquals(cell.getConverter(), cb.getConverter());
+
+        // and if the cell changes the choicebox should follow
+        cell.setConverter(null);
+        assertNull(cb.getConverter());
+
+        StringConverter<Object> customConverter = new StringConverter<Object>() {
+            @Override public String toString(Object object) { return null; }
+            @Override public Object fromString(String string) { return null; }
+        };
+        cell.setConverter(customConverter);
+        assertEquals(customConverter, cb.getConverter());
+    }
 }
--- a/modules/controls/src/test/java/javafx/scene/control/cell/ComboBoxTreeTableCellTest.java	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/controls/src/test/java/javafx/scene/control/cell/ComboBoxTreeTableCellTest.java	Tue Oct 08 09:38:54 2013 -0700
@@ -27,10 +27,7 @@
 
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
-import javafx.scene.control.TreeItem;
-import javafx.scene.control.TreeTableCell;
-import javafx.scene.control.TreeTableColumn;
-import javafx.scene.control.TreeTableView;
+import javafx.scene.control.*;
 import javafx.util.Callback;
 import javafx.util.StringConverter;
 import org.junit.Before;
@@ -440,4 +437,35 @@
         assertFalse(cell.isEditing());
         assertNull(cell.getGraphic());
     }
+
+    @Test public void test_rt_29320() {
+        TreeTableColumn tc = new TreeTableColumn();
+        TreeTableView tableView = new TreeTableView(new TreeItem("TEST"));
+        tableView.getColumns().add(tc);
+        tableView.setEditable(true);
+        ComboBoxTreeTableCell<Object,Object> cell = new ComboBoxTreeTableCell<>();
+        cell.updateTreeTableView(tableView);
+        cell.updateIndex(0);
+        cell.updateTreeTableColumn(tc);
+        cell.setEditable(true);
+
+        tableView.edit(0, tc);
+        ComboBox cb = (ComboBox) cell.getGraphic();
+
+        // initially the choiceBox converter should equal the cell converter
+        assertNotNull(cell.getConverter());
+        assertNotNull(cb.getConverter());
+        assertEquals(cell.getConverter(), cb.getConverter());
+
+        // and if the cell changes the choicebox should follow
+        cell.setConverter(null);
+        assertNull(cb.getConverter());
+
+        StringConverter<Object> customConverter = new StringConverter<Object>() {
+            @Override public String toString(Object object) { return null; }
+            @Override public Object fromString(String string) { return null; }
+        };
+        cell.setConverter(customConverter);
+        assertEquals(customConverter, cb.getConverter());
+    }
 }
--- a/modules/fxml/src/main/docs/javafx/fxml/doc-files/fxml.css	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/fxml/src/main/docs/javafx/fxml/doc-files/fxml.css	Tue Oct 08 09:38:54 2013 -0700
@@ -67,6 +67,24 @@
     padding:12;
 }
 
+table {
+	font-size: 10pt;
+	font-family: Courier New;
+	background: #eeeeee;
+	border: #ccc 1px solid;
+	margin: 12px;
+}
+
+table td {
+	padding: 3px;
+	border-top: 1px solid #e0e0e0;
+	border-bottom: 1px solid #e0e0e0;
+	border-left: 1px solid #e0e0e0;
+	border-right: 1px solid #e0e0e0;
+   background: #dddddd;
+
+}
+
 span.variable {
     font-style: italic;
 }
--- a/modules/fxml/src/main/docs/javafx/fxml/doc-files/introduction_to_fxml.html	Thu Oct 03 16:58:53 2013 -0700
+++ b/modules/fxml/src/main/docs/javafx/fxml/doc-files/introduction_to_fxml.html	Tue Oct 08 09:38:54 2013 -0700
@@ -242,6 +242,10 @@