Browse Source

Replacing bullet-native with Minie (#547)

* Replacing bullet-native with Minie
Removing blender module (will probably have to revert)
Removing xbuf,blender dependency

* Add back blender module, but strip it from blender related code.

* setting gravity working. simulating physics working

* blender begone

* didn't commit build file with Heart change
found more blender references

* remove printout from build file
Rickard Edén 1 year ago
parent
commit
ccd02d23a3
58 changed files with 184 additions and 6085 deletions
  1. 26 7
      build.gradle
  2. 3 3
      jme3-blender/nbproject/project.xml
  3. 0 51
      jme3-blender/src/com/jme3/gde/blender/BlenderAssetManagerConfigurator.java
  4. 0 72
      jme3-blender/src/com/jme3/gde/blender/BlenderDataObject.java
  5. 0 514
      jme3-blender/src/com/jme3/gde/blender/BlenderTool.java
  6. 3 3
      jme3-blender/src/com/jme3/gde/blender/Bundle.properties
  7. 0 85
      jme3-blender/src/com/jme3/gde/blender/ConvertToBlendAction.java
  8. 0 117
      jme3-blender/src/com/jme3/gde/blender/ConvertToJ3OAction.java
  9. 0 43
      jme3-blender/src/com/jme3/gde/blender/OpenInBlender.java
  10. 0 99
      jme3-blender/src/com/jme3/gde/blender/XbufDataObject.java
  11. 0 13
      jme3-blender/src/com/jme3/gde/blender/blender.svg
  12. 0 215
      jme3-blender/src/com/jme3/gde/blender/filetypes/AbstractBlenderImportDataObject.java
  13. 0 88
      jme3-blender/src/com/jme3/gde/blender/filetypes/Blender3dsDataObject.java
  14. 0 92
      jme3-blender/src/com/jme3/gde/blender/filetypes/BlenderDaeDataObject.java
  15. 0 93
      jme3-blender/src/com/jme3/gde/blender/filetypes/BlenderFbxDataObject.java
  16. 0 8
      jme3-blender/src/com/jme3/gde/blender/package-info.java
  17. BIN
      jme3-blender/src/com/jme3/gde/blender/tpl_anim.blend
  18. BIN
      jme3-blender/src/com/jme3/gde/blender/tpl_box.blend
  19. 0 13
      jme3-blender/src/com/jme3/gde/blender/xbuf.svg
  20. BIN
      jme3-core/release/modules/ext/jme3_physicsloader-0.5.jar
  21. 30 4
      jme3-core/src/com/jme3/gde/core/errorreport/ExceptionUtils.java
  22. 1 1
      jme3-core/src/com/jme3/gde/core/scene/controller/SceneToolController.java
  23. 29 3
      jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/JmeRigidBodyControl.java
  24. 27 1
      jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/JmeVehicleControl.java
  25. 56 0
      jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/editor/GravityPropertyEditor.java
  26. 1 1
      jme3-desktop-executables/nbproject/project.xml
  27. BIN
      jme3-desktop-executables/src/com/jme3/gde/desktop/executables/desktop-deployment-data.zip
  28. 2 49
      jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/3d_models.html
  29. 0 610
      jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender.html
  30. 0 65
      jme3-documentation/src/com/jme3/gde/docs/sdk/3ds_to_blender_to_jmp.html
  31. 0 362
      jme3-documentation/src/com/jme3/gde/docs/sdk/blender.html
  32. BIN
      jme3-lwjgl-applet/release/libs/applet-loader.zip
  33. 2 2
      jme3-vehicle-creator/src/com/jme3/gde/vehiclecreator/SuspensionSettings.java
  34. 4 4
      jme3-vehicle-creator/src/com/jme3/gde/vehiclecreator/VehicleEditorController.java
  35. 0 25
      nbi/stub/build.xml
  36. 0 74
      nbi/stub/ext/components/products/blender/build.xml
  37. 0 42
      nbi/stub/ext/components/products/blender/data/Bundle.properties
  38. BIN
      nbi/stub/ext/components/products/blender/data/icon.png
  39. BIN
      nbi/stub/ext/components/products/blender/data/icon48.png
  40. 0 1
      nbi/stub/ext/components/products/blender/manifest.mf
  41. 0 1788
      nbi/stub/ext/components/products/blender/nbproject/build-impl.xml
  42. 0 8
      nbi/stub/ext/components/products/blender/nbproject/genfiles.properties
  43. 0 85
      nbi/stub/ext/components/products/blender/nbproject/project.properties
  44. 0 26
      nbi/stub/ext/components/products/blender/nbproject/project.xml
  45. 0 0
      nbi/stub/ext/components/products/blender/src/org/mycompany/Bundle.properties
  46. 0 99
      nbi/stub/ext/components/products/blender/src/org/mycompany/ConfigurationLogic.java
  47. 0 43
      nbi/stub/ext/components/products/blender/src/org/mycompany/wizard.xml
  48. 0 51
      nbi/stub/ext/components/products/blender/src/org/mycompany/wizard/panels/Bundle.properties
  49. 0 182
      nbi/stub/ext/components/products/blender/src/org/mycompany/wizard/panels/ShortcutCreationPanel.java
  50. 0 1
      nbi/stub/ext/infra/build/products/README
  51. 0 161
      nbi/stub/ext/infra/build/products/blender-linux-x64/build.properties
  52. 0 101
      nbi/stub/ext/infra/build/products/blender-linux-x64/build.xml
  53. 0 162
      nbi/stub/ext/infra/build/products/blender-macosx/build.properties
  54. 0 101
      nbi/stub/ext/infra/build/products/blender-macosx/build.xml
  55. 0 160
      nbi/stub/ext/infra/build/products/blender-windows-x64/build.properties
  56. 0 98
      nbi/stub/ext/infra/build/products/blender-windows-x64/build.xml
  57. 0 161
      nbi/stub/ext/infra/build/products/blender-windows-x86/build.properties
  58. 0 98
      nbi/stub/ext/infra/build/products/blender-windows-x86/build.xml

+ 26 - 7
build.gradle

@@ -33,18 +33,16 @@ configurations.examplelibs {
 }
 
 dependencies {
-
-    corelibs dep("com.github.xbuf:jme3_xbuf:0.9.1", false, false)
     corelibs dep("com.badlogicgames.gdx:gdx-ai:1.8.2", true, true)
     corelibs dep("javax.help:javahelp:2.0.05", false, false)
 
     corelibs dep("org.jmonkeyengine:jme3-core:$jmeVersion-$jmeVersionTag", true, true)
     corelibs dep("org.jmonkeyengine:jme3-desktop:$jmeVersion-$jmeVersionTag", true, true)
-	corelibs dep("org.jmonkeyengine:jme3-awt-dialogs:$jmeVersion-$jmeVersionTag", true, true)
+    corelibs dep("org.jmonkeyengine:jme3-awt-dialogs:$jmeVersion-$jmeVersionTag", true, true)
     corelibs dep("org.jmonkeyengine:jme3-lwjgl:$jmeVersion-$jmeVersionTag", true, true)
     corelibs dep("org.jmonkeyengine:jme3-effects:$jmeVersion-$jmeVersionTag", true, true)
-    corelibs dep("org.jmonkeyengine:jme3-blender:3.3.2-stable", false, false) // Pin Pointed until jme3-blender has a dedicated release or support is phased out.
-    optlibs dep("com.github.stephengold:Minie:7.7.0", false, false) // replacement for bullet-native
+    corelibs dep("com.github.stephengold:Minie:7.7.0", false, false) // replacement for bullet-native
+    corelibs dep("com.github.stephengold:Heart:8.7.0", true, true) // requirement for Minie
     corelibs dep(fileTree("lib"), false, false)
     corelibs dep("org.jmonkeyengine:jme3-jogg:$jmeVersion-$jmeVersionTag", true, true)
 
@@ -64,7 +62,6 @@ dependencies {
     optlibs dep("org.jmonkeyengine:jme3-ios:$jmeVersion-$jmeVersionTag", true, true)
     optlibs dep("org.jmonkeyengine:jme3-android-native:$jmeVersion-$jmeVersionTag", true, true)
     optlibs dep("org.jmonkeyengine:jme3-lwjgl3:$jmeVersion-$jmeVersionTag", true, true)
-    optlibs dep("com.github.stephengold:Heart:8.7.0", true, true)
     optlibs dep("com.github.stephengold:Wes:0.7.5", true, true)
     testdatalibs dep("org.jmonkeyengine:jme3-testdata:$jmeVersion-$jmeVersionTag", false, false)
     examplelibs dep("org.jmonkeyengine:jme3-examples:$jmeVersion-$jmeVersionTag", false, true)
@@ -127,7 +124,19 @@ task copyBaseLibs(dependsOn:configurations.corelibs) {
                     from file
                     into "jme3-core-baselibs/release/modules/ext/"
                 }
-            }else if( !isSourceOrJavadoc(file.name)){
+            } else if( file.name.contains("Minie") && !isSourceOrJavadoc(file.name)) {
+                // Special handling of Minie, since it doesn't follow the name convention
+                copy {
+                    from file
+                    into "jme3-core-baselibs/release/modules/ext/"
+                }
+            } else if( file.name.contains("Heart") && !isSourceOrJavadoc(file.name)) {
+                // Special handling of Minie, since it doesn't follow the name convention
+                copy {
+                    from file
+                    into "jme3-core-baselibs/release/modules/ext/"
+                }
+            } else if( !isSourceOrJavadoc(file.name)){
                 copy {
                     from file
                     into "jme3-core-libraries/release/modules/ext/"
@@ -174,6 +183,16 @@ task createBaseXml(dependsOn: configurations.corelibs) {
                     jmeJarFiles.add(file)
                 }
 
+            } else if( file.name.contains("Minie") && !isSourceOrJavadoc(file.name)) {
+                // Special handling of Minie, since it doesn't follow the name convention
+                if(!jmeJarFiles.contains(file)) {
+                    jmeJarFiles.add(file)
+                }
+            } else if( file.name.contains("Heart") && !isSourceOrJavadoc(file.name)) {
+                // Special handling of Minie, since it doesn't follow the name convention
+                if(!jmeJarFiles.contains(file)) {
+                    jmeJarFiles.add(file)
+                }
             } else if(!isSourceOrJavadoc(file.name)) {
                 //collect external jars
                 externalJarFiles.add(file)

+ 3 - 3
jme3-blender/nbproject/project.xml

@@ -12,7 +12,7 @@
                     <compile-dependency/>
                     <run-dependency>
                         <release-version>1</release-version>
-                        <specification-version>3.3.0</specification-version>
+                        <specification-version>3.6.1</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>
@@ -21,7 +21,7 @@
                     <compile-dependency/>
                     <run-dependency>
                         <release-version>1</release-version>
-                        <specification-version>3.3.0</specification-version>
+                        <specification-version>3.6.1</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>
@@ -30,7 +30,7 @@
                     <compile-dependency/>
                     <run-dependency>
                         <release-version>1</release-version>
-                        <specification-version>3.3.0</specification-version>
+                        <specification-version>3.6.1</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>

+ 0 - 51
jme3-blender/src/com/jme3/gde/blender/BlenderAssetManagerConfigurator.java

@@ -1,51 +0,0 @@
-/*
- *  Copyright (c) 2009-2016 jMonkeyEngine
- *  All rights reserved.
- * 
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are
- *  met:
- * 
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 
- *  * Neither the name of 'jMonkeyEngine' nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- *  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- *  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package com.jme3.gde.blender;
-
-import com.jme3.asset.AssetManager;
-import com.jme3.gde.core.assets.AssetManagerConfigurator;
-import jme3_ext_xbuf.XbufLoader;
-
-/**
- *
- * @author normenhansen
- */
[email protected](service = AssetManagerConfigurator.class)
-public class BlenderAssetManagerConfigurator implements AssetManagerConfigurator {
-
-    @Override
-    public void prepareManager(AssetManager manager) {
-        manager.registerLoader(com.jme3.scene.plugins.blender.BlenderModelLoader.class, "blend");
-        manager.registerLoader(com.jme3.scene.plugins.blender.BlenderModelLoader.class, BlenderTool.TEMP_SUFFIX);
-        manager.registerLoader(XbufLoader.class, "xbuf");
-    }
-}

+ 0 - 72
jme3-blender/src/com/jme3/gde/blender/BlenderDataObject.java

@@ -1,72 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-package com.jme3.gde.blender;
-
-import com.jme3.asset.BlenderKey;
-import com.jme3.asset.ModelKey;
-import com.jme3.gde.core.assets.SpatialAssetDataObject;
-import java.io.IOException;
-import org.openide.awt.ActionID;
-import org.openide.awt.ActionReference;
-import org.openide.awt.ActionReferences;
-import org.openide.filesystems.FileObject;
-import org.openide.filesystems.MIMEResolver;
-import org.openide.loaders.DataObject;
-import org.openide.loaders.DataObjectExistsException;
-import org.openide.loaders.MultiFileLoader;
-import org.openide.util.NbBundle.Messages;
-
-@Messages({
-    "LBL_Blender_LOADER=Blender Files"
-})
[email protected](
-    displayName="#LBL_Blender_LOADER",
-    mimeType="application/blender",
-    extension={ "blend" }
-)
[email protected](
-    mimeType = "application/blender", 
-    iconBase = "com/jme3/gde/blender/blender.svg",
-    displayName="#LBL_Blender_LOADER",
-    position=300
-)
-@ActionReferences(value = {
-    @ActionReference(id =
-    @ActionID(category = "jMonkeyPlatform", id = "com.jme3.gde.core.assets.actions.ConvertModel"), path = "Loaders/application/blender/Actions", position = 10),
-    @ActionReference(id =
-    @ActionID(category = "jMonkeyPlatform", id = "com.jme3.gde.core.assets.actions.OpenModel"), path = "Loaders/application/blender/Actions", position = 20),
-    @ActionReference(id =
-    @ActionID(category = "Edit", id = "org.openide.actions.CutAction"), path = "Loaders/application/blender/Actions", position = 200, separatorBefore = 100),
-    @ActionReference(id =
-    @ActionID(category = "Edit", id = "org.openide.actions.CopyAction"), path = "Loaders/application/blender/Actions", position = 300, separatorAfter = 400),
-    @ActionReference(id =
-    @ActionID(category = "Edit", id = "org.openide.actions.DeleteAction"), path = "Loaders/application/blender/Actions", position = 500),
-    @ActionReference(id =
-    @ActionID(category = "System", id = "org.openide.actions.RenameAction"), path = "Loaders/application/blender/Actions", position = 600, separatorAfter = 700),
-    @ActionReference(id =
-    @ActionID(category = "System", id = "org.openide.actions.SaveAsTemplateAction"), path = "Loaders/application/blender/Actions", position = 800, separatorAfter = 900),
-    @ActionReference(id =
-    @ActionID(category = "System", id = "org.openide.actions.FileSystemAction"), path = "Loaders/application/blender/Actions", position = 1000, separatorAfter = 1100),
-    @ActionReference(id =
-    @ActionID(category = "System", id = "org.openide.actions.ToolsAction"), path = "Loaders/application/blender/Actions", position = 1200),
-    @ActionReference(id =
-    @ActionID(category = "System", id = "org.openide.actions.PropertiesAction"), path = "Loaders/application/blender/Actions", position = 1300)
-})
-public class BlenderDataObject extends SpatialAssetDataObject {
-
-    public BlenderDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
-        super(pf, loader);
-    }
-
-    @Override
-    public ModelKey getAssetKey() {
-        if(super.getAssetKey() instanceof BlenderKey){
-            return (BlenderKey)assetKey;
-        }
-        assetKey = new BlenderKey(super.getAssetKey().getName());
-        return (BlenderKey)assetKey;
-    }
-    
-}

+ 0 - 514
jme3-blender/src/com/jme3/gde/blender/BlenderTool.java

@@ -1,514 +0,0 @@
-/*
- Blender Options:
- -b or --background <file>	Load <file> in background (often used for UI-less rendering)
- -a or --render-anim 	Render frames from start to end (inclusive)
- -S or --scene <name>	Set the active scene <name> for rendering
- -f or --render-frame <frame>	Render frame <frame> and save it.	+<frame> start frame relative, -<frame> end frame relative.
- -s or --frame-start <frame>	Set start to frame <frame> (use before the -a argument)
- -e or --frame-end <frame>	Set end to frame <frame> (use before the -a argument)
- -j or --frame-jump <frames>	Set number of frames to step forward after each rendered frame
- -o or --render-output <path>	Set the render path and file name.	Use // at the start of the path to
- render relative to the blend file.	The # characters are replaced by the frame number, and used to define zero padding.
- ani_##_test.png becomes ani_01_test.png
- test-######.png becomes test-000001.png
- When the filename does not contain #, The suffix #### is added to the filename	The frame number will be added at the end of the filename.
- eg: blender -b foobar.blend -o //render_ -F PNG -x 1 -a
- //render_ becomes //render_####, writing frames as //render_0001.png//
- -E or --engine <engine>	Specify the render engine	use -E help to list available engines
-
- Format Options:
- -F or --render-format <format>	Set the render format, Valid options are...
- TGA IRIS JPEG MOVIE IRIZ RAWTGA
- AVIRAW AVIJPEG PNG BMP FRAMESERVER	(formats that can be compiled into blender, not available on all systems)
- HDR TIFF EXR MULTILAYER MPEG AVICODEC QUICKTIME CINEON DPX DDS
- -x or --use-extension <bool>	Set option to add the file extension to the end of the file
- -t or --threads <threads>	Use amount of <threads> for rendering in background	[1-64], 0 for systems processor count.
-
- Animation Playback Options:
- -a <options> <file(s)>	Playback <file(s)>, only operates this way when not running in background.
- -p <sx> <sy>	Open with lower left corner at <sx>, <sy>
- -m		Read from disk (Don't buffer)
- -f <fps> <fps-base>		Specify FPS to start with
- -j <frame>	Set frame step to <frame>
-
- Window Options:
- -w or --window-border 	Force opening with borders (default)
- -W or --window-borderless 	Force opening without borders
- -p or --window-geometry <sx> <sy> <w> <h>	Open with lower left corner at <sx>, <sy> and width and height as <w>, <h>
- -con or --start-console 	Start with the console window open (ignored if -b is set)
-
- Game Engine Specific Options:
- -g Game Engine specific options
- -g fixedtime		Run on 50 hertz without dropping frames
- -g vertexarrays		Use Vertex Arrays for rendering (usually faster)
- -g nomipmap		No Texture Mipmapping
- -g linearmipmap		Linear Texture Mipmapping instead of Nearest (default)
-
- Misc Options:
- -d or --debug 	Turn debugging on
- * Prints every operator call and their arguments
- * Disables mouse grab (to interact with a debugger in some cases)
- * Keeps python sys.stdin rather than setting it to None
- --debug-fpe 	Enable floating point exceptions
- --debug-ffmpeg 	Enable debug messages from FFmpeg library
- --debug-libmv 	Enable debug messages from libmv library
-
- --factory-startup 	Skip reading the "startup.blend" in the users home directory
-
- --env-system-datafiles 	Set the BLENDER_SYSTEM_DATAFILES environment variable
- --env-system-scripts 	Set the BLENDER_SYSTEM_SCRIPTS environment variable
- --env-system-python 	Set the BLENDER_SYSTEM_PYTHON environment variable
-
- -nojoystick 	Disable joystick support
- -noglsl 	Disable GLSL shading
- -noaudio 	Force sound system to None
- -setaudio 	Force sound system to a specific device	NULL SDL OPENAL JACK
-
- -h or --help 	Print this help text and exit
-
- -y or --enable-autoexec 	Enable automatic python script execution, (default)
- -Y or --disable-autoexec 	Disable automatic python script execution (pydrivers & startup scripts)
-
- -P or --python <filename>	Run the given Python script (filename or Blender Text)
- --python-console 	Run blender with an interactive console
- --addons 	Comma separated list of addons (no spaces)
- -v or --version 	Print Blender version and exit
- -- 	Ends option processing, following arguments passed unchanged. Access via python's sys.argv
- Other Options:
- /? 	Print this help text and exit (windows only)
- --debug-python 	Enable debug messages for python
- --debug-events 	Enable debug messages for the event system
- --debug-wm 	Enable debug messages for the window manager
- --debug-all 	Enable all debug messages (excludes libmv)
- --debug-value <value>	Set debug value of <value> on startup
-
- --debug-jobs 	Enable time profiling for background jobs.
- --verbose <verbose>	Set logging verbosity level.
- -R 	Register .blend extension, then exit (Windows only)
- -r 	Silently register .blend extension, then exit (Windows only)
- Argument Parsing:	arguments must be separated by white space. eg
- "blender -ba test.blend"
- ...will ignore the 'a'
- "blender -b test.blend -f8"
- ...will ignore 8 because there is no space between the -f and the frame value
- Argument Order:
- Arguments are executed in the order they are given. eg
- "blender --background test.blend --render-frame 1 --render-output /tmp"
- ...will not render to /tmp because '--render-frame 1' renders before the output path is set
- "blender --background --render-output /tmp test.blend --render-frame 1"
- ...will not render to /tmp because loading the blend file overwrites the render output that was set
- "blender --background test.blend --render-output /tmp --render-frame 1" works as expected.
-
- Environment Variables:
- $BLENDER_USER_CONFIG      Directory for user configuration files.
- $BLENDER_USER_SCRIPTS     Directory for user scripts.
- $BLENDER_SYSTEM_SCRIPTS   Directory for system wide scripts.
- $Directory for user data files (icons, translations, ..).
- $BLENDER_SYSTEM_DATAFILES Directory for system wide data files.
- $BLENDER_SYSTEM_PYTHON    Directory for system python libraries.
- $TMP or $TMPDIR           Store temporary files here.
- $SDL_AUDIODRIVER          LibSDL audio driver - alsa, esd, dma.
- $PYTHONHOME               Path to the python directory, eg. /usr/lib/python.
-
- blender/config
- blender/scripts
- blender/userscripts
- */
-package com.jme3.gde.blender;
-
-import com.jme3.gde.blender.scripts.Scripts;
-import java.awt.Frame;
-import java.io.File;
-import java.io.IOException;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import org.openide.DialogDisplayer;
-import org.openide.NotifyDescriptor;
-import org.openide.filesystems.FileObject;
-import org.openide.filesystems.FileUtil;
-import org.openide.modules.InstalledFileLocator;
-import org.openide.modules.Places;
-import org.openide.util.Exceptions;
-import org.openide.util.Utilities;
-import org.openide.windows.WindowManager;
-
-/**
- *
- * @author normenhansen
- */
-public class BlenderTool {
-
-    public static final String TEMP_SUFFIX = "blend";
-    private static final String mainFolderName = "blender";
-    private static final String configFolderName = mainFolderName + "/config";
-    private static final String scriptsFolderName = mainFolderName + "/scripts";
-    private static final String jmeScriptsFolderName = mainFolderName + "/jmescripts";
-    private static final String userScriptsFolderName = mainFolderName + "/userscripts";
-    private static final String tempFolderName = mainFolderName + "/temp";
-    private static final Logger logger = Logger.getLogger(BlenderTool.class.getName());
-    private static final AtomicBoolean blenderOpened = new AtomicBoolean(false);
-
-    private static String getBlenderExeName() {
-        if (Utilities.isWindows()) {
-            return "blender.exe";
-        } else {
-            return "blender";
-        }
-    }
-
-    private static String getBlenderOsPath() {
-        if (Utilities.isMac()) {
-            return "../blender/blender.app/Contents/MacOS";
-        } else {
-            return "../blender";
-        }
-    }
-    
-    private static String getBlenderOsSettingsPath() {
-        if (Utilities.isMac()) {
-            return "../blender/blender.app/Contents/Resources";
-        } else {
-            return "../blender";
-        }
-    }
-
-    /**
-     * We create a lot of own directories to place our scripts inside, have config/preferences files stored there etc.
-     * That's the place were we check for their existance and create them if necessary
-     * Note: We don't use config/scripts folder's anymore in favour of the blender internal paths.
-     * @return 
-     */
-    private static boolean checkBlenderFolders() {
-        String jmpDir = Places.getUserDirectory().getAbsolutePath();
-        FileObject fileObject = FileUtil.toFileObject(new File(jmpDir));
-        if (fileObject != null) {
-            //FileObject configFileObject = fileObject.getFileObject(configFolderName);
-            //FileObject scriptsFileObject = fileObject.getFileObject(scriptsFolderName);
-            FileObject jmeScriptsFileObject = fileObject.getFileObject(jmeScriptsFolderName);
-            FileObject userScriptsFileObject = fileObject.getFileObject(userScriptsFolderName);
-            /* if (configFileObject == null) {
-                try {
-                    configFileObject = FileUtil.createFolder(fileObject, configFolderName);
-                } catch (IOException ex) {
-                    Exceptions.printStackTrace(ex);
-                    return false;
-                }
-            }
-            if (scriptsFileObject == null) {
-                try {
-                    scriptsFileObject = FileUtil.createFolder(fileObject, scriptsFolderName);
-                } catch (IOException ex) {
-                    Exceptions.printStackTrace(ex);
-                    return false;
-                }
-            }*/
-            if (jmeScriptsFileObject == null) {
-                try {
-                    jmeScriptsFileObject = FileUtil.createFolder(fileObject, jmeScriptsFolderName);
-                } catch (IOException ex) {
-                    Exceptions.printStackTrace(ex);
-                    return false;
-                }
-            }
-            if (userScriptsFileObject == null) {
-                try {
-                    userScriptsFileObject = FileUtil.createFolder(fileObject, userScriptsFolderName);
-                } catch (IOException ex) {
-                    Exceptions.printStackTrace(ex);
-                    return false;
-                }
-            }
-            Scripts.copyToFolder(jmeScriptsFileObject); /* Unpack our converter scripts */
-        } else {
-            logger.log(Level.SEVERE, "No global settings folder found!");
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * This is the Path where blender will store all changes to the config.
-     * Note that this is not the blender default so you'll see different settings when launching blender from inside the SDK
-     * Why? Good question actually.
-     * @return 
-     */
-    private static String getConfigEnv() {
-        String ret = Places.getUserDirectory().getAbsolutePath() + "/" + configFolderName;
-        ret = ret.replace("/", File.separator);
-        return ret;
-    }
-
-    /**
-     * This is the Path where blender itself stores it's scripts.
-     * The plan was to take those scripts and reside them into a folder along with all the other scripts (UserScripts, ...),
-     * We don't do this anymore because there's no real reason to copy all the scripts or even maintain them on your own.
-     * Blender automatically takes care.
-     * @return 
-     */
-    private static String getSystemScriptsEnv() {
-        //TODO: using installed blender scripts folder
-        String ret = getBlenderSettingsFolder().getAbsolutePath() + "/" + "scripts";
-        //String ret = System.getProperty("netbeans.user") + "/" + scriptsFolderName;
-        ret = ret.replace("/", File.separator);
-        return ret;
-    }
-
-    /**
-     * This is the Path where we put custom userscripts inside.
-     * They would be available inside blender (examples would be some jmonkey-animation-helper-addon)
-     * @return The directory where the user scripts are
-     */
-    private static String getUserScriptsEnv() {
-        String ret = Places.getUserDirectory().getAbsolutePath() + "/" + userScriptsFolderName;
-        ret = ret.replace("/", File.separator);
-        return ret;
-    }
-
-    /**
-     * Get the full path to that script.
-     * Those are the scripts that come with jMonkeyEngine (so neither user nor system)
-     * @param scriptName The name of the Script
-     * @param prefix The prefix like "import" or "tool"
-     * @return The whole absolute path to that script
-     */
-    private static String getScriptPath(String scriptName, String prefix) {
-        String ret = Places.getUserDirectory().getAbsolutePath() + "/" + jmeScriptsFolderName + "/" + prefix + "_" + scriptName + ".py";
-        ret = ret.replace("/", File.separator);
-        return ret;
-    }
-
-    private static File getBlenderExecutable() {
-        File blender = InstalledFileLocator.getDefault().locate(getBlenderOsPath() + "/" + getBlenderExeName(), null, false);
-        if (blender == null) {
-            DialogDisplayer.getDefault().notify(new NotifyDescriptor.Message("Error finding Blender executable"));
-            logger.log(Level.SEVERE, "Error finding Blender executable");
-        }
-        return blender;
-    }
-
-    /**
-     * Get the main folder of blender where all resources are found:
-     * System Scripts, Bundled Python, etc.
-     * We don't need this anymore see {@link #getSystemScriptsEnv() }
-     * @return 
-     */
-    private static File getBlenderSettingsFolder() {
-        File blender = InstalledFileLocator.getDefault().locate(getBlenderOsSettingsPath() + "/2.76", null, false); /* Update this every new Blender Version you use */
-        if (blender == null) {
-            blender = InstalledFileLocator.getDefault().locate(getBlenderOsSettingsPath() + "/2.75", null, false);
-        }
-        if (blender == null) {
-            blender = InstalledFileLocator.getDefault().locate(getBlenderOsSettingsPath() + "/2.69", null, false);
-        }
-        if (blender == null) {
-            DialogDisplayer.getDefault().notify(new NotifyDescriptor.Message("Error finding Blender settings"));
-            logger.log(Level.SEVERE, "Error finding Blender settings");
-        }
-        return blender;
-    }
-
-    private static File getBlenderRootFolder() {
-        File blender = InstalledFileLocator.getDefault().locate(getBlenderOsPath(), null, false);
-        if (blender == null) {
-            DialogDisplayer.getDefault().notify(new NotifyDescriptor.Message("Error finding Blender root folder"));
-            logger.log(Level.SEVERE, "Error finding Blender root folder");
-        }
-        return blender;
-    }
-
-    /**
-     * Run Blender to convert .fbx or similar files to a blender file which can then be imported to .j3o
-     * @param type The Filetype (extension)
-     * @param input The FileObject (Input). It will be placed the same but with .blend
-     * @return Success or not.
-     */
-    public static boolean runConversionScript(String type, FileObject input) {
-        if (!checkBlenderFolders()) {
-            logger.log(Level.SEVERE, "Could not create blender settings folders!");
-            return false;
-        }
-        final File exe = getBlenderExecutable();
-        if (exe == null) {
-            logger.log(Level.SEVERE, "Could not find blender executable!");
-            return false;
-        }
-        logger.log(Level.INFO, "Running blender as converter for file {0}", input.getPath());
-        String scriptPath = getScriptPath(type, "import");
-        String inputPath = input.getPath().replace("/", File.separator);
-        String inputFolder = input.getParent().getPath().replace("/", File.separator) + File.separator;
-        String outputPath = inputFolder + input.getName() + "." + TEMP_SUFFIX;
-        try {
-            String command = exe.getAbsolutePath();
-            ProcessBuilder buildr = new ProcessBuilder(command, "-b",
-                    "--factory-startup",
-                    "-P", scriptPath,
-                    "--",
-                    "-i", inputPath,
-                    "-o", outputPath);
-            buildr.directory(getBlenderRootFolder());
-            //buildr.environment().put("BLENDER_USER_CONFIG", getConfigEnv());
-            //buildr.environment().put("BLENDER_SYSTEM_SCRIPTS", getSystemScriptsEnv());
-            buildr.environment().put("BLENDER_USER_SCRIPTS", getUserScriptsEnv());
-            Process proc = buildr.start();
-            OutputReader outReader = new OutputReader(proc.getInputStream());
-            OutputReader errReader = new OutputReader(proc.getErrorStream());
-            outReader.start();
-            errReader.start();
-            try {
-                proc.waitFor();
-            } catch (InterruptedException ex) {
-                Exceptions.printStackTrace(ex);
-            }
-            if (proc.exitValue() != 0) {
-                logger.log(Level.SEVERE, "Error running blender!");
-                return false;
-            }
-        } catch (IOException ex) {
-            Exceptions.printStackTrace(ex);
-        }
-        return true;
-    }
-
-    /**
-     * This will run a tool instead of an importer.
-     * See {@link #runConversionScript(java.lang.String, org.openide.filesystems.FileObject) }
-     * @param toolName The tool to use
-     * @param input The file to process
-     * @return sucess?
-     */
-    public static boolean runToolScript(String toolName, FileObject input) {
-        if (!checkBlenderFolders()) {
-            logger.log(Level.SEVERE, "Could not create blender settings folders!");
-            return false;
-        }
-        final File exe = getBlenderExecutable();
-        if (exe == null) {
-            logger.log(Level.SEVERE, "Could not find blender executable!");
-            return false;
-        }
-        logger.log(Level.INFO, "Running blender as {0} tool for file {1}", new Object[]{toolName, input.getPath()});
-        String scriptPath = getScriptPath(toolName, "tool");
-        String inputPath = input.getPath().replace("/", File.separator);
-        try {
-            String command = exe.getAbsolutePath();
-            ProcessBuilder buildr = new ProcessBuilder(command, "-b",
-                    "--factory-startup",
-                    "-P", scriptPath,
-                    "--",
-                    "-i", inputPath);
-            buildr.directory(getBlenderRootFolder());
-            //buildr.environment().put("BLENDER_USER_CONFIG", getConfigEnv());
-            //buildr.environment().put("BLENDER_SYSTEM_SCRIPTS", getSystemScriptsEnv());
-            buildr.environment().put("BLENDER_USER_SCRIPTS", getUserScriptsEnv());
-            Process proc = buildr.start();
-            OutputReader outReader = new OutputReader(proc.getInputStream());
-            OutputReader errReader = new OutputReader(proc.getErrorStream());
-            outReader.start();
-            errReader.start();
-            try {
-                proc.waitFor();
-            } catch (InterruptedException ex) {
-                Exceptions.printStackTrace(ex);
-            }
-            if (proc.exitValue() != 0) {
-                logger.log(Level.SEVERE, "Error running blender!");
-                return false;
-            }
-        } catch (IOException ex) {
-            Exceptions.printStackTrace(ex);
-        }
-        return true;
-    }
-
-    /**
-     * Simply open that Blender File
-     * @param file The file/path to open
-     * @param async Should this method lock until blender has finished?
-     * @return sucess?
-     */
-    private static boolean runBlender(final String file, boolean async) {
-        if (!checkBlenderFolders()) {
-            logger.log(Level.SEVERE, "Could not create blender settings folders!");
-            return false;
-        }
-        logger.log(Level.INFO, "Running blender with options {0}", file);
-        if (blenderOpened.getAndSet(true)) {
-            logger.log(Level.WARNING, "Blender seems to be running already.");
-            return false;
-        }
-        final AtomicBoolean successful = new AtomicBoolean(true);
-        final File exe = getBlenderExecutable();
-        if (exe == null) {
-            logger.log(Level.SEVERE, "Could not find blender executable!");
-            blenderOpened.set(false);
-            return false;
-        }
-        final Frame mainWin = WindowManager.getDefault().getMainWindow();
-        assert (mainWin != null);
-        mainWin.setExtendedState(Frame.ICONIFIED);
-        Runnable r = new Runnable() {
-            public void run() {
-                try {
-                    String command = exe.getAbsolutePath();
-                    ProcessBuilder buildr = new ProcessBuilder(command, file);
-                    buildr.directory(getBlenderRootFolder()); /* Set working Directory to where the executables are */
-                    //buildr.environment().put("BLENDER_USER_CONFIG", getConfigEnv());
-                    //buildr.environment().put("BLENDER_SYSTEM_SCRIPTS", getSystemScriptsEnv());
-                    buildr.environment().put("BLENDER_USER_SCRIPTS", getUserScriptsEnv());
-                    Process proc = buildr.start();
-                    OutputReader outReader = new OutputReader(proc.getInputStream());
-                    OutputReader errReader = new OutputReader(proc.getErrorStream());
-                    outReader.start();
-                    errReader.start();
-                    try {
-                        proc.waitFor();
-                    } catch (InterruptedException ex) {
-                        Exceptions.printStackTrace(ex);
-                    }
-                    if (proc.exitValue() == 0) {
-                        successful.set(true);
-                    }
-                } catch (Exception ex) {
-                    Exceptions.printStackTrace(ex);
-                    successful.set(false);
-                } finally {
-                    blenderOpened.set(false);
-                    java.awt.EventQueue.invokeLater(new Runnable() {
-                        public void run() {
-                            mainWin.setExtendedState(Frame.NORMAL);
-                            mainWin.requestFocus();
-                        }
-                    });
-                }
-            }
-        };
-        if (async) {
-            new Thread(r).start();
-        } else {
-            r.run();
-        }
-        return successful.get();
-    }
-
-    /**
-     * Open the file in Blender.
-     * Note: Path Seperators are automatically converted, so always use the unix "/" way.
-     * @param file The File to open
-     * @return Whether we had success or not
-     */
-    public static boolean openInBlender(FileObject file) {
-        String path = file.getPath().replace("/", File.separator);
-        return runBlender(path, true);
-    }
-
-    /**
-     * Simply just run Blender
-     */
-    public static void runBlender() {
-        if (!runBlender(null, true)) {
-            logger.log(Level.INFO, "Could not run blender, already running? Trying to focus window.");
-            DialogDisplayer.getDefault().notifyLater(new NotifyDescriptor.Message("Blender is already running!"));
-        }
-    }
-}

+ 3 - 3
jme3-blender/src/com/jme3/gde/blender/Bundle.properties

@@ -1,5 +1,5 @@
 OpenIDE-Module-Display-Category=jMonkeyEngine
 OpenIDE-Module-Long-Description=\
-    This plugin adds support for Blender .blend files, XBuf's .xbuf files and GLTF's .gltf .glb and .bin files
-OpenIDE-Module-Name=Blender, XBuf and GLTF Support
-OpenIDE-Module-Short-Description=Adds support for Blender .blend, XBuf's .xbuf and GLTF's .gltf .glb and .bin files
+    This plugin adds support for GLTF's .gltf .glb and .bin files
+OpenIDE-Module-Name=GLTF Support
+OpenIDE-Module-Short-Description=Adds support for GLTF's .gltf .glb and .bin files

+ 0 - 85
jme3-blender/src/com/jme3/gde/blender/ConvertToBlendAction.java

@@ -1,85 +0,0 @@
-/*
- *  Copyright (c) 2009-2016 jMonkeyEngine
- *  All rights reserved.
- * 
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are
- *  met:
- * 
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 
- *  * Neither the name of 'jMonkeyEngine' nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- *  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- *  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package com.jme3.gde.blender;
-
-import com.jme3.gde.blender.filetypes.AbstractBlenderImportDataObject;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.List;
-import org.openide.awt.ActionID;
-import org.openide.awt.ActionReference;
-import org.openide.awt.ActionReferences;
-import org.openide.awt.ActionRegistration;
-import org.openide.filesystems.FileObject;
-import org.openide.loaders.MultiDataObject;
-import org.openide.util.NbBundle.Messages;
-
-@ActionID(
-        category = "jMonkeyPlatform",
-        id = "com.jme3.gde.blender.ConvertToBlendAction"
-)
-@ActionRegistration(
-        displayName = "#CTL_ConvertToBlendAction"
-)
-@ActionReferences({
-    @ActionReference(path = "Loaders/application/fbx/Actions", position = 150),
-    @ActionReference(path = "Loaders/model/vnd.collada+xml/Actions", position = 150),
-    @ActionReference(path = "Loaders/application/x-3ds/Actions", position = 150)
-})
-@Messages("CTL_ConvertToBlendAction=Convert to .blend file")
-
-/**
- * The "Convert to .blend" Action is there for all files which are converted by the blender importers.
- * It allows you to convert an .fbx/.3ds file into a .blend file so that you can modify the file before the final .j3o import.
- * 
- * @author MeFisto94
- */
-public final class ConvertToBlendAction implements ActionListener {
-
-    private final List<MultiDataObject> context;
-
-    public ConvertToBlendAction(List<MultiDataObject> context) {
-        this.context = context;
-    }
-
-    @Override
-    public void actionPerformed(ActionEvent ev) {
-        /* We need a context list because you can select multiple objects */
-        for (MultiDataObject multiDataObject : context) {
-            if (multiDataObject instanceof AbstractBlenderImportDataObject) {
-                AbstractBlenderImportDataObject obj = (AbstractBlenderImportDataObject)multiDataObject;
-                FileObject file = obj.importFile();
-                // BlenderTool.openInBlender(file);
-            }
-        }
-    }
-}

+ 0 - 117
jme3-blender/src/com/jme3/gde/blender/ConvertToJ3OAction.java

@@ -1,117 +0,0 @@
-/*
- *  Copyright (c) 2009-2016 jMonkeyEngine
- *  All rights reserved.
- * 
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are
- *  met:
- * 
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 
- *  * Neither the name of 'jMonkeyEngine' nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- *  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- *  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package com.jme3.gde.blender;
-
-import com.jme3.gde.blender.filetypes.AbstractBlenderImportDataObject;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.beans.PropertyChangeListener;
-import java.util.List;
-import javax.swing.Action;
-import org.openide.awt.ActionID;
-import org.openide.awt.ActionReference;
-import org.openide.awt.ActionReferences;
-import org.openide.awt.ActionRegistration;
-import org.openide.loaders.MultiDataObject;
-import org.openide.util.NbBundle.Messages;
-
-@ActionID(
-        category = "jMonkeyPlatform",
-        id = "com.jme3.gde.blender.ConvertToJ3OAction"
-)
-@ActionRegistration(
-        displayName = "#CTL_ConvertToJ3OAction"
-)
-@ActionReferences({
-    @ActionReference(path = "Loaders/application/fbx/Actions", position = 150),
-    @ActionReference(path = "Loaders/model/vnd.collada+xml/Actions", position = 150),
-    @ActionReference(path = "Loaders/application/x-3ds/Actions", position = 150)
-})
-@Messages("CTL_ConvertToJ3OAction=Convert to .j3o binary")
-
-/**
- * The "Convert to .j3o" Action is there for all files which are converted by the blender importers.
- * It allows you to convert an .fbx/.3ds file into a .j3o file using blenders import capabilites.
- * 
- * @author MeFisto94
- */
-public final class ConvertToJ3OAction implements Action {
-
-    private final List<MultiDataObject> context;
-
-    public ConvertToJ3OAction(List<MultiDataObject> context) {
-        this.context = context;
-    }
-
-    @Override
-    public void actionPerformed(ActionEvent ev) {
-        /* We need a context list because you can select multiple objects */
-        for (MultiDataObject multiDataObject : context) {
-            if (multiDataObject instanceof AbstractBlenderImportDataObject) {
-                AbstractBlenderImportDataObject obj = (AbstractBlenderImportDataObject)multiDataObject;
-                obj.loadAsset();
-            }
-        }
-    }
-
-    @Override
-    public Object getValue(String key) {
-        return null;
-    }
-
-    @Override
-    public void putValue(String key, Object value) {
-        
-    }
-
-    @Override
-    public void setEnabled(boolean b) {
-        
-    }
-
-    @Override
-    public boolean isEnabled() {
-        return true;
-    }
-
-    @Override
-    public void addPropertyChangeListener(PropertyChangeListener listener) {
-        
-    }
-
-    @Override
-    public void removePropertyChangeListener(PropertyChangeListener listener) {
-        
-    }
-    
-    
-}

+ 0 - 43
jme3-blender/src/com/jme3/gde/blender/OpenInBlender.java

@@ -1,43 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-package com.jme3.gde.blender;
-
-import com.jme3.gde.core.scene.ApplicationLogHandler.LogLevel;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.util.logging.Logger;
-import org.openide.awt.ActionID;
-import org.openide.awt.ActionReference;
-import org.openide.awt.ActionReferences;
-import org.openide.awt.ActionRegistration;
-import org.openide.util.NbBundle.Messages;
-
-@ActionID(
-    category = "jMonkeyEngine",
-id = "com.jme3.gde.blender.OpenBlender")
-@ActionRegistration(
-    iconBase = "com/jme3/gde/blender/blender.svg",
-displayName = "#CTL_OpenInBlender")
-@ActionReferences({
-    @ActionReference(path = "Toolbars/File", position = 335),
-    @ActionReference(path = "Loaders/application/blender/Actions", position = 9)
-})
-@Messages("CTL_OpenInBlender=Open in Blender")
-public final class OpenInBlender implements ActionListener {
-
-    private static final Logger logger = Logger.getLogger(OpenInBlender.class.getName());
-    private final BlenderDataObject context;
-
-    public OpenInBlender(BlenderDataObject context) {
-        this.context = context;
-    }
-
-    @Override
-    public void actionPerformed(ActionEvent ev) {
-        if (!BlenderTool.openInBlender(context.getPrimaryFile())) {
-            logger.log(LogLevel.INFO, "Could not open file in blender.");
-        }
-    }
-}

+ 0 - 99
jme3-blender/src/com/jme3/gde/blender/XbufDataObject.java

@@ -1,99 +0,0 @@
-/*
- *  Copyright (c) 2009-2016 jMonkeyEngine
- *  All rights reserved.
- * 
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are
- *  met:
- * 
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 
- *  * Neither the name of 'jMonkeyEngine' nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- *  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- *  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package com.jme3.gde.blender;
-
-import com.jme3.asset.ModelKey;
-import com.jme3.gde.core.assets.SpatialAssetDataObject;
-import java.io.IOException;
-import org.openide.awt.ActionID;
-import org.openide.awt.ActionReference;
-import org.openide.awt.ActionReferences;
-import org.openide.filesystems.FileObject;
-import org.openide.filesystems.MIMEResolver;
-import org.openide.loaders.DataObject;
-import org.openide.loaders.DataObjectExistsException;
-import org.openide.loaders.MultiFileLoader;
-import org.openide.util.NbBundle.Messages;
-import jme3_ext_xbuf.*;
-
-@Messages({
-    "LBL_XBUF_LOADER=XBuf Files"
-})
[email protected](
-    displayName="#LBL_XBUF_LOADER",
-    mimeType="application/xbuf",
-    extension={ "xbuf" }
-)
[email protected](
-    mimeType = "application/xbuf", 
-    iconBase = "com/jme3/gde/blender/xbuf.svg",
-    displayName="#LBL_XBUF_LOADER",
-    position=300
-)
-@ActionReferences(value = {
-    @ActionReference(id =
-    @ActionID(category = "jMonkeyPlatform", id = "com.jme3.gde.core.assets.actions.ConvertModel"), path = "Loaders/application/xbuf/Actions", position = 10),
-    @ActionReference(id =
-    @ActionID(category = "jMonkeyPlatform", id = "com.jme3.gde.core.assets.actions.OpenModel"), path = "Loaders/application/xbuf/Actions", position = 20),
-    @ActionReference(id =
-    @ActionID(category = "Edit", id = "org.openide.actions.CutAction"), path = "Loaders/application/xbuf/Actions", position = 200, separatorBefore = 100),
-    @ActionReference(id =
-    @ActionID(category = "Edit", id = "org.openide.actions.CopyAction"), path = "Loaders/application/xbuf/Actions", position = 300, separatorAfter = 400),
-    @ActionReference(id =
-    @ActionID(category = "Edit", id = "org.openide.actions.DeleteAction"), path = "Loaders/application/xbuf/Actions", position = 500),
-    @ActionReference(id =
-    @ActionID(category = "System", id = "org.openide.actions.RenameAction"), path = "Loaders/application/xbuf/Actions", position = 600, separatorAfter = 700),
-    @ActionReference(id =
-    @ActionID(category = "System", id = "org.openide.actions.SaveAsTemplateAction"), path = "Loaders/application/xbuf/Actions", position = 800, separatorAfter = 900),
-    @ActionReference(id =
-    @ActionID(category = "System", id = "org.openide.actions.FileSystemAction"), path = "Loaders/application/xbuf/Actions", position = 1000, separatorAfter = 1100),
-    @ActionReference(id =
-    @ActionID(category = "System", id = "org.openide.actions.ToolsAction"), path = "Loaders/application/xbuf/Actions", position = 1200),
-    @ActionReference(id =
-    @ActionID(category = "System", id = "org.openide.actions.PropertiesAction"), path = "Loaders/application/xbuf/Actions", position = 1300)
-})
-public class XbufDataObject extends SpatialAssetDataObject {
-
-    public XbufDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
-        super(pf, loader);
-    }
-
-    @Override
-    public ModelKey getAssetKey() {
-        if(super.getAssetKey() instanceof XbufKey){
-            return (XbufKey)assetKey;
-        }
-        assetKey = new XbufKey(super.getAssetKey().getName());
-        return (XbufKey)assetKey;
-    }
-    
-}

+ 0 - 13
jme3-blender/src/com/jme3/gde/blender/blender.svg

@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" version="1.1" viewBox="0 0 181 148" width="16px" height="16px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
-    <title>Blender logo (without text)</title>
-    <g transform="matrix(.281 0 0 .281 -41.8 -43.7)">
-        <g transform="matrix(21.6 0 0 21.6 -4857 7665)">
-            <path d="m243-334c0.106-1.89 1.03-3.56 2.43-4.74 1.37-1.16 3.21-1.87 5.23-1.87 2.01 0 3.85 0.709 5.22 1.87 1.4 1.18 2.32 2.85 2.43 4.74 0.106 1.94-0.675 3.75-2.04 5.09-1.4 1.36-3.38 2.22-5.61 2.22s-4.22-0.854-5.61-2.22c-1.37-1.34-2.15-3.14-2.04-5.08z" style="fill-rule:nonzero;fill:#fff"/>
-        </g>
-        <g transform="matrix(11.1 0 0 11.1 -2215 4153)">
-            <path d="m243-334c0.106-1.89 1.03-3.56 2.43-4.74 1.37-1.16 3.21-1.87 5.23-1.87 2.01 0 3.85 0.709 5.22 1.87 1.4 1.18 2.32 2.85 2.43 4.74 0.106 1.94-0.675 3.75-2.04 5.09-1.4 1.36-3.38 2.22-5.61 2.22s-4.22-0.854-5.61-2.22c-1.37-1.34-2.15-3.14-2.04-5.08z" style="fill-rule:nonzero;fill:#265787"/>
-            <path d="m231-330c0.013 0.74 0.249 2.18 0.603 3.3 0.744 2.38 2.01 4.58 3.76 6.51 1.8 1.99 4.02 3.59 6.58 4.73 2.69 1.19 5.61 1.8 8.64 1.8 3.03-4e-3 5.95-0.624 8.64-1.83 2.56-1.15 4.78-2.75 6.58-4.75 1.76-1.95 3.02-4.15 3.76-6.53 0.375-1.2 0.612-2.42 0.707-3.64 0.093-1.2 0.054-2.41-0.117-3.62-0.334-2.35-1.15-4.56-2.4-6.56-1.14-1.85-2.62-3.46-4.38-4.82l4e-3 -3e-3 -17.7-13.6c-0.016-0.012-0.029-0.025-0.046-0.036-1.16-0.892-3.12-0.889-4.39 5e-3 -1.29 0.904-1.44 2.4-0.29 3.34l-5e-3 5e-3 7.39 6.01-22.5 0.024h-0.03c-1.86 2e-3 -3.65 1.22-4 2.77-0.364 1.57 0.9 2.88 2.84 2.88l-3e-3 7e-3 11.4-0.022-20.4 15.6c-0.026 0.019-0.054 0.039-0.078 0.058-1.92 1.47-2.54 3.92-1.33 5.46 1.23 1.57 3.84 1.58 5.78 9e-3l11.1-9.1s-0.162 1.23-0.149 1.96zm28.6 4.11c-2.29 2.33-5.5 3.66-8.96 3.66-3.47 6e-3 -6.68-1.3-8.97-3.63-1.12-1.14-1.94-2.44-2.45-3.83-0.497-1.37-0.69-2.82-0.562-4.28 0.121-1.43 0.547-2.8 1.23-4.03 0.668-1.21 1.59-2.31 2.72-3.24 2.23-1.81 5.06-2.8 8.02-2.8 2.97-4e-3 5.8 0.969 8.03 2.78 1.13 0.924 2.05 2.02 2.72 3.23 0.683 1.23 1.11 2.59 1.23 4.03 0.126 1.46-0.067 2.91-0.564 4.28-0.508 1.4-1.33 2.7-2.45 3.84z" style="fill-rule:nonzero;fill:#ea7600"/>
-        </g>
-    </g>
-</svg>

+ 0 - 215
jme3-blender/src/com/jme3/gde/blender/filetypes/AbstractBlenderImportDataObject.java

@@ -1,215 +0,0 @@
-/*
- *  Copyright (c) 2009-2016 jMonkeyEngine
- *  All rights reserved.
- * 
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are
- *  met:
- * 
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 
- *  * Neither the name of 'jMonkeyEngine' nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- *  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- *  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package com.jme3.gde.blender.filetypes;
-
-import com.jme3.asset.BlenderKey;
-import com.jme3.gde.blender.BlenderTool;
-import com.jme3.gde.blender.ConvertToJ3OAction;
-import com.jme3.gde.core.assets.AssetDataNode;
-import com.jme3.gde.core.assets.ProjectAssetManager;
-import com.jme3.gde.core.assets.SpatialAssetDataObject;
-import com.jme3.gde.core.util.Beans;
-import com.jme3.gde.core.util.SpatialUtil;
-import com.jme3.scene.Spatial;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.logging.Level;
-import javax.swing.Action;
-import org.openide.DialogDisplayer;
-import org.openide.NotifyDescriptor;
-import org.openide.filesystems.FileObject;
-import org.openide.filesystems.FileUtil;
-import org.openide.loaders.DataObject;
-import org.openide.loaders.DataObjectExistsException;
-import org.openide.loaders.MultiDataObject;
-import org.openide.loaders.MultiFileLoader;
-import org.openide.nodes.Children;
-import org.openide.nodes.Node;
-import org.openide.util.Exceptions;
-import org.openide.util.Lookup;
-import org.openide.util.lookup.ProxyLookup;
-
-/**
- * The AbstractBlenderImportDataObject handles all possible Filetypes which should be automatically converted by Blender's Importer.
- * You have to extend this class and just set the correct suffix. See: {@link BlenderFbxDataObject}
- * @author normenhansen
- */
-public abstract class AbstractBlenderImportDataObject extends SpatialAssetDataObject {
-
-    protected String SUFFIX;
-
-    public AbstractBlenderImportDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
-        super(pf, loader);
-    }
-
-    @Override
-    public Spatial loadAsset() {
-        if (savable != null) {
-            return (Spatial) savable;
-        }
-        ProjectAssetManager mgr = getLookup().lookup(ProjectAssetManager.class);
-        if (mgr == null) {
-            DialogDisplayer.getDefault().notifyLater(new NotifyDescriptor.Message("File is not part of a project!\nCannot load without ProjectAssetManager."));
-            return null;
-        }
-        FileObject outFile = importFile(mgr);
-        String assetKeyName = mgr.getRelativeAssetPath(outFile.getPath());
-        BlenderKey key = new BlenderKey(assetKeyName);
-        Beans.copyProperties(key, getAssetKey());
-        try {
-            listListener.start();
-            Spatial spatial = mgr.loadModel(key);
-            replaceFiles();
-            listListener.stop();
-            SpatialUtil.storeOriginalPathUserData(spatial);
-            savable = spatial;
-            logger.log(Level.INFO, "Loaded asset {0}", getName());
-            return spatial;
-        } catch (Exception ex) {
-            logger.log(Level.SEVERE, ex.getMessage(), ex);
-            Exceptions.printStackTrace(ex);
-        } finally {
-            try {
-                outFile.delete();
-            } catch (IOException ex) {
-                Exceptions.printStackTrace(ex);
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public synchronized BlenderKey getAssetKey() {
-        if (super.getAssetKey() instanceof BlenderKey) {
-            return (BlenderKey) assetKey;
-        }
-        assetKey = new BlenderKey(super.getAssetKey().getName());
-        return (BlenderKey) assetKey;
-    }
-
-    protected void replaceFiles() {
-        for (int i = 0; i < assetList.size(); i++) {
-            FileObject fileObject = assetList.get(i);
-            if (fileObject.hasExt(BlenderTool.TEMP_SUFFIX)) {
-                assetList.remove(i);
-                assetKeyList.remove(i);
-                assetList.add(i, getPrimaryFile());
-                assetKeyList.add(getAssetKey());
-                return;
-            }
-        }
-    }
-    
-    /**
-     * Use this method to convert this file into a blender model
-     * Note: This requires a bit of additional code (creating the PAM) so use the version without parameters if you don't plan to modify the blend further
-     * @param mgr The AssetManager which provides access to the Project Files
-     * @return The FileObject of the .blend file
-     */
-    public FileObject importFile(ProjectAssetManager mgr) {
-        if (SUFFIX == null) {
-            throw new IllegalStateException("Suffix for blender filetype is null! Set SUFFIX = \"sfx\" in constructor!");
-        }
-        
-        //make sure its actually closed and all data gets reloaded
-        closeAsset();
-        FileObject mainFile = getPrimaryFile();
-        
-        if (FileUtil.findBrother(mainFile, BlenderTool.TEMP_SUFFIX) != null) {
-            logger.log(Level.SEVERE, "Cannot convert " + getName() + " to .blend because there is already a file with this name. Delete it and try again!");
-            return null;
-        }
-        
-        if (!BlenderTool.runConversionScript(SUFFIX, mainFile)) {
-            logger.log(Level.SEVERE, "Failed to create model, running blender caused an error");
-            return null;
-        }
-        mainFile.getParent().refresh();
-        FileObject outFile = FileUtil.findBrother(mainFile, BlenderTool.TEMP_SUFFIX);
-        if (outFile == null) {
-            logger.log(Level.SEVERE, "Failed to create model, blend file cannot be found");
-            return null;
-        }
-        int i = 1;
-        FileObject blend1File = FileUtil.findBrother(mainFile, BlenderTool.TEMP_SUFFIX + i);
-        while (blend1File != null) {
-            try {
-                blend1File.delete();
-            } catch (IOException ex) {
-                Exceptions.printStackTrace(ex);
-            }
-            i++;
-            blend1File = FileUtil.findBrother(mainFile, BlenderTool.TEMP_SUFFIX + i);
-        }
-        
-        return outFile;
-    }
-    
-    /**
-     * Use this method to simply convert any supported file into a .blend file.
-     * @return The FileObject for the converted .blend file
-     */
-    public FileObject importFile() {
-        ProjectAssetManager mgr = getLookup().lookup(ProjectAssetManager.class);
-        if (mgr == null) {
-            DialogDisplayer.getDefault().notifyLater(new NotifyDescriptor.Message("File is not part of a project!\nCannot load without ProjectAssetManager."));
-            return null;
-        }
-        FileObject outFile = importFile(mgr);
-        return outFile;
-    }
-
-    @Override
-    protected Node createNodeDelegate() {
-        MyAssetDataNode node = new MyAssetDataNode(this, Children.LEAF, new ProxyLookup(getCookieSet().getLookup(), contentLookup));
-        node.setIconBaseWithExtension("com/jme3/gde/core/icons/model.gif");
-        return node;
-    }
-    
-    private class MyAssetDataNode extends AssetDataNode {
-        public MyAssetDataNode(DataObject obj, Children ch) {
-            super(obj, ch);
-        }
-
-        public MyAssetDataNode(DataObject obj, Children ch, Lookup lookup) {
-            super(obj, ch, lookup);
-        }
-
-        @Override
-        public Action getPreferredAction()
-        {
-            ArrayList<MultiDataObject> ctx = new ArrayList<MultiDataObject>();
-            ctx.add((MultiDataObject)getDataObject());
-            return new ConvertToJ3OAction(ctx);
-        }   
-    }
-}

+ 0 - 88
jme3-blender/src/com/jme3/gde/blender/filetypes/Blender3dsDataObject.java

@@ -1,88 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-package com.jme3.gde.blender.filetypes;
-
-import java.io.IOException;
-import org.openide.awt.ActionID;
-import org.openide.awt.ActionReference;
-import org.openide.awt.ActionReferences;
-import org.openide.filesystems.FileObject;
-import org.openide.filesystems.MIMEResolver;
-import org.openide.loaders.DataObject;
-import org.openide.loaders.DataObjectExistsException;
-import org.openide.loaders.MultiFileLoader;
-import org.openide.util.NbBundle.Messages;
-
-@Messages({
-    "LBL_Blender3ds_LOADER=3DS Files (via Blender)"
-})
[email protected](
-        displayName = "#LBL_Blender3ds_LOADER",
-        mimeType = "application/x-3ds",
-        extension = {"3ds", "3DS"})
[email protected](
-        mimeType = "application/x-3ds",
-        iconBase = "com/jme3/gde/blender/blender.svg",
-        displayName = "#LBL_Blender3ds_LOADER",
-        position = 300)
-@ActionReferences({
-    @ActionReference(
-            path = "Loaders/application/x-3ds/Actions",
-            id =
-            @ActionID(category = "System", id = "org.openide.actions.OpenAction"),
-            position = 100,
-            separatorAfter = 200),
-    @ActionReference(
-            path = "Loaders/application/x-3ds/Actions",
-            id =
-            @ActionID(category = "Edit", id = "org.openide.actions.CutAction"),
-            position = 300),
-    @ActionReference(
-            path = "Loaders/application/x-3ds/Actions",
-            id =
-            @ActionID(category = "Edit", id = "org.openide.actions.CopyAction"),
-            position = 400,
-            separatorAfter = 500),
-    @ActionReference(
-            path = "Loaders/application/x-3ds/Actions",
-            id =
-            @ActionID(category = "Edit", id = "org.openide.actions.DeleteAction"),
-            position = 600),
-    @ActionReference(
-            path = "Loaders/application/x-3ds/Actions",
-            id =
-            @ActionID(category = "System", id = "org.openide.actions.RenameAction"),
-            position = 700,
-            separatorAfter = 800),
-    @ActionReference(
-            path = "Loaders/application/x-3ds/Actions",
-            id =
-            @ActionID(category = "System", id = "org.openide.actions.SaveAsTemplateAction"),
-            position = 900,
-            separatorAfter = 1000),
-    @ActionReference(
-            path = "Loaders/application/x-3ds/Actions",
-            id =
-            @ActionID(category = "System", id = "org.openide.actions.FileSystemAction"),
-            position = 1100,
-            separatorAfter = 1200),
-    @ActionReference(
-            path = "Loaders/application/x-3ds/Actions",
-            id =
-            @ActionID(category = "System", id = "org.openide.actions.ToolsAction"),
-            position = 1300),
-    @ActionReference(
-            path = "Loaders/application/x-3ds/Actions",
-            id =
-            @ActionID(category = "System", id = "org.openide.actions.PropertiesAction"),
-            position = 1400)
-})
-public class Blender3dsDataObject extends AbstractBlenderImportDataObject {
-
-    public Blender3dsDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
-        super(pf, loader);
-        SUFFIX = "3ds";
-    }
-}

+ 0 - 92
jme3-blender/src/com/jme3/gde/blender/filetypes/BlenderDaeDataObject.java

@@ -1,92 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-package com.jme3.gde.blender.filetypes;
-
-import java.io.IOException;
-import org.openide.awt.ActionID;
-import org.openide.awt.ActionReference;
-import org.openide.awt.ActionReferences;
-import org.openide.filesystems.FileObject;
-import org.openide.filesystems.MIMEResolver;
-import org.openide.loaders.DataObject;
-import org.openide.loaders.DataObjectExistsException;
-import org.openide.loaders.MultiFileLoader;
-import org.openide.util.NbBundle.Messages;
-
-/**
- *
- * @author normenhansen
- */
-@Messages({
-    "LBL_BlenderDae_LOADER=Collada Files (via Blender)"
-})
[email protected](
-    displayName = "#LBL_BlenderDae_LOADER",
-mimeType = "model/vnd.collada+xml",
-extension = {"dae", "DAE"})
[email protected](
-    mimeType = "model/vnd.collada+xml",
-iconBase = "com/jme3/gde/blender/blender.svg",
-displayName = "#LBL_BlenderDae_LOADER",
-position = 300)
-@ActionReferences({
-    @ActionReference(
-        path = "Loaders/model/vnd.collada+xml/Actions",
-    id =
-    @ActionID(category = "System", id = "org.openide.actions.OpenAction"),
-    position = 100,
-    separatorAfter = 200),
-    @ActionReference(
-        path = "Loaders/model/vnd.collada+xml/Actions",
-    id =
-    @ActionID(category = "Edit", id = "org.openide.actions.CutAction"),
-    position = 300),
-    @ActionReference(
-        path = "Loaders/model/vnd.collada+xml/Actions",
-    id =
-    @ActionID(category = "Edit", id = "org.openide.actions.CopyAction"),
-    position = 400,
-    separatorAfter = 500),
-    @ActionReference(
-        path = "Loaders/model/vnd.collada+xml/Actions",
-    id =
-    @ActionID(category = "Edit", id = "org.openide.actions.DeleteAction"),
-    position = 600),
-    @ActionReference(
-        path = "Loaders/model/vnd.collada+xml/Actions",
-    id =
-    @ActionID(category = "System", id = "org.openide.actions.RenameAction"),
-    position = 700,
-    separatorAfter = 800),
-    @ActionReference(
-        path = "Loaders/model/vnd.collada+xml/Actions",
-    id =
-    @ActionID(category = "System", id = "org.openide.actions.SaveAsTemplateAction"),
-    position = 900,
-    separatorAfter = 1000),
-    @ActionReference(
-        path = "Loaders/model/vnd.collada+xml/Actions",
-    id =
-    @ActionID(category = "System", id = "org.openide.actions.FileSystemAction"),
-    position = 1100,
-    separatorAfter = 1200),
-    @ActionReference(
-        path = "Loaders/model/vnd.collada+xml/Actions",
-    id =
-    @ActionID(category = "System", id = "org.openide.actions.ToolsAction"),
-    position = 1300),
-    @ActionReference(
-        path = "Loaders/model/vnd.collada+xml/Actions",
-    id =
-    @ActionID(category = "System", id = "org.openide.actions.PropertiesAction"),
-    position = 1400)
-})
-public class BlenderDaeDataObject extends AbstractBlenderImportDataObject {
-
-    public BlenderDaeDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
-        super(pf, loader);
-        SUFFIX = "dae";
-    }
-}

+ 0 - 93
jme3-blender/src/com/jme3/gde/blender/filetypes/BlenderFbxDataObject.java

@@ -1,93 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-package com.jme3.gde.blender.filetypes;
-
-import java.io.IOException;
-import org.openide.awt.ActionID;
-import org.openide.awt.ActionReference;
-import org.openide.awt.ActionReferences;
-import org.openide.filesystems.FileObject;
-import org.openide.filesystems.MIMEResolver;
-import org.openide.loaders.DataObject;
-import org.openide.loaders.DataObjectExistsException;
-import org.openide.loaders.MultiFileLoader;
-import org.openide.util.NbBundle.Messages;
-
-@Messages({
-    "LBL_BlenderFbx_LOADER=Files of BlenderFbx"
-})
[email protected](
-        displayName = "#LBL_BlenderFbx_LOADER",
-        mimeType = "application/fbx",
-        extension = {"fbx"})
[email protected](
-        mimeType = "application/fbx",
-        iconBase = "com/jme3/gde/blender/blender.svg",
-        displayName = "#LBL_BlenderFbx_LOADER",
-        position = 300)
-@ActionReferences({
-    @ActionReference(
-            path = "Loaders/application/fbx/Actions",
-            id =
-            @ActionID(category = "System", id = "org.openide.actions.OpenAction"),
-            position = 100,
-            separatorAfter = 200),
-    @ActionReference(
-            path = "Loaders/application/fbx/Actions",
-            id =
-            @ActionID(category = "Edit", id = "org.openide.actions.CutAction"),
-            position = 300),
-    @ActionReference(
-            path = "Loaders/application/fbx/Actions",
-            id =
-            @ActionID(category = "Edit", id = "org.openide.actions.CopyAction"),
-            position = 400,
-            separatorAfter = 500),
-    @ActionReference(
-            path = "Loaders/application/fbx/Actions",
-            id =
-            @ActionID(category = "Edit", id = "org.openide.actions.DeleteAction"),
-            position = 600),
-    @ActionReference(
-            path = "Loaders/application/fbx/Actions",
-            id =
-            @ActionID(category = "System", id = "org.openide.actions.RenameAction"),
-            position = 700,
-            separatorAfter = 800),
-    @ActionReference(
-            path = "Loaders/application/fbx/Actions",
-            id =
-            @ActionID(category = "System", id = "org.openide.actions.SaveAsTemplateAction"),
-            position = 900,
-            separatorAfter = 1000),
-    @ActionReference(
-            path = "Loaders/application/fbx/Actions",
-            id =
-            @ActionID(category = "System", id = "org.openide.actions.FileSystemAction"),
-            position = 1100,
-            separatorAfter = 1200),
-    @ActionReference(
-            path = "Loaders/application/fbx/Actions",
-            id =
-            @ActionID(category = "System", id = "org.openide.actions.ToolsAction"),
-            position = 1300),
-    @ActionReference(
-            path = "Loaders/application/fbx/Actions",
-            id =
-            @ActionID(category = "System", id = "org.openide.actions.PropertiesAction"),
-            position = 1400)
-})
-public class BlenderFbxDataObject extends AbstractBlenderImportDataObject {
-
-    public BlenderFbxDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
-        super(pf, loader);
-        SUFFIX = "fbx";
-//        registerEditor("application/fbx", false);
-    }
-//    @Override
-//    protected int associateLookup() {
-//        return 1;
-//    }
-}

+ 0 - 8
jme3-blender/src/com/jme3/gde/blender/package-info.java

@@ -1,8 +0,0 @@
-@TemplateRegistrations({
-    @TemplateRegistration(folder = "Blender", content = "tpl_box.blend", displayName = "Box prepared for UV texturing"),
-    @TemplateRegistration(folder = "Blender", content = "tpl_anim.blend", displayName = "Basic animation example")
-})
-package com.jme3.gde.blender;
-
-import org.netbeans.api.templates.TemplateRegistration;
-import org.netbeans.api.templates.TemplateRegistrations;

BIN
jme3-blender/src/com/jme3/gde/blender/tpl_anim.blend


BIN
jme3-blender/src/com/jme3/gde/blender/tpl_box.blend


+ 0 - 13
jme3-blender/src/com/jme3/gde/blender/xbuf.svg

@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg style="clip-rule:evenodd;fill-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" version="1.1" viewBox="0 0 181 148" width="16px" height="16px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
-    <title>Blender logo (without text)</title>
-    <g transform="matrix(.281 0 0 .281 -41.8 -43.7)">
-        <g transform="matrix(21.6 0 0 21.6 -4857 7665)">
-            <path d="m243-334c0.106-1.89 1.03-3.56 2.43-4.74 1.37-1.16 3.21-1.87 5.23-1.87 2.01 0 3.85 0.709 5.22 1.87 1.4 1.18 2.32 2.85 2.43 4.74 0.106 1.94-0.675 3.75-2.04 5.09-1.4 1.36-3.38 2.22-5.61 2.22s-4.22-0.854-5.61-2.22c-1.37-1.34-2.15-3.14-2.04-5.08z" style="fill-rule:nonzero;fill:#fff"/>
-        </g>
-        <g transform="matrix(11.1 0 0 11.1 -2215 4153)">
-            <path d="m243-334c0.106-1.89 1.03-3.56 2.43-4.74 1.37-1.16 3.21-1.87 5.23-1.87 2.01 0 3.85 0.709 5.22 1.87 1.4 1.18 2.32 2.85 2.43 4.74 0.106 1.94-0.675 3.75-2.04 5.09-1.4 1.36-3.38 2.22-5.61 2.22s-4.22-0.854-5.61-2.22c-1.37-1.34-2.15-3.14-2.04-5.08z" style="fill-rule:nonzero;fill:#265787"/>
-            <path d="m231-330c0.013 0.74 0.249 2.18 0.603 3.3 0.744 2.38 2.01 4.58 3.76 6.51 1.8 1.99 4.02 3.59 6.58 4.73 2.69 1.19 5.61 1.8 8.64 1.8 3.03-4e-3 5.95-0.624 8.64-1.83 2.56-1.15 4.78-2.75 6.58-4.75 1.76-1.95 3.02-4.15 3.76-6.53 0.375-1.2 0.612-2.42 0.707-3.64 0.093-1.2 0.054-2.41-0.117-3.62-0.334-2.35-1.15-4.56-2.4-6.56-1.14-1.85-2.62-3.46-4.38-4.82l4e-3 -3e-3 -17.7-13.6c-0.016-0.012-0.029-0.025-0.046-0.036-1.16-0.892-3.12-0.889-4.39 5e-3 -1.29 0.904-1.44 2.4-0.29 3.34l-5e-3 5e-3 7.39 6.01-22.5 0.024h-0.03c-1.86 2e-3 -3.65 1.22-4 2.77-0.364 1.57 0.9 2.88 2.84 2.88l-3e-3 7e-3 11.4-0.022-20.4 15.6c-0.026 0.019-0.054 0.039-0.078 0.058-1.92 1.47-2.54 3.92-1.33 5.46 1.23 1.57 3.84 1.58 5.78 9e-3l11.1-9.1s-0.162 1.23-0.149 1.96zm28.6 4.11c-2.29 2.33-5.5 3.66-8.96 3.66-3.47 6e-3 -6.68-1.3-8.97-3.63-1.12-1.14-1.94-2.44-2.45-3.83-0.497-1.37-0.69-2.82-0.562-4.28 0.121-1.43 0.547-2.8 1.23-4.03 0.668-1.21 1.59-2.31 2.72-3.24 2.23-1.81 5.06-2.8 8.02-2.8 2.97-4e-3 5.8 0.969 8.03 2.78 1.13 0.924 2.05 2.02 2.72 3.23 0.683 1.23 1.11 2.59 1.23 4.03 0.126 1.46-0.067 2.91-0.564 4.28-0.508 1.4-1.33 2.7-2.45 3.84z" style="fill-rule:nonzero;fill:#ea7600"/>
-        </g>
-    </g>
-</svg>

BIN
jme3-core/release/modules/ext/jme3_physicsloader-0.5.jar


+ 30 - 4
jme3-core/src/com/jme3/gde/core/errorreport/ExceptionUtils.java

@@ -31,7 +31,6 @@
  */
 package com.jme3.gde.core.errorreport;
 
-import com.google.common.base.Throwables;
 import com.jme3.system.JmeVersion;
 import org.openide.DialogDescriptor;
 import org.openide.DialogDisplayer;
@@ -68,11 +67,12 @@ public class ExceptionUtils {
             sB.append("If you need troubleshooting help, visit our forums, but "
             + "don't report this as a github issue");
         }
+        
         sB.append(newLine);
         sB.append("Comment: ");
         sB.append(comment);
         sB.append(newLine);
-        sB.append(t != null ? Throwables.getStackTraceAsString(t) : fakeCallstack());
+        sB.append(t != null ? convertStackTraceToString(t) : "No stacktrace");
         sB.append(newLine);
         //sB.append("Versions: ");
         //sB.append(newLine);
@@ -99,8 +99,34 @@ public class ExceptionUtils {
         caughtException(t, "", true);
     }
     
-    private static String fakeCallstack() {
-        return Throwables.getStackTraceAsString(new IllegalStateException("Fake-Callstack!"));
+    /**
+     * ChatGPT generated method to convert to string
+     * @param throwable
+     * @return 
+     */
+    private static String convertStackTraceToString(Throwable throwable) {
+        StringBuilder result = new StringBuilder();
+
+        // Append the exception message (if any)
+        if (throwable.getMessage() != null) {
+            result.append(throwable.getClass().getName()).append(": ").append(throwable.getMessage());
+            result.append(System.lineSeparator());
+        } else {
+            result.append(throwable.getClass().getName()).append(System.lineSeparator());
+        }
+
+        // Append each stack trace element
+        for (StackTraceElement element : throwable.getStackTrace()) {
+            result.append("\tat ").append(element.toString()).append(System.lineSeparator());
+        }
+
+        // Append the cause (if any)
+        Throwable cause = throwable.getCause();
+        if (cause != null) {
+            result.append("Caused by: ").append(convertStackTraceToString(cause));
+        }
+
+        return result.toString();
     }
 }
 

+ 1 - 1
jme3-core/src/com/jme3/gde/core/scene/controller/SceneToolController.java

@@ -327,7 +327,7 @@ public class SceneToolController extends AbstractAppState {
             control = geom.getControl(GhostControl.class);
         }
         if (control == null) {
-            control = geom.getControl(CharacterControl.class);
+            control = geom.getControl(CharacterControl.class).getCharacter();
         }
         if (control == null) {
             return;

+ 29 - 3
jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/JmeRigidBodyControl.java

@@ -33,18 +33,23 @@ package com.jme3.gde.core.sceneexplorer.nodes;
 
 import com.jme3.bullet.collision.shapes.CollisionShape;
 import com.jme3.bullet.control.RigidBodyControl;
+import com.jme3.bullet.objects.PhysicsRigidBody;
 import com.jme3.gde.core.icons.IconList;
+import com.jme3.gde.core.sceneexplorer.nodes.editor.GravityPropertyEditor;
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import java.awt.Image;
+import java.beans.PropertyEditor;
+import java.lang.reflect.InvocationTargetException;
 import org.openide.loaders.DataObject;
+import org.openide.nodes.PropertySupport;
 import org.openide.nodes.Sheet;
 
 /**
  *
  * @author normenhansen
  */
[email protected](service=SceneExplorerNode.class)
[email protected](service = SceneExplorerNode.class)
 @SuppressWarnings({"unchecked", "rawtypes"})
 public class JmeRigidBodyControl extends JmeControl {
 
@@ -90,11 +95,11 @@ public class JmeRigidBodyControl extends JmeControl {
         set.put(makeProperty(obj, CollisionShape.class, "getCollisionShape", "setCollisionShape", "Collision Shape"));
         set.put(makeProperty(obj, int.class, "getCollisionGroup", "setCollisionGroup", "Collision Group"));
         set.put(makeProperty(obj, int.class, "getCollideWithGroups", "setCollideWithGroups", "Collide With Groups"));
-        
+
         set.put(makeProperty(obj, float.class, "getFriction", "setFriction", "Friction"));
         set.put(makeProperty(obj, float.class, "getMass", "setMass", "Mass"));
         set.put(makeProperty(obj, boolean.class, "isKinematic", "setKinematic", "Kinematic"));
-        set.put(makeProperty(obj, Vector3f.class, "getGravity", "setGravity", "Gravity"));
+        set.put(createGravityProperty(obj));
         set.put(makeProperty(obj, float.class, "getLinearDamping", "setLinearDamping", "Linear Damping"));
         set.put(makeProperty(obj, float.class, "getAngularDamping", "setAngularDamping", "Angular Damping"));
         set.put(makeProperty(obj, float.class, "getRestitution", "setRestitution", "Restitution"));
@@ -121,4 +126,25 @@ public class JmeRigidBodyControl extends JmeControl {
     public org.openide.nodes.Node[] createNodes(Object key, DataObject key2, boolean cookie) {
         return new org.openide.nodes.Node[]{new JmeRigidBodyControl((RigidBodyControl) key, key2).setReadOnly(cookie)};
     }
+
+    private Property createGravityProperty(PhysicsRigidBody physicsRigidBody) {
+        return new PropertySupport("gravity", Vector3f.class, "Gravity", "Set the gravity vector", true, true) {
+            private final GravityPropertyEditor editor = new GravityPropertyEditor(physicsRigidBody);
+
+            @Override
+            public PropertyEditor getPropertyEditor() {
+                return editor;
+            }
+
+            @Override
+            public Object getValue() throws IllegalAccessException, InvocationTargetException {
+                return editor.getValue();
+            }
+
+            @Override
+            public void setValue(Object t) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+                editor.setValue(t);
+            }
+        };
+    }
 }

+ 27 - 1
jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/JmeVehicleControl.java

@@ -33,12 +33,16 @@ package com.jme3.gde.core.sceneexplorer.nodes;
 
 import com.jme3.bullet.collision.shapes.CollisionShape;
 import com.jme3.bullet.control.VehicleControl;
+import com.jme3.bullet.objects.PhysicsRigidBody;
 import com.jme3.bullet.objects.VehicleWheel;
 import com.jme3.gde.core.icons.IconList;
 import com.jme3.gde.core.scene.SceneApplication;
+import com.jme3.gde.core.sceneexplorer.nodes.editor.GravityPropertyEditor;
 import com.jme3.math.Quaternion;
 import com.jme3.math.Vector3f;
 import java.awt.Image;
+import java.beans.PropertyEditor;
+import java.lang.reflect.InvocationTargetException;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.concurrent.Callable;
@@ -46,6 +50,7 @@ import java.util.concurrent.ExecutionException;
 import org.openide.loaders.DataObject;
 import org.openide.nodes.Children;
 import org.openide.nodes.Node;
+import org.openide.nodes.PropertySupport;
 import org.openide.nodes.Sheet;
 import org.openide.util.Exceptions;
 
@@ -103,7 +108,7 @@ public class JmeVehicleControl extends JmeControl {
         set.put(makeProperty(obj, float.class, "getFriction", "setFriction", "Friction"));
         set.put(makeProperty(obj, float.class, "getMass", "setMass", "Mass"));
         set.put(makeProperty(obj, boolean.class, "isKinematic", "setKinematic", "Kinematic"));
-        set.put(makeProperty(obj, Vector3f.class, "getGravity", "setGravity", "Gravity"));
+        set.put(createGravityProperty(obj));
         set.put(makeProperty(obj, float.class, "getLinearDamping", "setLinearDamping", "Linear Damping"));
         set.put(makeProperty(obj, float.class, "getAngularDamping", "setAngularDamping", "Angular Damping"));
         set.put(makeProperty(obj, float.class, "getRestitution", "setRestitution", "Restitution"));
@@ -196,4 +201,25 @@ public class JmeVehicleControl extends JmeControl {
             return null;
         }
     }
+    
+    private Property createGravityProperty(PhysicsRigidBody physicsRigidBody) {
+        return new PropertySupport("gravity", Vector3f.class, "Gravity", "Set the gravity vector", true, true) {
+            private final GravityPropertyEditor editor = new GravityPropertyEditor(physicsRigidBody);
+
+            @Override
+            public PropertyEditor getPropertyEditor() {
+                return editor;
+            }
+
+            @Override
+            public Object getValue() throws IllegalAccessException, InvocationTargetException {
+                return editor.getValue();
+            }
+
+            @Override
+            public void setValue(Object t) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+                editor.setValue(t);
+            }
+        };
+    }
 }

+ 56 - 0
jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/editor/GravityPropertyEditor.java

@@ -0,0 +1,56 @@
+package com.jme3.gde.core.sceneexplorer.nodes.editor;
+
+import com.jme3.bullet.objects.PhysicsRigidBody;
+import com.jme3.math.Vector3f;
+import java.beans.PropertyEditorSupport;
+
+public class GravityPropertyEditor extends PropertyEditorSupport {
+
+    private final PhysicsRigidBody instance;
+
+    public GravityPropertyEditor(PhysicsRigidBody instance) {
+        this.instance = instance;
+    }
+
+    @Override
+    public String getAsText() {
+        // Convert the current value to a string representation
+        Vector3f gravity = (Vector3f) getValue();
+        return gravity != null ? gravity.toString() : "(0.0,0.0,0.0)";
+    }
+
+    @Override
+    public void setAsText(String text) throws IllegalArgumentException {
+        // Convert the given string to the property value
+        // In this example, assuming the input is a comma-separated list of floats
+        String[] values = text.replace("(", "").replace(")", "").split(",");
+        if (values.length == 3) {
+            try {
+                float x = Float.parseFloat(values[0]);
+                float y = Float.parseFloat(values[1]);
+                float z = Float.parseFloat(values[2]);
+                Vector3f gravity = new Vector3f(x, y, z);
+                setValue(gravity);
+            } catch (NumberFormatException e) {
+                throw new IllegalArgumentException("Invalid format for gravity string");
+            }
+        } else {
+            throw new IllegalArgumentException("Invalid format for gravity string");
+        }
+    }
+
+    @Override
+    public void setValue(Object value) {
+        // Set the value to the actual property using the unconventional setter
+        // (Assuming you have access to the PhysicsRigidBody instance)
+        instance.setGravity((Vector3f) value);
+    }
+
+    @Override
+    public Object getValue() {
+        // Retrieve the value from the actual property using the unconventional getter
+        // (Assuming you have access to the PhysicsRigidBody instance)
+        return instance.getGravity(new Vector3f());
+    }
+    
+}

+ 1 - 1
jme3-desktop-executables/nbproject/project.xml

@@ -12,7 +12,7 @@
                     <compile-dependency/>
                     <run-dependency>
                         <release-version>1</release-version>
-                        <specification-version>3.3.0</specification-version>
+                        <specification-version>3.6.1</specification-version>
                     </run-dependency>
                 </dependency>
                 <dependency>

BIN
jme3-desktop-executables/src/com/jme3/gde/desktop/executables/desktop-deployment-data.zip


+ 2 - 49
jme3-documentation/src/com/jme3/gde/docs/jme3/advanced/3d_models.html

@@ -15,7 +15,7 @@ Like <a href="/com/jme3/gde/docs/jme3/advanced/shape.html">Shape</a>s, 3D models
 To use 3D models in a jME3 application:
 </p>
 <ol>
-<li><div> Export the 3D model in Ogre XML or Wavefront OBJ format. Export Scenes as Ogre DotScene format.</div>
+<li><div> Export the 3D model in GLTF or Wavefront OBJ format. Export Scenes as GLTF format.</div>
 </li>
 <li><div> Save the files into a subdirectory of your jME3 project&#039;s <code>assets</code> directory.</div>
 </li>
@@ -28,53 +28,6 @@ To use 3D models in a jME3 application:
 </ol>
 
 </div>
-<!-- EDIT2 SECTION "Using Models and Scenes with jME3" [227-901] -->
-<h2>Creating Models and Scenes</h2>
-<div>
-
-<p>
-To create 3D models and scenes, you need a 3D Mesh Editor such as <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.blender.org/"><param name="text" value="<html><u>Blender</u></html>"><param name="textColor" value="blue"></object>, with an OgreXML Exporter plugin. 
-</p>
-
-<p>
-<strong>Tip:</strong> Learn how to create <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/UV_Map_Basics"><param name="text" value="<html><u>UV textures</u></html>"><param name="textColor" value="blue"></object> for more complex models, it looks more professional. 
-</p>
-
-<p>
-3D model editors are third-party products, so please consult their documentation for instructions how to use them. Here is an example workflow for Blender users:
-</p>
-<ul>
-<li><div> <a href="/com/jme3/gde/docs/jme3/external/blender.html">Creating jME3 compatible 3D models in Blender</a></div>
-</li>
-</ul>
-
-<p>
-To export your models as Ogre XML meshes with materials:
-</p>
-<ol>
-<li><div> Open the menu File &gt; Export &gt; OgreXML Exporter to open the exporter dialog.</div>
-</li>
-<li><div> In the Export Materials field: Give the material the same name as the model. For example, the model <code>something.mesh.xml</code> goes with <code>something.material</code>, plus (optionally) <code>something.skeleton.xml</code>, and some JPG files.</div>
-</li>
-<li><div> In the Export Meshes field: Select a target subdirectory of your <code>assets/Models/</code> directory. E.g. <code>assets/Models/something/</code>.</div>
-</li>
-<li><div> Activate the following exporter settings: </div>
-<ul>
-<li><div> Copy Textures: YES</div>
-</li>
-<li><div> Rendering Materials: YES</div>
-</li>
-<li><div> Flip Axis: YES</div>
-</li>
-<li><div> Require Materials: YES</div>
-</li>
-<li><div> Skeleton name follows mesh: YES</div>
-</li>
-</ul>
-</li>
-<li><div> Click export.</div>
-</li>
-</ol>
 
 <p>
 You can now use the <a href="/com/jme3/gde/docs/sdk.html">jMonkeyEngine SDK</a> to <a href="/com/jme3/gde/docs/sdk/model_loader_and_viewer.html">load and view models</a>. You can <a href="/com/jme3/gde/docs/sdk/scene_composer.html">create scenes</a> from them and write code that loads them into your application. 
@@ -82,4 +35,4 @@ You can now use the <a href="/com/jme3/gde/docs/sdk.html">jMonkeyEngine SDK</a>
 
 </div>
 <!-- EDIT3 SECTION "Creating Models and Scenes" [902-] -->
-<p><em><a href="http://wiki.jmonkeyengine.org/doku.php/jme3:advanced:3d_models?do=export_xhtmlbody">view online version</a></em></p>
+<p><em><a href="http://wiki.jmonkeyengine.org/doku.php/jme3:advanced:3d_models?do=export_xhtmlbody">view online version</a></em></p>

+ 0 - 610
jme3-documentation/src/com/jme3/gde/docs/jme3/external/blender.html

@@ -1,610 +0,0 @@
-
-<h1>Creating assets in Blender3D</h1>
-<div>
-
-<p>
-This section discusses how to create and import models from Blender3D (2.62+, see bottom of page for Blender 2.49 and before) to jME3. Furthermore it explains how you can create various typical game-related assets like normal maps of high-poly models and baked lighting maps.
-</p>
-
-</div>
-<!-- EDIT1 SECTION "Creating assets in Blender3D" [1-320] -->
-<h3>Asset Management</h3>
-<div>
-
-<p>
-For the managing of assets in general, be sure to read the <a href="/com/jme3/gde/docs/jme3/intermediate/multi-media_asset_pipeline.html">Asset Pipeline Documentation</a>. It contains vital information on how to manage your asset files.
-</p>
-
-</div>
-<!-- EDIT2 SECTION "Asset Management" [321-551] -->
-<h3>Creating Models</h3>
-<div>
-
-<p>
-Game-compatible models are models that basically only consist of a mesh and UV-mapped textures, in some cases animations. All other material parameters or effects (like particles etc.) can not be expected to be transferred properly and probably would not translate to live rendering very well anyway.
-</p>
-
-</div>
-<!-- EDIT3 SECTION "Creating Models" [552-879] -->
-<h2>UV Mapped Textures</h2>
-<div>
-
-<p>
-To successfully import a texture, the texture <strong>has to</strong> be UV-mapped to the model. Heres how to assign diffuse, normal and specular maps:
-</p>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/blender-material-4.png"> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/blender-material-3.png"></div>
-</li>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/blender-material-2.png"> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/blender-material-1.png"></div>
-</li>
-</ul>
-
-<p>
-Its important to note that each used texture will create one separate geometry. So its best to either combine the UV maps or use a premade atlas with different texture types from the start and then map the uv coords of the models to the atlas instead of painting on the texture. This works best for large models like cities and space ships.
-</p>
-
-</div>
-<!-- EDIT4 SECTION "UV Mapped Textures" [880-1593] -->
-<h2>Animations</h2>
-<div>
-
-<p>
-Animations for jME3 have to be bone animations, simple object movement is supported by the blender importer, mesh deformation or other forms of animation are not supported.
-</p>
-
-<p>
-To create an animation from scratch do the following:
-</p>
-<ul>
-<li><div> Create the model</div>
-<ul>
-<li><div> Make sure your models location, rotation and scale is applied and zero / one (see “Model Checklist” below)</div>
-</li>
-<li><div> (Did you know? You can make any model from a box by only using extrusion, this creates very clean meshes)</div>
-</li>
-</ul>
-</li>
-<li><div> Create the armature bones, don&#039;t forget to have one root bone!</div>
-<ul>
-<li><div> Start by placing the cursor at zero</div>
-</li>
-<li><div> Go to the Add→Armature→Single Bone menu and create the root bone</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/blender-add-bone.png"></div>
-</li>
-</ul>
-</li>
-<li><div> Select the bone and go to edit mode (press tab)</div>
-</li>
-<li><div> Select the root bone end and press “E” to extrude the bone, then start rigging your model this way</div>
-</li>
-<li><div> <strong>Make sure your armatures location, rotation and scale is applied (see “Model Checklist” below) before continuing</strong></div>
-</li>
-</ul>
-</li>
-<li><div> Make the armature the parent of the model</div>
-<ul>
-<li><div> Make sure you are back in object mode (press tab again)</div>
-</li>
-<li><div> First select the model object then select the armature object with shift pressed, then press Ctrl-P</div>
-</li>
-<li><div> When you do this, you can select how the bone groups will be mapped to the model vertices initially</div>
-</li>
-</ul>
-</li>
-<li><div> Set a new armature constraint in the model “Object Modifiers” settings and select the Armature</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/blender-make-armature.png"></div>
-</li>
-</ul>
-</li>
-<li><div> Voila, your model should move when you move the bones in pose mode</div>
-</li>
-<li><div> Go to the “Dope Sheet” window and select the “Action editor”</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/blender-action-editor.png"></div>
-</li>
-</ul>
-</li>
-<li><div> Add an action by pressing the plus button</div>
-</li>
-<li><div> Create the keyframes (select the model armature and press I) along the timeline</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/blender-add-keyframes.png"></div>
-</li>
-</ul>
-</li>
-<li><div> Each action will be an animation available via the animation control in jME after the import</div>
-</li>
-<li><div> <strong>Press the “F” button next to the action so it will be saved even if theres no references</strong></div>
-<ul>
-<li><div> The animation would else be deleted if its not the active animation on the armature and the file is saved</div>
-</li>
-</ul>
-</li>
-</ul>
-
-</div>
-<!-- EDIT5 SECTION "Animations" [1594-3751] -->
-<h3>Model Checklist</h3>
-<div>
-
-<p>
-Sometimes you do not create the model yourself and often times models from the web are not really made for OpenGL live rendering or not completely compatible with the bone system in jME.
-</p>
-
-<p>
-To export an animated model in Blender make sure the following conditions are met:
-</p>
-<ul>
-<li><div> The animation has to be a <strong>bone animation</strong></div>
-</li>
-<li><div> Apply Location, Rotation and Scale to the mesh on Blender: On 3D View editor on Blender, select the mesh in Object Mode and go to the 3D View Editor’s header → Object Menu → Apply → Location / Rotation / Scale.</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/blender_apply_mesh.png"></div>
-</li>
-</ul>
-</li>
-<li><div> Apply Location, Rotation and Scale to the armature on Blender: On 3D View editor on Blender, select the armature in Object Mode and go to the 3D View Editor’s header → Object Menu → Apply → Location / Rotation / Scale.</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/blender_apply_bones.png"></div>
-</li>
-</ul>
-</li>
-<li><div> Set the mesh’s origin point in the bottom of the mesh (see the image below).</div>
-</li>
-<li><div> Set the armature’s origin point in the bottom of the armature (see the image below).</div>
-</li>
-<li><div> Armature’s origin point and mesh’s origin point must be in the same location(see the image below).</div>
-</li>
-<li><div> Use a root bone located in the armature’s origin. This root bone must be in vertical position (see the image below) and it is the root bone of the armature. If you rotate the root bone, the the entire armature might be rotate when you import the model into jMonkey (I’m just mentioning the result, I don’t know where is the problem (jMonkey importer or blender’s ogre exporter plugin)).</div>
-</li>
-<li><div> Uncheck “Bone Envelopes” checkbox on the Armature modifier for the mesh (see the image below).</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/blender_envelopes.png"></div>
-</li>
-</ul>
-</li>
-<li><div> Uncheck “Envelopes” checkbox on the armature (see the image below).</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/blender_rootbone.png"></div>
-</li>
-</ul>
-</li>
-</ul>
-
-<p>
-You can use SkeletonDebugger to show the skeleton on your game in order to check if the mesh and the skeleton are loaded correctly:
-</p>
-<pre>    final Material soldier2Mat = assetManager.loadMaterial&#40;&quot;Materials/soldier2/soldier2.j3m&quot;&#41;;
-    final Spatial soldier2 = assetManager.loadModel&#40;&quot;Models/soldier2/soldier2.j3o&quot;&#41;;
-    TangentBinormalGenerator.generate&#40;soldier2&#41;;
-    soldier2.setMaterial&#40;soldier2Mat&#41;;
-&nbsp;
-    final Node soldier2Node = new Node&#40;&quot;Soldier2 Node&quot;&#41;;
-&nbsp;
-    soldier2Node.attachChild&#40;soldier2&#41;;
-    rootNode.attachChild&#40;soldier2Node&#41;;
-&nbsp;
-    final AnimControl control = soldier2.getControl&#40;AnimControl.class&#41;;
-    control.addListener&#40;this&#41;;
-    final AnimChanel channel = control.createChannel&#40;&#41;;
-&nbsp;
-    final SkeletonDebugger skeletonDebug = new SkeletonDebugger&#40;&quot;skeleton&quot;, control.getSkeleton&#40;&#41;&#41;;
-    final Material mat = new Material&#40;assetManager, &quot;Common/MatDefs/Misc/Unshaded.j3md&quot;&#41;;
-    mat.setColor&#40;&quot;Color&quot;, ColorRGBA.Green&#41;;
-    mat.getAdditionalRenderState&#40;&#41;.setDepthTest&#40;false&#41;;
-    skeletonDebug.setMaterial&#40;mat&#41;;
-    soldier2Node.attachChild&#40;skeletonDebug&#41;;</pre>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/blender_finished.png"></div>
-</li>
-</ul>
-
-<p>
-Also check out these videos and resources:
-</p>
-<ul>
-<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/groups/import-assets/forum/topic/blender-2-61-animation-issues/?topic_page=2&amp;num=15"><param name="text" value="<html><u>Forum: How to import animated models from Blender 2.6 correctly</u></html>"><param name="textColor" value="blue"></object> (<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://www.youtube.com/watch?v=QiLCs4AKh28"><param name="text" value="<html><u>Video</u></html>"><param name="textColor" value="blue"></object>)</div>
-</li>
-<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.youtube.com/watch?v=NdjC9sCRV0s"><param name="text" value="<html><u>Video tutorial for animated models from Blender 2.6</u></html>"><param name="textColor" value="blue"></object></div>
-</li>
-<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="https://docs.google.com/fileview?id=0B9hhZie2D-fENDBlZDU5MzgtNzlkYi00YmQzLTliNTQtNzZhYTJhYjEzNWNk&amp;hl=en"><param name="text" value="<html><u>Exporting OgreXML scenes from Blender 2.49 to jME</u></html>"><param name="textColor" value="blue"></object></div>
-</li>
-</ul>
-
-</div>
-<!-- EDIT6 SECTION "Model Checklist" [3752-7310] -->
-<h2>NormalMap baking</h2>
-<div>
-
-<p>
-Models for live rendering should have a low polygon count. To increase the perceived detail of a model normal maps are commonly used in games. This tutorial will show how to create a normalmap from a highpoly version of your model that you can apply to a lowpoly version of the model in your game.
-</p>
-
-</div>
-<!-- EDIT7 SECTION "NormalMap baking" [7311-7639] -->
-<h3>Blender modeling lowPoly &amp; highPoly</h3>
-<div>
-<ul>
-<li><div> If you use the multiresolution modifier you only need one object. Lets look at this example:</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/1.gif"></div>
-</li>
-</ul>
-</li>
-<li><div> Add a multiresolution modifier:</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/3.1.gif"></div>
-</li>
-</ul>
-</li>
-<li><div> There are two types of modifiers: Catmull-Clark and Simple. </div>
-<ul>
-<li><div> Simple is better for things like walls or floors.</div>
-</li>
-<li><div> Catmull-Clark is better for objects like spheres.</div>
-</li>
-</ul>
-</li>
-<li><div> When using Catmull-Clark with a higher “subdivide” value (more than 3) its good to have the “preview” value above 0 and less than the subdivide level. This is because Catmull-Clark smoothes the vertices, so the normalMap is not so precise.</div>
-</li>
-<li><div> Here is an example of Prewiew 1, it&#039;s more smooth than the original mesh:</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/2.gif"></div>
-</li>
-</ul>
-</li>
-<li><div> Enable “Sculpt Mode” in blender and design the highPoly version of your model like here:</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/3.gif"></div>
-</li>
-</ul>
-</li>
-<li><div> Now go into Render Tab, and bake a normalMap using same configuration as here:</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/4.gif"></div>
-</li>
-</ul>
-</li>
-</ul>
-
-<p>
-<p><div>Remember! The actual preview affects the baking output and mesh export!
-</div></p>
-</p>
-
-<p>
-<p><div>Be careful: The steps above lead to terrible normal maps - use this procedure instead:
-</div></p>
-</p>
-<ul>
-<li><div> uncheck “[ ] Bake from Multires”</div>
-</li>
-<li><div> switch to object mode</div>
-</li>
-<li><div> make a copy of your mesh (SHIFT+D)</div>
-</li>
-<li><div> remove the Multires modifier from the copied model</div>
-</li>
-<li><div> remove any materials from the copied model</div>
-</li>
-<li><div> remove the armature modifier from the copied model</div>
-</li>
-<li><div> select the original (highres) model</div>
-</li>
-<li><div> go into pose mode, clear any pose transformations</div>
-</li>
-<li><div> the highres and lowres models should be on top of each other now</div>
-</li>
-<li><div> select the original (highres) model</div>
-</li>
-<li><div> hold SHIFT and select the copied (lowres) model</div>
-</li>
-<li><div> in the properties menu go to render</div>
-</li>
-<li><div> use Bake &gt; Normal</div>
-</li>
-<li><div> check “[x] Selected to Active”</div>
-</li>
-<li><div> use a reasonably high value for “Margin” (4+ pixels at least for 1024&times;1024 maps)</div>
-</li>
-<li><div> don&#039;t forget to safe the normal map image</div>
-</li>
-</ul>
-
-<p>
-<p><div>Be careful: in the Outliner the camera symbol (Restrict Render) must be on!
-</div></p>
-</p>
-
-</div>
-<!-- EDIT8 SECTION "Blender modeling lowPoly & highPoly" [7640-9694] -->
-<h3>Fixing the normal colors in Blender</h3>
-<div>
-
-<p>
-Blender has its own normal colors standard. We need to fix the colors to prepare the normalmap for using it with the JME Lighting Material.
-</p>
-
-<p>
-To do this, go to the Blender Node Window
-</p>
-<ul>
-<li><div> Here is Blender Node example. It fixes the normal colors:</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/5.gif"></div>
-</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li><div> Here is the colors configuration:</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/6.gif"> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/7.gif"> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/8.gif"></div>
-</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li><div> Sometimes it will be needed to change R and G scale and add some blur for better effect. Do it like on image below</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/exception2.gif"></div>
-</li>
-</ul>
-</li>
-<li><div> After rendering, save the file to a destination you want and use it with the JME Lighting Material and the lowpoly version of the model.</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/ready_normal.gif"></div>
-</li>
-</ul>
-</li>
-</ul>
-
-</div>
-<!-- EDIT9 SECTION "Fixing the normal colors in Blender" [9695-10504] -->
-<h2>LightMap baking</h2>
-<div>
-
-<p>
-The goal of this tutorial is to explain briefly how to bake light map in blender with a separate set of texture coordinates and then export a model using this map in jME3.
-</p>
-
-</div>
-<!-- EDIT10 SECTION "LightMap baking" [10505-10706] -->
-<h3>Blender modeling + texturing</h3>
-<div>
-<ul>
-<li><div> create a mesh in blender and unwrap it to create uvs</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/advanced/1.jpg"></div>
-</li>
-</ul>
-</li>
-</ul>
-<ul>
-<li><div> In the mesh tab you can see the sets of Uvs, it will create the first one.</div>
-<ul>
-<li><div> You can assign w/e texture on it, i used the built in checker of blender for the example.</div>
-</li>
-</ul>
-</li>
-<li><div> In this list, create a new one and click on the camera icon so that baking is made with this set. Name it LightUvMap.</div>
-</li>
-<li><div> In the 3D view in edit mode select all your mesh vertice and hit &#039;U&#039;/LightMap pack then ok it will unfold the mesh for light map.</div>
-</li>
-<li><div> Create a new image, go to the render tab an all at the end check the “Bake” section and select shadows. Then click bake.</div>
-</li>
-<li><div> If all went ok it will create a light map like this.</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/advanced/2.jpg"></div>
-</li>
-</ul>
-</li>
-<li><div> Go to the material tab, create a new one for your model and go to the Texture Tab.</div>
-</li>
-<li><div> Create 2 textures one for the color map, and one for the light map.</div>
-</li>
-<li><div> In the Mapping section be sure to select coordinates : UV and select the good set of coordinates.</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/advanced/3.jpg"></div>
-</li>
-</ul>
-</li>
-<li><div> Then the light map</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/advanced/4.jpg"></div>
-</li>
-</ul>
-</li>
-</ul>
-
-</div>
-<!-- EDIT11 SECTION "Blender modeling + texturing" [10707-11841] -->
-<h3>Importing the model in the SDK and creating the appropriate material</h3>
-<div>
-
-<p>
-Once this is done, export your model with the ogre exporter (or import it directly via the blend importer), and turn it into J3o with the SDK.
-</p>
-<ul>
-<li><div> Create material for it using the lighting definition.</div>
-</li>
-<li><div> Add the colorMap in the diffuse map slot and the lightMap in the light map slot.</div>
-</li>
-<li><div> Make sure you check “SeparateTexCoords”</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/advanced/5.jpg"></div>
-</li>
-</ul>
-</li>
-<li><div> It should roughly result in something like that :</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/advanced/6.jpg"></div>
-</li>
-</ul>
-</li>
-</ul>
-
-<p>
-The blend file, the ogre xml files and the textures can be found in the download section of the google code repo
-</p>
-
-<p>
-<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://code.google.com/p/jmonkeyengine/downloads/detail?name=LightMap.zip&amp;can=2&amp;q=#makechanges"><param name="text" value="<html><u>http://code.google.com/p/jmonkeyengine/downloads/detail?name=LightMap.zip&amp;can=2&amp;q=#makechanges</u></html>"><param name="textColor" value="blue"></object>
-</p>
-
-</div>
-<!-- EDIT12 SECTION "Importing the model in the SDK and creating the appropriate material" [11842-12586] -->
-<h2>Modelling racing tracks and cars</h2>
-<div>
-
-<p>
-Follow the link below to a pdf tutorial by rhymez where I guide you to modelling a car and importing it to the jMonkeyengine correctly and edit it in the vehicle editor.Plus how to model a simple racing track.
-<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.indiedb.com/games/street-rally-3d/downloads/modelling-in-blender-to-the-jmonkeyengine"><param name="text" value="<html><u>http://www.indiedb.com/games/street-rally-3d/downloads/modelling-in-blender-to-the-jmonkeyengine</u></html>"><param name="textColor" value="blue"></object>
-</p>
-
-</div>
-<!-- EDIT13 SECTION "Modelling racing tracks and cars" [12587-12943] -->
-<h2>Optimizing Models for 3D games</h2>
-<div>
-
-<p>
-Follow the link below to a pdf tutorial by rhymez where I guide you on how you can optimize your models for faster rendering.
-<object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.indiedb.com/games/street-rally-3d/downloads/optimizing-3d-models-for-games"><param name="text" value="<html><u>http://www.indiedb.com/games/street-rally-3d/downloads/optimizing-3d-models-for-games</u></html>"><param name="textColor" value="blue"></object>
-</p>
-
-</div>
-<!-- EDIT14 SECTION "Optimizing Models for 3D games" [12944-13203] -->
-<h2>SkyBox baking</h2>
-<div>
-
-<p>
-There are several ways to create static images to use for a sky in your game. This will describe the concepts used in blender and create an ugly sky <img src="/lib/images/smileys/icon_smile.gif" class="icon" alt=":-)" /> Check the links below for other ways and prettier skies.
-</p>
-
-<p>
-A sky box is a texture mapped cube, it can also, loosely, be called en EnvMap or a CubeMap. The camera is inside the cube and the clever thing that jME does is to draw the sky so it is always behind whatever else is in your scene. Imagine the monkey is the camera in the picture.
-</p>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/skybox-concept.png"></div>
-</li>
-</ul>
-
-<p>
-But a real sky is not a box around our heads, it is more like a sphere. So if we put any old image in the sky it will look strange and might even look like a box. This is not what we want. The trick is to distort the image so that it will <em>look</em> like a sphere even if it in fact is a picture pasted on a box. Luckily blender can do that tricky distortion for us.
-</p>
-
-<p>
-The screenshots are from Blender 2.63 but the equivalent operations have been in blender for years so with minor tweaks should work for almost any version.
-</p>
-
-<p>
-So let&#039;s get started
-</p>
-<ul>
-<li><div> Fire up blender and you&#039;ll see something like this.</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/start-screen2.png"></div>
-</li>
-</ul>
-</li>
-<li><div> The cube in the start scene is perfect for us. What we&#039;ll do is have Blender render the scene onto that cube. The resulting image is what we&#039;ll use for our sky box. So our jME sky will look like we stood inside the blender box and looked out on the scene in blender.</div>
-</li>
-<li><div> Start by selecting the box and set its material to shadeless.</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/shadeless.png"></div>
-</li>
-</ul>
-</li>
-<li><div> Now we will create a texture for the box. Make sure the texture is an <code>Environment Map</code>, that the <code>Viewpoint Object</code> is set to the cube. The resolution is how large the resulting image will be. More pixels makes the sky look better but comes at the cost of texture memory. You&#039;ll have to trim the resolution to what works in your application.</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/texture.png"></div>
-</li>
-</ul>
-</li>
-<li><div> Next up is the fun part, create the sky scene in blender. You can do whatever fits your application, include models for a city landscape, set up a texture mapped sphere in blender with a nice photographed sky, whatever you can think will make a good sky. I am not so creative so I created this scene:</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/scene.png"></div>
-</li>
-</ul>
-</li>
-<li><div> Now render the scene (press F12). It doesn&#039;t actually matter where the camera is in blender but you might see something similar to this:</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/render.png"></div>
-</li>
-</ul>
-</li>
-<li><div> You can see that Blender has actually drawn the scene onto the cube. This is exactly what we want. Now to save the image.</div>
-</li>
-<li><div> Select the texture of the cube and select save environment map.</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/saveenvmap.png"></div>
-</li>
-</ul>
-</li>
-<li><div> That is it for Blender. Open the saved image in some image editor (I use the Gimp from <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://www.gimp.org"><param name="text" value="<html><u>http://www.gimp.org</u></html>"><param name="textColor" value="blue"></object> here).</div>
-</li>
-</ul>
-
-<p>
-<p><div>The SDK also contains an image editor, right-click the image and select “edit image” to open it.
-</div></p>
-</p>
-<ul>
-<li><div> You will notice that Blender has taken the 6 sides of the cube and pasted together into one image (3&times;2). So now we need to cut it up again into 6 separate images. In gimp I usually set the guides to where I want to cut and then go into Filters→Web→Slice and let gimp cut it up for me.</div>
-<ul>
-<li><div> <img src="nbdocs:/com/jme3/gde/docs/jme3/external/post-slice.png"></div>
-</li>
-</ul>
-</li>
-<li><div> Next up is to move the image files into your assets directory and create the sky in jME. You can do that in the Scene Composer by right clicking the scene node, select <code>Add Spatial</code> and then select <code>Skybox</code>.</div>
-</li>
-</ul>
-
-<p>
-If you want to do it from code, here is an example:
-</p>
-<pre>public void simpleInitApp&#40;&#41; &#123;
-&nbsp;
-    Texture westTex = assetManager.loadTexture&#40;&quot;Textures/west.png&quot;&#41;;
-    Texture eastTex = assetManager.loadTexture&#40;&quot;Textures/east.png&quot;&#41;;
-    Texture northTex = assetManager.loadTexture&#40;&quot;Textures/north.png&quot;&#41;;
-    Texture southTex = assetManager.loadTexture&#40;&quot;Textures/south.png&quot;&#41;;
-    Texture upTex = assetManager.loadTexture&#40;&quot;Textures/top.png&quot;&#41;;
-    Texture downTex = assetManager.loadTexture&#40;&quot;Textures/bottom.png&quot;&#41;;
-&nbsp;
-    final Vector3f normalScale = new Vector3f&#40;-1, 1, 1&#41;;
-    Spatial skySpatial = SkyFactory.createSky&#40;
-                        assetManager,
-                        westTex,
-                        eastTex,
-                        northTex,
-                        southTex,
-                        upTex,
-                        downTex,
-                        normalScale&#41;;
-    rootNode.attachChild&#40;skySpatial&#41;;
-&#125;</pre>
-
-<p>
-<p><div>This example uses a strange normalScale, this is to flip the image on the X-axis and might not be needed in your case. Hint: the texture is applied on the outside of the cube but we are inside so what do we see?
-</div></p>
-</p>
-
-</div>
-<!-- EDIT15 SECTION "SkyBox baking" [13204-17887] -->
-<h3>Further reading</h3>
-<div>
-<ul>
-<li><div> <a href="/com/jme3/gde/docs/jme3/external/blender-example.html">Warg - from cube to animated and textured game model Example</a></div>
-</li>
-<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:sky"><param name="text" value="<html><u>http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:sky</u></html>"><param name="textColor" value="blue"></object></div>
-</li>
-<li><div> <object classid="java:org.netbeans.modules.javahelp.BrowserDisplayer"><param name="content" value="http://jmonkeyengine.org/groups/contribution-depot-jme3/forum/topic/jmonkeyengine-tutorial-how-to-create-skymaps-using-blender/"><param name="text" value="<html><u>http://jmonkeyengine.org/groups/contribution-depot-jme3/forum/topic/jmonkeyengine-tutorial-how-to-create-skymaps-using-blender/</u></html>"><param name="textColor" value="blue"></object></div>
-</li>
-</ul>
-
-</div>
-<!-- EDIT16 SECTION "Further reading" [17888-] -->
-<p><em><a href="http://wiki.jmonkeyengine.org/doku.php/jme3:external:blender?do=export_xhtmlbody">view online version</a></em></p>

+ 0 - 65
jme3-documentation/src/com/jme3/gde/docs/sdk/3ds_to_blender_to_jmp.html

@@ -1,65 +0,0 @@
-
-<h1>Using Blender as a Intermediator Between 3dMax and the jMonkeyEngine SDK</h1>
-<div>
-
-<p>
-The jMonkeyEngine SDK supports .blend files and can convert them to jMonkeyEngine&#039;s .j3o format. This means you can use Blender to convert, for example, a 3dMax file to .j3o format.
-</p>
-
-</div>
-<!-- EDIT1 SECTION "Using Blender as a Intermediator Between 3dMax and the jMonkeyEngine SDK" [1-271] -->
-<h2>Importing the .3ds file to Blender</h2>
-<div>
-
-<p>
-I&#039;m using the blender 2.59 at this tutorial, but if you blender 2.49b, no problem ;).
-After you saved your .3ds file in 3dmax, open the blender, delete the default cube,
-and import your .3ds file via File—→Import—–&gt;3D Studio.
-</p>
-
-<p>
-<img src="/lib/exe/fetch.php">
-</p>
-
-</div>
-<!-- EDIT2 SECTION "Importing the .3ds file to Blender" [272-623] -->
-<h2>Saving the .blend file</h2>
-<div>
-
-<p>
-Now save your .blend file so you can load it into the jMonkeyEngine SDK.
-</p>
-
-<p>
-<img src="/lib/exe/fetch.php">
-</p>
-
-</div>
-<!-- EDIT3 SECTION "Saving the .blend file" [624-804] -->
-<h2>Importing the .blend file to the SDK by using the ModelImporter and BlenderSupport plugins</h2>
-<div>
-
-<p>
-Click on Import Model button and then click on Open Model button to open the .blend file. Click next, select the checkbox to import a copy from .blend file, and click finish.
-</p>
-
-<p>
-<img src="/lib/exe/fetch.php">
-</p>
-
-</div>
-<!-- EDIT4 SECTION "Importing the .blend file to the SDK by using the ModelImporter and BlenderSupport plugins" [805-1153] -->
-<h2>Edit your model in SceneComposer and &quot;VOILA&quot;</h2>
-<div>
-
-<p>
-As you can see, the .blend model was automatically converted to .j3o binary format. Now, you are able to edit it in SceneComposer ;D.
-</p>
-
-<p>
-<img src="/lib/exe/fetch.php">
-</p>
-
-</div>
-<!-- EDIT5 SECTION "Edit your model in SceneComposer and VOILA" [1154-] -->
-<p><em><a href="http://wiki.jmonkeyengine.org/doku.php/sdk:3ds_to_blender_to_jmp?do=export_xhtmlbody">view online version</a></em></p>

+ 0 - 362
jme3-documentation/src/com/jme3/gde/docs/sdk/blender.html

@@ -1,362 +0,0 @@
-
-<h1>Blender importer for jMonkeyEngine 3</h1>
-<div>
-
-</div>
-<!-- EDIT1 SECTION "Blender importer for jMonkeyEngine 3" [1-52] -->
-<h2>Introduction</h2>
-<div>
-
-<p>
-Importing models to any game engine is as important as using them. The quality of the models depends on the abilities of the people who create it and on the tools they use.
-Blender is one of the best free tools for creating 3D enviroments. Its high amount of features attract many model designers.
-So far jMonkeyEngine used Ogre mesh files to import 3D data. These files were created by the python script that exported data from blender.
-It was important to have always the lates version of the script that is compatible with the version of blender and to use it before importing data to jme.
-Now we have an opportunity to simplify the import process by loading data directly from blender binary files: *.blend.
-</p>
-
-<p>
-<p><div>Before you try to import models, make sure you <a href="/com/jme3/gde/docs/jme3/external/blender.html">created them properly</a>.
-</div></p>
-</p>
-
-</div>
-<!-- EDIT2 SECTION "Introduction" [53-911] -->
-<h2>Usage</h2>
-<div>
-
-<p>
-To use it in your game or the SDK you should follow the standard asset loading instructions.
-By default a BlenderModelLoader is registered with your assetManager to load blend files. This means you can load and convert .blend model files to .j3o format, just like any other supported model format.
-</p>
-
-</div>
-<!-- EDIT3 SECTION "Usage" [912-1228] -->
-<h2>Currently supported features</h2>
-<div>
-<ol>
-<li><div> Loading scene (only the current scene is loaded and imported as a node)</div>
-</li>
-<li><div> Loading mesh objects.</div>
-<ul>
-<li><div> Meshes are split into several geometries when they have several materials applied.</div>
-</li>
-<li><div> All faces are stored as triangles (even if blender uses quads).</div>
-</li>
-<li><div> The mesh is &#039;Smooth&#039; aware.</div>
-</li>
-<li><div> User defined UV coordinates are read.</div>
-</li>
-<li><div> Loading BMesh is supported.</div>
-</li>
-</ul>
-</li>
-<li><div> Loading textures.</div>
-<ul>
-<li><div> Both image and generated textures are imported.</div>
-</li>
-<li><div> Textures influence is supported (&#039;Influence&#039; tab in blender 2.5+ and &#039;Map to&#039; in 2.49).</div>
-</li>
-<li><div> Map input is not yet fully supported (currently working on it ;) ) so please use UV-mapping for all kinds of textures.</div>
-</li>
-</ul>
-</li>
-<li><div> Image textures.</div>
-<ul>
-<li><div> Textures can be loaded from: png, jpg, bmp, dds and tga.</div>
-</li>
-<li><div> Both textures stored in the blender file and the outside are loaded (the outside textures need a valid path).</div>
-</li>
-<li><div> Image textures are stored as Texture2D.</div>
-</li>
-</ul>
-</li>
-<li><div> Generated textures.</div>
-<ul>
-<li><div> All generated textures can be loaded except: VoxelData, EnviromentMap and PointDensity.</div>
-</li>
-<li><div> Feel free to use colorbands.</div>
-</li>
-<li><div> Generated textures are &#039;baked&#039; into 2D textures and merged to create one flat texture. They can be freely merged with image textures.</div>
-</li>
-<li><div> Generated textures can be used as normal maps (but this looks poor when large amount of small triangles is used; incleasing generated texture ppu in blender key might help a little)</div>
-</li>
-</ul>
-</li>
-<li><div> Loading materials.</div>
-<ul>
-<li><div> Materials are loaded and attached to geometries.</div>
-</li>
-<li><div> Because jMonkeyEngine supports only one material for each Mesh, if you apply several materials to one object – it will be split into several meshes (but still in one node).</div>
-</li>
-<li><div> Several kinds of input mapping is supported: UV maps, Orco and Nor; all projection types for 2D textures, XYZ coordinates mapping.</div>
-</li>
-</ul>
-</li>
-<li><div> Loading animations.</div>
-<ul>
-<li><div> Bone animations and object animations are supported.</div>
-</li>
-<li><div> Armatures are imported as Skeleton. Constraint loading is not fully supported so use it carefully.</div>
-</li>
-<li><div> Only assigning vertices to bones is at the moment supported so do not use bones&#039; envelopes.</div>
-</li>
-</ul>
-</li>
-<li><div> Loading modifiers.</div>
-<ol>
-<li><div> Array modifier</div>
-</li>
-<li><div> Mirror modifier</div>
-</li>
-<li><div> Armature modifier (see loading animations)</div>
-</li>
-<li><div> Particles modifier (see loading particles)</div>
-</li>
-</ol>
-<ul>
-<li><div> More will come with time.</div>
-</li>
-</ul>
-</li>
-<li><div> Constraints loading</div>
-<ul>
-<li><div> Constraints are basicly supported but they do not work the way I&#039;d like it. So feel free to experiment with it. I will create another post when I get it to work properly.</div>
-</li>
-</ul>
-</li>
-<li><div> Particles loading.</div>
-<ul>
-<li><div> Some features of particles loading is supported. You can use only particle emitters at the moment.</div>
-</li>
-<li><div> You can choose to emit particles from vertices, faces or the geometry&#039;s convex hull (instead of volume).</div>
-</li>
-<li><div> Currently Newtonian Physics is only supported.</div>
-</li>
-<li><div> It was mostly tested for blender 2.49 (so I&#039;m not 100% sure about its use in blender 2.5+).</div>
-</li>
-</ul>
-</li>
-<li><div> Using sculpting.</div>
-<ul>
-<li><div> This should work quite well for now :).</div>
-</li>
-</ul>
-</li>
-<li><div> Importing curves.</div>
-<ul>
-<li><div> Both bezier and NURBS curves are supproted.</div>
-</li>
-<li><div> Feel free to use bevel and taper objects as well ;)</div>
-</li>
-</ul>
-</li>
-<li><div> Importing surfaces</div>
-<ul>
-<li><div> NURBS surface and sphere can be imported.</div>
-</li>
-</ul>
-</li>
-<li><div> Importing sky</div>
-<ul>
-<li><div> loading world&#039;s horizon color as a background color if no sky type is used</div>
-</li>
-<li><div> loading sky without the texture</div>
-</li>
-<li><div> loading textured sky (including both generated and normal textures)</div>
-</li>
-</ul>
-</li>
-</ol>
-
-</div>
-<!-- EDIT4 SECTION "Currently supported features" [1229-4610] -->
-<h2>Planned features.</h2>
-<div>
-<ol>
-<li><div> Full support for scale and offset in texture input mapping.</div>
-</li>
-<li><div> Full support for bone and object constraints.</div>
-</li>
-<li><div> More modifiers loaded.</div>
-</li>
-<li><div> Loading texts.</div>
-</li>
-<li><div> Loading meta objects (if jme will support it ;) ).</div>
-</li>
-</ol>
-
-</div>
-<!-- EDIT5 SECTION "Planned features." [4611-4854] -->
-<h2>Known bugs/problems.</h2>
-<div>
-<ol>
-<li><div> RGB10 and RGB9E5 texture types are not supported in texture merging operations (which means that you can use this as a single texture on the model, but you should not combine it with other images or generated textures).</div>
-</li>
-<li><div> If an armature is attached to a mesh that has more than one material the vertices of the mesh might be strongly displaced. Hope to fix that soon.</div>
-</li>
-</ol>
-
-</div>
-<!-- EDIT6 SECTION "Known bugs/problems." [4855-5261] -->
-<h2>Using BlenderLoader instead of BlenderModelLoader</h2>
-<div>
-
-<p>
-You have two loaders available.
-</p>
-<ul>
-<li><div> BlenderLoader that loads the whole scene. It returns an instance of  LoadingResults that contains all the data loaded from the scene.</div>
-</li>
-</ul>
-<pre>public static class LoadingResults extends Spatial &#123;
-        /** Bitwise mask of features that are to be loaded. */
-        private final int featuresToLoad;
-        /** The scenes from the file. */
-        private List&lt;Node&gt; scenes;
-        /** Objects from all scenes. */
-        private List&lt;Node&gt; objects;
-        /** Materials from all objects. */
-        private List&lt;Material&gt; materials;
-        /** Textures from all objects. */
-        private List&lt;Texture&gt; textures;
-        /** Animations of all objects. */
-        private List&lt;AnimData&gt; animations;
-        /** All cameras from the file. */
-        private List&lt;Camera&gt; cameras;
-        /** All lights from the file. */
-        private List&lt;Light&gt; lights;
-	/** Access Methods goes here. */
-&#125;</pre>
-<ul>
-<li><div> BlenderModelLoader loads only the model node and should be used if you have a single model in a file.</div>
-</li>
-</ul>
-
-<p>
-To register the model do the following:
-</p>
-<pre>assetManager.registerLoader&#40;BlenderLoader.class, &quot;blend&quot;&#41;;</pre>
-
-<p>
-or
-</p>
-<pre>assetManager.registerLoader&#40;BlenderModelLoader.class, &quot;blend&quot;&#41;;</pre>
-<ul>
-<li><div> The last thing to do is to create a proper key.</div>
-</li>
-</ul>
-
-<p>
-You can use com.jme3.asset.BlenderKey for that.
-The simplest use is to create the key with the asset&#039;s name.
-It has many differens settings descibing the blender file more precisely, but all of them have default values so you do not need to worry about it at the beggining.
-You can use ModelKey as well. This will give the same result as using default BlenderKey.
-</p>
-
-</div>
-<!-- EDIT7 SECTION "Using BlenderLoader instead of BlenderModelLoader" [5262-6998] -->
-<h2>How does it work?</h2>
-<div>
-
-<p>
-BlenderLoader (as well as BlenderModelLoader) is looking for all kinds of known assets to load.
-It&#039;s primary use is of course to load the models withon the files.
-Each blender object is imported as scene Node. The node should have applied textures and materials as well.
-If you define animations in your BlenderKey the animations will as well be imported and attached to the model.
-</p>
-
-<p>
-Here is the list of how blender features are mapped into jme.
-</p>
-<div><table>
-	<thead>
-	<tr>
-		<th>Blender</th><th>jMonkeyEngine3</th><th>Note</th>
-	</tr>
-	</thead>
-	<tr>
-		<td>Scene		</td><td>Node</td><td> </td>
-	</tr>
-	<tr>
-		<td>Object		</td><td>Node</td><td> </td>
-	</tr>
-	<tr>
-		<td>Mesh		</td><td>List&lt;Geometry&gt; </td><td>One mesh can have several materials so that is why a list is needed here.</td>
-	</tr>
-	<tr>
-		<td>Lamp		</td><td>Light</td><td> </td>
-	</tr>
-	<tr>
-		<td>Camera		</td><td>Camera</td><td> </td>
-	</tr>
-	<tr>
-		<td>Material	</td><td>Material</td><td> </td>
-	</tr>
-	<tr>
-		<td>Texture	</td><td>Texture</td><td> </td>
-	</tr>
-	<tr>
-		<td>Curve		</td><td>Node </td><td>Node with Curve as its mesh</td>
-	</tr>
-	<tr>
-		<td>Surface	</td><td>Node </td><td>The surface is transformed to the proper mesh</td>
-	</tr>
-</table></div>
-<!-- EDIT9 TABLE [7472-7823] -->
-<p>
-Using BlenderLoader can allow you to use blend file as your local assets repository.
-You can store your textures, materials or meshes there and simply import it when needed.
-Currently blender 2.49 and 2.5+ are supported (only the stable versions).
-Probably versions before 2.49 will work pretty well too, but I never checked that :)
-</p>
-
-</div>
-<!-- EDIT8 SECTION "How does it work?" [6999-8158] -->
-<h2>Notes</h2>
-<div>
-
-<p>
-I know that the current version of loader is not yet fully functional, but belive me – Blender is a very large issue ;)
-Hope I will meet your expectations.
-</p>
-
-<p>
-Be mindful of the result model vertices amount. The best results are achieved when the model is smooth and has no texture. Then the vertex amount is equal to the vertex amount in blender. If the model is not smooth or has a generated texture applied then the amount of vertices is 3 times larger than mesh&#039;s triangles amount. If a 2d texture is applied with UV mapping then the vertex count will vary depending on how much the UV map is fragmented.
-</p>
-
-<p>
-When using polygon meshes in blender 2.5 and newer, better add and apply the triangulation modifier (if available in your version) or save the file with convertion from polygons to triangles.
-Even though the importer supports loading of polygons as the mesh faces, if your face isn&#039;t convex, the results might contain errors.
-</p>
-
-<p>
-Not all modifiers are supported. If your model has modifiers and looks not the way you want in the jme scene - try to apply them and load again.
-</p>
-
-<p>
-Cheers,
-Marcin Roguski (Kaelthas)
-</p>
-
-<p>
-P.S.
-This text might be edited in a meantime if I forgot about something ;)
-</p>
-<hr />
-
-<p>
-See also:
-</p>
-<ul>
-<li><div> <a href="/com/jme3/gde/docs/sdk/3ds_to_blender_to_jmp.html">3DS to Blender to j3o</a></div>
-</li>
-</ul>
-
-<p>
-<a href="nbdocs:/com/jme3/gde/docs/sdk/tag_documentation_sdk_tool_asset">tag_documentation_sdk_tool_asset</a>
-</p>
-
-</div>
-<!-- EDIT10 SECTION "Notes" [8159-] -->
-<p><em><a href="http://wiki.jmonkeyengine.org/doku.php/sdk:blender?do=export_xhtmlbody">view online version</a></em></p>

