Browse Source

Fixes #33 - Binary files can be used again as Templates. Also see the changes in maintaining.md for some explanations.

MeFisto94 9 years ago
parent
commit
ea134efc83

+ 21 - 1
docs/maintaining.md

@@ -18,4 +18,24 @@ Change http://wiki.jmonkeyengine.org/doku.php/sdk:welcome:3_1 every tag to keep
 ### How to Upgrade Dependencies
 ### How to Upgrade Dependencies
 See `nbi/stub/ext/infra/build/products/README` for now. It will be included in the docs and so the README will only be a link to that.  
 See `nbi/stub/ext/infra/build/products/README` for now. It will be included in the docs and so the README will only be a link to that.  
 
 
-See `resources/README.md` and `harness-override/README.md` for how to change the Netbeans Icon (on Windows)  
+See `resources/README.md` and `harness-override/README.md` for how to change the Netbeans Icon (on Windows)  
+
+### How to add a new template to File->New
+This is really easy once we had fixed the issue #33.  
+Basically in your Module, add a `package-info.java`. For example:  
+```
+@TemplateRegistration(folder = "Scene", content = "Scene.j3o", displayName = "#Templates/JME3/Scene.j3o", description = "EmptyScene.html")
+package com.jme3.gde.scenecomposer;
+import org.netbeans.api.templates.TemplateRegistration;
+```
+
+As you can already see here, Folder is where it will appear, content is the package relative path (so you have to place the file inside of the source folder to have it appear in the jar), displayName is the key to look in `Bundle.properties`. Description **HAS TO BE** an external file. Neither keys nor in-line works.  
+
+IF you are using any `.j3XYZ` file, it will work fine, `.blend` also works, however `.jpg` for example wont.  
+The thing here is that Netbeans tries to interpret such files as text, replacing Strings such as the name and date (which is useful for source code indeed), but breaks our binary files (since we don't have valid UTF-8).  
+If you are interested in the background, see Issue 33 and the related code changes, however the simple answer is:  
+In Module `SceneComposer` under `com.jme3.gde.scenecomposer` you'll find the `CopyTemplateHandler.java` file.  
+Edit the following line just so it recognizes the appropriate extensions.  
+```java
+return ext.startsWith("j3") || ext.equals("blend"); /* Add your own binary extensions here !! */
+```

+ 67 - 0
jme3-scenecomposer/src/com/jme3/gde/scenecomposer/CopyTemplateHandler.java

@@ -0,0 +1,67 @@
+/*
+ *  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.scenecomposer;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import org.netbeans.api.templates.CreateDescriptor;
+import org.netbeans.api.templates.CreateFromTemplateHandler;
+import org.openide.filesystems.FileObject;
+
+/**
+ * This class will handle all .j3o templates to be simply copied.
+ * Starting with NetBeans 8.1 they changed the default action for templates to be using their template engine to parse them.
+ * This lead to Encoding Errors since our binary files are, well, binary.
+ * Unfortunately the only way to change this default behavior were switches inside the template or the Path (i.e. being placed under java)
+ * Also their COPY Action even relies on the StringBuffer, so same issue here.
+ * 
+ * See https://github.com/jMonkeyEngine/sdk/issues/33
+ * @author MeFisto94
+ */
[email protected](service=CreateFromTemplateHandler.class)
+public class CopyTemplateHandler extends CreateFromTemplateHandler {
+
+    @Override
+    protected boolean accept(CreateDescriptor cd) {
+        String ext = cd.getTemplate().getExt();
+        return ext.startsWith("j3") || ext.equals("blend"); /* Add your own binary extensions here !! */
+    }
+
+    @Override
+    protected List<FileObject> createFromTemplate(CreateDescriptor cd) throws IOException {
+        ArrayList<FileObject> list = new ArrayList<FileObject>();
+        FileObject newFile = cd.getTemplate().copy(cd.getTarget(), cd.getProposedName(), cd.getTemplate().getExt()); /* Proposed Name is getName() + default (when name is null) */
+        list.add(newFile);
+        return list;
+    }
+}

+ 10 - 0
jme3-scenecomposer/src/com/jme3/gde/scenecomposer/EmptyScene.html

@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <title></title>
+        <meta charset="UTF-8">
+    </head>
+    <body>
+        <div>This will add a completely empty .j3o file to your Assets so you can start building your Scenes from there.</div>
+    </body>
+</html>

+ 2 - 2
jme3-scenecomposer/src/com/jme3/gde/scenecomposer/layer.xml

@@ -153,14 +153,14 @@
         </folder>
         </folder>
         <!--folder name="SceneComposer-Tools_hidden"-->
         <!--folder name="SceneComposer-Tools_hidden"-->
     </folder>
     </folder>
-    <folder name="Templates">
+    <!-- <folder name="Templates">
         <folder name="Scene">
         <folder name="Scene">
             <file name="Scene.j3o" url="Scene.j3o">
             <file name="Scene.j3o" url="Scene.j3o">
                 <attr name="displayName" bundlevalue="com.jme3.gde.scenecomposer.Bundle#Templates/JME3/Scene.j3o"/>
                 <attr name="displayName" bundlevalue="com.jme3.gde.scenecomposer.Bundle#Templates/JME3/Scene.j3o"/>
                 <attr name="template" boolvalue="true"/>
                 <attr name="template" boolvalue="true"/>
             </file>
             </file>
         </folder>
         </folder>
-    </folder>
+    </folder>-->
     <folder name="Windows2">
     <folder name="Windows2">
         <folder name="Components">
         <folder name="Components">
             <file name="SceneComposerTopComponent.settings" url="SceneComposerTopComponentSettings.xml"/>
             <file name="SceneComposerTopComponent.settings" url="SceneComposerTopComponentSettings.xml"/>

+ 34 - 0
jme3-scenecomposer/src/com/jme3/gde/scenecomposer/package-info.java

@@ -0,0 +1,34 @@
+/*
+ *  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.
+ */
+@TemplateRegistration(folder = "Scene", content = "Scene.j3o", displayName = "#Templates/JME3/Scene.j3o", description = "EmptyScene.html")
+package com.jme3.gde.scenecomposer;
+import org.netbeans.api.templates.TemplateRegistration;