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() );