BIN
jme3-lwjgl-applet/release/libs/applet-loader.zip


+ 2 - 2
jme3-vehicle-creator/src/com/jme3/gde/vehiclecreator/SuspensionSettings.java

@@ -31,8 +31,8 @@ public class SuspensionSettings {
     }
 
     public SuspensionSettings(VehicleWheel wheel) {
-        this.direction.set(wheel.getDirection());
-        this.axle.set(wheel.getAxle());
+        this.direction.set(wheel.getDirection(new Vector3f()));
+        this.axle.set(wheel.getAxle(new Vector3f()));
         this.frontWheel = wheel.isFrontWheel();
         this.radius = wheel.getRadius();
         this.restLength = wheel.getRestLength();

+ 4 - 4
jme3-vehicle-creator/src/com/jme3/gde/vehiclecreator/VehicleEditorController.java

@@ -72,16 +72,16 @@ public class VehicleEditorController implements LookupListener, ActionListener {
         toolsNode.addLight(new DirectionalLight());
         Node track = (Node) new DesktopAssetManager(true).loadModel("Models/Racetrack/Raceway.j3o");
         if (track.getChild("Grass").getControl(RigidBodyControl.class) == null) {
-            track.getChild("Grass").addControl(new RigidBodyControl());
+            track.getChild("Grass").addControl(new RigidBodyControl(0f));
         }
         if (track.getChild("Road").getControl(RigidBodyControl.class) == null) {
-            track.getChild("Road").addControl(new RigidBodyControl());
+            track.getChild("Road").addControl(new RigidBodyControl(0f));
         }
         if (track.getChild("Wall").getControl(RigidBodyControl.class) == null) {
-            track.getChild("Wall").addControl(new RigidBodyControl());
+            track.getChild("Wall").addControl(new RigidBodyControl(0f));
         }
         if (track.getChild("Rumble-Strip").getControl(RigidBodyControl.class) == null) {
-            track.getChild("Rumble-Strip").addControl(new RigidBodyControl());
+            track.getChild("Rumble-Strip").addControl(new RigidBodyControl(0f));
         }
 
         toolsNode.attachChild(track);

+ 0 - 25
nbi/stub/build.xml

@@ -17,14 +17,6 @@
         <!--normen-->
         <delete dir="${nbi.ext.dir}/products/jdk/build"/>
         <delete dir="${nbi.ext.dir}/products/jdk/dist"/>
-        <delete dir="${nbi.ext.dir}/products/blender-osx/build"/>
-        <delete dir="${nbi.ext.dir}/products/blender-osx/dist"/>
-        <delete dir="${nbi.ext.dir}/products/blender-win32/build"/>
-        <delete dir="${nbi.ext.dir}/products/blender-win32/dist"/>
-        <delete dir="${nbi.ext.dir}/products/blender-win64/build"/>
-        <delete dir="${nbi.ext.dir}/products/blender-win64/dist"/>
-        <delete dir="${nbi.ext.dir}/products/blender-linux64/build"/>
-        <delete dir="${nbi.ext.dir}/products/blender-linux64/dist"/>
         <delete dir="${nbi.ext.dir}/engine/build"/>
         <delete dir="${nbi.ext.dir}/engine/dist"/>
 
@@ -166,19 +158,6 @@ jarsigner.enabled=${jarsigner.enabled}
                 </ant>
             </if>
         </for-each>
-        <!--normen-build blender for platforms-->
-        <for-each property="platform" list="${target.platforms}" separator=" ">
-            <echo message="BUILDING BLENDER ${platform} PRODUCT =================================="/>
-            <ant dir="${nbi.ext.dir}/infra/build/products/blender-${platform}" target="release-all">
-                <property name="basedir" value="${nbi.ext.dir}/infra/build/products/blender-${platform}"/>
-                <property name="environment.properties" value="${environment.properties}"/>
-                <property name="dist.dir" value="${output.dir}/components"/>
-                <property name="release.parent.uid" value=""/>
-                <property name="release.parent.version" value=""/>
-                <property name="release.parent.platforms" value=""/>
-                <property name="engine.dist.file" value="${output.dir}/registry-temp/engine.jar"/>
-            </ant>        
-        </for-each>
     </target>
 
     <target name="-generate-bundles">
@@ -205,7 +184,6 @@ jarsigner.enabled=${jarsigner.enabled}
                 <create-bundle root="${output.dir}/registry-temp" platform="${platform}"
                                target="${bundles.release.dir}/${bundle.files.prefix}-${platform}.${bundle.extention}">
                     <component uid="${main.product.uid}" version="${main.product.version}"/>
-                    <component uid="blender" version="${main.product.version}"/>
                     <property name="nbi.bundled.jvm.file" value="${basedir}/../../jdks/jdk-${platform}.bin"/>
                 </create-bundle>
             </if>
@@ -214,7 +192,6 @@ jarsigner.enabled=${jarsigner.enabled}
                 <create-bundle root="${output.dir}/registry-temp" platform="${platform}" 
                                    target="${bundles.release.dir}/${bundle.files.prefix}-${platform}.${bundle.extention}">
                     <component uid="${main.product.uid}" version="${main.product.version}"/>
-                    <component uid="blender" version="${main.product.version}"/>
                     <property name="nbi.bundled.jvm.file" value="${basedir}/../../jdks/jdk-${platform}.exe"/>
                 </create-bundle>
             </if>
@@ -222,7 +199,6 @@ jarsigner.enabled=${jarsigner.enabled}
                 <create-bundle root="${output.dir}/registry-temp" platform="${platform}" 
                                    target="${bundles.release.dir}/${bundle.files.prefix}-${platform}.${bundle.extention}">
                     <component uid="${main.product.uid}" version="${main.product.version}"/>
-                    <component uid="blender" version="${main.product.version}"/>
                     <property name="nbi.bundled.jvm.file" value="${basedir}/../../jdks/jdk-${platform}.exe"/>
                 </create-bundle>
             </if>
@@ -231,7 +207,6 @@ jarsigner.enabled=${jarsigner.enabled}
                 <create-bundle root="${output.dir}/registry-temp" platform="${platform}" 
                                    target="${bundles.release.dir}/${bundle.files.prefix}-${platform}.${bundle.extention}">
                     <component uid="${main.product.uid}" version="${main.product.version}"/>
-                    <component uid="blender" version="${main.product.version}"/>
                     <component uid="jdk" version="${main.product.version}"/>
                     <!--property name="nbi.bundled.jvm.file" value="${basedir}/../../jdks/mac_jdk.bin"/-->
                 </create-bundle>

+ 0 - 74
nbi/stub/ext/components/products/blender/build.xml

@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- You may freely edit this file. See commented blocks below for -->
-<!-- some examples of how to customize the build. -->
-<!-- (If you delete it and reopen the project it will be recreated.) -->
-<!-- By default, only the Clean and Build commands use this build script. -->
-<!-- Commands such as Run, Debug, and Test only use this build script if -->
-<!-- the Compile on Save feature is turned off for the project. -->
-<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
-<!-- in the project's Project Properties dialog box.-->
-<project name="helloworld" default="default" basedir=".">
-    <description>Builds, tests, and runs the project helloworld.</description>
-    <import file="nbproject/build-impl.xml"/>
-    <!--
-
-    There exist several targets which are by default empty and which can be 
-    used for execution of your tasks. These targets are usually executed 
-    before and after some main targets. They are: 
-
-      -pre-init:                 called before initialization of project properties
-      -post-init:                called after initialization of project properties
-      -pre-compile:              called before javac compilation
-      -post-compile:             called after javac compilation
-      -pre-compile-single:       called before javac compilation of single file
-      -post-compile-single:      called after javac compilation of single file
-      -pre-compile-test:         called before javac compilation of JUnit tests
-      -post-compile-test:        called after javac compilation of JUnit tests
-      -pre-compile-test-single:  called before javac compilation of single JUnit test
-      -post-compile-test-single: called after javac compilation of single JUunit test
-      -pre-jar:                  called before JAR building
-      -post-jar:                 called after JAR building
-      -post-clean:               called after cleaning build products
-
-    (Targets beginning with '-' are not intended to be called on their own.)
-
-    Example of inserting an obfuscator after compilation could look like this:
-
-        <target name="-post-compile">
-            <obfuscate>
-                <fileset dir="${build.classes.dir}"/>
-            </obfuscate>
-        </target>
-
-    For list of available properties check the imported 
-    nbproject/build-impl.xml file. 
-
-
-    Another way to customize the build is by overriding existing main targets.
-    The targets of interest are: 
-
-      -init-macrodef-javac:     defines macro for javac compilation
-      -init-macrodef-junit:     defines macro for junit execution
-      -init-macrodef-debug:     defines macro for class debugging
-      -init-macrodef-java:      defines macro for class execution
-      -do-jar-with-manifest:    JAR building (if you are using a manifest)
-      -do-jar-without-manifest: JAR building (if you are not using a manifest)
-      run:                      execution of project 
-      -javadoc-build:           Javadoc generation
-      test-report:              JUnit report generation
-
-    An example of overriding the target for project execution could look like this:
-
-        <target name="run" depends="helloworld-impl.jar">
-            <exec dir="bin" executable="launcher.exe">
-                <arg file="${dist.jar}"/>
-            </exec>
-        </target>
-
-    Notice that the overridden target depends on the jar target and not only on 
-    the compile target as the regular run target does. Again, for a list of available 
-    properties which you can use, check the target you are overriding in the
-    nbproject/build-impl.xml file. 
-
-    -->
-</project>

+ 0 - 42
nbi/stub/ext/components/products/blender/data/Bundle.properties

@@ -1,42 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
-#
-# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
-# Other names may be trademarks of their respective owners.
-#
-# The contents of this file are subject to the terms of either the GNU General Public
-# License Version 2 only ("GPL") or the Common Development and Distribution
-# License("CDDL") (collectively, the "License"). You may not use this file except in
-# compliance with the License. You can obtain a copy of the License at
-# http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
-# License for the specific language governing permissions and limitations under the
-# License.  When distributing the software, include this License Header Notice in
-# each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Oracle
-# designates this particular file as subject to the "Classpath" exception as provided
-# by Oracle in the GPL Version 2 section of the License file that accompanied this code.
-# If applicable, add the following below the License Header, with the fields enclosed
-# by brackets [] replaced by your own identifying information:
-# "Portions Copyrighted [year] [name of copyright owner]"
-# 
-# Contributor(s):
-# 
-# The Original Software is NetBeans. The Initial Developer of the Original Software
-# is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
-# Rights Reserved.
-# 
-# If you wish your version of this file to be governed by only the CDDL or only the
-# GPL Version 2, indicate your decision by adding "[Contributor] elects to include
-# this software in this distribution under the [CDDL or GPL Version 2] license." If
-# you do not indicate a single choice of license, a recipient has the option to
-# distribute your version of this file under either the CDDL, the GPL Version 2 or
-# to extend the choice of license to its licensees as provided above. However, if you
-# add GPL Version 2 code and therefore, elected the GPL Version 2 license, then the
-# option applies only if the new code is made subject to such option by the copyright
-# holder.
-# 
-
-product.display.name={product-name}
-product.description=Blender 3D editor in a version that is \
-compatible with jME3, recommended for jME3 game development.

BIN
nbi/stub/ext/components/products/blender/data/icon.png


BIN
nbi/stub/ext/components/products/blender/data/icon48.png


+ 0 - 1
nbi/stub/ext/components/products/blender/manifest.mf

@@ -1 +0,0 @@
-Configuration-Logic-Class: org.mycompany.ConfigurationLogic

+ 0 - 1788
nbi/stub/ext/components/products/blender/nbproject/build-impl.xml

@@ -1,1788 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-*** GENERATED FROM project.xml - DO NOT EDIT  ***
-***         EDIT ../build.xml INSTEAD         ***
-
-For the purpose of easier reading the script
-is divided into following sections:
-
-  - initialization
-  - compilation
-  - jar
-  - execution
-  - debugging
-  - javadoc
-  - test compilation
-  - test execution
-  - test debugging
-  - applet
-  - cleanup
-
-        -->
-<project xmlns:if="ant:if" xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:jaxrpc="http://www.netbeans.org/ns/j2se-project/jax-rpc" xmlns:unless="ant:unless" basedir=".." default="default" name="blender-impl">
-    <fail message="Please build using Ant 1.8.0 or higher.">
-        <condition>
-            <not>
-                <antversion atleast="1.8.0"/>
-            </not>
-        </condition>
-    </fail>
-    <target depends="test,jar,javadoc" description="Build and test whole project." name="default"/>
-    <!-- 
-                ======================
-                INITIALIZATION SECTION 
-                ======================
-            -->
-    <target name="-pre-init">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="-pre-init" name="-init-private">
-        <property file="nbproject/private/config.properties"/>
-        <property file="nbproject/private/configs/${config}.properties"/>
-        <property file="nbproject/private/private.properties"/>
-    </target>
-    <target depends="-pre-init,-init-private" name="-init-user">
-        <property file="${user.properties.file}"/>
-        <!-- The two properties below are usually overridden -->
-        <!-- by the active platform. Just a fallback. -->
-        <property name="default.javac.source" value="1.6"/>
-        <property name="default.javac.target" value="1.6"/>
-    </target>
-    <target depends="-pre-init,-init-private,-init-user" name="-init-project">
-        <property file="nbproject/configs/${config}.properties"/>
-        <property file="nbproject/project.properties"/>
-    </target>
-    <target name="-init-modules-supported">
-        <condition property="modules.supported.internal" value="true">
-            <not>
-                <matches pattern="1\.[0-8](\..*)?" string="${javac.source}"/>
-            </not>
-        </condition>
-    </target>
-    <target depends="-init-modules-supported" if="modules.supported.internal" name="-init-macrodef-modulename">
-        <macrodef name="modulename" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute name="property"/>
-            <attribute name="sourcepath"/>
-            <sequential>
-                <loadresource property="@{property}" quiet="true">
-                    <javaresource classpath="@{sourcepath}" name="module-info.java" parentFirst="false"/>
-                    <filterchain>
-                        <stripjavacomments/>
-                        <linecontainsregexp>
-                            <regexp pattern="module .* \{"/>
-                        </linecontainsregexp>
-                        <tokenfilter>
-                            <linetokenizer/>
-                            <replaceregex flags="s" pattern="(\s*module\s+)(\S*)(\s*\{.*)" replace="\2"/>
-                        </tokenfilter>
-                        <striplinebreaks/>
-                    </filterchain>
-                </loadresource>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-modules-supported,-init-macrodef-modulename" if="modules.supported.internal" name="-init-source-module-properties">
-        <fail message="Java 9 support requires Ant 1.10.0 or higher.">
-            <condition>
-                <not>
-                    <antversion atleast="1.10.0"/>
-                </not>
-            </condition>
-        </fail>
-        <j2seproject3:modulename property="module.name" sourcepath="${src.dir}"/>
-        <condition property="named.module.internal">
-            <and>
-                <isset property="module.name"/>
-                <length length="0" string="${module.name}" when="greater"/>
-            </and>
-        </condition>
-        <condition property="unnamed.module.internal">
-            <not>
-                <isset property="named.module.internal"/>
-            </not>
-        </condition>
-        <property name="javac.modulepath" value=""/>
-        <property name="run.modulepath" value="${javac.modulepath}"/>
-        <property name="module.build.classes.dir" value="${build.classes.dir}"/>
-        <property name="debug.modulepath" value="${run.modulepath}"/>
-        <property name="javac.upgrademodulepath" value=""/>
-        <property name="run.upgrademodulepath" value="${javac.upgrademodulepath}"/>
-        <condition else="" property="javac.systemmodulepath.cmd.line.arg" value="--system '${javac.systemmodulepath}'">
-            <and>
-                <isset property="javac.systemmodulepath"/>
-                <length length="0" string="${javac.systemmodulepath}" when="greater"/>
-            </and>
-        </condition>
-        <property name="dist.jlink.dir" value="${dist.dir}/jlink"/>
-        <property name="dist.jlink.output" value="${dist.jlink.dir}/${application.title}"/>
-        <property name="module.name" value=""/>
-    </target>
-    <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property,-init-modules-supported" name="-do-init">
-        <property name="platform.java" value="${java.home}/bin/java"/>
-        <available file="${manifest.file}" property="manifest.available"/>
-        <condition property="splashscreen.available">
-            <and>
-                <not>
-                    <equals arg1="${application.splash}" arg2="" trim="true"/>
-                </not>
-                <available file="${application.splash}"/>
-            </and>
-        </condition>
-        <condition property="main.class.available">
-            <and>
-                <isset property="main.class"/>
-                <not>
-                    <equals arg1="${main.class}" arg2="" trim="true"/>
-                </not>
-            </and>
-        </condition>
-        <condition property="profile.available">
-            <and>
-                <isset property="javac.profile"/>
-                <length length="0" string="${javac.profile}" when="greater"/>
-                <not>
-                    <matches pattern="1\.[0-7](\..*)?" string="${javac.source}"/>
-                </not>
-            </and>
-        </condition>
-        <condition property="do.archive">
-            <or>
-                <not>
-                    <istrue value="${jar.archive.disabled}"/>
-                </not>
-                <istrue value="${not.archive.disabled}"/>
-            </or>
-        </condition>
-        <condition property="do.archive+manifest.available">
-            <and>
-                <isset property="manifest.available"/>
-                <istrue value="${do.archive}"/>
-            </and>
-        </condition>
-        <condition property="do.archive+main.class.available">
-            <and>
-                <isset property="main.class.available"/>
-                <istrue value="${do.archive}"/>
-            </and>
-        </condition>
-        <condition property="do.archive+splashscreen.available">
-            <and>
-                <isset property="splashscreen.available"/>
-                <istrue value="${do.archive}"/>
-            </and>
-        </condition>
-        <condition property="do.archive+profile.available">
-            <and>
-                <isset property="profile.available"/>
-                <istrue value="${do.archive}"/>
-            </and>
-        </condition>
-        <condition property="have.tests">
-            <or>
-                <available file="${test.src.dir}"/>
-            </or>
-        </condition>
-        <condition property="have.sources">
-            <or>
-                <available file="${src.dir}"/>
-            </or>
-        </condition>
-        <condition property="netbeans.home+have.tests">
-            <and>
-                <isset property="netbeans.home"/>
-                <isset property="have.tests"/>
-            </and>
-        </condition>
-        <condition property="no.javadoc.preview">
-            <and>
-                <isset property="javadoc.preview"/>
-                <isfalse value="${javadoc.preview}"/>
-            </and>
-        </condition>
-        <property name="run.jvmargs" value=""/>
-        <property name="run.jvmargs.ide" value=""/>
-        <property name="javac.compilerargs" value=""/>
-        <property name="work.dir" value="${basedir}"/>
-        <condition property="no.deps">
-            <and>
-                <istrue value="${no.dependencies}"/>
-            </and>
-        </condition>
-        <property name="javac.debug" value="true"/>
-        <property name="javadoc.preview" value="true"/>
-        <property name="application.args" value=""/>
-        <property name="source.encoding" value="${file.encoding}"/>
-        <property name="runtime.encoding" value="${source.encoding}"/>
-        <property name="manifest.encoding" value="${source.encoding}"/>
-        <condition property="javadoc.encoding.used" value="${javadoc.encoding}">
-            <and>
-                <isset property="javadoc.encoding"/>
-                <not>
-                    <equals arg1="${javadoc.encoding}" arg2=""/>
-                </not>
-            </and>
-        </condition>
-        <property name="javadoc.encoding.used" value="${source.encoding}"/>
-        <property name="includes" value="**"/>
-        <property name="excludes" value=""/>
-        <property name="do.depend" value="false"/>
-        <condition property="do.depend.true">
-            <istrue value="${do.depend}"/>
-        </condition>
-        <path id="endorsed.classpath.path" path="${endorsed.classpath}"/>
-        <condition else="" property="endorsed.classpath.cmd.line.arg" value="-Xbootclasspath/p:'${toString:endorsed.classpath.path}'">
-            <and>
-                <isset property="endorsed.classpath"/>
-                <not>
-                    <equals arg1="${endorsed.classpath}" arg2="" trim="true"/>
-                </not>
-            </and>
-        </condition>
-        <condition else="" property="javac.profile.cmd.line.arg" value="-profile ${javac.profile}">
-            <isset property="profile.available"/>
-        </condition>
-        <condition else="false" property="jdkBug6558476">
-            <and>
-                <matches pattern="1\.[56]" string="${java.specification.version}"/>
-                <not>
-                    <os family="unix"/>
-                </not>
-            </and>
-        </condition>
-        <condition else="false" property="javac.fork">
-            <or>
-                <istrue value="${jdkBug6558476}"/>
-                <istrue value="${javac.external.vm}"/>
-            </or>
-        </condition>
-        <property name="jar.index" value="false"/>
-        <property name="jar.index.metainf" value="${jar.index}"/>
-        <property name="copylibs.rebase" value="true"/>
-        <available file="${meta.inf.dir}/persistence.xml" property="has.persistence.xml"/>
-        <condition property="junit.available">
-            <or>
-                <available classname="org.junit.Test" classpath="${run.test.classpath}"/>
-                <available classname="junit.framework.Test" classpath="${run.test.classpath}"/>
-            </or>
-        </condition>
-        <condition property="testng.available">
-            <available classname="org.testng.annotations.Test" classpath="${run.test.classpath}"/>
-        </condition>
-        <condition property="junit+testng.available">
-            <and>
-                <istrue value="${junit.available}"/>
-                <istrue value="${testng.available}"/>
-            </and>
-        </condition>
-        <condition else="testng" property="testng.mode" value="mixed">
-            <istrue value="${junit+testng.available}"/>
-        </condition>
-        <condition else="" property="testng.debug.mode" value="-mixed">
-            <istrue value="${junit+testng.available}"/>
-        </condition>
-        <property name="java.failonerror" value="true"/>
-    </target>
-    <target name="-post-init">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">
-        <fail unless="src.dir">Must set src.dir</fail>
-        <fail unless="test.src.dir">Must set test.src.dir</fail>
-        <fail unless="build.dir">Must set build.dir</fail>
-        <fail unless="dist.dir">Must set dist.dir</fail>
-        <fail unless="build.classes.dir">Must set build.classes.dir</fail>
-        <fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
-        <fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
-        <fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
-        <fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
-        <fail unless="dist.jar">Must set dist.jar</fail>
-    </target>
-    <target name="-init-macrodef-property">
-        <macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <attribute name="name"/>
-            <attribute name="value"/>
-            <sequential>
-                <property name="@{name}" value="${@{value}}"/>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-ap-cmdline-properties,-init-source-module-properties" if="modules.supported.internal" name="-init-macrodef-javac-with-module">
-        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.dir}" name="srcdir"/>
-            <attribute default="${build.classes.dir}" name="destdir"/>
-            <attribute default="${javac.classpath}" name="classpath"/>
-            <attribute default="${javac.modulepath}" name="modulepath"/>
-            <attribute default="${javac.upgrademodulepath}" name="upgrademodulepath"/>
-            <attribute default="${javac.processorpath}" name="processorpath"/>
-            <attribute default="${javac.processormodulepath}" name="processormodulepath"/>
-            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="${javac.debug}" name="debug"/>
-            <attribute default="${empty.dir}" name="sourcepath" unless:set="named.module.internal"/>
-            <attribute default="${src.dir}" if:set="named.module.internal" name="sourcepath"/>
-            <attribute default="${empty.dir}" name="gensrcdir"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <condition property="warn.excludes.internal">
-                    <and>
-                        <isset property="named.module.internal"/>
-                        <length length="0" string="@{excludes}" trim="true" when="greater"/>
-                    </and>
-                </condition>
-                <echo if:set="warn.excludes.internal" level="warning" message="The javac excludes are not supported in the JDK 9 Named Module."/>
-                <property location="${build.dir}/empty" name="empty.dir"/>
-                <mkdir dir="${empty.dir}"/>
-                <mkdir dir="@{apgeneratedsrcdir}"/>
-                <condition property="processormodulepath.set">
-                    <resourcecount count="0" when="greater">
-                        <path>
-                            <pathelement path="@{processormodulepath}"/>
-                        </path>
-                    </resourcecount>
-                </condition>
-                <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="*"/>
-                        </dirset>
-                    </src>
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                    <modulepath>
-                        <path path="@{modulepath}"/>
-                    </modulepath>
-                    <upgrademodulepath>
-                        <path path="@{upgrademodulepath}"/>
-                    </upgrademodulepath>
-                    <compilerarg line="${javac.systemmodulepath.cmd.line.arg}"/>
-                    <compilerarg line="${javac.profile.cmd.line.arg}"/>
-                    <compilerarg line="${javac.compilerargs}"/>
-                    <compilerarg if:set="processormodulepath.set" value="--processor-module-path"/>
-                    <compilerarg if:set="processormodulepath.set" path="@{processormodulepath}"/>
-                    <compilerarg unless:set="processormodulepath.set" value="-processorpath"/>
-                    <compilerarg path="@{processorpath}:${empty.dir}" unless:set="processormodulepath.set"/>
-                    <compilerarg line="${ap.processors.internal}"/>
-                    <compilerarg line="${annotation.processing.processor.options}"/>
-                    <compilerarg value="-s"/>
-                    <compilerarg path="@{apgeneratedsrcdir}"/>
-                    <compilerarg line="${ap.proc.none.internal}"/>
-                    <customize/>
-                </javac>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-ap-cmdline-properties,-init-source-module-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors" unless="modules.supported.internal">
-        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.dir}" name="srcdir"/>
-            <attribute default="${build.classes.dir}" name="destdir"/>
-            <attribute default="${javac.classpath}" name="classpath"/>
-            <attribute default="${javac.modulepath}" name="modulepath"/>
-            <attribute default="${javac.upgrademodulepath}" name="upgrademodulepath"/>
-            <attribute default="${javac.processorpath}" name="processorpath"/>
-            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="${javac.debug}" name="debug"/>
-            <attribute default="${empty.dir}" name="sourcepath"/>
-            <attribute default="${empty.dir}" name="gensrcdir"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <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}" 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="*"/>
-                        </dirset>
-                    </src>
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
-                    <compilerarg line="${javac.profile.cmd.line.arg}"/>
-                    <compilerarg line="${javac.compilerargs}"/>
-                    <compilerarg value="-processorpath"/>
-                    <compilerarg path="@{processorpath}:${empty.dir}"/>
-                    <compilerarg line="${ap.processors.internal}"/>
-                    <compilerarg line="${annotation.processing.processor.options}"/>
-                    <compilerarg value="-s"/>
-                    <compilerarg path="@{apgeneratedsrcdir}"/>
-                    <compilerarg line="${ap.proc.none.internal}"/>
-                    <customize/>
-                </javac>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-ap-cmdline-properties,-init-source-module-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
-        <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.dir}" name="srcdir"/>
-            <attribute default="${build.classes.dir}" name="destdir"/>
-            <attribute default="${javac.classpath}" name="classpath"/>
-            <attribute default="${javac.modulepath}" name="modulepath"/>
-            <attribute default="${javac.upgrademodulepath}" name="upgrademodulepath"/>
-            <attribute default="${javac.processorpath}" name="processorpath"/>
-            <attribute default="${build.generated.sources.dir}/ap-source-output" name="apgeneratedsrcdir"/>
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="${javac.debug}" name="debug"/>
-            <attribute default="${empty.dir}" name="sourcepath"/>
-            <attribute default="${empty.dir}" name="gensrcdir"/>
-            <element name="customize" optional="true"/>
-            <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}" 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="*"/>
-                        </dirset>
-                    </src>
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                    <compilerarg line="${endorsed.classpath.cmd.line.arg}"/>
-                    <compilerarg line="${javac.profile.cmd.line.arg}"/>
-                    <compilerarg line="${javac.compilerargs}"/>
-                    <customize/>
-                </javac>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-macrodef-javac-with-module,-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
-        <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.dir}" name="srcdir"/>
-            <attribute default="${build.classes.dir}" name="destdir"/>
-            <attribute default="${javac.classpath}" name="classpath"/>
-            <sequential>
-                <depend cache="${build.dir}/depcache" destdir="@{destdir}" excludes="${excludes}" includes="${includes}" srcdir="@{srcdir}">
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                </depend>
-            </sequential>
-        </macrodef>
-        <macrodef name="force-recompile" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${build.classes.dir}" name="destdir"/>
-            <sequential>
-                <fail unless="javac.includes">Must set javac.includes</fail>
-                <pathconvert pathsep="${line.separator}" property="javac.includes.binary">
-                    <path>
-                        <filelist dir="@{destdir}" files="${javac.includes}"/>
-                    </path>
-                    <globmapper from="*.java" to="*.class"/>
-                </pathconvert>
-                <tempfile deleteonexit="true" property="javac.includesfile.binary"/>
-                <echo file="${javac.includesfile.binary}" message="${javac.includes.binary}"/>
-                <delete>
-                    <files includesfile="${javac.includesfile.binary}"/>
-                </delete>
-                <delete>
-                    <fileset file="${javac.includesfile.binary}"/>
-                </delete>
-            </sequential>
-        </macrodef>
-    </target>
-    <target if="${junit.available}" name="-init-macrodef-junit-init">
-        <condition else="false" property="nb.junit.batch" value="true">
-            <and>
-                <istrue value="${junit.available}"/>
-                <not>
-                    <isset property="test.method"/>
-                </not>
-            </and>
-        </condition>
-        <condition else="false" property="nb.junit.single" value="true">
-            <and>
-                <istrue value="${junit.available}"/>
-                <isset property="test.method"/>
-            </and>
-        </condition>
-    </target>
-    <target name="-init-test-properties">
-        <property name="test.binaryincludes" value="&lt;nothing&gt;"/>
-        <property name="test.binarytestincludes" value=""/>
-        <property name="test.binaryexcludes" value=""/>
-    </target>
-    <target depends="-init-modules-supported" if="modules.supported.internal" name="-init-macrodef-junit-prototype-with-module">
-        <macrodef name="junit-prototype" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <element name="customizePrototype" optional="true"/>
-            <sequential>
-                <property name="junit.forkmode" value="perTest"/>
-                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
-                    <syspropertyset>
-                        <propertyref prefix="test-sys-prop."/>
-                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
-                    </syspropertyset>
-                    <classpath>
-                        <path path="${run.test.classpath}"/>
-                    </classpath>
-                    <modulepath>
-                        <path path="${run.test.modulepath}"/>
-                    </modulepath>
-                    <formatter type="brief" usefile="false"/>
-                    <formatter type="xml"/>
-                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
-                    <jvmarg value="-ea"/>
-                    <jvmarg line="${run.test.jvmargs}"/>
-                    <customizePrototype/>
-                </junit>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-modules-supported" name="-init-macrodef-junit-prototype-without-module" unless="modules.supported.internal">
-        <macrodef name="junit-prototype" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <element name="customizePrototype" optional="true"/>
-            <sequential>
-                <property name="junit.forkmode" value="perTest"/>
-                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
-                    <syspropertyset>
-                        <propertyref prefix="test-sys-prop."/>
-                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
-                    </syspropertyset>
-                    <classpath>
-                        <path path="${run.test.classpath}"/>
-                    </classpath>
-                    <formatter type="brief" usefile="false"/>
-                    <formatter type="xml"/>
-                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
-                    <jvmarg value="-ea"/>
-                    <customizePrototype/>
-                </junit>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-test-properties,-init-macrodef-junit-prototype-with-module,-init-macrodef-junit-prototype-without-module" if="${nb.junit.single}" name="-init-macrodef-junit-single" unless="${nb.junit.batch}">
-        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="**" name="testincludes"/>
-            <attribute default="" name="testmethods"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <j2seproject3:junit-prototype>
-                    <customizePrototype>
-                        <test methods="@{testmethods}" name="@{testincludes}" todir="${build.test.results.dir}"/>
-                        <customize/>
-                    </customizePrototype>
-                </j2seproject3:junit-prototype>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-test-properties,-init-macrodef-junit-prototype-with-module,-init-macrodef-junit-prototype-without-module" if="${nb.junit.batch}" name="-init-macrodef-junit-batch" unless="${nb.junit.single}">
-        <macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="**" name="testincludes"/>
-            <attribute default="" name="testmethods"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <j2seproject3:junit-prototype>
-                    <customizePrototype>
-                        <batchtest todir="${build.test.results.dir}">
-                            <fileset dir="${test.src.dir}" excludes="@{excludes},${excludes}" includes="@{includes}">
-                                <filename name="@{testincludes}"/>
-                            </fileset>
-                            <fileset dir="${build.test.classes.dir}" excludes="@{excludes},${excludes},${test.binaryexcludes}" includes="${test.binaryincludes}">
-                                <filename name="${test.binarytestincludes}"/>
-                            </fileset>
-                        </batchtest>
-                        <customize/>
-                    </customizePrototype>
-                </j2seproject3:junit-prototype>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-macrodef-junit-init,-init-macrodef-junit-single, -init-macrodef-junit-batch" if="${junit.available}" name="-init-macrodef-junit"/>
-    <target if="${testng.available}" name="-init-macrodef-testng">
-        <macrodef name="testng" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="**" name="testincludes"/>
-            <attribute default="" name="testmethods"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <condition else="" property="testng.methods.arg" value="@{testincludes}.@{testmethods}">
-                    <isset property="test.method"/>
-                </condition>
-                <union id="test.set">
-                    <fileset dir="${test.src.dir}" excludes="@{excludes},**/*.xml,${excludes}" includes="@{includes}">
-                        <filename name="@{testincludes}"/>
-                    </fileset>
-                </union>
-                <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
-                <testng classfilesetref="test.set" failureProperty="tests.failed" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="blender" testname="TestNG tests" workingDir="${work.dir}">
-                    <xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>
-                    <propertyset>
-                        <propertyref prefix="test-sys-prop."/>
-                        <mapper from="test-sys-prop.*" to="*" type="glob"/>
-                    </propertyset>
-                    <classpath>
-                        <path path="${run.test.classpath}"/>
-                    </classpath>
-                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
-                    <customize/>
-                </testng>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-macrodef-test-impl">
-        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="**" name="testincludes"/>
-            <attribute default="" name="testmethods"/>
-            <element implicit="true" name="customize" optional="true"/>
-            <sequential>
-                <echo>No tests executed.</echo>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-impl">
-        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="**" name="testincludes"/>
-            <attribute default="" name="testmethods"/>
-            <element implicit="true" name="customize" optional="true"/>
-            <sequential>
-                <j2seproject3:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
-                    <customize/>
-                </j2seproject3:junit>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-macrodef-testng" if="${testng.available}" name="-init-macrodef-testng-impl">
-        <macrodef name="test-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="**" name="testincludes"/>
-            <attribute default="" name="testmethods"/>
-            <element implicit="true" name="customize" optional="true"/>
-            <sequential>
-                <j2seproject3:testng excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
-                    <customize/>
-                </j2seproject3:testng>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-macrodef-test-impl,-init-macrodef-junit-impl,-init-macrodef-testng-impl" name="-init-macrodef-test">
-        <macrodef name="test" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="**" name="testincludes"/>
-            <attribute default="" name="testmethods"/>
-            <sequential>
-                <j2seproject3:test-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
-                    <customize>
-                        <jvmarg line="${run.jvmargs}"/>
-                        <jvmarg line="${run.jvmargs.ide}"/>
-                    </customize>
-                </j2seproject3:test-impl>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-macrodef-junit" if="${junit.available}" name="-init-macrodef-junit-debug-impl">
-        <macrodef name="test-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="**" name="testincludes"/>
-            <attribute default="" name="testmethods"/>
-            <element name="customizeDebuggee" optional="true"/>
-            <sequential>
-                <j2seproject3:junit excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
-                    <customize>
-                        <jvmarg value="-agentlib:jdwp=transport=${debug-transport},address=${jpda.address}"/>
-                        <customizeDebuggee/>
-                    </customize>
-                </j2seproject3:junit>
-            </sequential>
-        </macrodef>
-    </target>
-    <target if="${testng.available}" name="-init-macrodef-testng-debug">
-        <macrodef name="testng-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${main.class}" name="testClass"/>
-            <attribute default="" name="testMethod"/>
-            <element name="customize2" optional="true"/>
-            <sequential>
-                <condition else="-testclass @{testClass}" property="test.class.or.method" value="-methods @{testClass}.@{testMethod}">
-                    <isset property="test.method"/>
-                </condition>
-                <condition else="-suitename blender -testname @{testClass} ${test.class.or.method}" property="testng.cmd.args" value="@{testClass}">
-                    <matches pattern=".*\.xml" string="@{testClass}"/>
-                </condition>
-                <delete dir="${build.test.results.dir}" quiet="true"/>
-                <mkdir dir="${build.test.results.dir}"/>
-                <j2seproject3:debug classname="org.testng.TestNG" classpath="${debug.test.classpath}">
-                    <customizeDebuggee>
-                        <customize2/>
-                        <jvmarg value="-ea"/>
-                        <arg line="${testng.debug.mode}"/>
-                        <arg line="-d ${build.test.results.dir}"/>
-                        <arg line="-listener org.testng.reporters.VerboseReporter"/>
-                        <arg line="${testng.cmd.args}"/>
-                    </customizeDebuggee>
-                </j2seproject3:debug>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-macrodef-testng-debug" if="${testng.available}" name="-init-macrodef-testng-debug-impl">
-        <macrodef name="testng-debug-impl" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${main.class}" name="testClass"/>
-            <attribute default="" name="testMethod"/>
-            <element implicit="true" name="customize2" optional="true"/>
-            <sequential>
-                <j2seproject3:testng-debug testClass="@{testClass}" testMethod="@{testMethod}">
-                    <customize2/>
-                </j2seproject3:testng-debug>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-macrodef-junit-debug-impl" if="${junit.available}" name="-init-macrodef-test-debug-junit">
-        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="**" name="testincludes"/>
-            <attribute default="" name="testmethods"/>
-            <attribute default="${main.class}" name="testClass"/>
-            <attribute default="" name="testMethod"/>
-            <sequential>
-                <j2seproject3:test-debug-impl excludes="@{excludes}" includes="@{includes}" testincludes="@{testincludes}" testmethods="@{testmethods}">
-                    <customizeDebuggee>
-                        <jvmarg line="${run.jvmargs}"/>
-                        <jvmarg line="${run.jvmargs.ide}"/>
-                    </customizeDebuggee>
-                </j2seproject3:test-debug-impl>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-macrodef-testng-debug-impl" if="${testng.available}" name="-init-macrodef-test-debug-testng">
-        <macrodef name="test-debug" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${includes}" name="includes"/>
-            <attribute default="${excludes}" name="excludes"/>
-            <attribute default="**" name="testincludes"/>
-            <attribute default="" name="testmethods"/>
-            <attribute default="${main.class}" name="testClass"/>
-            <attribute default="" name="testMethod"/>
-            <sequential>
-                <j2seproject3:testng-debug-impl testClass="@{testClass}" testMethod="@{testMethod}">
-                    <customize2>
-                        <syspropertyset>
-                            <propertyref prefix="test-sys-prop."/>
-                            <mapper from="test-sys-prop.*" to="*" type="glob"/>
-                        </syspropertyset>
-                    </customize2>
-                </j2seproject3:testng-debug-impl>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-macrodef-test-debug-junit,-init-macrodef-test-debug-testng" name="-init-macrodef-test-debug"/>
-    <!--
-                pre NB7.2 profiling section; consider it deprecated
-            -->
-    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile, -profile-init-check" if="profiler.info.jvmargs.agent" name="profile-init"/>
-    <target if="profiler.info.jvmargs.agent" name="-profile-pre-init">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target if="profiler.info.jvmargs.agent" name="-profile-post-init">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target if="profiler.info.jvmargs.agent" name="-profile-init-macrodef-profile">
-        <macrodef name="resolve">
-            <attribute name="name"/>
-            <attribute name="value"/>
-            <sequential>
-                <property name="@{name}" value="${env.@{value}}"/>
-            </sequential>
-        </macrodef>
-        <macrodef name="profile">
-            <attribute default="${main.class}" name="classname"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <property environment="env"/>
-                <resolve name="profiler.current.path" value="${profiler.info.pathvar}"/>
-                <java classname="@{classname}" dir="${profiler.info.dir}" failonerror="${java.failonerror}" fork="true" jvm="${profiler.info.jvm}">
-                    <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
-                    <jvmarg value="${profiler.info.jvmargs.agent}"/>
-                    <jvmarg line="${profiler.info.jvmargs}"/>
-                    <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
-                    <arg line="${application.args}"/>
-                    <classpath>
-                        <path path="${run.classpath}"/>
-                    </classpath>
-                    <syspropertyset>
-                        <propertyref prefix="run-sys-prop."/>
-                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
-                    </syspropertyset>
-                    <customize/>
-                </java>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-profile-pre-init, init, -profile-post-init, -profile-init-macrodef-profile" if="profiler.info.jvmargs.agent" name="-profile-init-check">
-        <fail unless="profiler.info.jvm">Must set JVM to use for profiling in profiler.info.jvm</fail>
-        <fail unless="profiler.info.jvmargs.agent">Must set profiler agent JVM arguments in profiler.info.jvmargs.agent</fail>
-    </target>
-    <!--
-                end of pre NB7.2 profiling section
-            -->
-    <target depends="-init-debug-args" name="-init-macrodef-nbjpda">
-        <macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <attribute default="${main.class}" name="name"/>
-            <attribute default="${debug.modulepath}" name="modulepath"/>
-            <attribute default="${debug.classpath}" name="classpath"/>
-            <attribute default="" name="stopclassname"/>
-            <sequential>
-                <nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}">
-                    <modulepath>
-                        <path path="@{modulepath}"/>
-                    </modulepath>
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                </nbjpdastart>
-            </sequential>
-        </macrodef>
-        <macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <attribute default="${build.classes.dir}" name="dir"/>
-            <sequential>
-                <nbjpdareload>
-                    <fileset dir="@{dir}" includes="${fix.classes}">
-                        <include name="${fix.includes}*.class"/>
-                    </fileset>
-                </nbjpdareload>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-debug-args">
-        <condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
-            <os family="windows"/>
-        </condition>
-        <condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
-            <isset property="debug.transport"/>
-        </condition>
-    </target>
-    <target depends="-init-debug-args" name="-init-macrodef-debug">
-        <macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${module.name}" name="modulename"/>
-            <attribute default="${main.class}" name="classname"/>
-            <attribute default="${debug.modulepath}" name="modulepath"/>
-            <attribute default="${debug.classpath}" name="classpath"/>
-            <element name="customizeDebuggee" optional="true"/>
-            <sequential>
-                <j2seproject1:java classname="@{classname}" classpath="@{classpath}" modulename="@{modulename}" modulepath="@{modulepath}">
-                    <customize>
-                        <jvmarg value="-agentlib:jdwp=transport=${debug-transport},address=${jpda.address}"/>
-                        <customizeDebuggee/>
-                    </customize>
-                </j2seproject1:java>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-source-module-properties" if="named.module.internal" name="-init-macrodef-java-with-module">
-        <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <attribute default="${module.name}" name="modulename"/>
-            <attribute default="${main.class}" name="classname"/>
-            <attribute default="${run.modulepath}" name="modulepath"/>
-            <attribute default="${run.upgrademodulepath}" name="upgrademodulepath"/>
-            <attribute default="${run.classpath}" name="classpath"/>
-            <attribute default="jvm" name="jvm"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true" module="@{modulename}">
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                    <modulepath>
-                        <pathelement path="@{modulepath}"/>
-                        <pathelement location="${module.build.classes.dir}"/>
-                    </modulepath>
-                    <upgrademodulepath>
-                        <path path="@{upgrademodulepath}"/>
-                    </upgrademodulepath>
-                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
-                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
-                    <jvmarg line="${run.jvmargs}"/>
-                    <jvmarg line="${run.jvmargs.ide}"/>
-                    <syspropertyset>
-                        <propertyref prefix="run-sys-prop."/>
-                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
-                    </syspropertyset>
-                    <customize/>
-                </java>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-source-module-properties" if="unnamed.module.internal" name="-init-macrodef-java-with-unnamed-module">
-        <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <attribute default="" name="modulename"/>
-            <attribute default="${main.class}" name="classname"/>
-            <attribute default="${run.modulepath}" name="modulepath"/>
-            <attribute default="${run.upgrademodulepath}" name="upgrademodulepath"/>
-            <attribute default="${run.classpath}" name="classpath"/>
-            <attribute default="jvm" name="jvm"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true">
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                    <modulepath>
-                        <path path="@{modulepath}"/>
-                    </modulepath>
-                    <upgrademodulepath>
-                        <path path="@{upgrademodulepath}"/>
-                    </upgrademodulepath>
-                    <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
-                    <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
-                    <jvmarg line="${run.jvmargs}"/>
-                    <jvmarg line="${run.jvmargs.ide}"/>
-                    <syspropertyset>
-                        <propertyref prefix="run-sys-prop."/>
-                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
-                    </syspropertyset>
-                    <customize/>
-                </java>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-source-module-properties" name="-init-macrodef-java-without-module" unless="modules.supported.internal">
-        <macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <attribute default="" name="modulename"/>
-            <attribute default="${main.class}" name="classname"/>
-            <attribute default="" name="modulepath"/>
-            <attribute default="${run.classpath}" name="classpath"/>
-            <attribute default="jvm" name="jvm"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" 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}"/>
-                    <jvmarg line="${run.jvmargs}"/>
-                    <jvmarg line="${run.jvmargs.ide}"/>
-                    <classpath>
-                        <path path="@{classpath}"/>
-                    </classpath>
-                    <syspropertyset>
-                        <propertyref prefix="run-sys-prop."/>
-                        <mapper from="run-sys-prop.*" to="*" type="glob"/>
-                    </syspropertyset>
-                    <customize/>
-                </java>
-            </sequential>
-        </macrodef>
-    </target>
-    <target depends="-init-macrodef-java-with-module, -init-macrodef-java-with-unnamed-module, -init-macrodef-java-without-module" name="-init-macrodef-java"/>
-    <target name="-init-macrodef-copylibs">
-        <macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${manifest.file}" name="manifest"/>
-            <element name="customize" optional="true"/>
-            <sequential>
-                <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
-                <pathconvert property="run.classpath.without.build.classes.dir">
-                    <path path="${run.classpath}"/>
-                    <map from="${build.classes.dir.resolved}" to=""/>
-                </pathconvert>
-                <pathconvert pathsep=" " property="jar.classpath">
-                    <path path="${run.classpath.without.build.classes.dir}"/>
-                    <chainedmapper>
-                        <flattenmapper/>
-                        <filtermapper>
-                            <replacestring from=" " to="%20"/>
-                        </filtermapper>
-                        <globmapper from="*" to="lib/*"/>
-                    </chainedmapper>
-                </pathconvert>
-                <taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
-                <copylibs compress="${jar.compress}" excludeFromCopy="${copylibs.excludes}" index="${jar.index}" indexMetaInf="${jar.index.metainf}" jarfile="${dist.jar}" manifest="@{manifest}" manifestencoding="UTF-8" rebase="${copylibs.rebase}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
-                    <fileset dir="${build.classes.dir}" excludes="${dist.archive.excludes}"/>
-                    <manifest>
-                        <attribute name="Class-Path" value="${jar.classpath}"/>
-                        <customize/>
-                    </manifest>
-                </copylibs>
-            </sequential>
-        </macrodef>
-    </target>
-    <target name="-init-presetdef-jar">
-        <presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">
-            <jar compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}" manifestencoding="UTF-8">
-                <j2seproject1:fileset dir="${build.classes.dir}" excludes="${dist.archive.excludes}"/>
-            </jar>
-        </presetdef>
-    </target>
-    <target name="-init-ap-cmdline-properties">
-        <property name="annotation.processing.enabled" value="true"/>
-        <property name="annotation.processing.processors.list" value=""/>
-        <property name="annotation.processing.processor.options" value=""/>
-        <property name="annotation.processing.run.all.processors" value="true"/>
-        <property name="javac.processorpath" value="${javac.classpath}"/>
-        <property name="javac.test.processorpath" value="${javac.test.classpath}"/>
-        <condition property="ap.supported.internal" value="true">
-            <not>
-                <matches pattern="1\.[0-5](\..*)?" string="${javac.source}"/>
-            </not>
-        </condition>
-    </target>
-    <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-ap-cmdline-supported">
-        <condition else="" property="ap.processors.internal" value="-processor ${annotation.processing.processors.list}">
-            <isfalse value="${annotation.processing.run.all.processors}"/>
-        </condition>
-        <condition else="" property="ap.proc.none.internal" value="-proc:none">
-            <isfalse value="${annotation.processing.enabled}"/>
-        </condition>
-    </target>
-    <target depends="-init-ap-cmdline-properties,-init-ap-cmdline-supported" name="-init-ap-cmdline">
-        <property name="ap.cmd.line.internal" value=""/>
-    </target>
-    <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-test,-init-macrodef-test-debug,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar,-init-ap-cmdline" name="init"/>
-    <!--
-                ===================
-                COMPILATION SECTION
-                ===================
-            -->
-    <target name="-deps-jar-init" unless="built-jar.properties">
-        <property location="${build.dir}/built-jar.properties" name="built-jar.properties"/>
-        <delete file="${built-jar.properties}" quiet="true"/>
-    </target>
-    <target if="already.built.jar.${basedir}" name="-warn-already-built-jar">
-        <echo level="warn" message="Cycle detected: blender was already built"/>
-    </target>
-    <target depends="init,-deps-jar-init" name="deps-jar" unless="no.deps">
-        <mkdir dir="${build.dir}"/>
-        <touch file="${built-jar.properties}" verbose="false"/>
-        <property file="${built-jar.properties}" prefix="already.built.jar."/>
-        <antcall target="-warn-already-built-jar"/>
-        <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.Core_NBI_Engine}" name="call.subproject"/>
-            <param location="${project.Core_NBI_Engine}/build.xml" name="call.script"/>
-            <param name="call.target" value="jar"/>
-            <param name="transfer.built-jar.properties" value="${built-jar.properties}"/>
-            <param name="transfer.not.archive.disabled" value="true"/>
-            <param name="transfer.do.jlink" value="false"/>
-        </antcall>
-    </target>
-    <target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
-    <target depends="init" name="-check-automatic-build">
-        <available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>
-    </target>
-    <target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build">
-        <antcall target="clean">
-            <param name="no.dependencies" value="true"/>
-        </antcall>
-    </target>
-    <target depends="init,deps-jar" name="-pre-pre-compile">
-        <mkdir dir="${build.classes.dir}"/>
-    </target>
-    <target name="-pre-compile">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target if="do.depend.true" name="-compile-depend">
-        <pathconvert property="build.generated.subdirs">
-            <dirset dir="${build.generated.sources.dir}" erroronmissingdir="false">
-                <include name="*"/>
-            </dirset>
-        </pathconvert>
-        <j2seproject3:depend srcdir="${src.dir}:${build.generated.subdirs}"/>
-    </target>
-    <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">
-        <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
-        <copy todir="${build.classes.dir}">
-            <fileset dir="${src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
-        </copy>
-    </target>
-    <target if="has.persistence.xml" name="-copy-persistence-xml">
-        <mkdir dir="${build.classes.dir}/META-INF"/>
-        <copy todir="${build.classes.dir}/META-INF">
-            <fileset dir="${meta.inf.dir}" includes="persistence.xml orm.xml"/>
-        </copy>
-    </target>
-    <target name="-post-compile">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
-    <target name="-pre-compile-single">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
-        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
-        <j2seproject3:force-recompile/>
-        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}, module-info.java" sourcepath="${src.dir}"/>
-    </target>
-    <target name="-post-compile-single">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
-    <!--
-                ====================
-                JAR BUILDING SECTION
-                ====================
-            -->
-    <target depends="init" name="-pre-pre-jar">
-        <dirname file="${dist.jar}" property="dist.jar.dir"/>
-        <mkdir dir="${dist.jar.dir}"/>
-    </target>
-    <target name="-pre-jar">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,compile" name="-check-module-main-class">
-        <pathconvert property="main.class.file">
-            <string value="${main.class}"/>
-            <unpackagemapper from="*" to="*.class"/>
-        </pathconvert>
-        <condition property="do.module.main.class">
-            <and>
-                <isset property="main.class.available"/>
-                <available file="${build.classes.dir}/module-info.class"/>
-                <available file="${build.classes.dir}/${main.class.file}"/>
-                <isset property="libs.CopyLibs.classpath"/>
-                <available classname="org.netbeans.modules.java.j2seproject.moduletask.ModuleMainClass" classpath="${libs.CopyLibs.classpath}"/>
-            </and>
-        </condition>
-    </target>
-    <target depends="-check-module-main-class" if="do.module.main.class" name="-set-module-main-class">
-        <taskdef classname="org.netbeans.modules.java.j2seproject.moduletask.ModuleMainClass" classpath="${libs.CopyLibs.classpath}" name="modulemainclass"/>
-        <modulemainclass failonerror="false" mainclass="${main.class}" moduleinfo="${build.classes.dir}/module-info.class"/>
-    </target>
-    <target depends="init" if="do.archive" name="-do-jar-create-manifest" unless="manifest.available">
-        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
-        <touch file="${tmp.manifest.file}" verbose="false"/>
-    </target>
-    <target depends="init" if="do.archive+manifest.available" name="-do-jar-copy-manifest">
-        <tempfile deleteonexit="true" destdir="${build.dir}" property="tmp.manifest.file"/>
-        <copy encoding="${manifest.encoding}" file="${manifest.file}" outputencoding="UTF-8" tofile="${tmp.manifest.file}"/>
-    </target>
-    <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+main.class.available" name="-do-jar-set-mainclass">
-        <manifest encoding="UTF-8" file="${tmp.manifest.file}" mode="update">
-            <attribute name="Main-Class" value="${main.class}"/>
-        </manifest>
-    </target>
-    <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+profile.available" name="-do-jar-set-profile">
-        <manifest encoding="UTF-8" file="${tmp.manifest.file}" mode="update">
-            <attribute name="Profile" value="${javac.profile}"/>
-        </manifest>
-    </target>
-    <target depends="init,-do-jar-create-manifest,-do-jar-copy-manifest" if="do.archive+splashscreen.available" name="-do-jar-set-splashscreen">
-        <basename file="${application.splash}" property="splashscreen.basename"/>
-        <mkdir dir="${build.classes.dir}/META-INF"/>
-        <copy failonerror="false" file="${application.splash}" todir="${build.classes.dir}/META-INF"/>
-        <manifest encoding="UTF-8" file="${tmp.manifest.file}" mode="update">
-            <attribute name="SplashScreen-Image" value="META-INF/${splashscreen.basename}"/>
-        </manifest>
-    </target>
-    <target depends="init,compile" name="-check-do-mkdist">
-        <condition property="do.mkdist">
-            <and>
-                <isset property="do.archive"/>
-                <isset property="libs.CopyLibs.classpath"/>
-                <not>
-                    <istrue value="${mkdist.disabled}"/>
-                </not>
-                <not>
-                    <available file="${build.classes.dir}/module-info.class"/>
-                </not>
-            </and>
-        </condition>
-    </target>
-    <target depends="init,-init-macrodef-copylibs,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-check-do-mkdist" if="do.mkdist" name="-do-jar-copylibs">
-        <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">java -jar "${dist.jar.resolved}"</echo>
-    </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-check-do-mkdist" if="do.archive" name="-do-jar-jar" unless="do.mkdist">
-        <j2seproject1:jar manifest="${tmp.manifest.file}"/>
-        <property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
-        <property location="${dist.jar}" name="dist.jar.resolved"/>
-        <condition else="${dist.jar.resolved}" property="jar.usage.message.class.path.replacement" value="">
-            <isset property="named.module.internal"/>
-        </condition>
-        <pathconvert property="run.classpath.with.dist.jar">
-            <path path="${run.classpath}"/>
-            <map from="${build.classes.dir.resolved}" to="${jar.usage.message.class.path.replacement}"/>
-        </pathconvert>
-        <pathconvert property="run.modulepath.with.dist.jar">
-            <path location="${dist.jar.resolved}"/>
-            <path path="${run.modulepath}"/>
-            <map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
-        </pathconvert>
-        <condition else="${run.modulepath}" property="jar.usage.message.run.modulepath.with.dist.jar" value="${run.modulepath.with.dist.jar}">
-            <isset property="named.module.internal"/>
-        </condition>
-        <condition else="" property="jar.usage.message.module.path" value=" -p ${jar.usage.message.run.modulepath.with.dist.jar}">
-            <and>
-                <isset property="modules.supported.internal"/>
-                <length length="0" string="${jar.usage.message.run.modulepath.with.dist.jar}" when="greater"/>
-            </and>
-        </condition>
-        <condition else="" property="jar.usage.message.class.path" value=" -cp ${run.classpath.with.dist.jar}">
-            <length length="0" string="${run.classpath.with.dist.jar}" when="greater"/>
-        </condition>
-        <condition else="/${main.class}" property="jar.usage.message.main.class.class.selector" value="">
-            <isset property="do.module.main.class"/>
-        </condition>
-        <condition else=" ${main.class}" property="jar.usage.message.main.class" value=" -m ${module.name}${jar.usage.message.main.class.class.selector}">
-            <isset property="named.module.internal"/>
-        </condition>
-        <condition else="" property="jar.usage.message" value="To run this application from the command line without Ant, try:${line.separator}${platform.java}${jar.usage.message.module.path}${jar.usage.message.class.path}${jar.usage.message.main.class}">
-            <isset property="main.class.available"/>
-        </condition>
-        <condition else="debug" property="jar.usage.level" value="info">
-            <isset property="main.class.available"/>
-        </condition>
-        <echo level="${jar.usage.level}" message="${jar.usage.message}"/>
-    </target>
-    <target depends="-do-jar-copylibs" if="do.archive" name="-do-jar-delete-manifest">
-        <delete>
-            <fileset file="${tmp.manifest.file}"/>
-        </delete>
-    </target>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-jar,-do-jar-delete-manifest" name="-do-jar-without-libraries"/>
-    <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen,-do-jar-copylibs,-do-jar-delete-manifest" name="-do-jar-with-libraries"/>
-    <target name="-post-jar">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,compile,-pre-jar,-set-module-main-class,-do-jar-without-libraries,-do-jar-with-libraries,-post-jar" name="-do-jar"/>
-    <target depends="init,compile,-pre-jar,-do-jar,-post-jar,deploy" description="Build JAR." name="jar"/>
-    <!--
-                =================
-                DEPLOY SECTION
-                =================
-            -->
-    <target name="-pre-deploy">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init" name="-check-jlink">
-        <condition property="do.jlink.internal">
-            <and>
-                <istrue value="${do.jlink}"/>
-                <isset property="do.archive"/>
-                <isset property="named.module.internal"/>
-            </and>
-        </condition>
-    </target>
-    <target depends="init,-do-jar,-post-jar,-pre-deploy,-check-jlink" if="do.jlink.internal" name="-do-deploy">
-        <delete dir="${dist.jlink.dir}" failonerror="false" quiet="true"/>
-        <property name="jlink.launcher.name" value="${application.title}"/>
-        <condition else="${module.name}" property="jlink.add.modules" value="${module.name},${jlink.additionalmodules}">
-            <and>
-                <isset property="jlink.additionalmodules"/>
-                <length length="0" string="${jlink.additionalmodules}" when="greater"/>
-            </and>
-        </condition>
-        <condition property="jlink.do.strip.internal">
-            <and>
-                <isset property="jlink.strip"/>
-                <istrue value="${jlink.strip}"/>
-            </and>
-        </condition>
-        <condition property="jlink.do.additionalparam.internal">
-            <and>
-                <isset property="jlink.additionalparam"/>
-                <length length="0" string="${jlink.additionalparam}" when="greater"/>
-            </and>
-        </condition>
-        <condition property="jlink.do.launcher.internal">
-            <and>
-                <istrue value="${jlink.launcher}"/>
-                <isset property="main.class.available"/>
-            </and>
-        </condition>
-        <property name="platform.jlink" value="${jdk.home}/bin/jlink"/>
-        <property name="jlink.systemmodules.internal" value="${jdk.home}/jmods"/>
-        <exec executable="${platform.jlink}">
-            <arg value="--module-path"/>
-            <arg path="${jlink.systemmodules.internal}:${run.modulepath}:${dist.jar}"/>
-            <arg value="--add-modules"/>
-            <arg value="${jlink.add.modules}"/>
-            <arg if:set="jlink.do.strip.internal" value="--strip-debug"/>
-            <arg if:set="jlink.do.launcher.internal" value="--launcher"/>
-            <arg if:set="jlink.do.launcher.internal" value="${jlink.launcher.name}=${module.name}/${main.class}"/>
-            <arg if:set="jlink.do.additionalparam.internal" line="${jlink.additionalparam}"/>
-            <arg value="--output"/>
-            <arg value="${dist.jlink.output}"/>
-        </exec>
-    </target>
-    <target name="-post-deploy">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="-do-jar,-post-jar,-pre-deploy,-do-deploy,-post-deploy" name="deploy"/>
-    <!--
-                =================
-                EXECUTION SECTION
-                =================
-            -->
-    <target depends="init,compile" description="Run a main class." name="run">
-        <j2seproject1:java>
-            <customize>
-                <arg line="${application.args}"/>
-            </customize>
-        </j2seproject1:java>
-    </target>
-    <target name="-do-not-recompile">
-        <property name="javac.includes.binary" value=""/>
-    </target>
-    <target depends="init,compile-single" name="run-single">
-        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
-        <j2seproject1:java classname="${run.class}"/>
-    </target>
-    <target depends="init,compile-test-single" name="run-test-with-main">
-        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
-        <j2seproject1:java classname="${run.class}" classpath="${run.test.classpath}"/>
-    </target>
-    <!--
-                =================
-                DEBUGGING SECTION
-                =================
-            -->
-    <target depends="init" if="netbeans.home" name="-debug-start-debugger">
-        <j2seproject1:nbjpdastart name="${debug.class}"/>
-    </target>
-    <target depends="init" if="netbeans.home" name="-debug-start-debugger-main-test">
-        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${debug.class}"/>
-    </target>
-    <target depends="init,compile" name="-debug-start-debuggee">
-        <j2seproject3:debug>
-            <customizeDebuggee>
-                <arg line="${application.args}"/>
-            </customizeDebuggee>
-        </j2seproject3:debug>
-    </target>
-    <target depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE." if="netbeans.home" name="debug"/>
-    <target depends="init" if="netbeans.home" name="-debug-start-debugger-stepinto">
-        <j2seproject1:nbjpdastart stopclassname="${main.class}"/>
-    </target>
-    <target depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee" if="netbeans.home" name="debug-stepinto"/>
-    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-single">
-        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
-        <j2seproject3:debug classname="${debug.class}"/>
-    </target>
-    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single" if="netbeans.home" name="debug-single"/>
-    <target depends="init,compile-test-single" if="netbeans.home" name="-debug-start-debuggee-main-test">
-        <fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
-        <j2seproject3:debug classname="${debug.class}" classpath="${debug.test.classpath}"/>
-    </target>
-    <target depends="init,compile-test-single,-debug-start-debugger-main-test,-debug-start-debuggee-main-test" if="netbeans.home" name="debug-test-with-main"/>
-    <target depends="init" name="-pre-debug-fix">
-        <fail unless="fix.includes">Must set fix.includes</fail>
-        <property name="javac.includes" value="${fix.includes}.java"/>
-    </target>
-    <target depends="init,-pre-debug-fix,compile-single" if="netbeans.home" name="-do-debug-fix">
-        <j2seproject1:nbjpdareload/>
-    </target>
-    <target depends="init,-pre-debug-fix,-do-debug-fix" if="netbeans.home" name="debug-fix"/>
-    <!--
-                =================
-                PROFILING SECTION
-                =================
-            -->
-    <!--
-                pre NB7.2 profiler integration
-            -->
-    <target depends="profile-init,compile" description="Profile a project in the IDE." if="profiler.info.jvmargs.agent" name="-profile-pre72">
-        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
-        <nbprofiledirect>
-            <classpath>
-                <path path="${run.classpath}"/>
-            </classpath>
-        </nbprofiledirect>
-        <profile/>
-    </target>
-    <target depends="profile-init,compile-single" description="Profile a selected class in the IDE." if="profiler.info.jvmargs.agent" name="-profile-single-pre72">
-        <fail unless="profile.class">Must select one file in the IDE or set profile.class</fail>
-        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
-        <nbprofiledirect>
-            <classpath>
-                <path path="${run.classpath}"/>
-            </classpath>
-        </nbprofiledirect>
-        <profile classname="${profile.class}"/>
-    </target>
-    <target depends="profile-init,compile-single" if="profiler.info.jvmargs.agent" name="-profile-applet-pre72">
-        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
-        <nbprofiledirect>
-            <classpath>
-                <path path="${run.classpath}"/>
-            </classpath>
-        </nbprofiledirect>
-        <profile classname="sun.applet.AppletViewer">
-            <customize>
-                <arg value="${applet.url}"/>
-            </customize>
-        </profile>
-    </target>
-    <target depends="-init-macrodef-junit,profile-init,compile-test-single" if="profiler.info.jvmargs.agent" name="-profile-test-single-pre72">
-        <fail unless="netbeans.home">This target only works when run from inside the NetBeans IDE.</fail>
-        <nbprofiledirect>
-            <classpath>
-                <path path="${run.test.classpath}"/>
-            </classpath>
-        </nbprofiledirect>
-        <j2seproject3:junit excludes="${excludes}" includes="${includes}" testincludes="${profile.class}" testmethods="">
-            <customize>
-                <jvmarg value="-agentlib:jdwp=transport=${debug-transport},address=${jpda.address}"/>
-                <env key="${profiler.info.pathvar}" path="${profiler.info.agentpath}:${profiler.current.path}"/>
-                <jvmarg value="${profiler.info.jvmargs.agent}"/>
-                <jvmarg line="${profiler.info.jvmargs}"/>
-                <classpath>
-                    <path path="${run.test.classpath}"/>
-                </classpath>
-            </customize>
-        </j2seproject3:junit>
-    </target>
-    <!--
-                end of pre NB72 profiling section
-            -->
-    <target if="netbeans.home" name="-profile-check">
-        <condition property="profiler.configured">
-            <or>
-                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-agentpath:"/>
-                <contains casesensitive="true" string="${run.jvmargs.ide}" substring="-javaagent:"/>
-            </or>
-        </condition>
-    </target>
-    <target depends="-profile-check,-profile-pre72" description="Profile a project in the IDE." if="profiler.configured" name="profile" unless="profiler.info.jvmargs.agent">
-        <startprofiler/>
-        <antcall target="run"/>
-    </target>
-    <target depends="-profile-check,-profile-single-pre72" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-single" unless="profiler.info.jvmargs.agent">
-        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
-        <startprofiler/>
-        <antcall target="run-single"/>
-    </target>
-    <target depends="-profile-test-single-pre72" description="Profile a selected test in the IDE." name="profile-test-single"/>
-    <target depends="-profile-check" description="Profile a selected test in the IDE." if="profiler.configured" name="profile-test" unless="profiler.info.jvmargs">
-        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
-        <startprofiler/>
-        <antcall target="test-single"/>
-    </target>
-    <target depends="-profile-check" description="Profile a selected class in the IDE." if="profiler.configured" name="profile-test-with-main">
-        <fail unless="run.class">Must select one file in the IDE or set run.class</fail>
-        <startprofiler/>
-        <antcall target="run-test-with-main"/>
-    </target>
-    <target depends="-profile-check,-profile-applet-pre72" if="profiler.configured" name="profile-applet" unless="profiler.info.jvmargs.agent">
-        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
-        <startprofiler/>
-        <antcall target="run-applet"/>
-    </target>
-    <!--
-                ===============
-                JAVADOC SECTION
-                ===============
-            -->
-    <target depends="init" if="have.sources" name="-javadoc-build">
-        <mkdir dir="${dist.javadoc.dir}"/>
-        <condition else="" property="javadoc.endorsed.classpath.cmd.line.arg" value="-J${endorsed.classpath.cmd.line.arg}">
-            <and>
-                <isset property="endorsed.classpath.cmd.line.arg"/>
-                <not>
-                    <equals arg1="${endorsed.classpath.cmd.line.arg}" arg2=""/>
-                </not>
-            </and>
-        </condition>
-        <condition else="" property="bug5101868workaround" value="*.java">
-            <matches pattern="1\.[56](\..*)?" string="${java.version}"/>
-        </condition>
-        <condition else="" property="javadoc.html5.cmd.line.arg" value="-html5">
-            <and>
-                <isset property="javadoc.html5"/>
-                <available file="${jdk.home}${file.separator}lib${file.separator}jrt-fs.jar"/>
-            </and>
-        </condition>
-        <javadoc additionalparam="-J-Dfile.encoding=${file.encoding} ${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>
-            <fileset dir="${src.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
-                <filename name="**/*.java"/>
-            </fileset>
-            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
-                <include name="**/*.java"/>
-                <exclude name="*.java"/>
-            </fileset>
-            <arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>
-            <arg line="${javadoc.html5.cmd.line.arg}"/>
-        </javadoc>
-        <copy todir="${dist.javadoc.dir}">
-            <fileset dir="${src.dir}" excludes="${excludes}" includes="${includes}">
-                <filename name="**/doc-files/**"/>
-            </fileset>
-            <fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
-                <include name="**/doc-files/**"/>
-            </fileset>
-        </copy>
-    </target>
-    <target depends="init,-javadoc-build" if="netbeans.home" name="-javadoc-browse" unless="no.javadoc.preview">
-        <nbbrowse file="${dist.javadoc.dir}/index.html"/>
-    </target>
-    <target depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc." name="javadoc"/>
-    <!--
-                =========================
-                TEST COMPILATION SECTION
-                =========================
-            -->
-    <target depends="init,compile" if="have.tests" name="-pre-pre-compile-test">
-        <mkdir dir="${build.test.classes.dir}"/>
-    </target>
-    <target name="-pre-compile-test">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="-init-source-module-properties" if="named.module.internal" name="-init-test-javac-module-properties-with-module">
-        <j2seproject3:modulename property="test.module.name" sourcepath="${test.src.dir}"/>
-        <condition else="${empty.dir}" property="javac.test.sourcepath" value="${test.src.dir}">
-            <and>
-                <isset property="test.module.name"/>
-                <length length="0" string="${test.module.name}" when="greater"/>
-            </and>
-        </condition>
-        <condition else="--patch-module ${module.name}=${test.src.dir} --add-reads ${module.name}=ALL-UNNAMED" property="javac.test.compilerargs" value="--add-reads ${test.module.name}=ALL-UNNAMED">
-            <and>
-                <isset property="test.module.name"/>
-                <length length="0" string="${test.module.name}" when="greater"/>
-            </and>
-        </condition>
-    </target>
-    <target depends="-init-source-module-properties" if="named.module.internal" name="-init-test-run-module-properties">
-        <condition else="${module.name}" property="run.test.addexport.source.module.internal" value="${test.module.name}">
-            <and>
-                <isset property="test.module.name"/>
-                <length length="0" string="${test.module.name}" when="greater"/>
-            </and>
-        </condition>
-        <fileset dir="${build.test.classes.dir}" id="run.test.packages.internal" includes="**/*.class"/>
-        <property location="${build.test.classes.dir}" name="build.test.classes.dir.abs.internal"/>
-        <pathconvert pathsep=" " property="run.test.addexports.internal" refid="run.test.packages.internal">
-            <chainedmapper>
-                <regexpmapper from="^(.*)\Q${file.separator}\E.*\.class$$" to="\1"/>
-                <filtermapper>
-                    <uniqfilter/>
-                    <replacestring from="${build.test.classes.dir.abs.internal}" to=""/>
-                </filtermapper>
-                <cutdirsmapper dirs="1"/>
-                <packagemapper from="*" to="--add-exports ${run.test.addexport.source.module.internal}/*=ALL-UNNAMED"/>
-            </chainedmapper>
-        </pathconvert>
-        <condition else="--patch-module ${module.name}=${build.test.classes.dir} --add-modules ${module.name} --add-reads ${module.name}=ALL-UNNAMED ${run.test.addexports.internal}" property="run.test.jvmargs" value="--add-modules ${test.module.name} --add-reads ${test.module.name}=ALL-UNNAMED ${run.test.addexports.internal}">
-            <and>
-                <isset property="test.module.name"/>
-                <length length="0" string="${test.module.name}" when="greater"/>
-            </and>
-        </condition>
-    </target>
-    <target depends="-init-source-module-properties" name="-init-test-module-properties-without-module" unless="named.module.internal">
-        <property name="javac.test.sourcepath" value="${empty.dir}"/>
-        <property name="javac.test.compilerargs" value=""/>
-        <property name="run.test.jvmargs" value=""/>
-    </target>
-    <target depends="-init-test-javac-module-properties-with-module,-init-test-module-properties-without-module" name="-init-test-module-properties"/>
-    <target if="do.depend.true" name="-compile-test-depend">
-        <j2seproject3:depend classpath="${javac.test.classpath}" destdir="${build.test.classes.dir}" srcdir="${test.src.dir}"/>
-    </target>
-    <target depends="init,deps-jar,compile,-init-test-module-properties,-pre-pre-compile-test,-pre-compile-test,-compile-test-depend" if="have.tests" name="-do-compile-test">
-        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" modulepath="${javac.test.modulepath}" processorpath="${javac.test.processorpath}" sourcepath="${javac.test.sourcepath}" srcdir="${test.src.dir}">
-            <customize>
-                <compilerarg line="${javac.test.compilerargs}"/>
-            </customize>
-        </j2seproject3:javac>
-        <copy todir="${build.test.classes.dir}">
-            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
-        </copy>
-    </target>
-    <target name="-post-compile-test">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test" name="compile-test"/>
-    <target name="-pre-compile-test-single">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,deps-jar,compile,-init-test-module-properties,-pre-pre-compile-test,-pre-compile-test-single" if="have.tests" name="-do-compile-test-single">
-        <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
-        <j2seproject3:force-recompile destdir="${build.test.classes.dir}"/>
-        <j2seproject3:javac apgeneratedsrcdir="${build.test.classes.dir}" classpath="${javac.test.classpath}" debug="true" destdir="${build.test.classes.dir}" excludes="" includes="${javac.includes}, module-info.java" modulepath="${javac.test.modulepath}" processorpath="${javac.test.processorpath}" sourcepath="${test.src.dir}" srcdir="${test.src.dir}">
-            <customize>
-                <compilerarg line="${javac.test.compilerargs}"/>
-            </customize>
-        </j2seproject3:javac>
-        <copy todir="${build.test.classes.dir}">
-            <fileset dir="${test.src.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
-        </copy>
-    </target>
-    <target name="-post-compile-test-single">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single" name="compile-test-single"/>
-    <!--
-                =======================
-                TEST EXECUTION SECTION
-                =======================
-            -->
-    <target depends="init" if="have.tests" name="-pre-test-run">
-        <mkdir dir="${build.test.results.dir}"/>
-    </target>
-    <target depends="init,compile-test,-init-test-run-module-properties,-pre-test-run" if="have.tests" name="-do-test-run">
-        <j2seproject3:test includes="${includes}" testincludes="**/*Test.java"/>
-    </target>
-    <target depends="init,compile-test,-pre-test-run,-do-test-run" if="have.tests" name="-post-test-run">
-        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
-    </target>
-    <target depends="init" if="have.tests" name="test-report"/>
-    <target depends="init" if="netbeans.home+have.tests" name="-test-browse"/>
-    <target depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests." name="test"/>
-    <target depends="init" if="have.tests" name="-pre-test-run-single">
-        <mkdir dir="${build.test.results.dir}"/>
-    </target>
-    <target depends="init,compile-test-single,-init-test-run-module-properties,-pre-test-run-single" if="have.tests" name="-do-test-run-single">
-        <fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
-        <j2seproject3:test excludes="" includes="${test.includes}" testincludes="${test.includes}"/>
-    </target>
-    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single" if="have.tests" name="-post-test-run-single">
-        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
-    </target>
-    <target depends="init,compile-test-single,-init-test-run-module-properties,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test." name="test-single"/>
-    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-do-test-run-single-method">
-        <fail unless="test.class">Must select some files in the IDE or set test.class</fail>
-        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
-        <j2seproject3:test excludes="" includes="${javac.includes}" testincludes="${test.class}" testmethods="${test.method}"/>
-    </target>
-    <target depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single-method" if="have.tests" name="-post-test-run-single-method">
-        <fail if="tests.failed" unless="ignore.failing.tests">Some tests failed; see details above.</fail>
-    </target>
-    <target depends="init,compile-test-single,-init-test-run-module-properties,-pre-test-run-single,-do-test-run-single-method,-post-test-run-single-method" description="Run single unit test." name="test-single-method"/>
-    <!--
-                =======================
-                TEST DEBUGGING SECTION
-                =======================
-            -->
-    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test">
-        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
-        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testincludes="${javac.includes}"/>
-    </target>
-    <target depends="init,compile-test-single,-pre-test-run-single" if="have.tests" name="-debug-start-debuggee-test-method">
-        <fail unless="test.class">Must select one file in the IDE or set test.class</fail>
-        <fail unless="test.method">Must select some method in the IDE or set test.method</fail>
-        <j2seproject3:test-debug excludes="" includes="${javac.includes}" testClass="${test.class}" testMethod="${test.method}" testincludes="${test.class}" testmethods="${test.method}"/>
-    </target>
-    <target depends="init,compile-test" if="netbeans.home+have.tests" name="-debug-start-debugger-test">
-        <j2seproject1:nbjpdastart classpath="${debug.test.classpath}" name="${test.class}"/>
-    </target>
-    <target depends="init,compile-test-single,-init-test-run-module-properties,-debug-start-debugger-test,-debug-start-debuggee-test" name="debug-test"/>
-    <target depends="init,compile-test-single,-init-test-run-module-properties,-debug-start-debugger-test,-debug-start-debuggee-test-method" name="debug-test-method"/>
-    <target depends="init,-pre-debug-fix,compile-test-single" if="netbeans.home" name="-do-debug-fix-test">
-        <j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
-    </target>
-    <target depends="init,-pre-debug-fix,-do-debug-fix-test" if="netbeans.home" name="debug-fix-test"/>
-    <!--
-                =========================
-                APPLET EXECUTION SECTION
-                =========================
-            -->
-    <target depends="init,compile-single" name="run-applet">
-        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
-        <j2seproject1:java classname="sun.applet.AppletViewer">
-            <customize>
-                <arg value="${applet.url}"/>
-            </customize>
-        </j2seproject1:java>
-    </target>
-    <!--
-                =========================
-                APPLET DEBUGGING  SECTION
-                =========================
-            -->
-    <target depends="init,compile-single" if="netbeans.home" name="-debug-start-debuggee-applet">
-        <fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
-        <j2seproject3:debug classname="sun.applet.AppletViewer">
-            <customizeDebuggee>
-                <arg value="${applet.url}"/>
-            </customizeDebuggee>
-        </j2seproject3:debug>
-    </target>
-    <target depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet" if="netbeans.home" name="debug-applet"/>
-    <!--
-                ===============
-                CLEANUP SECTION
-                ===============
-            -->
-    <target name="-deps-clean-init" unless="built-clean.properties">
-        <property location="${build.dir}/built-clean.properties" name="built-clean.properties"/>
-        <delete file="${built-clean.properties}" quiet="true"/>
-    </target>
-    <target if="already.built.clean.${basedir}" name="-warn-already-built-clean">
-        <echo level="warn" message="Cycle detected: blender was already built"/>
-    </target>
-    <target depends="init,-deps-clean-init" name="deps-clean" unless="no.deps">
-        <mkdir dir="${build.dir}"/>
-        <touch file="${built-clean.properties}" verbose="false"/>
-        <property file="${built-clean.properties}" prefix="already.built.clean."/>
-        <antcall target="-warn-already-built-clean"/>
-        <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.Core_NBI_Engine}" name="call.subproject"/>
-            <param location="${project.Core_NBI_Engine}/build.xml" name="call.script"/>
-            <param name="call.target" value="clean"/>
-            <param name="transfer.built-clean.properties" value="${built-clean.properties}"/>
-            <param name="transfer.not.archive.disabled" value="true"/>
-            <param name="transfer.do.jlink" value="false"/>
-        </antcall>
-    </target>
-    <target depends="init" name="-do-clean">
-        <delete dir="${build.dir}"/>
-        <delete dir="${dist.jlink.output}"/>
-        <delete dir="${dist.dir}" followsymlinks="false" includeemptydirs="true"/>
-    </target>
-    <target name="-post-clean">
-        <!-- Empty placeholder for easier customization. -->
-        <!-- You can override this target in the ../build.xml file. -->
-    </target>
-    <target depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products." name="clean"/>
-    <target name="-check-call-dep">
-        <property file="${call.built.properties}" prefix="already.built."/>
-        <condition property="should.call.dep">
-            <and>
-                <not>
-                    <isset property="already.built.${call.subproject}"/>
-                </not>
-                <available file="${call.script}"/>
-            </and>
-        </condition>
-    </target>
-    <target depends="-check-call-dep" if="should.call.dep" name="-maybe-call-dep">
-        <ant antfile="${call.script}" inheritall="false" target="${call.target}">
-            <propertyset>
-                <propertyref prefix="transfer."/>
-                <mapper from="transfer.*" to="*" type="glob"/>
-            </propertyset>
-        </ant>
-    </target>
-</project>

