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