changeset 41:a8fbe90bc84e

Some javadoc. Missed tests Fixed dependencies in browser and test
author Alexandre (Shura) Iline <alexandre.iline@sun.com>
date Wed, 27 Jun 2012 12:34:02 +0400
parents 8310175a35ce
children be861684d20d
files bigapps/EnsembleTest/nbproject/build-impl.xml bigapps/EnsembleTest/nbproject/genfiles.properties bigapps/EnsembleTest/nbproject/project.properties bigapps/EnsembleTest/nbproject/project.xml tools/Jemmy/JemmyFX/build.xml tools/Jemmy/JemmyFX/depend.properties tools/Jemmy/JemmyFX/samples/org/jemmy/samples/index.html tools/Jemmy/JemmyFX/src/org/jemmy/fx/AbstractNodeHierarchy.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/AppExecutor.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByID.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByObject.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByStyleClass.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByText.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByTitleSceneLookup.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByWindowType.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/CriteriaList.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/FXClickFocus.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/FXRelativeCoordinateLookup.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/Lookups.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeHierarchy.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeParent.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeParentImpl.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeWrap.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeWrapper.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/QueueExecutor.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/RelativeMouse.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/Root.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/SceneList.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/SceneNodeHierarchy.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/SceneWrap.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/SceneWrapper.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/TextWrap.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/WindowElement.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/control/AbstractItemsParent.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/control/TabWrap.java tools/Jemmy/JemmyFX/src/org/jemmy/fx/package.html tools/Jemmy/JemmyFX/test/org/jemmy/fx/MultiSceneTest.java tools/Jemmy/JemmyFX/test/org/jemmy/fx/TwoSceneApp.java tools/Jemmy/JemmyFXBrowser/nbproject/build-impl.xml tools/Jemmy/JemmyFXBrowser/nbproject/genfiles.properties tools/Jemmy/JemmyFXBrowser/nbproject/project.properties tools/Jemmy/JemmyFXBrowser/nbproject/project.xml tools/Jemmy/README
diffstat 43 files changed, 660 insertions(+), 180 deletions(-) [+]
line wrap: on
line diff
--- a/bigapps/EnsembleTest/nbproject/build-impl.xml	Mon Jun 25 17:24:10 2012 +0400
+++ b/bigapps/EnsembleTest/nbproject/build-impl.xml	Wed Jun 27 12:34:02 2012 +0400
@@ -54,43 +54,6 @@
         <property file="nbproject/project.properties"/>
     </target>
     <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property" name="-do-init">
-        <j2seproject1:property name="platform.home" value="platforms.${platform.active}.home"/>
-        <j2seproject1:property name="platform.bootcp" value="platforms.${platform.active}.bootclasspath"/>
-        <j2seproject1:property name="platform.compiler" value="platforms.${platform.active}.compile"/>
-        <j2seproject1:property name="platform.javac.tmp" value="platforms.${platform.active}.javac"/>
-        <condition property="platform.javac" value="${platform.home}/bin/javac">
-            <equals arg1="${platform.javac.tmp}" arg2="$${platforms.${platform.active}.javac}"/>
-        </condition>
-        <property name="platform.javac" value="${platform.javac.tmp}"/>
-        <j2seproject1:property name="platform.java.tmp" value="platforms.${platform.active}.java"/>
-        <condition property="platform.java" value="${platform.home}/bin/java">
-            <equals arg1="${platform.java.tmp}" arg2="$${platforms.${platform.active}.java}"/>
-        </condition>
-        <property name="platform.java" value="${platform.java.tmp}"/>
-        <j2seproject1:property name="platform.javadoc.tmp" value="platforms.${platform.active}.javadoc"/>
-        <condition property="platform.javadoc" value="${platform.home}/bin/javadoc">
-            <equals arg1="${platform.javadoc.tmp}" arg2="$${platforms.${platform.active}.javadoc}"/>
-        </condition>
-        <property name="platform.javadoc" value="${platform.javadoc.tmp}"/>
-        <condition property="platform.invalid" value="true">
-            <or>
-                <contains string="${platform.javac}" substring="$${platforms."/>
-                <contains string="${platform.java}" substring="$${platforms."/>
-                <contains string="${platform.javadoc}" substring="$${platforms."/>
-            </or>
-        </condition>
-        <fail unless="platform.home">Must set platform.home</fail>
-        <fail unless="platform.bootcp">Must set platform.bootcp</fail>
-        <fail unless="platform.java">Must set platform.java</fail>
-        <fail unless="platform.javac">Must set platform.javac</fail>
-        <fail if="platform.invalid">
- The J2SE Platform is not correctly set up.
- Your active platform is: ${platform.active}, but the corresponding property "platforms.${platform.active}.home" is not found in the project's properties files. 
- Either open the project in the IDE and setup the Platform with the same name or add it manually.
- For example like this:
-     ant -Duser.properties.file=&lt;path_to_property_file&gt; jar (where you put the property "platforms.${platform.active}.home" in a .properties file)
-  or ant -Dplatforms.${platform.active}.home=&lt;path_to_JDK_home&gt; jar (where no properties file is used) 
-  </fail>
         <available file="${manifest.file}" property="manifest.available"/>
         <condition property="splashscreen.available">
             <and>
@@ -224,6 +187,15 @@
         <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
             <length length="0" string="${endorsed.classpath}" when="greater"/>
         </condition>
+        <condition else="false" property="jdkBug6558476">
+            <and>
+                <matches pattern="1\.[56]" string="${java.specification.version}"/>
+                <not>
+                    <os family="unix"/>
+                </not>
+            </and>
+        </condition>
+        <property name="javac.fork" value="${jdkBug6558476}"/>
         <property name="jar.index" value="false"/>
         <property name="jar.index.metainf" value="${jar.index}"/>
         <property name="copylibs.rebase" value="true"/>
@@ -271,7 +243,7 @@
                 <property location="${build.dir}/empty" name="empty.dir"/>
                 <mkdir dir="${empty.dir}"/>
                 <mkdir dir="@{apgeneratedsrcdir}"/>
-                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" executable="${platform.javac}" fork="yes" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
                     <src>
                         <dirset dir="@{gensrcdir}" erroronmissingdir="false">
                             <include name="*"/>
@@ -310,7 +282,7 @@
             <sequential>
                 <property location="${build.dir}/empty" name="empty.dir"/>
                 <mkdir dir="${empty.dir}"/>
-                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" executable="${platform.javac}" fork="yes" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
                     <src>
                         <dirset dir="@{gensrcdir}" erroronmissingdir="false">
                             <include name="*"/>
@@ -367,7 +339,7 @@
             <attribute default="**" name="testincludes"/>
             <sequential>
                 <property name="junit.forkmode" value="perTest"/>
-                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" jvm="${platform.java}" showoutput="true" tempdir="${build.dir}">
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
                     <batchtest todir="${build.test.results.dir}">
                         <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
                             <filename name="@{testincludes}"/>
@@ -444,9 +416,6 @@
                     <classpath>
                         <path path="@{classpath}"/>
                     </classpath>
-                    <bootclasspath>
-                        <path path="${platform.bootcp}"/>
-                    </bootclasspath>
                 </nbjpdastart>
             </sequential>
         </macrodef>
@@ -462,9 +431,7 @@
         </macrodef>
     </target>
     <target name="-init-debug-args">
-        <exec executable="${platform.java}" outputproperty="version-output">
-            <arg value="-version"/>
-        </exec>
+        <property name="version-output" value="java version &quot;${ant.java.version}"/>
         <condition property="have-jdk-older-than-1.4">
             <or>
                 <contains string="${version-output}" substring="java version &quot;1.0"/>
@@ -489,7 +456,7 @@
             <attribute default="${debug.classpath}" name="classpath"/>
             <element name="customize" optional="true"/>
             <sequential>
-                <java classname="@{classname}" dir="${work.dir}" fork="true" jvm="${platform.java}">
+                <java classname="@{classname}" dir="${work.dir}" fork="true">
                     <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
                     <jvmarg line="${debug-args-line}"/>
                     <jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
@@ -514,7 +481,7 @@
             <attribute default="${run.classpath}" name="classpath"/>
             <element name="customize" optional="true"/>
             <sequential>
-                <java classname="@{classname}" dir="${work.dir}" fork="true" jvm="${platform.java}">
+                <java classname="@{classname}" dir="${work.dir}" fork="true">
                     <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
                     <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
                     <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