+ 0 - 8
nbi/stub/ext/components/products/blender/nbproject/genfiles.properties

@@ -1,8 +0,0 @@
-build.xml.data.CRC32=b5c7f54a
-build.xml.script.CRC32=16bbb630
-build.xml.stylesheet.CRC32=be360661
-# 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=eb8fa073
-nbproject/build-impl.xml.script.CRC32=52136381
-nbproject/[email protected]

+ 0 - 85
nbi/stub/ext/components/products/blender/nbproject/project.properties

@@ -1,85 +0,0 @@
-annotation.processing.enabled=true
-annotation.processing.enabled.in.editor=false
-annotation.processing.processors.list=
-annotation.processing.run.all.processors=true
-application.title=blender
-application.vendor=dlm198383
-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
-debug.classpath=\
-    ${run.classpath}
-debug.modulepath=\
-    ${run.modulepath}
-debug.test.classpath=\
-    ${run.test.classpath}
-debug.test.modulepath=\
-    ${run.test.modulepath}
-# This directory is removed when the project is cleaned:
-dist.dir=dist
-dist.jar=${dist.dir}/blender.jar
-dist.javadoc.dir=${dist.dir}/javadoc
-endorsed.classpath=
-excludes=
-includes=**
-jar.compress=false
-javac.classpath=\
-    ${reference.Core_NBI_Engine.jar}:\
-    ../../../../../antlib/nbi-engine.jar
-# Space-separated list of extra javac options
-javac.compilerargs=
-javac.deprecation=false
-javac.external.vm=false
-javac.modulepath=
-javac.processormodulepath=
-javac.processorpath=\
-    ${javac.classpath}
-javac.source=1.7
-javac.target=1.7
-javac.test.classpath=\
-    ${javac.classpath}:\
-    ${build.classes.dir}:\
-    ${libs.junit.classpath}:\
-    ${libs.junit_4.classpath}
-javac.test.modulepath=\
-    ${javac.modulepath}
-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
-project.Core_NBI_Engine=../../../../nbi/engine
-reference.Core_NBI_Engine.jar=${project.Core_NBI_Engine}/dist/nbi-engine.jar
-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.modulepath=\
-    ${javac.modulepath}
-run.test.classpath=\
-    ${javac.test.classpath}:\
-    ${build.test.classes.dir}
-run.test.modulepath=\
-    ${javac.test.modulepath}
-source.encoding=UTF-8
-src.dir=src
-test.src.dir=test

