Browse Source

- create unified "Configuration Files" node in project where e.g. build.xml and android MainActivity can be put

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8727 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
nor..67 13 years ago
parent
commit
d825e4ef11

+ 55 - 0
jme3-android/src/com/jme3/gde/android/AndroidImportantFiles.java

@@ -0,0 +1,55 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.jme3.gde.android;
+
+import com.jme3.gde.core.importantfiles.ImportantFiles;
+import java.io.InputStream;
+import java.util.ArrayList;
+import org.netbeans.api.project.Project;
+import org.openide.filesystems.FileObject;
+import org.openide.util.Exceptions;
+import org.openide.xml.XMLUtil;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+/**
+ *
+ * @author normenhansen
+ */
[email protected](service = ImportantFiles.class)
+public class AndroidImportantFiles implements ImportantFiles {
+
+    @Override
+    public FileObject[] getFiles(Project project) {
+        FileObject manifest = project.getProjectDirectory().getFileObject("mobile/AndroidManifest.xml");
+        String mainActivity = "mobile/src";
+        if (manifest != null) {
+            InputStream in = null;
+            try {
+                in = manifest.getInputStream();
+                Document configuration = XMLUtil.parse(new InputSource(in), false, false, null, null);
+                mainActivity = "mobile/src/" + configuration.getDocumentElement().getAttribute("package").replaceAll("\\.", "/") + "/MainActivity.java";
+                in.close();
+            } catch (Exception ex) {
+                Exceptions.printStackTrace(ex);
+            } finally {
+            }
+        }
+        ArrayList<FileObject> list = new ArrayList<FileObject>();
+        FileObject mainAct = project.getProjectDirectory().getFileObject(mainActivity);
+        if (mainAct != null) {
+            list.add(mainAct);
+        }
+        FileObject manif = project.getProjectDirectory().getFileObject("mobile/AndroidManifest.xml");
+        if (manif != null) {
+            list.add(manif);
+        }
+        FileObject buildProp = project.getProjectDirectory().getFileObject("mobile/ant.properties");
+        if (buildProp != null) {
+            list.add(buildProp);
+        }
+        return list.toArray(new FileObject[list.size()]);
+    }
+}

+ 0 - 160
jme3-android/src/com/jme3/gde/android/ImportantFilesNode.java

