use of org.knime.core.webui.page.Page in project knime-core by knime.
the class NodeViewEntTest method testNodeViewEnt.
/**
* Tests {@link NodeViewEnt#NodeViewEnt(NativeNodeContainer)}.
*
* @throws IOException
*/
@Test
public void testNodeViewEnt() throws IOException {
var wfm = WorkflowManagerUtil.createEmptyWorkflow();
NativeNodeContainer nncWithoutNodeView = WorkflowManagerUtil.createAndAddNode(wfm, new VirtualSubNodeInputNodeFactory(null, new PortType[0]));
Assert.assertThrows(IllegalArgumentException.class, () -> new NodeViewEnt(nncWithoutNodeView));
Function<NodeViewNodeModel, NodeView> nodeViewCreator = m -> {
Page p = Page.builder(() -> "blub", "index.html").build();
return NodeViewTest.createNodeView(p, new TextInitialDataService() {
@Override
public String getInitialData() {
return "dummy initial data";
}
}, null, null);
};
NativeNodeContainer nnc = WorkflowManagerUtil.createAndAddNode(wfm, new NodeViewNodeFactory(nodeViewCreator));
wfm.executeAllAndWaitUntilDone();
nnc.setNodeMessage(NodeMessage.newWarning("node message"));
nnc.getNodeAnnotation().getData().setText("node annotation");
var ent = new NodeViewEnt(nnc, null);
assertThat(ent.getProjectId(), startsWith("workflow"));
assertThat(ent.getWorkflowId(), is("root"));
assertThat(ent.getNodeId(), is("root:2"));
assertThat(ent.getInitialData(), is("dummy initial data"));
assertThat(ent.getInitialSelection(), is(nullValue()));
var resourceInfo = ent.getResourceInfo();
assertThat(resourceInfo.getUrl(), endsWith("index.html"));
assertThat(resourceInfo.getPath(), is(nullValue()));
assertThat(resourceInfo.getType(), is(Resource.Type.HTML.toString()));
assertThat(resourceInfo.getId(), is(PageUtil.getPageId(nnc, false, false)));
var nodeInfo = ent.getNodeInfo();
assertThat(nodeInfo.getNodeName(), is("NodeView"));
assertThat(nodeInfo.getNodeAnnotation(), is("node annotation"));
assertThat(nodeInfo.getNodeState(), is("executed"));
assertThat(nodeInfo.getNodeWarnMessage(), is("node message"));
assertThat(nodeInfo.getNodeErrorMessage(), is(nullValue()));
// a node view as a 'component' without initial data
nodeViewCreator = m -> {
Page p = Page.builder(PageTest.BUNDLE_ID, "files", "component.umd.min.js").build();
return NodeViewTest.createNodeView(p);
};
nnc = WorkflowManagerUtil.createAndAddNode(wfm, new NodeViewNodeFactory(nodeViewCreator));
wfm.executeAllAndWaitUntilDone();
ent = new NodeViewEnt(nnc, null);
resourceInfo = ent.getResourceInfo();
assertThat(ent.getInitialData(), is(nullValue()));
assertThat(resourceInfo.getType(), is(Resource.Type.VUE_COMPONENT_LIB.toString()));
assertThat(resourceInfo.getUrl(), endsWith("component.umd.min.js"));
assertThat(resourceInfo.getPath(), is(nullValue()));
// test to create a node view entity while running headless (e.g. on the executor)
NativeNodeContainer nnc2 = nnc;
runOnExecutor(() -> {
var ent2 = new NodeViewEnt(nnc2, null);
assertThat(ent2.getResourceInfo().getPath(), endsWith("component.umd.min.js"));
assertThat(ent2.getResourceInfo().getUrl(), is(nullValue()));
});
WorkflowManagerUtil.disposeWorkflow(wfm);
}
use of org.knime.core.webui.page.Page in project knime-core by knime.
the class NodeViewManagerTest method testLoadViewSettingsOnViewCreation.
/**
* Makes sure that view settings are loaded from the node into the node view when created for the first time.
*
* @throws InvalidSettingsException
*/
@Test
public void testLoadViewSettingsOnViewCreation() throws InvalidSettingsException {
var page = Page.builder(() -> "test page content", "index.html").build();
AtomicReference<NodeSettingsRO> loadedNodeSettings = new AtomicReference<>();
NativeNodeContainer nc = createNodeWithNodeView(m_wfm, m -> new // NOSONAR
NodeView() {
@Override
public Optional<InitialDataService> createInitialDataService() {
return Optional.empty();
}
@Override
public Optional<DataService> createDataService() {
return Optional.empty();
}
@Override
public Optional<ApplyDataService> createApplyDataService() {
return Optional.empty();
}
@Override
public Page getPage() {
return page;
}
@Override
public void validateSettings(final NodeSettingsRO settings) throws InvalidSettingsException {
//
}
@Override
public void loadValidatedSettingsFrom(final NodeSettingsRO settings) {
loadedNodeSettings.set(settings);
}
});
// prepare view settings
var settings = new NodeSettings("node_settings");
m_wfm.saveNodeSettings(nc.getID(), settings);
var viewSettings = new NodeSettings("view");
viewSettings.addString("view setting key", "view setting value");
settings.addNodeSettings(viewSettings);
settings.addNodeSettings(new NodeSettings("model"));
m_wfm.loadNodeSettings(nc.getID(), settings);
// test
NodeViewManager.getInstance().getNodeView(nc);
assertTrue(loadedNodeSettings.get().containsKey("view setting key"));
}
use of org.knime.core.webui.page.Page in project knime-core by knime.
the class NodeViewManagerTest method testGetNodeViewPageUrl.
/**
* Tests {@link NodeViewManager#getNodeViewPageUrl(NativeNodeContainer)}.
*
* @throws URISyntaxException
* @throws IOException
*/
@Test
public void testGetNodeViewPageUrl() throws URISyntaxException, IOException {
var staticPage = Page.builder(BUNDLE_ID, "files", "page.html").addResourceFile("resource.html").build();
var dynamicPage = Page.builder(() -> "page content", "page.html").addResourceFromString(() -> "resource content", "resource.html").build();
NativeNodeContainer nnc = createNodeWithNodeView(m_wfm, m -> createNodeView(staticPage));
NativeNodeContainer nnc2 = createNodeWithNodeView(m_wfm, m -> createNodeView(staticPage));
NativeNodeContainer nnc3 = createNodeWithNodeView(m_wfm, m -> createNodeView(dynamicPage));
var nodeViewManager = NodeViewManager.getInstance();
String url = nodeViewManager.getNodeViewPageUrl(nnc).orElse("");
String url2 = nodeViewManager.getNodeViewPageUrl(nnc2).orElse(null);
String url3 = nodeViewManager.getNodeViewPageUrl(nnc3).orElse(null);
String url4 = nodeViewManager.getNodeViewPageUrl(nnc3).orElse(null);
assertThat("file url of static pages not expected to change", url, is(url2));
assertThat("file url of dynamic pages expected to change between node instances", url, is(not(url3)));
assertThat("file url of dynamic pages not expected for same node instance (without node state change)", url3, is(url4));
assertThat("resource files are expected to be written, too", new File(new URI(url.replace("page.html", "resource.html"))).exists(), is(true));
assertThat(new File(new URI(url)).exists(), is(true));
assertThat(new File(new URI(url3)).exists(), is(true));
String pageContent = Files.readLines(new File(new URI(url3)), StandardCharsets.UTF_8).get(0);
assertThat(pageContent, is("page content"));
// impose node state changes
m_wfm.executeAllAndWaitUntilDone();
var dynamicPage2 = Page.builder(() -> "new page content", "page.html").addResourceFromString(() -> "resource content", "resource.html").build();
nnc = createNodeWithNodeView(m_wfm, m -> createNodeView(dynamicPage2));
String url5 = nodeViewManager.getNodeViewPageUrl(nnc).orElse(null);
pageContent = Files.readLines(new File(new URI(url5)), StandardCharsets.UTF_8).get(0);
assertThat(pageContent, is("new page content"));
runOnExecutor(() -> assertThat(nodeViewManager.getNodeViewPageUrl(nnc2).isEmpty(), is(true)));
}
Aggregations