+ 0 - 26
nbi/stub/ext/components/products/blender/nbproject/project.xml

@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://www.netbeans.org/ns/project/1">
-    <type>org.netbeans.modules.java.j2seproject</type>
-    <configuration>
-        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
-            <name>blender</name>
-            <minimum-ant-version>1.6.5</minimum-ant-version>
-            <source-roots>
-                <root id="src.dir"/>
-            </source-roots>
-            <test-roots>
-                <root id="test.src.dir"/>
-            </test-roots>
-        </data>
-        <references xmlns="http://www.netbeans.org/ns/ant-project-references/1">
-            <reference>
-                <foreign-project>Core_NBI_Engine</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>

+ 0 - 0
nbi/stub/ext/components/products/blender/src/org/mycompany/Bundle.properties


+ 0 - 99
nbi/stub/ext/components/products/blender/src/org/mycompany/ConfigurationLogic.java

@@ -1,99 +0,0 @@
-package org.mycompany;
-
-import java.io.File;
-import java.util.List;
-import org.netbeans.installer.product.Registry;
-import org.netbeans.installer.product.components.Product;
-import org.netbeans.installer.product.components.ProductConfigurationLogic;
-import org.netbeans.installer.utils.LogManager;
-import org.netbeans.installer.utils.helper.RemovalMode;
-import org.netbeans.installer.utils.exceptions.InitializationException;
-import org.netbeans.installer.utils.exceptions.InstallationException;
-import org.netbeans.installer.utils.exceptions.UninstallationException;
-import org.netbeans.installer.utils.helper.Platform;
-import org.netbeans.installer.utils.progress.Progress;
-import org.netbeans.installer.wizard.Wizard;
-import org.netbeans.installer.wizard.components.WizardComponent;
-//normen - JDK launchers
-
-public class ConfigurationLogic extends ProductConfigurationLogic {
-
-    private List<WizardComponent> wizardComponents;
-
-    // constructor //////////////////////////////////////////////////////////////////
-    public ConfigurationLogic() throws InitializationException {
-        wizardComponents = Wizard.loadWizardComponents(
-                WIZARD_COMPONENTS_URI,
-                getClass().getClassLoader());
-    }
-
-    public List<WizardComponent> getWizardComponents() {
-        return wizardComponents;
-    }
-    
-    @Override
-    public boolean allowModifyMode() {
-        return false;
-    }
-
-    @Override
-    public void install(Progress progress) throws InstallationException {
-        final Product product = getProduct();
-        final File installLocation = product.getInstallationLocation();
-        LogManager.log("Setting Blender files as executable");
-        setExecutableFile(installLocation, "blender");
-        setExecutableFile(installLocation, "blenderplayer");
-        setExecutableFile(installLocation, "blender-softwaregl");
-    }
-    private static void setExecutableFile(File parent, String path) {
-        File binFile = new File(parent, path);
-        try {
-            binFile.setExecutable(true, false);
-        } catch (Exception ex) {
-            ex.printStackTrace();
-        }
-    }
-
-    @Override
-    public void uninstall(Progress progress) throws UninstallationException {
-        progress.setPercentage(Progress.COMPLETE);
-    }
-
-    @Override
-    public String getExecutable() {
-        return "";
-    }
-
-    @Override
-    public String getIcon() {
-        return "";
-    }
-
-    public RemovalMode getRemovalMode() {
-        return RemovalMode.LIST;
-    }
-
-    @Override
-    public boolean registerInSystem() {
-        return false;
-    }
-
-    @Override
-    public boolean requireLegalArtifactSaving() {
-        return false;
-    }
-
-    @Override
-    public boolean requireDotAppForMacOs() {
-        return false;
-    }
-
-    @Override
-    public boolean wrapForMacOs() {
-        return false;
-    }
-
-    public static final String WIZARD_COMPONENTS_URI =
-            "resource:" + // NOI18N
-            "org/mycompany/wizard.xml"; // NOI18N
-}