@@ -1,160 +0,0 @@
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
-package com.jme3.gde.android;
-
-import java.awt.Image;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import org.netbeans.api.project.Project;
-import org.netbeans.spi.project.LookupProvider;
-import org.netbeans.spi.project.ui.support.NodeFactory;
-import org.netbeans.spi.project.ui.support.NodeFactorySupport;
-import org.netbeans.spi.project.ui.support.NodeList;
-import org.openide.filesystems.FileObject;
-import org.openide.loaders.DataObject;
-import org.openide.loaders.DataObjectNotFoundException;
-import org.openide.nodes.AbstractNode;
-import org.openide.nodes.Children;
-import org.openide.nodes.Node;
-import org.openide.util.Exceptions;
-import org.openide.util.ImageUtilities;
-import org.openide.util.Lookup;
-import org.openide.util.lookup.Lookups;
-import org.openide.xml.XMLUtil;
-import org.w3c.dom.Document;
-import org.xml.sax.InputSource;
-
-/**
- *
- * @author normenhansen
- */
-public class ImportantFilesNode extends AbstractNode {
-
-    private static Image smallImage =
-            ImageUtilities.loadImage("com/jme3/gde/android/properties/Phone_16.gif");
-
-    public ImportantFilesNode(Project proj) throws DataObjectNotFoundException {
-        super(new ImportantFilesChildren(proj));
-    }
-
-    @Override
-    public String getDisplayName() {
-        return "Android Files";
-    }
-
-    @Override
-    public Image getIcon(int type) {
-        return smallImage;
-    }
-
-    @Override
-    public Image getOpenedIcon(int type) {
-        return smallImage;
-    }
-
-    public static class LookupProviderImpl implements LookupProvider {
-
-        public Lookup createAdditionalLookup(Lookup lookup) {
-
-            Project prj = lookup.lookup(Project.class);
-
-            //create node if lookup has important files node
-            FileObject folder = prj.getProjectDirectory().getFileObject("mobile");
-            if (folder != null && folder.isFolder()) {
-                return Lookups.fixed(new ImportantFilesLookupItem(prj));
-            }
-
-            return Lookups.fixed();
-
-        }
-    }
-
-    public static class ImportantFilesNodeFactoryImpl implements NodeFactory {
-
-        public NodeList createNodes(Project project) {
-
-//        this.proj = project;
-
-            //If our item is in the project's lookup,
-            //return a new node in the node list:
-            ImportantFilesLookupItem item = project.getLookup().lookup(ImportantFilesLookupItem.class);
-            if (item != null) {
-                try {
-                    ImportantFilesNode nd = new ImportantFilesNode(project);
-                    return NodeFactorySupport.fixedNodeList(nd);
-                } catch (DataObjectNotFoundException ex) {
-                    Exceptions.printStackTrace(ex);
-                }
-            }
-
-            //If our item isn't in the lookup,
-            //then return an empty list of nodes:
-            return NodeFactorySupport.fixedNodeList();
-
-        }
-    }
-
-    public static class ImportantFilesLookupItem {
-
-        public ImportantFilesLookupItem(Project prj) {
-        }
-    }
-
-    public static class ImportantFilesChildren extends Children.Keys<FileObject> {
-
-        private Project project;
-
-        public ImportantFilesChildren(Project project) {
-            this.project = project;
-        }
-
-        protected List<FileObject> createKeys() {
-//            package="com.mycompany.mygame"
-            FileObject manifest = project.getProjectDirectory().getFileObject("mobile/AndroidManifest.xml");
-            String mainActivity = "mobile/src";
-            if (manifest != null) {
-                InputStream in = null;
-                try {
-                    in = manifest.getInputStream();
-                    Document configuration = XMLUtil.parse(new InputSource(in), false, false, null, null);
-                    mainActivity = "mobile/src/" + configuration.getDocumentElement().getAttribute("package").replaceAll("\\.", "/") + "/MainActivity.java";
-                    in.close();
-                } catch (Exception ex) {
-                    Exceptions.printStackTrace(ex);
-                } finally {
-                }
-            }
-            ArrayList<FileObject> list = new ArrayList<FileObject>();
-            addFileObject(project.getProjectDirectory().getFileObject(mainActivity), list);
-            addFileObject(project.getProjectDirectory().getFileObject("mobile/AndroidManifest.xml"), list);
-            addFileObject(project.getProjectDirectory().getFileObject("mobile/build.properties"), list);
-            return list;
-        }
-
-        private void addFileObject(FileObject file, List<FileObject> list) {
-            if (file != null) {
-                list.add(file);
-            }
-        }
-
-        @Override
-        protected void addNotify() {
-            super.addNotify();
-            setKeys(createKeys());
-        }
-
-        @Override
-        protected Node[] createNodes(FileObject key) {
-            try {
-                DataObject obj = DataObject.find(key);
-                return new Node[]{obj.getNodeDelegate()};
-            } catch (DataObjectNotFoundException ex) {
-                Exceptions.printStackTrace(ex);
-            }
-            return new Node[]{};
-        }
-    }
-}

+ 0 - 17
jme3-android/src/com/jme3/gde/android/layer.xml

@@ -1,23 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.2//EN" "http://www.netbeans.org/dtds/filesystem-1_2.dtd">
 <filesystem>
-    <folder name="Projects">
-
-        <folder name="org-netbeans-modules-java-j2seproject">
-
-            <folder name="Lookup">
-                <file name="com.jme3.gde.android.ImportantFilesNode$LookupProviderImpl.instance"/>
-            </folder>
-
-            <folder name="Nodes">
-                <file name="com.jme3.gde.android.ImportantFilesNode$ImportantFilesNodeFactoryImpl.instance">
-                    <attr name="position" intvalue="210"/>
-                </file>
-            </folder>
-
-        </folder>
-
-    </folder>
     <folder name="Services">
         <folder name="AutoupdateType">
             <file name="com_jme3_gde_android_update_center.instance">

