changeset 5878:76c09d14cfbd

Automated merge with ssh://jfxsrc.us.oracle.com//javafx/8.0/MASTER/jfx/rt
author kcr
date Mon, 02 Dec 2013 21:25:39 -0800
parents 32281599fbc7 24c413e47bd9
children 268fe91a74e0
files apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/cubesystem/CubeSystemApp.java apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/xylophone/Cube.java
diffstat 250 files changed, 8694 insertions(+), 4869 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/build.xml	Mon Dec 02 21:25:39 2013 -0800
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project default="sampleAppsJar" basedir=".">
+
+    <!-- 
+       Note: this build.xml will be pulled into the
+       Gradle namespace, so lets use long names...
+    -->
+
+    <target name="sampleAppsJar">
+        <condition property="jfxrt.jar.exists">
+            <available file="${file.reference.jfxrt.jar}" type="file"/>
+        </condition>
+        <fail unless="jfxrt.jar.exists"/>
+
+        <ant dir="samples" target="jar" inheritAll="true"/>
+        <ant dir="experiments" target="jar" inheritAll="true"/>
+        <ant dir="performance" target="jar" inheritAll="true"/>
+        <ant dir="toys" target="jar" inheritAll="true"/>
+    </target>
+
+    <target name="sampleAppsClean">
+        <ant dir="samples" target="clean" inheritAll="true"/>
+        <ant dir="experiments" target="clean" inheritAll="true"/>
+        <ant dir="performance" target="clean" inheritAll="true"/>
+        <ant dir="toys" target="clean" inheritAll="true"/>
+    </target>
+
+</project>
+
+
--- a/apps/experiments/3DViewer/.classpath	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/experiments/3DViewer/.classpath	Mon Dec 02 21:25:39 2013 -0800
@@ -4,7 +4,6 @@
 	<classpathentry kind="src" path="src/test/java"/>
 	<classpathentry kind="src" path="src/main/resources"/>
 	<classpathentry kind="src" path="src/test/resources"/>
-	<classpathentry kind="lib" path="build/libs/3DViewer.jar"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/rt">
 	<attributes>
 		<attribute name="optional" value="true"/>
--- a/apps/experiments/3DViewer/build.xml	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/experiments/3DViewer/build.xml	Mon Dec 02 21:25:39 2013 -0800
@@ -72,6 +72,13 @@
 
     -->
 
+    <target name="-pre-init">
+        <!-- exclude samples that are not part of the base JavaFX -->
+        <condition property="excludes" value="com/javafx/experiments/height2normal/Height2NormalApp.java">
+            <isset property="JFX_CORE_ONLY"/>
+        </condition>
+    </target>
+
     <target name="install-to-maven-repo" depends="jar">
         <property name="maven.home" location="${ant.home}\..\maven"/>
         <macrodef name="maven">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/experiments/build.xml	Mon Dec 02 21:25:39 2013 -0800
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project default="jar" basedir=".">
+
+    <target name="swingJar" unless="JFX_CORE_ONLY">
+         <!-- 
+          these apps have dependencies on Swing which is not part of the 
+          JFX_CORE, so we should not try to build them
+          -->
+        <ant dir="Modena" target="jar" inheritAll="true"/>
+    </target>
+
+    <target name="jar" depends="swingJar">
+        <ant dir="3DViewer" target="jar" inheritAll="true"/>
+    </target>
+
+    <target name="clean">
+        <ant dir="3DViewer" target="clean" inheritAll="true"/>
+        <ant dir="Modena" target="clean" inheritAll="true"/>
+    </target>
+
+</project>
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/performance/build.xml	Mon Dec 02 21:25:39 2013 -0800
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project default="jar" basedir=".">
+
+    <target name="jar">
+        <!--
+        <ant dir="GraphicsPerformance" target="jar" inheritAll="true"/>
+        -->
+    </target>
+
+    <target name="clean">
+        <!--
+        <ant dir="GraphicsPerformance" target="clean" inheritAll="true"/>
+        -->
+    </target>
+
+</project>
+
+
--- a/apps/samples/Ensemble8/build.xml	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/build.xml	Mon Dec 02 21:25:39 2013 -0800
@@ -71,6 +71,12 @@
     nbproject/build-impl.xml file. 
 
     -->
+    <target name="-pre-init">
+        <!-- exclude samples that are not part of the base JavaFX -->
+        <condition property="excludes" value="ensemble/samples/swing/**">
+            <isset property="JFX_CORE_ONLY"/>
+        </condition>
+    </target>
     
     <!-- COPY SAMPLE SRC TO BUILD DIR -->
     <target name="-pre-compile">
--- a/apps/samples/Ensemble8/nbproject/project.properties	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/nbproject/project.properties	Mon Dec 02 21:25:39 2013 -0800
@@ -1,100 +1,100 @@
-annotation.processing.enabled=true
-annotation.processing.enabled.in.editor=false
-annotation.processing.processors.list=
-annotation.processing.run.all.processors=true
-annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
-application.title=Ensemble
-application.vendor=Oracle
-build.classes.dir=${build.dir}/classes
-build.classes.excludes=**/*.java,**/*.form
-# This directory is removed when the project is cleaned:
-build.dir=build
-build.generated.dir=${build.dir}/generated
-build.generated.sources.dir=${build.dir}/generated-sources
-# Only compile against the classpath explicitly listed here:
-build.sysclasspath=ignore
-build.test.classes.dir=${build.dir}/test/classes
-build.test.results.dir=${build.dir}/test/results
-# Uncomment to specify the preferred debugger connection transport:
-#debug.transport=dt_socket
-debug.classpath=\
-    ${run.classpath}
-debug.test.classpath=\
-    ${run.test.classpath}
-# This directory is removed when the project is cleaned:
-dist.dir=dist
-dist.jar=${dist.dir}/Ensemble8.jar
-dist.javadoc.dir=${dist.dir}/javadoc
-endorsed.classpath=
-excludes=
-file.reference.jfxrt.jar=../../../../artifacts/sdk/rt/lib/ext/jfxrt.jar
-file.reference.lucene-core-3.2.0.jar=lib/lucene-core-3.2.0.jar
-file.reference.lucene-grouping-3.2.0.jar=lib/lucene-grouping-3.2.0.jar
-includes=**
-jar.archive.disabled=${jnlp.enabled}
-jar.compress=true
-jar.index=${jnlp.enabled}
-javac.classpath=\
-    ${file.reference.jfxrt.jar}:\
-    ${file.reference.lucene-core-3.2.0.jar}:\
-    ${file.reference.lucene-grouping-3.2.0.jar}:\
-    .
-# Space-separated list of extra javac options
-javac.compilerargs=
-javac.deprecation=false
-javac.processorpath=\
-    ${javac.classpath}:\
-    ${file.reference.ant-javafx.jar}
-javac.source=1.8
-javac.target=1.8
-javac.test.classpath=\
-    ${javac.classpath}:\
-    ${build.classes.dir}
-javac.test.processorpath=\
-    ${javac.test.classpath}
-javadoc.additionalparam=
-javadoc.author=false
-javadoc.encoding=${source.encoding}
-javadoc.noindex=false
-javadoc.nonavbar=false
-javadoc.notree=false
-javadoc.private=false
-javadoc.splitindex=true
-javadoc.use=true
-javadoc.version=false
-javadoc.windowtitle=
-jnlp.applet.class=ensemble.samples.swing.swinginterop.SwingInterop
-jnlp.applet.height=300
-jnlp.applet.width=300
-jnlp.codebase.type=no.codebase
-jnlp.descriptor=application
-jnlp.enabled=false
-jnlp.mixed.code=default
-jnlp.offline-allowed=false
-jnlp.signed=false
-jnlp.signing=
-jnlp.signing.alias=
-jnlp.signing.keystore=
-main.class=ensemble.EnsembleApp
-manifest.file=manifest.mf
-meta.inf.dir=${src.dir}/META-INF
-mkdist.disabled=true
-platform.active=JDK_1.8
-run.classpath=\
-    ${javac.classpath}:\
-    ${build.classes.dir}
-# Space-separated list of JVM arguments used when running the project.
-# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
-# To set system properties for unit tests define test-sys-prop.name=value:
-run.jvmargs=
-run.test.classpath=\
-    ${javac.test.classpath}:\
-    ${build.test.classes.dir}
-source.encoding=UTF-8
-src.java.dir=src/app/java
-src.java2.dir=src/generated/java
-src.java3.dir=src/compiletime/java
-src.java4.dir=src/samples/java
-src.resources.dir=src/app/resources
-src.resources2.dir=src/generated/resources
-src.resources3.dir=src/samples/resources
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+application.title=Ensemble
+application.vendor=Oracle
+build.classes.dir=${build.dir}/classes
+build.classes.excludes=**/*.java,**/*.form
+# This directory is removed when the project is cleaned:
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+# Only compile against the classpath explicitly listed here:
+build.sysclasspath=ignore
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+# Uncomment to specify the preferred debugger connection transport:
+#debug.transport=dt_socket
+debug.classpath=\
+    ${run.classpath}
+debug.test.classpath=\
+    ${run.test.classpath}
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/Ensemble8.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
+excludes=
+file.reference.jfxrt.jar=../../../../artifacts/sdk/rt/lib/ext/jfxrt.jar
+file.reference.lucene-core-3.2.0.jar=lib/lucene-core-3.2.0.jar
+file.reference.lucene-grouping-3.2.0.jar=lib/lucene-grouping-3.2.0.jar
+includes=**
+jar.archive.disabled=${jnlp.enabled}
+jar.compress=true
+jar.index=${jnlp.enabled}
+javac.classpath=\
+    ${file.reference.jfxrt.jar}:\
+    ${file.reference.lucene-core-3.2.0.jar}:\
+    ${file.reference.lucene-grouping-3.2.0.jar}:\
+    .
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.processorpath=\
+    ${javac.classpath}:\
+    ${file.reference.ant-javafx.jar}
+javac.source=1.8
+javac.target=1.8
+javac.test.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+javac.test.processorpath=\
+    ${javac.test.classpath}
+javadoc.additionalparam=-tag preview:X -tag sampleName:X -tag related:X -tag embedded:X -tag playground:X -tag conditionalFeatures:X -tag docUrl:X -tag highlight:X
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.private=false
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+jnlp.applet.class=ensemble.samples.swing.swinginterop.SwingInterop
+jnlp.applet.height=300
+jnlp.applet.width=300
+jnlp.codebase.type=no.codebase
+jnlp.descriptor=application
+jnlp.enabled=false
+jnlp.mixed.code=default
+jnlp.offline-allowed=false
+jnlp.signed=false
+jnlp.signing=
+jnlp.signing.alias=
+jnlp.signing.keystore=
+main.class=ensemble.EnsembleApp
+manifest.file=manifest.mf
+meta.inf.dir=${src.dir}/META-INF
+mkdist.disabled=true
+platform.active=JDK_1.8
+run.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+# Space-separated list of JVM arguments used when running the project.
+# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
+# To set system properties for unit tests define test-sys-prop.name=value:
+run.jvmargs=
+run.test.classpath=\
+    ${javac.test.classpath}:\
+    ${build.test.classes.dir}
+source.encoding=UTF-8
+src.java.dir=src/app/java
+src.java2.dir=src/generated/java
+src.java3.dir=src/compiletime/java
+src.java4.dir=src/samples/java
+src.resources.dir=src/app/resources
+src.resources2.dir=src/generated/resources
+src.resources3.dir=src/samples/resources
--- a/apps/samples/Ensemble8/src/app/java/ensemble/EnsembleApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/EnsembleApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -36,6 +36,7 @@
 import ensemble.control.SearchBox;
 import ensemble.control.TitledToolBar;
 import ensemble.generated.Samples;
+import java.util.logging.Logger;
 import javafx.application.Application;
 import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
@@ -80,18 +81,19 @@
     private Button homeButton;
     private ToggleButton listButton;
     private ToggleButton searchButton;