+ 0 - 43
nbi/stub/ext/components/products/blender/src/org/mycompany/wizard.xml

@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
-
-  Oracle and Java are registered trademarks of Oracle and/or its affiliates.
-  Other names may be trademarks of their respective owners.
-
-  The contents of this file are subject to the terms of either the GNU General Public
-  License Version 2 only ("GPL") or the Common Development and Distribution
-  License("CDDL") (collectively, the "License"). You may not use this file except in
-  compliance with the License. You can obtain a copy of the License at
-  http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
-  License for the specific language governing permissions and limitations under the
-  License.  When distributing the software, include this License Header Notice in
-  each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Oracle
-  designates this particular file as subject to the "Classpath" exception as provided
-  by Oracle in the GPL Version 2 section of the License file that accompanied this code.
-  If applicable, add the following below the License Header, with the fields enclosed
-  by brackets [] replaced by your own identifying information:
-  "Portions Copyrighted [year] [name of copyright owner]"
-  
-  Contributor(s):
-  
-  The Original Software is NetBeans. The Initial Developer of the Original Software
-  is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
-  Rights Reserved.
-  
-  If you wish your version of this file to be governed by only the CDDL or only the
-  GPL Version 2, indicate your decision by adding "[Contributor] elects to include
-  this software in this distribution under the [CDDL or GPL Version 2] license." If
-  you do not indicate a single choice of license, a recipient has the option to
-  distribute your version of this file under either the CDDL, the GPL Version 2 or
-  to extend the choice of license to its licensees as provided above. However, if you
-  add GPL Version 2 code and therefore, elected the GPL Version 2 license, then the
-  option applies only if the new code is made subject to such option by the copyright
-  holder.
--->
-
-<wizard xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="wizard-components.xsd">
-    <component class="org.mycompany.wizard.panels.ShortcutCreationPanel"/>
-</wizard>