+ 2 - 0
jme3-core/nbproject/project.xml

@@ -285,7 +285,9 @@
                 <package>com.jme3.gde.core.filters.actions</package>
                 <package>com.jme3.gde.core.filters.impl</package>
                 <package>com.jme3.gde.core.filters.impl.bloom</package>
+                <package>com.jme3.gde.core.importantfiles</package>
                 <package>com.jme3.gde.core.j2seproject</package>
+                <package>com.jme3.gde.core.options</package>
                 <package>com.jme3.gde.core.properties</package>
                 <package>com.jme3.gde.core.properties.preview</package>
                 <package>com.jme3.gde.core.scene</package>

+ 43 - 0
jme3-core/src/com/jme3/gde/core/importantfiles/ImportantFiles.java

@@ -0,0 +1,43 @@
+/*
+ *  Copyright (c) 2009-2010 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.core.importantfiles;
+
+import org.netbeans.api.project.Project;
+import org.openide.filesystems.FileObject;
+
+/**
+ *
+ * @author normenhansen
+ */
+public interface ImportantFiles {
+    public FileObject[] getFiles(Project proj);
+}

+ 171 - 0
jme3-core/src/com/jme3/gde/core/importantfiles/ImportantFilesNode.java

@@ -0,0 +1,171 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.jme3.gde.core.importantfiles;
+
+import java.awt.Image;
+import java.util.ArrayList;
+import java.util.List;
+import org.netbeans.api.project.Project;
+import org.netbeans.spi.project.ui.support.NodeFactory;
+import org.netbeans.spi.project.ui.support.NodeFactorySupport;
+import org.netbeans.spi.project.ui.support.NodeList;
+import org.openide.filesystems.FileAttributeEvent;
+import org.openide.filesystems.FileChangeListener;
+import org.openide.filesystems.FileEvent;
+import org.openide.filesystems.FileObject;
+import org.openide.filesystems.FileRenameEvent;
+import org.openide.loaders.DataObject;
+import org.openide.loaders.DataObjectNotFoundException;
+import org.openide.nodes.AbstractNode;
+import org.openide.nodes.Children;
+import org.openide.nodes.Node;
+import org.openide.util.Exceptions;
+import org.openide.util.ImageUtilities;
+import org.openide.util.Lookup;
+
+/**
+ *
+ * @author normenhansen
+ */
+public class ImportantFilesNode extends AbstractNode implements FileChangeListener{
+
+    private static Image smallImage =
+            ImageUtilities.loadImage("com/jme3/gde/core/importantfiles/important.gif");
+
+    public ImportantFilesNode(Project proj) throws DataObjectNotFoundException {
+        super(new ImportantFilesChildren(proj));
+        proj.getProjectDirectory().addRecursiveListener(this);
+    }
+
+    @Override
+    public String getDisplayName() {
+        return "Configuration Files";
+    }
+
+    @Override
+    public Image getIcon(int type) {
+        return smallImage;
+    }
+
+    @Override
+    public Image getOpenedIcon(int type) {
+        return smallImage;
+    }
+
+    public void fileFolderCreated(FileEvent fe) {
+        java.awt.EventQueue.invokeLater(new Runnable() {
+
+            public void run() {
+                ((ImportantFilesChildren)getChildren()).addNotify();
+            }
+        });
+    }
+
+    public void fileDataCreated(FileEvent fe) {
+        java.awt.EventQueue.invokeLater(new Runnable() {
+
+            public void run() {
+                ((ImportantFilesChildren)getChildren()).addNotify();
+            }
+        });
+    }
+
+    public void fileChanged(FileEvent fe) {
+    }
+
+    public void fileDeleted(FileEvent fe) {
+        java.awt.EventQueue.invokeLater(new Runnable() {
+
+            public void run() {
+                ((ImportantFilesChildren)getChildren()).addNotify();
+            }
+        });
+    }
+
+    public void fileRenamed(FileRenameEvent fre) {
+        java.awt.EventQueue.invokeLater(new Runnable() {
+
+            public void run() {
+                ((ImportantFilesChildren)getChildren()).addNotify();
+            }
+        });
+    }
+
+    public void fileAttributeChanged(FileAttributeEvent fae) {
+    }
+
+//    public static class LookupProviderImpl implements LookupProvider {
+//
+//        public Lookup createAdditionalLookup(Lookup lookup) {
+//
+//            Project prj = lookup.lookup(Project.class);
+//
+//            return Lookups.fixed(new ImportantFilesLookupItem(prj));
+//        }
+//    }
+
+    public static class ImportantFilesNodeFactoryImpl implements NodeFactory {
+
+        public NodeList createNodes(Project project) {
+
+//            ImportantFilesLookupItem item = project.getLookup().lookup(ImportantFilesLookupItem.class);
+//            if (item != null) {
+                try {
+                    ImportantFilesNode nd = new ImportantFilesNode(project);
+                    return NodeFactorySupport.fixedNodeList(nd);
+                } catch (DataObjectNotFoundException ex) {
+                    Exceptions.printStackTrace(ex);
+                }
+//            }
+
+            return NodeFactorySupport.fixedNodeList();
+        }
+    }
+
+//    public static class ImportantFilesLookupItem {
+//
+//        public ImportantFilesLookupItem(Project prj) {
+//        }
+//    }
+
+    public static class ImportantFilesChildren extends Children.Keys<FileObject[]> {
+
+        private Project project;
+
+        public ImportantFilesChildren(Project project) {
+            this.project = project;
+        }
+
+        protected List<FileObject[]> createKeys() {
+            ArrayList<FileObject[]> list = new ArrayList<FileObject[]>();
+            for (ImportantFiles di : Lookup.getDefault().lookupAll(ImportantFiles.class)) {
+                FileObject[] nodes = di.getFiles(project);
+                list.add(nodes);
+            }
+            return list;
+        }
+
+        @Override
+        protected void addNotify() {
+            super.addNotify();
+            setKeys(createKeys());
+        }
+
+        @Override
+        protected Node[] createNodes(FileObject[] key) {
+            Node[] nodes= new Node[key.length];
+            for (int i = 0; i < key.length; i++) {
+                FileObject fileObject = key[i];
+                try {
+                    nodes[i] = DataObject.find(fileObject).getNodeDelegate();
+                } catch (DataObjectNotFoundException ex) {
+                    nodes[i] = Node.EMPTY;
+                    Exceptions.printStackTrace(ex);
+                }
+            }
+            return nodes;
+        }
+    }
+}

