You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by ne...@apache.org on 2021/08/23 09:39:15 UTC
[netbeans] branch delivery updated: Exposing Frontend UI Pages for
the Java Frontend Gradle project
This is an automated email from the ASF dual-hosted git repository.
neilcsmith 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 b85924e Exposing Frontend UI Pages for the Java Frontend Gradle project
new be7b45a Merge pull request #3096 from JaroslavTulach/jtulach/FrontendUI
b85924e is described below
commit b85924eb43f70e489daef131d6433f5bdefa33fd
Author: Jaroslav Tulach <ja...@apidesign.org>
AuthorDate: Sun Aug 8 15:01:11 2021 +0200
Exposing Frontend UI Pages for the Java Frontend Gradle project
---
.../gradle/htmlui/HtmlJavaPagesNodeFactory.java | 110 +++++++++++++++++++++
.../modules/gradle/htmlui/CreateArchetypeTest.java | 38 ++++++-
2 files changed, 145 insertions(+), 3 deletions(-)
diff --git a/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/HtmlJavaPagesNodeFactory.java b/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/HtmlJavaPagesNodeFactory.java
new file mode 100644
index 0000000..a139619
--- /dev/null
+++ b/java/gradle.htmlui/src/org/netbeans/modules/gradle/htmlui/HtmlJavaPagesNodeFactory.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.netbeans.modules.gradle.htmlui;
+
+import java.awt.Image;
+import org.netbeans.modules.gradle.api.NbGradleProject;
+import org.netbeans.modules.gradle.spi.nodes.AbstractGradleNodeList;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.Collections;
+import java.util.List;
+import javax.swing.event.ChangeListener;
+import org.netbeans.api.project.Project;
+import org.netbeans.spi.project.ui.support.NodeFactory;
+import org.netbeans.spi.project.ui.support.NodeList;
+import org.openide.filesystems.FileObject;
+import org.openide.loaders.DataFolder;
+import org.openide.nodes.FilterNode;
+import org.openide.nodes.Node;
+import org.openide.util.ImageUtilities;
+import org.openide.util.NbBundle;
+
+@NbBundle.Messages({
+ "MSG_HtmlJavaPages=Frontend UI Pages"
+})
+@NodeFactory.Registration(projectType = NbGradleProject.GRADLE_PROJECT_TYPE, position = 77)
+public final class HtmlJavaPagesNodeFactory implements NodeFactory {
+
+ @Override
+ public NodeList<?> createNodes(Project p) {
+ return new HtmlJavaPagesList(p);
+ }
+
+ private static class HtmlJavaPagesList extends AbstractGradleNodeList<FileObject> implements PropertyChangeListener {
+
+ final Project project;
+
+ HtmlJavaPagesList(Project project) {
+ this.project = project;
+ }
+
+ @Override
+ public List<FileObject> keys() {
+ FileObject pages = project.getProjectDirectory().getFileObject("src/main/webapp/pages"); // NOI18N
+ return pages != null ? Collections.singletonList(pages) : Collections.<FileObject>emptyList();
+ }
+
+ @Override
+ public Node node(FileObject key) {
+ DataFolder df = DataFolder.findFolder(key);
+ FilterNode fn = new FilterNode(df.getNodeDelegate().cloneNode()) {
+ @Override
+ public Image getIcon(int type) {
+ return ImageUtilities.loadImage("org/netbeans/modules/gradle/htmlui/DukeHTML.png"); // NOI18N
+ }
+
+ @Override
+ public Image getOpenedIcon(int type) {
+ return getIcon(type);
+ }
+
+ @Override
+ public String getName() {
+ return "pages"; // NOI18N
+ }
+
+ @Override
+ public String getDisplayName() {
+ return Bundle.MSG_HtmlJavaPages();
+ }
+ };
+ return fn;
+ }
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ if (NbGradleProject.PROP_PROJECT_INFO.equals(evt.getPropertyName())) {
+ fireChange();
+ }
+ }
+
+ @Override
+ public void removeChangeListener(ChangeListener list) {
+ NbGradleProject.removePropertyChangeListener(project, this);
+ }
+
+ @Override
+ public void addChangeListener(ChangeListener list) {
+ NbGradleProject.addPropertyChangeListener(project, this);
+ }
+
+ }
+}
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 65a1c6d..87433d3 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
@@ -36,10 +36,13 @@ 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.ActionProgress;
import org.netbeans.spi.project.ActionProvider;
+import org.netbeans.spi.project.ui.LogicalViewProvider;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.filesystems.LocalFileSystem;
+import org.openide.nodes.Node;
import org.openide.util.lookup.Lookups;
public class CreateArchetypeTest extends NbTestCase {
@@ -118,6 +121,7 @@ public class CreateArchetypeTest extends NbTestCase {
assertTrue(Arrays.asList(actions.getSupportedActions()).contains(ActionProvider.COMMAND_BUILD));
actions.isActionEnabled(ActionProvider.COMMAND_BUILD, mainPrj.getLookup());
+ assertLogicalView(mainPrj);
invokeCommand(actions, ActionProvider.COMMAND_BUILD, mainPrj);
assertFile("JAR created", dest, "build", "libs", "dest-1.0-SNAPSHOT.jar");
@@ -139,13 +143,41 @@ public class CreateArchetypeTest extends NbTestCase {
assertFile("Main script created", dest, "web", "build", "web", "bck2brwsr.js");
}
+ private void assertLogicalView(Project mainPrj) {
+ LogicalViewProvider lvp = mainPrj.getLookup().lookup(LogicalViewProvider.class);
+ assertNotNull("Logical view found", lvp);
+ Node logicalView = lvp.createLogicalView();
+ final Node[] children = logicalView.getChildren().getNodes(true);
+ for (Node ch : children) {
+ if (ch.getName().equals("pages") && "Frontend UI Pages".equals(ch.getDisplayName())) {
+ FileObject pages = ch.getLookup().lookup(FileObject.class);
+ assertNotNull("Pages node provides FileObject: " + ch, pages);
+ assertNotNull("There is index.html", pages.getFileObject("index.html"));
+ return;
+ }
+ }
+ fail("Cannot find Frontend Pages in " + Arrays.toString(children));
+ }
+
protected void invokeCommand(ActionProvider actions, String cmd, Project prj) throws IllegalArgumentException, InterruptedException {
CountDownLatch waiter = new CountDownLatch(1);
- AfterBuildActionHook notifier = (action, context, res, out) -> {
- waiter.countDown();
+ boolean[] status = { false, false };
+ ActionProgress ap = new ActionProgress() {
+ @Override
+ protected void started() {
+ status[0] = true;
+ }
+
+ @Override
+ public void finished(boolean success) {
+ status[1] = success;
+ waiter.countDown();
+ }
};
- actions.invokeAction(cmd, Lookups.fixed(prj, notifier));
+ actions.invokeAction(cmd, Lookups.fixed(prj, ap));
+ assertTrue("ActionProgress was started", status[0]);
waiter.await();
+ assertTrue("ActionProgress was successfully finished", status[1]);
}
private AssertContent assertFile(String msg, FileObject root, String... path) throws IOException {
---------------------------------------------------------------------
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