+ 0 - 51
nbi/stub/ext/components/products/blender/src/org/mycompany/wizard/panels/Bundle.properties

@@ -1,51 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
-#
-# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
-# Other names may be trademarks of their respective owners.
-#
-# The contents of this file are subject to the terms of either the GNU General Public
-# License Version 2 only ("GPL") or the Common Development and Distribution
-# License("CDDL") (collectively, the "License"). You may not use this file except in
-# compliance with the License. You can obtain a copy of the License at
-# http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
-# License for the specific language governing permissions and limitations under the
-# License.  When distributing the software, include this License Header Notice in
-# each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Oracle
-# designates this particular file as subject to the "Classpath" exception as provided
-# by Oracle in the GPL Version 2 section of the License file that accompanied this code.
-# If applicable, add the following below the License Header, with the fields enclosed
-# by brackets [] replaced by your own identifying information:
-# "Portions Copyrighted [year] [name of copyright owner]"
-# 
-# Contributor(s):
-# 
-# The Original Software is NetBeans. The Initial Developer of the Original Software
-# is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
-# Rights Reserved.
-# 
-# If you wish your version of this file to be governed by only the CDDL or only the
-# GPL Version 2, indicate your decision by adding "[Contributor] elects to include
-# this software in this distribution under the [CDDL or GPL Version 2] license." If
-# you do not indicate a single choice of license, a recipient has the option to
-# distribute your version of this file under either the CDDL, the GPL Version 2 or
-# to extend the choice of license to its licensees as provided above. However, if you
-# add GPL Version 2 code and therefore, elected the GPL Version 2 license, then the
-# option applies only if the new code is made subject to such option by the copyright
-# holder.
-# 
-
-################################################################################
-# will be augmented with the product name from data/Bundle.properties
-# Note: Augmentation is broken, see ShortcutCreationPanel.java
-
-P.title= Blender
-P.description=Create a desktop shortcut for the Blender 3D Editor.
-
-P.create.desktop.shortcut=Create Desktop icon
-P.create.start.menu.shortcut.windows=Create Start menu entry
-P.create.start.menu.shortcut.unix=Create shortcut in Applications menu
-P.create.start.menu.shortcut.macosx=Create icon in Dock
-

