diff --git a/sdk/BasicGameTemplate/MANIFEST.MF b/sdk/BasicGameTemplate/MANIFEST.MF
new file mode 100644
index 000000000..7e1ad4bb1
--- /dev/null
+++ b/sdk/BasicGameTemplate/MANIFEST.MF
@@ -0,0 +1 @@
+X-Comment: Created with jMonkeyPlatform
diff --git a/sdk/BasicGameTemplate/build.xml b/sdk/BasicGameTemplate/build.xml
new file mode 100644
index 000000000..01bd9fefe
--- /dev/null
+++ b/sdk/BasicGameTemplate/build.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+ Builds, tests, and runs the project BasicGameTemplate.
+
+
+
+
+
diff --git a/sdk/BasicGameTemplate/master-application.jnlp b/sdk/BasicGameTemplate/master-application.jnlp
new file mode 100644
index 000000000..49cbb12f2
--- /dev/null
+++ b/sdk/BasicGameTemplate/master-application.jnlp
@@ -0,0 +1,22 @@
+
+
+ ${APPLICATION.TITLE}
+ ${APPLICATION.VENDOR}
+
+ ${APPLICATION.DESC}
+ ${APPLICATION.DESC.SHORT}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sdk/BasicGameTemplate/nbproject/genfiles.properties b/sdk/BasicGameTemplate/nbproject/genfiles.properties
new file mode 100644
index 000000000..61613e16b
--- /dev/null
+++ b/sdk/BasicGameTemplate/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=94bf7c61
+build.xml.script.CRC32=79a29eb7
+build.xml.stylesheet.CRC32=958a1d3e@1.32.1.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=13834f8c
+nbproject/build-impl.xml.script.CRC32=d1cfc99b
+nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
diff --git a/sdk/BasicGameTemplate/nbproject/project.properties b/sdk/BasicGameTemplate/nbproject/project.properties
new file mode 100644
index 000000000..58bf56df6
--- /dev/null
+++ b/sdk/BasicGameTemplate/nbproject/project.properties
@@ -0,0 +1,76 @@
+application.title=MyGame
+application.vendor=MyCompany
+assets.jar.name=assets.jar
+assets.excludes=**/*.j3odata,**/*.mesh,**/*.skeleton,**/*.mesh\.xml,**/*.skeleton\.xml,**/*.scene,**/*.material,**/*.obj,**/*.mtl,**/*.3ds,**/*.dae,**/*.blend,**/*.blend*[0-9]
+assets.folder.name=assets
+assets.compress=true
+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
+compile.on.save=true
+# 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}/${application.title}.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
+excludes=
+includes=**
+jar.compress=false
+javac.classpath=\
+ ${libs.jme3.classpath}:\
+ ${libs.jme3-libraries.classpath}
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.source=1.5
+javac.target=1.5
+javac.test.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}
+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=
+jaxbwiz.endorsed.dirs="${netbeans.home}/../ide12/modules/ext/jaxb/api"
+jnlp.codebase.type=local
+jnlp.descriptor=application
+jnlp.enabled=false
+jnlp.offline-allowed=false
+jnlp.signed=false
+main.class=mygame.Main
+meta.inf.dir=${src.dir}/META-INF
+manifest.file=MANIFEST.MF
+platform.active=default_platform
+run.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}:\
+ ${assets.folder.name}
+# 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
+# or test-sys-prop.name=value to set system properties for unit tests):
+run.jvmargs=
+run.test.classpath=\
+ ${javac.test.classpath}:\
+ ${build.test.classes.dir}
+source.encoding=UTF-8
+src.dir=src
diff --git a/sdk/BasicGameTemplate/nbproject/project.xml b/sdk/BasicGameTemplate/nbproject/project.xml
new file mode 100644
index 000000000..3dd779d54
--- /dev/null
+++ b/sdk/BasicGameTemplate/nbproject/project.xml
@@ -0,0 +1,18 @@
+
+
+ org.netbeans.modules.java.j2seproject
+
+
+
+
+
+
+
+ BasicGameTemplate
+
+
+
+
+
+
+
diff --git a/sdk/BasicGameTemplate/src/mygame/Main.java b/sdk/BasicGameTemplate/src/mygame/Main.java
new file mode 100644
index 000000000..91fee9846
--- /dev/null
+++ b/sdk/BasicGameTemplate/src/mygame/Main.java
@@ -0,0 +1,43 @@
+package mygame;
+
+import com.jme3.app.SimpleApplication;
+import com.jme3.material.Material;
+import com.jme3.math.ColorRGBA;
+import com.jme3.math.Vector3f;
+import com.jme3.renderer.RenderManager;
+import com.jme3.scene.Geometry;
+import com.jme3.scene.shape.Box;
+
+/**
+ * test
+ * @author normenhansen
+ */
+public class Main extends SimpleApplication {
+
+ public static void main(String[] args) {
+ Main app = new Main();
+ app.start();
+ }
+
+ @Override
+ public void simpleInitApp() {
+ Box b = new Box(1, 1, 1);
+ Geometry geom = new Geometry("Box", b);
+
+ Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
+ mat.setColor("Color", ColorRGBA.Blue);
+ geom.setMaterial(mat);
+
+ rootNode.attachChild(geom);
+ }
+
+ @Override
+ public void simpleUpdate(float tpf) {
+ //TODO: add update code
+ }
+
+ @Override
+ public void simpleRender(RenderManager rm) {
+ //TODO: add render code
+ }
+}
diff --git a/sdk/JME3TestsTemplate/build.xml b/sdk/JME3TestsTemplate/build.xml
new file mode 100644
index 000000000..c1f098b99
--- /dev/null
+++ b/sdk/JME3TestsTemplate/build.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+ Builds, tests, and runs the project JME3TestsTemplate.
+
+
+
diff --git a/sdk/JME3TestsTemplate/nbproject/build-impl.xml b/sdk/JME3TestsTemplate/nbproject/build-impl.xml
new file mode 100644
index 000000000..acc4402f2
--- /dev/null
+++ b/sdk/JME3TestsTemplate/nbproject/build-impl.xml
@@ -0,0 +1,880 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set src.dir
+ Must set build.dir
+ Must set dist.dir
+ Must set build.classes.dir
+ Must set dist.javadoc.dir
+ Must set build.test.classes.dir
+ Must set build.test.results.dir
+ Must set build.classes.excludes
+ Must set dist.jar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ To run this application from the command line without Ant, try:
+
+
+
+
+
+
+ java -cp "${run.classpath.with.dist.jar}" ${main.class}
+
+
+
+
+
+
+
+
+
+
+
+ To run this application from the command line without Ant, try:
+
+ java -jar "${dist.jar.resolved}"
+
+
+
+
+
+
+
+ To run this application from the command line without Ant, try:
+
+ java -jar "${dist.jar.resolved}"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set debug.class
+
+
+
+
+ Must select one file in the IDE or set debug.class
+
+
+
+
+ Must set fix.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Some tests failed; see details above.
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+ Some tests failed; see details above.
+
+
+
+
+ Must select one file in the IDE or set test.class
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sdk/JME3TestsTemplate/nbproject/genfiles.properties b/sdk/JME3TestsTemplate/nbproject/genfiles.properties
new file mode 100644
index 000000000..6fb0f140e
--- /dev/null
+++ b/sdk/JME3TestsTemplate/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=0f706f4a
+build.xml.script.CRC32=0b0b23c4
+build.xml.stylesheet.CRC32=28e38971@1.38.1.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=0f706f4a
+nbproject/build-impl.xml.script.CRC32=46d1a69a
+nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45
diff --git a/sdk/JME3TestsTemplate/nbproject/project.properties b/sdk/JME3TestsTemplate/nbproject/project.properties
new file mode 100644
index 000000000..2a8d46f22
--- /dev/null
+++ b/sdk/JME3TestsTemplate/nbproject/project.properties
@@ -0,0 +1,77 @@
+application.title=JME3TestsTemplate
+application.vendor=jMonkeyEngine
+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}/JME3TestsTemplate.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
+excludes=
+includes=**
+jar.compress=false
+javac.classpath=\
+ ${libs.jme3.classpath}:\
+ ${libs.jme3-libraries.classpath}:\
+ ${libs.jme3-libraries-blender.classpath}:\
+ ${libs.jme3-test-data.classpath}
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.source=1.5
+javac.target=1.5
+javac.test.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}:\
+ ${libs.junit.classpath}:\
+ ${libs.junit_4.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=
+jaxbwiz.endorsed.dirs="${netbeans.home}/../ide12/modules/ext/jaxb/api"
+jnlp.applet.class=jme3test.awt.TestApplet
+jnlp.applet.height=300
+jnlp.applet.width=300
+jnlp.codebase.type=local
+jnlp.descriptor=application
+jnlp.enabled=false
+jnlp.offline-allowed=false
+jnlp.signed=false
+main.class=jme3test.TestChooser
+manifest.file=manifest.mf
+meta.inf.dir=${src.dir}/META-INF
+platform.active=default_platform
+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
+# or test-sys-prop.name=value to set system properties for unit tests):
+run.jvmargs=
+run.test.classpath=\
+ ${javac.test.classpath}:\
+ ${build.test.classes.dir}
+source.encoding=UTF-8
+src.dir=src
diff --git a/sdk/JME3TestsTemplate/nbproject/project.xml b/sdk/JME3TestsTemplate/nbproject/project.xml
new file mode 100644
index 000000000..f6e7a0c99
--- /dev/null
+++ b/sdk/JME3TestsTemplate/nbproject/project.xml
@@ -0,0 +1,13 @@
+
+
+ org.netbeans.modules.java.j2seproject
+
+
+ JME3TestsTemplate
+
+
+
+
+
+
+
diff --git a/sdk/JME3TestsTemplateAndroid/MANIFEST.MF b/sdk/JME3TestsTemplateAndroid/MANIFEST.MF
new file mode 100644
index 000000000..7e1ad4bb1
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/MANIFEST.MF
@@ -0,0 +1 @@
+X-Comment: Created with jMonkeyPlatform
diff --git a/sdk/JME3TestsTemplateAndroid/build.xml b/sdk/JME3TestsTemplateAndroid/build.xml
new file mode 100644
index 000000000..c39ff06f2
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/build.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+
+
+ Builds, tests, and runs the project BasicGameTemplate.
+
+
+
+
+
diff --git a/sdk/JME3TestsTemplateAndroid/master-application.jnlp b/sdk/JME3TestsTemplateAndroid/master-application.jnlp
new file mode 100644
index 000000000..49cbb12f2
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/master-application.jnlp
@@ -0,0 +1,22 @@
+
+
+ ${APPLICATION.TITLE}
+ ${APPLICATION.VENDOR}
+
+ ${APPLICATION.DESC}
+ ${APPLICATION.DESC.SHORT}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/AndroidManifest.xml b/sdk/JME3TestsTemplateAndroid/mobile/AndroidManifest.xml
new file mode 100644
index 000000000..cddd3676d
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/mobile/AndroidManifest.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/ant.properties b/sdk/JME3TestsTemplateAndroid/mobile/ant.properties
new file mode 100644
index 000000000..b0971e891
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/mobile/ant.properties
@@ -0,0 +1,17 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked into Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+# 'source.dir' for the location of your java source folder and
+# 'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+# 'key.store' for the location of your keystore and
+# 'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
+
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/build.xml b/sdk/JME3TestsTemplateAndroid/mobile/build.xml
new file mode 100644
index 000000000..601ecade7
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/mobile/build.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/proguard-project.txt b/sdk/JME3TestsTemplateAndroid/mobile/proguard-project.txt
new file mode 100644
index 000000000..b60ae7ea0
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/mobile/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/project.properties b/sdk/JME3TestsTemplateAndroid/mobile/project.properties
new file mode 100644
index 000000000..85aac5401
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/mobile/project.properties
@@ -0,0 +1,14 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-8
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/monkey256.png b/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/monkey256.png
new file mode 100644
index 000000000..aa43ad6cf
Binary files /dev/null and b/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/monkey256.png differ
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/monkey256_9.9.png b/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/monkey256_9.9.png
new file mode 100644
index 000000000..4c90f34a1
Binary files /dev/null and b/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/monkey256_9.9.png differ
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/monkey512.png b/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/monkey512.png
new file mode 100644
index 000000000..c31857454
Binary files /dev/null and b/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/monkey512.png differ
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/monkey512_9.9.png b/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/monkey512_9.9.png
new file mode 100644
index 000000000..39d45a961
Binary files /dev/null and b/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/monkey512_9.9.png differ
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/nonselected.png b/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/nonselected.png
new file mode 100644
index 000000000..45cafef25
Binary files /dev/null and b/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/nonselected.png differ
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/selected.png b/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/selected.png
new file mode 100644
index 000000000..ba92fce41
Binary files /dev/null and b/sdk/JME3TestsTemplateAndroid/mobile/res/drawable/selected.png differ
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/res/layout/main.xml b/sdk/JME3TestsTemplateAndroid/mobile/res/layout/main.xml
new file mode 100644
index 000000000..8e4ae707d
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/mobile/res/layout/main.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/res/layout/test_chooser_layout.xml b/sdk/JME3TestsTemplateAndroid/mobile/res/layout/test_chooser_layout.xml
new file mode 100644
index 000000000..cfa8c309d
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/mobile/res/layout/test_chooser_layout.xml
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/res/layout/test_chooser_row.xml b/sdk/JME3TestsTemplateAndroid/mobile/res/layout/test_chooser_row.xml
new file mode 100644
index 000000000..8805363b6
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/mobile/res/layout/test_chooser_row.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/res/menu/optionsmenu.xml b/sdk/JME3TestsTemplateAndroid/mobile/res/menu/optionsmenu.xml
new file mode 100644
index 000000000..ee09ea9be
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/mobile/res/menu/optionsmenu.xml
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/res/values/strings.xml b/sdk/JME3TestsTemplateAndroid/mobile/res/values/strings.xml
new file mode 100644
index 000000000..3927854c6
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/mobile/res/values/strings.xml
@@ -0,0 +1,18 @@
+
+
+
+ jMonkeyEngine Test Applications
+
+
+ Choose a demo to start:
+ Find:
+ Enter a Filter
+ OK
+ Cancel
+
+
+ Enable Mouse Events
+ Disable Mouse Events
+ Enable Joystick Events
+ Disable Joystick Events
+
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/src/com/jmonkeyengine/tests/CustomArrayAdapter.java b/sdk/JME3TestsTemplateAndroid/mobile/src/com/jmonkeyengine/tests/CustomArrayAdapter.java
new file mode 100644
index 000000000..64134eb6f
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/mobile/src/com/jmonkeyengine/tests/CustomArrayAdapter.java
@@ -0,0 +1,169 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.jmonkeyengine.tests;
+
+import android.content.Context;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.Filter;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import java.util.ArrayList;
+import java.util.List;
+
+public class CustomArrayAdapter extends ArrayAdapter {
+ private static final String TAG = "CustomArrayAdapter";
+
+ /* List of items */
+ private List entries;
+ private Context activity;
+
+ /* Position of selected answer */
+ private int selectedPosition = -1;
+ /* Background Color of selected item */
+ private int selectedBackgroundColor = 0xffff00;
+ /* Background Color of non selected item */
+ private int nonselectedBackgroundColor = 0x000000;
+ /* Background Drawable Resource ID of selected item */
+ private int selectedBackgroundResource = 0;
+ /* Background Drawable Resource ID of non selected items */
+ private int nonselectedBackgroundResource = 0;
+
+ /* Variables to support list filtering */
+ private ArrayList filteredEntries;
+ private Filter filter;
+
+ public CustomArrayAdapter(Context context, int textViewResourceId, List objects) {
+ super(context, textViewResourceId, objects);
+ activity = context;
+ entries = new ArrayList(objects);
+ filteredEntries = new ArrayList(objects);
+ filter = new ClassNameFilter();
+ }
+
+ /** Setter for selected item position */
+ public void setSelectedPosition(int selectedPosition) {
+ this.selectedPosition = selectedPosition;
+ Log.i(TAG, "Setting position to: " + this.selectedPosition);
+ }
+
+ /** Setter for selected item background color */
+ public void setSelectedBackgroundColor(int selectedBackgroundColor) {
+ this.selectedBackgroundColor = selectedBackgroundColor;
+ }
+
+ /** Setter for non selected background color */
+ public void setNonSelectedBackgroundColor(int nonselectedBackgroundColor) {
+ this.nonselectedBackgroundColor = nonselectedBackgroundColor;
+ }
+
+ /** Setter for selected item background resource id*/
+ public void setSelectedBackgroundResource(int selectedBackgroundResource) {
+ this.selectedBackgroundResource = selectedBackgroundResource;
+ }
+
+ /** Setter for non selected background resource id*/
+ public void setNonSelectedBackgroundResource(int nonselectedBackgroundResource) {
+ this.nonselectedBackgroundResource = nonselectedBackgroundResource;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ Log.i(TAG, "getView for position: " + position + " with selectedItem: " + selectedPosition);
+
+ View v = convertView;
+ ViewHolder holder;
+ if (v == null) {
+ LayoutInflater vi =
+ (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ v = vi.inflate(R.layout.test_chooser_row, null);
+ holder = new ViewHolder();
+ holder.textView = (TextView) v.findViewById(R.id.txtClassName);
+ holder.layoutRow = (LinearLayout) v.findViewById(R.id.layoutTestChooserRow);
+ v.setTag(holder);
+ } else {
+ holder=(ViewHolder)v.getTag();
+ }
+
+ final String itemText = filteredEntries.get(position);
+ if (itemText != null) {
+ holder.textView.setText(itemText);
+ if (position == selectedPosition) {
+ Log.i(TAG, "setting Background Color to: " + selectedBackgroundColor);
+// holder.textView.setBackgroundColor(selectedBackgroundColor);
+// holder.textView.setBackgroundResource(selectedBackgroundResource);
+ holder.layoutRow.setBackgroundResource(selectedBackgroundResource);
+ } else {
+ Log.i(TAG, "setting Background Color to: " + nonselectedBackgroundColor);
+// holder.textView.setBackgroundColor(nonselectedBackgroundColor);
+// holder.textView.setBackgroundResource(nonselectedBackgroundResource);
+ holder.layoutRow.setBackgroundResource(nonselectedBackgroundResource);
+ }
+ }
+ return v;
+
+ }
+
+ @Override
+ public Filter getFilter(){
+ if(filter == null){
+ filter = new ClassNameFilter();
+ }
+ return filter;
+ }
+
+ public static class ViewHolder{
+ public TextView textView;
+ public LinearLayout layoutRow;
+ }
+
+ private class ClassNameFilter extends Filter{
+ @Override
+ protected FilterResults performFiltering(CharSequence constraint){
+ FilterResults results = new FilterResults();
+ String prefix = constraint.toString().toLowerCase();
+ Log.i(TAG, "performFiltering: entries size: " + entries.size());
+ if (prefix == null || prefix.length() == 0){
+ ArrayList list = new ArrayList(entries);
+ results.values = list;
+ results.count = list.size();
+ Log.i(TAG, "clearing filter with size: " + list.size());
+ }else{
+ final ArrayList list = new ArrayList(entries);
+ final ArrayList nlist = new ArrayList();
+ int count = list.size();
+
+ for (int i = 0; i)results.values;
+ notifyDataSetChanged();
+ clear();
+ int count = filteredEntries.size();
+ for(int i = 0; i classNames = new ArrayList();
+ private List exclusions = new ArrayList();
+ private String rootPackage;
+
+ /* ListView that displays the test application class names. */
+ private ListView listClasses;
+
+ /* ArrayAdapter connects the spinner widget to array-based data. */
+ private CustomArrayAdapter arrayAdapter;
+
+ /* Buttons to start application or stop the activity. */
+ private Button btnOK;
+ private Button btnCancel;
+
+ /* Filter Edit Box */
+ EditText editFilterText;
+
+ /* Custom settings for the test app */
+ private boolean enableMouseEvents = true;
+ private boolean enableJoystickEvents = false;
+
+
+ /**
+ * Called when the activity is first created.
+ */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (savedInstanceState != null) {
+ Log.i(TAG, "Restoring selections in onCreate: "
+ + "position: " + savedInstanceState.getInt(SELECTED_LIST_POSITION, 0)
+ + "class: " + savedInstanceState.getString(SELECTED_APP_CLASS)
+ );
+ currentPosition = savedInstanceState.getInt(SELECTED_LIST_POSITION, 0);
+ currentSelection = savedInstanceState.getString(SELECTED_APP_CLASS);
+ enableMouseEvents = savedInstanceState.getBoolean(ENABLE_MOUSE_EVENTS, true);
+ enableJoystickEvents = savedInstanceState.getBoolean(ENABLE_JOYSTICK_EVENTS, false);
+ }
+
+
+ /* Set content view and register views */
+ setContentView(R.layout.test_chooser_layout);
+ btnOK = (Button) findViewById(R.id.btnOK);
+ btnCancel = (Button) findViewById(R.id.btnCancel);
+ listClasses = (ListView) findViewById(R.id.listClasses);
+ editFilterText = (EditText) findViewById(R.id.txtFilter);
+
+
+ /* Define the root package to start with */
+ rootPackage = "jme3test";
+
+ /* Create an array of Strings to define which classes to exclude */
+ exclusions.add("$"); // inner classes
+ exclusions.add("TestChooser"); // Desktop test chooser class
+ exclusions.add("awt"); // Desktop test chooser class
+
+// mExclusions.add("");
+
+ /*
+ * Read the class names from the dex file and filter based on
+ * name and super class.
+ */
+
+ Log.i(TAG, "Composing Test list...");
+
+ ApplicationInfo ai = this.getApplicationInfo();
+ String classPath = ai.sourceDir;
+ DexFile dex = null;
+ Enumeration apkClassNames = null;
+ try {
+ dex = new DexFile(classPath);
+ apkClassNames = dex.entries();
+ while (apkClassNames.hasMoreElements()) {
+ String className = apkClassNames.nextElement();
+ if (checkClassName(className) && checkClassType(className)) {
+ classNames.add(className);
+ }
+// classNames.add(className);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ dex.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /*
+ * Create a backing Adapter for the List View from a list of the
+ * classes. The list is defined by array of class names.
+ */
+ arrayAdapter = new CustomArrayAdapter(
+ this,
+ R.layout.test_chooser_row, // text view to display selection
+ classNames // array of strings to display
+ );
+
+ /* Set the resource id for selected and non selected backgrounds */
+ Log.i(TAG, "Setting Adapter Background Resource IDs");
+ arrayAdapter.setSelectedBackgroundResource(R.drawable.selected);
+ arrayAdapter.setNonSelectedBackgroundResource(R.drawable.nonselected);
+
+ /* Attach the Adapter to the spinner */
+ Log.i(TAG, "Setting ListView Adapter");
+ listClasses.setAdapter(arrayAdapter);
+
+ /* Set initial selection for the list */
+ setSelection(currentPosition);
+
+ /* Set Click and Text Changed listeners */
+ listClasses.setOnItemClickListener(this);
+ btnOK.setOnClickListener(this);
+ btnCancel.setOnClickListener(this);
+ editFilterText.addTextChangedListener(this);
+
+ }
+
+ /**
+ * User selected an application. Sets the current selection and redraws
+ * the list view to highlight the selected item.
+ * @param parent AdapterView tied to the list
+ * @param view The ListView
+ * @param position Selection position in the list of class names
+ * @param id
+ */
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ setSelection(position);
+ }
+
+ /**
+ * User clicked a view on the screen. Check for the OK and Cancel buttons
+ * and either start the applicaiton or exit.
+ * @param view
+ */
+ public void onClick(View view) {
+ if (view.equals(btnOK)) {
+ /* Get selected class, pack it in the intent and start the test app */
+ Log.i(TAG, "User selected OK for class: " + currentSelection);
+ Intent intent = new Intent(this, TestsHarness.class);
+ intent.putExtra(SELECTED_APP_CLASS, currentSelection);
+ intent.putExtra(ENABLE_MOUSE_EVENTS, enableMouseEvents);
+ intent.putExtra(ENABLE_JOYSTICK_EVENTS, enableJoystickEvents);
+ startActivity(intent);
+ } else if (view.equals(btnCancel)) {
+ /* Exit */
+ Log.i(TAG, "User selected Cancel");
+ finish();
+ }
+ }
+
+ /**
+ * Check class name to see if the class is in the root package and if it
+ * contains any of the exclusion strings
+ * @param className Class name to check
+ * @return true if the check passes, false otherwise
+ */
+ private boolean checkClassName(String className) {
+ boolean include = true;
+ /* check to see if the class in inside the rootPackage package */
+ if (className.startsWith(rootPackage)) {
+ /* check to see if the class contains any of the exlusion strings */
+ for (int i = 0; i < exclusions.size(); i++) {
+ if (className.contains(exclusions.get(i))) {
+ Log.i(TAG, "Skipping Class " + className + ". Includes exclusion string: " + exclusions.get(i) + ".");
+ include = false;
+ break;
+ }
+ }
+ } else {
+ include = false;
+ Log.i(TAG, "Skipping Class " + className + ". Not in the root package: " + rootPackage + ".");
+ }
+ return include;
+ }
+
+ /**
+ * Check to see if the class extends Application or SimpleApplication
+ * @param className Class name to check
+ * @return true if the check passes, false otherwise
+ */
+ private boolean checkClassType(String className) {
+ boolean include = true;
+ try {
+ Class> clazz = (Class>)Class.forName(className);
+ if (Application.class.isAssignableFrom(clazz)) {
+ Log.i(TAG, "Class " + className + " is a jME Application");
+ } else {
+ include = false;
+ Log.i(TAG, "Skipping Class " + className + ". Not a jME Application");
+ }
+
+ } catch (ClassNotFoundException cnfe) {
+ include = false;
+ Log.i(TAG, "Skipping Class " + className + ". Class not found.");
+ }
+ return include;
+ }
+
+ private void setSelection(int position) {
+ if (position == -1) {
+ arrayAdapter.setSelectedPosition(-1);
+ currentPosition = -1;
+ currentSelection = "";
+ btnOK.setEnabled(false);
+ listClasses.invalidateViews();
+ } else {
+ arrayAdapter.setSelectedPosition(position);
+ currentPosition = position;
+ currentSelection = arrayAdapter.getItem(position);
+ btnOK.setEnabled(true);
+ listClasses.invalidateViews();
+ }
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle savedInstanceState) {
+ super.onSaveInstanceState(savedInstanceState);
+ Log.i(TAG, "Saving selections in onSaveInstanceState: "
+ + "position: " + currentPosition + ", "
+ + "class: " + currentSelection + ", "
+ + "mouseEvents: " + enableMouseEvents + ", "
+ + "joystickEvents: " + enableJoystickEvents + ", "
+ );
+ // Save current selections to the savedInstanceState.
+ // This bundle will be passed to onCreate if the process is
+ // killed and restarted.
+ savedInstanceState.putString(SELECTED_APP_CLASS, currentSelection);
+ savedInstanceState.putInt(SELECTED_LIST_POSITION, currentPosition);
+ savedInstanceState.putBoolean(ENABLE_MOUSE_EVENTS, enableMouseEvents);
+ savedInstanceState.putBoolean(ENABLE_JOYSTICK_EVENTS, enableJoystickEvents);
+ }
+
+ @Override
+ public void onRestoreInstanceState(Bundle savedInstanceState) {
+ super.onRestoreInstanceState(savedInstanceState);
+// Log.i(TAG, "Restoring selections in onRestoreInstanceState: "
+// + "position: " + savedInstanceState.getInt(SELECTED_LIST_POSITION, 0)
+// + "class: " + savedInstanceState.getString(SELECTED_APP_CLASS)
+// );
+// //Restore selections from the savedInstanceState.
+// // This bundle has also been passed to onCreate.
+// currentPosition = savedInstanceState.getInt(SELECTED_LIST_POSITION, 0);
+// currentSelection = savedInstanceState.getString(SELECTED_APP_CLASS);
+ }
+
+ public void beforeTextChanged(CharSequence cs, int i, int i1, int i2) {
+ }
+
+ public void onTextChanged(CharSequence cs, int startPos, int beforePos, int count) {
+ Log.i(TAG, "onTextChanged with cs: " + cs + ", startPos: " + startPos + ", beforePos: " + beforePos + ", count: " + count);
+ arrayAdapter.getFilter().filter(cs.toString());
+ setSelection(-1);
+ }
+
+ public void afterTextChanged(Editable edtbl) {
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ editFilterText.removeTextChangedListener(this);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.optionsmenu, menu);
+
+ return true;
+}
+
+ @Override
+ public boolean onPrepareOptionsMenu (Menu menu) {
+ MenuItem item;
+
+ item = menu.findItem(R.id.optionEnableMouseEvents);
+ if (item != null) {
+ Log.i(TAG, "Found EnableMouseEvents menu item");
+ if (enableMouseEvents) {
+ item.setTitle(R.string.strOptionDisableMouseEventsTitle);
+ } else {
+ item.setTitle(R.string.strOptionEnableMouseEventsTitle);
+ }
+ }
+
+ item = menu.findItem(R.id.optionEnableJoystickEvents);
+ if (item != null) {
+ Log.i(TAG, "Found EnableJoystickEvents menu item");
+ if (enableJoystickEvents) {
+ item.setTitle(R.string.strOptionDisableJoystickEventsTitle);
+ } else {
+ item.setTitle(R.string.strOptionEnableJoystickEventsTitle);
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.optionEnableMouseEvents:
+ enableMouseEvents = !enableMouseEvents;
+ Log.i(TAG, "enableMouseEvents set to: " + enableMouseEvents);
+ break;
+ case R.id.optionEnableJoystickEvents:
+ enableJoystickEvents = !enableJoystickEvents;
+ Log.i(TAG, "enableJoystickEvents set to: " + enableJoystickEvents);
+ break;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+
+ return true;
+
+ }
+
+}
diff --git a/sdk/JME3TestsTemplateAndroid/mobile/src/com/jmonkeyengine/tests/TestsHarness.java b/sdk/JME3TestsTemplateAndroid/mobile/src/com/jmonkeyengine/tests/TestsHarness.java
new file mode 100644
index 000000000..f38fa102a
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/mobile/src/com/jmonkeyengine/tests/TestsHarness.java
@@ -0,0 +1,57 @@
+package com.jmonkeyengine.tests;
+
+import android.content.Intent;
+import com.jme3.app.AndroidHarness;
+import android.content.pm.ActivityInfo;
+import android.os.Bundle;
+import com.jme3.system.android.AndroidConfigChooser.ConfigType;
+
+public class TestsHarness extends AndroidHarness{
+
+ /*
+ * Note that you can ignore the errors displayed in this file,
+ * the android project will build regardless.
+ * Install the 'Android' plugin under Tools->Plugins->Available Plugins
+ * to get error checks and code completion for the Android project files.
+ */
+
+ public TestsHarness(){
+ // Set the application class to run
+ appClass = "mygame.Main";
+ // Try ConfigType.FASTEST; or ConfigType.LEGACY if you have problems
+ eglConfigType = ConfigType.BEST;
+ // Exit Dialog title & message
+ exitDialogTitle = "Exit?";
+ exitDialogMessage = "Press Yes";
+ // Enable verbose logging
+ eglConfigVerboseLogging = false;
+ // Choose screen orientation
+ // This test project also set the Activity to Landscape in the AndroidManifest.xml
+ // If you modify this, also modify AndroidManifest.xml
+ screenOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
+ // Invert the MouseEvents X (default = true)
+ mouseEventsInvertX = true;
+ // Invert the MouseEvents Y (default = true)
+ mouseEventsInvertY = true;
+ // Add splash screen drawable resource
+ splashPicID = R.drawable.monkey256_9;
+ // Simulate a joystick with Android device orientation data (default = false)
+ joystickEventsEnabled = false;
+ // Simulate mouse events with Android touch input (default = true)
+ mouseEventsEnabled = true;
+ mouseEventsInvertX = false;
+ mouseEventsInvertY = false;
+
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ Intent intent = getIntent();
+ appClass = intent.getStringExtra(MainActivity.SELECTED_APP_CLASS);
+ mouseEventsEnabled = intent.getBooleanExtra(MainActivity.ENABLE_MOUSE_EVENTS, mouseEventsEnabled);
+ joystickEventsEnabled = intent.getBooleanExtra(MainActivity.ENABLE_JOYSTICK_EVENTS, joystickEventsEnabled);
+
+ super.onCreate(savedInstanceState);
+ }
+
+}
diff --git a/sdk/JME3TestsTemplateAndroid/nbproject/assets-impl.xml b/sdk/JME3TestsTemplateAndroid/nbproject/assets-impl.xml
new file mode 100644
index 000000000..0a47d8d4e
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/nbproject/assets-impl.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sdk/JME3TestsTemplateAndroid/nbproject/build-impl.xml b/sdk/JME3TestsTemplateAndroid/nbproject/build-impl.xml
new file mode 100644
index 000000000..e067cf6cc
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/nbproject/build-impl.xml
@@ -0,0 +1,1383 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set src.dir
+ Must set build.dir
+ Must set dist.dir
+ Must set build.classes.dir
+ Must set dist.javadoc.dir
+ Must set build.test.classes.dir
+ Must set build.test.results.dir
+ Must set build.classes.excludes
+ Must set dist.jar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No tests executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set JVM to use for profiling in profiler.info.jvm
+ Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ To run this application from the command line without Ant, try:
+
+
+
+
+
+
+ java -cp "${run.classpath.with.dist.jar}" ${main.class}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ To run this application from the command line without Ant, try:
+
+ java -jar "${dist.jar.resolved}"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set debug.class
+
+
+
+
+ Must select one file in the IDE or set debug.class
+
+
+
+
+ Must set fix.includes
+
+
+
+
+
+
+
+
+
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set profile.class
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+
+
+
+
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Some tests failed; see details above.
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+ Some tests failed; see details above.
+
+
+
+ Must select some files in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+ Some tests failed; see details above.
+
+
+
+
+ Must select one file in the IDE or set test.class
+
+
+
+ Must select one file in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sdk/JME3TestsTemplateAndroid/nbproject/configs/run-android.properties b/sdk/JME3TestsTemplateAndroid/nbproject/configs/run-android.properties
new file mode 100644
index 000000000..b948d5f59
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/nbproject/configs/run-android.properties
@@ -0,0 +1,4 @@
+$label=Android Device
+$target.clean=clean clean-android
+$target.debug=run-android
+$target.run=run-android
diff --git a/sdk/JME3TestsTemplateAndroid/nbproject/genfiles.properties b/sdk/JME3TestsTemplateAndroid/nbproject/genfiles.properties
new file mode 100644
index 000000000..2fccfbe5e
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=94bf7c61
+build.xml.script.CRC32=79a29eb7
+build.xml.stylesheet.CRC32=958a1d3e@1.32.1.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=e2c7a974
+nbproject/build-impl.xml.script.CRC32=0bb68565
+nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
diff --git a/sdk/JME3TestsTemplateAndroid/nbproject/mobile-impl.xml b/sdk/JME3TestsTemplateAndroid/nbproject/mobile-impl.xml
new file mode 100644
index 000000000..2fe86add3
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/nbproject/mobile-impl.xml
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+ Building debug android application version.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Copying application libraries to android project.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Adding libraries for android.
+
+
+
+
+
+
+
+
+ Replacing bullet library with android native version.
+
+
+
+
+
+
+
+
+
+
+
+ Unzipping Assets to Android Directories
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Waiting for device to be ready.. Connect your device now if its not connected yet.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Logging android device output, cancel build or disconnect device to stop logging.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sdk/JME3TestsTemplateAndroid/nbproject/project.properties b/sdk/JME3TestsTemplateAndroid/nbproject/project.properties
new file mode 100644
index 000000000..e3a940489
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/nbproject/project.properties
@@ -0,0 +1,99 @@
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+ant.customtasks.libs=android-base
+application.homepage=http://jmonkeyenging.org
+application.title=jMonkeyEngine Test Applications
+application.vendor=jMonkeyEngine
+assets.jar.name=assets.jar
+assets.excludes=**/*.j3odata,**/*.mesh.xml,**/*.skeleton.xml,**/*.scene,**/*.material,**/*.obj,**/*.mtl,**/*.blend
+assets.folder.name=assets
+assets.compress=true
+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
+compile.on.save=false
+# 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}/${application.title}.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
+excludes=
+includes=**
+jar.archive.disabled=${jnlp.enabled}
+jar.compress=false
+jar.index=${jnlp.enabled}
+javac.classpath=\
+ ${libs.jme3.classpath}:\
+ ${libs.jme3-libraries.classpath}:\
+ ${libs.jme3-libraries-blender.classpath}:\
+ ${libs.jme3-test-data.classpath}
+# 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.test.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}
+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=
+jaxbwiz.endorsed.dirs="${netbeans.home}/../ide12/modules/ext/jaxb/api"
+jnlp.applet.class=jme3test.awt.AppHarness
+jnlp.applet.height=300
+jnlp.applet.width=300
+jnlp.codebase.type=local
+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=jme3test.TestChooser
+meta.inf.dir=${src.dir}/META-INF
+manifest.file=MANIFEST.MF
+mkdist.disabled=false
+mobile.android.enabled=true
+mobile.android.package=com.jmonkeyengine.tests
+mobile.android.target=android-8
+platform.active=default_platform
+run.classpath=\
+ ${javac.classpath}:\
+ ${build.classes.dir}:\
+ ${assets.folder.name}
+# 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
+# or test-sys-prop.name=value to set system properties for unit tests):
+run.jvmargs=
+run.test.classpath=\
+ ${javac.test.classpath}:\
+ ${build.test.classes.dir}
+source.encoding=UTF-8
+src.dir=src
diff --git a/sdk/JME3TestsTemplateAndroid/nbproject/project.xml b/sdk/JME3TestsTemplateAndroid/nbproject/project.xml
new file mode 100644
index 000000000..f40643b29
--- /dev/null
+++ b/sdk/JME3TestsTemplateAndroid/nbproject/project.xml
@@ -0,0 +1,21 @@
+
+
+ org.netbeans.modules.java.j2seproject
+
+
+
+
+
+
+
+
+
+
+ jME3TestsTemplateAndroid
+
+
+
+
+
+
+
diff --git a/sdk/README.TXT b/sdk/README.TXT
new file mode 100644
index 000000000..0885c29f7
--- /dev/null
+++ b/sdk/README.TXT
@@ -0,0 +1,41 @@
+What is the jMonkeyEngine SDK?
+------------------------------
+
+The jMonkeyEngine 3 SDK is a software development kit for Java 3-D game developers.
+It contains the jMonkeyEngine3 library and the jMonkeyPlatform, a game development environment.
+The jMonkeyEngine and the jMonkeyPlatform are platform-independent, open-source and free.
+
+This is an alpha release (May 2010). If you encounter any issues, please tell us!
+http://www.jmonkeyengine.com/wiki/doku.php/report_bugs
+We are looking forward to your feedback.
+
+
+Starting the jMonkeyPlatform
+----------------------------
+
+Windows: Double-Click the "bin/jmonkeyplatform.exe" file
+
+Mac OS: Double-Click the "jmonkeyplatform.app" Application
+
+Linux: chmod u+x bin/jmonkeyplatform; ./bin/jmonkeyplatform &
+
+
+Running jMonkeyEngine Demos
+---------------------------
+
+Choose File > New Project in the jMonkeyPlatform and create a "JME3 Tests" project.
+Run the test project to see JME3 feature demos.
+Browse the demo source code to learn from examples.
+
+
+Creating 3-D Games with the jMonkeyPlatform
+-------------------------------------------
+
+Using the jMonkeyPlatform is the easiest method to develop jMonkeyEngine-based 3-D games.
+Choose File > New Project and create a "Base Game" project to get started.
+
+See the online Documentation for jMonkeyPlatform at
+http://www.jmonkeyengine.com/wiki/doku.php/jme3:jmonkeyplatform
+
+Get jMonkeyEngine 3 tutorials at
+http://www.jmonkeyengine.com/wiki/doku.php/jme3
diff --git a/sdk/ant-jme/build.xml b/sdk/ant-jme/build.xml
new file mode 100644
index 000000000..5acf8cbcc
--- /dev/null
+++ b/sdk/ant-jme/build.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+ Builds, tests, and runs the project LoadImagesAntTask.
+
+
+
+
+
+
diff --git a/sdk/ant-jme/lib/ANT/ant.jar b/sdk/ant-jme/lib/ANT/ant.jar
new file mode 100644
index 000000000..bac289cdc
Binary files /dev/null and b/sdk/ant-jme/lib/ANT/ant.jar differ
diff --git a/sdk/ant-jme/lib/CopyLibs-2/org-netbeans-modules-java-j2seproject-copylibstask.jar b/sdk/ant-jme/lib/CopyLibs-2/org-netbeans-modules-java-j2seproject-copylibstask.jar
new file mode 100644
index 000000000..38246fd27
Binary files /dev/null and b/sdk/ant-jme/lib/CopyLibs-2/org-netbeans-modules-java-j2seproject-copylibstask.jar differ
diff --git a/sdk/ant-jme/lib/nblibraries.properties b/sdk/ant-jme/lib/nblibraries.properties
new file mode 100644
index 000000000..ee602518f
--- /dev/null
+++ b/sdk/ant-jme/lib/nblibraries.properties
@@ -0,0 +1,6 @@
+libs.ANT.classpath=\
+ ${base}/ANT/ant.jar
+libs.CopyLibs.classpath=\
+ ${base}/CopyLibs-2/org-netbeans-modules-java-j2seproject-copylibstask.jar
+libs.CopyLibs.displayName=CopyLibs Task
+libs.CopyLibs.prop-version=1.0
diff --git a/sdk/ant-jme/nbproject/build-impl.xml b/sdk/ant-jme/nbproject/build-impl.xml
new file mode 100644
index 000000000..384c4859a
--- /dev/null
+++ b/sdk/ant-jme/nbproject/build-impl.xml
@@ -0,0 +1,1419 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set src.dir
+ Must set build.dir
+ Must set dist.dir
+ Must set build.classes.dir
+ Must set dist.javadoc.dir
+ Must set build.test.classes.dir
+ Must set build.test.results.dir
+ Must set build.classes.excludes
+ Must set dist.jar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No tests executed.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must set JVM to use for profiling in profiler.info.jvm
+ Must set profiler agent JVM arguments in profiler.info.jvmargs.agent
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ To run this application from the command line without Ant, try:
+
+
+
+
+
+
+ java -cp "${run.classpath.with.dist.jar}" ${main.class}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ To run this application from the command line without Ant, try:
+
+ java -jar "${dist.jar.resolved}"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set debug.class
+
+
+
+
+ Must select one file in the IDE or set debug.class
+
+
+
+
+ Must set fix.includes
+
+
+
+
+
+
+
+
+
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set profile.class
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+
+
+
+
+ This target only works when run from inside the NetBeans IDE.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+
+ Must select one file in the IDE or set run.class
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set javac.includes
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Some tests failed; see details above.
+
+
+
+
+
+
+
+
+ Must select some files in the IDE or set test.includes
+
+
+
+ Some tests failed; see details above.
+
+
+
+ Must select some files in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+ Some tests failed; see details above.
+
+
+
+
+ Must select one file in the IDE or set test.class
+
+
+
+ Must select one file in the IDE or set test.class
+ Must select some method in the IDE or set test.method
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+ Must select one file in the IDE or set applet.url
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sdk/ant-jme/nbproject/genfiles.properties b/sdk/ant-jme/nbproject/genfiles.properties
new file mode 100644
index 000000000..d1ec873a3
--- /dev/null
+++ b/sdk/ant-jme/nbproject/genfiles.properties
@@ -0,0 +1,8 @@
+build.xml.data.CRC32=7f939454
+build.xml.script.CRC32=9384ed68
+build.xml.stylesheet.CRC32=28e38971@1.38.2.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=dd1578ef
+nbproject/build-impl.xml.script.CRC32=53d14a5f
+nbproject/build-impl.xml.stylesheet.CRC32=c6d2a60f@1.56.1.46
diff --git a/sdk/ant-jme/nbproject/project.properties b/sdk/ant-jme/nbproject/project.properties
new file mode 100644
index 000000000..80281cc3b
--- /dev/null
+++ b/sdk/ant-jme/nbproject/project.properties
@@ -0,0 +1,71 @@
+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=ant-jme
+application.vendor=normenhansen
+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}/ant-jme.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+endorsed.classpath=
+excludes=
+includes=**
+jar.compress=false
+javac.classpath=\
+ ${libs.ANT.classpath}
+# 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.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=
+meta.inf.dir=${src.dir}/META-INF
+mkdist.disabled=false
+platform.active=default_platform
+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
+# or test-sys-prop.name=value to set system properties for unit tests):
+run.jvmargs=
+run.test.classpath=\
+ ${javac.test.classpath}:\
+ ${build.test.classes.dir}
+source.encoding=UTF-8
+src.dir=src
diff --git a/sdk/ant-jme/nbproject/project.xml b/sdk/ant-jme/nbproject/project.xml
new file mode 100644
index 000000000..63b865932
--- /dev/null
+++ b/sdk/ant-jme/nbproject/project.xml
@@ -0,0 +1,16 @@
+
+
+ org.netbeans.modules.java.j2seproject
+
+
+ ant-jme
+
+
+
+
+
+
+ ./lib/nblibraries.properties
+
+
+
diff --git a/sdk/ant-jme/src/com/jme/ant/FixWikiLinks.java b/sdk/ant-jme/src/com/jme/ant/FixWikiLinks.java
new file mode 100644
index 000000000..24b7e55c7
--- /dev/null
+++ b/sdk/ant-jme/src/com/jme/ant/FixWikiLinks.java
@@ -0,0 +1,98 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.jme.ant;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.StringWriter;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+/**
+ *
+ * @author normenhansen
+ */
+public class FixWikiLinks extends Task {
+
+ File file;
+ String helpPath;
+
+ @Override
+ public void execute() throws BuildException {
+ validate();
+ BufferedReader rdr;
+ try {
+ rdr = new BufferedReader(new FileReader(file));
+ StringWriter out = new StringWriter();
+ String line = rdr.readLine();
+ while (line != null) {
+ //internal links
+ line = line.replaceAll("wiki/doku\\.php/([^>]*):([^>]*):([^>]*):([^>]*)\\?do=export_xhtmlbody", helpPath + "$1/$2/$3/$4.html");
+ line = line.replaceAll("wiki/doku\\.php/([^>]*):([^>]*):([^>]*)\\?do=export_xhtmlbody", helpPath + "$1/$2/$3.html");
+ line = line.replaceAll("wiki/doku\\.php/([^>]*):([^>]*)\\?do=export_xhtmlbody", helpPath + "$1/$2.html");
+ line = line.replaceAll("wiki/doku\\.php/([^>]*)\\?do=export_xhtmlbody", helpPath + "$1.html");
+ //images
+ line = line.replaceAll("/wiki/lib/exe/fetch\\.php/([^>]*):([^>]*):([^>]*):([^>]*)\"", "nbdocs:/" + helpPath + "$1/$2/$3/$4\"");
+ line = line.replaceAll("/wiki/lib/exe/fetch\\.php/([^>]*):([^>]*):([^>]*)\"", "nbdocs:/" + helpPath + "$1/$2/$3\"");
+ line = line.replaceAll("/wiki/lib/exe/fetch\\.php/([^>]*):([^>]*)\"", "nbdocs:/" + helpPath + "$1/$2\"");
+ line = line.replaceAll("/wiki/lib/exe/fetch\\.php/([^>]*)\"", "nbdocs:/" + helpPath + "$1\"");
+// line = line.replaceAll("/wiki/lib/exe/fetch\\.php?([^>]*)\"", "nbdocs:/" + helpPath + "external/$1\"").replaceAll("[_[^\\w\\däüö:ÄÜÖ\\/\\+\\-\\. ]]", "_");
+
+ line = line.replaceAll("]*)>]*)>", "");
+ line = line.replaceAll("]*)\\?([^>]*)\">", "");
+ // vvvv------v
+ //line=line.replaceAll("]*)>(.*(?))","$2");
+ //remove class, name and id from tags
+ line = line.replaceAll(" class=\"([^>]*)\">", ">");
+ line = line.replaceAll(" name=\"([^>]*)\">", ">");
+ line = line.replaceAll(" id=\"([^>]*)\">", ">");
+ //remove obnoxious spans using negative look-behind..
+ line = line.replaceAll("([^>]*)", "$1");
+ //remove links to http://www.google.com/search added by wiki
+ line = line.replaceAll("(.*)", "$3");
+ //make external links netbeans help external links
+// line = line.replaceAll("(.*)", "