@@ -611,6 +578,20 @@
         <propertyfile file="${built-jar.properties}">
             <entry key="${basedir}" value=""/>
         </propertyfile>
+        <antcall target="-maybe-call-dep">
+            <param name="call.built.properties" value="${built-jar.properties}"/>
+            <param location="${project.GlassImage}" name="call.subproject"/>
+            <param location="${project.GlassImage}/build.xml" name="call.script"/>
+            <param name="call.target" value="jar"/>
+            <param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
+        </antcall>
+        <antcall target="-maybe-call-dep">
+            <param name="call.built.properties" value="${built-jar.properties}"/>
+            <param location="${project.GlassRobot}" name="call.subproject"/>
+            <param location="${project.GlassRobot}/build.xml" name="call.script"/>
+            <param name="call.target" value="jar"/>
+            <param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
+        </antcall>
     </target>
     <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
     <target depends="init" name="-check-automatic-build">
@@ -697,7 +678,7 @@
             <path path="${run.classpath}"/>
             <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
         </pathconvert>
-        <echo level="info">${platform.java} -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>
+        <echo level="info">java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>
     </target>
     <target depends="init" if="do.archive" name="-do-jar-with-libraries-create-manifest" unless="manifest.available">
         <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
@@ -724,7 +705,7 @@
         <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
         <echo level="info">To run this application from the command line without Ant, try:</echo>
         <property location="${dist.jar}" name="dist.jar.resolved"/>
-        <echo level="info">${platform.java} -jar "${dist.jar.resolved}"</echo>
+        <echo level="info">java -jar "${dist.jar.resolved}"</echo>
     </target>
     <target depends="-do-jar-with-libraries-pack" if="do.archive" name="-do-jar-with-libraries-delete-manifest">
         <delete>
@@ -882,7 +863,7 @@
                 </not>
             </and>
         </condition>
-        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" executable="${platform.javadoc}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
+        <javadoc additionalparam="${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
             <classpath>
                 <path path="${javac.classpath}"/>
             </classpath>
@@ -1057,6 +1038,20 @@
         <propertyfile file="${built-clean.properties}">
             <entry key="${basedir}" value=""/>
         </propertyfile>
+        <antcall target="-maybe-call-dep">
+            <param name="call.built.properties" value="${built-clean.properties}"/>
+            <param location="${project.GlassImage}" name="call.subproject"/>
+            <param location="${project.GlassImage}/build.xml" name="call.script"/>
+            <param name="call.target" value="clean"/>
+            <param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
+        </antcall>
+        <antcall target="-maybe-call-dep">
+            <param name="call.built.properties" value="${built-clean.properties}"/>
+            <param location="${project.GlassRobot}" name="call.subproject"/>
+            <param location="${project.GlassRobot}/build.xml" name="call.script"/>
+            <param name="call.target" value="clean"/>
+            <param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
+        </antcall>
     </target>
     <target depends="init" name="-do-clean">
         <delete dir="${build.dir}"/>
--- a/bigapps/EnsembleTest/nbproject/genfiles.properties	Mon Jun 25 17:24:10 2012 +0400
+++ b/bigapps/EnsembleTest/nbproject/genfiles.properties	Wed Jun 27 12:34:02 2012 +0400
@@ -3,6 +3,6 @@
 build.xml.stylesheet.CRC32=28e38971@1.38.3.45
 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
 # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=ed2b197b
-nbproject/build-impl.xml.script.CRC32=d59d8ec7
-nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46
+nbproject/build-impl.xml.data.CRC32=2fabf465
+nbproject/build-impl.xml.script.CRC32=0d44b7d5
+nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.3.46
--- a/bigapps/EnsembleTest/nbproject/project.properties	Mon Jun 25 17:24:10 2012 +0400
+++ b/bigapps/EnsembleTest/nbproject/project.properties	Wed Jun 27 12:34:02 2012 +0400
@@ -43,14 +43,16 @@
     ${file.reference.JemmyBrowser.jar}:\
     ${file.reference.JemmyCore.jar}:\
     ${file.reference.JemmyFX.jar}:\
+    ${reference.GlassImage.jar}:\
+    ${reference.GlassRobot.jar}:\
     ${file.reference.JemmyFXBrowser.jar}
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
 javac.processorpath=\
     ${javac.classpath}
-javac.source=1.5
-javac.target=1.5
+javac.source=1.6
+javac.target=1.6
 javac.test.classpath=\
     ${javac.classpath}:\
     ${build.classes.dir}:\
@@ -73,7 +75,11 @@
 manifest.file=manifest.mf
 meta.inf.dir=${src.dir}/META-INF
 mkdist.disabled=false
-platform.active=JDK_1.7_x86
+platform.active=default_platform
+project.GlassImage=../../tools/Jemmy/GlassImage
+project.GlassRobot=../../tools/Jemmy/GlassRobot
+reference.GlassImage.jar=${project.GlassImage}/dist/GlassImage.jar
+reference.GlassRobot.jar=${project.GlassRobot}/dist/GlassRobot.jar
 run.classpath=\
     ${javac.classpath}:\
     ${build.classes.dir}
--- a/bigapps/EnsembleTest/nbproject/project.xml	Mon Jun 25 17:24:10 2012 +0400
+++ b/bigapps/EnsembleTest/nbproject/project.xml	Wed Jun 27 12:34:02 2012 +0400
@@ -4,7 +4,6 @@
     <configuration>
         <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
             <name>EnsembleTest</name>
-            <explicit-platform explicit-source-supported="true"/>
             <source-roots>
                 <root id="src.dir"/>
             </source-roots>
@@ -12,6 +11,23 @@
                 <root id="test.src.dir"/>
             </test-roots>
         </data>
-        <references xmlns="http://www.netbeans.org/ns/ant-project-references/1"/>
+        <references xmlns="http://www.netbeans.org/ns/ant-project-references/1">
+            <reference>
+                <foreign-project>GlassImage</foreign-project>
+                <artifact-type>jar</artifact-type>
+                <script>build.xml</script>
+                <target>jar</target>
+                <clean-target>clean</clean-target>
+                <id>jar</id>
+            </reference>
+            <reference>
+                <foreign-project>GlassRobot</foreign-project>
+                <artifact-type>jar</artifact-type>
+                <script>build.xml</script>
+                <target>jar</target>
+                <clean-target>clean</clean-target>
+                <id>jar</id>
+            </reference>
+        </references>
     </configuration>
 </project>
--- a/tools/Jemmy/JemmyFX/build.xml	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/build.xml	Wed Jun 27 12:34:02 2012 +0400
@@ -31,6 +31,7 @@
     <property name="javafx.lib.dir" location="lib/javafx"/>
     <property name="test.includes" value="**/*Sample.java"/>
     <property name="javac.includes" value="${test.includes}"/>
+    <property name="docks.dir" location="docks"/>
     <target name="jar-full" depends="jar">
         <property name="jar.name" location="${basedir}/dist/JemmyJCFull.jar"/>
         <jar destfile="${jar.name}" filesetmanifest="merge">
@@ -44,16 +45,15 @@
         <delete dir="${javafx.lib.dir}" failonerror="false"/>
     </target>
     <target name="-post-clean">
-        <delete dir="${basedir}/docks" failonerror="false"/>
+        <delete dir="${docks.dir}" failonerror="false"/>
     </target>
     <target name="-post-init" depends="copy-javafx,copy-jemmy-libs"/>
     <target name="-pre-compile" depends="copy-javafx,copy-jemmy-libs">
         <delete file="${basedir}/build/classes/org/jemmy/fx/jemmy.properties" failonerror="false"/>
-        <!--delete dir="${basedir}/docks" failonerror="false"/-->
-        <mkdir dir="${basedir}/docks"/>
+        <mkdir dir="${docks.dir}"/>
     </target>
     <target name="-post-compile">
-        <javac srcdir="${basedir}/docks" destdir="${build.classes.dir}" classpath="${javac.classpath}"/>
+        <javac srcdir="${docks.dir}" destdir="${build.classes.dir}" classpath="${javac.classpath}"/>
         <echo message="Copying prop file"/>
         <copy file="src/org/jemmy/fx/jemmy.properties" tofile="${basedir}/build/classes/org/jemmy/fx/jemmy.properties"/>
         <tstamp/>