+ 0 - 182
nbi/stub/ext/components/products/blender/src/org/mycompany/wizard/panels/ShortcutCreationPanel.java

@@ -1,182 +0,0 @@
-package org.mycompany.wizard.panels;
-
-import java.awt.GridBagConstraints;
-import java.awt.Insets;
-import org.netbeans.installer.utils.ResourceUtils;
-import org.netbeans.installer.utils.StringUtils;
-import org.netbeans.installer.utils.SystemUtils;
-import org.netbeans.installer.utils.helper.swing.NbiCheckBox;
-import org.netbeans.installer.wizard.components.panels.ErrorMessagePanel;
-import org.netbeans.installer.wizard.containers.SwingContainer;
-import org.netbeans.installer.wizard.ui.SwingUi;
-import org.netbeans.installer.wizard.ui.WizardUi;
-
-/**
- *
- * @author Dmitry Lipin
- */
-public class ShortcutCreationPanel extends ErrorMessagePanel {
-
-    public ShortcutCreationPanel() {
-        setProperty(TITLE_PROPERTY,
-                DEFAULT_TITLE);
-        setProperty(DESCRIPTION_PROPERTY,
-                DEFAULT_DESCRIPTION);
-
-    }
-
-    @Override
-    public WizardUi getWizardUi() {
-        if (wizardUi == null) {
-            wizardUi = new ShortcutCreationPanelUi(this);
-        }
-
-        return wizardUi;
-    }
-
-    @Override
-    public void initialize() {
-        super.initialize();
-        if(getWizard().getProperty(CREATE_DESKTOP_SHORTCUT_PROPERTY) == null) {
-            getWizard().setProperty(CREATE_DESKTOP_SHORTCUT_PROPERTY, "" + true);
-        }
-        if(getWizard().getProperty(CREATE_START_MENU_SHORTCUT_PROPERTY) == null) {
-            getWizard().setProperty(CREATE_START_MENU_SHORTCUT_PROPERTY, "" + true);
-        }
-    }
-
-
-    public static class ShortcutCreationPanelUi extends ErrorMessagePanelUi {
-
-        protected ShortcutCreationPanel panel;
-
-        public ShortcutCreationPanelUi(ShortcutCreationPanel panel) {
-            super(panel);
-
-
-            this.panel = panel;
-        }
-
-        public SwingUi getSwingUi(SwingContainer container) {
-            if (swingUi == null) {
-                swingUi = new ShortcutCreationPanelSwingUi(panel, container);
-            }
-
-            return super.getSwingUi(container);
-        }
-    }
-
-    public static class ShortcutCreationPanelSwingUi extends ErrorMessagePanelSwingUi {
-
-        protected ShortcutCreationPanel panel;
-        private NbiCheckBox desktopShortcutComboBox;
-        private NbiCheckBox startMenuShortcutComboBox;
-
-        public ShortcutCreationPanelSwingUi(
-                final ShortcutCreationPanel panel,
-                final SwingContainer container) {
-            super(panel, container);
-
-            this.panel = panel;
-
-            initComponents();
-        }
-
-        // protected ////////////////////////////////////////////////////////////////
-        @Override
-        protected void initialize() {
-            desktopShortcutComboBox.setText(CREATE_DESKTOP_SHORTCUT_NAME);            
-            desktopShortcutComboBox.setSelected(false);
-            if(Boolean.parseBoolean(panel.getWizard().getProperty(CREATE_DESKTOP_SHORTCUT_PROPERTY))) {
-                desktopShortcutComboBox.doClick();
-            }
-
-            startMenuShortcutComboBox.setText(
-                    SystemUtils.isWindows() ? CREATE_START_MENU_SHORTCUT_NAME_WINDOWS :
-                        (SystemUtils.isMacOS() ? CREATE_START_MENU_SHORTCUT_NAME_MAC :
-                            CREATE_START_MENU_SHORTCUT_NAME_UNIX));
-            startMenuShortcutComboBox.setSelected(false);
-            if(Boolean.parseBoolean(panel.getWizard().getProperty(CREATE_START_MENU_SHORTCUT_PROPERTY))) {
-                startMenuShortcutComboBox.doClick();
-            }
-
-            super.initialize();
-        }
-
-        @Override
-        protected void saveInput() {
-            super.saveInput();
-            panel.getWizard().setProperty(
-                    CREATE_DESKTOP_SHORTCUT_PROPERTY,
-                    StringUtils.EMPTY_STRING + desktopShortcutComboBox.isSelected());
-            
-            panel.getWizard().setProperty(
-                    CREATE_START_MENU_SHORTCUT_PROPERTY,
-                    StringUtils.EMPTY_STRING + startMenuShortcutComboBox.isSelected());
-        }
-
-        @Override
-        protected String validateInput() {
-            String errorMessage = super.validateInput();
-            return errorMessage;
-        }
-
-        // private //////////////////////////////////////////////////////////////////
-        private void initComponents() {
-            // selectedLocationField ////////////////////////////////////////////////
-            desktopShortcutComboBox = new NbiCheckBox();
-            startMenuShortcutComboBox = new NbiCheckBox();
-
-            // this /////////////////////////////////////////////////////////////////
-            add(desktopShortcutComboBox, new GridBagConstraints(
-                    0, 2, // x, y
-                    2, 1, // width, height
-                    1.0, 0.0, // weight-x, weight-y
-                    GridBagConstraints.LINE_START, // anchor
-                    GridBagConstraints.HORIZONTAL, // fill
-                    new Insets(15, 11, 0, 11), // padding
-                    0, 0));                           // padx, pady - ???
-            add(startMenuShortcutComboBox, new GridBagConstraints(
-                    0, 3, // x, y
-                    2, 1, // width, height
-                    1.0, 0.0, // weight-x, weight-y
-                    GridBagConstraints.LINE_START, // anchor
-                    GridBagConstraints.HORIZONTAL, // fill
-                    new Insets(7, 11, 0, 11), // padding
-                    0, 0));                           // padx, pady - ???
-
-        }
-    }
-    /////////////////////////////////////////////////////////////////////////////////
-    // Constants
-    
-    /* @TODO: "ResourceUtils.getString("data","product.display.name")" is broken
-     * It should fetch the properties from the data folder and then we should
-     * also do the same for the description. For some reason the Resource "data"
-     * is not found (See #227). I've integrated everything within P.title and
-     * P.description, doesn't matter for now since we have no i18n anyway.
-     * - MeFisto94
-    */
-    public static final String DEFAULT_TITLE =
-            ResourceUtils.getString(ShortcutCreationPanel.class,
-            "P.title"); // NOI18N
-    public static final String DEFAULT_DESCRIPTION =
-            ResourceUtils.getString(ShortcutCreationPanel.class,
-            "P.description"); // NOI18N
-    public static final String CREATE_DESKTOP_SHORTCUT_NAME =
-            ResourceUtils.getString(ShortcutCreationPanel.class,
-            "P.create.desktop.shortcut"); // NOI18N
-    public static final String CREATE_START_MENU_SHORTCUT_NAME_WINDOWS =
-            ResourceUtils.getString(ShortcutCreationPanel.class,
-            "P.create.start.menu.shortcut.windows"); // NOI18N
-    public static final String CREATE_START_MENU_SHORTCUT_NAME_UNIX =
-            ResourceUtils.getString(ShortcutCreationPanel.class,
-            "P.create.start.menu.shortcut.unix"); // NOI18N
-    public static final String CREATE_START_MENU_SHORTCUT_NAME_MAC =
-            ResourceUtils.getString(ShortcutCreationPanel.class,
-            "P.create.start.menu.shortcut.macosx"); // NOI18N
-    public static final String CREATE_DESKTOP_SHORTCUT_PROPERTY =
-            "create.desktop.shortcut";
-    public static final String CREATE_START_MENU_SHORTCUT_PROPERTY =
-            "create.start.menu.shortcut";
-}

+ 0 - 1
nbi/stub/ext/infra/build/products/README

@@ -1,5 +1,4 @@
 Updating Bundled Products:
 a) To update the JDK edit ~/jdks/download-jdks.sh and make sure to clean any caches (on CI-Systems like Travis) or delete the file links in ~/jdks/