-    private SearchBox searchBox = new SearchBox();
+    private final SearchBox searchBox = new SearchBox();
     private PageBrowser pageBrowser;
     private Popover sampleListPopover;
     private SearchPopover searchPopover;
     private MenuBar menuBar;
     
     static {
-        System.out.println("IS_IPHONE = " + IS_IPHONE);
-        System.out.println("IS_MAC = " + IS_MAC);
-        System.out.println("IS_IOS = " + IS_IOS);
-        System.out.println("IS_EMBEDDED = " + IS_EMBEDDED);
-        System.out.println("IS_DESKTOP = " + IS_DESKTOP);
+        System.setProperty("java.net.useSystemProxies", "true");
+        Logger.getLogger(EnsembleApp.class.getName()).finer("IS_IPHONE = " + IS_IPHONE);
+        Logger.getLogger(EnsembleApp.class.getName()).finer("IS_MAC = " + IS_MAC);
+        Logger.getLogger(EnsembleApp.class.getName()).finer("IS_IOS = " + IS_IOS);
+        Logger.getLogger(EnsembleApp.class.getName()).finer("IS_EMBEDDED = " + IS_EMBEDDED);
+        Logger.getLogger(EnsembleApp.class.getName()).finer("IS_DESKTOP = " + IS_DESKTOP);
     }
 
     @Override public void init() throws Exception {
--- a/apps/samples/Ensemble8/src/app/java/ensemble/PageBrowser.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/PageBrowser.java	Mon Dec 02 21:25:39 2013 -0800
@@ -31,6 +31,7 @@
  */
 package ensemble;
 
+import static ensemble.PlatformFeatures.WEB_SUPPORTED;
 import ensemble.samplepage.SourcePage;
 import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.ReadOnlyBooleanProperty;
@@ -54,6 +55,7 @@
     private HomePage homePage;
     private Page currentPage;
     private SamplePage samplePage;
+    private SourcePage sourcePage;
     private String currentPageUrl;
     private DocsPage docsPage;
     private LinkedList<String> pastHistory = new LinkedList<>();
@@ -98,7 +100,7 @@
     public void goHome() {
         goToPage(HOME_URL, null, true);
     }
-    
+
     /**
      * This is called when a inner url has changed inside of a page and we want 
      * to update the history.
@@ -114,33 +116,18 @@
     }
     
     private void goToPage(String url, SampleInfo sample, boolean updateHistory) {
-        // update history
-        if (updateHistory) {
-            if (currentPageUrl != null) {
-                pastHistory.push(getCurrentPageUrl());
-            }
-            futureHistory.clear();
-        }
-        currentPageUrl = url;
-        // remove old page
-        if (currentPage != null) {
-            getChildren().remove((Node) currentPage);
-        }
+        Page nextPage = null;
         // get node for page
         if (url.equals(HOME_URL)) {
-            if (homePage == null) {
-                homePage = new HomePage(this);
+            nextPage = getHomePage();
+        } else if (url.startsWith("http://") || url.startsWith("https://")) {
+            if (WEB_SUPPORTED) {
+                nextPage = updateDocsPage(url);
+            } else {
+                System.err.println("Web pages are not supported and links to them should be disabled!");
             }
-            currentPage = homePage;
-            getChildren().add(currentPage.getNode());
-        } else if (url.startsWith("http://") || url.startsWith("https://")) {
-            if (docsPage == null) docsPage = new DocsPage(this);
-            currentPage = docsPage;
-            docsPage.goToUrl(url);
-            getChildren().add(currentPage.getNode());
         } else if (sample != null) {
-            currentPage = updateSamplePage(sample, url);
-            getChildren().add(currentPage.getNode());
+            nextPage = updateSamplePage(sample, url);
         } else if (url.startsWith("sample://")) {
             String samplePath = url.substring("sample://".length());
             if (samplePath.contains("?")) {
@@ -148,8 +135,7 @@
             }
             sample = Samples.ROOT.sampleForPath(samplePath);
             if (sample != null) {
-                currentPage = updateSamplePage(sample, url);
-                getChildren().add(currentPage.getNode());
+                nextPage = updateSamplePage(sample, url);
             } else {
                 throw new UnsupportedOperationException("Unknown sample url ["+url+"]");
             }
@@ -160,21 +146,34 @@
             }
             sample = Samples.ROOT.sampleForPath(samplePath);
             if (sample != null) {
-                SourcePage sourcePage = new SourcePage();
-                sourcePage.setSampleInfo(sample);
-                currentPage = sourcePage;
-                getChildren().add(currentPage.getNode());
+                nextPage = updateSourcePage(sample);
             } else {
-                throw new UnsupportedOperationException("Unknown sample url ["+url+"]");
+                System.err.println("Unknown sample url [" + url + "]");
             }
         } else {
-            throw new UnsupportedOperationException("Unknown ensemble page url ["+url+"]");
+            System.err.println("Unknown ensemble page url [" + url + "]");
         }
-        // update properties
-        atHome.set(url.equals(HOME_URL));
-        forwardPossible.set(!futureHistory.isEmpty());
-        backPossible.set(!pastHistory.isEmpty());
-        currentPageTitle.bind(currentPage.titleProperty());
+        if (nextPage != null) {
+            // update history
+            if (updateHistory) {
+                if (currentPageUrl != null) {
+                    pastHistory.push(getCurrentPageUrl());
+                }
+                futureHistory.clear();
+            }
+            currentPageUrl = url;
+            // remove old page
+            if (currentPage != null) {
+                getChildren().remove((Node) currentPage);
+            }
+            currentPage = nextPage;
+            getChildren().add(currentPage.getNode());
+            // update properties
+            atHome.set(url.equals(HOME_URL));
+            forwardPossible.set(!futureHistory.isEmpty());
+            backPossible.set(!pastHistory.isEmpty());
+            currentPageTitle.bind(currentPage.titleProperty());
+        }
     }
 
     @Override protected void layoutChildren() {
@@ -195,4 +194,27 @@
         }
         return samplePage;
     }
+
+    private SourcePage updateSourcePage(SampleInfo sample) {
+        if (sourcePage == null) {
+            sourcePage = new SourcePage();
+        }
+        sourcePage.setSampleInfo(sample);
+        return sourcePage;
+    }
+
+    private Page getHomePage() {
+        if (homePage == null) {
+            homePage = new HomePage(this);
+        }
+        return homePage;
+    }
+
+    private DocsPage updateDocsPage(String url) {
+        if (docsPage == null) {
+            docsPage = new DocsPage(this);
+        }
+        docsPage.goToUrl(url);
+        return docsPage;
+    }
 }
--- a/apps/samples/Ensemble8/src/app/java/ensemble/PlatformFeatures.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/PlatformFeatures.java	Mon Dec 02 21:25:39 2013 -0800
@@ -31,6 +31,11 @@
  */
 package ensemble;
 
+
+import javafx.application.ConditionalFeature;
+import javafx.application.Platform;
+
+
 public class PlatformFeatures {
     private static final String os = System.getProperty("os.name");
     private static final String arch = System.getProperty("os.arch");
@@ -46,6 +51,7 @@
     public static final boolean USE_IOS_THEME = IOS;
     public static final boolean START_FULL_SCREEN = ARM;
     public static final boolean EMBEDDED = ARM || IOS;
+    public static final boolean WEB_SUPPORTED = Platform.isSupported(ConditionalFeature.WEB);
         
     private PlatformFeatures(){}
 }
--- a/apps/samples/Ensemble8/src/app/java/ensemble/SampleCategory.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/SampleCategory.java	Mon Dec 02 21:25:39 2013 -0800
@@ -50,7 +50,7 @@
         this.name = name;
         this.samples = FeatureChecker.filterSamples(samples);
         this.samplesAll = FeatureChecker.filterSamples(samplesAll);
-        this.subCategories = subCategories;
+        this.subCategories = FeatureChecker.filterEmptyCategories(subCategories);
     }
     
     public SampleInfo sampleForPath(String path) {
--- a/apps/samples/Ensemble8/src/app/java/ensemble/control/BendingPages.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/control/BendingPages.java	Mon Dec 02 21:25:39 2013 -0800
@@ -119,7 +119,7 @@
     /**
      * Offset is subtracted from right bottom corner. (0, 0) is fully closed
      * (100, 200) is opened by (-100, -200).
-     * @return 
+     * @return offset point property
      */
     public ObjectProperty<Point2D> closedOffsetProperty() {
         return closedOffset;
@@ -138,7 +138,7 @@
     /**
      * Offset is added to top left corner of maximum opened corner. (0, 0) is
      * fully opened. (2 * width - 100, 2 * height - 200) is opened by (-100, -200).
-     * @return 
+     * @return offset point property
      */
     public ObjectProperty<Point2D> openedOffsetProperty() {
         return openedOffset;
@@ -390,9 +390,9 @@
     
     /**
      * Sets colors for path gradient. Values are used on next update().
-     * @param pathColor
-     * @param bendStartColor
-     * @param bendEndColor 
+     * @param pathColor Color for path
+     * @param bendStartColor Start color for path
+     * @param bendEndColor  End color for path
      */
     public void setColors(Color pathColor, Color bendStartColor, Color bendEndColor) {
         bookBend.setColors(pathColor, bendStartColor, bendEndColor);
--- a/apps/samples/Ensemble8/src/app/java/ensemble/control/BookBend.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/control/BookBend.java	Mon Dec 02 21:25:39 2013 -0800
@@ -141,9 +141,9 @@
 
     /**
      * Sets colors for path gradient. Values are used on next update().
-     * @param pathColor
-     * @param bendStartColor
-     * @param bendEndColor 
+     * @param pathColor Path Color
+     * @param bendStartColor Starting path color
+     * @param bendEndColor  Ending path color
      */
     public void setColors(Color pathColor, Color bendStartColor, Color bendEndColor) {
         this.pathColor = pathColor;
@@ -184,8 +184,8 @@
     
     /**
      * Updates DisplacementMap and path to target coordinates.
-     * @param targetX
-     * @param targetY 
+     * @param targetX target X
+     * @param targetY  target Y
      */
     public void update(double targetX, double targetY) {
         this.targetX = targetX;
--- a/apps/samples/Ensemble8/src/app/java/ensemble/control/Popover.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/control/Popover.java	Mon Dec 02 21:25:39 2013 -0800
@@ -472,6 +472,7 @@
 
         /**
          * The text for left button, if null then button will be hidden.
+         * @return The button text
          */
         public String leftButtonText();
 
@@ -482,6 +483,7 @@
 
         /**
          * The text for right button, if null then button will be hidden.
+         * @return The button text
          */
         public String rightButtonText();
 
--- a/apps/samples/Ensemble8/src/app/java/ensemble/control/PopoverTreeList.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/control/PopoverTreeList.java	Mon Dec 02 21:25:39 2013 -0800
@@ -42,7 +42,7 @@
 import javafx.util.Callback;
 
 /**
- * Special ListView designed to look like "Text... >" tree list. Perhaps we ought to have customized
+ * Special ListView designed to look like "Text... &gt;" tree list. Perhaps we ought to have customized
  * a TreeView instead of a ListView (as the TreeView already has the data model all defined).
  *
  * This implementation minimizes classes by just having the PopoverTreeList implementing everything
--- a/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/Description.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/Description.java	Mon Dec 02 21:25:39 2013 -0800
@@ -133,7 +133,7 @@
     }
 
     private void update(SampleInfo sampleInfo) {
-        if (Platform.isSupported(ConditionalFeature.WEB)) {
+        if (PlatformFeatures.WEB_SUPPORTED) {
             relatedDocumentsList.getChildren().clear();
             for (final URL docUrl : sampleInfo.getDocURLs()) {
                 Hyperlink link = new Hyperlink(docUrl.getName());
--- a/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/PlaygroundTabs.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/samplepage/PlaygroundTabs.java	Mon Dec 02 21:25:39 2013 -0800
@@ -84,6 +84,8 @@
 class PlaygroundTabs extends TabPane {
     private final SamplePage samplePage;
     private final GridPane grid;
+    private final Tab propertiesTab;
+    private final Tab dataTab;
 
     PlaygroundTabs(final SamplePage samplePage) {
         this.samplePage = samplePage;
@@ -91,6 +93,15 @@
         grid.setHgap(SamplePage.INDENT);
         grid.setVgap(SamplePage.INDENT);
         grid.setPadding(new Insets(SamplePage.INDENT));
+        getStyleClass().add("floating");
+        ScrollPane scrollPane = new ScrollPane(grid);
+        scrollPane.getStyleClass().clear();
+        setTabClosingPolicy(TabClosingPolicy.UNAVAILABLE);
+        propertiesTab = new Tab("Properties");
+        propertiesTab.setContent(scrollPane);
+        dataTab = new Tab("Data");
+        getTabs().addAll(propertiesTab, dataTab);
+        setMinSize(100, 100);
         samplePage.registerSampleInfoUpdater(new Callback<SampleInfo, Void>() {
 
             @Override
@@ -99,13 +110,6 @@
                 return null;
             }
         });
-        getStyleClass().add("floating");
-        ScrollPane scrollPane = new ScrollPane(grid);
-        scrollPane.getStyleClass().clear();
-        Tab tab = new Tab("Properties");
-        tab.setContent(scrollPane);
-        getTabs().add(tab);
-        setMinSize(100, 100);
     }
 
     private PropertyController newPropertyController(PlaygroundProperty playgroundProperty, Object object, Object property) {
@@ -142,6 +146,7 @@
     private void update(SampleInfo sampleInfo) {
         grid.getChildren().clear();
         int rowIndex = 0;
+        boolean needsDataTab = false;
         for (PlaygroundProperty prop : sampleInfo.playgroundProperties) {
             try {
                 Object object = samplePage.sampleRuntimeInfoProperty.get().getApp();
@@ -181,13 +186,11 @@
                     }
                 }
                 if (object instanceof XYChart && prop.propertyName.equals("data")) {
-                    Tab tab = new Tab("Data");
-                    tab.setContent(new XYDataVisualizer((XYChart) object));
-                    getTabs().add(tab);
+                    needsDataTab = true;
+                    dataTab.setContent(new XYDataVisualizer((XYChart) object));
                 } else if (object instanceof PieChart && prop.propertyName.equals("data")) {
-                    Tab tab = new Tab("Data");
-                    tab.setContent(new PieChartDataVisualizer((PieChart) object));
-                    getTabs().add(tab);
+                    needsDataTab = true;
+                    dataTab.setContent(new PieChartDataVisualizer((PieChart) object));
                 } else {
                     PropertyController controller = newPropertyController(prop, object, property);
                     if (controller != null) {
@@ -207,6 +210,12 @@
                 Logger.getLogger(SamplePage.class.getName()).log(Level.SEVERE, null, ex);
             }
         }
+        if (needsDataTab && !getTabs().contains(dataTab)) {
+            getTabs().add(dataTab);
+        }
+        if (!needsDataTab) {
+            getTabs().remove(dataTab);
+        }
     }
 
     private class PropertyController {
@@ -220,7 +229,7 @@
         public PropertyController(PlaygroundProperty playgroundProperty) {
             this(playgroundProperty, playgroundProperty.propertyName);
         }
-        
+
         public PropertyController(PlaygroundProperty playgroundProperty, String name) {
             if (playgroundProperty.properties.containsKey("name")) {
                 this.name = playgroundProperty.properties.get("name");
@@ -240,15 +249,15 @@
             }
             return label;
         }
-        
+
         protected void setController(Region controller) {
             this.controller = controller;
         }
-        
+
         protected void setPreview(Node preview) {
             this.preview = preview;
         }
-        
+
         public Region getController() {
             if (controller == null) {
                 controller = new Region();
@@ -287,7 +296,7 @@
             }
             slider.valueProperty().bindBidirectional(prop);
             setController(slider);
-            
+
             TextField preview = new TextField();
             preview.setPrefWidth(30);
             preview.textProperty().bindBidirectional(prop, new StringConverter<Number>() {
@@ -321,7 +330,7 @@
             slider.setMajorTickUnit(1);
             slider.valueProperty().bindBidirectional(prop);
             setController(slider);
-            
+
             TextField preview = new TextField();
             preview.setPrefWidth(30);
             preview.textProperty().bindBidirectional(prop, new StringConverter<Number>() {
@@ -355,7 +364,7 @@
     }
 
     private class StringPropertyController extends PropertyController {
-        
+
         public StringPropertyController(PlaygroundProperty playgroundProperty, Object object, Property<String> prop) {
             super(playgroundProperty);
             TextField textField = new TextField();
@@ -368,14 +377,14 @@
 
         public ColorPropertyController(PlaygroundProperty playgroundProperty, Object object, final Property<Paint> prop) {
             super(playgroundProperty);
-            
+
             final Rectangle colorRect = new Rectangle(20, 20, (Color) prop.getValue());
             colorRect.setStroke(Color.GRAY);
             final Label valueLabel = new Label(formatWebColor((Color) prop.getValue()));
             valueLabel.setGraphic(colorRect);
             valueLabel.setContentDisplay(ContentDisplay.LEFT);
             setPreview(valueLabel);
-            
+
             final SimpleHSBColorPicker colorPicker = new SimpleHSBColorPicker();
             colorPicker.getColor().addListener(new InvalidationListener() {
                 @Override
@@ -388,7 +397,7 @@
             });
             setController(colorPicker);
         }
-    
+
         private String formatWebColor(Color c) {
             String r = Integer.toHexString((int) (c.getRed() * 255));
             if (r.length() == 1) {
@@ -405,12 +414,12 @@
             return "#" + r + g + b;
         }
     }
-    
+
     private class EnumPropertyController extends PropertyController {
-        
+
         public EnumPropertyController(PlaygroundProperty playgroundProperty, Object object, Property prop, final Enum enumeration) {
             super(playgroundProperty);
-            
+
             final ChoiceBox choiceBox = new ChoiceBox();
             choiceBox.setItems(FXCollections.observableArrayList(enumeration.getClass().getEnumConstants()));
             choiceBox.getSelectionModel().select(prop.getValue());
@@ -423,7 +432,7 @@
 
         public StrokeDashArrayPropertyController(final PlaygroundProperty playgroundProperty, Object object, final ObservableList<Double> list) {
             super(playgroundProperty, "strokeDashArray");
-            
+
             final ComboBox<ObservableList<Double>> comboBox = new ComboBox<>();
             comboBox.setEditable(true);
             comboBox.setItems(FXCollections.observableArrayList(
@@ -431,7 +440,7 @@
                     FXCollections.<Double>observableArrayList(0d, 20d),
                     FXCollections.<Double>observableArrayList(20d, 20d),
                     FXCollections.<Double>observableArrayList(30d, 15d, 0d, 15d)
-                    ));
+            ));
             comboBox.setConverter(new StringConverter<ObservableList<Double>>() {
                 @Override public String toString(ObservableList<Double> t) {
                     if (t == null || t.isEmpty()) {
@@ -473,7 +482,7 @@
                 @Override public void changed(ObservableValue ov, Object t, Object key) {
                     ObservableList<Double> value = comboBox.getValue();
                     list.setAll(value);
-                    
+
                     if (value != null && !value.isEmpty() && comboBox.getItems().indexOf(value) == -1) {
                         comboBox.getItems().add(value);
                     }
--- a/apps/samples/Ensemble8/src/app/java/ensemble/search/IndexSearcher.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/search/IndexSearcher.java	Mon Dec 02 21:25:39 2013 -0800
@@ -109,16 +109,19 @@
                         * just 5 results, but we search for 10 and filter out unsupported
                         * samples and show just 5.
                         */
-                        // If result is a sample, check if supported sample exists before adding so it's
-                        // either not sample or it is a supported sample
-                        if (!result.getDocumentType().name().equals(DocumentType.SAMPLE.name())
-                                || Samples.ROOT.sampleForPath(result.getEnsemblePath().substring(9).trim()) != null) {
-                            results.add(result);
+                        if (docType == DocumentType.SAMPLE) {
+                            if (Samples.ROOT.sampleForPath(result.getEnsemblePath().substring(9).trim()) == null) {
+                                
+                                // Skip unsupported (not existing) samples
+                                continue;
+                            }
                             if (results.size() == 5) {
+                                
                                 // 5 samples is enough
                                 break;
                             }
                         }
+                        results.add(result);
                     } 
                 }
                 resultMap.put(docType, results);
@@ -131,6 +134,8 @@
 
     /**
      * Simple command line test application
+     * @param args command line arguments
+     * @throws Exception for maps errors
      */
     public static void main(String[] args) throws Exception {
         BufferedReader in = new BufferedReader(new InputStreamReader(System.in, "UTF-8"));
--- a/apps/samples/Ensemble8/src/app/java/ensemble/util/FeatureChecker.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/app/java/ensemble/util/FeatureChecker.java	Mon Dec 02 21:25:39 2013 -0800
@@ -32,6 +32,7 @@
 package ensemble.util;
 
 import ensemble.PlatformFeatures;
+import ensemble.SampleCategory;
 import ensemble.SampleInfo;
 import java.util.ArrayList;
 import java.util.List;
@@ -56,13 +57,29 @@
 
     public static SampleInfo[] filterSamples(SampleInfo[] samples) {
         if (samples != null) {
-            List filteredSampleInfos = new ArrayList<>();
+            List<SampleInfo> filteredSampleInfos = new ArrayList<>();
             for (SampleInfo oneSampleInfo : samples) {
                 if (isSampleSupported(oneSampleInfo)) {
                     filteredSampleInfos.add(oneSampleInfo);
                 }
             }
-            return (SampleInfo[]) filteredSampleInfos.toArray(new SampleInfo[0]);
+            return filteredSampleInfos.toArray(new SampleInfo[filteredSampleInfos.size()]);
+        } else {
+            return null;
+        }
+    }
+
+    public static SampleCategory[] filterEmptyCategories(SampleCategory[] subCategories) {
+        if (subCategories != null) {
+            List<SampleCategory> filteredSubcategories = new ArrayList<>();
+            for (SampleCategory subCategory : subCategories) {
+                if (subCategory.samples != null && subCategory.samples.length > 0 
+                        || subCategory.samplesAll != null && subCategory.samplesAll.length > 0) {
+                    filteredSubcategories.add(subCategory);
+                }
+                
+            }
+            return filteredSubcategories.toArray(new SampleCategory[filteredSubcategories.size()]);
         } else {
             return null;
         }
--- a/apps/samples/Ensemble8/src/generated/java/ensemble/generated/Samples.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/generated/java/ensemble/generated/Samples.java	Mon Dec 02 21:25:39 2013 -0800
@@ -1,325 +1,331 @@
-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[]{},true);
-    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[]{},true);
-    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[]{},false);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},false);
-    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.animation.AnimationTimer","javafx.scene.paint.RadialGradient","javafx.scene.effect.BlendMode","javafx.scene.canvas.GraphicsContext","javafx.scene.effect.Reflection","javafx.scene.image.ImageView","javafx.scene.layout.Pane","javafx.scene.paint.Color","javafx.scene.paint.Paint","javafx.scene.paint.CycleMethod","javafx.scene.paint.Stop",},new String[]{},new String[]{},"/ensemble/samples/canvas/fireworks/FireworksApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    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[]{},false);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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,},false);
-    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[]{},true);
-    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[]{},true);
-    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[]{},false);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},false);
-    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[]{},true);
-    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[]{},false);
-    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[]{},false);
-    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[]{},true);
-    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[]{},false);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},false);
-    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[]{},false);
-    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[]{},true);
-    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[]{},false);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},false);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},true);
-    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[]{},false);
-    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",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/controls/text/insettext/InsetTextApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
-    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[]{},false);
-    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[]{},true);
-    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[]{},true);
-    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[]{},false);
-    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[]{},false);
-    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[]{},true);
-    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[]{},false);
-    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[]{},true);
-    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[]{},false);
-    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[]{},true);
-    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[]{},false);
-    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[]{},false);
-    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[]{},false);
-    private static final SampleInfo SAMPLE_74 = new SampleInfo("Speed Gauge","A sample that demonstrates a simple gauge. ","/Graphics/Speed Gauge","/ensemble/samples/graphics/gauge","ensemble.samples.graphics.gauge.SpeedGaugeApp","/ensemble/samples/graphics/gauge/preview.png",new String[]{"/ensemble/samples/shared-resources/gaugeBackground.png","/ensemble/samples/shared-resources/needle.png","/ensemble/samples/graphics/gauge/SpeedGaugeApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics/gauge/SpeedGaugeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
-    private static final SampleInfo SAMPLE_75 = 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[]{},false);
-    private static final SampleInfo SAMPLE_76 = 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[]{},false);
-    private static final SampleInfo SAMPLE_77 = 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","spread","min","0","max","1","name","Drop Shadow Spread"),new PlaygroundProperty("dropShadow","color","name","Drop Shadow Color"),},new ConditionalFeature[]{},false);
-    private static final SampleInfo SAMPLE_78 = 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[]{},false);
-    private static final SampleInfo SAMPLE_79 = 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[]{},false);
-    private static final SampleInfo SAMPLE_80 = 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[]{},false);
-    private static final SampleInfo SAMPLE_81 = 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[]{},false);
-    private static final SampleInfo SAMPLE_82 = 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[]{},false);
-    private static final SampleInfo SAMPLE_83 = 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[]{},false);
-    private static final SampleInfo SAMPLE_84 = 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[]{},false);
-    private static final SampleInfo SAMPLE_85 = 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[]{},false);
-    private static final SampleInfo SAMPLE_86 = 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[]{},false);
-    private static final SampleInfo SAMPLE_87 = 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[]{},false);
-    private static final SampleInfo SAMPLE_88 = 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[]{},true);
-    private static final SampleInfo SAMPLE_89 = 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[]{},true);
-    private static final SampleInfo SAMPLE_90 = 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[]{},true);
-    private static final SampleInfo SAMPLE_91 = 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[]{},true);
-    private static final SampleInfo SAMPLE_92 = 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[]{},true);
-    private static final SampleInfo SAMPLE_93 = 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[]{},true);
-    private static final SampleInfo SAMPLE_94 = 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[]{},true);
-    private static final SampleInfo SAMPLE_95 = 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[]{},true);
-    private static final SampleInfo SAMPLE_96 = 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[]{},true);
-    private static final SampleInfo SAMPLE_97 = 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[]{},true);
-    private static final SampleInfo SAMPLE_98 = 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,},false);
-    private static final SampleInfo SAMPLE_99 = 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",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cubesystem/CubeSystemApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
-    private static final SampleInfo SAMPLE_100 = 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,},false);
-    private static final SampleInfo SAMPLE_101 = 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.SubScene",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/xylophone/XylophoneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
-    private static final SampleInfo SAMPLE_102 = 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[]{},false);
-    private static final SampleInfo SAMPLE_103 = 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[]{},false);
-    private static final SampleInfo SAMPLE_104 = 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[]{},false);
-    private static final SampleInfo SAMPLE_105 = 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[]{},true);
-    private static final SampleInfo SAMPLE_106 = 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[]{},true);
-    private static final SampleInfo SAMPLE_107 = 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[]{},true);
-    private static final SampleInfo SAMPLE_108 = 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[]{},true);
-    private static final SampleInfo SAMPLE_109 = 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[]{},true);
-    private static final SampleInfo SAMPLE_110 = 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[]{},true);
-    private static final SampleInfo SAMPLE_111 = 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[]{},true);
-    private static final SampleInfo SAMPLE_112 = 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[]{},true);
-    private static final SampleInfo SAMPLE_113 = 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,},false);
-    private static final SampleInfo SAMPLE_114 = 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,},false);
-    private static final SampleInfo SAMPLE_115 = 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,},false);
-    private static final SampleInfo SAMPLE_116 = 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,},false);
-    private static final SampleInfo SAMPLE_117 = 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,},false);
-    private static final SampleInfo SAMPLE_118 = 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[]{},false);
-    private static final SampleInfo SAMPLE_119 = 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[]{},true);
-    private static final SampleInfo SAMPLE_120 = 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[]{},false);
-    private static final SampleInfo SAMPLE_121 = 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[]{},false);
-    private static final SampleInfo SAMPLE_122 = 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[]{},false);
-    private static final SampleInfo SAMPLE_123 = 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,},true);
-    private static final SampleInfo SAMPLE_124 = 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[]{},true);
-    private static final SampleInfo SAMPLE_125 = 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[]{},true);
-    private static final SampleInfo SAMPLE_126 = 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[]{},false);
-    private static final SampleInfo SAMPLE_127 = 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[]{},false);
-    private static final SampleInfo SAMPLE_128 = 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[]{},false);
-    private static final SampleInfo SAMPLE_129 = 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[]{},true);
-    private static final SampleInfo SAMPLE_130 = 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[]{},true);
-    private static final SampleInfo SAMPLE_131 = 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,},false);
-    private static final SampleInfo SAMPLE_132 = 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,},false);
-    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,SAMPLE_76,},new SampleInfo[]{SAMPLE_68,SAMPLE_69,SAMPLE_70,SAMPLE_71,SAMPLE_72,SAMPLE_73,SAMPLE_77,SAMPLE_78,SAMPLE_79,SAMPLE_80,SAMPLE_81,SAMPLE_74,SAMPLE_82,SAMPLE_83,SAMPLE_84,SAMPLE_85,SAMPLE_86,SAMPLE_87,SAMPLE_75,SAMPLE_88,SAMPLE_89,SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,SAMPLE_94,SAMPLE_95,SAMPLE_96,SAMPLE_97,SAMPLE_76,},new SampleCategory[]{new SampleCategory("Effects",new SampleInfo[]{SAMPLE_77,SAMPLE_78,SAMPLE_79,SAMPLE_80,SAMPLE_81,},null,null),new SampleCategory("Images",new SampleInfo[]{SAMPLE_82,SAMPLE_83,SAMPLE_84,},null,null),new SampleCategory("Paints",new SampleInfo[]{SAMPLE_85,SAMPLE_86,SAMPLE_87,},null,null),new SampleCategory("Shapes",new SampleInfo[]{SAMPLE_88,SAMPLE_89,SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,SAMPLE_94,SAMPLE_95,SAMPLE_96,SAMPLE_97,},null,null),}),new SampleCategory("Graphics 3d",new SampleInfo[]{SAMPLE_98,SAMPLE_99,SAMPLE_100,SAMPLE_101,},new SampleInfo[]{SAMPLE_98,SAMPLE_99,SAMPLE_100,SAMPLE_101,},null),new SampleCategory("Language",null,new SampleInfo[]{SAMPLE_102,SAMPLE_103,SAMPLE_104,},new SampleCategory[]{new SampleCategory("Beans",new SampleInfo[]{SAMPLE_102,SAMPLE_103,},null,null),new SampleCategory("Collections",new SampleInfo[]{SAMPLE_104,},null,null),}),new SampleCategory("Layout",new SampleInfo[]{SAMPLE_105,SAMPLE_106,SAMPLE_107,SAMPLE_108,SAMPLE_109,SAMPLE_110,SAMPLE_111,SAMPLE_112,},new SampleInfo[]{SAMPLE_105,SAMPLE_106,SAMPLE_107,SAMPLE_108,SAMPLE_109,SAMPLE_110,SAMPLE_111,SAMPLE_112,},null),new SampleCategory("Media",new SampleInfo[]{SAMPLE_113,SAMPLE_114,SAMPLE_115,SAMPLE_116,SAMPLE_117,},new SampleInfo[]{SAMPLE_113,SAMPLE_114,SAMPLE_115,SAMPLE_116,SAMPLE_117,},null),new SampleCategory("Scenegraph",null,new SampleInfo[]{SAMPLE_118,SAMPLE_119,SAMPLE_120,SAMPLE_121,SAMPLE_122,SAMPLE_123,SAMPLE_124,SAMPLE_125,SAMPLE_126,SAMPLE_127,},new SampleCategory[]{new SampleCategory("Events",new SampleInfo[]{SAMPLE_118,SAMPLE_119,SAMPLE_120,SAMPLE_121,SAMPLE_122,SAMPLE_123,},null,null),new SampleCategory("Node",new SampleInfo[]{SAMPLE_124,SAMPLE_125,},null,null),new SampleCategory("Stage",new SampleInfo[]{SAMPLE_126,SAMPLE_127,},null,null),}),new SampleCategory("Swing",new SampleInfo[]{SAMPLE_128,},new SampleInfo[]{SAMPLE_128,},null),new SampleCategory("Text",new SampleInfo[]{SAMPLE_129,SAMPLE_130,},new SampleInfo[]{SAMPLE_129,SAMPLE_130,},null),new SampleCategory("Web",new SampleInfo[]{SAMPLE_131,SAMPLE_132,},new SampleInfo[]{SAMPLE_131,SAMPLE_132,},null),});
-    public static final SampleInfo[] HIGHLIGHTS = new SampleInfo[]{SAMPLE_24,SAMPLE_115,};
-    private static final HashMap<String,SampleInfo[]> DOCS_URL_TO_SAMPLE = new HashMap<String,SampleInfo[]>(177);
-    static {
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurveTo",new SampleInfo[]{SAMPLE_93,});
-        DOCS_URL_TO_SAMPLE.put("javafx.stage.StageStyle",new SampleInfo[]{SAMPLE_126,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Rotate",new SampleInfo[]{SAMPLE_101,SAMPLE_100,SAMPLE_99,SAMPLE_76,SAMPLE_98,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.StackPane",new SampleInfo[]{SAMPLE_110,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Transition",new SampleInfo[]{SAMPLE_9,SAMPLE_7,SAMPLE_8,SAMPLE_5,SAMPLE_6,SAMPLE_3,SAMPLE_4,SAMPLE_12,SAMPLE_11,SAMPLE_10,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedAreaChart",new SampleInfo[]{SAMPLE_17,});
-        DOCS_URL_TO_SAMPLE.put("javafx.application.Application",new SampleInfo[]{SAMPLE_70,SAMPLE_69,SAMPLE_128,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Animation.Status",new SampleInfo[]{SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Line",new SampleInfo[]{SAMPLE_92,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TabPane",new SampleInfo[]{SAMPLE_56,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Shear",new SampleInfo[]{SAMPLE_72,});
-        DOCS_URL_TO_SAMPLE.put("javafx.collections.ListChangeListener",new SampleInfo[]{SAMPLE_104,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.FontPosture",new SampleInfo[]{SAMPLE_130,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableCell",new SampleInfo[]{SAMPLE_47,});
-        DOCS_URL_TO_SAMPLE.put("java.util.Map",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SelectionModel",new SampleInfo[]{SAMPLE_54,SAMPLE_53,SAMPLE_52,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.MoveTo",new SampleInfo[]{SAMPLE_93,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.DatePicker",new SampleInfo[]{SAMPLE_38,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Circle",new SampleInfo[]{SAMPLE_71,SAMPLE_68,SAMPLE_89,SAMPLE_76,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.GaussianBlur",new SampleInfo[]{SAMPLE_78,SAMPLE_76,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.SepiaTone",new SampleInfo[]{SAMPLE_81,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SplitPane",new SampleInfo[]{SAMPLE_55,});
-        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Rectangle2D",new SampleInfo[]{SAMPLE_69,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.GraphicsContext",new SampleInfo[]{SAMPLE_13,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Translate",new SampleInfo[]{SAMPLE_100,SAMPLE_98,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Timeline",new SampleInfo[]{SAMPLE_71,SAMPLE_69,SAMPLE_68,SAMPLE_1,SAMPLE_2,SAMPLE_0,SAMPLE_30,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.Canvas",new SampleInfo[]{SAMPLE_13,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Rectangle",new SampleInfo[]{SAMPLE_70,SAMPLE_68,SAMPLE_76,SAMPLE_97,});
-        DOCS_URL_TO_SAMPLE.put("javafx.stage.Screen",new SampleInfo[]{SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyEvent",new SampleInfo[]{SAMPLE_70,SAMPLE_73,SAMPLE_121,SAMPLE_120,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.DateCell",new SampleInfo[]{SAMPLE_38,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Group",new SampleInfo[]{SAMPLE_71,SAMPLE_70,SAMPLE_68,SAMPLE_76,});
-        DOCS_URL_TO_SAMPLE.put("javafx.application.Platform",new SampleInfo[]{SAMPLE_126,SAMPLE_69,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.AnimationTimer",new SampleInfo[]{SAMPLE_13,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Reflection",new SampleInfo[]{SAMPLE_80,SAMPLE_13,SAMPLE_68,SAMPLE_73,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.PieChart",new SampleInfo[]{SAMPLE_29,SAMPLE_28,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BubbleChart",new SampleInfo[]{SAMPLE_23,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.Interpolator",new SampleInfo[]{SAMPLE_68,SAMPLE_0,SAMPLE_121,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.FlowPane",new SampleInfo[]{SAMPLE_107,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.TilePane",new SampleInfo[]{SAMPLE_111,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioSpectrumListener",new SampleInfo[]{SAMPLE_18,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.RadioButton",new SampleInfo[]{SAMPLE_44,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.TranslateTransition",new SampleInfo[]{SAMPLE_12,});
-        DOCS_URL_TO_SAMPLE.put("javafx.collections.ObservableList",new SampleInfo[]{SAMPLE_119,SAMPLE_105,SAMPLE_104,SAMPLE_69,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.BorderPane",new SampleInfo[]{SAMPLE_106,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Hyperlink",new SampleInfo[]{SAMPLE_39,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.SubScene",new SampleInfo[]{SAMPLE_101,SAMPLE_98,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Path",new SampleInfo[]{SAMPLE_93,SAMPLE_75,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.cell.TextFieldTreeTableCell",new SampleInfo[]{SAMPLE_47,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurve",new SampleInfo[]{SAMPLE_90,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurveTo",new SampleInfo[]{SAMPLE_93,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.PathTransition",new SampleInfo[]{SAMPLE_6,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeItem",new SampleInfo[]{SAMPLE_47,});
-        DOCS_URL_TO_SAMPLE.put("javafx.collections.FXCollections",new SampleInfo[]{SAMPLE_104,SAMPLE_33,SAMPLE_32,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextFlow",new SampleInfo[]{SAMPLE_129,SAMPLE_130,});
-        DOCS_URL_TO_SAMPLE.put("java.util.ArrayList",new SampleInfo[]{SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.PerspectiveCamera",new SampleInfo[]{SAMPLE_101,SAMPLE_98,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableView",new SampleInfo[]{SAMPLE_47,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.FadeTransition",new SampleInfo[]{SAMPLE_3,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressBar",new SampleInfo[]{SAMPLE_42,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.RadialGradient",new SampleInfo[]{SAMPLE_13,SAMPLE_68,SAMPLE_87,});
-        DOCS_URL_TO_SAMPLE.put("javafx.fxml.FXMLLoader",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Light",new SampleInfo[]{SAMPLE_76,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextAlignment",new SampleInfo[]{SAMPLE_76,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.GridPane",new SampleInfo[]{SAMPLE_108,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Color",new SampleInfo[]{SAMPLE_93,SAMPLE_70,SAMPLE_92,SAMPLE_91,SAMPLE_90,SAMPLE_13,SAMPLE_68,SAMPLE_101,SAMPLE_89,SAMPLE_100,SAMPLE_88,SAMPLE_99,SAMPLE_87,SAMPLE_98,SAMPLE_86,SAMPLE_97,SAMPLE_85,SAMPLE_96,SAMPLE_95,SAMPLE_94,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.InnerShadow",new SampleInfo[]{SAMPLE_79,});
-        DOCS_URL_TO_SAMPLE.put("http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm",new SampleInfo[]{SAMPLE_19,SAMPLE_17,SAMPLE_16,SAMPLE_27,SAMPLE_15,SAMPLE_26,SAMPLE_14,SAMPLE_25,SAMPLE_24,SAMPLE_31,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToolBar",new SampleInfo[]{SAMPLE_66,SAMPLE_65,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.StrokeTransition",new SampleInfo[]{SAMPLE_11,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Node",new SampleInfo[]{SAMPLE_68,SAMPLE_125,SAMPLE_124,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.CheckBox",new SampleInfo[]{SAMPLE_35,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Menu",new SampleInfo[]{SAMPLE_40,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Cursor",new SampleInfo[]{SAMPLE_119,SAMPLE_118,SAMPLE_122,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Tab",new SampleInfo[]{SAMPLE_56,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.ImageView",new SampleInfo[]{SAMPLE_82,SAMPLE_69,SAMPLE_13,SAMPLE_76,SAMPLE_75,SAMPLE_74,SAMPLE_84,SAMPLE_83,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.SequentialTransition",new SampleInfo[]{SAMPLE_10,SAMPLE_30,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ObservableValue",new SampleInfo[]{SAMPLE_102,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.Image",new SampleInfo[]{SAMPLE_82,SAMPLE_69,SAMPLE_76,SAMPLE_75,SAMPLE_74,SAMPLE_84,SAMPLE_83,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Shape",new SampleInfo[]{SAMPLE_93,SAMPLE_92,SAMPLE_91,SAMPLE_90,SAMPLE_89,SAMPLE_88,SAMPLE_87,SAMPLE_86,SAMPLE_97,SAMPLE_85,SAMPLE_96,SAMPLE_95,SAMPLE_94,});
-        DOCS_URL_TO_SAMPLE.put("javafx.event.EventHandler",new SampleInfo[]{SAMPLE_70,SAMPLE_119,SAMPLE_29,SAMPLE_68,SAMPLE_123,SAMPLE_122,SAMPLE_2,SAMPLE_120,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Button",new SampleInfo[]{SAMPLE_49,SAMPLE_68,SAMPLE_75,SAMPLE_50,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ClosePath",new SampleInfo[]{SAMPLE_93,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.binding.StringBinding",new SampleInfo[]{SAMPLE_103,});
-        DOCS_URL_TO_SAMPLE.put("javafx.fxml.Initializable",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.CycleMethod",new SampleInfo[]{SAMPLE_70,SAMPLE_13,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Glow",new SampleInfo[]{SAMPLE_72,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.LineTo",new SampleInfo[]{SAMPLE_93,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ArcTo",new SampleInfo[]{SAMPLE_93,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.LinearGradient",new SampleInfo[]{SAMPLE_71,SAMPLE_70,SAMPLE_86,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.XYChart",new SampleInfo[]{SAMPLE_18,SAMPLE_14,SAMPLE_128,SAMPLE_24,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.VBox",new SampleInfo[]{SAMPLE_112,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.InvalidationListener",new SampleInfo[]{SAMPLE_102,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BlendMode",new SampleInfo[]{SAMPLE_71,SAMPLE_13,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Parent",new SampleInfo[]{SAMPLE_70,SAMPLE_68,SAMPLE_124,});
-        DOCS_URL_TO_SAMPLE.put("javafx.concurrent.Task",new SampleInfo[]{SAMPLE_33,SAMPLE_32,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.RotateEvent",new SampleInfo[]{SAMPLE_119,SAMPLE_123,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableView",new SampleInfo[]{SAMPLE_58,SAMPLE_57,SAMPLE_33,SAMPLE_32,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.Pane",new SampleInfo[]{SAMPLE_13,SAMPLE_75,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.HBox",new SampleInfo[]{SAMPLE_109,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TextField",new SampleInfo[]{SAMPLE_103,SAMPLE_64,SAMPLE_63,SAMPLE_61,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuItem",new SampleInfo[]{SAMPLE_40,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Stop",new SampleInfo[]{SAMPLE_70,SAMPLE_13,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.fxml.JavaFXBuilderFactory",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Ellipse",new SampleInfo[]{SAMPLE_91,SAMPLE_76,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Font",new SampleInfo[]{SAMPLE_70,SAMPLE_76,SAMPLE_130,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.Chart",new SampleInfo[]{SAMPLE_18,SAMPLE_14,SAMPLE_128,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BarChart",new SampleInfo[]{SAMPLE_19,SAMPLE_18,SAMPLE_128,SAMPLE_21,SAMPLE_20,});
-        DOCS_URL_TO_SAMPLE.put("javafx.concurrent.Service",new SampleInfo[]{SAMPLE_32,});
-        DOCS_URL_TO_SAMPLE.put("java.util.logging.Logger",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeView",new SampleInfo[]{SAMPLE_48,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.FillTransition",new SampleInfo[]{SAMPLE_4,});
-        DOCS_URL_TO_SAMPLE.put("javafx.fxml.FXML",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Text",new SampleInfo[]{SAMPLE_70,SAMPLE_129,SAMPLE_68,SAMPLE_76,SAMPLE_130,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Accordion",new SampleInfo[]{SAMPLE_34,});
-        DOCS_URL_TO_SAMPLE.put("javafx.util.Duration",new SampleInfo[]{SAMPLE_69,SAMPLE_68,SAMPLE_1,SAMPLE_2,SAMPLE_76,SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.ScaleTransition",new SampleInfo[]{SAMPLE_9,});
-        DOCS_URL_TO_SAMPLE.put("java.util.List",new SampleInfo[]{SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.PauseTransition",new SampleInfo[]{SAMPLE_7,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToggleButton",new SampleInfo[]{SAMPLE_46,SAMPLE_51,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Paint",new SampleInfo[]{SAMPLE_13,SAMPLE_87,SAMPLE_86,SAMPLE_85,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.AnchorPane",new SampleInfo[]{SAMPLE_105,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.GestureEvent",new SampleInfo[]{SAMPLE_119,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.AreaChart",new SampleInfo[]{SAMPLE_16,SAMPLE_15,SAMPLE_14,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.NumberAxis",new SampleInfo[]{SAMPLE_128,SAMPLE_19,SAMPLE_18,SAMPLE_17,SAMPLE_16,SAMPLE_27,SAMPLE_15,SAMPLE_26,SAMPLE_14,SAMPLE_25,SAMPLE_24,SAMPLE_23,SAMPLE_22,SAMPLE_21,SAMPLE_20,SAMPLE_31,SAMPLE_30,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Effect",new SampleInfo[]{SAMPLE_81,SAMPLE_80,SAMPLE_79,SAMPLE_78,SAMPLE_77,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.Media",new SampleInfo[]{SAMPLE_18,SAMPLE_116,SAMPLE_14,SAMPLE_117,SAMPLE_114,SAMPLE_113,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextBoundsType",new SampleInfo[]{SAMPLE_76,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Pagination",new SampleInfo[]{SAMPLE_41,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurve",new SampleInfo[]{SAMPLE_96,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.Scene",new SampleInfo[]{SAMPLE_70,SAMPLE_127,SAMPLE_126,SAMPLE_128,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebEngine",new SampleInfo[]{SAMPLE_128,SAMPLE_132,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ListView",new SampleInfo[]{SAMPLE_54,SAMPLE_53,SAMPLE_52,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedBarChart",new SampleInfo[]{SAMPLE_22,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.PerspectiveTransform",new SampleInfo[]{SAMPLE_73,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Lighting",new SampleInfo[]{SAMPLE_76,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioClip",new SampleInfo[]{SAMPLE_115,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.MouseEvent",new SampleInfo[]{SAMPLE_70,SAMPLE_29,SAMPLE_68,SAMPLE_123,SAMPLE_122,SAMPLE_75,SAMPLE_73,});
-        DOCS_URL_TO_SAMPLE.put("java.util.HashMap",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polygon",new SampleInfo[]{SAMPLE_72,SAMPLE_94,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.SwipeEvent",new SampleInfo[]{SAMPLE_119,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polyline",new SampleInfo[]{SAMPLE_95,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableColumn",new SampleInfo[]{SAMPLE_58,SAMPLE_57,SAMPLE_33,SAMPLE_32,});
-        DOCS_URL_TO_SAMPLE.put("java.util.logging.Level",new SampleInfo[]{SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.LineChart",new SampleInfo[]{SAMPLE_27,SAMPLE_26,SAMPLE_25,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.ScatterChart",new SampleInfo[]{SAMPLE_31,SAMPLE_30,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableCell",new SampleInfo[]{SAMPLE_57,});
-        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Insets",new SampleInfo[]{SAMPLE_60,SAMPLE_68,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BoxBlur",new SampleInfo[]{SAMPLE_71,});
-        DOCS_URL_TO_SAMPLE.put("javafx.geometry.VPos",new SampleInfo[]{SAMPLE_70,SAMPLE_69,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.ZoomEvent",new SampleInfo[]{SAMPLE_119,SAMPLE_123,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyValue",new SampleInfo[]{SAMPLE_69,SAMPLE_68,SAMPLE_1,SAMPLE_2,SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.MediaPlayer",new SampleInfo[]{SAMPLE_18,SAMPLE_116,SAMPLE_14,SAMPLE_117,SAMPLE_114,SAMPLE_113,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.RotateTransition",new SampleInfo[]{SAMPLE_8,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ColorPicker",new SampleInfo[]{SAMPLE_37,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressIndicator",new SampleInfo[]{SAMPLE_33,SAMPLE_32,SAMPLE_43,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyCode",new SampleInfo[]{SAMPLE_120,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebView",new SampleInfo[]{SAMPLE_128,SAMPLE_132,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyFrame",new SampleInfo[]{SAMPLE_69,SAMPLE_68,SAMPLE_1,SAMPLE_2,SAMPLE_0,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuBar",new SampleInfo[]{SAMPLE_40,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Label",new SampleInfo[]{SAMPLE_59,SAMPLE_103,SAMPLE_62,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableRow",new SampleInfo[]{SAMPLE_58,SAMPLE_57,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TablePosition",new SampleInfo[]{SAMPLE_58,SAMPLE_57,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.CategoryAxis",new SampleInfo[]{SAMPLE_19,SAMPLE_18,SAMPLE_25,SAMPLE_128,SAMPLE_22,SAMPLE_21,SAMPLE_20,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.VLineTo",new SampleInfo[]{SAMPLE_93,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.ScrollEvent",new SampleInfo[]{SAMPLE_119,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.DropShadow",new SampleInfo[]{SAMPLE_77,SAMPLE_76,SAMPLE_75,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ChoiceBox",new SampleInfo[]{SAMPLE_36,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.HLineTo",new SampleInfo[]{SAMPLE_93,});
-        DOCS_URL_TO_SAMPLE.put("javafx.animation.ParallelTransition",new SampleInfo[]{SAMPLE_5,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableColumn",new SampleInfo[]{SAMPLE_47,});
-        DOCS_URL_TO_SAMPLE.put("javafx.event.ActionEvent",new SampleInfo[]{SAMPLE_68,SAMPLE_2,});
-        DOCS_URL_TO_SAMPLE.put("javafx.stage.Stage",new SampleInfo[]{SAMPLE_70,SAMPLE_127,SAMPLE_126,SAMPLE_128,SAMPLE_68,SAMPLE_67,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.HTMLEditor",new SampleInfo[]{SAMPLE_131,});
-        DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ChangeListener",new SampleInfo[]{SAMPLE_104,SAMPLE_102,});
-        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ScrollBar",new SampleInfo[]{SAMPLE_45,SAMPLE_73,});
-        DOCS_URL_TO_SAMPLE.put("java.io.InputStream",new SampleInfo[]{SAMPLE_67,});
-    }
-    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[]{},true);
+    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[]{},true);
+    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[]{},false);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},false);
+    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.animation.AnimationTimer","javafx.scene.paint.RadialGradient","javafx.scene.effect.BlendMode","javafx.scene.canvas.GraphicsContext","javafx.scene.effect.Reflection","javafx.scene.image.ImageView","javafx.scene.layout.Pane","javafx.scene.paint.Color","javafx.scene.paint.Paint","javafx.scene.paint.CycleMethod","javafx.scene.paint.Stop",},new String[]{},new String[]{},"/ensemble/samples/canvas/fireworks/FireworksApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    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[]{},false);
+    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[]{},true);
+    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[]{},false);
+    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[]{},false);
+    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,},false);
+    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","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[]{},true);
+    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[]{},false);
+    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","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","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[]{},false);
+    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","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[]{},false);
+    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[]{},false);
+    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[]{},false);
+    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[]{},false);
+    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[]{},true);
+    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[]{},false);
+    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[]{},true);
+    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[]{},false);
+    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[]{},false);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},false);
+    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[]{},false);
+    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[]{},true);
+    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[]{},false);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},false);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},true);
+    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[]{},false);
+    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",},new String[]{},new String[]{"/Controls/Text/Simple Label",},"/ensemble/samples/controls/text/insettext/InsetTextApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},false);
+    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[]{},false);
+    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[]{},true);
+    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[]{},true);
+    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[]{},false);
+    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[]{},false);
+    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[]{},true);
+    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[]{},false);
+    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[]{},true);
+    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[]{},false);
+    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[]{},true);
+    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[]{},false);
+    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[]{},false);
+    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[]{},false);
+    private static final SampleInfo SAMPLE_74 = new SampleInfo("Speed Gauge","A sample that demonstrates a simple gauge. ","/Graphics/Speed Gauge","/ensemble/samples/graphics/gauge","ensemble.samples.graphics.gauge.SpeedGaugeApp","/ensemble/samples/graphics/gauge/preview.png",new String[]{"/ensemble/samples/shared-resources/gaugeBackground.png","/ensemble/samples/shared-resources/needle.png","/ensemble/samples/graphics/gauge/SpeedGaugeApp.java",},new String[]{"javafx.scene.image.Image","javafx.scene.image.ImageView",},new String[]{},new String[]{},"/ensemble/samples/graphics/gauge/SpeedGaugeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{},true);
+    private static final SampleInfo SAMPLE_75 = 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[]{},false);
+    private static final SampleInfo SAMPLE_76 = 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[]{},false);
+    private static final SampleInfo SAMPLE_77 = 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","spread","min","0","max","1","name","Drop Shadow Spread"),new PlaygroundProperty("dropShadow","color","name","Drop Shadow Color"),},new ConditionalFeature[]{},false);
+    private static final SampleInfo SAMPLE_78 = 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[]{},true);
+    private static final SampleInfo SAMPLE_79 = 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[]{},true);
+    private static final SampleInfo SAMPLE_80 = 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[]{},true);
+    private static final SampleInfo SAMPLE_81 = 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[]{},true);
+    private static final SampleInfo SAMPLE_82 = 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[]{},false);
+    private static final SampleInfo SAMPLE_83 = 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[]{},false);
+    private static final SampleInfo SAMPLE_84 = 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[]{},true);
+    private static final SampleInfo SAMPLE_85 = 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[]{},true);
+    private static final SampleInfo SAMPLE_86 = 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[]{},true);
+    private static final SampleInfo SAMPLE_87 = 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[]{},false);
+    private static final SampleInfo SAMPLE_88 = 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[]{},true);
+    private static final SampleInfo SAMPLE_89 = 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[]{},true);
+    private static final SampleInfo SAMPLE_90 = 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[]{},true);
+    private static final SampleInfo SAMPLE_91 = 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[]{},true);
+    private static final SampleInfo SAMPLE_92 = 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[]{},true);
+    private static final SampleInfo SAMPLE_93 = 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[]{},true);
+    private static final SampleInfo SAMPLE_94 = 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[]{},true);
+    private static final SampleInfo SAMPLE_95 = 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[]{},true);
+    private static final SampleInfo SAMPLE_96 = 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[]{},true);
+    private static final SampleInfo SAMPLE_97 = 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[]{},true);
+    private static final SampleInfo SAMPLE_98 = 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.shape.Box","javafx.scene.paint.PhongMaterial","javafx.scene.PerspectiveCamera","javafx.scene.SubScene","javafx.scene.SceneAntialiasing","javafx.scene.paint.Color","javafx.scene.transform.Rotate","javafx.scene.transform.Translate","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cube/CubeApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
+    private static final SampleInfo SAMPLE_99 = new SampleInfo("3D Sphere System","A sample that demonstrates an animated rotation of 3D spheres. ","/Graphics 3d/3D Sphere System","/ensemble/samples/graphics3d/cubesystem","ensemble.samples.graphics3d.cubesystem.SphereSystemApp","/ensemble/samples/graphics3d/cubesystem/preview.png",new String[]{"/ensemble/samples/graphics3d/cubesystem/SphereSystemApp.java","/ensemble/samples/graphics3d/cubesystem/Xform.java","/ensemble/samples/graphics3d/cubesystem/Xsphere.java",},new String[]{"javafx.scene.shape.Sphere","javafx.scene.paint.PhongMaterial","javafx.scene.transform.Rotate","javafx.scene.transform.Translate","javafx.scene.paint.Color","javafx.scene.PerspectiveCamera","javafx.scene.SubScene","javafx.scene.SceneAntialiasing","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Timeline","javafx.util.Duration",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/cubesystem/SphereSystemApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
+    private static final SampleInfo SAMPLE_100 = new SampleInfo("3D Box","A sample that shows a 3D box and uses a perspective camera for rendering the scene. Hint: Switch to Line draw mode to see how cullFace property works. ","/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.shape.Box","javafx.scene.PerspectiveCamera","javafx.scene.paint.PhongMaterial","javafx.scene.paint.Color","javafx.scene.transform.Rotate","javafx.scene.transform.Translate","javafx.scene.SceneAntialiasing","javafx.scene.SubScene",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/simple3dbox/Simple3DBoxApp.java",new PlaygroundProperty[]{new PlaygroundProperty("testBox","drawMode"),new PlaygroundProperty("testBox","cullFace"),new PlaygroundProperty("material","diffuseColor"),},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
+    private static final SampleInfo SAMPLE_101 = new SampleInfo("Xylophone","A sample that demonstrates a xylophone made of 3D cubes. It is animated and plays sounds when clicked. ","/Graphics 3d/Xylophone","/ensemble/samples/graphics3d/xylophone","ensemble.samples.graphics3d.xylophone.XylophoneApp","/ensemble/samples/graphics3d/xylophone/preview.png",new String[]{"/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.shape.Box","javafx.scene.paint.PhongMaterial","javafx.scene.media.AudioClip","javafx.scene.PerspectiveCamera","javafx.scene.transform.Rotate","javafx.scene.transform.Scale","javafx.animation.Timeline","javafx.animation.KeyFrame","javafx.animation.KeyValue","javafx.animation.Interpolator","javafx.scene.input.MouseEvent","javafx.event.EventHandler","javafx.util.Duration","javafx.scene.Group","javafx.scene.SceneAntialiasing","javafx.scene.SubScene",},new String[]{},new String[]{},"/ensemble/samples/graphics3d/xylophone/XylophoneApp.java",new PlaygroundProperty[]{},new ConditionalFeature[]{ConditionalFeature.SCENE3D,},false);
+    private static final SampleInfo SAMPLE_102 = 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[]{},true);
+    private static final SampleInfo SAMPLE_103 = 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[]{},true);
+    private static final SampleInfo SAMPLE_104 = 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[]{},true);
+    private static final SampleInfo SAMPLE_105 = 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[]{},true);
+    private static final SampleInfo SAMPLE_106 = 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[]{},true);
+    private static final SampleInfo SAMPLE_107 = 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[]{},true);
+    private static final SampleInfo SAMPLE_108 = 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[]{},true);
+    private static final SampleInfo SAMPLE_109 = 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[]{},true);
+    private static final SampleInfo SAMPLE_110 = 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[]{},true);
+    private static final SampleInfo SAMPLE_111 = 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[]{},true);
+    private static final SampleInfo SAMPLE_112 = 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[]{},true);
+    private static final SampleInfo SAMPLE_113 = 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,},false);
+    private static final SampleInfo SAMPLE_114 = 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,},false);
+    private static final SampleInfo SAMPLE_115 = 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,},false);
+    private static final SampleInfo SAMPLE_116 = 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,},false);
+    private static final SampleInfo SAMPLE_117 = 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,},false);
+    private static final SampleInfo SAMPLE_118 = 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[]{},false);
+    private static final SampleInfo SAMPLE_119 = 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[]{},true);
+    private static final SampleInfo SAMPLE_120 = 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[]{},true);
+    private static final SampleInfo SAMPLE_121 = 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[]{},false);
+    private static final SampleInfo SAMPLE_122 = 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[]{},false);
+    private static final SampleInfo SAMPLE_123 = 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,},true);
+    private static final SampleInfo SAMPLE_124 = 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[]{},true);
+    private static final SampleInfo SAMPLE_125 = 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[]{},false);
+    private static final SampleInfo SAMPLE_126 = 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[]{},false);
+    private static final SampleInfo SAMPLE_127 = 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[]{},false);
+    private static final SampleInfo SAMPLE_128 = 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[]{},false);
+    private static final SampleInfo SAMPLE_129 = 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[]{},true);
+    private static final SampleInfo SAMPLE_130 = 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[]{},true);
+    private static final SampleInfo SAMPLE_131 = 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,},false);
+    private static final SampleInfo SAMPLE_132 = 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,},false);
+    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,SAMPLE_76,},new SampleInfo[]{SAMPLE_68,SAMPLE_69,SAMPLE_70,SAMPLE_71,SAMPLE_72,SAMPLE_73,SAMPLE_77,SAMPLE_78,SAMPLE_79,SAMPLE_80,SAMPLE_81,SAMPLE_74,SAMPLE_82,SAMPLE_83,SAMPLE_84,SAMPLE_85,SAMPLE_86,SAMPLE_87,SAMPLE_75,SAMPLE_88,SAMPLE_89,SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,SAMPLE_94,SAMPLE_95,SAMPLE_96,SAMPLE_97,SAMPLE_76,},new SampleCategory[]{new SampleCategory("Effects",new SampleInfo[]{SAMPLE_77,SAMPLE_78,SAMPLE_79,SAMPLE_80,SAMPLE_81,},null,null),new SampleCategory("Images",new SampleInfo[]{SAMPLE_82,SAMPLE_83,SAMPLE_84,},null,null),new SampleCategory("Paints",new SampleInfo[]{SAMPLE_85,SAMPLE_86,SAMPLE_87,},null,null),new SampleCategory("Shapes",new SampleInfo[]{SAMPLE_88,SAMPLE_89,SAMPLE_90,SAMPLE_91,SAMPLE_92,SAMPLE_93,SAMPLE_94,SAMPLE_95,SAMPLE_96,SAMPLE_97,},null,null),}),new SampleCategory("Graphics 3d",new SampleInfo[]{SAMPLE_98,SAMPLE_99,SAMPLE_100,SAMPLE_101,},new SampleInfo[]{SAMPLE_98,SAMPLE_99,SAMPLE_100,SAMPLE_101,},null),new SampleCategory("Language",null,new SampleInfo[]{SAMPLE_102,SAMPLE_103,SAMPLE_104,},new SampleCategory[]{new SampleCategory("Beans",new SampleInfo[]{SAMPLE_102,SAMPLE_103,},null,null),new SampleCategory("Collections",new SampleInfo[]{SAMPLE_104,},null,null),}),new SampleCategory("Layout",new SampleInfo[]{SAMPLE_105,SAMPLE_106,SAMPLE_107,SAMPLE_108,SAMPLE_109,SAMPLE_110,SAMPLE_111,SAMPLE_112,},new SampleInfo[]{SAMPLE_105,SAMPLE_106,SAMPLE_107,SAMPLE_108,SAMPLE_109,SAMPLE_110,SAMPLE_111,SAMPLE_112,},null),new SampleCategory("Media",new SampleInfo[]{SAMPLE_113,SAMPLE_114,SAMPLE_115,SAMPLE_116,SAMPLE_117,},new SampleInfo[]{SAMPLE_113,SAMPLE_114,SAMPLE_115,SAMPLE_116,SAMPLE_117,},null),new SampleCategory("Scenegraph",null,new SampleInfo[]{SAMPLE_118,SAMPLE_119,SAMPLE_120,SAMPLE_121,SAMPLE_122,SAMPLE_123,SAMPLE_124,SAMPLE_125,SAMPLE_126,SAMPLE_127,},new SampleCategory[]{new SampleCategory("Events",new SampleInfo[]{SAMPLE_118,SAMPLE_119,SAMPLE_120,SAMPLE_121,SAMPLE_122,SAMPLE_123,},null,null),new SampleCategory("Node",new SampleInfo[]{SAMPLE_124,SAMPLE_125,},null,null),new SampleCategory("Stage",new SampleInfo[]{SAMPLE_126,SAMPLE_127,},null,null),}),new SampleCategory("Swing",new SampleInfo[]{SAMPLE_128,},new SampleInfo[]{SAMPLE_128,},null),new SampleCategory("Text",new SampleInfo[]{SAMPLE_129,SAMPLE_130,},new SampleInfo[]{SAMPLE_129,SAMPLE_130,},null),new SampleCategory("Web",new SampleInfo[]{SAMPLE_131,SAMPLE_132,},new SampleInfo[]{SAMPLE_131,SAMPLE_132,},null),});
+    public static final SampleInfo[] HIGHLIGHTS = new SampleInfo[]{SAMPLE_17,SAMPLE_24,SAMPLE_115,SAMPLE_130,};
+    private static final HashMap<String,SampleInfo[]> DOCS_URL_TO_SAMPLE = new HashMap<String,SampleInfo[]>(183);
+    static {
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurveTo",new SampleInfo[]{SAMPLE_93,});
+        DOCS_URL_TO_SAMPLE.put("javafx.stage.StageStyle",new SampleInfo[]{SAMPLE_126,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Rotate",new SampleInfo[]{SAMPLE_101,SAMPLE_100,SAMPLE_99,SAMPLE_76,SAMPLE_98,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.StackPane",new SampleInfo[]{SAMPLE_110,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Transition",new SampleInfo[]{SAMPLE_9,SAMPLE_7,SAMPLE_8,SAMPLE_5,SAMPLE_6,SAMPLE_3,SAMPLE_4,SAMPLE_12,SAMPLE_11,SAMPLE_10,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedAreaChart",new SampleInfo[]{SAMPLE_17,});
+        DOCS_URL_TO_SAMPLE.put("javafx.application.Application",new SampleInfo[]{SAMPLE_70,SAMPLE_69,SAMPLE_128,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Animation.Status",new SampleInfo[]{SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Line",new SampleInfo[]{SAMPLE_92,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TabPane",new SampleInfo[]{SAMPLE_56,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Shear",new SampleInfo[]{SAMPLE_72,});
+        DOCS_URL_TO_SAMPLE.put("javafx.collections.ListChangeListener",new SampleInfo[]{SAMPLE_104,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.FontPosture",new SampleInfo[]{SAMPLE_130,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableCell",new SampleInfo[]{SAMPLE_47,});
+        DOCS_URL_TO_SAMPLE.put("java.util.Map",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SelectionModel",new SampleInfo[]{SAMPLE_54,SAMPLE_53,SAMPLE_52,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.MoveTo",new SampleInfo[]{SAMPLE_93,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.DatePicker",new SampleInfo[]{SAMPLE_38,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Circle",new SampleInfo[]{SAMPLE_71,SAMPLE_68,SAMPLE_89,SAMPLE_76,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.GaussianBlur",new SampleInfo[]{SAMPLE_78,SAMPLE_76,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.SepiaTone",new SampleInfo[]{SAMPLE_81,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.SplitPane",new SampleInfo[]{SAMPLE_55,});
+        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Rectangle2D",new SampleInfo[]{SAMPLE_69,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.GraphicsContext",new SampleInfo[]{SAMPLE_13,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Translate",new SampleInfo[]{SAMPLE_100,SAMPLE_99,SAMPLE_98,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Timeline",new SampleInfo[]{SAMPLE_71,SAMPLE_69,SAMPLE_68,SAMPLE_101,SAMPLE_1,SAMPLE_99,SAMPLE_2,SAMPLE_98,SAMPLE_0,SAMPLE_30,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.canvas.Canvas",new SampleInfo[]{SAMPLE_13,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Rectangle",new SampleInfo[]{SAMPLE_70,SAMPLE_68,SAMPLE_76,SAMPLE_97,});
+        DOCS_URL_TO_SAMPLE.put("javafx.stage.Screen",new SampleInfo[]{SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyEvent",new SampleInfo[]{SAMPLE_70,SAMPLE_73,SAMPLE_121,SAMPLE_120,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.DateCell",new SampleInfo[]{SAMPLE_38,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Group",new SampleInfo[]{SAMPLE_71,SAMPLE_70,SAMPLE_68,SAMPLE_101,SAMPLE_76,});
+        DOCS_URL_TO_SAMPLE.put("javafx.application.Platform",new SampleInfo[]{SAMPLE_126,SAMPLE_69,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.AnimationTimer",new SampleInfo[]{SAMPLE_13,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Reflection",new SampleInfo[]{SAMPLE_80,SAMPLE_13,SAMPLE_68,SAMPLE_73,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.PieChart",new SampleInfo[]{SAMPLE_29,SAMPLE_28,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BubbleChart",new SampleInfo[]{SAMPLE_23,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Interpolator",new SampleInfo[]{SAMPLE_68,SAMPLE_101,SAMPLE_0,SAMPLE_121,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.PhongMaterial",new SampleInfo[]{SAMPLE_101,SAMPLE_100,SAMPLE_99,SAMPLE_98,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.FlowPane",new SampleInfo[]{SAMPLE_107,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.TilePane",new SampleInfo[]{SAMPLE_111,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioSpectrumListener",new SampleInfo[]{SAMPLE_18,SAMPLE_14,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.RadioButton",new SampleInfo[]{SAMPLE_44,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.TranslateTransition",new SampleInfo[]{SAMPLE_12,});
+        DOCS_URL_TO_SAMPLE.put("javafx.collections.ObservableList",new SampleInfo[]{SAMPLE_119,SAMPLE_105,SAMPLE_104,SAMPLE_69,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.BorderPane",new SampleInfo[]{SAMPLE_106,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Hyperlink",new SampleInfo[]{SAMPLE_39,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.SubScene",new SampleInfo[]{SAMPLE_101,SAMPLE_100,SAMPLE_99,SAMPLE_98,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Path",new SampleInfo[]{SAMPLE_93,SAMPLE_75,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.cell.TextFieldTreeTableCell",new SampleInfo[]{SAMPLE_47,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurve",new SampleInfo[]{SAMPLE_90,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.CubicCurveTo",new SampleInfo[]{SAMPLE_93,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.PathTransition",new SampleInfo[]{SAMPLE_6,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeItem",new SampleInfo[]{SAMPLE_47,});
+        DOCS_URL_TO_SAMPLE.put("javafx.collections.FXCollections",new SampleInfo[]{SAMPLE_104,SAMPLE_33,SAMPLE_32,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextFlow",new SampleInfo[]{SAMPLE_129,SAMPLE_130,});
+        DOCS_URL_TO_SAMPLE.put("java.util.ArrayList",new SampleInfo[]{SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.PerspectiveCamera",new SampleInfo[]{SAMPLE_101,SAMPLE_100,SAMPLE_99,SAMPLE_98,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableView",new SampleInfo[]{SAMPLE_47,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.FadeTransition",new SampleInfo[]{SAMPLE_3,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressBar",new SampleInfo[]{SAMPLE_42,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.RadialGradient",new SampleInfo[]{SAMPLE_13,SAMPLE_68,SAMPLE_87,});
+        DOCS_URL_TO_SAMPLE.put("javafx.fxml.FXMLLoader",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Light",new SampleInfo[]{SAMPLE_76,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextAlignment",new SampleInfo[]{SAMPLE_76,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.GridPane",new SampleInfo[]{SAMPLE_108,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Color",new SampleInfo[]{SAMPLE_93,SAMPLE_70,SAMPLE_92,SAMPLE_91,SAMPLE_90,SAMPLE_13,SAMPLE_68,SAMPLE_89,SAMPLE_100,SAMPLE_88,SAMPLE_99,SAMPLE_87,SAMPLE_98,SAMPLE_86,SAMPLE_97,SAMPLE_85,SAMPLE_96,SAMPLE_95,SAMPLE_94,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.InnerShadow",new SampleInfo[]{SAMPLE_79,});
+        DOCS_URL_TO_SAMPLE.put("http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm",new SampleInfo[]{SAMPLE_19,SAMPLE_17,SAMPLE_16,SAMPLE_27,SAMPLE_15,SAMPLE_26,SAMPLE_14,SAMPLE_25,SAMPLE_24,SAMPLE_31,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToolBar",new SampleInfo[]{SAMPLE_66,SAMPLE_65,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.StrokeTransition",new SampleInfo[]{SAMPLE_11,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Node",new SampleInfo[]{SAMPLE_68,SAMPLE_125,SAMPLE_124,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.CheckBox",new SampleInfo[]{SAMPLE_35,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Menu",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Cursor",new SampleInfo[]{SAMPLE_119,SAMPLE_118,SAMPLE_122,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Tab",new SampleInfo[]{SAMPLE_56,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.ImageView",new SampleInfo[]{SAMPLE_82,SAMPLE_69,SAMPLE_13,SAMPLE_76,SAMPLE_75,SAMPLE_74,SAMPLE_84,SAMPLE_83,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.SequentialTransition",new SampleInfo[]{SAMPLE_10,SAMPLE_30,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ObservableValue",new SampleInfo[]{SAMPLE_102,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.image.Image",new SampleInfo[]{SAMPLE_82,SAMPLE_69,SAMPLE_76,SAMPLE_75,SAMPLE_74,SAMPLE_84,SAMPLE_83,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Shape",new SampleInfo[]{SAMPLE_93,SAMPLE_92,SAMPLE_91,SAMPLE_90,SAMPLE_89,SAMPLE_88,SAMPLE_87,SAMPLE_86,SAMPLE_97,SAMPLE_85,SAMPLE_96,SAMPLE_95,SAMPLE_94,});
+        DOCS_URL_TO_SAMPLE.put("javafx.event.EventHandler",new SampleInfo[]{SAMPLE_70,SAMPLE_119,SAMPLE_29,SAMPLE_68,SAMPLE_101,SAMPLE_123,SAMPLE_122,SAMPLE_2,SAMPLE_120,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Button",new SampleInfo[]{SAMPLE_49,SAMPLE_68,SAMPLE_75,SAMPLE_50,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ClosePath",new SampleInfo[]{SAMPLE_93,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.binding.StringBinding",new SampleInfo[]{SAMPLE_103,});
+        DOCS_URL_TO_SAMPLE.put("javafx.fxml.Initializable",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.CycleMethod",new SampleInfo[]{SAMPLE_70,SAMPLE_13,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Glow",new SampleInfo[]{SAMPLE_72,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.LineTo",new SampleInfo[]{SAMPLE_93,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.ArcTo",new SampleInfo[]{SAMPLE_93,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.LinearGradient",new SampleInfo[]{SAMPLE_71,SAMPLE_70,SAMPLE_86,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.XYChart",new SampleInfo[]{SAMPLE_18,SAMPLE_14,SAMPLE_128,SAMPLE_24,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.VBox",new SampleInfo[]{SAMPLE_112,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.InvalidationListener",new SampleInfo[]{SAMPLE_102,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BlendMode",new SampleInfo[]{SAMPLE_71,SAMPLE_13,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Parent",new SampleInfo[]{SAMPLE_70,SAMPLE_68,SAMPLE_124,});
+        DOCS_URL_TO_SAMPLE.put("javafx.concurrent.Task",new SampleInfo[]{SAMPLE_33,SAMPLE_32,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.RotateEvent",new SampleInfo[]{SAMPLE_119,SAMPLE_123,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableView",new SampleInfo[]{SAMPLE_58,SAMPLE_57,SAMPLE_33,SAMPLE_32,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.Pane",new SampleInfo[]{SAMPLE_13,SAMPLE_75,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.HBox",new SampleInfo[]{SAMPLE_109,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TextField",new SampleInfo[]{SAMPLE_103,SAMPLE_64,SAMPLE_63,SAMPLE_61,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuItem",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Stop",new SampleInfo[]{SAMPLE_70,SAMPLE_13,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.fxml.JavaFXBuilderFactory",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Ellipse",new SampleInfo[]{SAMPLE_91,SAMPLE_76,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Font",new SampleInfo[]{SAMPLE_70,SAMPLE_76,SAMPLE_130,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.Chart",new SampleInfo[]{SAMPLE_18,SAMPLE_14,SAMPLE_128,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.BarChart",new SampleInfo[]{SAMPLE_19,SAMPLE_18,SAMPLE_128,SAMPLE_21,SAMPLE_20,});
+        DOCS_URL_TO_SAMPLE.put("javafx.concurrent.Service",new SampleInfo[]{SAMPLE_32,});
+        DOCS_URL_TO_SAMPLE.put("java.util.logging.Logger",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeView",new SampleInfo[]{SAMPLE_48,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.FillTransition",new SampleInfo[]{SAMPLE_4,});
+        DOCS_URL_TO_SAMPLE.put("javafx.fxml.FXML",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.Text",new SampleInfo[]{SAMPLE_70,SAMPLE_129,SAMPLE_68,SAMPLE_76,SAMPLE_130,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Accordion",new SampleInfo[]{SAMPLE_34,});
+        DOCS_URL_TO_SAMPLE.put("javafx.util.Duration",new SampleInfo[]{SAMPLE_69,SAMPLE_68,SAMPLE_101,SAMPLE_1,SAMPLE_99,SAMPLE_2,SAMPLE_76,SAMPLE_98,SAMPLE_0,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.ScaleTransition",new SampleInfo[]{SAMPLE_9,});
+        DOCS_URL_TO_SAMPLE.put("java.util.List",new SampleInfo[]{SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.PauseTransition",new SampleInfo[]{SAMPLE_7,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ToggleButton",new SampleInfo[]{SAMPLE_46,SAMPLE_51,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.paint.Paint",new SampleInfo[]{SAMPLE_13,SAMPLE_87,SAMPLE_86,SAMPLE_85,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.layout.AnchorPane",new SampleInfo[]{SAMPLE_105,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.GestureEvent",new SampleInfo[]{SAMPLE_119,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.AreaChart",new SampleInfo[]{SAMPLE_16,SAMPLE_15,SAMPLE_14,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.transform.Scale",new SampleInfo[]{SAMPLE_101,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.NumberAxis",new SampleInfo[]{SAMPLE_128,SAMPLE_19,SAMPLE_18,SAMPLE_17,SAMPLE_16,SAMPLE_27,SAMPLE_15,SAMPLE_26,SAMPLE_14,SAMPLE_25,SAMPLE_24,SAMPLE_23,SAMPLE_22,SAMPLE_21,SAMPLE_20,SAMPLE_31,SAMPLE_30,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Effect",new SampleInfo[]{SAMPLE_81,SAMPLE_80,SAMPLE_79,SAMPLE_78,SAMPLE_77,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.Media",new SampleInfo[]{SAMPLE_18,SAMPLE_116,SAMPLE_14,SAMPLE_117,SAMPLE_114,SAMPLE_113,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.text.TextBoundsType",new SampleInfo[]{SAMPLE_76,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.SceneAntialiasing",new SampleInfo[]{SAMPLE_101,SAMPLE_100,SAMPLE_99,SAMPLE_98,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Pagination",new SampleInfo[]{SAMPLE_41,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.QuadCurve",new SampleInfo[]{SAMPLE_96,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.Scene",new SampleInfo[]{SAMPLE_70,SAMPLE_127,SAMPLE_126,SAMPLE_128,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebEngine",new SampleInfo[]{SAMPLE_128,SAMPLE_132,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ListView",new SampleInfo[]{SAMPLE_54,SAMPLE_53,SAMPLE_52,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.StackedBarChart",new SampleInfo[]{SAMPLE_22,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.PerspectiveTransform",new SampleInfo[]{SAMPLE_73,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.Lighting",new SampleInfo[]{SAMPLE_76,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.AudioClip",new SampleInfo[]{SAMPLE_115,SAMPLE_101,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.MouseEvent",new SampleInfo[]{SAMPLE_70,SAMPLE_29,SAMPLE_68,SAMPLE_101,SAMPLE_123,SAMPLE_122,SAMPLE_75,SAMPLE_73,});
+        DOCS_URL_TO_SAMPLE.put("java.util.HashMap",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polygon",new SampleInfo[]{SAMPLE_72,SAMPLE_94,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.SwipeEvent",new SampleInfo[]{SAMPLE_119,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Polyline",new SampleInfo[]{SAMPLE_95,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableColumn",new SampleInfo[]{SAMPLE_58,SAMPLE_57,SAMPLE_33,SAMPLE_32,});
+        DOCS_URL_TO_SAMPLE.put("java.util.logging.Level",new SampleInfo[]{SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.LineChart",new SampleInfo[]{SAMPLE_27,SAMPLE_26,SAMPLE_25,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.ScatterChart",new SampleInfo[]{SAMPLE_31,SAMPLE_30,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableCell",new SampleInfo[]{SAMPLE_57,});
+        DOCS_URL_TO_SAMPLE.put("javafx.geometry.Insets",new SampleInfo[]{SAMPLE_60,SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.BoxBlur",new SampleInfo[]{SAMPLE_71,});
+        DOCS_URL_TO_SAMPLE.put("javafx.geometry.VPos",new SampleInfo[]{SAMPLE_70,SAMPLE_69,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.ZoomEvent",new SampleInfo[]{SAMPLE_119,SAMPLE_123,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyValue",new SampleInfo[]{SAMPLE_69,SAMPLE_68,SAMPLE_101,SAMPLE_1,SAMPLE_99,SAMPLE_2,SAMPLE_98,SAMPLE_0,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.media.MediaPlayer",new SampleInfo[]{SAMPLE_18,SAMPLE_116,SAMPLE_14,SAMPLE_117,SAMPLE_114,SAMPLE_113,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.Animation",new SampleInfo[]{SAMPLE_68,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.RotateTransition",new SampleInfo[]{SAMPLE_8,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ColorPicker",new SampleInfo[]{SAMPLE_37,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ProgressIndicator",new SampleInfo[]{SAMPLE_33,SAMPLE_32,SAMPLE_43,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.KeyCode",new SampleInfo[]{SAMPLE_120,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.WebView",new SampleInfo[]{SAMPLE_128,SAMPLE_132,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.KeyFrame",new SampleInfo[]{SAMPLE_69,SAMPLE_68,SAMPLE_101,SAMPLE_1,SAMPLE_99,SAMPLE_2,SAMPLE_98,SAMPLE_0,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.MenuBar",new SampleInfo[]{SAMPLE_40,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.Label",new SampleInfo[]{SAMPLE_59,SAMPLE_103,SAMPLE_62,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TableRow",new SampleInfo[]{SAMPLE_58,SAMPLE_57,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Sphere",new SampleInfo[]{SAMPLE_99,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TablePosition",new SampleInfo[]{SAMPLE_58,SAMPLE_57,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.chart.CategoryAxis",new SampleInfo[]{SAMPLE_19,SAMPLE_18,SAMPLE_25,SAMPLE_128,SAMPLE_22,SAMPLE_21,SAMPLE_20,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.VLineTo",new SampleInfo[]{SAMPLE_93,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.input.ScrollEvent",new SampleInfo[]{SAMPLE_119,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.effect.DropShadow",new SampleInfo[]{SAMPLE_77,SAMPLE_76,SAMPLE_75,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ChoiceBox",new SampleInfo[]{SAMPLE_36,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.HLineTo",new SampleInfo[]{SAMPLE_93,});
+        DOCS_URL_TO_SAMPLE.put("javafx.animation.ParallelTransition",new SampleInfo[]{SAMPLE_5,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.TreeTableColumn",new SampleInfo[]{SAMPLE_47,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.shape.Box",new SampleInfo[]{SAMPLE_101,SAMPLE_100,SAMPLE_98,});
+        DOCS_URL_TO_SAMPLE.put("javafx.event.ActionEvent",new SampleInfo[]{SAMPLE_68,SAMPLE_2,});
+        DOCS_URL_TO_SAMPLE.put("javafx.stage.Stage",new SampleInfo[]{SAMPLE_70,SAMPLE_127,SAMPLE_126,SAMPLE_128,SAMPLE_68,SAMPLE_67,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.web.HTMLEditor",new SampleInfo[]{SAMPLE_131,});
+        DOCS_URL_TO_SAMPLE.put("javafx.beans.value.ChangeListener",new SampleInfo[]{SAMPLE_104,SAMPLE_102,});
+        DOCS_URL_TO_SAMPLE.put("javafx.scene.control.ScrollBar",new SampleInfo[]{SAMPLE_45,SAMPLE_73,});
+        DOCS_URL_TO_SAMPLE.put("java.io.InputStream",new SampleInfo[]{SAMPLE_67,});
+    }
+    public static SampleInfo[] getSamplesForDoc(String docUrl) {
+        return DOCS_URL_TO_SAMPLE.get(docUrl);
+    }
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/interpolator/InterpolatorApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/interpolator/InterpolatorApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -157,6 +157,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/timeline/timeline/TimelineApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/timeline/timeline/TimelineApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -180,6 +180,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/timeline/timelineevents/TimelineEventsApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/timeline/timelineevents/TimelineEventsApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -138,6 +138,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/fadetransition/FadeTransitionApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/fadetransition/FadeTransitionApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -104,6 +104,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/filltransition/FillTransitionApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/filltransition/FillTransitionApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -101,6 +101,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/paralleltransition/ParallelTransitionApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/paralleltransition/ParallelTransitionApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -131,6 +131,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/pathtransition/PathTransitionApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/pathtransition/PathTransitionApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -112,6 +112,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/pausetransition/PauseTransitionApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/pausetransition/PauseTransitionApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -117,6 +117,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/rotatetransition/RotateTransitionApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/rotatetransition/RotateTransitionApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -104,6 +104,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/scaletransition/ScaleTransitionApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/scaletransition/ScaleTransitionApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -103,6 +103,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/sequentialtransition/SequentialTransitionApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/sequentialtransition/SequentialTransitionApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -133,6 +133,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/stroketransition/StrokeTransitionApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/stroketransition/StrokeTransitionApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -104,6 +104,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/translatetransition/TranslateTransitionApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/animation/transitions/translatetransition/TranslateTransitionApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -102,6 +102,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/canvas/fireworks/FireworksApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/canvas/fireworks/FireworksApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -83,6 +83,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/area/audio/AudioAreaChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/area/audio/AudioAreaChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -146,6 +146,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/area/chart/AreaChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/area/chart/AreaChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -160,6 +160,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChart.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChart.java	Mon Dec 02 21:25:39 2013 -0800
@@ -112,6 +112,7 @@
      * Calculate open-ended Bezier Spline Control Points.
      *
      * @param dataPoints Input data Bezier spline points.
+     * @return The spline points
      */
     public static Pair<Point2D[], Point2D[]> calcCurveControlPoints(Point2D[] dataPoints) {
         Point2D[] firstControlPoints;
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/area/curvefitted/CurveFittedAreaChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -102,7 +102,6 @@
  * @playground chart.legendVisible
  * @playground chart.title
  * @playground chart.titleSide
- * @embedded
  */
 public class CurveFittedAreaChartApp extends Application {
     
@@ -140,6 +139,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/area/stacked/StackedAreaChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/area/stacked/StackedAreaChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -106,7 +106,7 @@
  * @playground chart.legendVisible
  * @playground chart.title
  * @playground chart.titleSide
- * @embedded
+ * @highlight
  */
 public class StackedAreaChartApp extends Application {
     
@@ -155,6 +155,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bar/audio/AudioBarChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bar/audio/AudioBarChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -153,6 +153,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bar/chart/BarChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bar/chart/BarChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -1,4 +1,5 @@
 /*
+     * @param args command line arguments
  * Copyright (c) 2008, 2013 Oracle and/or its affiliates.
  * All rights reserved. Use is subject to license terms.
  *
@@ -67,7 +68,6 @@
  * @playground xAxis.endMargin
  * 
  * @playground xAxis.animated
- * @playground xAxis.label
  * @playground xAxis.side
  * @playground xAxis.tickLabelFill
  * @playground xAxis.tickLabelGap
@@ -150,6 +150,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bar/horizontal/HorizontalBarChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bar/horizontal/HorizontalBarChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -104,7 +104,6 @@
  * @playground chart.legendVisible
  * @playground chart.title
  * @playground chart.titleSide
- * @embedded
  */
 public class HorizontalBarChartApp extends Application {
 
@@ -159,6 +158,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bar/image/ImageBarChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bar/image/ImageBarChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -61,7 +61,6 @@
  * @playground xAxis.endMargin
  * 
  * @playground xAxis.animated
- * @playground xAxis.label
  * @playground xAxis.side
  * @playground xAxis.tickLabelFill
  * @playground xAxis.tickLabelGap
@@ -81,7 +80,6 @@
  * @playground yAxis.minorTickVisible
  * 
  * @playground yAxis.animated
- * @playground yAxis.label
  * @playground yAxis.side
  * @playground yAxis.tickLabelFill
  * @playground yAxis.tickLabelGap
@@ -139,6 +137,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bar/stacked/StackedBarChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bar/stacked/StackedBarChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -61,7 +61,6 @@
  * @playground xAxis.endMargin
  * 
  * @playground xAxis.animated
- * @playground xAxis.label
  * @playground xAxis.side
  * @playground xAxis.tickLabelFill
  * @playground xAxis.tickLabelGap
@@ -103,7 +102,6 @@
  * @playground chart.legendVisible
  * @playground chart.title
  * @playground chart.titleSide
- * @embedded
  */
 public class StackedBarChartApp extends Application {
     
@@ -153,6 +151,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bubble/chart/BubbleChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/bubble/chart/BubbleChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -104,7 +104,6 @@
  * @playground chart.legendVisible
  * @playground chart.title
  * @playground chart.titleSide
- * @embedded
  */
 public class BubbleChartApp extends Application {
 
@@ -149,6 +148,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/custom/candlestick/CandleStickChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/custom/candlestick/CandleStickChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -107,7 +107,6 @@
  * @playground chart.legendVisible
  * @playground chart.title
  * @playground chart.titleSide
- * @embedded
  */
 public class CandleStickChartApp extends Application {
     
@@ -181,6 +180,9 @@
         primaryStage.show();
     }
     
-    /** Java main for when running without JavaFX launcher */
+    /** 
+     * Java main for when running without JavaFX launcher 
+     * @param args command line arguments
+     */
     public static void main(String[] args) { launch(args); }
 }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/line/category/CategoryLineChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/line/category/CategoryLineChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -102,7 +102,6 @@
  * @playground chart.legendVisible
  * @playground chart.title
  * @playground chart.titleSide
- * @embedded
  */
 public class CategoryLineChartApp extends Application {
 
@@ -139,6 +138,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/line/chart/LineChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/line/chart/LineChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -147,6 +147,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/line/stock/StockLineChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/line/stock/StockLineChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -189,6 +189,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/pie/chart/PieChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/pie/chart/PieChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -88,6 +88,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/pie/drilldown/DrilldownPieChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/pie/drilldown/DrilldownPieChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -99,6 +99,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/scatter/animated/LiveScatterChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/scatter/animated/LiveScatterChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -135,6 +135,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/scatter/chart/ScatterChartApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/charts/scatter/chart/ScatterChartApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -148,6 +148,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/concurrency/service/ServiceApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/concurrency/service/ServiceApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -59,6 +59,7 @@
  * @see javafx.scene.control.ProgressIndicator
  * @see javafx.scene.control.TableColumn
  * @see javafx.scene.control.TableView
+ * @embedded
  */
 public class ServiceApp extends Application {
 
@@ -120,6 +121,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/concurrency/task/TaskApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/concurrency/task/TaskApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -102,6 +102,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/accordion/AccordionApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/accordion/AccordionApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -75,6 +75,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/button/colorbutton/ColorButtonApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/button/colorbutton/ColorButtonApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -92,6 +92,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/button/graphicbutton/GraphicButtonApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/button/graphicbutton/GraphicButtonApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -64,6 +64,8 @@
         primaryStage.show();
     }
     
-    /** Java main for when running without JavaFX launcher */
+    /** Java main for when running without JavaFX launcher 
+     * @param args command line arguments
+     */
     public static void main(String[] args) { launch(args); }
 }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/button/pillbutton/PillButtonApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/button/pillbutton/PillButtonApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -88,6 +88,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/checkbox/CheckBoxApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/checkbox/CheckBoxApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -75,6 +75,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/choicebox/ChoiceBoxApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/choicebox/ChoiceBoxApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -63,6 +63,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/colorpicker/ColorPickerApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/colorpicker/ColorPickerApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -92,6 +92,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/datepicker/DatePickerApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/datepicker/DatePickerApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -297,6 +297,7 @@
     
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/hyperlink/HyperLinkApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/hyperlink/HyperLinkApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -80,6 +80,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/listview/horizontallistview/HorizontalListViewApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/listview/horizontallistview/HorizontalListViewApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -85,6 +85,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/listview/listviewcellfactory/ListViewCellFactoryApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/listview/listviewcellfactory/ListViewCellFactoryApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -83,6 +83,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/listview/simplelistview/SimpleListViewApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/listview/simplelistview/SimpleListViewApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -74,6 +74,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/menu/MenuApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/menu/MenuApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -149,6 +149,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/pagination/PaginationApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/pagination/PaginationApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -112,6 +112,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/progressbar/ProgressBarApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/progressbar/ProgressBarApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -98,6 +98,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/progressindicator/ProgressIndicatorApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/progressindicator/ProgressIndicatorApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -126,6 +126,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/radiobutton/RadioButtonApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/radiobutton/RadioButtonApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -78,6 +78,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/scrollbar/ScrollBarApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/scrollbar/ScrollBarApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -147,6 +147,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPaneApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/splitpane/hiddensplitpane/HiddenSplitPaneApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -74,6 +74,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/tab/tabpane/TabPaneApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/tab/tabpane/TabPaneApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -269,6 +269,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/table/tablecellfactory/TableCellFactoryApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/table/tablecellfactory/TableCellFactoryApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -122,6 +122,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/table/tableview/TableViewApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/table/tableview/TableViewApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -85,6 +85,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/advancedlabel/AdvancedLabelApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/advancedlabel/AdvancedLabelApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -94,6 +94,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/insettext/InsetTextApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/insettext/InsetTextApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -64,6 +64,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/searchbox/SearchBoxApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/searchbox/SearchBoxApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -65,6 +65,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/simplelabel/SimpleLabelApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/simplelabel/SimpleLabelApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -71,6 +71,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/textfield/TextFieldApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/textfield/TextFieldApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -61,6 +61,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/textvalidator/TextValidatorApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/text/textvalidator/TextValidatorApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -95,6 +95,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/togglebutton/ToggleButtonApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/togglebutton/ToggleButtonApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -107,6 +107,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBarApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/toolbar/styledtoolbar/StyledToolBarApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -81,6 +81,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/toolbar/toolbar/ToolBarApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/toolbar/toolbar/ToolBarApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -64,6 +64,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/treetableview/TreeTableViewApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/treetableview/TreeTableViewApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -150,6 +150,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/treeview/TreeViewApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/controls/treeview/TreeViewApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -81,6 +81,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/bouncingballs/BouncingBallsApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/bouncingballs/BouncingBallsApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -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
  * @see javafx.event.EventHandler
  * @see javafx.event.ActionEvent
  * @see javafx.scene.input.MouseEvent 
@@ -114,6 +114,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/calc/CalculatorApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/calc/CalculatorApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -83,6 +83,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/colorfulcircles/ColorfulCirclesApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/colorfulcircles/ColorfulCirclesApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -173,6 +173,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/digitalclock/DigitalClockApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/digitalclock/DigitalClockApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -87,6 +87,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/displayshelf/DisplayShelfApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/displayshelf/DisplayShelfApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -88,6 +88,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/effects/dropshadow/DropShadowApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/effects/dropshadow/DropShadowApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -78,8 +78,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/effects/gaussianblur/GaussianBlurApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/effects/gaussianblur/GaussianBlurApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -50,6 +50,7 @@
  * @playground gaussianBlur.radius (name="Gaussian Blur Level", min=0, max=15)
  * @see javafx.scene.effect.GaussianBlur
  * @see javafx.scene.effect.Effect
+ * @embedded
  */
 public class GaussianBlurApp extends Application {
 
@@ -74,8 +75,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/effects/innershadow/InnerShadowApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/effects/innershadow/InnerShadowApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -55,6 +55,7 @@
  * @playground innerShadow.color (name="Inner Shadow Color")
  * @see javafx.scene.effect.InnerShadow
  * @see javafx.scene.effect.Effect
+ * @embedded
  */
 public class InnerShadowApp extends Application {
 
@@ -82,8 +83,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/effects/reflection/ReflectionApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/effects/reflection/ReflectionApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -53,6 +53,7 @@
  *
  * @see javafx.scene.effect.Reflection
  * @see javafx.scene.effect.Effect
+ * @embedded
  */
 public class ReflectionApp extends Application {
 
@@ -77,8 +78,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/effects/sepiatone/SepiaToneApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/effects/sepiatone/SepiaToneApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -49,6 +49,7 @@
  * 
  * @see javafx.scene.effect.SepiaTone
  * @see javafx.scene.effect.Effect
+ * @embedded
  */
 public class SepiaToneApp extends Application {
 
@@ -73,8 +74,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/images/imagecreation/ImageCreationApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/images/imagecreation/ImageCreationApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -72,8 +72,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/images/imageoperator/ImageOperationApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/images/imageoperator/ImageOperationApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -115,6 +115,8 @@
         primaryStage.show();
     }
     
-    /** Java main for when running without JavaFX launcher */
+    /** Java main for when running without JavaFX launcher 
+     * @param args command line arguments
+     */
     public static void main(String[] args) { launch(args); }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/images/imageproperties/ImagePropertiesApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/images/imageproperties/ImagePropertiesApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -51,6 +51,7 @@
  * @related /Graphics/Images/Image Creation
  * @see javafx.scene.image.Image
  * @see javafx.scene.image.ImageView
+ * @embedded
  */
 public class ImagePropertiesApp extends Application {
 
@@ -105,8 +106,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/paints/color/ColorApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/paints/color/ColorApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -51,6 +51,7 @@
  * @see javafx.scene.paint.Paint
  * @related /Graphics/Paints/Radial Gradient
  * @related /Graphics/Paints/Linear Gradient
+ * @embedded
  */
 public class ColorApp extends Application {
 
@@ -138,6 +139,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/paints/lineargradient/LinearGradientApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/paints/lineargradient/LinearGradientApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -55,6 +55,7 @@
  * @see javafx.scene.paint.Color
  * @related /Graphics/Paints/Color
  * @related /Graphics/Paints/Radial Gradient
+ * @embedded
  */
 public class LinearGradientApp extends Application {
 
@@ -107,6 +108,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/paints/radialgradient/RadialGradientApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/paints/radialgradient/RadialGradientApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -100,6 +100,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/puzzle/PuzzlePiecesApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/puzzle/PuzzlePiecesApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -154,6 +154,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/arc/ArcApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/arc/ArcApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -85,8 +85,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/circle/CircleApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/circle/CircleApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -81,8 +81,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/cubiccurve/CubicCurveApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/cubiccurve/CubicCurveApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -92,8 +92,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/ellipse/EllipseApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/ellipse/EllipseApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -86,8 +86,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/line/LineApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/line/LineApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -103,6 +103,9 @@
         primaryStage.show();
     }
     
-    /** Java main for when running without JavaFX launcher */
+    /** 
+     * Java main for when running without JavaFX launcher
+     * @param args command line arguments
+     */
     public static void main(String[] args) { launch(args); }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/path/PathApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/path/PathApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -111,8 +111,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/polygon/PolygonApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/polygon/PolygonApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -93,8 +93,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/polyline/PolylineApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/polyline/PolylineApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -89,8 +89,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/quadcurve/QuadCurveApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/quadcurve/QuadCurveApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -88,8 +88,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/rectangle/RectangleApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/shapes/rectangle/RectangleApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -89,8 +89,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/stopwatch/StopWatchApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics/stopwatch/StopWatchApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -78,6 +78,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/cube/Cube.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/cube/Cube.java	Mon Dec 02 21:25:39 2013 -0800
@@ -31,54 +31,20 @@
  */
 package ensemble.samples.graphics3d.cube;
 
-import javafx.scene.Group;
 import javafx.scene.paint.Color;
-import javafx.scene.shape.Rectangle;
+import javafx.scene.paint.PhongMaterial;
+import javafx.scene.shape.Box;
 import javafx.scene.transform.Rotate;
 
-public class Cube extends Group {
+public class Cube extends Box {
 
     final Rotate rx = new Rotate(0, Rotate.X_AXIS);
     final Rotate ry = new Rotate(0, Rotate.Y_AXIS);
     final Rotate rz = new Rotate(0, Rotate.Z_AXIS);
 
-    public Cube(double size, Color color, double shade) {
+    public Cube(double size, Color color) {
+        super(size, size, size);
+        setMaterial(new PhongMaterial(color));
         getTransforms().addAll(rz, ry, rx);
-        // back face
-        Rectangle rec1 = new Rectangle(size, size, color.deriveColor(0.0, 1.0, (1 - 0.5 * shade), 1.0));
-        rec1.setTranslateX(-0.5 * size);
-        rec1.setTranslateY(-0.5 * size);
-        rec1.setTranslateZ(0.5 * size);
-        // bottom face
-        Rectangle rec2 = new Rectangle(size, size, color.deriveColor(0.0, 1.0, (1 - 0.4 * shade), 1.0));
-        rec2.setTranslateX(-0.5 * size);
-        rec2.setTranslateY(0);
-        rec2.setRotationAxis(Rotate.X_AXIS);
-        rec2.setRotate(90);
-        // right face
-        Rectangle rec3 = new Rectangle(size, size, color.deriveColor(0.0, 1.0, (1 - 0.3 * shade), 1.0));
-        rec3.setTranslateX(-1 * size);
-        rec3.setTranslateY(-0.5 * size);
-        rec3.setRotationAxis(Rotate.Y_AXIS);
-        rec3.setRotate(90);
-        // left face
-        Rectangle rec4 = new Rectangle(size, size, color.deriveColor(0.0, 1.0, (1 - 0.2 * shade), 1.0));
-        rec4.setTranslateX(0);
-        rec4.setTranslateY(-0.5 * size);
-        rec4.setRotationAxis(Rotate.Y_AXIS);
-        rec4.setRotate(90);
-        // top face
-        Rectangle rec5 = new Rectangle(size, size, color.deriveColor(0.0, 1.0, (1 - 0.1 * shade), 1.0));
-        rec5.setTranslateX(-0.5 * size);
-        rec5.setTranslateY(-1 * size);
-        rec5.setRotationAxis(Rotate.X_AXIS);
-        rec5.setRotate(90);
-        // front face         
-        Rectangle rec6 = new Rectangle(size, size, color);
-        rec6.setTranslateX(-0.5 * size);
-        rec6.setTranslateY(-0.5 * size);
-        rec6.setTranslateZ(-0.5 * size);       
- 
-        getChildren().addAll(rec1, rec2, rec3, rec4, rec5, rec6);
     }
 }
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/cube/CubeApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/cube/CubeApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -31,16 +31,15 @@
  */
 package ensemble.samples.graphics3d.cube;
 
-import javafx.animation.Animation;
 import javafx.animation.KeyFrame;
 import javafx.animation.KeyValue;
 import javafx.animation.Timeline;
 import javafx.application.Application;
-import javafx.application.ConditionalFeature;
 import javafx.scene.Group;
 import javafx.scene.Parent;
 import javafx.scene.PerspectiveCamera;
 import javafx.scene.Scene;
+import javafx.scene.SceneAntialiasing;
 import javafx.scene.SubScene;
 import javafx.scene.paint.Color;
 import javafx.scene.transform.Translate;
@@ -52,11 +51,18 @@
  *
  * @sampleName 3D Cubes
  * @preview preview.png
+ * @see javafx.scene.shape.Box
+ * @see javafx.scene.paint.PhongMaterial
  * @see javafx.scene.PerspectiveCamera
  * @see javafx.scene.SubScene
+ * @see javafx.scene.SceneAntialiasing
  * @see javafx.scene.paint.Color
  * @see javafx.scene.transform.Rotate
  * @see javafx.scene.transform.Translate
+ * @see javafx.animation.KeyFrame
+ * @see javafx.animation.KeyValue
+ * @see javafx.animation.Timeline
+ * @see javafx.util.Duration
  * @conditionalFeatures SCENE3D
  */
 public class CubeApp extends Application {
@@ -64,15 +70,15 @@
     private Timeline animation;
 
     public Parent createContent() {
-        Cube c = new Cube(1, Color.RED, 1);
+        Cube c = new Cube(1, Color.RED);
         c.rx.setAngle(45);
         c.ry.setAngle(45);
-        Cube c2 = new Cube(1, Color.GREEN, 1);
+        Cube c2 = new Cube(1, Color.GREEN);
         c2.setTranslateX(2);
         c2.rx.setAngle(45);
         c2.ry.setAngle(45);
 
-        Cube c3 = new Cube(1, Color.ORANGE, 1);
+        Cube c3 = new Cube(1, Color.ORANGE);
         c3.setTranslateX(-2);
         c3.rx.setAngle(45);
         c3.ry.setAngle(45);
@@ -87,19 +93,18 @@
                 new KeyValue(c.ry.angleProperty(), 360d),
                 new KeyValue(c2.rx.angleProperty(), 360d),
                 new KeyValue(c3.rz.angleProperty(), 360d)));
-        animation.setCycleCount(Animation.INDEFINITE);
+        animation.setCycleCount(Timeline.INDEFINITE);
 
         PerspectiveCamera camera = new PerspectiveCamera(true);
-        camera.getTransforms().add(new Translate(0, 0, -15));
+        camera.getTransforms().add(new Translate(0, 0, -10));
 
         Group root = new Group();
         root.getChildren().addAll(c, c2, c3);
-        SubScene subScene = new SubScene(root, 300, 300);
+        
+        SubScene subScene = new SubScene(root, 640, 480, true, SceneAntialiasing.BALANCED);
         subScene.setCamera(camera);
-        Group group = new Group();
-        group.getChildren().add(subScene);
-
-        return group;
+        
+        return new Group(subScene);
     }
 
     public void play() {
@@ -120,6 +125,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/cubesystem/CubeSystemApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,239 +0,0 @@
-/*
- * Copyright (c) 2008, 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.graphics3d.cubesystem;
-
-import javafx.animation.KeyFrame;
-import javafx.animation.KeyValue;
-import javafx.animation.Timeline;
-import javafx.application.Application;
-import javafx.scene.Parent;
-import javafx.scene.Scene;
-import javafx.scene.paint.Color;
-import javafx.stage.Stage;
-import javafx.util.Duration;
-
-/**
- * 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.
- *
- * @sampleName 3D Cube System
- * @preview preview.png
- * @see javafx.scene.transform.Rotate
- * @see javafx.scene.paint.Color
- * @conditionalFeatures SCENE3D
- */
-public class CubeSystemApp extends Application {
-
-    private Timeline animation;
-
-    public Parent createContent() {
-        Xform sceneRoot = new Xform();
-
-        Xform cube1X = new Xform();
-        Cube cube1 = new Cube(40, new Color(1.0, 0.9, 0.0, 1.0), 1.0);
-
-        Xform cube1_1X = new Xform();
-        Xform cube1_2X = new Xform();
-        Xform cube1_3X = new Xform();
-        Xform cube1_4X = new Xform();
-        Xform cube1_5X = new Xform();
-        Xform cube1_6X = new Xform();
-        Xform cube1_7X = new Xform();
-        Xform cube1_8X = new Xform();
-        Xform cube1_9X = new Xform();
-
-        Cube cube1_1 = new Cube(4, Color.RED, 1.0);
-        Cube cube1_2 = new Cube(5, Color.ORANGE, 1.0);
-        Cube cube1_3 = new Cube(6, Color.CORNFLOWERBLUE, 1.0);
-        Cube cube1_4 = new Cube(7, Color.DARKGREEN, 1.0);
-        Cube cube1_5 = new Cube(8, Color.BLUE, 1.0);
-        Cube cube1_6 = new Cube(9, Color.PURPLE, 1.0);
-        Cube cube1_7 = new Cube(10, Color.BLUEVIOLET, 1.0);
-        Cube cube1_8 = new Cube(11, Color.DARKGOLDENROD, 1.0);
-        Cube cube1_9 = new Cube(12, Color.KHAKI, 1.0);
-
-        sceneRoot.getChildren().add(cube1X);
-
-        cube1X.getChildren().add(cube1);
-        cube1X.getChildren().add(cube1_1X);
-        cube1X.getChildren().add(cube1_2X);
-        cube1X.getChildren().add(cube1_3X);
-        cube1X.getChildren().add(cube1_4X);
-        cube1X.getChildren().add(cube1_5X);
-        cube1X.getChildren().add(cube1_6X);
-        cube1X.getChildren().add(cube1_7X);
-        cube1X.getChildren().add(cube1_8X);
-        cube1X.getChildren().add(cube1_9X);
-
-        cube1_1X.getChildren().add(cube1_1);
-        cube1_2X.getChildren().add(cube1_2);
-        cube1_3X.getChildren().add(cube1_3);
-        cube1_4X.getChildren().add(cube1_4);
-        cube1_5X.getChildren().add(cube1_5);
-        cube1_6X.getChildren().add(cube1_6);
-        cube1_7X.getChildren().add(cube1_7);
-        cube1_8X.getChildren().add(cube1_8);
-        cube1_9X.getChildren().add(cube1_9);
-
-        cube1_1.setTranslateX(40.0);
-        cube1_2.setTranslateX(60.0);
-        cube1_3.setTranslateX(80.0);
-        cube1_4.setTranslateX(100.0);
-        cube1_5.setTranslateX(120.0);
-        cube1_6.setTranslateX(140.0);
-        cube1_7.setTranslateX(160.0);
-        cube1_8.setTranslateX(180.0);
-        cube1_9.setTranslateX(200.0);
-
-        cube1_1X.rx.setAngle(30.0);
-        cube1_2X.rz.setAngle(10.0);
-        cube1_3X.rz.setAngle(50.0);
-        cube1_4X.rz.setAngle(170.0);
-        cube1_5X.rz.setAngle(60.0);
-        cube1_6X.rz.setAngle(30.0);
-        cube1_7X.rz.setAngle(120.0);
-        cube1_8X.rz.setAngle(40.0);
-        cube1_9X.rz.setAngle(-60.0);
-
-        double endTime = 4000.0;
-
-        // Animate
-        animation = new Timeline();
-        animation.getKeyFrames().addAll(new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1X.ry.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1X.ry.angleProperty(), 360.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1X.rx.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1X.rx.angleProperty(), 360.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_1X.ry.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_1X.ry.angleProperty(), -2880.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_2X.ry.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_2X.ry.angleProperty(), -1440.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_3X.ry.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_3X.ry.angleProperty(), -1080.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_4X.ry.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_4X.ry.angleProperty(), -720.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_5X.ry.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_5X.ry.angleProperty(), 1440.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_6X.ry.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_6X.ry.angleProperty(), 1080.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_7X.ry.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_7X.ry.angleProperty(), -360.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_8X.ry.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_8X.ry.angleProperty(), -720.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_9X.ry.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_9X.ry.angleProperty(), -1080.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_1.rx.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_1.rx.angleProperty(), 7200.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_2.rx.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_2.rx.angleProperty(), -7200.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_3.rx.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_3.rx.angleProperty(), 7200.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_4.rx.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_4.rx.angleProperty(), -7200.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_5.rx.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_5.rx.angleProperty(), 7200.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_6.rx.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_6.rx.angleProperty(), -7200.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_7.rx.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_7.rx.angleProperty(), 7200.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_8.rx.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_8.rx.angleProperty(), -7200.0)),
-                new KeyFrame(Duration.ZERO,
-                new KeyValue(cube1_9.rx.angleProperty(), 0.0)),
-                new KeyFrame(new Duration(endTime),
-                new KeyValue(cube1_9.rx.angleProperty(), 7200.0)));
-        animation.setCycleCount(Timeline.INDEFINITE);
-        return sceneRoot;
-    }
-
-    public void play() {
-        animation.play();
-    }
-
-    @Override
-    public void stop() {
-        animation.pause();
-    }
-
-    @Override
-    public void start(Stage primaryStage) throws Exception {
-        primaryStage.setScene(new Scene(createContent()));
-        primaryStage.show();
-        play();
-    }
-
-    /**
-     * Java main for when running without JavaFX launcher
-     */
-    public static void main(String[] args) {
-        launch(args);
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/cubesystem/SphereSystemApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -0,0 +1,222 @@
+/*
+ * Copyright (c) 2008, 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.graphics3d.cubesystem;
+
+import javafx.animation.KeyFrame;
+import javafx.animation.KeyValue;
+import javafx.animation.Timeline;
+import javafx.application.Application;
+import javafx.scene.Group;
+import javafx.scene.Parent;
+import javafx.scene.PerspectiveCamera;
+import javafx.scene.Scene;
+import javafx.scene.SceneAntialiasing;
+import javafx.scene.SubScene;
+import javafx.scene.paint.Color;
+import javafx.scene.transform.Translate;
+import javafx.stage.Stage;
+import javafx.util.Duration;
+
+/**
+ * A sample that demonstrates an animated rotation of 3D spheres.
+ *
+ * @sampleName 3D Sphere System
+ * @preview preview.png
+ * @see javafx.scene.shape.Sphere
+ * @see javafx.scene.paint.PhongMaterial
+ * @see javafx.scene.transform.Rotate
+ * @see javafx.scene.transform.Translate
+ * @see javafx.scene.paint.Color
+ * @see javafx.scene.PerspectiveCamera
+ * @see javafx.scene.SubScene
+ * @see javafx.scene.SceneAntialiasing
+ * @see javafx.animation.KeyFrame
+ * @see javafx.animation.KeyValue
+ * @see javafx.animation.Timeline
+ * @see javafx.util.Duration
+ * @conditionalFeatures SCENE3D
+ */
+public class SphereSystemApp extends Application {
+
+    private Timeline animation;
+
+    public Parent createContent() {
+        Xform sceneRoot = new Xform();
+
+        Xform cube1X = new Xform();
+        Xsphere cube1 = new Xsphere(40, new Color(1.0, 0.9, 0.0, 1.0));
+
+        Xform cube1_1X = new Xform();
+        Xform cube1_2X = new Xform();
+        Xform cube1_3X = new Xform();
+        Xform cube1_4X = new Xform();
+        Xform cube1_5X = new Xform();
+        Xform cube1_6X = new Xform();
+        Xform cube1_7X = new Xform();
+        Xform cube1_8X = new Xform();
+        Xform cube1_9X = new Xform();
+
+        Xsphere cube1_1 = new Xsphere(4, Color.RED);
+        Xsphere cube1_2 = new Xsphere(5, Color.ORANGE);
+        Xsphere cube1_3 = new Xsphere(6, Color.CORNFLOWERBLUE);
+        Xsphere cube1_4 = new Xsphere(7, Color.DARKGREEN);
+        Xsphere cube1_5 = new Xsphere(8, Color.BLUE);
+        Xsphere cube1_6 = new Xsphere(9, Color.PURPLE);
+        Xsphere cube1_7 = new Xsphere(10, Color.BLUEVIOLET);
+        Xsphere cube1_8 = new Xsphere(11, Color.DARKGOLDENROD);
+        Xsphere cube1_9 = new Xsphere(12, Color.KHAKI);
+
+        sceneRoot.getChildren().add(cube1X);
+
+        cube1X.getChildren().add(cube1);
+        cube1X.getChildren().add(cube1_1X);
+        cube1X.getChildren().add(cube1_2X);
+        cube1X.getChildren().add(cube1_3X);
+        cube1X.getChildren().add(cube1_4X);
+        cube1X.getChildren().add(cube1_5X);
+        cube1X.getChildren().add(cube1_6X);
+        cube1X.getChildren().add(cube1_7X);
+        cube1X.getChildren().add(cube1_8X);
+        cube1X.getChildren().add(cube1_9X);
+
+        cube1_1X.getChildren().add(cube1_1);
+        cube1_2X.getChildren().add(cube1_2);
+        cube1_3X.getChildren().add(cube1_3);
+        cube1_4X.getChildren().add(cube1_4);
+        cube1_5X.getChildren().add(cube1_5);
+        cube1_6X.getChildren().add(cube1_6);
+        cube1_7X.getChildren().add(cube1_7);
+        cube1_8X.getChildren().add(cube1_8);
+        cube1_9X.getChildren().add(cube1_9);
+
+        cube1_1.setTranslateX(40.0);
+        cube1_2.setTranslateX(60.0);
+        cube1_3.setTranslateX(80.0);
+        cube1_4.setTranslateX(100.0);
+        cube1_5.setTranslateX(120.0);
+        cube1_6.setTranslateX(140.0);
+        cube1_7.setTranslateX(160.0);
+        cube1_8.setTranslateX(180.0);
+        cube1_9.setTranslateX(200.0);
+
+        cube1_1X.rx.setAngle(30.0);
+        cube1_2X.rz.setAngle(10.0);
+        cube1_3X.rz.setAngle(50.0);
+        cube1_4X.rz.setAngle(170.0);
+        cube1_5X.rz.setAngle(60.0);
+        cube1_6X.rz.setAngle(30.0);
+        cube1_7X.rz.setAngle(120.0);
+        cube1_8X.rz.setAngle(40.0);
+        cube1_9X.rz.setAngle(-60.0);
+
+        double endTime = 4000.0;
+
+        // Animate
+        animation = new Timeline();
+        animation.getKeyFrames().addAll(new KeyFrame(Duration.ZERO,
+                new KeyValue(cube1X.ry.angleProperty(), 0.0),
+                new KeyValue(cube1X.rx.angleProperty(), 0.0),
+                new KeyValue(cube1_1X.ry.angleProperty(), 0.0),
+                new KeyValue(cube1_2X.ry.angleProperty(), 0.0),
+                new KeyValue(cube1_3X.ry.angleProperty(), 0.0),
+                new KeyValue(cube1_4X.ry.angleProperty(), 0.0),
+                new KeyValue(cube1_5X.ry.angleProperty(), 0.0),
+                new KeyValue(cube1_6X.ry.angleProperty(), 0.0),
+                new KeyValue(cube1_7X.ry.angleProperty(), 0.0),
+                new KeyValue(cube1_8X.ry.angleProperty(), 0.0),
+                new KeyValue(cube1_9X.ry.angleProperty(), 0.0),
+                new KeyValue(cube1_1.rx.angleProperty(), 0.0),
+                new KeyValue(cube1_2.rx.angleProperty(), 0.0),
+                new KeyValue(cube1_3.rx.angleProperty(), 0.0),
+                new KeyValue(cube1_4.rx.angleProperty(), 0.0),
+                new KeyValue(cube1_5.rx.angleProperty(), 0.0),
+                new KeyValue(cube1_6.rx.angleProperty(), 0.0),
+                new KeyValue(cube1_7.rx.angleProperty(), 0.0),
+                new KeyValue(cube1_8.rx.angleProperty(), 0.0),
+                new KeyValue(cube1_9.rx.angleProperty(), 0.0)),
+                new KeyFrame(new Duration(endTime),
+                new KeyValue(cube1X.ry.angleProperty(), 360.0),
+                new KeyValue(cube1X.rx.angleProperty(), 360.0),
+                new KeyValue(cube1_1X.ry.angleProperty(), -2880.0),
+                new KeyValue(cube1_2X.ry.angleProperty(), -1440.0),
+                new KeyValue(cube1_3X.ry.angleProperty(), -1080.0),
+                new KeyValue(cube1_4X.ry.angleProperty(), -720.0),
+                new KeyValue(cube1_5X.ry.angleProperty(), 1440.0),
+                new KeyValue(cube1_6X.ry.angleProperty(), 1080.0),
+                new KeyValue(cube1_7X.ry.angleProperty(), -360.0),
+                new KeyValue(cube1_8X.ry.angleProperty(), -720.0),
+                new KeyValue(cube1_9X.ry.angleProperty(), -1080.0),
+                new KeyValue(cube1_1.rx.angleProperty(), 7200.0),
+                new KeyValue(cube1_2.rx.angleProperty(), -7200.0),
+                new KeyValue(cube1_3.rx.angleProperty(), 7200.0),
+                new KeyValue(cube1_4.rx.angleProperty(), -7200.0),
+                new KeyValue(cube1_5.rx.angleProperty(), 7200.0),
+                new KeyValue(cube1_6.rx.angleProperty(), -7200.0),
+                new KeyValue(cube1_7.rx.angleProperty(), 7200.0),
+                new KeyValue(cube1_8.rx.angleProperty(), -7200.0),
+                new KeyValue(cube1_9.rx.angleProperty(), 7200.0)));
+        animation.setCycleCount(Timeline.INDEFINITE);
+        
+        PerspectiveCamera camera = new PerspectiveCamera(true);
+        camera.setFarClip(1500);
+        camera.getTransforms().add(new Translate(0, 0, -900));        
+        
+        SubScene subScene = new SubScene(sceneRoot, 640, 480, true, SceneAntialiasing.BALANCED);
+        subScene.setCamera(camera);
+        
+        return new Group(subScene);
+    }
+
+    public void play() {
+        animation.play();
+    }
+
+    @Override
+    public void stop() {
+        animation.pause();
+    }
+
+    @Override
+    public void start(Stage primaryStage) throws Exception {
+        primaryStage.setScene(new Scene(createContent(), 640, 480, true, SceneAntialiasing.BALANCED));
+        primaryStage.show();
+        play();
+    }
+
+    /**
+     * Java main for when running without JavaFX launcher
+     * @param args command line arguments
+     */
+    public static void main(String[] args) {
+        launch(args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/cubesystem/Xsphere.java	Mon Dec 02 21:25:39 2013 -0800
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2008, 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.graphics3d.cubesystem;
+
+import javafx.scene.paint.Color;
+import javafx.scene.paint.PhongMaterial;
+import javafx.scene.shape.Sphere;
+import javafx.scene.transform.Rotate;
+
+public class Xsphere extends Sphere {
+
+    final Rotate rx = new Rotate(0, Rotate.X_AXIS);
+    final Rotate ry = new Rotate(0, Rotate.Y_AXIS);
+    final Rotate rz = new Rotate(0, Rotate.Z_AXIS);
+
+    public Xsphere(double size, Color color) {
+        super(size);
+        setMaterial(new PhongMaterial(color));
+        getTransforms().addAll(rz, ry, rx);
+    }
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/simple3dbox/Simple3DBoxApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/simple3dbox/Simple3DBoxApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -36,11 +36,11 @@
 import javafx.scene.Parent;
 import javafx.scene.PerspectiveCamera;
 import javafx.scene.Scene;
+import javafx.scene.SceneAntialiasing;
 import javafx.scene.SubScene;
 import javafx.scene.paint.Color;
 import javafx.scene.paint.PhongMaterial;
 import javafx.scene.shape.Box;
-import javafx.scene.shape.DrawMode;
 import javafx.scene.transform.Rotate;
 import javafx.scene.transform.Translate;
 import javafx.stage.Stage;
@@ -48,30 +48,42 @@
 /**
  * A sample that shows a 3D box and uses a perspective camera for rendering the 
  * scene.
+ * Hint: Switch to Line draw mode to see how cullFace property works.
  *
  * @sampleName 3D Box
  * @preview preview.png
+ * @see javafx.scene.shape.Box
+ * @see javafx.scene.PerspectiveCamera
+ * @see javafx.scene.paint.PhongMaterial
  * @see javafx.scene.paint.Color
  * @see javafx.scene.transform.Rotate
  * @see javafx.scene.transform.Translate
+ * @see javafx.scene.SceneAntialiasing
+ * @see javafx.scene.SubScene
+ * @playground testBox.drawMode
+ * @playground testBox.cullFace
+ * @playground material.diffuseColor
  * @conditionalFeatures SCENE3D
  */
 public class Simple3DBoxApp extends Application {
+    
+    private Box testBox;
+    private PhongMaterial material;
    
     public Parent createContent() throws Exception {
                
         // Box
-        Box testBox = new Box(5, 5, 5);
-        testBox.setMaterial(new PhongMaterial(Color.RED));
-        testBox.setDrawMode(DrawMode.LINE);
+        testBox = new Box(5, 5, 5);
+        
+        material = new PhongMaterial(Color.RED);
+        testBox.setMaterial(material);
         
         // Create and position camera
         PerspectiveCamera camera = new PerspectiveCamera(true);
         camera.getTransforms().addAll(
-              //  new Translate(5, -5, -15),
                 new Rotate(-20, Rotate.Y_AXIS),
                 new Rotate(-20, Rotate.X_AXIS),
-                 new Translate(0, 0, -15));
+                new Translate(0, 0, -15));
         
         // Build the Scene Graph
         Group root = new Group();       
@@ -79,12 +91,11 @@
         root.getChildren().add(testBox);
         
         // Use a SubScene       
-        SubScene subScene = new SubScene(root, 300,300);
-        subScene.setFill(Color.ALICEBLUE);
+        SubScene subScene = new SubScene(root, 300, 300, true, SceneAntialiasing.BALANCED);
+        subScene.setFill(Color.TRANSPARENT);
         subScene.setCamera(camera);
-        Group group = new Group();
-        group.getChildren().add(subScene);
-        return group;
+        
+        return new Group(subScene);
     }
 
     @Override
@@ -97,6 +108,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/xylophone/Cube.java	Mon Dec 02 11:13:02 2013 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2008, 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.graphics3d.xylophone;
-
-import javafx.scene.Group;
-import javafx.scene.paint.Color;
-import javafx.scene.shape.Rectangle;
-import javafx.scene.transform.Rotate;
-
-public class Cube extends Group {
-
-    final Rotate rx = new Rotate(0, Rotate.X_AXIS);
-    final Rotate ry = new Rotate(0, Rotate.Y_AXIS);
-    final Rotate rz = new Rotate(0, Rotate.Z_AXIS);
-
-    public Cube(double size, Color color, double shade) {
-        getTransforms().addAll(rz, ry, rx);
-        // back face
-        Rectangle rec1 = new Rectangle(size, size, color.deriveColor(0.0, 1.0, (1 - 0.5 * shade), 1.0));
-        rec1.setTranslateX(-0.5 * size);
-        rec1.setTranslateY(-0.5 * size);
-        rec1.setTranslateZ(0.5 * size);
-        // bottom face
-        Rectangle rec2 = new Rectangle(size, size, color.deriveColor(0.0, 1.0, (1 - 0.4 * shade), 1.0));
-        rec2.setTranslateX(-0.5 * size);
-        rec2.setTranslateY(0);
-        rec2.setRotationAxis(Rotate.X_AXIS);
-        rec2.setRotate(90);
-        // right face
-        Rectangle rec3 = new Rectangle(size, size, color.deriveColor(0.0, 1.0, (1 - 0.3 * shade), 1.0));
-        rec3.setTranslateX(-1 * size);
-        rec3.setTranslateY(-0.5 * size);
-        rec3.setRotationAxis(Rotate.Y_AXIS);
-        rec3.setRotate(90);
-        // left face
-        Rectangle rec4 = new Rectangle(size, size, color.deriveColor(0.0, 1.0, (1 - 0.2 * shade), 1.0));
-        rec4.setTranslateX(0);
-        rec4.setTranslateY(-0.5 * size);
-        rec4.setRotationAxis(Rotate.Y_AXIS);
-        rec4.setRotate(90);
-        // top face
-        Rectangle rec5 = new Rectangle(size, size, color.deriveColor(0.0, 1.0, (1 - 0.1 * shade), 1.0));
-        rec5.setTranslateX(-0.5 * size);
-        rec5.setTranslateY(-1 * size);
-        rec5.setRotationAxis(Rotate.X_AXIS);
-        rec5.setRotate(90);
-        // front face
-        Rectangle rec6 = new Rectangle(size, size, color);
-        rec6.setTranslateX(-0.5 * size);
-        rec6.setTranslateY(-0.5 * size);
-        rec6.setTranslateZ(-0.5 * size);
-
-        getChildren().addAll(rec1, rec2, rec3, rec4, rec5, rec6);
-    }
-}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/xylophone/XylophoneApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/graphics3d/xylophone/XylophoneApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -31,34 +31,45 @@
  */
 package ensemble.samples.graphics3d.xylophone;
 
-import javafx.animation.Animation;
 import javafx.animation.Interpolator;
 import javafx.animation.KeyFrame;
 import javafx.animation.KeyValue;
 import javafx.animation.Timeline;
 import javafx.application.Application;
-import javafx.event.EventHandler;
 import javafx.scene.Group;
 import javafx.scene.SceneAntialiasing;
 import javafx.scene.Parent;
 import javafx.scene.PerspectiveCamera;
 import javafx.scene.Scene;
 import javafx.scene.SubScene;
-import javafx.scene.input.MouseEvent;
 import javafx.scene.media.AudioClip;
 import javafx.scene.paint.Color;
-import javafx.scene.transform.Rotate;
+import javafx.scene.paint.PhongMaterial;
+import javafx.scene.shape.Box;
 import javafx.stage.Stage;
 import javafx.util.Duration;
 
 /**
- * A sample that demonstrates a xylophone made of 3D cubes.
+ * A sample that demonstrates a xylophone made of 3D cubes. It is animated and
+ * plays sounds when clicked.
  *
  * @sampleName Xylophone
  * @preview preview.png
+ * @see javafx.scene.shape.Box
+ * @see javafx.scene.paint.PhongMaterial
+ * @see javafx.scene.media.AudioClip
+ * @see javafx.scene.PerspectiveCamera
  * @see javafx.scene.transform.Rotate
- * @see javafx.scene.paint.Color
- * @see javafx.scene.PerspectiveCamera
+ * @see javafx.scene.transform.Scale
+ * @see javafx.animation.Timeline
+ * @see javafx.animation.KeyFrame
+ * @see javafx.animation.KeyValue
+ * @see javafx.animation.Interpolator
+ * @see javafx.scene.input.MouseEvent
+ * @see javafx.event.EventHandler
+ * @see javafx.util.Duration
+ * @see javafx.scene.Group
+ * @see javafx.scene.SceneAntialiasing
  * @see javafx.scene.SubScene
  * @conditionalFeatures SCENE3D
  */
@@ -69,9 +80,9 @@
 
     public Parent createContent() {
         Xform sceneRoot = new Xform();
-        sceneRoot.rx.setAngle(225.0);
+        sceneRoot.rx.setAngle(45.0);
         sceneRoot.ry.setAngle(30.0);
-        sceneRoot.setScale(1.2);
+        sceneRoot.setScale(2 * 1.5);
 
         final AudioClip bar1Note =
                 new AudioClip(XylophoneApp.class.getResource("/ensemble/samples/shared-resources/Note1.wav").toString());
@@ -95,140 +106,79 @@
         double xStart = -110.0;
         double xOffset = 30.0;
         double yPos = 25.0;
-        double zPos = 0.0;
         double barWidth = 22.0;
         double barDepth = 7.0;
 
         // Base1
-        Cube base1Cube = new Cube(1.0, new Color(0.2, 0.12, 0.1, 1.0), 1.0);
+        Box base1Cube = new Box(barWidth * 11.5, barDepth * 2.0, 10.0);
+        base1Cube.setMaterial(new PhongMaterial(new Color(0.2, 0.12, 0.1, 1.0)));
         base1Cube.setTranslateX(xStart + 128);
         base1Cube.setTranslateZ(yPos + 20.0);
         base1Cube.setTranslateY(11.0);
-        base1Cube.setScaleX(barWidth * 11.5);
-        base1Cube.setScaleZ(10.0);
-        base1Cube.setScaleY(barDepth * 2.0);
 
         // Base2
-        Cube base2Cube = new Cube(1.0, new Color(0.2, 0.12, 0.1, 1.0), 1.0);
+        Box base2Cube = new Box(barWidth * 11.5, barDepth * 2.0, 10.0);
+        base2Cube.setMaterial(new PhongMaterial(new Color(0.2, 0.12, 0.1, 1.0)));
         base2Cube.setTranslateX(xStart + 128);
         base2Cube.setTranslateZ(yPos - 20.0);
         base2Cube.setTranslateY(11.0);
-        base2Cube.setScaleX(barWidth * 11.5);
-        base2Cube.setScaleZ(10.0);
-        base2Cube.setScaleY(barDepth * 2.0);
 
         // Bar1
-        Cube bar1Cube = new Cube(1.0, Color.PURPLE, 1.0);
+        Box bar1Cube = new Box(barWidth, barDepth, 100.0);
+        bar1Cube.setMaterial(new PhongMaterial(Color.PURPLE));
         bar1Cube.setTranslateX(xStart + 1 * xOffset);
         bar1Cube.setTranslateZ(yPos);
-        bar1Cube.setScaleX(barWidth);
-        bar1Cube.setScaleZ(100.0);
-        bar1Cube.setScaleY(barDepth);
 
         // Bar2
-        Cube bar2Cube = new Cube(1.0, Color.BLUEVIOLET, 1.0);
+        Box bar2Cube = new Box(barWidth, barDepth, 95);
+        bar2Cube.setMaterial(new PhongMaterial(Color.BLUEVIOLET));
         bar2Cube.setTranslateX(xStart + 2 * xOffset);
         bar2Cube.setTranslateZ(yPos);
-        bar2Cube.setScaleX(barWidth);
-        bar2Cube.setScaleZ(95.0);
-        bar2Cube.setScaleY(barDepth);
 
         // Bar3
-        Cube bar3Cube = new Cube(1.0, Color.BLUE, 1.0);
+        Box bar3Cube = new Box(barWidth, barDepth, 90);
+        bar3Cube.setMaterial(new PhongMaterial(Color.BLUE));
         bar3Cube.setTranslateX(xStart + 3 * xOffset);
         bar3Cube.setTranslateZ(yPos);
-        bar3Cube.setScaleX(barWidth);
-        bar3Cube.setScaleZ(90.0);
-        bar3Cube.setScaleY(barDepth);
 
         // Bar4
-        Cube bar4Cube = new Cube(1.0, Color.GREEN, 1.0);
+        Box bar4Cube = new Box(barWidth, barDepth, 85);
+        bar4Cube.setMaterial(new PhongMaterial(Color.GREEN));
         bar4Cube.setTranslateX(xStart + 4 * xOffset);
         bar4Cube.setTranslateZ(yPos);
-        bar4Cube.setScaleX(barWidth);
-        bar4Cube.setScaleZ(85.0);
-        bar4Cube.setScaleY(barDepth);
 
         // Bar5
-        Cube bar5Cube = new Cube(1.0, Color.GREENYELLOW, 1.0);
+        Box bar5Cube = new Box(barWidth, barDepth, 80);
+        bar5Cube.setMaterial(new PhongMaterial(Color.GREENYELLOW));
         bar5Cube.setTranslateX(xStart + 5 * xOffset);
         bar5Cube.setTranslateZ(yPos);
-        bar5Cube.setScaleX(barWidth);
-        bar5Cube.setScaleZ(80.0);
-        bar5Cube.setScaleY(barDepth);
 
         // Bar6
-        Cube bar6Cube = new Cube(1.0, Color.YELLOW, 1.0);
+        Box bar6Cube = new Box(barWidth, barDepth, 75);
+        bar6Cube.setMaterial(new PhongMaterial(Color.YELLOW));
         bar6Cube.setTranslateX(xStart + 6 * xOffset);
         bar6Cube.setTranslateZ(yPos);
-        bar6Cube.setScaleX(barWidth);
-        bar6Cube.setScaleZ(75.0);
-        bar6Cube.setScaleY(barDepth);
 
         // Bar7
-        Cube bar7Cube = new Cube(1.0, Color.ORANGE, 1.0);
+        Box bar7Cube = new Box(barWidth, barDepth, 70);
+        bar7Cube.setMaterial(new PhongMaterial(Color.ORANGE));
         bar7Cube.setTranslateX(xStart + 7 * xOffset);
         bar7Cube.setTranslateZ(yPos);
-        bar7Cube.setScaleX(barWidth);
-        bar7Cube.setScaleZ(70.0);
-        bar7Cube.setScaleY(barDepth);
 
         // Bar8
-        Cube bar8Cube = new Cube(1.0, Color.RED, 1.0);
+        Box bar8Cube = new Box(barWidth, barDepth, 65);
+        bar8Cube.setMaterial(new PhongMaterial(Color.RED));
         bar8Cube.setTranslateX(xStart + 8 * xOffset);
         bar8Cube.setTranslateZ(yPos);
-        bar8Cube.setScaleX(barWidth);
-        bar8Cube.setScaleZ(65.0);
-        bar8Cube.setScaleY(barDepth);
 
-        bar1Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                bar1Note.play();
-            }
-        });
-        bar2Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                bar2Note.play();
-            }
-        });
-        bar3Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                bar3Note.play();
-            }
-        });
-        bar4Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                bar4Note.play();
-            }
-        });
-        bar5Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                bar5Note.play();
-            }
-        });
-        bar6Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                bar6Note.play();
-            }
-        });
-        bar7Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                bar7Note.play();
-            }
-        });
-        bar8Cube.setOnMousePressed(new EventHandler<MouseEvent>() {
-            @Override
-            public void handle(MouseEvent me) {
-                bar8Note.play();
-            }
-        });
+        bar1Cube.setOnMousePressed(t -> bar1Note.play());
+        bar2Cube.setOnMousePressed(t -> bar2Note.play());
+        bar3Cube.setOnMousePressed(t -> bar3Note.play());
+        bar4Cube.setOnMousePressed(t -> bar4Note.play());
+        bar5Cube.setOnMousePressed(t -> bar5Note.play());
+        bar6Cube.setOnMousePressed(t -> bar6Note.play());
+        bar7Cube.setOnMousePressed(t -> bar7Note.play());
+        bar8Cube.setOnMousePressed(t -> bar8Note.play());
 
         rectangleGroup.getChildren().addAll(base1Cube, base2Cube,
                 bar1Cube, bar2Cube, bar3Cube,
@@ -248,32 +198,25 @@
 
         animation2 = new Timeline();
         animation2.getKeyFrames().addAll(new KeyFrame(Duration.ZERO,
-                new KeyValue(sceneRoot.rx.angleProperty(), 200d,
-                Interpolator.TANGENT(Duration.seconds(1.0), 200d,
-                Duration.seconds(1.0), 200d))),
+                new KeyValue(sceneRoot.rx.angleProperty(), 60d,
+                Interpolator.TANGENT(Duration.seconds(1.0), 60d))),
                 new KeyFrame(Duration.seconds(4),
-                new KeyValue(sceneRoot.rx.angleProperty(), 250d,
-                Interpolator.TANGENT(Duration.seconds(1.0), 250d,
-                Duration.seconds(1.0), 250d))),
+                new KeyValue(sceneRoot.rx.angleProperty(), 80d,
+                Interpolator.TANGENT(Duration.seconds(1.0), 80d))),
                 new KeyFrame(Duration.seconds(8),
-                new KeyValue(sceneRoot.rx.angleProperty(), 200d,
-                Interpolator.TANGENT(Duration.seconds(1.0), 200d,
-                Duration.seconds(1.0), 200d))));
-        animation2.setCycleCount(Animation.INDEFINITE);
+                new KeyValue(sceneRoot.rx.angleProperty(), 60d,
+                Interpolator.TANGENT(Duration.seconds(1.0), 60d))));
+        animation2.setCycleCount(Timeline.INDEFINITE);
 
         PerspectiveCamera camera = new PerspectiveCamera();
 
-        SubScene subScene = new SubScene(sceneRoot, 460, 240, true, SceneAntialiasing.BALANCED); 
+        SubScene subScene = new SubScene(sceneRoot, 780 * 1.5, 380 * 1.5, true, SceneAntialiasing.BALANCED);
         subScene.setCamera(camera);
         
         sceneRoot.translateXProperty().bind(subScene.widthProperty().divide(2.2));
-        sceneRoot.translateYProperty().bind(subScene.heightProperty().divide(2));
-        sceneRoot.getTransforms().addAll(new Rotate(180, Rotate.X_AXIS));
+        sceneRoot.translateYProperty().bind(subScene.heightProperty().divide(1.6));
 
-        Group group = new Group();
-        group.getChildren().add(subScene);       
-        
-        return group;
+        return new Group(subScene);
     }
 
     public void play() {
@@ -296,6 +239,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/language/beans/changelistener/ChangeListenerApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/language/beans/changelistener/ChangeListenerApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -62,6 +62,7 @@
  * @see javafx.beans.value.ChangeListener
  * @see javafx.beans.InvalidationListener
  * @see javafx.beans.value.ObservableValue
+ * @embedded
  */
 public class ChangeListenerApp extends Application {
     // Simple filled rectangle
@@ -132,6 +133,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/language/beans/stringbinding/StringBindingApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/language/beans/stringbinding/StringBindingApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -55,6 +55,7 @@
  * @see javafx.beans.binding.StringBinding
  * @see javafx.scene.control.TextField
  * @see javafx.scene.control.Label
+ * @embedded
  */
 public class StringBindingApp extends Application {
 
@@ -110,6 +111,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/language/collections/observablelist/ObservableListApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/language/collections/observablelist/ObservableListApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -61,6 +61,7 @@
  * @see javafx.collections.FXCollections
  * @see javafx.collections.ListChangeListener
  * @see javafx.collections.ObservableList
+ * @embedded
  */
 public class ObservableListApp extends Application {
 
@@ -156,6 +157,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/anchorpane/AnchorPaneApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/anchorpane/AnchorPaneApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -82,6 +82,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/borderpane/BorderPaneApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/borderpane/BorderPaneApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -112,6 +112,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/flowpane/FlowPaneApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/flowpane/FlowPaneApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -81,6 +81,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/gridpane/GridPaneApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/gridpane/GridPaneApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -218,6 +218,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/hbox/HBoxApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/hbox/HBoxApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -73,6 +73,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/stackpane/StackPaneApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/stackpane/StackPaneApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -78,6 +78,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/tilepane/TilePaneApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/tilepane/TilePaneApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -83,6 +83,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/vbox/VBoxApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/layout/vbox/VBoxApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -75,6 +75,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/advancedmedia/AdvancedMediaApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/advancedmedia/AdvancedMediaApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -80,8 +80,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayerApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/alphamediaplayer/AlphaMediaPlayerApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -140,8 +140,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/audioclip/AudioClipApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/audioclip/AudioClipApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -120,6 +120,9 @@
         primaryStage.show();
     }
     
-    /** Java main for when running without JavaFX launcher */
+    /** 
+     * Java main for when running without JavaFX launcher 
+     * @param args command line arguments
+     */
     public static void main(String[] args) { launch(args); }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayerApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/overlaymediaplayer/OverlayMediaPlayerApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -96,8 +96,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayerApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/media/streamingmediaplayer/StreamingMediaPlayerApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -93,8 +93,9 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
     }
-}
\ No newline at end of file
+}
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/cursor/CursorApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/cursor/CursorApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -98,6 +98,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/gestureevent/GestureEventApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/gestureevent/GestureEventApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -241,6 +241,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/keyevent/KeyEventApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/keyevent/KeyEventApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -53,6 +53,7 @@
  * @see javafx.scene.input.KeyCode
  * @see javafx.scene.input.KeyEvent
  * @see javafx.event.EventHandler
+ * @embedded
  */
 public class KeyEventApp extends Application {
 
@@ -123,6 +124,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/keystrokemotion/KeyStrokeMotionApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/keystrokemotion/KeyStrokeMotionApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -64,6 +64,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/mouseevent/MouseEventApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/mouseevent/MouseEventApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -232,6 +232,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/multitouch/MultiTouchApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/events/multitouch/MultiTouchApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -69,6 +69,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/node/customnode/CustomNodeApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/node/customnode/CustomNodeApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -95,6 +95,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/node/nodeproperties/NodePropertiesApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/node/nodeproperties/NodePropertiesApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -53,7 +53,6 @@
  * @playground rectA.opacity (name="Rectangle A Opacity", min=0, max=1)
  * @playground rectB.opacity (name="Rectangle B Opacity", min=0, max=1)
  * @playground rectC.opacity (name="Rectangle C Opacity", min=0, max=1)
- * @embedded
  */
 public class NodePropertiesApp extends Application {
 
@@ -96,6 +95,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/stage/advancedstage/AdvancedStageApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/stage/advancedstage/AdvancedStageApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -181,6 +181,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/stage/stage/StageApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/scenegraph/stage/stage/StageApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -95,6 +95,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/swing/swinginterop/SwingInteropApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/swing/swinginterop/SwingInteropApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -93,6 +93,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/text/bidi/BidiApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/text/bidi/BidiApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -92,6 +92,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/text/textflow/TextFlowApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/text/textflow/TextFlowApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -79,6 +79,7 @@
  * @playground textWorld.translateX (name="World translateX")
  * @playground textWorld.translateY (name="World translateY")
  * @embedded
+ * @highlight
  */
 public class TextFlowApp extends Application {
 
@@ -136,6 +137,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/web/htmleditor/HTMLEditorApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/web/htmleditor/HTMLEditorApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -112,6 +112,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- a/apps/samples/Ensemble8/src/samples/java/ensemble/samples/web/webview/WebViewApp.java	Mon Dec 02 11:13:02 2013 -0800
+++ b/apps/samples/Ensemble8/src/samples/java/ensemble/samples/web/webview/WebViewApp.java	Mon Dec 02 21:25:39 2013 -0800
@@ -108,6 +108,7 @@
 
     /**
      * Java main for when running without JavaFX launcher
+     * @param args command line arguments
      */
     public static void main(String[] args) {
         launch(args);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/samples/build.xml	Mon Dec 02 21:25:39 2013 -0800
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project default="jar" basedir=".">
+
+    <target name="jar">
+        <ant dir="Ensemble8" target="jar" inheritAll="true"/>
+    </target>
+
+    <target name="clean">
+        <ant dir="Ensemble8" target="clean" inheritAll="true"/>
+    </target>
+
+</project>
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/toys/FX8-3DFeatures/src/fx83dfeatures/Camera3D.java	Mon Dec 02 21:25:39 2013 -0800
@@ -0,0 +1,230 @@
+/*
+ * 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 fx83dfeatures;
+
+import com.sun.javafx.geom.Vec3d;
+import com.sun.javafx.geom.Vec3f;
+import javafx.beans.property.DoubleProperty;
+import javafx.beans.property.SimpleDoubleProperty;
+import javafx.geometry.Point3D;
+import javafx.scene.PerspectiveCamera;
+import javafx.scene.transform.Affine;
+
+/**
+ * A movable 3D camera node
+ * The camera looks into positive Z direction
+ */
+public class Camera3D extends PerspectiveCamera {
+    public final Vec3d FORWARD = new Vec3d(0,0,1);
+    public final Vec3d UP = new Vec3d(0,-1,0);
+    public final Vec3d RIGHT = new Vec3d(1,0,0);
+
+    private final Affine transform = new Affine();
+
+    private final DoubleProperty upX = new SimpleDoubleProperty(0){
+        @Override protected void invalidated() { updateLookup(); }
+    };
+    public final double getUpX() { return upX.getValue(); }
+    public final void setUpX(double value) { upX.setValue(value); }
+    public final DoubleProperty upXModel() { return upX; }
+
+    private final DoubleProperty upY = new SimpleDoubleProperty(-1){
+        @Override protected void invalidated() { updateLookup(); }
+    };
+    public final double getUpY() { return upY.getValue(); }
+    public final void setUpY(double value) { upY.setValue(value); }
+    public final DoubleProperty upYModel() { return upY; }
+
+    private final DoubleProperty upZ = new SimpleDoubleProperty(0){
+        @Override protected void invalidated() { updateLookup(); }
+    };
+    public final double getUpZ() { return upZ.getValue(); }
+    public final void setUpZ(double value) { upZ.setValue(value); }
+    public final DoubleProperty upZModel() { return upZ; }
+
+    private final DoubleProperty targetX = new SimpleDoubleProperty(0){
+        @Override protected void invalidated() { updateLookup(); }
+    };
+    public final double getTargetX() { return targetX.getValue(); }
+    public final void setTargetX(double value) { targetX.setValue(value); }
+    public final DoubleProperty targetXModel() { return targetX; }
+
+    private final DoubleProperty targetY = new SimpleDoubleProperty(0){
+        @Override protected void invalidated() { updateLookup(); }
+    };
+    public final double getTargetY() { return targetY.getValue(); }
+    public final void setTargetY(double value) { targetY.setValue(value); }
+    public final DoubleProperty targetYModel() { return targetY; }
+
+    private final DoubleProperty targetZ = new SimpleDoubleProperty(1){
+        @Override protected void invalidated() { updateLookup(); }
+    };
+    public final double getTargetZ() { return targetZ.getValue(); }
+    public final void setTargetZ(double value) { targetZ.setValue(value); }
+    public final DoubleProperty targetZModel() { return targetZ; }
+
+    private final DoubleProperty posX = new SimpleDoubleProperty(0){
+        @Override protected void invalidated() { updateLookup(); }
+    };
+    public final double getPosX() { return posX.getValue(); }
+    public final void setPosX(double value) { posX.setValue(value); }
+    public final DoubleProperty posXModel() { return posX; }
+
+    private final DoubleProperty posY = new SimpleDoubleProperty(0){
+        @Override protected void invalidated() { updateLookup(); }
+    };
+    public final double getPosY() { return posY.getValue(); }
+    public final void setPosY(double value) { posY.setValue(value); }
+    public final DoubleProperty posYModel() { return posY; }
+
+    private final DoubleProperty posZ = new SimpleDoubleProperty(0){
+        @Override protected void invalidated() { updateLookup(); }
+    };
+    public final double getPosZ() { return posZ.getValue(); }
+    public final void setPosZ(double value) { posZ.setValue(value); }
+    public final DoubleProperty posZModel() { return posZ; }
+    
+    public Camera3D() {
+        super(true);
+        getTransforms().add(transform);
+        updateLookup();
+    }
+
+    private final Vec3f tm[] = new Vec3f[]{new Vec3f(),new Vec3f(),new Vec3f(),};
+    
+    private void updateLookup() {
+        Vec3f pos = new Vec3f((float)getPosX(), (float)getPosY(), (float)getPosZ());
+        Vec3f target = new Vec3f((float)getTargetX(), (float)getTargetY(), (float)getTargetZ());
+        Vec3f up = new Vec3f((float)getUpX(), (float)getUpY(), (float)getUpZ());
+        tm[2].sub(target, pos);         // z looks to the target
+        tm[1].set(-up.x, -up.y, -up.z); // y looks down
+        tm[0].cross(tm[1], tm[2]);      // x = y ^ z;
+        tm[1].cross(tm[2], tm[0]);      // y = z ^ x
+
+        for (int i=0; i!=3; ++i) {
+            tm[i].normalize();
+        }
+        //Vec3f pos, Vec3f tm[], Affine tma) {
+        transform.setMxx(tm[0].x); transform.setMxy(tm[1].x); transform.setMxz(tm[2].x);
+        transform.setMyx(tm[0].y); transform.setMyy(tm[1].y); transform.setMyz(tm[2].y);
+        transform.setMzx(tm[0].z); transform.setMzy(tm[1].z); transform.setMzz(tm[2].z);
+        transform.setTx (pos.x);   transform.setTy(pos.y);    transform.setTz(pos.z);
+    }
+
+    public Affine getTransform() {
+        return transform;
+    }
+
+    public void setPos(double x, double y, double z) {
+        setPosX(x);
+        setPosY(y);
+        setPosZ(z);
+    }
+    
+    public void setTarget(double x, double y, double z) {
+        setTargetX(x);
+        setTargetY(y);
+        setTargetZ(z);
+    }
+    
+    public void setUp(double x, double y, double z) {
+        setUpX(x);
+        setUpY(y);
+        setUpZ(z);
+    }
+    
+    /*
+     * returns 3D direction from the Camera position to the mouse
+     * in the Scene space 
+     */
+    
+    public Vec3d unProjectDirection(double sceneX, double sceneY, double sWidth, double sHeight) {
+        Vec3d vMouse = null;
+        
+        if (isVerticalFieldOfView()) {
+            // TODO: implement for Vfov
+        } else {
+            double tanHFov = Math.tan(Math.toRadians(getFieldOfView()) * 0.5f);
+            vMouse = new Vec3d(2*sceneX/sWidth-1, 2*sceneY/sWidth-sHeight/sWidth, 1);
+            vMouse.x *= tanHFov;
+            vMouse.y *= tanHFov;
+        }
+
+        Vec3d result = localToSceneDirection(vMouse, new Vec3d());
+        result.normalize();
+        return result;
+    }
+    
+    public Vec3d getPosition() {
+        return new Vec3d(getPosX(), getPosY(), getPosZ());
+    }
+
+    public Vec3d getTarget() {
+        return new Vec3d(getTargetX(), getTargetY(), getTargetZ());
+    }
+    
+    public Vec3d localToScene(Vec3d pt, Vec3d result) {
+        Point3D res = localToParentTransformProperty().get().transform(pt.x, pt.y, pt.z);
+        if (getParent() != null) {
+            res = getParent().localToSceneTransformProperty().get().transform(res);
+        }
+        result.set(res.getX(), res.getY(), res.getZ());
+        return result;
+    }
+    
+    public Vec3d localToSceneDirection(Vec3d dir, Vec3d result) {
+        localToScene(dir, result);
+        result.sub(localToScene(new Vec3d(0, 0, 0), new Vec3d()));
+        return result;
+    }
+    
+    public Vec3d getForward() {
+        Vec3d res = localToSceneDirection(FORWARD, new Vec3d());
+        res.normalize();
+        return res;
+    }
+
+    public Vec3d getUp() {
+        Vec3d res = localToSceneDirection(UP, new Vec3d());
+        res.normalize();
+        return res;
+    }
+
+    public Vec3d getRight() {
+        Vec3d res = localToSceneDirection(RIGHT, new Vec3d());
+        res.normalize();
+        return res;
+    }
+    
+    @Override
+    public String toString() {
+        return "camera3D.setPos(" + posX.get() + ", " + posY.get() + ", " 
+                + posZ.get() + ");\n"
+                + "camera3D.setTarget(" + targetX.get() + ", " 
+                + targetY.get() + ", " + targetZ.get() + ");\n"
+                + "camera3D.setUp(" + upX.get() + ", " + upY.get() + ", " 
+                + upZ.get() + ");";
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/apps/toys/FX8-3DFeatures/src/fx83dfeatures/CameraController.java	Mon Dec 02 21:25:39 2013 -0800
@@ -0,0 +1,454 @@
+/*
+ * 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 fx83dfeatures;
+
+import com.sun.javafx.geom.Vec2d;
+import com.sun.javafx.geom.Vec3d;
+import javafx.animation.AnimationTimer;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.event.EventHandler;
+import javafx.geometry.Point3D;
+import javafx.scene.Node;
+import javafx.scene.Scene;
+import javafx.scene.SubScene;
+import javafx.scene.input.KeyEvent;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.transform.Rotate;
+
+/**
+ * This is camera controller to use with new 3D API.
+ *
+ */
+public class CameraController {
+
+    private Camera3D camera;
+    private Node node;
+    private int up, down, left, right,
+            forward, back; // key pressed
+    private double initialSpeed = 5;
+    private double maxSpeed = 200;
+    private double speed = initialSpeed;
+    private double orbitSpeed = 1.0;
+    private double previousX, previousY;
+    private double yaw = 0.0022;
+    private double pitch = -0.0022;
+    private double maxPitch = 0.95;
+    private AnimationTimer moveTimer;
+    private Rotate rotateX;
+    private Rotate rotateY;
+
+    private void handleKeyEvent(KeyEvent t) {
+        if (t.getEventType() == KeyEvent.KEY_PRESSED) {
+            handleKeyEvent(t, true);
+        } else if (t.getEventType() == KeyEvent.KEY_RELEASED) {
+            handleKeyEvent(t, false);
+        }
+        // skip other event types
+    }
+    
+    private void handleMouseEvent(MouseEvent t) {
+        if (t.getEventType() == MouseEvent.MOUSE_PRESSED) {
+            handleMousePress(t);
+        } else if (t.getEventType() == MouseEvent.MOUSE_DRAGGED) {
+            Vec2d d = getDragDelta(t);
+            double speedModifier = getSpeedModifier(t);
+            switch (t.getButton()) {
+                case PRIMARY:
+                    // Alt + LMB = orbit
+                    handlePrimaryMouseDrag(t, d, speedModifier);
+                    break;
+                case MIDDLE:
+                    // Alt + MMB = pan/track
+                    handleMiddleMouseDrag(t, d, speedModifier);
+                    break;
+                case SECONDARY:
+                    // Alt + RMB = zoom
+                    handleSecondaryMouseDrag(t, d, speedModifier);
+                    break;
+                default:
+                    throw new AssertionError();
+            }
+        }
+    }
+
+    private void setEventHandlers(Scene scene) {
+        scene.addEventHandler(KeyEvent.ANY, k -> handleKeyEvent(k));
+        scene.addEventHandler(MouseEvent.ANY, m -> handleMouseEvent(m));
+    }
+
+    private void setEventHandlers(SubScene subScene) {
+        subScene.addEventHandler(KeyEvent.ANY, k -> handleKeyEvent(k));
+        subScene.addEventHandler(MouseEvent.ANY, m -> handleMouseEvent(m));
+    }
+
+    public CameraController(Camera3D camera) {
+        this.camera = camera;
+
+        new AnimationTimer() {
+            long now = 0;
+
+            @Override
+            public void handle(long l) {
+                if (now == 0) {
+                    now = l;
+                } else {
+                    double dt = (l - now) * 1e-9;
+                    now = l;
+                    update(dt);
+                }
+            }
+        }.start();
+    }
+
+    public CameraController(Camera3D camera, Scene scene) {
+        this(camera);
+        setEventHandlers(scene);
+    }
+
+    public CameraController(Camera3D camera, SubScene subScene) {
+        this(camera);
+        setEventHandlers(subScene);
+    }
+
+    private boolean isNotMoving() {
+        return forward - back == 0 && right - left == 0 && up - down == 0;
+    }
+
+    private void update(double dt) {
+        if (isNotMoving()) {
+            return;
+        }
+        Vec3d shiftForward = camera.getForward();
+        shiftForward.mul(forward - back);
+        Vec3d shiftRight = camera.getRight();
+        shiftRight.mul(right - left);
+        Vec3d shiftUp = camera.getUp();
+        shiftUp.mul(up - down);
+        Vec3d shift = new Vec3d(shiftForward);
+        shift.add(shiftRight);
+        shift.add(shiftUp);
+        shift.mul(speed * dt);
+        shiftCamera(shift);
+    }
+
+    private void handleKeyEvent(KeyEvent event, boolean state) {
+        int pressed = state ? 1 : 0;
+        boolean wasNotMoving = isNotMoving();
+        switch (event.getCode()) {
+            case I:
+                if (state) {
+                    System.out.println(camera);
+                }
+                break;
+            case Z:
+                if (state) {
+                    camera.setTarget(0.0, 0.0, 0.0);
+                }
+                break;
+            case W:
+            case NUMPAD8:
+            case UP:
+                this.forward = pressed;
+                break;
+            case A:
+            case Q:
+            case NUMPAD4:
+            case LEFT:
+                this.left = pressed;
+                break;
+            case S:
+            case MINUS:
+            case NUMPAD2:
+            case NUMPAD5:
+            case DOWN:
+                this.back = pressed;
+                break;
+            case D:
+            case E:
+            case NUMPAD6:
+            case RIGHT:
+                this.right = pressed;
+                break;
+            case R:
+            case T:
+            case NUMPAD9:
+            case PAGE_UP:
+                this.up = pressed;
+                break;
+            case G:
+            case NUMPAD3:
+            case PAGE_DOWN:
+                this.down = pressed;
+                break;
+            case DIGIT1:
+                speed = 5;
+                break;
+            case DIGIT2:
+                speed = 10;
+                break;
+            case DIGIT3:
+                speed = 20;
+                break;
+            case DIGIT4:
+                speed = 40;
+                break;
+            case DIGIT5:
+                speed = 60;
+                break;
+            case DIGIT6:
+                speed = 80;
+                break;
+            case DIGIT7:
+                speed = 100;
+                break;
+            case DIGIT8:
+                speed = 120;
+                break;
+            case DIGIT9:
+                speed = 140;
+                break;
+            case DIGIT0:
+                speed = 160;
+                break;
+            case O:
+                orbitSpeed = 1.0;
+                break;
+            case OPEN_BRACKET:
+                //camera.setMinZ(1.0);
+                break;
+            case CLOSE_BRACKET:
+                //camera.setMaxZ(10000.0);
+                break;
+        }
+        if (isNotMoving()) {
+            if (moveTimer != null) {
+                moveTimer.stop();
+                moveTimer = null;
+                speed = initialSpeed;
+            }
+        } else if (wasNotMoving) {
+            moveTimer = new AnimationTimer() {
+                long now = 0;
+
+                @Override
+                public void handle(long l) {
+                    if (now == 0) {
+                        now = l;
+                    } else {
+                        double age = (l - now) * 1e-9;
+                        if (age > 1.0) {
+                            speed = initialSpeed * Math.pow(2, age);
+                            if (speed > maxSpeed) {
+                                speed = maxSpeed;
+                            }
+                        }
+                    }
+                }
+            };
+            moveTimer.start();
+        }
+        event.consume();
+    }
+
+    private Vec2d getDragDelta(MouseEvent event) {
+        Vec2d res = new Vec2d();
+        res.x = event.getSceneX() - previousX;
+        res.y = event.getSceneY() - previousY;
+        previousX = event.getSceneX();
+        previousY = event.getSceneY();
+        return res;
+    }
+
+    private double getSpeedModifier(MouseEvent event) {
+        if (event.isShiftDown()) {
+            return 4.0;
+        } else if (event.isControlDown()) {
+            // We're going to use control for some other purpose
+            // than a speed modifier, at least for now
+            // return 0.25;
+            return 1.0;
+        } else {
+            return 1.0;
+        }
+    }
+
+    private void handleMousePress(MouseEvent event) {
+        previousX = event.getSceneX();
+        previousY = event.getSceneY();
+        event.consume();
+    }
+
+    private void handlePrimaryMouseDrag(MouseEvent event, Vec2d d, double localFactor) {
+        if (event.isAltDown()) {
+            orbit(d, localFactor);
+            event.consume();
+        } else if (node != null) {
+            rotateObject(d, localFactor);
+        }
+    }
+
+    private void handleMiddleMouseDrag(MouseEvent event, Vec2d d, double localFactor) {
+        if (event.isAltDown()) {
+            track(d, localFactor);
+            event.consume();
+        }
+    }
+
+    private void handleSecondaryMouseDrag(MouseEvent event, Vec2d d, double localFactor) {
+        if (event.isAltDown()) {
+            if (!event.isControlDown()) {
+                // zoom actually change distance to lookat target
+                zoom(d, localFactor);
+            } else {
+                // actually move camera forward/backward
+                move(d, localFactor);
+            }
+        } else {
+            rotate(d, localFactor);
+        }
+        event.consume();
+    }
+
+    private double getLookatDist() {
+        Vec3d target = camera.getTarget();
+        target.sub(camera.getPosition());
+        return target.length();
+    }
+
+    private void shiftCamera(Vec3d shift) {
+        Vec3d pos = camera.getPosition();
+        Vec3d target = camera.getTarget();
+        pos.add(shift);
+        target.add(shift);
+        camera.setPos(pos.x, pos.y, pos.z);
+        camera.setTarget(target.x, target.y, target.z);
+    }
+
+    static private double clamp(double val, double min, double max) {
+        return val > max ? max : val < min ? min : val;
+    }
+
+    // get direction vector from (asimut, height)
+    // 0 < asimut < 2
+    // -1 < height < 1
+    static private Vec3d globus(Vec2d ah) {
+        double ra = ah.x * Math.PI;
+        double rh = ah.y * Math.PI * 0.5;
+        double cosH = Math.cos(rh);
+        return new Vec3d(Math.sin(ra) * cosH, Math.sin(rh), Math.cos(ra) * cosH);
+    }
+
+    static private Vec2d antiGlobus(Vec3d globus) {
+        double rh = Math.asin(globus.y);
+        double ra = Math.atan2(globus.x, globus.z);
+        return new Vec2d(ra / Math.PI, rh * 2 / Math.PI);
+    }
+
+    private void orbit(Vec2d d, double speedFactor) {
+        Vec3d lookFromTarget = camera.getForward();
+        lookFromTarget.mul(-1.0); // look from target to pos
+        Vec2d ah = antiGlobus(lookFromTarget);
+        ah.x += d.x * yaw * speedFactor;
+        // -abs(pitch) - don't invert mouse when orbit?
+        ah.y -= d.y * Math.abs(pitch) * speedFactor;
+        ah.y = clamp(ah.y, -maxPitch, maxPitch);
+        lookFromTarget = globus(ah);
+        lookFromTarget.mul(getLookatDist());
<