BIN
jme3-core/src/com/jme3/gde/core/importantfiles/important.gif


+ 27 - 0
jme3-core/src/com/jme3/gde/core/j2seproject/J2seImportantFiles.java

@@ -0,0 +1,27 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.jme3.gde.core.j2seproject;
+
+import com.jme3.gde.core.importantfiles.ImportantFiles;
+import java.util.ArrayList;
+import org.netbeans.api.project.Project;
+import org.openide.filesystems.FileObject;
+
+/**
+ *
+ * @author normenhansen
+ */
[email protected](service = ImportantFiles.class)
+public class J2seImportantFiles implements ImportantFiles{
+
+    @Override
+    public FileObject[] getFiles(Project project) {
+        ArrayList<FileObject> list = new ArrayList<FileObject>();
+//        list.add(project.getProjectDirectory().getFileObject("nbproject/project.properties"));
+        list.add(project.getProjectDirectory().getFileObject("build.xml"));
+        return list.toArray(new FileObject[list.size()]);
+    }
+    
+}

+ 3 - 0
jme3-core/src/com/jme3/gde/core/layer.xml

@@ -129,6 +129,9 @@
                 <file name="com.jme3.gde.core.assets.ProjectAssetsNodeFactory.instance">
                     <attr name="position" intvalue="10"/>
                 </file>
+                <file name="com.jme3.gde.core.importantfiles.ImportantFilesNode$ImportantFilesNodeFactoryImpl.instance">
+                    <attr name="position" intvalue="10000"/>
+                </file>
             </folder>
         </folder>
         <folder name="org-netbeans-modules-maven">