diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6e214e4..fca6f23 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,7 +9,7 @@ jobs: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v4 - - uses: s4u/setup-maven-action@v1.14.0 + - uses: s4u/setup-maven-action@v1.18.0 with: java-version: '17' java-distribution: temurin diff --git a/application/META-INF/MANIFEST.MF b/application/META-INF/MANIFEST.MF index 2039bb9..323fcde 100644 --- a/application/META-INF/MANIFEST.MF +++ b/application/META-INF/MANIFEST.MF @@ -2,19 +2,20 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: JSON node documentation generator Bundle-SymbolicName: de.philippkatz.knime.jsondocgen.application;singleton:=true -Bundle-Version: 1.14.2.qualifier +Bundle-Version: 1.15.0.qualifier Bundle-Vendor: Philipp Katz; Selenium Nodes Bundle-RequiredExecutionEnvironment: JavaSE-17 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.6.0,5.0.0)", - org.knime.workbench.core;bundle-version="[5.3.0,6.0.0)", - org.knime.workbench.repository;bundle-version="[5.3.0,6.0.0)", + org.knime.workbench.core;bundle-version="[5.5.0,6.0.0)", + org.knime.workbench.repository;bundle-version="[5.5.0,6.0.0)", org.eclipse.equinox.p2.metadata;bundle-version="[2.3.100,3.0.0)", org.eclipse.equinox.p2.core;bundle-version="[2.4.100,3.0.0)", org.eclipse.equinox.p2.engine;bundle-version="[2.4.100,3.0.0)", - org.knime.product;bundle-version="[5.3.0,6.0.0)", + org.knime.product;bundle-version="[5.5.0,6.0.0)", org.apache.log4j;bundle-version="[1.2.0,2.0.0)", com.google.gson;bundle-version="[2.8.6,3.0.0)", - org.knime.workflow.migration;bundle-version="[5.3.0,6.0.0)" + org.knime.workflow.migration;bundle-version="[5.5.0,6.0.0)", + org.knime.core.ui;bundle-version="[5.5.0,6.0.0)" Bundle-ClassPath: ., lib-download/mockito-core.jar, lib-download/byte-buddy.jar, diff --git a/application/pom.xml b/application/pom.xml index d02960e..2f9989d 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -4,13 +4,13 @@ 4.0.0 de.philippkatz.knime.jsondocgen.application - 1.14.2-SNAPSHOT + 1.15.0-SNAPSHOT eclipse-plugin de.philippkatz.knime.jsondocgen de.philippkatz.knime.jsondocgen - 1.14.2-SNAPSHOT + 1.15.0-SNAPSHOT diff --git a/application/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGenerator.java b/application/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGenerator.java index 1473500..c8b1f37 100644 --- a/application/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGenerator.java +++ b/application/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGenerator.java @@ -88,6 +88,8 @@ import org.knime.core.node.port.PortTypeRegistry; import org.knime.core.node.streamable.PartitionInfo; import org.knime.core.util.IEarlyStartup; +import org.knime.core.webui.node.dialog.NodeDialogFactory; +import org.knime.core.webui.node.dialog.kai.KaiNodeInterfaceFactory; import org.knime.workbench.repository.RepositoryManager; import org.knime.workbench.repository.model.Category; import org.knime.workbench.repository.model.IContainerObject; @@ -421,6 +423,7 @@ private static void processPorts(Collection> portObj * @return true, if the element was added to the documentation, false if it has * been skipped */ + @SuppressWarnings({ "restriction", "unchecked" }) private boolean generate(final File directory, final IRepositoryObject current, final IRepositoryObject parent, CategoryDocBuilder parentCategory) throws TransformerException, Exception { @@ -474,6 +477,15 @@ private boolean generate(final File directory, final IRepositoryObject current, } catch (Throwable t) { LOGGER.warn(String.format("Could not create NodeModel for %s", factory.getClass().getName()), t); } + + Node node = new Node((NodeFactory) factory); + var nodeDescription = node.invokeGetNodeDescription(); + builder.setKeywords(Arrays.asList(nodeDescription.getKeywords())); + builder.setSinceVersion(nodeDescription.getSinceVersion().map(v -> v.toString()).orElse(null)); + + builder.setHasModernDialog(hasModernDialog(factory)); + // since KNIME 5.5; https://github.com/knime/knime-core-ui/commit/8769e99ab4df0a435fb90936d664fdc6c6ac2b6d + builder.setHasKaiInterface(factory instanceof KaiNodeInterfaceFactory); if (deprecated) { // there are two locations, where nodes can be set to deprecated: @@ -717,8 +729,14 @@ private static String getPath(final IRepositoryObject object) { return ""; } } - + /* package */ static enum PortDirection { In, Out } + + @SuppressWarnings("restriction") + static boolean hasModernDialog(NodeFactory nodeFactory) { + // supported since KNIME 4.5 + return nodeFactory instanceof NodeDialogFactory nodeDialogFactory && nodeDialogFactory.hasNodeDialog(); + } } diff --git a/application/src/de/philippkatz/knime/jsondocgen/docs/NodeDoc.java b/application/src/de/philippkatz/knime/jsondocgen/docs/NodeDoc.java index b12dabd..333ff4d 100644 --- a/application/src/de/philippkatz/knime/jsondocgen/docs/NodeDoc.java +++ b/application/src/de/philippkatz/knime/jsondocgen/docs/NodeDoc.java @@ -27,6 +27,14 @@ public static final class NodeDocBuilder extends AbstractDocBuilder { private List dynamicInPorts; /** @since 1.12 -- added with KNIME 4.2 */ private List dynamicOutPorts; + /** @since v1.15 */ + private boolean hasModernDialog; + /** @since v1.15 */ + private boolean hasKaiInterface; + /** @since v1.15 */ + private List keywords; + /** @since v1.15 */ + private String sinceVersion; public NodeDocBuilder setIntro(String intro) { this.intro = intro; return this; @@ -103,8 +111,28 @@ public NodeDocBuilder setDynamicOutPorts(List dynamicOutPorts) this.dynamicOutPorts = dynamicOutPorts; return this; } + /** @since v1.15 */ + public NodeDocBuilder setHasModernDialog(boolean hasModernDialog) { + this.hasModernDialog = hasModernDialog; + return this; + } + /** @since v1.15 */ + public NodeDocBuilder setHasKaiInterface(boolean hasKaiInterface) { + this.hasKaiInterface = hasKaiInterface; + return this; + } + /** @since v1.15 */ + public NodeDocBuilder setKeywords(List keywords) { + this.keywords = keywords; + return this; + } + /** @since v1.15 */ + public NodeDocBuilder setSinceVersion(String sinceVersion) { + this.sinceVersion = sinceVersion; + return this; + } } - + public static final class OptionTab { public final String name; public final String description; @@ -211,6 +239,14 @@ public DynamicPortGroup(Integer insertBefore, String name, String groupIdentifie public final List dynamicInPorts; /** @since v1.12 -- added with KNIME 4.2 */ public final List dynamicOutPorts; + /** @since v1.15 */ + public final boolean hasModernDialog; + /** @since v1.15 */ + public final boolean hasKaiInterface; + /** @since v1.15 */ + public final List keywords; + /** @since v1.15 */ + public final String sinceVersion; private NodeDoc(NodeDocBuilder builder) { super(builder); @@ -230,6 +266,10 @@ private NodeDoc(NodeDocBuilder builder) { links = builder.links; dynamicInPorts = copyOrNull(builder.dynamicInPorts); dynamicOutPorts = copyOrNull(builder.dynamicOutPorts); + hasModernDialog = builder.hasModernDialog; + hasKaiInterface = builder.hasKaiInterface; + keywords = copyOrNull(builder.keywords); + sinceVersion = builder.sinceVersion; } private static List convert(List ports) { diff --git a/feature/feature.xml b/feature/feature.xml index 83cc352..fe7a387 100644 --- a/feature/feature.xml +++ b/feature/feature.xml @@ -2,7 +2,7 @@ 4.0.0 de.philippkatz.knime.jsondocgen.feature - 1.14.2-SNAPSHOT + 1.15.0-SNAPSHOT eclipse-feature de.philippkatz.knime.jsondocgen de.philippkatz.knime.jsondocgen - 1.14.2-SNAPSHOT + 1.15.0-SNAPSHOT diff --git a/p2/pom.xml b/p2/pom.xml index df7280b..050f1a4 100644 --- a/p2/pom.xml +++ b/p2/pom.xml @@ -4,13 +4,13 @@ 4.0.0 de.philippkatz.knime.jsondocgen.p2 - 1.14.2-SNAPSHOT + 1.15.0-SNAPSHOT eclipse-repository de.philippkatz.knime.jsondocgen de.philippkatz.knime.jsondocgen - 1.14.2-SNAPSHOT + 1.15.0-SNAPSHOT diff --git a/pom.xml b/pom.xml index 34ee2cb..76cb764 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 de.philippkatz.knime.jsondocgen de.philippkatz.knime.jsondocgen - 1.14.2-SNAPSHOT + 1.15.0-SNAPSHOT pom @@ -39,7 +39,7 @@ de.philippkatz.knime.jsondocgen de.philippkatz.knime.jsondocgen.targetplatform - 1.14.2-SNAPSHOT + 1.15.0-SNAPSHOT diff --git a/readme.md b/readme.md index 6135d15..5a89d0f 100644 --- a/readme.md +++ b/readme.md @@ -30,6 +30,11 @@ https://download.nodepit.com/jsondocgen/5.0 https://download.nodepit.com/jsondocgen/5.1 https://download.nodepit.com/jsondocgen/5.2 https://download.nodepit.com/jsondocgen/5.3 +https://download.nodepit.com/jsondocgen/5.4 +https://download.nodepit.com/jsondocgen/5.5 +https://download.nodepit.com/jsondocgen/5.6 +https://download.nodepit.com/jsondocgen/5.7 +https://download.nodepit.com/jsondocgen/5.8 ``` Beside that, the `master` branch is available through the following software site: @@ -262,7 +267,7 @@ License - - - -Copyright (c) 2017 – 2024 Philipp Katz +Copyright (c) 2017 – 2025 Philipp Katz [1]: https://seleniumnodes.com [2]: https://github.com/NodePit/knime-json-node-doc-generator/issues diff --git a/targetplatform/de.philippkatz.knime.jsondocgen.targetplatform.target b/targetplatform/de.philippkatz.knime.jsondocgen.targetplatform.target index 6224813..b335733 100644 --- a/targetplatform/de.philippkatz.knime.jsondocgen.targetplatform.target +++ b/targetplatform/de.philippkatz.knime.jsondocgen.targetplatform.target @@ -1,5 +1,5 @@ - + @@ -17,7 +17,7 @@ - + diff --git a/targetplatform/pom.xml b/targetplatform/pom.xml index 1bc8d10..b0c1291 100644 --- a/targetplatform/pom.xml +++ b/targetplatform/pom.xml @@ -9,7 +9,7 @@ de.philippkatz.knime.jsondocgen de.philippkatz.knime.jsondocgen - 1.14.2-SNAPSHOT + 1.15.0-SNAPSHOT diff --git a/tests/META-INF/MANIFEST.MF b/tests/META-INF/MANIFEST.MF index e2cf4a1..cb0f54f 100644 --- a/tests/META-INF/MANIFEST.MF +++ b/tests/META-INF/MANIFEST.MF @@ -2,8 +2,8 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: JSON node documentation generator tests Bundle-SymbolicName: de.philippkatz.knime.jsondocgen.tests;singleton:=true -Bundle-Version: 1.14.2.qualifier +Bundle-Version: 1.15.0.qualifier Bundle-Vendor: Philipp Katz; Selenium Nodes Bundle-RequiredExecutionEnvironment: JavaSE-17 -Fragment-Host: de.philippkatz.knime.jsondocgen.application;bundle-version="1.14.2" +Fragment-Host: de.philippkatz.knime.jsondocgen.application;bundle-version="1.15.0" Require-Bundle: org.junit;bundle-version="4.12.0" diff --git a/tests/pom.xml b/tests/pom.xml index 99b3379..5bd8c13 100644 --- a/tests/pom.xml +++ b/tests/pom.xml @@ -4,13 +4,13 @@ 4.0.0 de.philippkatz.knime.jsondocgen.tests - 1.14.2-SNAPSHOT + 1.15.0-SNAPSHOT eclipse-test-plugin de.philippkatz.knime.jsondocgen de.philippkatz.knime.jsondocgen - 1.14.2-SNAPSHOT + 1.15.0-SNAPSHOT diff --git a/tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_ConfigurableNodeFactory.java b/tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_ConfigurableNodeFactory_Test.java similarity index 94% rename from tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_ConfigurableNodeFactory.java rename to tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_ConfigurableNodeFactory_Test.java index 25da93c..adb9247 100644 --- a/tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_ConfigurableNodeFactory.java +++ b/tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_ConfigurableNodeFactory_Test.java @@ -11,7 +11,7 @@ import org.knime.core.node.NodeView; import org.knime.core.node.context.NodeCreationConfiguration; -public class JsonNodeDocuGeneratorTest_ConfigurableNodeFactory { +public class JsonNodeDocuGeneratorTest_ConfigurableNodeFactory_Test { private static final class ConfigurableStubNodeFactory extends ConfigurableNodeFactory { diff --git a/tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_DynamicPorts.java b/tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_DynamicPorts_Test.java similarity index 97% rename from tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_DynamicPorts.java rename to tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_DynamicPorts_Test.java index bb4c29a..028c9d9 100644 --- a/tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_DynamicPorts.java +++ b/tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_DynamicPorts_Test.java @@ -16,7 +16,7 @@ import de.philippkatz.knime.jsondocgen.JsonNodeDocuGenerator.PortDirection; import de.philippkatz.knime.jsondocgen.docs.NodeDoc.DynamicPortGroup; -public class JsonNodeDocuGeneratorTest_DynamicPorts { +public class JsonNodeDocuGeneratorTest_DynamicPorts_Test { // https://github.com/knime/knime-core/blob/master/org.knime.core/src/eclipse/org/knime/core/node/NodeDescription41Proxy.java // https://github.com/knime/knime-excel/blob/master/org.knime.ext.poi2/src/org/knime/ext/poi2/node/write3/XLSWriter2NodeFactory.java diff --git a/tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_NewFlags_Test.java b/tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_NewFlags_Test.java new file mode 100644 index 0000000..c512113 --- /dev/null +++ b/tests/src/de/philippkatz/knime/jsondocgen/JsonNodeDocuGeneratorTest_NewFlags_Test.java @@ -0,0 +1,63 @@ +package de.philippkatz.knime.jsondocgen; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.knime.core.node.NodeDialogPane; +import org.knime.core.node.NodeFactory; +import org.knime.core.node.NodeModel; +import org.knime.core.node.NodeView; +import org.knime.core.webui.node.dialog.NodeDialog; +import org.knime.core.webui.node.dialog.NodeDialogFactory; +import org.knime.core.webui.node.dialog.kai.KaiNodeInterface; +import org.knime.core.webui.node.dialog.kai.KaiNodeInterfaceFactory; + +public class JsonNodeDocuGeneratorTest_NewFlags_Test { + + @SuppressWarnings("restriction") + private static class MyNodeFactory extends NodeFactory + implements KaiNodeInterfaceFactory, NodeDialogFactory { + + @Override + public NodeModel createNodeModel() { + return null; + } + + @Override + protected int getNrNodeViews() { + return 0; + } + + @Override + public NodeView createNodeView(int viewIndex, NodeModel nodeModel) { + return null; + } + + @Override + protected boolean hasDialog() { + return false; + } + + @Override + protected NodeDialogPane createNodeDialogPane() { + return null; + } + + @Override + public KaiNodeInterface createKaiNodeInterface() { + return null; + } + + @Override + public NodeDialog createNodeDialog() { + return null; + } + + } + + @Test + public void test() { + assertTrue(JsonNodeDocuGenerator.hasModernDialog(new MyNodeFactory())); + } + +}