-b) To update blender you simply need to change the download URLs AND the Base Folder (just see their properties files, it’s self explanatory)
 
 The product "helloworld" is the SDK itself (don't ask me, legacy code)

+ 0 - 161
nbi/stub/ext/infra/build/products/blender-linux-x64/build.properties

@@ -1,161 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
-#
-# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
-# Other names may be trademarks of their respective owners.
-#
-# The contents of this file are subject to the terms of either the GNU General Public
-# License Version 2 only ("GPL") or the Common Development and Distribution
-# License("CDDL") (collectively, the "License"). You may not use this file except in
-# compliance with the License. You can obtain a copy of the License at
-# http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
-# License for the specific language governing permissions and limitations under the
-# License.  When distributing the software, include this License Header Notice in
-# each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Oracle
-# designates this particular file as subject to the "Classpath" exception as provided
-# by Oracle in the GPL Version 2 section of the License file that accompanied this code.
-# If applicable, add the following below the License Header, with the fields enclosed
-# by brackets [] replaced by your own identifying information:
-# "Portions Copyrighted [year] [name of copyright owner]"
-# 
-# Contributor(s):
-# 
-# The Original Software is NetBeans. The Initial Developer of the Original Software
-# is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
-# Rights Reserved.
-# 
-# If you wish your version of this file to be governed by only the CDDL or only the
-# GPL Version 2, indicate your decision by adding "[Contributor] elects to include
-# this software in this distribution under the [CDDL or GPL Version 2] license." If
-# you do not indicate a single choice of license, a recipient has the option to
-# distribute your version of this file under either the CDDL, the GPL Version 2 or
-# to extend the choice of license to its licensees as provided above. However, if you
-# add GPL Version 2 code and therefore, elected the GPL Version 2 license, then the
-# option applies only if the new code is made subject to such option by the copyright
-# holder.
-# 
-
-# path to the directory where the base build scripts library and properties 
-# reside
-common.dir=../../../../../.common
-
-# path to the local working directory; this directory which will be the target 
-# for checking out the sources and will be used for the build process
-# * this path can be either absolute or relative in any unix environment, 
-#   however, only relative paths are supported on windows, as the cygwin scp 
-#   command does not properly handle colon in local paths
-work.dir=./build
-
-# path to the local distributive directory; this directory will contain the 
-# distributive file, when (if) the build script finishes successfully
-dist.dir=./dist
-
-# path to the products's sources within the cvs module; it should be a relative 
-# path from the module's root, e.g. for 'nbi/engine', where 'nbi is the module 
-# name, the path should be 'engine'
-cvs.path=components/products/blender
-
-# core product properties: 
-# * ${product.uid} - product "family" (e.g. nb-ide)
-# * ${product.version} - actual products' version; together with the uid it 
-#   forms the unique identifier for the product)
-# * ${product.platforms} - the list of platforms that are supported by this 
-#   product (note that this property is not related to native libraries)
-product.uid=blender
-#normen - do not change this to the actual app version, it has to be the jME SDK version
-product.version={product-version}
-product.platforms=linux-x64
-
-# miscellaneous product properties:
-# * ${product.status} - default status that the product will have in the 
-#   registry. it is meant to be always "not-installed", unless you want 
-#   something really exotic
-# * ${product.offset} - order of the product's node among its parent's 
-#   children, the bigger the offset value, the further the product's node will 
-#   be
-# * ${product.expand} - whether to automatically expand the product's node in 
-#   the components tree or not; 'true'/'false'
-# * ${product.visible} - whether the product's node is visible or not (note 
-#   that this value will be modified at nbi runtime, 'true' may become 'false' 
-#   if the product is filtered out); 'true'/'false'
-# * ${product.features} - list of features that this product belongs to; the 
-#   list should be space-separated
-product.status=not-installed
-product.offset=20000
-product.expand=false
-product.visible=true
-product.features=
-
-# list of configuration logic jar files; normally the first one would be the 
-# distributive file of the product's netbeans project
-# * ${product.logic.length} - total number of the files
-# * indices should start with 1
-product.logic.length=1
-product.logic.1.path=${nbproject.dist.dir}/${nbproject.dist.file.name}
-
-# list of product installation data files
-# * ${product.data.length} - total number of the files
-# * ${product.data.N.uri} - uri at which the installation data file is located
-# * ${product.data.N.zip} - whether the data file is a zip archive which needs to 
-#   be extracted or it is a file that should be used directly; 'true'/'false'
-# * indices should start with 1
-product.data.length=1
-product.data.1.zip=false
-product.data.1.uri=https://download.blender.org/release/Blender2.79/blender-2.79-linux-glibc219-x86_64.tar.bz2
-product.data.tar=blender-2.79-linux-glibc219-x86_64.tar.bz2
-product.data.sub.dir=blender-2.79-linux-glibc219-x86_64
-
-# modificator for the required disk space parameter; the core value will be the
-# sum of unzipped unstallation data files
-# * the measurement unit is one byte
-product.disk.space.modificator=0
-
-# product's requirements (i.e. other products that should be installed
-# in order for this product to succesfully install and function)
-# * ${product.requirements.length} - total number of the requirements
-# * indices should start with 1
-product.requirements.length=0
-#product.requirements.1.uid=
-#product.requirements.1.version-lower=
-#product.requirements.1.version-upper=
-
-# product's conflicts (i.e. other products that prevent this product from 
-# functioning correctly, and thus cannot be installed together with it)
-# * ${product.conflicts.length} - total number of the conflicts
-# * indices should start with 1
-product.conflicts.length=0
-#product.conflicts.1.uid=
-#product.conflicts.1.version-lower=
-#product.conflicts.1.version-upper=
-
-# other products that should be installed prior to this product; these 
-# dependencies do not imply that the dependent product will be installed at 
-# all, but if both the current and the dependent product are selected for 
-# installation, the latter will be installed first
-# * ${product.install-afters.length} - total number of the install-afters
-# * indices should start with 1
-product.install-afters.length=0
-#product.install-afters.1.uid=
-
-# additional product's properties; these will appear in the product's 
-# descriptor and in the registry in the form of 
-# <property name="[name]">value</property> tags.
-# * ${product.properties.length} - total number of the properties
-# * indices should start with 1
-# * properties are not i18n compliant
-product.properties.length=3
-product.properties.1.name=installation.location
-product.properties.1.value=$N{install}/{product-install-directory-name}
-product.properties.2.name=installation.location.windows
-product.properties.2.value=$N{install}/{product-install-directory-name-windows}
-product.properties.3.name=installation.location.macosx
-product.properties.3.value=$N{install}/{product-install-directory-name-macosx}.app
-
-# sources parameters; a search-and-replace will be run over the sources after 
-# check-out, replacing [token] => [value]; regular expressions are not allowed
-# * ${sources.params.length} - total number of the parameters
-# * indices should start with 1
-# * parameters are not i18n compliant
-sources.params.length=0

+ 0 - 101
nbi/stub/ext/infra/build/products/blender-linux-x64/build.xml

@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
-
-  Oracle and Java are registered trademarks of Oracle and/or its affiliates.
-  Other names may be trademarks of their respective owners.
-
-  The contents of this file are subject to the terms of either the GNU General Public
-  License Version 2 only ("GPL") or the Common Development and Distribution
-  License("CDDL") (collectively, the "License"). You may not use this file except in
-  compliance with the License. You can obtain a copy of the License at
-  http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
-  License for the specific language governing permissions and limitations under the
-  License.  When distributing the software, include this License Header Notice in
-  each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Oracle
-  designates this particular file as subject to the "Classpath" exception as provided
-  by Oracle in the GPL Version 2 section of the License file that accompanied this code.
-  If applicable, add the following below the License Header, with the fields enclosed
-  by brackets [] replaced by your own identifying information:
-  "Portions Copyrighted [year] [name of copyright owner]"
-  
-  Contributor(s):
-  
-  The Original Software is NetBeans. The Initial Developer of the Original Software
-  is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
-  Rights Reserved.
-  
-  If you wish your version of this file to be governed by only the CDDL or only the
-  GPL Version 2, indicate your decision by adding "[Contributor] elects to include
-  this software in this distribution under the [CDDL or GPL Version 2] license." If
-  you do not indicate a single choice of license, a recipient has the option to
-  distribute your version of this file under either the CDDL, the GPL Version 2 or
-  to extend the choice of license to its licensees as provided above. However, if you
-  add GPL Version 2 code and therefore, elected the GPL Version 2 license, then the
-  option applies only if the new code is made subject to such option by the copyright
-  holder.
--->
-
-<!--
-  This is the build script for the helloworld product package.
-    
-  It inherits most of the functionality from the base script for building nbi 
-  product packages, while providing this instance-specific values for several
-  core properties. For more details on the values of these properties see
-  the build.properties file.
--->
-<project name="helloworld-product" default="usage" basedir=".">
-    <!-- import the properties that are specific to this environment -->
-    <property file="${environment.properties}"/>
-
-    <!-- import the properties that are specific to this product package -->
-    <property file="build.properties"/>
-    
-    <!-- import the base script for building product packages -->
-    <import file="${common.dir}/product.xml" optional="false"/>
-    
-    <target name="-pre-package">
-        <untar src="${data.directory}/${product.data.tar}" dest="${data.directory}" compression="bzip2"/>
-        <delete file="${data.directory}/${product.data.tar}"/>
-
-        <mkdir dir="${data.directory}/__tmpdir__"/>
-
-        <move todir="${data.directory}/__tmpdir__">
-            <fileset dir="${data.directory}/${product.data.sub.dir}">
-                <include name="**"/>
-            </fileset>
-        </move>
-        
-        <delete dir="${data.directory}/${product.data.sub.dir}" includeemptydirs="true"/>
-
-        <move todir="${data.directory}">
-            <fileset dir="${data.directory}/__tmpdir__">
-                <include name="**"/>
-            </fileset>
-        </move>
-        <delete dir="${data.directory}/__tmpdir__" includeemptydirs="true"/>
-        <!--
-        <exec executable="sh" failonerror="false" dir="${data.directory}">
-            <arg value="-c"/>
-            <arg value="chmod a+x bin/*.sh"/>
-        </exec>
-        -->
-    </target>
-
-    <!--
-      The default target. 
-      
-      Does nothing except printing the usage information.
-    -->
-    <target name="usage">
-        <echo>
-            In order to 'clean', 'checkout' and 'build' the group use the 
-            'build-all' target. To 'clean', 'checkout', 'build' and 
-            'release' - use 'release-all'.
-            
-            For more details, please see the source of this build script.
-        </echo>
-    </target>
-</project>

+ 0 - 162
nbi/stub/ext/infra/build/products/blender-macosx/build.properties

@@ -1,162 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
-#
-# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
-# Other names may be trademarks of their respective owners.
-#
-# The contents of this file are subject to the terms of either the GNU General Public
-# License Version 2 only ("GPL") or the Common Development and Distribution
-# License("CDDL") (collectively, the "License"). You may not use this file except in
-# compliance with the License. You can obtain a copy of the License at
-# http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
-# License for the specific language governing permissions and limitations under the
-# License.  When distributing the software, include this License Header Notice in
-# each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Oracle
-# designates this particular file as subject to the "Classpath" exception as provided
-# by Oracle in the GPL Version 2 section of the License file that accompanied this code.
-# If applicable, add the following below the License Header, with the fields enclosed
-# by brackets [] replaced by your own identifying information:
-# "Portions Copyrighted [year] [name of copyright owner]"
-# 
-# Contributor(s):
-# 
-# The Original Software is NetBeans. The Initial Developer of the Original Software
-# is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
-# Rights Reserved.
-# 
-# If you wish your version of this file to be governed by only the CDDL or only the
-# GPL Version 2, indicate your decision by adding "[Contributor] elects to include
-# this software in this distribution under the [CDDL or GPL Version 2] license." If
-# you do not indicate a single choice of license, a recipient has the option to
-# distribute your version of this file under either the CDDL, the GPL Version 2 or
-# to extend the choice of license to its licensees as provided above. However, if you
-# add GPL Version 2 code and therefore, elected the GPL Version 2 license, then the
-# option applies only if the new code is made subject to such option by the copyright
-# holder.
-# 
-
-# path to the directory where the base build scripts library and properties 
-# reside
-common.dir=../../../../../.common
-
-# path to the local working directory; this directory which will be the target 
-# for checking out the sources and will be used for the build process
-# * this path can be either absolute or relative in any unix environment, 
-#   however, only relative paths are supported on windows, as the cygwin scp 
-#   command does not properly handle colon in local paths
-work.dir=./build
-
-# path to the local distributive directory; this directory will contain the 
-# distributive file, when (if) the build script finishes successfully
-dist.dir=./dist
-
-# path to the products's sources within the cvs module; it should be a relative 
-# path from the module's root, e.g. for 'nbi/engine', where 'nbi is the module 
-# name, the path should be 'engine'
-cvs.path=components/products/blender
-
-# core product properties: 
-# * ${product.uid} - product "family" (e.g. nb-ide)
-# * ${product.version} - actual products' version; together with the uid it 
-#   forms the unique identifier for the product)
-# * ${product.platforms} - the list of platforms that are supported by this 
-#   product (note that this property is not related to native libraries)
-product.uid=blender
-#normen - do not change this to the actual app version, it has to be the jME SDK version
-product.version={product-version}
-product.platforms=macosx
-
-# miscellaneous product properties:
-# * ${product.status} - default status that the product will have in the 
-#   registry. it is meant to be always "not-installed", unless you want 
-#   something really exotic
-# * ${product.offset} - order of the product's node among its parent's 
-#   children, the bigger the offset value, the further the product's node will 
-#   be
-# * ${product.expand} - whether to automatically expand the product's node in 
-#   the components tree or not; 'true'/'false'
-# * ${product.visible} - whether the product's node is visible or not (note 
-#   that this value will be modified at nbi runtime, 'true' may become 'false' 
-#   if the product is filtered out); 'true'/'false'
-# * ${product.features} - list of features that this product belongs to; the 
-#   list should be space-separated
-product.status=not-installed
-product.offset=20000
-product.expand=false
-product.visible=true
-product.features=
-
-# list of configuration logic jar files; normally the first one would be the 
-# distributive file of the product's netbeans project
-# * ${product.logic.length} - total number of the files
-# * indices should start with 1
-product.logic.length=1
-product.logic.1.path=${nbproject.dist.dir}/${nbproject.dist.file.name}
-
-# list of product installation data files
-# * ${product.data.length} - total number of the files
-# * ${product.data.N.uri} - uri at which the installation data file is located
-# * ${product.data.N.zip} - whether the data file is a zip archive which needs to 
-#   be extracted or it is a file that should be used directly; 'true'/'false'
-# * indices should start with 1
-product.data.length=1
-product.data.1.zip=false
-#normen
-product.data.1.uri=https://download.blender.org/release/Blender2.79/blender-2.79-macOS-10.6.tar.gz
-product.data.tar=blender-2.79-macOS-10.6.tar.gz
-product.data.sub.dir=blender-2.79-macOS-10.6
-
-# modificator for the required disk space parameter; the core value will be the
-# sum of unzipped unstallation data files
-# * the measurement unit is one byte
-product.disk.space.modificator=0
-
-# product's requirements (i.e. other products that should be installed
-# in order for this product to succesfully install and function)
-# * ${product.requirements.length} - total number of the requirements
-# * indices should start with 1
-product.requirements.length=0
-#product.requirements.1.uid=
-#product.requirements.1.version-lower=
-#product.requirements.1.version-upper=
-
-# product's conflicts (i.e. other products that prevent this product from 
-# functioning correctly, and thus cannot be installed together with it)
-# * ${product.conflicts.length} - total number of the conflicts
-# * indices should start with 1
-product.conflicts.length=0
-#product.conflicts.1.uid=
-#product.conflicts.1.version-lower=
-#product.conflicts.1.version-upper=
-
-# other products that should be installed prior to this product; these 
-# dependencies do not imply that the dependent product will be installed at 
-# all, but if both the current and the dependent product are selected for 
-# installation, the latter will be installed first
-# * ${product.install-afters.length} - total number of the install-afters
-# * indices should start with 1
-product.install-afters.length=0
-#product.install-afters.1.uid=
-
-# additional product's properties; these will appear in the product's 
-# descriptor and in the registry in the form of 
-# <property name="[name]">value</property> tags.
-# * ${product.properties.length} - total number of the properties
-# * indices should start with 1
-# * properties are not i18n compliant
-product.properties.length=3
-product.properties.1.name=installation.location
-product.properties.1.value=$N{install}/{product-install-directory-name}
-product.properties.2.name=installation.location.windows
-product.properties.2.value=$N{install}/{product-install-directory-name-windows}
-product.properties.3.name=installation.location.macosx
-product.properties.3.value=$N{install}/{product-install-directory-name-macosx}.app
-
-# sources parameters; a search-and-replace will be run over the sources after 
-# check-out, replacing [token] => [value]; regular expressions are not allowed
-# * ${sources.params.length} - total number of the parameters
-# * indices should start with 1
-# * parameters are not i18n compliant
-sources.params.length=0

+ 0 - 101
nbi/stub/ext/infra/build/products/blender-macosx/build.xml

@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
-
-  Oracle and Java are registered trademarks of Oracle and/or its affiliates.
-  Other names may be trademarks of their respective owners.
-
-  The contents of this file are subject to the terms of either the GNU General Public
-  License Version 2 only ("GPL") or the Common Development and Distribution
-  License("CDDL") (collectively, the "License"). You may not use this file except in
-  compliance with the License. You can obtain a copy of the License at
-  http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
-  License for the specific language governing permissions and limitations under the
-  License.  When distributing the software, include this License Header Notice in
-  each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Oracle
-  designates this particular file as subject to the "Classpath" exception as provided
-  by Oracle in the GPL Version 2 section of the License file that accompanied this code.
-  If applicable, add the following below the License Header, with the fields enclosed
-  by brackets [] replaced by your own identifying information:
-  "Portions Copyrighted [year] [name of copyright owner]"
-  
-  Contributor(s):
-  
-  The Original Software is NetBeans. The Initial Developer of the Original Software
-  is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
-  Rights Reserved.
-  
-  If you wish your version of this file to be governed by only the CDDL or only the
-  GPL Version 2, indicate your decision by adding "[Contributor] elects to include
-  this software in this distribution under the [CDDL or GPL Version 2] license." If
-  you do not indicate a single choice of license, a recipient has the option to
-  distribute your version of this file under either the CDDL, the GPL Version 2 or
-  to extend the choice of license to its licensees as provided above. However, if you
-  add GPL Version 2 code and therefore, elected the GPL Version 2 license, then the
-  option applies only if the new code is made subject to such option by the copyright
-  holder.
--->
-
-<!--
-  This is the build script for the helloworld product package.
-    
-  It inherits most of the functionality from the base script for building nbi 
-  product packages, while providing this instance-specific values for several
-  core properties. For more details on the values of these properties see
-  the build.properties file.
--->
-<project name="helloworld-product" default="usage" basedir=".">
-    <!-- import the properties that are specific to this environment -->
-    <property file="${environment.properties}"/>
-
-    <!-- import the properties that are specific to this product package -->
-    <property file="build.properties"/>
-    
-    <!-- import the base script for building product packages -->
-    <import file="${common.dir}/product.xml" optional="false"/>
-    
-    <target name="-pre-package">
-        <untar src="${data.directory}/${product.data.tar}" dest="${data.directory}" compression="gzip"/>
-        <delete file="${data.directory}/${product.data.tar}"/>
-
-        <mkdir dir="${data.directory}/__tmpdir__"/>
-
-        <move todir="${data.directory}/__tmpdir__">
-            <fileset dir="${data.directory}/${product.data.sub.dir}">
-                <include name="**"/>
-            </fileset>
-        </move>
-        
-        <delete dir="${data.directory}/${product.data.sub.dir}" includeemptydirs="true"/>
-
-        <move todir="${data.directory}">
-            <fileset dir="${data.directory}/__tmpdir__">
-                <include name="**"/>
-            </fileset>
-        </move>
-        <delete dir="${data.directory}/__tmpdir__" includeemptydirs="true"/>
-        <!--
-        <exec executable="sh" failonerror="false" dir="${data.directory}">
-            <arg value="-c"/>
-            <arg value="chmod a+x bin/*.sh"/>
-        </exec>
-        -->
-    </target>
-
-    <!--
-      The default target. 
-      
-      Does nothing except printing the usage information.
-    -->
-    <target name="usage">
-        <echo>
-            In order to 'clean', 'checkout' and 'build' the group use the 
-            'build-all' target. To 'clean', 'checkout', 'build' and 
-            'release' - use 'release-all'.
-            
-            For more details, please see the source of this build script.
-        </echo>
-    </target>
-</project>

+ 0 - 160
nbi/stub/ext/infra/build/products/blender-windows-x64/build.properties

@@ -1,160 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
-#
-# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
-# Other names may be trademarks of their respective owners.
-#
-# The contents of this file are subject to the terms of either the GNU General Public
-# License Version 2 only ("GPL") or the Common Development and Distribution
-# License("CDDL") (collectively, the "License"). You may not use this file except in
-# compliance with the License. You can obtain a copy of the License at
-# http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
-# License for the specific language governing permissions and limitations under the
-# License.  When distributing the software, include this License Header Notice in
-# each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Oracle
-# designates this particular file as subject to the "Classpath" exception as provided
-# by Oracle in the GPL Version 2 section of the License file that accompanied this code.
-# If applicable, add the following below the License Header, with the fields enclosed
-# by brackets [] replaced by your own identifying information:
-# "Portions Copyrighted [year] [name of copyright owner]"
-# 
-# Contributor(s):
-# 
-# The Original Software is NetBeans. The Initial Developer of the Original Software
-# is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
-# Rights Reserved.
-# 
-# If you wish your version of this file to be governed by only the CDDL or only the
-# GPL Version 2, indicate your decision by adding "[Contributor] elects to include
-# this software in this distribution under the [CDDL or GPL Version 2] license." If
-# you do not indicate a single choice of license, a recipient has the option to
-# distribute your version of this file under either the CDDL, the GPL Version 2 or
-# to extend the choice of license to its licensees as provided above. However, if you
-# add GPL Version 2 code and therefore, elected the GPL Version 2 license, then the
-# option applies only if the new code is made subject to such option by the copyright
-# holder.
-# 
-
-# path to the directory where the base build scripts library and properties 
-# reside
-common.dir=../../../../../.common
-
-# path to the local working directory; this directory which will be the target 
-# for checking out the sources and will be used for the build process
-# * this path can be either absolute or relative in any unix environment, 
-#   however, only relative paths are supported on windows, as the cygwin scp 
-#   command does not properly handle colon in local paths
-work.dir=./build
-
-# path to the local distributive directory; this directory will contain the 
-# distributive file, when (if) the build script finishes successfully
-dist.dir=./dist
-
-# path to the products's sources within the cvs module; it should be a relative 
-# path from the module's root, e.g. for 'nbi/engine', where 'nbi is the module 
-# name, the path should be 'engine'
-cvs.path=components/products/blender
-
-# core product properties: 
-# * ${product.uid} - product "family" (e.g. nb-ide)
-# * ${product.version} - actual products' version; together with the uid it 
-#   forms the unique identifier for the product)
-# * ${product.platforms} - the list of platforms that are supported by this 
-#   product (note that this property is not related to native libraries)
-product.uid=blender
-#normen - do not change this to the actual app version, it has to be the jME SDK version
-product.version={product-version}
-product.platforms=windows-x64
-
-# miscellaneous product properties:
-# * ${product.status} - default status that the product will have in the 
-#   registry. it is meant to be always "not-installed", unless you want 
-#   something really exotic
-# * ${product.offset} - order of the product's node among its parent's 
-#   children, the bigger the offset value, the further the product's node will 
-#   be
-# * ${product.expand} - whether to automatically expand the product's node in 
-#   the components tree or not; 'true'/'false'
-# * ${product.visible} - whether the product's node is visible or not (note 
-#   that this value will be modified at nbi runtime, 'true' may become 'false' 
-#   if the product is filtered out); 'true'/'false'
-# * ${product.features} - list of features that this product belongs to; the 
-#   list should be space-separated
-product.status=not-installed
-product.offset=20000
-product.expand=false
-product.visible=true
-product.features=
-
-# list of configuration logic jar files; normally the first one would be the 
-# distributive file of the product's netbeans project
-# * ${product.logic.length} - total number of the files
-# * indices should start with 1
-product.logic.length=1
-product.logic.1.path=${nbproject.dist.dir}/${nbproject.dist.file.name}
-
-# list of product installation data files
-# * ${product.data.length} - total number of the files
-# * ${product.data.N.uri} - uri at which the installation data file is located
-# * ${product.data.N.zip} - whether the data file is a zip archive which needs to 
-#   be extracted or it is a file that should be used directly; 'true'/'false'
-# * indices should start with 1
-product.data.length=1
-product.data.1.zip=true
-product.data.1.uri=https://download.blender.org/release/Blender2.79/blender-2.79-windows64.zip
-product.data.sub.dir=blender-2.79-windows64
-
-# modificator for the required disk space parameter; the core value will be the
-# sum of unzipped unstallation data files
-# * the measurement unit is one byte
-product.disk.space.modificator=0
-
-# product's requirements (i.e. other products that should be installed
-# in order for this product to succesfully install and function)
-# * ${product.requirements.length} - total number of the requirements
-# * indices should start with 1
-product.requirements.length=0
-#product.requirements.1.uid=
-#product.requirements.1.version-lower=
-#product.requirements.1.version-upper=
-
-# product's conflicts (i.e. other products that prevent this product from 
-# functioning correctly, and thus cannot be installed together with it)
-# * ${product.conflicts.length} - total number of the conflicts
-# * indices should start with 1
-product.conflicts.length=0
-#product.conflicts.1.uid=
-#product.conflicts.1.version-lower=
-#product.conflicts.1.version-upper=
-
-# other products that should be installed prior to this product; these 
-# dependencies do not imply that the dependent product will be installed at 
-# all, but if both the current and the dependent product are selected for 
-# installation, the latter will be installed first
-# * ${product.install-afters.length} - total number of the install-afters
-# * indices should start with 1
-product.install-afters.length=0
-#product.install-afters.1.uid=
-
-# additional product's properties; these will appear in the product's 
-# descriptor and in the registry in the form of 
-# <property name="[name]">value</property> tags.
-# * ${product.properties.length} - total number of the properties
-# * indices should start with 1
-# * properties are not i18n compliant
-product.properties.length=3
-product.properties.1.name=installation.location
-product.properties.1.value=$N{install}/{product-install-directory-name}
-product.properties.2.name=installation.location.windows
-product.properties.2.value=$N{install}/{product-install-directory-name-windows}
-product.properties.3.name=installation.location.macosx
-product.properties.3.value=$N{install}/{product-install-directory-name-macosx}.app
-
-# sources parameters; a search-and-replace will be run over the sources after 
-# check-out, replacing [token] => [value]; regular expressions are not allowed
-# * ${sources.params.length} - total number of the parameters
-# * indices should start with 1
-# * parameters are not i18n compliant
-sources.params.length=0

+ 0 - 98
nbi/stub/ext/infra/build/products/blender-windows-x64/build.xml

@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
-
-  Oracle and Java are registered trademarks of Oracle and/or its affiliates.
-  Other names may be trademarks of their respective owners.
-
-  The contents of this file are subject to the terms of either the GNU General Public
-  License Version 2 only ("GPL") or the Common Development and Distribution
-  License("CDDL") (collectively, the "License"). You may not use this file except in
-  compliance with the License. You can obtain a copy of the License at
-  http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
-  License for the specific language governing permissions and limitations under the
-  License.  When distributing the software, include this License Header Notice in
-  each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Oracle
-  designates this particular file as subject to the "Classpath" exception as provided
-  by Oracle in the GPL Version 2 section of the License file that accompanied this code.
-  If applicable, add the following below the License Header, with the fields enclosed
-  by brackets [] replaced by your own identifying information:
-  "Portions Copyrighted [year] [name of copyright owner]"
-  
-  Contributor(s):
-  
-  The Original Software is NetBeans. The Initial Developer of the Original Software
-  is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
-  Rights Reserved.
-  
-  If you wish your version of this file to be governed by only the CDDL or only the
-  GPL Version 2, indicate your decision by adding "[Contributor] elects to include
-  this software in this distribution under the [CDDL or GPL Version 2] license." If
-  you do not indicate a single choice of license, a recipient has the option to
-  distribute your version of this file under either the CDDL, the GPL Version 2 or
-  to extend the choice of license to its licensees as provided above. However, if you
-  add GPL Version 2 code and therefore, elected the GPL Version 2 license, then the
-  option applies only if the new code is made subject to such option by the copyright
-  holder.
--->
-
-<!--
-  This is the build script for the helloworld product package.
-    
-  It inherits most of the functionality from the base script for building nbi 
-  product packages, while providing this instance-specific values for several
-  core properties. For more details on the values of these properties see
-  the build.properties file.
--->
-<project name="helloworld-product" default="usage" basedir=".">
-    <!-- import the properties that are specific to this environment -->
-    <property file="${environment.properties}"/>
-
-    <!-- import the properties that are specific to this product package -->
-    <property file="build.properties"/>
-    
-    <!-- import the base script for building product packages -->
-    <import file="${common.dir}/product.xml" optional="false"/>
-    
-    <target name="-pre-package">
-        <mkdir dir="${data.directory}/__tmpdir__"/>
-
-        <move todir="${data.directory}/__tmpdir__">
-            <fileset dir="${data.directory}/${product.data.sub.dir}">
-                <include name="**"/>
-            </fileset>
-        </move>
-        
-        <delete dir="${data.directory}/${product.data.sub.dir}" includeemptydirs="true"/>
-
-        <move todir="${data.directory}">
-            <fileset dir="${data.directory}/__tmpdir__">
-                <include name="**"/>
-            </fileset>
-        </move>
-        <delete dir="${data.directory}/__tmpdir__" includeemptydirs="true"/>
-        <!--
-        <exec executable="sh" failonerror="false" dir="${data.directory}">
-            <arg value="-c"/>
-            <arg value="chmod a+x bin/*.sh"/>
-        </exec>
-        -->
-    </target>
-
-    <!--
-      The default target. 
-      
-      Does nothing except printing the usage information.
-    -->
-    <target name="usage">
-        <echo>
-            In order to 'clean', 'checkout' and 'build' the group use the 
-            'build-all' target. To 'clean', 'checkout', 'build' and 
-            'release' - use 'release-all'.
-            
-            For more details, please see the source of this build script.
-        </echo>
-    </target>
-</project>

+ 0 - 161
nbi/stub/ext/infra/build/products/blender-windows-x86/build.properties

@@ -1,161 +0,0 @@
-#
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-#
-# Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
-#
-# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
-# Other names may be trademarks of their respective owners.
-#
-# The contents of this file are subject to the terms of either the GNU General Public
-# License Version 2 only ("GPL") or the Common Development and Distribution
-# License("CDDL") (collectively, the "License"). You may not use this file except in
-# compliance with the License. You can obtain a copy of the License at
-# http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
-# License for the specific language governing permissions and limitations under the
-# License.  When distributing the software, include this License Header Notice in
-# each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Oracle
-# designates this particular file as subject to the "Classpath" exception as provided
-# by Oracle in the GPL Version 2 section of the License file that accompanied this code.
-# If applicable, add the following below the License Header, with the fields enclosed
-# by brackets [] replaced by your own identifying information:
-# "Portions Copyrighted [year] [name of copyright owner]"
-# 
-# Contributor(s):
-# 
-# The Original Software is NetBeans. The Initial Developer of the Original Software
-# is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
-# Rights Reserved.
-# 
-# If you wish your version of this file to be governed by only the CDDL or only the
-# GPL Version 2, indicate your decision by adding "[Contributor] elects to include
-# this software in this distribution under the [CDDL or GPL Version 2] license." If
-# you do not indicate a single choice of license, a recipient has the option to
-# distribute your version of this file under either the CDDL, the GPL Version 2 or
-# to extend the choice of license to its licensees as provided above. However, if you
-# add GPL Version 2 code and therefore, elected the GPL Version 2 license, then the
-# option applies only if the new code is made subject to such option by the copyright
-# holder.
-# 
-
-# path to the directory where the base build scripts library and properties 
-# reside
-common.dir=../../../../../.common
-
-# path to the local working directory; this directory which will be the target 
-# for checking out the sources and will be used for the build process
-# * this path can be either absolute or relative in any unix environment, 
-#   however, only relative paths are supported on windows, as the cygwin scp 
-#   command does not properly handle colon in local paths
-work.dir=./build
-
-# path to the local distributive directory; this directory will contain the 
-# distributive file, when (if) the build script finishes successfully
-dist.dir=./dist
-
-# path to the products's sources within the cvs module; it should be a relative 
-# path from the module's root, e.g. for 'nbi/engine', where 'nbi is the module 
-# name, the path should be 'engine'
-cvs.path=components/products/blender
-
-# core product properties: 
-# * ${product.uid} - product "family" (e.g. nb-ide)
-# * ${product.version} - actual products' version; together with the uid it 
-#   forms the unique identifier for the product)
-# * ${product.platforms} - the list of platforms that are supported by this 
-#   product (note that this property is not related to native libraries)
-product.uid=blender
-#normen - do not change this to the actual app version, it has to be the jME SDK version
-product.version={product-version}
-product.platforms=windows-x86
-
-# miscellaneous product properties:
-# * ${product.status} - default status that the product will have in the 
-#   registry. it is meant to be always "not-installed", unless you want 
-#   something really exotic
-# * ${product.offset} - order of the product's node among its parent's 
-#   children, the bigger the offset value, the further the product's node will 
-#   be
-# * ${product.expand} - whether to automatically expand the product's node in 
-#   the components tree or not; 'true'/'false'
-# * ${product.visible} - whether the product's node is visible or not (note 
-#   that this value will be modified at nbi runtime, 'true' may become 'false' 
-#   if the product is filtered out); 'true'/'false'
-# * ${product.features} - list of features that this product belongs to; the 
-#   list should be space-separated
-product.status=not-installed
-product.offset=20000
-product.expand=false
-product.visible=true
-product.features=
-
-# list of configuration logic jar files; normally the first one would be the 
-# distributive file of the product's netbeans project
-# * ${product.logic.length} - total number of the files
-# * indices should start with 1
-product.logic.length=1
-product.logic.1.path=${nbproject.dist.dir}/${nbproject.dist.file.name}
-
-# list of product installation data files
-# * ${product.data.length} - total number of the files
-# * ${product.data.N.uri} - uri at which the installation data file is located
-# * ${product.data.N.zip} - whether the data file is a zip archive which needs to 
-#   be extracted or it is a file that should be used directly; 'true'/'false'
-# * indices should start with 1
-product.data.length=1
-product.data.1.zip=true
-#normen
-product.data.1.uri=https://download.blender.org/release/Blender2.79/blender-2.79-windows32.zip
-product.data.sub.dir=blender-2.79-windows32
-
-# modificator for the required disk space parameter; the core value will be the
-# sum of unzipped unstallation data files
-# * the measurement unit is one byte
-product.disk.space.modificator=0
-
-# product's requirements (i.e. other products that should be installed
-# in order for this product to succesfully install and function)
-# * ${product.requirements.length} - total number of the requirements
-# * indices should start with 1
-product.requirements.length=0
-#product.requirements.1.uid=
-#product.requirements.1.version-lower=
-#product.requirements.1.version-upper=
-
-# product's conflicts (i.e. other products that prevent this product from 
-# functioning correctly, and thus cannot be installed together with it)
-# * ${product.conflicts.length} - total number of the conflicts
-# * indices should start with 1
-product.conflicts.length=0
-#product.conflicts.1.uid=
-#product.conflicts.1.version-lower=
-#product.conflicts.1.version-upper=
-
-# other products that should be installed prior to this product; these 
-# dependencies do not imply that the dependent product will be installed at 
-# all, but if both the current and the dependent product are selected for 
-# installation, the latter will be installed first
-# * ${product.install-afters.length} - total number of the install-afters
-# * indices should start with 1
-product.install-afters.length=0
-#product.install-afters.1.uid=
-
-# additional product's properties; these will appear in the product's 
-# descriptor and in the registry in the form of 
-# <property name="[name]">value</property> tags.
-# * ${product.properties.length} - total number of the properties
-# * indices should start with 1
-# * properties are not i18n compliant
-product.properties.length=3
-product.properties.1.name=installation.location
-product.properties.1.value=$N{install}/{product-install-directory-name}
-product.properties.2.name=installation.location.windows
-product.properties.2.value=$N{install}/{product-install-directory-name-windows}
-product.properties.3.name=installation.location.macosx
-product.properties.3.value=$N{install}/{product-install-directory-name-macosx}.app
-
-# sources parameters; a search-and-replace will be run over the sources after 
-# check-out, replacing [token] => [value]; regular expressions are not allowed
-# * ${sources.params.length} - total number of the parameters
-# * indices should start with 1
-# * parameters are not i18n compliant
-sources.params.length=0

+ 0 - 98
nbi/stub/ext/infra/build/products/blender-windows-x86/build.xml

@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
-
-  Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
-
-  Oracle and Java are registered trademarks of Oracle and/or its affiliates.
-  Other names may be trademarks of their respective owners.
-
-  The contents of this file are subject to the terms of either the GNU General Public
-  License Version 2 only ("GPL") or the Common Development and Distribution
-  License("CDDL") (collectively, the "License"). You may not use this file except in
-  compliance with the License. You can obtain a copy of the License at
-  http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
-  License for the specific language governing permissions and limitations under the
-  License.  When distributing the software, include this License Header Notice in
-  each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Oracle
-  designates this particular file as subject to the "Classpath" exception as provided
-  by Oracle in the GPL Version 2 section of the License file that accompanied this code.
-  If applicable, add the following below the License Header, with the fields enclosed
-  by brackets [] replaced by your own identifying information:
-  "Portions Copyrighted [year] [name of copyright owner]"
-  
-  Contributor(s):
-  
-  The Original Software is NetBeans. The Initial Developer of the Original Software
-  is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
-  Rights Reserved.
-  
-  If you wish your version of this file to be governed by only the CDDL or only the
-  GPL Version 2, indicate your decision by adding "[Contributor] elects to include
-  this software in this distribution under the [CDDL or GPL Version 2] license." If
-  you do not indicate a single choice of license, a recipient has the option to
-  distribute your version of this file under either the CDDL, the GPL Version 2 or
-  to extend the choice of license to its licensees as provided above. However, if you
-  add GPL Version 2 code and therefore, elected the GPL Version 2 license, then the
-  option applies only if the new code is made subject to such option by the copyright
-  holder.
--->
-
-<!--
-  This is the build script for the helloworld product package.
-    
-  It inherits most of the functionality from the base script for building nbi 
-  product packages, while providing this instance-specific values for several
-  core properties. For more details on the values of these properties see
-  the build.properties file.
--->
-<project name="helloworld-product" default="usage" basedir=".">
-    <!-- import the properties that are specific to this environment -->
-    <property file="${environment.properties}"/>
-
-    <!-- import the properties that are specific to this product package -->
-    <property file="build.properties"/>
-    
-    <!-- import the base script for building product packages -->
-    <import file="${common.dir}/product.xml" optional="false"/>
-    
-    <target name="-pre-package">
-        <mkdir dir="${data.directory}/__tmpdir__"/>
-
-        <move todir="${data.directory}/__tmpdir__">
-            <fileset dir="${data.directory}/${product.data.sub.dir}">
-                <include name="**"/>
-            </fileset>
-        </move>
-        
-        <delete dir="${data.directory}/${product.data.sub.dir}" includeemptydirs="true"/>
-
-        <move todir="${data.directory}">
-            <fileset dir="${data.directory}/__tmpdir__">
-                <include name="**"/>
-            </fileset>
-        </move>
-        <delete dir="${data.directory}/__tmpdir__" includeemptydirs="true"/>
-        <!--
-        <exec executable="sh" failonerror="false" dir="${data.directory}">
-            <arg value="-c"/>
-            <arg value="chmod a+x bin/*.sh"/>
-        </exec>
-        -->
-    </target>
-
-    <!--
-      The default target. 
-      
-      Does nothing except printing the usage information.
-    -->
-    <target name="usage">
-        <echo>
-            In order to 'clean', 'checkout' and 'build' the group use the 
-            'build-all' target. To 'clean', 'checkout', 'build' and 
-            'release' - use 'release-all'.
-            
-            For more details, please see the source of this build script.
-        </echo>
-    </target>
-</project>