You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by lk...@apache.org on 2020/10/25 06:34:16 UTC

[netbeans] branch delivery updated: [NETBEANS-4938] Fixed Gradle Java Frontend Application generation

This is an automated email from the ASF dual-hosted git repository.

lkishalmi pushed a commit to branch delivery
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/delivery by this push:
     new 444dd9c  [NETBEANS-4938] Fixed Gradle Java Frontend Application generation
444dd9c is described below

commit 444dd9c6c6aac5bfe9aabb4e52504908a40596e8
Author: Laszlo Kishalmi <la...@gmail.com>
AuthorDate: Sat Oct 24 18:41:47 2020 -0700

    [NETBEANS-4938] Fixed Gradle Java Frontend Application generation
---
 java/gradle.htmlui/nbproject/project.xml           |  9 +++
 .../modules/gradle/htmlui/GradleArchetype.java     | 75 +++++++++++++---------
 .../htmlui/HtmlJavaApplicationProjectWizard.java   | 51 ++++-----------
 .../modules/gradle/htmlui/resources/layer.xml      |  3 +
 .../modules/gradle/htmlui/CreateArchetypeTest.java | 11 +++-
 5 files changed, 77 insertions(+), 72 deletions(-)

diff --git a/java/gradle.htmlui/nbproject/project.xml b/java/gradle.htmlui/nbproject/project.xml
index c2e4e15..64ef014 100644
--- a/java/gradle.htmlui/nbproject/project.xml
+++ b/java/gradle.htmlui/nbproject/project.xml
@@ -59,6 +59,15 @@
                     </run-dependency>
                 </dependency>
                 <dependency>
+                    <code-name-base>org.netbeans.modules.projectuiapi</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <release-version>1</release-version>
+                        <specification-version>1.98</specification-version>
+                    </run-dependency>
+                </dependency>
+                <dependency>
                     <code-name-base>org.openide.dialogs</code-name-base>
                     <build-prerequisite/>
                     <compile-dependency/>
diff --git a/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/GradleArchetype.java b/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/GradleArchetype.java
index 10f33fe..8a590f1 100644
--- a/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/GradleArchetype.java
+++ b/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/GradleArchetype.java
@@ -18,59 +18,74 @@
  */
 package org.netbeans.modules.gradle.htmlui;
 
-import java.io.IOException;
+import java.io.File;
 import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
