You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hop.apache.org by ha...@apache.org on 2020/11/24 09:03:19 UTC

[incubator-hop] branch master updated: HOP-2215 : Creating project with relative path in home folder creates NPE

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 0b9a0f1  HOP-2215 : Creating project with relative path in home folder creates NPE
     new 87c52db  Merge pull request #409 from mattcasters/master
0b9a0f1 is described below

commit 0b9a0f139d9f57d1f0978496d38cac7256f5efcb
Author: Matt Casters <ma...@gmail.com>
AuthorDate: Tue Nov 24 09:12:33 2020 +0100

    HOP-2215 : Creating project with relative path in home folder creates NPE
---
 .../project/ManageProjectsOptionPlugin.java        |  2 +-
 .../apache/hop/projects/project/ProjectConfig.java | 23 ++++++++++++++++++++--
 .../apache/hop/projects/project/ProjectDialog.java | 15 +++++++++++---
 3 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/plugins/misc/projects/src/main/java/org/apache/hop/projects/project/ManageProjectsOptionPlugin.java b/plugins/misc/projects/src/main/java/org/apache/hop/projects/project/ManageProjectsOptionPlugin.java
index c00188b..23e9056 100644
--- a/plugins/misc/projects/src/main/java/org/apache/hop/projects/project/ManageProjectsOptionPlugin.java
+++ b/plugins/misc/projects/src/main/java/org/apache/hop/projects/project/ManageProjectsOptionPlugin.java
@@ -126,7 +126,7 @@ public class ManageProjectsOptionPlugin implements IConfigOptions {
     }
   }
 
-  private void logProjectDetails( ILogChannel log, ProjectConfig projectConfig, Project project ) {
+  private void logProjectDetails( ILogChannel log, ProjectConfig projectConfig, Project project ) throws HopException {
     String projectHome = projectConfig.getProjectHome();
     log.logBasic( "  " + projectConfig.getProjectName() + " : " + projectHome );
     log.logBasic( "    Configuration file: " + projectConfig.getActualProjectConfigFilename( Variables.getADefaultVariableSpace() ) );
diff --git a/plugins/misc/projects/src/main/java/org/apache/hop/projects/project/ProjectConfig.java b/plugins/misc/projects/src/main/java/org/apache/hop/projects/project/ProjectConfig.java
index 8cb9ba4..698ff7a 100644
--- a/plugins/misc/projects/src/main/java/org/apache/hop/projects/project/ProjectConfig.java
+++ b/plugins/misc/projects/src/main/java/org/apache/hop/projects/project/ProjectConfig.java
@@ -64,14 +64,33 @@ public class ProjectConfig {
     return Objects.hash( projectName );
   }
 
-  public String getActualProjectConfigFilename(  IVariables variables ) {
+  /**
+   * The full path to the project config filename
+   * @param variables
+   * @return The path to the project config filename
+   * @throws HopException In case the home folder doesn't exist or an invalid filename/path is being used.
+   */
+  public String getActualProjectConfigFilename(  IVariables variables ) throws HopException {
     String actualHomeFolder = variables.environmentSubstitute( getProjectHome() );
+    File actualHome = new File( actualHomeFolder );
+    if (!actualHome.exists()) {
+      throw new HopException("Project home folder '"+actualHomeFolder+"' does not exist");
+    }
     String actualConfigFilename = variables.environmentSubstitute( getConfigFilename() );
-    return FilenameUtils.concat( actualHomeFolder, actualConfigFilename );
+    String fullFilename = FilenameUtils.concat( actualHome.getAbsolutePath(), actualConfigFilename );
+    if (fullFilename==null) {
+      throw new HopException("Unable to determine full path to the configuration file '"+actualConfigFilename+"' in home folder '"+actualHomeFolder);
+    }
+    return fullFilename;
   }
 
   public Project loadProject( IVariables variables ) throws HopException {
     String configFilename = getActualProjectConfigFilename( variables );
+    if (configFilename==null) {
+      String projHome = variables.environmentSubstitute( getProjectHome() );
+      String confFile = variables.environmentSubstitute( getConfigFilename() );
+      throw new HopException("Invalid project folder provided: home folder: '"+projHome+"', config file: '"+confFile+"'");
+    }
     Project project = new Project(configFilename);
     if (new File(configFilename).exists()) {
       project.readFromFile();
diff --git a/plugins/misc/projects/src/main/java/org/apache/hop/projects/project/ProjectDialog.java b/plugins/misc/projects/src/main/java/org/apache/hop/projects/project/ProjectDialog.java
index 7fa7aef..5603db5 100644
--- a/plugins/misc/projects/src/main/java/org/apache/hop/projects/project/ProjectDialog.java
+++ b/plugins/misc/projects/src/main/java/org/apache/hop/projects/project/ProjectDialog.java
@@ -25,11 +25,13 @@ package org.apache.hop.projects.project;
 import org.apache.commons.lang.StringUtils;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.config.DescribedVariable;
+import org.apache.hop.core.exception.HopException;
 import org.apache.hop.core.variables.IVariables;
 import org.apache.hop.core.variables.Variables;
 import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.BaseDialog;
+import org.apache.hop.ui.core.dialog.ErrorDialog;
 import org.apache.hop.ui.core.gui.GuiResource;
 import org.apache.hop.ui.core.gui.WindowProperty;
 import org.apache.hop.ui.core.widget.ColumnInfo;
@@ -372,15 +374,22 @@ public class ProjectDialog extends Dialog {
   private void updateIVariables() {
     Project env = new Project();
     ProjectConfig pc = new ProjectConfig();
-    getInfo( env, pc );
+    try {
+      getInfo( env, pc );
     env.modifyVariables( variables, pc, Collections.emptyList(), null );
+    } catch(HopException e) {
+      new ErrorDialog( shell, "Error", "There is a configuration error in the project:" ,e );
+    }
   }
 
   private void ok() {
+    try {
     getInfo( project, projectConfig );
     returnValue = projectConfig.getProjectName();
-
     dispose();
+    } catch(HopException e) {
+      new ErrorDialog( shell, "Error", "There is a configuration error in the project:" ,e );
+    }
   }
 
   private void cancel() {
@@ -417,7 +426,7 @@ public class ProjectDialog extends Dialog {
     wVariables.optWidth( true );
   }
 
-  private void getInfo( Project project, ProjectConfig projectConfig ) {
+  private void getInfo( Project project, ProjectConfig projectConfig ) throws HopException {
 
     projectConfig.setProjectName( wName.getText() );
     projectConfig.setProjectHome( wHome.getText() );