@@ -68,9 +68,9 @@
     <target name="copy-jemmy-libs" depends="check-jemmy-libs,read-jemmy-core-version"
             unless="no.need.to.copy.jemmy.libs">
         <mkdir dir="${jemmy.lib.dir}"/>
-        <property name="jemmy.download.url" value="http://java.net/projects/jemmy/downloads/download"/>
-        <get src="${jemmy.download.url}/jemmy.jar" dest="${jemmy.lib.dir}"/>
-        <property name="dist.url" value="${jemmy.download.url}/dist/${jemmy.core.version}"/>
+        <property name="jemmy.download.url" value="http://jemmy.java.net/dist"/>
+        <property name="dist.url" value="${jemmy.download.url}/${jemmy.core.version}"/>
+        <!--get src="${dist.url}/jemmy.jar" dest="${jemmy.lib.dir}"/-->
         <get src="${dist.url}/JemmyCore.jar" dest="${jemmy.lib.dir}"/>
         <get src="${dist.url}/JemmyAWTInput.jar" dest="${jemmy.lib.dir}"/>
         <get src="${dist.url}/JemmyBrowser.jar" dest="${jemmy.lib.dir}"/>
@@ -101,4 +101,36 @@
         </copy>
     </target>
     <target depends="test-single" name="test"/>
+    <target name="warn-no-core-sources" unless="jemmy.core.source">
+        <echo>
+No Jemmy core sources! 
+Sources are available from jemmy.java.net.
+Specify the location by jemmy.core.source variable.
+        </echo>
+    </target>
+    <target name="inform-core-sources" if="jemmy.core.source">
+        <echo>
+Taking JemmyCore sources from ${jemmy.core.source}/core/JemmyCore.
+        </echo>
+    </target>
+    <target name="javadoc" depends="init, compile, -post-compile, warn-no-core-sources, inform-core-sources">
+        <echo message="${jemmy.core.source}"/>
+        <path id="javadoc.source.path.ref">
+            <pathelement path="${src.dir}"/>
+            <pathelement path="${docks.dir}"/>
+            <pathelement path="${jemmy.core.source}/core/JemmyCore/src"/>
+        </path>
+        <property name="javadoc.src.path" refid="javadoc.source.path.ref"/>
+        <property name="javadoc.classpath" value="${javac.classpath}"/>
+        <javadoc charset="UTF-8" destdir="${dist.javadoc.dir}" access="public">
+            <classpath>
+                <path path="${javadoc.classpath}"/>
+            </classpath>
+            <sourcepath>
+                <path path="${javadoc.src.path}"/>
+            </sourcepath>
+        </javadoc>
+        <copydir src="${test.samples.dir}" dest="${dist.javadoc.dir}"/>
+        <zip basedir="${dist.javadoc.dir}" file="${dist.dir}/JemmyFX.zip"/>
+    </target>
 </project>
--- a/tools/Jemmy/JemmyFX/depend.properties	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/depend.properties	Wed Jun 27 12:34:02 2012 +0400
@@ -20,5 +20,5 @@
 # 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.
-jemmy.core.version=20120601
+jemmy.core.version=20120626
 
--- a/tools/Jemmy/JemmyFX/samples/org/jemmy/samples/index.html	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/samples/org/jemmy/samples/index.html	Wed Jun 27 12:34:02 2012 +0400
@@ -9,7 +9,8 @@
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     </head>
     <body>
-        <h2>Recommended order of samples</h2>
+        <h2>JemmyFX samples</h2>
+        <div>Recommended order of reading</div>
         <table>
             <tr><td><a href="lookup/LookupSample.java">lookup/LookupSample.java</a></td></tr>
             <tr><td><a href="lookup/CompoundLookupSample.java">lookup/CompoundLookupSample.java</a></td></tr>
@@ -22,6 +23,7 @@
             <tr><td><a href="input/MouseDNDSample.java">input/MouseDNDSample.java</a></td></tr>
             <tr><td><a href="buttons/ButtonsSample.java">buttons/ButtonsSample.java</a></td></tr>
             <tr><td><a href="text/TextSample.java">text/TextSample.java</a></td></tr>
+            <tr><td><a href="accordion/AccordionSample.java">accordion/AccordionSample.java</a></td></tr>
         </table>
     </body>
 </html>
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/AbstractNodeHierarchy.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/AbstractNodeHierarchy.java	Wed Jun 27 12:34:02 2012 +0400
@@ -33,7 +33,8 @@
 import org.jemmy.lookup.ControlHierarchy;
 
 /**
- *
+ * This is an SPI class encapsulating functionality needed to implement 
+ * <code>Hierarchy</code> of nodes. It is reused in different containers.
  * @author shura, andrey
  */
 public abstract class AbstractNodeHierarchy implements ControlHierarchy {
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/AppExecutor.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/AppExecutor.java	Wed Jun 27 12:34:02 2012 +0400
@@ -32,22 +32,25 @@
 import org.jemmy.env.Environment;
 
 /**
- * Runs an FX application
+ * An utility class to runs an FX application.
  * @author shura
  */
 public class AppExecutor {
     private Class mainClass;
 
     /**
-     * @deprecated Use static void execute(Class<? extends Application> program, String... parameters)
+     * @deprecated This represents deprecated Java FX app execution model. 
+     * Use static void execute(Class<? extends Application> program, String... parameters)
      * @param mainClassName Name of the application main class
+     * @throws ClassNotFoundException  
      */
     public AppExecutor(String mainClassName) throws ClassNotFoundException {
         this(Class.forName(mainClassName));
     }
 
     /**
-     * @deprecated Use static void execute(Class<? extends Application> program, String... parameters)
+     * @deprecated This represents deprecated Java FX app execution model.
+     * Use static void execute(Class<? extends Application> program, String... parameters)
      * @param mainClass the application main class
      */
     public AppExecutor(Class mainClass) {
@@ -56,7 +59,8 @@
 
     /**
      * Runs the app with parameters
-     * @deprecated Use static void execute(Class<? extends Application> program, String... parameters)
+     * @deprecated This represents deprecated Java FX app execution model.
+     * Use static void execute(Class<? extends Application> program, String... parameters)
      * @param parameters
      */
     public void execute(final String... parameters) {
@@ -84,7 +88,8 @@
     }
 
     /**
-     * @deprecated Use static void execute(Class<? extends Application> program, String... parameters)
+     * @deprecated This represents deprecated Java FX app execution model.
+     * Use static void execute(Class<? extends Application> program, String... parameters)
      * @param program
      */
     public static void execute(Runnable program) {
@@ -97,18 +102,22 @@
         new Thread(program).start();
     }
 
-    public static void execute(Class<? extends Application> program) {
-        execute(program, new String[0]);
-    }
-
+    /**
+     * 
+     * Runs an FX application.
+     * @param program Application class.
+     * @param parameters Application parameters
+     */
     public static void execute(Class<? extends Application> program, String... parameters) {
         Application.launch(program, parameters);
     }
 
-    public static void executeNoBlock(Class<? extends Application> program) {
-        executeNoBlock(program, new String[0]);
-    }
-
+    /**
+     * 
+     * Runs an FX application in a separate thread.
+     * @param program Application class.
+     * @param parameters Application parameters
+     */
     public static void executeNoBlock(final Class<? extends Application> program, final String... parameters) {
         new Thread(new Runnable() {
 
@@ -118,22 +127,26 @@
         }).start();
     }
 
+    /**
+     * Runs an FX application by class name and parameters.
+     * @param name A classname
+     * @param argv Application parameters
+     * @deprecated This represents deprecated Java FX app execution model.
+     * Use static void execute(Class<? extends Application> program, String... parameters)
+     * @throws ClassNotFoundException
+     */
     public static void executeReflect(String... argv) throws ClassNotFoundException {
-        if (argv.length == 0) {
-            throw new ClassNotFoundException("No class name to execute - empty parameters");
-        }
         Class mainClass = Class.forName(argv[0]);
 
-        String[] parameters = Arrays.copyOfRange(argv, 1, argv.length);
-
         if (Application.class.isAssignableFrom(mainClass)) {
             Class<? extends Application> app = mainClass;
-            AppExecutor.execute(app, parameters);
+            AppExecutor.execute(app, argv);
             return;
         }
         // throw new ClassNotFoundException("Class doesn't extends " + 
         //                                   Application.class.getName() + ". Old way to start FX app isn't supported");
         // then use old deprecated method to start.
-        new AppExecutor(mainClass).execute(parameters);
+        
+        new AppExecutor(mainClass).execute(argv);
     }
 }
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByID.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByID.java	Wed Jun 27 12:34:02 2012 +0400
@@ -33,9 +33,11 @@
 import org.jemmy.resources.StringComparePolicy;
 
 /**
- *
+ * A criterion to find a control by its ID. 
+ * <br/><br/>SAMPLES:<a href="../samples/lookup/LookupSample.java">Lookup Sample</a>
  * @param <T>
  * @author Shura
+ * @see NodeDock#NodeDock(org.jemmy.interfaces.Parent, org.jemmy.lookup.LookupCriteria<javafx.scene.Node>[]) 
  */
 public class ByID<T> extends ByStringLookup <T> {
 
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByObject.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByObject.java	Wed Jun 27 12:34:02 2012 +0400
@@ -24,16 +24,33 @@
  */
 package org.jemmy.fx;
 
+import org.jemmy.fx.control.ListItemDock;
 import org.jemmy.lookup.LookupCriteria;
 
+/**
+ * A criterion to find an object by id. This could be used within a hierarchy 
+ * such as list view or tree view - something that could contain objects - items.
+  * @author shura
+ * @param <ITEM> the encapsulated object type.
+ * @see ListItemDock#ListItemDock(org.jemmy.interfaces.Parent, org.jemmy.lookup.LookupCriteria<java.lang.Object>[]) 
+ */
 public class ByObject<ITEM> implements LookupCriteria<ITEM> {
 
     private final ITEM item;
 
+    /**
+     * 
+     * @param item the actual item to compare to.
+     */
     public ByObject(ITEM item) {
         this.item = item;
     }
 
+    /**
+     * Compares a checked item to the value passed to constructor by <code>equals(Object)</code>
+     * @param item
+     * @return
+     */
     @Override
     public boolean check(ITEM item) {
         return this.item.equals(item);
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByStyleClass.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByStyleClass.java	Wed Jun 27 12:34:02 2012 +0400
@@ -25,21 +25,32 @@
 package org.jemmy.fx;
 
 import javafx.scene.Node;
+import org.jemmy.fx.control.ControlDock;
 import org.jemmy.lookup.LookupCriteria;
 
 /**
- * LookupCriteria implementation for styleClass property name.
- *
+ * A criterion to find a node by CSS style name.
+ * <br/><br/>SAMPLES:<a href="../samples/lookup/LookupSample.java">Lookup Sample</a>
+  * @param <T> 
  * @author ineverov
+ * @see NodeDock#NodeDock(org.jemmy.interfaces.Parent, org.jemmy.lookup.LookupCriteria<javafx.scene.Node>[]) 
  */
-
 public class ByStyleClass<T extends Node> implements LookupCriteria<T> {
         private String scName;
 
+        /**
+         * 
+         * @param styleClassName
+         */
         public ByStyleClass(String styleClassName){
             scName = styleClassName;
         }
 
+        /**
+         * 
+         * @param cntrl
+         * @return
+         */
         public boolean check(T cntrl) {
             return cntrl.getStyleClass().contains(scName);
         }
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByText.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByText.java	Wed Jun 27 12:34:02 2012 +0400
@@ -25,11 +25,7 @@
 package org.jemmy.fx;
 
 import javafx.scene.Node;
-import javafx.scene.control.ChoiceBox;
-import javafx.scene.control.Labeled;
-import javafx.scene.control.MenuItem;
-import javafx.scene.control.Tab;
-import javafx.scene.control.TextInputControl;
+import javafx.scene.control.*;
 import javafx.scene.text.Text;
 import org.jemmy.action.GetAction;
 import org.jemmy.env.Environment;
@@ -37,15 +33,18 @@
 import org.jemmy.resources.StringComparePolicy;
 
 /**
- *
+ * A criterion to find nodes by text. This supports <code>Text</code>, 
+ * <code>Labeled</code>, <code>TextInputControl</code>, <code>Choice</code>, 
+ * and <code>ComboBox</code> 
  * @param <T>
  * @author Shura
+ * @see NodeDock#NodeDock(org.jemmy.interfaces.Parent, org.jemmy.lookup.LookupCriteria<javafx.scene.Node>[]) 
  */
 public class ByText<T> extends ByStringLookup<T> {
 
     /**
      *
-     * @param text
+     * @param text expected text
      */
     public ByText(String text) {
         super(text);
@@ -53,8 +52,8 @@
 
     /**
      *
-     * @param text
-     * @param policy
+     * @param text expected text
+     * @param policy a way to compare text with the expected
      */
     public ByText(String text, StringComparePolicy policy) {
         super(text, policy);
@@ -66,9 +65,9 @@
     }
 
     /**
-     *
+     * Gets text of the supported node types
      * @param nd
-     * @return
+     * @return text or empty string if the type is not supported
      */
     public static String getNodeText(final Node nd) {
         return new GetAction<String>() {
@@ -85,17 +84,11 @@
                     Object selectedItem = ChoiceBox.class.cast(nd).getSelectionModel().getSelectedItem();
                     if (selectedItem != null)
                     setResult(selectedItem.toString());
-                } else /*
-                // the rest is not yet implemented in javafx.scene.control
-
-                 if(nd instanceof TextBox) {
-                    setResult(TextBox.class.cast(nd).get$text());
-                } else if(nd instanceof ListView) {
-                    setResult(getText((ListView)nd));
-                } else if(nd instanceof ChoiceBox) {
-                    setResult(((ChoiceBox)nd).get$selectedItem().toString());
-                } else
-                 */ {
+                } else if(nd instanceof ComboBox) {
+                    Object selectedItem = ComboBox.class.cast(nd).getSelectionModel().getSelectedItem();
+                    if (selectedItem != null)
+                    setResult(selectedItem.toString());
+                } else {
                     setResult("");
                 }
             }
@@ -108,6 +101,12 @@
         }.dispatch(Environment.getEnvironment());
     }
 
+    /**
+     * Gets text of the supported object types. Supports <code>MenuItem</code> and 
+     * <code>Tab</code>
+     * @param obj
+     * @return text or empty string if the type is not supported
+     */
     public static String getObjectText(final Object obj) {
         if (obj instanceof Node) {
             return getNodeText(Node.class.cast(obj));
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByTitleSceneLookup.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByTitleSceneLookup.java	Wed Jun 27 12:34:02 2012 +0400
@@ -33,20 +33,26 @@
 import org.jemmy.resources.StringComparePolicy;
 
 /**
- *
+ * A criterion to find scenes by title.
  * @param <T>
  * @author shura
+ * @see SceneDock#SceneDock(org.jemmy.lookup.LookupCriteria<javafx.scene.Scene>[]) 
  */
 public class ByTitleSceneLookup<T extends Scene> extends ByStringLookup<T> {
 
     /**
      *
-     * @param text
+     * @param text the expected title
      */
     public ByTitleSceneLookup(String text) {
         super(text);
     }
 
+    /**
+     * 
+     * @param text the expected title
+     * @param policy a way to compare scene title to the expected
+     */
     public ByTitleSceneLookup(String text, StringComparePolicy policy) {
         super(text, policy);
     }
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByWindowType.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/ByWindowType.java	Wed Jun 27 12:34:02 2012 +0400
@@ -29,12 +29,20 @@
 import org.jemmy.lookup.LookupCriteria;
 
 /**
- *
+ * A criterion to fins scenes by window class. This could be useful in a multi-stage 
+ * applications to distinguish stages by their classes. This also could be used to
+ * distinguish a regular stage from a popup menu.
+ * @param <T> 
  * @author shura
+ * @see SceneDock#SceneDock(org.jemmy.lookup.LookupCriteria<javafx.scene.Scene>[]) 
  */
 public class ByWindowType<T extends Scene> implements LookupCriteria<T>{
     private Class<? extends Window> type;
 
+    /**
+     * 
+     * @param type the expected type of the window
+     */
     public ByWindowType(Class<? extends Window> type) {
         this.type = type;
     }
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/CriteriaList.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/CriteriaList.java	Wed Jun 27 12:34:02 2012 +0400
@@ -28,6 +28,9 @@
 import java.util.List;
 import org.jemmy.lookup.LookupCriteria;
 
+/**
+ * @deprecated Not really needed
+ */
 public class CriteriaList<T> {
     protected List<T> list;
 
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/FXClickFocus.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/FXClickFocus.java	Wed Jun 27 12:34:02 2012 +0400
@@ -30,17 +30,29 @@
 import org.jemmy.input.ClickFocus;
 
 /**
- *
+ * This is an SPI class for giving focus to FX controls by clicking on them.
  * @author shura
  */
 public class FXClickFocus extends ClickFocus {
 
+    /**
+     * Name of the focused property.
+     */
     public static final String IS_FOCUSED_PROP = "isFocused";
 
+    /**
+     * 
+     * @param topControl
+     */
     public FXClickFocus(Wrap<? extends Node> topControl) {
         super(topControl);
     }
 
+    /**
+     * 
+     * @param topControl
+     * @param clickPoint
+     */
     public FXClickFocus(Wrap<? extends Node> topControl, Point clickPoint) {
         super(topControl, clickPoint);
     }
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/FXRelativeCoordinateLookup.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/FXRelativeCoordinateLookup.java	Wed Jun 27 12:34:02 2012 +0400
@@ -31,7 +31,9 @@
 import org.jemmy.lookup.RelativeCoordinateLookup;
 
 /**
- *
+ * In the worst case scenario, you could look for a node which is to the left/right
+ * or higher/lower than another node.
+ * <br/><br/>SAMPLES:<a href="../samples/lookup/CoorinateLookupSample.java">Coorinate Lookup Sample</a>
  * @author Andrey Nazarov
  */
 public class FXRelativeCoordinateLookup<CONTROL extends Node> extends RelativeCoordinateLookup<CONTROL> {
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/Lookups.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/Lookups.java	Wed Jun 27 12:34:02 2012 +0400
@@ -33,6 +33,9 @@
  * This class is intended for static import. It provides some shortcuts
  * to the most used functionality of Jemmy classes.
  * @author shura
+ * @deprecated Use docs.
+ * @see SceneDock
+ * @see NodeDock
  */
 public class Lookups {
     /**
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeHierarchy.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeHierarchy.java	Wed Jun 27 12:34:02 2012 +0400
@@ -29,11 +29,7 @@
 import javafx.scene.Scene;
 import org.jemmy.env.Environment;
 
-/**
- *
- * @author andrey
- */
-public class NodeHierarchy extends AbstractNodeHierarchy {
+class NodeHierarchy extends AbstractNodeHierarchy {
 
     private Scene scene;
 
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeParent.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeParent.java	Wed Jun 27 12:34:02 2012 +0400
@@ -28,13 +28,28 @@
 import javafx.scene.Scene;
 import org.jemmy.env.Environment;
 import org.jemmy.interfaces.Parent;
+import org.jemmy.lookup.ControlHierarchy;
 
 /**
- *
+ * An SPI interface for a parent for nodes. Used to construct 
+ * <code>ControlHierarchy</code> later.
  * @author shura
+ * @see ControlHierarchy
  */
 public interface NodeParent{
+    /**
+     * 
+     * @return
+     */
     public SceneWrap<? extends Scene> getScene();
+    /**
+     * 
+     * @return
+     */
     public Parent<Node> getParent();
+    /**
+     * 
+     * @return
+     */
     public Environment getEnvironment();
 }
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeParentImpl.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeParentImpl.java	Wed Jun 27 12:34:02 2012 +0400
@@ -32,10 +32,6 @@
 import org.jemmy.lookup.Lookup;
 import org.jemmy.lookup.LookupCriteria;
 
-/**
- *
- * @author andrey
- */
 public class NodeParentImpl extends AbstractParent<Node> {
 
     private Environment env;
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeWrap.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeWrap.java	Wed Jun 27 12:34:02 2012 +0400
@@ -40,8 +40,10 @@
 import org.jemmy.lookup.LookupCriteria;
 
 /**
- *
+ * An SPI class encapsulating JavaFX node. 
+ * @param <T> 
  * @author shura, mrkam
+ * @see NodeDock
  */
 @ControlType(Node.class)
 @MethodProperties({"getBaselineOffset", "getBoundsInLocal", "getBoundsInParent",
@@ -58,6 +60,9 @@
 @DockInfo(generateSubtypeLookups = true)
 public class NodeWrap<T extends Node> extends Wrap<T> implements Focusable {
 
+    /**
+     * The node's scene.
+     */
     protected Scene scene;
     private Parent parent = null;
     private Mouse mouse = null;
@@ -65,6 +70,15 @@
     private Showable show = null;
     private static Wrapper wrapper = new NodeWrapper(Root.ROOT.getEnvironment());
 
+    /**
+     * "Wraps" a node should a wrap be needed.
+     * @param <TP>
+     * @param env
+     * @param type
+     * @param control
+     * @return
+     * @see NodeDock#NodeDock(org.jemmy.env.Environment, javafx.scene.Node) 
+     */
     @DefaultWrapper
     public static <TP extends Node> Wrap<? extends TP> wrap(Environment env, Class<TP> type, TP control) {
         Wrap<? extends TP> res = wrapper.wrap(type, control);
@@ -72,11 +86,28 @@
         return res;
     }
 
+    /**
+     * Turns a string into by-id lookup criteria.
+     * @param <B>
+     * @param tp
+     * @param id
+     * @return
+     * @see NodeDock#NodeDock(org.jemmy.interfaces.Parent, java.lang.String) 
+     * @see ByID
+     */
     @ObjectLookup("id")
     public static <B extends Node> LookupCriteria<B> idLookup(Class<B> tp, String id) {
         return new ByID<B>(id);
     }
 
+    /**
+     * Turns a string into by-type lookup criteria.
+     * @param <B>
+     * @param tp
+     * @param subtype
+     * @see NodeDock#NodeDock(org.jemmy.interfaces.Parent, java.lang.Class) 
+     * @return
+     */
     @ObjectLookup("type")
     public static <B extends Node> LookupCriteria<B> typeLookup(Class<B> tp, final Class<?> subtype) {
         return new LookupCriteria<B>() {
@@ -93,15 +124,30 @@
         focus = new FXClickFocus(this);
     }
 
+    /**
+     * Creates the wrap.
+     * @param env
+     * @param node
+     */
     public NodeWrap(Environment env, T node) {
         this(env, node.getScene(), node);
     }
 
+    /**
+     * Gets scene of the node. Every node has a scene.
+     * @return
+     */
     @Property("scene")
     public Scene getScene() {
         return scene;
     }
 
+    /**
+     * Gets node bounds 
+     * @param env
+     * @param nd
+     * @return
+     */
     public static Rectangle getScreenBounds(final Environment env, final Node nd) {
         GetAction<Rectangle> bounds = new GetAction<Rectangle>() {
 
@@ -160,7 +206,7 @@
     }
 
     /**
-     * Defines whether a cell is within another cell.
+     * Defines whether a node is completely within another node.
      *
      * @param parent
      * @param cell
@@ -178,7 +224,7 @@
         }
     }
 
-        /**
+    /**
      * Transforms point in local control coordinate system to screen coordinates.
      * @param local
      * @return
@@ -228,6 +274,10 @@
         }.dispatch(node.getEnvironment());
     }
 
+    /**
+     * Tells if stage of the scene is focused.
+     * @return
+     */
     public boolean isFocused() {
         return new GetAction<Boolean>() {
                     @Override
@@ -242,6 +292,11 @@
                 }.dispatch(getEnvironment());
     }
     
+    /**
+     * Turns into Showable.
+     * @return
+     * @see Showable
+     */
     @As
     public Showable asShowable() {
         if(show == null) {
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeWrapper.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/NodeWrapper.java	Wed Jun 27 12:34:02 2012 +0400
@@ -27,10 +27,7 @@
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 import javafx.scene.Node;
 import javafx.scene.Scene;
 import org.jemmy.control.DefaultWrapper;
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/QueueExecutor.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/QueueExecutor.java	Wed Jun 27 12:34:02 2012 +0400
@@ -24,6 +24,7 @@
  */
 package org.jemmy.fx;
 
+import com.sun.javafx.tk.Toolkit;
 import javafx.application.Platform;
 import org.jemmy.JemmyException;
 import org.jemmy.TimeoutExpiredException;
@@ -32,16 +33,15 @@
 import org.jemmy.env.Environment;
 import org.jemmy.env.Timeout;
 import org.jemmy.timing.State;
-import com.sun.javafx.tk.Toolkit;
 
 /**
- *
+ * A utility class to work with Java FX event queue.
  * @author shura, KAM
  */
 public class QueueExecutor extends AbstractExecutor {
 
     /**
-     *
+     * @see #isQuiet() 
      */
     public static final Timeout QUEUE_THROUGH_TIME = new Timeout("FXExecutor.FX_QUEUE_THROUGH_TIME", 50);
     static final Timeout QUEUE_IDENTIFYING_TIMEOUT =
@@ -58,6 +58,10 @@
         emptyFunction = new EmptyFunction();
     }
 
+    /**
+     * Gets what thread is the queue thread.
+     * @return
+     */
     public Thread getQueueThread() {
         if (queueThread == null) {
             try {
@@ -86,6 +90,9 @@
 
     /**
      * {@inheritDoc}
+     * @param env 
+     * @param action
+     * @param parameters  
      */
     @Override
     public void executeQueue(Environment env, Action action, Object... parameters) {
@@ -105,6 +112,9 @@
 
     /**
      * {@inheritDoc}
+     * @param env 
+     * @param action 
+     * @param parameters 
      */
     @Override
     public void executeQueueDetached(Environment env, Action action, Object... parameters) {
@@ -114,6 +124,10 @@
         Platform.runLater(w);
     }
 
+    /**
+     * Checks whether the calling code is already on the queue thread. 
+     * @return
+     */
     @Override
     public boolean isOnQueue() {
         //return Thread.currentThread().equals(getQueueThread());
@@ -125,6 +139,12 @@
         return true;
     }
 
+    /**
+     * Checks whether the things are "quiet". All is currently does is check that
+     * something comes through the queue quickly enough as defined by 
+     * <code>QUEUE_THROUGH_TIME</code> timeout.
+     * @return
+     */
     @Override
     protected boolean isQuiet() {
         emptyFunction.prepare();
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/RelativeMouse.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/RelativeMouse.java	Wed Jun 27 12:34:02 2012 +0400
@@ -36,11 +36,14 @@
 
 
 /**
- * Port of the org.jemmy.fx.FXRelativeMouse
+ * An implementation of mouse which hides node transformation from test code. 
+ * This uses a real mouse and only transforms coordinates to the actual ones
+ * so that <code>(0, 0)</code> is where left-top corner happen to be after 
+ * the transformations.
  *
  * @author Sergey Grinev
  */
-public class RelativeMouse implements Mouse {
+class RelativeMouse implements Mouse {
 
     private Mouse theMouse;
     private NodeWrap<? extends Node> node;
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/Root.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/Root.java	Wed Jun 27 12:34:02 2012 +0400
@@ -24,7 +24,6 @@
  */
 package org.jemmy.fx;
 
-import java.io.File;
 import java.util.Locale;
 import javafx.scene.Scene;
 import org.jemmy.action.ActionExecutor;
@@ -41,23 +40,32 @@
 import org.jemmy.lookup.Lookup;
 import org.jemmy.lookup.LookupCriteria;
 import org.jemmy.lookup.PlainLookup;
-import org.netbeans.jemmy.image.PNGImageLoader;
 
 /**
- *
+ * Root class for Java FX scene lookup. It also serves as an access point for 
+ * different environment settings.
  * @author shura
  */
 public class Root extends AbstractParent<Scene> {
 
+    /**
+     * The root.
+     */
     public static final Root ROOT = new Root();
+    
+    /**
+     * @deprecated 
+     */
     public static final String LOOKUP_STRING_COMPARISON = Root.class.getName()
             + ".lookup.string.compare";
-    public static final String THEME_FACTORY = "fx.theme.factory";
-    public static final String INPUT_SOURCE = Root.class.getName() + ".input.method";
     private Environment env;
     private SceneWrapper wrapper;
     private SceneList scenes;
     
+    /**
+     * Use Glass robot for user input simulation.
+     * @param env
+     */
     public static void useGlassRobot(Environment env) {
         env.setProperty(ControlInterfaceFactory.class, new GlassInputFactory());
         env.setProperty(ImageCapturer.class, new GlassImageCapturer());
@@ -65,6 +73,10 @@
         env.setProperty(ImageLoader.class, new FileGlassImageLoader());
     }
 
+    /**
+     * Use AWT robot for user input simulation.
+     * @param env
+     */
     public static void useAWTRobot(Environment env) {
         env.setProperty(ControlInterfaceFactory.class, new AWTRobotInputFactory());
         env.setProperty(ImageCapturer.class, new AWTRobotCapturer());
@@ -83,7 +95,7 @@
             useGlassRobot(this.env);
         }
         this.env.setPropertyIfNotSet(ActionExecutor.class, QueueExecutor.EXECUTOR);
-        this.env.setProperty(THEME_FACTORY, ThemeDriverFactory.newInstance());
+        this.env.setPropertyIfNotSet(ThemeDriverFactory.class, ThemeDriverFactory.newInstance());
         this.env.initTimeout(QueueExecutor.QUEUE_THROUGH_TIME);
         this.env.initTimeout(QueueExecutor.QUEUE_IDENTIFYING_TIMEOUT);
 
@@ -91,7 +103,7 @@
         scenes = new SceneList();
     }
 
-    public Wrapper getSceneWrapper() {
+    Wrapper getSceneWrapper() {
         return wrapper;
     }
 
@@ -107,12 +119,11 @@
     }
 
     /**
-     *
      * @param factory
      * @return
      */
     public ThemeDriverFactory setThemeFactory(ThemeDriverFactory factory) {
-        return (ThemeDriverFactory) env.setProperty(THEME_FACTORY, factory);
+        return (ThemeDriverFactory) env.setProperty(ThemeDriverFactory.class, factory);
     }
 
     /**
@@ -120,7 +131,7 @@
      * @return
      */
     public ThemeDriverFactory getThemeFactory() {
-        return (ThemeDriverFactory) env.getProperty(THEME_FACTORY);
+        return (ThemeDriverFactory) env.getProperty(ThemeDriverFactory.class);
     }
 
     public <ST extends Scene> Lookup<ST> lookup(Class<ST> controlClass, LookupCriteria<ST> criteria) {
@@ -134,6 +145,11 @@
     public Class<Scene> getType() {
         return Scene.class;
     }
+
+    /**
+     * Whether to use the transformation-unaware coordinates.
+     * @see RelativeMouse
+     */
     public static final String USE_NATIVE_COORDINATES = "use.native.sg.coordinates";
 
     //TODO: shouldn't this be in utility class used by all root impls?
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/SceneList.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/SceneList.java	Wed Jun 27 12:34:02 2012 +0400
@@ -36,7 +36,7 @@
 
 
 /**
- *
+ * Gets the scenes.
  * @author shura
  */
 class SceneList implements ControlList {
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/SceneNodeHierarchy.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/SceneNodeHierarchy.java	Wed Jun 27 12:34:02 2012 +0400
@@ -32,7 +32,7 @@
  *
  * @author andrey
  */
-public class SceneNodeHierarchy extends AbstractNodeHierarchy {
+class SceneNodeHierarchy extends AbstractNodeHierarchy {
 
     protected Scene scene;
 
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/SceneWrap.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/SceneWrap.java	Wed Jun 27 12:34:02 2012 +0400
@@ -35,6 +35,7 @@
 import org.jemmy.control.*;
 import org.jemmy.dock.DefaultParent;
 import org.jemmy.dock.DefaultWrapper;
+import org.jemmy.dock.DockInfo;
 import org.jemmy.dock.ObjectLookup;
 import org.jemmy.env.Environment;
 import org.jemmy.interfaces.Parent;
@@ -47,13 +48,23 @@
 import org.jemmy.timing.State;
 
 /**
- *
+ * A class wrapping Java FX scene.
+ * @param <T> 
  * @author shura
  */
 @ControlType(Scene.class)
 @ControlInterfaces(value = Parent.class, encapsulates = Node.class)
+@DockInfo(generateSubtypeLookups = true)
 public class SceneWrap<T extends Scene> extends Wrap<Scene> {
 
+    /**
+     * "Wraps" a node should a wrap be needed.
+     * @param <TP>
+     * @param env
+     * @param type
+     * @param control
+     * @return
+     */
     @DefaultWrapper
     public static <TP extends Scene> Wrap<? extends TP> wrap(Environment env, Class<TP> type, TP control) {
         Wrap<? extends TP> res = Root.ROOT.getSceneWrapper().wrap(type, control);
@@ -61,16 +72,26 @@
         return res;
     }
 
+    /**
+     * Turns string into a by-title lookup criteria.
+     * @param <B>
+     * @param tp
+     * @param title
+     * @param policy
+     * @return
+     */
     @ObjectLookup("title and comparison policy")
     public static <B extends Scene> LookupCriteria<B> titleLookup(Class<B> tp, String title, StringComparePolicy policy) {
         return new ByTitleSceneLookup<B>(title, policy);
     }
 
-    @ObjectLookup("")
-    public static <B extends Scene> LookupCriteria<B> anyLookup(Class<B> tp) {
-        return new Any<B>();
-    }
-
+    /**
+     * Default parent for scenes. 
+     * @param <CONTROL>
+     * @param controlType
+     * @return <code>Root.ROOT</code>
+     * @see Root#ROOT
+     */
     @DefaultParent("all scenes")
     public static <CONTROL extends Scene> Parent<? super Scene> getRoot(Class<CONTROL> controlType) {
         return Root.ROOT;
@@ -78,6 +99,11 @@
     private Parent parent = null;
     private Showable showable = null;
 
+    /**
+     * Wraps a scene.
+     * @param env
+     * @param node
+     */
     public SceneWrap(Environment env, Scene node) {
         super(env, node);
     }
@@ -87,6 +113,12 @@
         return getScreenBounds(getEnvironment(), getControl());
     }
 
+    /**
+     * Gets scene bounds.
+     * @param env
+     * @param scene
+     * @return
+     */
     public static Rectangle getScreenBounds(final Environment env, final Scene scene) {
         GetAction<Rectangle> bounds = new GetAction<Rectangle>() {
 
@@ -156,6 +188,10 @@
         return super.as(interfaceClass, type);
     }
 
+    /**
+     * Turns a scene into a Showable
+     * @return
+     */
     @As
     public Showable asShowable() {
         if (showable == null) {
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/SceneWrapper.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/SceneWrapper.java	Wed Jun 27 12:34:02 2012 +0400
@@ -29,10 +29,6 @@
 import org.jemmy.control.Wrap;
 import org.jemmy.env.Environment;
 
-/**
- *
- * @author shura
- */
 class SceneWrapper implements org.jemmy.control.Wrapper {
 
     private Environment env;
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/TextWrap.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/TextWrap.java	Wed Jun 27 12:34:02 2012 +0400
@@ -35,7 +35,7 @@
 import org.jemmy.resources.StringComparePolicy;
 
 /**
- *
+ * A wrap around <code>javafx.scene.text.Text</code>
  * @param <T>
  * @author Shura
  */
@@ -43,15 +43,24 @@
 @ControlInterfaces({org.jemmy.interfaces.Text.class})
 public class TextWrap<T extends Text> extends NodeWrap<T> implements org.jemmy.interfaces.Text {
 
+    
+    /**
+     * Turns string into a by-text lookup criteria
+     * @param <B>
+     * @param tp
+     * @param text
+     * @param policy
+     * @return
+     */
     @ObjectLookup("text and comparison policy")
     public static <B extends Text> LookupCriteria<B> textLookup(Class<B> tp, String text, 
         StringComparePolicy policy) {
         return new ByText<B>(text, policy);
     }
     /**
-     *
-     * @param scene
-     * @param nd
+     * Wraps a text
+     * @param env 
+     * @param node  
      */
     public TextWrap(Environment env, T node) {
         super(env, node);
@@ -60,14 +69,24 @@
     /**
      * Look for a certain node and create an operator for it.
      * @param parent
-     * @param type
      * @param criteria
+     * @return  
+     * @deprecated use docks
+     * @see TextDock
      */
     public static TextWrap<Text> find(NodeParent parent, LookupCriteria<Text> criteria) {
         return new TextWrap<Text>(parent.getEnvironment(),
                 parent.getParent().lookup(Text.class, criteria).get());
     }
 
+    /**
+     * 
+     * @param parent
+     * @param text
+     * @return
+     * @deprecated use docks
+     * @see TextDock
+     */
     public static TextWrap<Text> find(NodeParent parent, String text) {
         return find(parent, new ByText<Text>(text, (StringComparePolicy)parent.getEnvironment().
                 getProperty(Root.LOOKUP_STRING_COMPARISON, StringComparePolicy.EXACT)));
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/WindowElement.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/WindowElement.java	Wed Jun 27 12:34:02 2012 +0400
@@ -27,7 +27,7 @@
 import org.jemmy.interfaces.TypeControlInterface;
 
 /**
- * The interface specifies how to get window (a.k.a. root element) where control
+ * The interface specifies how to get a "window" in which control
  * resides. For different control libraries this could be
  * different things: <code>java.awt.Window</code> for AWT,
  * <code>javafx.scene.Scene</code> for FX, etc.
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/control/AbstractItemsParent.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/control/AbstractItemsParent.java	Wed Jun 27 12:34:02 2012 +0400
@@ -35,17 +35,37 @@
 import org.jemmy.lookup.PlainLookup;
 
 
+/**
+ * Parent for a collection of single-level objects within a compound control. Such as list,
+ * tree, table and such. 
+ * @author shura
+ * @param <ITEM>
+ */
 public abstract class AbstractItemsParent<ITEM extends Object> extends AbstractParent<ITEM> {
 
+    /**
+     * Maps this to <code>ControlList</code>
+     * @see ControlList
+     */
     protected ItemsList itemsListCreator;
+    /**
+     * A wrap - owner of the hierarchy. Typically a wrap around list, tree or similar.
+     */
     protected Wrap wrap;
+    /**
+     * This is responsible for wrapping items into a <code>Wrap</code>.
+     */
     protected Wrapper wrapper;
+    /**
+     * Type of the wrapped items.
+     */
     protected Class<ITEM> itemClass;
 
     /**
      *
-     * @param scene
-     * @param listViewWrap
+     * @param wrap Owner of the sub-hierarchy. Typically itself is a part of 
+     * <code>Node</code> hierarchy.
+     * @param wrapper 
      * @param itemClass
      */
     public AbstractItemsParent(Wrap wrap, Wrapper wrapper, Class<ITEM> itemClass) {
@@ -71,8 +91,15 @@
         return itemClass;
     }
 
-    protected class ItemsList implements ControlList {
+    /**
+     * 
+     */
+    class ItemsList implements ControlList {
 
+        /**
+         * 
+         * @return
+         */
         @Override
         @SuppressWarnings("unchecked")
         public List<ITEM> getControls() {
@@ -80,5 +107,9 @@
         }
     }
 
+    /**
+     * Returns list of items - members of the hierarchy.
+     * @return
+     */
     protected abstract List<ITEM> getControls();
 }
\ No newline at end of file
--- a/tools/Jemmy/JemmyFX/src/org/jemmy/fx/control/TabWrap.java	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/control/TabWrap.java	Wed Jun 27 12:34:02 2012 +0400
@@ -34,8 +34,6 @@
 import org.jemmy.control.Property;
 import org.jemmy.control.Wrap;
 import org.jemmy.dock.ObjectLookup;
-import org.jemmy.fx.AbstractNodeHierarchy;
-import org.jemmy.fx.NodeHierarchy;
 import org.jemmy.fx.NodeParentImpl;
 import org.jemmy.interfaces.CellOwner.Cell;
 import org.jemmy.interfaces.*;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/Jemmy/JemmyFX/src/org/jemmy/fx/package.html	Wed Jun 27 12:34:02 2012 +0400
@@ -0,0 +1,24 @@
+<!--
+To change this template, choose Tools | Templates
+and open the template in the editor.
+-->
+<!DOCTYPE html>
+<html>
+    <head>
+        <title>JemmyFX</title>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+    </head>
+    <body>
+        This package contains classes which allow to test Java FX UI for 
+        Java FX 2.0 and above.<br/>
+        Top-level API of Jemmy FX is exposed through <code>*Dock</code> classes. Docks
+        exist for scenes (<a href="SceneDock.html"><code>SceneDock</code></a>), 
+        nodes and its subclasses(<a href="NodeDock.html"><code>NodeDock</code></a>, 
+        <a href="control/TextInputControlDock.html"><code>TextInputControlDock</code></a>) 
+        and items of compound controls such as list, table, and such 
+        (<a href="control/ListItemDock.html"><code>ListItemDock</code></a>, 
+        <a href="control/TreeItemDock.html"><code>TreeItemDock</code></a>, 
+        <a href="control/TableCellItemDock.html"><code>TableCellItemDock)</code></a>.<br/> 
+        Please consult <a href="../samples/index.html">samples</a> for examples of real test code. 
+    </body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/Jemmy/JemmyFX/test/org/jemmy/fx/MultiSceneTest.java	Wed Jun 27 12:34:02 2012 +0400
@@ -0,0 +1,49 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.jemmy.fx;
+
+import javafx.scene.shape.Rectangle;
+import org.jemmy.fx.control.LabeledDock;
+import org.jemmy.resources.StringComparePolicy;
+import org.junit.*;
+
+/**
+ *
+ * @author shura
+ */
+public class MultiSceneTest {
+    
+    public MultiSceneTest() {
+    }
+
+    @BeforeClass
+    public static void setUpClass() throws Exception {
+        AppExecutor.executeNoBlock(TwoSceneApp.class);
+    }
+
+    @AfterClass
+    public static void tearDownClass() throws Exception {
+    }
+    
+    @Before
+    public void setUp() {
+    }
+    
+    @After
+    public void tearDown() {
+    }
+    @Test
+    public void clickBoth() {
+        SceneDock scene1 = new SceneDock("1", StringComparePolicy.SUBSTRING);
+        new LabeledDock(scene1.asParent(), "button", StringComparePolicy.EXACT).mouse().click();
+        new LabeledDock(scene1.asParent(), "pushed", StringComparePolicy.EXACT);
+        SceneDock scene2 = new SceneDock("2", StringComparePolicy.SUBSTRING);
+        new LabeledDock(scene2.asParent(), "button", StringComparePolicy.EXACT).mouse().click();
+        new LabeledDock(scene2.asParent(), "pushed", StringComparePolicy.EXACT);
+        SceneDock sceneNoFocus = new SceneDock("no focus", StringComparePolicy.EXACT);
+        new NodeDock(sceneNoFocus.asParent(), Rectangle.class).mouse().click();
+        new TextDock(sceneNoFocus.asParent(), "clicked", StringComparePolicy.EXACT);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/Jemmy/JemmyFX/test/org/jemmy/fx/TwoSceneApp.java	Wed Jun 27 12:34:02 2012 +0400
@@ -0,0 +1,75 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.jemmy.fx;
+
+import javafx.application.Application;
+import javafx.event.ActionEvent;
+import javafx.event.Event;
+import javafx.event.EventHandler;
+import javafx.event.EventType;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.Label;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.layout.VBox;
+import javafx.scene.shape.Rectangle;
+import javafx.scene.text.Text;
+import javafx.stage.Stage;
+
+/**
+ *
+ * @author shura
+ */
+public class TwoSceneApp extends Application {
+
+    @Override
+    public void start(Stage noFocus) throws Exception {
+        createScene(new Stage(), 2);
+        createScene(new Stage(), 1);
+        final Text txt = new Text("not clicked");
+        Rectangle r = new Rectangle(100, 100);
+        r.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent> () {
+
+            public void handle(MouseEvent t) {
+                txt.setText("clicked");
+            }
+        });
+        VBox content = new VBox();
+        content.getChildren().addAll(r, txt);
+        noFocus.setScene(new Scene(content));
+        noFocus.setTitle("no focus");
+        position(noFocus);
+        noFocus.show();
+    }
+    
+    private void position(Stage stage) {
+        stage.setX(100);
+        stage.setY(100);
+        stage.setWidth(300);
+        stage.setHeight(300);
+    }
+
+    private void createScene(Stage stage, int index) {
+        final Label lbl = new Label("not pushed");
+        Button btn = new Button("button");
+        btn.setOnAction(new EventHandler<ActionEvent>() {
+
+            public void handle(ActionEvent t) {
+                lbl.setText("pushed");
+            }
+        });
+        //btn
+        VBox content = new VBox();
+        content.getChildren().addAll(btn, lbl);
+        stage.setScene(new Scene(content));
+        stage.setTitle("stage" + index);
+        position(stage);
+        stage.show();
+    }
+
+    public static void main(String[] args) {
+        launch();
+    }
+}
--- a/tools/Jemmy/JemmyFXBrowser/nbproject/build-impl.xml	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFXBrowser/nbproject/build-impl.xml	Wed Jun 27 12:34:02 2012 +0400
@@ -578,6 +578,13 @@
         <propertyfile file="${built-jar.properties}">
             <entry key="${basedir}" value=""/>
         </propertyfile>
+        <antcall target="-maybe-call-dep">
+            <param name="call.built.properties" value="${built-jar.properties}"/>
+            <param location="${project.GlassImage}" name="call.subproject"/>
+            <param location="${project.GlassImage}/build.xml" name="call.script"/>
+            <param name="call.target" value="jar"/>
+            <param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
+        </antcall>
     </target>
     <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
     <target depends="init" name="-check-automatic-build">
@@ -1024,6 +1031,13 @@
         <propertyfile file="${built-clean.properties}">
             <entry key="${basedir}" value=""/>
         </propertyfile>
+        <antcall target="-maybe-call-dep">
+            <param name="call.built.properties" value="${built-clean.properties}"/>
+            <param location="${project.GlassImage}" name="call.subproject"/>
+            <param location="${project.GlassImage}/build.xml" name="call.script"/>
+            <param name="call.target" value="clean"/>
+            <param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
+        </antcall>
     </target>
     <target depends="init" name="-do-clean">
         <delete dir="${build.dir}"/>
--- a/tools/Jemmy/JemmyFXBrowser/nbproject/genfiles.properties	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFXBrowser/nbproject/genfiles.properties	Wed Jun 27 12:34:02 2012 +0400
@@ -3,6 +3,6 @@
 build.xml.stylesheet.CRC32=28e38971@1.38.3.45
 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
 # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=0bbf4bc8
-nbproject/build-impl.xml.script.CRC32=ff167874
-nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.1.46
+nbproject/build-impl.xml.data.CRC32=33325a97
+nbproject/build-impl.xml.script.CRC32=5a386346
+nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.3.46
--- a/tools/Jemmy/JemmyFXBrowser/nbproject/project.properties	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFXBrowser/nbproject/project.properties	Wed Jun 27 12:34:02 2012 +0400
@@ -41,7 +41,8 @@
     ${file.reference.JemmyBrowser.jar}:\
     ${file.reference.JemmyCore.jar}:\
     ${file.reference.jfxrt.jar}:\
-    ${file.reference.JemmyFX.jar}
+    ${file.reference.JemmyFX.jar}:\
+    ${reference.GlassImage.jar}
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
@@ -77,6 +78,8 @@
 manifest.file=manifest.mf
 meta.inf.dir=${src.dir}/META-INF
 platform.active=default_platform
+project.GlassImage=../GlassImage
+reference.GlassImage.jar=${project.GlassImage}/dist/GlassImage.jar
 run.classpath=\
     ${javac.classpath}:\
     ${build.classes.dir}
--- a/tools/Jemmy/JemmyFXBrowser/nbproject/project.xml	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/JemmyFXBrowser/nbproject/project.xml	Wed Jun 27 12:34:02 2012 +0400
@@ -11,6 +11,15 @@
                 <root id="test.src.dir"/>
             </test-roots>
         </data>
-        <references xmlns="http://www.netbeans.org/ns/ant-project-references/1"/>
+        <references xmlns="http://www.netbeans.org/ns/ant-project-references/1">
+            <reference>
+                <foreign-project>GlassImage</foreign-project>
+                <artifact-type>jar</artifact-type>
+                <script>build.xml</script>
+                <target>jar</target>
+                <clean-target>clean</clean-target>
+                <id>jar</id>
+            </reference>
+        </references>
     </configuration>
 </project>
--- a/tools/Jemmy/README	Mon Jun 25 17:24:10 2012 +0400
+++ b/tools/Jemmy/README	Wed Jun 27 12:34:02 2012 +0400
@@ -4,7 +4,7 @@
 
 Should the build script has trouble downloading JemmyCore libraries
 automatically, you could download it with a web browser by going to
-http://java.net/projects/jemmy/downloads/directory/dist/<jemmy.core.version>
+http://jemmy.java.net/dist/<jemmy.core.version>
 where jemmy.core.version is specified in tools/Jemmy/JemmyFX/depend.properties file.
 Make sure to download all the jars.
 You will have to place the downloaded jars into tools/Jemmy/JemmyFX/lib/jemmy directory.