-import org.netbeans.api.project.ProjectManager;
-import org.netbeans.api.templates.FileBuilder;
-import org.netbeans.api.templates.FileBuilder.Mode;
+import org.netbeans.modules.gradle.spi.newproject.TemplateOperation;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
 import org.openide.util.MapFormat;
 
 public final class GradleArchetype {
     private final FileObject templates;
-    private final FileObject projectFo;
+    private final File rootDir;
     private final Map<String, Object> params;
 
-    public GradleArchetype(FileObject templates, FileObject projectFo, Map<String, Object> params) {
+    public GradleArchetype(FileObject templates, File rootDir, Map<String, Object> params) {
         this.templates = templates;
-        this.projectFo = projectFo;
+        this.rootDir = rootDir;
         this.params = params;
     }
 
-    public final void copyTemplates() throws IOException {
+    public final void copyTemplates(TemplateOperation ops) {
         MapFormat mf = new MapFormat(params);
         mf.setLeftBrace("${"); // NOI18N
         mf.setRightBrace("}"); // NOI18N
+        List<File> projectDirs = new LinkedList<>();
+        projectDirs.add(rootDir);
+        
         Enumeration<? extends FileObject> en = templates.getChildren(true);
         while (en.hasMoreElements()) {
             FileObject template = en.nextElement();
-            if (!template.isData()) {
-                continue;
-            }
-            String relativeParent = FileUtil.getRelativePath(templates, template.getParent());
-            Object packageAttr = template.getAttribute("package"); // NOI18N
-            if (packageAttr instanceof String) {
-                String packageName = mf.format(packageAttr).replace('.', '/');
-                relativeParent += "/" + packageName;
-            }
-            FileObject destinationFolder = FileUtil.createFolder(projectFo, relativeParent);
+            String relativePath = FileUtil.getRelativePath(templates, template);
+            if (template.isFolder()) {
+                File dir = new File(rootDir, relativePath);
+                ops.createFolder(dir);
+                Object projectAttr = template.getAttribute("project"); // NOI18N
+                if (Boolean.TRUE == projectAttr) {
+                    projectDirs.add(dir);
+                }
+            } else if (template.isData()) {
+                Object packageAttr = template.getAttribute("package"); // NOI18N
+                if (packageAttr instanceof String) {
+                    String relativeParent = FileUtil.getRelativePath(templates, template.getParent());
+                    String packageName = mf.format(packageAttr);
+                    File sourceRoot = new File(rootDir, relativeParent);
+                    ops.createPackage(sourceRoot, packageName);
+                    File packageDir = new File(sourceRoot, packageName.replace('.', '/'));
 
-            FileObject previous = destinationFolder.getFileObject(template.getNameExt());
-            if (previous != null) {
-                previous.delete();
+                    Map<String, Object> pparams = new HashMap<>(params);
+                    pparams.put("package", packageName); //NOI18N
+                    copyDataTemplate(ops, template, new File(packageDir, template.getNameExt()), pparams);
+                } else {
+                    copyDataTemplate(ops, template, new File(rootDir, relativePath), params);
+                }
             }
+        }
+        for (File projectDir : projectDirs) {
+            ops.addProjectPreload(projectDir);
+        }
+    }
 
-            FileBuilder fb = new FileBuilder(template, destinationFolder);
-            fb.withParameters(params);
-            fb.defaultMode(Mode.COPY);
-
-            FileObject copied = fb.build().iterator().next();
-
-            assert copied != null && copied.getNameExt().equals(template.getNameExt()) : "Created " + copied;
+    private static void copyDataTemplate(TemplateOperation ops, FileObject template, File target, Map<String, Object> params) {
+        Object importantAttr = template.getAttribute("important");
+        if (importantAttr == Boolean.TRUE) {
+            ops.openFromTemplate(template.getPath(), target, params);
+        } else {
+            ops.copyFromTemplate(template.getPath(), target, params);
         }
-        ProjectManager.getDefault().clearNonProjectCache();
-        assert ProjectManager.getDefault().findProject(projectFo) != null : "Project found for " + projectFo;
     }
 }
diff --git a/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/HtmlJavaApplicationProjectWizard.java b/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/HtmlJavaApplicationProjectWizard.java
index eead7ec..4fae126 100644
--- a/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/HtmlJavaApplicationProjectWizard.java
+++ b/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/HtmlJavaApplicationProjectWizard.java
@@ -22,18 +22,14 @@ package org.netbeans.modules.gradle.htmlui;
 import org.netbeans.modules.gradle.spi.newproject.SimpleGradleWizardIterator;
 import org.netbeans.modules.gradle.spi.newproject.TemplateOperation;
 import java.io.File;
-import java.io.IOException;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.netbeans.api.project.Project;
-import org.netbeans.modules.gradle.api.NbGradleProject;
+import org.netbeans.spi.project.ui.support.CommonProjectActions;
 import org.openide.WizardDescriptor;
 import org.openide.filesystems.FileObject;
-import org.openide.filesystems.FileUtil;
 import org.openide.loaders.TemplateWizard;
-import org.openide.util.Exceptions;
 import org.openide.util.NbBundle.Messages;
 
 @Messages("template.htmlUIProject=Java Frontend Application")
@@ -57,47 +53,24 @@ public class HtmlJavaApplicationProjectWizard extends SimpleGradleWizardIterator
 
     @Override
     protected void collectOperations(TemplateOperation ops, Map<String, Object> params) {
-        super.collectOperations(ops, params);
-        String packageBase = (String) params.get(PROP_PACKAGE_BASE);
-        String mainClassName = (String) params.get("mainClassName");
+        String name = (String) params.get(PROP_NAME);
+        File loc = (File) params.get(CommonProjectActions.PROJECT_PARENT_FOLDER);
+
+        File rootDir = new File(loc, name);
+        params.put(PROP_PROJECT_ROOT, rootDir);
         
-        File projectDir = (File) params.get("projectDir");
+        ops.createFolder(rootDir);
 
-        File mainJava = (File) params.get(PROP_MAIN_JAVA_DIR);
-        File packageDir = new File(mainJava, packageBase.replace('.', '/'));
-        Map<String, Object> mainParams = new HashMap<>(params);
-        mainParams.put("project", new DummyProject());
-        mainParams.put("package", packageBase); //NOI18N
-        mainParams.put("name", mainClassName); //NOI18N
 
         FileObject folder = ((TemplateWizard)this.getData()).getTemplate().getPrimaryFile();
-        ops.addConfigureProject(projectDir, new CopyTree(folder, projectDir, mainParams));
-    }
-
-    private static class CopyTree implements TemplateOperation.ProjectConfigurator {
-        private final FileObject templateFolder;
-        private final File projectDir;
-        private final Map<String, Object> params;
+        GradleArchetype ga = new GradleArchetype(folder, rootDir, params);
+        ga.copyTemplates(ops);
 
-        private CopyTree(FileObject templateFolder, File projectDir, Map<String, Object> params) {
-            this.projectDir = projectDir;
-            this.params = params;
-            this.templateFolder = templateFolder;
+        Boolean initWrapper = (Boolean) params.get(PROP_INIT_WRAPPER);
+        if ((initWrapper != null) && initWrapper) {
+            ops.addWrapperInit(rootDir);
         }
 
-        @Override
-        public void configure(Project project) {
-            FileObject projectFo = FileUtil.toFileObject(projectDir);
-
-            GradleArchetype ga = new GradleArchetype(templateFolder, projectFo, params);
-            try {
-                ga.copyTemplates();
-            } catch (IOException ex) {
-                Exceptions.printStackTrace(ex);
-            } finally {
-                NbGradleProject.fireGradleProjectReload(project);
-            }
-        }
     }
 
     public static class DummyProject {
diff --git a/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/resources/layer.xml b/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/resources/layer.xml
index 15a926c..719d483 100644
--- a/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/resources/layer.xml
+++ b/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/resources/layer.xml
@@ -57,6 +57,7 @@
                         </folder>
                     </folder>
                     <folder name="desktop">
+                        <attr boolvalue="true" name="project"/>
                         <file name="build.gradle" url="desktop_build.gradle.fmk">
                             <attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
                         </file>
@@ -72,6 +73,7 @@
                         </folder>
                     </folder>
                     <folder name="web">
+                        <attr boolvalue="true" name="project"/>
                         <file name="build.gradle" url="web_build.gradle.fmk">
                             <attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
                         </file>
@@ -91,6 +93,7 @@
                             <folder name="java">
                                 <file name="Demo.java" url="src_main_java_Demo.fmk">
                                     <attr name="package" stringvalue="${packageBase}"/>
+                                    <attr name="important" boolvalue="true"/>
                                     <attr name="javax.script.ScriptEngine" stringvalue="freemarker"/>
                                 </file>
                             </folder>
diff --git a/java/gradle.htmlui/test/unit/src/org/netbeans/modules/gradle/htmlui/CreateArchetypeTest.java b/java/gradle.htmlui/test/unit/src/org/netbeans/modules/gradle/htmlui/CreateArchetypeTest.java
index ae08903..65a1c6d 100644
--- a/java/gradle.htmlui/test/unit/src/org/netbeans/modules/gradle/htmlui/CreateArchetypeTest.java
+++ b/java/gradle.htmlui/test/unit/src/org/netbeans/modules/gradle/htmlui/CreateArchetypeTest.java
@@ -18,6 +18,7 @@
  */
 package org.netbeans.modules.gradle.htmlui;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.charset.StandardCharsets;
@@ -34,6 +35,7 @@ import org.netbeans.api.project.ui.OpenProjects;
 import org.netbeans.junit.NbModuleSuite;
 import org.netbeans.junit.NbTestCase;
 import org.netbeans.modules.gradle.spi.actions.AfterBuildActionHook;
+import org.netbeans.modules.gradle.spi.newproject.TemplateOperation;
 import org.netbeans.spi.project.ActionProvider;
 import org.openide.filesystems.FileObject;
 import org.openide.filesystems.FileUtil;
@@ -70,12 +72,15 @@ public class CreateArchetypeTest extends NbTestCase {
         FileObject dir = FileUtil.getConfigFile("Templates/Project/Gradle/org-netbeans-modules-gradle-htmlui-HtmlJavaApplicationProjectWizard");
         assertNotNull("Templates directory found", dir);
 
-        FileObject dest = FileUtil.createFolder(workFo, "sample/dest");
+        File rootDir = new File(getWorkDir(), "sample/dest");
 
         Map<String,Object> map = new HashMap<>();
         map.put("packageBase", "my.pkg.x");
-        GradleArchetype ga = new GradleArchetype(dir, dest, map);
-        ga.copyTemplates();
+        TemplateOperation ops = new TemplateOperation();
+        GradleArchetype ga = new GradleArchetype(dir, rootDir, map);
+        ga.copyTemplates(ops);
+        ops.run();
+        FileObject dest = FileUtil.toFileObject(rootDir);
         assertFile("Build script found", dest, "build.gradle");
         assertFile("Main class found", dest, "src", "main", "java", "my", "pkg", "x", "Demo.java").
                 assertPackage("my.pkg.x").


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists