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

hansva pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-hop.git


The following commit(s) were added to refs/heads/master by this push:
     new 0a33f3f  HOP-1491 (#624)
0a33f3f is described below

commit 0a33f3f3cbad930ae9a8fae42fc56a1cdc1312de
Author: Hiromu Hota <[email protected]>
AuthorDate: Sun Feb 14 09:47:51 2021 -0800

    HOP-1491 (#624)
    
    * HOP-1491: RAP does not support MenuItem.setToolTipText()
    
    * Incorporate Hop Web's static resources
    
    * Incorporate assemblies/web that builds hop.war
    
    * Incorporate Dockerfile for Hop Web
    
    * RAP does not support ScrollBar.setIncrement()
    
    * Incorporate integration tests for Hop Web
    
    * Fixed relativePath
---
 assemblies/pom.xml                                 |   1 +
 .../static/src/main/resources/WEB-INF/web.xml      |  62 ++++++++++
 assemblies/static/src/main/resources/index.jsp     |  20 ++++
 assemblies/web/pom.xml                             | 130 +++++++++++++++++++++
 assemblies/web/src/assembly/assembly.xml           |  73 ++++++++++++
 docker/Dockerfile.web                              |  31 +++++
 {assemblies => integration-tests/hopweb}/pom.xml   |  33 +++---
 .../java/org/apache/hop/ui/hopgui/HopWebTest.java  | 109 +++++++++++++++++
 .../org/apache/hop/ui/core/gui/GuiMenuWidgets.java |   5 +-
 .../hopgui/file/pipeline/HopGuiPipelineGraph.java  |   7 +-
 .../hopgui/file/workflow/HopGuiWorkflowGraph.java  |   7 +-
 .../perspective/dataorch/HopGuiAbstractGraph.java  |   9 +-
 12 files changed, 465 insertions(+), 22 deletions(-)

diff --git a/assemblies/pom.xml b/assemblies/pom.xml
index 8bd2c95..7b3b247 100644
--- a/assemblies/pom.xml
+++ b/assemblies/pom.xml
@@ -43,6 +43,7 @@
     <module>static</module>
     <module>lib</module>
     <module>client</module>
+    <module>web</module>
     <module>core</module>
     <module>debug</module>
     <module>samples</module>
diff --git a/assemblies/static/src/main/resources/WEB-INF/web.xml 
b/assemblies/static/src/main/resources/WEB-INF/web.xml
new file mode 100644
index 0000000..541115c
--- /dev/null
+++ b/assemblies/static/src/main/resources/WEB-INF/web.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  ~
+  -->
+
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee";
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd";
+  version="2.4">
+
+  <context-param>
+    <param-name>org.eclipse.rap.applicationConfiguration</param-name>
+    <param-value>org.apache.hop.ui.hopgui.HopWeb</param-value>
+  </context-param>
+
+  <listener>
+    
<listener-class>org.apache.hop.ui.hopgui.HopWebServletContextListener</listener-class>
+  </listener>
+
+  <servlet>
+    <servlet-name>HopGui</servlet-name>
+    <servlet-class>org.eclipse.rap.rwt.engine.RWTServlet</servlet-class>
+  </servlet>
+
+  <servlet-mapping>
+    <servlet-name>HopGui</servlet-name>
+    <url-pattern>/ui</url-pattern>
+  </servlet-mapping>
+
+  <servlet>
+    <servlet-name>welcome</servlet-name>
+    <jsp-file>/docs/English/welcome/index.html</jsp-file>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>welcome</servlet-name>
+    <url-pattern>/docs/English/welcome/index.html</url-pattern>
+  </servlet-mapping>
+
+  <servlet>
+    <servlet-name>Server</servlet-name>
+    <servlet-class>org.apache.hop.www.HopServerServlet</servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>Server</servlet-name>
+    <url-pattern>/hop/*</url-pattern>
+  </servlet-mapping>
+
+</web-app>
diff --git a/assemblies/static/src/main/resources/index.jsp 
b/assemblies/static/src/main/resources/index.jsp
new file mode 100644
index 0000000..630dc8b
--- /dev/null
+++ b/assemblies/static/src/main/resources/index.jsp
@@ -0,0 +1,20 @@
+<%--
+    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.
+--%>
+
+<% response.sendRedirect("ui"); %>
diff --git a/assemblies/web/pom.xml b/assemblies/web/pom.xml
new file mode 100644
index 0000000..d5085ae
--- /dev/null
+++ b/assemblies/web/pom.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  ~
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>hop-assemblies-web</artifactId>
+  <packaging>pom</packaging>
+
+  <name>Hop Assemblies Web</name>
+
+  <parent>
+    <groupId>org.apache.hop</groupId>
+    <artifactId>hop-assemblies</artifactId>
+    <version>0.70-SNAPSHOT</version>
+  </parent>
+
+  <properties>
+    <rap.version>3.13.0</rap.version>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.hop</groupId>
+      <artifactId>hop-assemblies-libs</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+      <exclusions>
+        <exclusion>
+          <groupId>*</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hop</groupId>
+      <artifactId>hop-assemblies-plugins-dist</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+      <exclusions>
+        <exclusion>
+          <groupId>*</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hop</groupId>
+      <artifactId>hop-assemblies-static</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+      <exclusions>
+        <exclusion>
+          <groupId>*</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hop</groupId>
+      <artifactId>hop-assemblies-samples</artifactId>
+      <version>${project.version}</version>
+      <type>zip</type>
+      <exclusions>
+        <exclusion>
+          <groupId>*</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+
+    <!-- RAP fragment -->
+    <dependency>
+      <groupId>org.apache.hop</groupId>
+      <artifactId>hop-ui-rap</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <!-- RAP -->
+    <dependency>
+      <groupId>org.eclipse.rap</groupId>
+      <artifactId>org.eclipse.rap.rwt</artifactId>
+      <version>${rap.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.rap</groupId>
+      <artifactId>org.eclipse.rap.filedialog</artifactId>
+      <version>${rap.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.rap</groupId>
+      <artifactId>org.eclipse.rap.jface</artifactId>
+      <version>${rap.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.rap</groupId>
+      <artifactId>org.eclipse.rap.fileupload</artifactId>
+      <version>${rap.version}</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <configuration>
+          <finalName>hop</finalName>
+          <appendAssemblyId>false</appendAssemblyId>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/assemblies/web/src/assembly/assembly.xml 
b/assemblies/web/src/assembly/assembly.xml
new file mode 100644
index 0000000..0cad12e
--- /dev/null
+++ b/assemblies/web/src/assembly/assembly.xml
@@ -0,0 +1,73 @@
+<!--
+  ~ 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.
+  ~
+  -->
+
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 
http://maven.apache.org/xsd/assembly-2.0.0.xsd";>
+  <id>web</id>
+  <formats>
+    <format>war</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <fileSets>
+    <!-- the staging dir -->
+    <fileSet>
+      <directory>${assembly.dir}</directory>
+      <outputDirectory>.</outputDirectory>
+    </fileSet>
+  </fileSets>
+  <dependencySets>
+    <!-- hop components -->
+    <dependencySet>
+      <includes>
+        <!--<include>org.hop:hop-assemblies-demo:zip</include>-->
+        <include>org.apache.hop:hop-assemblies-libs:zip</include>
+      </includes>
+      <unpack>true</unpack>
+      <outputDirectory>WEB-INF</outputDirectory>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <useProjectArtifact>false</useProjectArtifact>
+    </dependencySet>
+    <dependencySet>
+      <includes>
+        <include>org.apache.hop:hop-assemblies-static:zip</include>
+      </includes>
+      <unpack>true</unpack>
+      <outputDirectory>.</outputDirectory>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <useProjectArtifact>false</useProjectArtifact>
+    </dependencySet>
+    <!-- RAP -->
+    <dependencySet>
+      <includes>
+        <include>org.eclipse.rap:org.eclipse.rap.*</include>
+      </includes>
+      <outputDirectory>WEB-INF/lib</outputDirectory>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <useProjectArtifact>false</useProjectArtifact>
+    </dependencySet>
+    <dependencySet>
+      <includes>
+        <include>org.apache.hop:hop-ui-rap:jar</include>
+      </includes>
+      <outputDirectory>WEB-INF/lib</outputDirectory>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <useProjectArtifact>false</useProjectArtifact>
+    </dependencySet>
+
+  </dependencySets>
+</assembly>
diff --git a/docker/Dockerfile.web b/docker/Dockerfile.web
new file mode 100644
index 0000000..4615896
--- /dev/null
+++ b/docker/Dockerfile.web
@@ -0,0 +1,31 @@
+# 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.
+#
+
+FROM tomcat:jdk8
+LABEL maintainer="Apache Hop Team"
+ENV JAVA_OPTS="-Xms1024m -Xmx2048m -DHOP_CONFIG_FOLDER=webapps/ROOT/config"
+
+RUN rm -rf webapps/* \
+ && wget -q 
https://github.com/HiromuHota/incubator-hop/releases/download/hopweb%2Fnightly/hop.war
 \
+ && mkdir ${CATALINA_HOME}/webapps/ROOT \
+ && unzip -q hop.war -d ${CATALINA_HOME}/webapps/ROOT \
+ && rm hop.war \
+ && wget -q 
https://github.com/HiromuHota/incubator-hop/releases/download/hopweb%2Fnightly/hop-assemblies-plugins-dist-0.70-SNAPSHOT.zip
 -O hop-assemblies-plugins-dist.zip \
+ && unzip -q hop-assemblies-plugins-dist.zip \
+ && rm hop-assemblies-plugins-dist.zip \
+ && sed -i 's/config\/projects/${HOP_CONFIG_FOLDER}\/projects/g' 
webapps/ROOT/config/hop-config.json
diff --git a/assemblies/pom.xml b/integration-tests/hopweb/pom.xml
similarity index 66%
copy from assemblies/pom.xml
copy to integration-tests/hopweb/pom.xml
index 8bd2c95..7ab2697 100644
--- a/assemblies/pom.xml
+++ b/integration-tests/hopweb/pom.xml
@@ -17,34 +17,39 @@
   ~
   -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
   <modelVersion>4.0.0</modelVersion>
 
   <groupId>org.apache.hop</groupId>
-  <artifactId>hop-assemblies</artifactId>
+  <artifactId>hop-web-integration-tests</artifactId>
   <version>0.70-SNAPSHOT</version>
-  <packaging>pom</packaging>
 
-  <name>Hop Assemblies</name>
+  <name>Hop Web Integration Tests</name>
 
   <parent>
     <groupId>org.apache.hop</groupId>
     <artifactId>hop</artifactId>
     <version>0.70-SNAPSHOT</version>
+    <relativePath>../../pom.xml</relativePath>
   </parent>
 
   <properties>
-    <assembly.dir>${project.build.directory}/assembly</assembly.dir>
+    <selenium.version>3.141.59</selenium.version>
   </properties>
 
-  <modules>
-    <module>plugins</module>
-    <module>static</module>
-    <module>lib</module>
-    <module>client</module>
-    <module>core</module>
-    <module>debug</module>
-    <module>samples</module>
-  </modules>
+  <dependencies>
+    <dependency>
+      <groupId>org.seleniumhq.selenium</groupId>
+      <artifactId>selenium-java</artifactId>
+      <version>${selenium.version}</version>
+    </dependency>
+       <dependency>
+         <groupId>junit</groupId>
+         <artifactId>junit</artifactId>
+         <version>4.13.1</version>
+       </dependency>
+  </dependencies>
+
 </project>
diff --git 
a/integration-tests/hopweb/src/test/java/org/apache/hop/ui/hopgui/HopWebTest.java
 
b/integration-tests/hopweb/src/test/java/org/apache/hop/ui/hopgui/HopWebTest.java
new file mode 100644
index 0000000..c819dd6
--- /dev/null
+++ 
b/integration-tests/hopweb/src/test/java/org/apache/hop/ui/hopgui/HopWebTest.java
@@ -0,0 +1,109 @@
+/*
+ * 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.apache.hop.ui.hopgui;
+
+import static org.junit.Assert.*;
+import java.util.concurrent.TimeUnit;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.chrome.ChromeOptions;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+public class HopWebTest {
+  private WebDriver driver;
+  private Actions actions;
+  private String baseUrl;
+  private WebElement element;
+  private WebDriverWait wait;
+
+  @Before
+  public void setUp() throws Exception {
+    boolean isHeadless = Boolean.parseBoolean( System.getProperty( 
"headless.unittest", "true" ) );
+    ChromeOptions options = new ChromeOptions();
+    if ( isHeadless ) {
+      options.addArguments( "headless" );
+    }
+    options.addArguments( "--window-size=1280,800" );
+    driver = new ChromeDriver( options );
+    actions = new Actions( driver );
+    wait = new WebDriverWait( driver, 5 );
+    baseUrl = System.getProperty( "test.baseurl", "http://localhost:8080"; );
+    driver.get( baseUrl );
+    driver.manage().timeouts().implicitlyWait( 5, TimeUnit.SECONDS );
+  }
+
+  @Test
+  public void testAppLoading() {
+    assertEquals( driver.getTitle(), "Hop" );
+  }
+
+  @Test
+  public void testContextDialog() {
+    By xpath = By.xpath(
+        "//div[starts-with(text(), 'Search') and not(contains(text(), 
'string'))]"
+      );
+    assertEquals(0, driver.findElements(xpath).size());
+
+    clickElement("//div[text() = 'File']");
+    clickElement("//div[text() = 'New']");
+    // TODO: driver.findElements(xpath).size() is now 2 for some reason, but 
should be 1.
+    assertTrue( 1 <= driver.findElements(xpath).size());
+  }
+
+  @Test
+  public void testNewPipeline() {
+    // Create a new pipeline
+    createNewPipeline();
+
+    assertEquals(1, driver.findElements(
+      By.xpath(
+        "//div[text()='New pipeline']"
+      )
+    ).size());
+  }
+
+  private void createNewPipeline() {
+    // Create a new Pipeline
+    clickElement("//div[text() = 'File']");
+    clickElement("//div[text() = 'New']");
+    element = driver.findElement(By.xpath("//div[starts-with(text(), 'Search') 
and not(contains(text(), 'string'))]"));
+    element = element.findElement(By.xpath("./../..//input"));
+    element.sendKeys(Keys.UP);
+    element.sendKeys(Keys.LEFT);
+    element.sendKeys(Keys.RETURN);
+  }
+
+  private void clickElement( String xpath ) {
+    element = wait.until( ExpectedConditions.elementToBeClickable( By.xpath( 
xpath ) ) );
+    element.click();
+  }
+
+  @After
+  public void tearDown() {
+    driver.quit();
+  }
+}
diff --git a/ui/src/main/java/org/apache/hop/ui/core/gui/GuiMenuWidgets.java 
b/ui/src/main/java/org/apache/hop/ui/core/gui/GuiMenuWidgets.java
index eff267e..2abdc60 100644
--- a/ui/src/main/java/org/apache/hop/ui/core/gui/GuiMenuWidgets.java
+++ b/ui/src/main/java/org/apache/hop/ui/core/gui/GuiMenuWidgets.java
@@ -26,6 +26,7 @@ import org.apache.hop.core.gui.plugin.menu.GuiMenuItem;
 import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.hopgui.file.IHopFileType;
+import org.apache.hop.ui.util.EnvironmentUtils;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
@@ -103,7 +104,7 @@ public class GuiMenuWidgets extends BaseGuiWidgets {
       }
 
       setMenuItemKeyboardShortcut(menuItem, guiMenuItem);
-      if (StringUtils.isNotEmpty(guiMenuItem.getToolTip())) {
+      if (StringUtils.isNotEmpty(guiMenuItem.getToolTip()) && 
!EnvironmentUtils.getInstance().isWeb()) {
         menuItem.setToolTipText(guiMenuItem.getToolTip());
       }
 
@@ -149,7 +150,7 @@ public class GuiMenuWidgets extends BaseGuiWidgets {
         menuItem = new MenuItem(parentMenu, SWT.CASCADE);
         menuItem.setText(Const.NVL(guiMenuItem.getLabel(), ""));
         setMenuItemKeyboardShortcut(menuItem, guiMenuItem);
-        if (StringUtils.isNotEmpty(guiMenuItem.getToolTip())) {
+        if (StringUtils.isNotEmpty(guiMenuItem.getToolTip()) && 
!EnvironmentUtils.getInstance().isWeb()) {
           menuItem.setToolTipText(guiMenuItem.getToolTip());
         }
         menu = new Menu(shell, SWT.DROP_DOWN);
diff --git 
a/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
 
b/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
index 3f98a6a..00c719c 100644
--- 
a/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
+++ 
b/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
@@ -138,6 +138,7 @@ import 
org.apache.hop.ui.hopgui.perspective.dataorch.HopGuiAbstractGraph;
 import org.apache.hop.ui.hopgui.shared.SwtGc;
 import org.apache.hop.ui.hopgui.shared.SwtScrollBar;
 import org.apache.hop.ui.pipeline.dialog.PipelineDialog;
+import org.apache.hop.ui.util.EnvironmentUtils;
 import org.apache.hop.workflow.action.ActionMeta;
 import org.apache.hop.workflow.actions.pipeline.ActionPipeline;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -532,12 +533,14 @@ public class HopGuiPipelineGraph extends 
HopGuiAbstractGraph
 
     horizontalBar.setMinimum(1);
     horizontalBar.setMaximum(100);
-    horizontalBar.setIncrement(5);
     horizontalBar.setVisible(true);
     verticalBar.setMinimum(1);
     verticalBar.setMaximum(100);
-    verticalBar.setIncrement(5);
     verticalBar.setVisible(true);
+    if ( !EnvironmentUtils.getInstance().isWeb() ) {
+      horizontalBar.setIncrement(5);
+      verticalBar.setIncrement(5);
+    }
 
     if (OsHelper.isWindows()) {
       horizontalBar.addListener(SWT.Selection, e -> canvas.redraw());
diff --git 
a/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java
 
b/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java
index 45b8f4b..0e41e54 100644
--- 
a/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java
+++ 
b/ui/src/main/java/org/apache/hop/ui/hopgui/file/workflow/HopGuiWorkflowGraph.java
@@ -95,6 +95,7 @@ import 
org.apache.hop.ui.hopgui.perspective.dataorch.HopDataOrchestrationPerspec
 import org.apache.hop.ui.hopgui.perspective.dataorch.HopGuiAbstractGraph;
 import org.apache.hop.ui.hopgui.shared.SwtGc;
 import org.apache.hop.ui.hopgui.shared.SwtScrollBar;
+import org.apache.hop.ui.util.EnvironmentUtils;
 import org.apache.hop.ui.workflow.dialog.WorkflowDialog;
 import org.apache.hop.workflow.ActionResult;
 import org.apache.hop.workflow.IActionListener;
@@ -414,12 +415,14 @@ public class HopGuiWorkflowGraph extends 
HopGuiAbstractGraph
 
     horizontalBar.setMinimum(1);
     horizontalBar.setMaximum(100);
-    horizontalBar.setIncrement(5);
     horizontalBar.setVisible(true);
     verticalBar.setMinimum(1);
     verticalBar.setMaximum(100);
-    verticalBar.setIncrement(5);
     verticalBar.setVisible(true);
+    if (!EnvironmentUtils.getInstance().isWeb()) {
+      horizontalBar.setIncrement(5);
+      verticalBar.setIncrement(5);
+    }
 
     if (OsHelper.isWindows()) {
       horizontalBar.addListener(
diff --git 
a/ui/src/main/java/org/apache/hop/ui/hopgui/perspective/dataorch/HopGuiAbstractGraph.java
 
b/ui/src/main/java/org/apache/hop/ui/hopgui/perspective/dataorch/HopGuiAbstractGraph.java
index 009805e..49416cc 100644
--- 
a/ui/src/main/java/org/apache/hop/ui/hopgui/perspective/dataorch/HopGuiAbstractGraph.java
+++ 
b/ui/src/main/java/org/apache/hop/ui/hopgui/perspective/dataorch/HopGuiAbstractGraph.java
@@ -24,6 +24,7 @@ import org.apache.hop.core.variables.Variables;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.gui.GuiResource;
 import org.apache.hop.ui.hopgui.HopGui;
+import org.apache.hop.ui.util.EnvironmentUtils;
 import org.eclipse.swt.custom.CTabItem;
 import org.eclipse.swt.custom.ScrolledComposite;
 import org.eclipse.swt.graphics.Font;
@@ -346,13 +347,17 @@ public abstract class HopGuiAbstractGraph extends 
Composite {
       h.setMinimum( 1 );
       h.setMaximum( 100 );
       h.setThumb(hThumb);
-      h.setPageIncrement(10);
+      if ( !EnvironmentUtils.getInstance().isWeb() ){
+        h.setPageIncrement( 10 );
+      }
     }
     if (v != null) {
       v.setMinimum( 1 );
       v.setMaximum( 100 );
       v.setThumb(vThumb);
-      v.setPageIncrement(10);
+      if ( !EnvironmentUtils.getInstance().isWeb() ) {
+        v.setPageIncrement( 10 );
+      }
     }
     canvas.setFocus();
   }

Reply via email to