From b7528f32730fc656868af2e203fe0af8d58c4be2 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Thu, 16 May 2013 12:11:28 +0000
Subject: [PATCH] SP-649, BIS-419: Validators improved by printing error
 messages onto the error console.

SVN: 29152
---
 .../izpack/AbstractDataValidator.java         | 41 +++++++++++++++++++
 .../izpack/DBConnectionValidator.java         | 19 ++++-----
 .../installer/izpack/KeyStoreValidator.java   | 10 ++---
 .../izpack/PostgresToolsPathValidator.java    |  6 +--
 4 files changed, 54 insertions(+), 22 deletions(-)
 create mode 100644 installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/AbstractDataValidator.java

diff --git a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/AbstractDataValidator.java b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/AbstractDataValidator.java
new file mode 100644
index 00000000000..a93ea6a8c82
--- /dev/null
+++ b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/AbstractDataValidator.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2013 ETH Zuerich, CISD
+ *
+ * Licensed 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 ch.systemsx.cisd.openbis.installer.izpack;
+
+import com.izforge.izpack.api.installer.DataValidator;
+
+/**
+ * Abstract super class of all {@link DataValidator}. It handles setting of error message. Error messages
+ * will be printed on the error console. This is needed for console-based installations.
+ *
+ * @author Franz-Josef Elmer
+ */
+public abstract class AbstractDataValidator implements DataValidator
+{
+    private String errorMessage;
+
+    protected void setErrorMessage(String errorMessage)
+    {
+        System.err.println(getClass().getName() + ": " + errorMessage);
+        this.errorMessage = errorMessage;
+    }
+    
+    protected String getErrorMessage()
+    {
+        return errorMessage;
+    }
+}
diff --git a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/DBConnectionValidator.java b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/DBConnectionValidator.java
index 9cf0599ce77..9a12b4970cf 100644
--- a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/DBConnectionValidator.java
+++ b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/DBConnectionValidator.java
@@ -21,7 +21,6 @@ import java.sql.DriverManager;
 import java.sql.SQLException;
 
 import com.izforge.izpack.api.data.AutomatedInstallData;
-import com.izforge.izpack.api.installer.DataValidator;
 
 /**
  * Tests if there is a valid PostgreSQL installation on the local machine that is setup to accept
@@ -29,7 +28,7 @@ import com.izforge.izpack.api.installer.DataValidator;
  * 
  * @author Kaloyan Enimanev
  */
-public class DBConnectionValidator implements DataValidator
+public class DBConnectionValidator extends AbstractDataValidator
 {
 
     private static final String DEFAULT_ERROR_MESSAGE = "Cannot connect to the specified database.";
@@ -42,8 +41,6 @@ public class DBConnectionValidator implements DataValidator
 
     private static final String NO_PASSWORD = "";
 
-    private String errorMessage;
-
     @Override
     public boolean getDefaultAnswer()
     {
@@ -53,9 +50,9 @@ public class DBConnectionValidator implements DataValidator
     @Override
     public String getErrorMessageId()
     {
-        if (errorMessage != null)
+        if (getErrorMessage() != null)
         {
-            return errorMessage;
+            return getErrorMessage();
         } else
         {
             return DEFAULT_ERROR_MESSAGE;
@@ -161,18 +158,18 @@ public class DBConnectionValidator implements DataValidator
             }
         } catch (ClassNotFoundException cnfe)
         {
-            errorMessage = createMessage(cnfe, messagePostfix);
+            createMessage(cnfe, messagePostfix);
         } catch (SQLException e)
         {
-            errorMessage = createMessage(e, messagePostfix);
+            createMessage(e, messagePostfix);
         }
 
         return connected;
     }
 
-    private String createMessage(Exception exception, String messagePostfix)
+    private void createMessage(Exception exception, String messagePostfix)
     {
-        return exception.getMessage() + ".\nThe error is probably caused by an illconfigured "
-                + messagePostfix + ".";
+        setErrorMessage(exception.getMessage() + ".\nThe error is probably caused by an illconfigured "
+                + messagePostfix + ".");
     }
 }
diff --git a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/KeyStoreValidator.java b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/KeyStoreValidator.java
index 729a1585cdd..b6a6ca7e969 100644
--- a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/KeyStoreValidator.java
+++ b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/KeyStoreValidator.java
@@ -27,18 +27,15 @@ import java.util.List;
 import org.apache.commons.io.IOUtils;
 
 import com.izforge.izpack.api.data.AutomatedInstallData;
-import com.izforge.izpack.api.installer.DataValidator;
 
 /**
  * 
  *
  * @author Franz-Josef Elmer
  */
-public class KeyStoreValidator implements DataValidator
+public class KeyStoreValidator extends AbstractDataValidator
 {
     
-    private String errorMessage;
-
     @Override
     public Status validateData(AutomatedInstallData data)
     {
@@ -71,8 +68,7 @@ public class KeyStoreValidator implements DataValidator
                 }
             } catch (Exception ex)
             {
-                errorMessage =
-                        "Error for key store " + keyStoreFile.getPath() + ":" + ex.getMessage();
+                setErrorMessage("Error for key store " + keyStoreFile.getPath() + ":" + ex.getMessage());
                 return Status.ERROR;
             } finally
             {
@@ -93,7 +89,7 @@ public class KeyStoreValidator implements DataValidator
     @Override
     public String getErrorMessageId()
     {
-        return errorMessage;
+        return getErrorMessage();
     }
 
     @Override
diff --git a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/PostgresToolsPathValidator.java b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/PostgresToolsPathValidator.java
index 09ae4c7b492..7a8c48d0bd4 100644
--- a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/PostgresToolsPathValidator.java
+++ b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/PostgresToolsPathValidator.java
@@ -21,14 +21,13 @@ import static ch.systemsx.cisd.openbis.installer.izpack.GlobalInstallationContex
 import java.io.File;
 
 import com.izforge.izpack.api.data.AutomatedInstallData;
-import com.izforge.izpack.api.installer.DataValidator;
 
 /**
  * Validates the user input for the location of the postgres installation.
  * 
  * @author Kaloyan Enimanev
  */
-public class PostgresToolsPathValidator implements DataValidator
+public class PostgresToolsPathValidator extends AbstractDataValidator
 {
 
     @Override
@@ -67,8 +66,7 @@ public class PostgresToolsPathValidator implements DataValidator
             return Status.OK;
         } else
         {
-            // only useful for console installations
-            System.err.println(getErrorMessageId());
+            setErrorMessage("'psql' and 'pg_dump' must be available on the specified path: " + selectedPath);
             return Status.ERROR;
         }
 
-- 
GitLab