From c280815acb03cdf8f71f22fad2d1aa632c9a7f2b Mon Sep 17 00:00:00 2001
From: Martin Goik <goik@hdm-stuttgart.de>
Date: Wed, 7 Jan 2015 17:43:02 +0100
Subject: [PATCH] Externalize strings, adding solution

---
 .../mi/sda1/catalog2sql/Messages.java         | 22 +++++++++++++++
 .../mi/sda1/catalog2sql/Xml2Rdbms.java        | 27 +++++++++----------
 .../mi/sda1/catalog2sql/messages.properties   | 16 +++++++++++
 Sda1/sda1.xml                                 | 13 +++++++++
 4 files changed, 64 insertions(+), 14 deletions(-)
 create mode 100644 Sda1/P/catalog2rdbms/src/main/java/de/hdm_stuttgart/mi/sda1/catalog2sql/Messages.java
 create mode 100644 Sda1/P/catalog2rdbms/src/main/java/de/hdm_stuttgart/mi/sda1/catalog2sql/messages.properties

diff --git a/Sda1/P/catalog2rdbms/src/main/java/de/hdm_stuttgart/mi/sda1/catalog2sql/Messages.java b/Sda1/P/catalog2rdbms/src/main/java/de/hdm_stuttgart/mi/sda1/catalog2sql/Messages.java
new file mode 100644
index 000000000..e68812cee
--- /dev/null
+++ b/Sda1/P/catalog2rdbms/src/main/java/de/hdm_stuttgart/mi/sda1/catalog2sql/Messages.java
@@ -0,0 +1,22 @@
+package de.hdm_stuttgart.mi.sda1.catalog2sql;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages {
+   private static final String BUNDLE_NAME = "de.hdm_stuttgart.mi.sda1.catalog2sql.messages"; //$NON-NLS-1$
+
+   private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+         .getBundle(BUNDLE_NAME);
+
+   private Messages() {
+   }
+
+   public static String getString(String key) {
+      try {
+         return RESOURCE_BUNDLE.getString(key);
+      } catch (MissingResourceException e) {
+         return '!' + key + '!';
+      }
+   }
+}
diff --git a/Sda1/P/catalog2rdbms/src/main/java/de/hdm_stuttgart/mi/sda1/catalog2sql/Xml2Rdbms.java b/Sda1/P/catalog2rdbms/src/main/java/de/hdm_stuttgart/mi/sda1/catalog2sql/Xml2Rdbms.java
index 893868eff..183507fd5 100644
--- a/Sda1/P/catalog2rdbms/src/main/java/de/hdm_stuttgart/mi/sda1/catalog2sql/Xml2Rdbms.java
+++ b/Sda1/P/catalog2rdbms/src/main/java/de/hdm_stuttgart/mi/sda1/catalog2sql/Xml2Rdbms.java
@@ -1,7 +1,6 @@
 package de.hdm_stuttgart.mi.sda1.catalog2sql;
 
 import java.io.IOException;
-import java.io.PrintStream;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;
@@ -35,18 +34,18 @@ public class Xml2Rdbms {
    public static void main(String[] args) throws ParserConfigurationException,
          SAXException, IOException {
 
-      log.info("Creating SAX parser");
+      log.info(Messages.getString("Xml2Rdbms.0")); //$NON-NLS-1$
       final SAXParserFactory saxPf = SAXParserFactory.newInstance();
       final SAXParser saxParser = saxPf.newSAXParser();
       final XMLReader xmlReader = saxParser.getXMLReader();
 
       
       // Register Driver
-      final String sqlDriverClassName = "com.mysql.jdbc.Driver"; 
+      final String sqlDriverClassName = Messages.getString("Xml2Rdbms.jdbcDriverName");  //$NON-NLS-1$
       try {
          Class.forName(sqlDriverClassName);
       } catch (ClassNotFoundException e) {
-         Helper.exitWithErrorMessage("Unable to register driver class '" + sqlDriverClassName + "'", 1);
+         Helper.exitWithErrorMessage(Messages.getString("Xml2Rdbms.errMsgUnableRegisterDriverClass") + sqlDriverClassName + Messages.getString("Xml2Rdbms.3"), 1); //$NON-NLS-1$ //$NON-NLS-2$
       }
 
 
@@ -54,28 +53,28 @@ public class Xml2Rdbms {
       // 
       Connection conn = null;
       
-      final String jdbcConnectionUrl = "jdbc:mysql://localhost:3306/hdm";
-      final String userName = "hdmuser";
+      final String jdbcConnectionUrl = Messages.getString("Xml2Rdbms.jdbcUrl"); //$NON-NLS-1$
+      final String userName = Messages.getString("Xml2Rdbms.jdbcUser"); //$NON-NLS-1$
       try {
-         conn = DriverManager.getConnection(jdbcConnectionUrl, userName, "XYZ");
+         conn = DriverManager.getConnection(jdbcConnectionUrl, userName, Messages.getString("Xml2Rdbms.jdbcPasswd")); //$NON-NLS-1$
       } catch (SQLException e) {
-         Helper.exitWithErrorMessage("Unable to connect as user '" + userName + "' to '" +
-               jdbcConnectionUrl + "'", 1);
+         Helper.exitWithErrorMessage(Messages.getString("Xml2Rdbms.errMsgUnableToConnect") + userName + Messages.getString("Xml2Rdbms.8") + //$NON-NLS-1$ //$NON-NLS-2$
+               jdbcConnectionUrl + Messages.getString("Xml2Rdbms.9"), 1); //$NON-NLS-1$
       }
       
       DataInsert dataInsert = null;
       try {
          dataInsert = new DataInsert(conn);
       } catch (SQLException e) {
-         Helper.exitWithErrorMessage("Unable to initialize data inserter", 1);
+         Helper.exitWithErrorMessage(Messages.getString("Xml2Rdbms.errMsgUnableInitDataInsert"), 1); //$NON-NLS-1$
       }
 
-      log.info("Registering content- and error handler instances");
+      log.info(Messages.getString("Xml2Rdbms.11")); //$NON-NLS-1$
       xmlReader.setContentHandler(new CatalogContentHandler(dataInsert));
       xmlReader.setErrorHandler(new SaxErrorHandler(System.err));
 
-      final String xmlDocumentInstanceFilename = "products.xml";
-      log.info("Start parsing file '" + xmlDocumentInstanceFilename + "'");
+      final String xmlDocumentInstanceFilename = Messages.getString("Xml2Rdbms.xmlSourceFileName"); //$NON-NLS-1$
+      log.info(Messages.getString("Xml2Rdbms.13") + xmlDocumentInstanceFilename + Messages.getString("Xml2Rdbms.14")); //$NON-NLS-1$ //$NON-NLS-2$
       xmlReader.parse(xmlDocumentInstanceFilename);
 
       // Closing
@@ -83,7 +82,7 @@ public class Xml2Rdbms {
          dataInsert.close();  // Closing Statement
          conn.close();        // Closing Connection
       } catch (SQLException e) {
-         Helper.exitWithErrorMessage("Unable to close RDBMS access", 1);
+         Helper.exitWithErrorMessage(Messages.getString("Xml2Rdbms.errMsgUnableCloseRdbms"), 1); //$NON-NLS-1$
       }
    }
    
diff --git a/Sda1/P/catalog2rdbms/src/main/java/de/hdm_stuttgart/mi/sda1/catalog2sql/messages.properties b/Sda1/P/catalog2rdbms/src/main/java/de/hdm_stuttgart/mi/sda1/catalog2sql/messages.properties
new file mode 100644
index 000000000..ef6d55455
--- /dev/null
+++ b/Sda1/P/catalog2rdbms/src/main/java/de/hdm_stuttgart/mi/sda1/catalog2sql/messages.properties
@@ -0,0 +1,16 @@
+Xml2Rdbms.0=Creating SAX parser
+Xml2Rdbms.11=Registering content- and error handler instances
+Xml2Rdbms.13=Start parsing file '
+Xml2Rdbms.14='
+Xml2Rdbms.3='
+Xml2Rdbms.8=' to '
+Xml2Rdbms.9='
+Xml2Rdbms.errMsgUnableCloseRdbms=Unable to close RDBMS access
+Xml2Rdbms.errMsgUnableInitDataInsert=Unable to initialize data inserter
+Xml2Rdbms.errMsgUnableRegisterDriverClass=Unable to register driver class '
+Xml2Rdbms.errMsgUnableToConnect=Unable to connect as user '
+Xml2Rdbms.jdbcDriverName=com.mysql.jdbc.Driver
+Xml2Rdbms.jdbcPasswd=XYZ
+Xml2Rdbms.jdbcUrl=jdbc:mysql://localhost:3306/hdm
+Xml2Rdbms.jdbcUser=hdmuser
+Xml2Rdbms.xmlSourceFileName=products.xml
diff --git a/Sda1/sda1.xml b/Sda1/sda1.xml
index 602c72365..a4f6545c0 100644
--- a/Sda1/sda1.xml
+++ b/Sda1/sda1.xml
@@ -9659,7 +9659,20 @@ public class SimpleInsert {
                 SQL statements. Modify your solution by directly inserting
                 corresponding data by means of <xref linkend="glo_JDBC"/> into
                 a relational database.</para>
+
+                <para>Error handling may be implemented by simply issuing a
+                corresponding message before exiting the application.</para>
               </question>
+
+              <answer>
+                <annotation role="make">
+                  <para role="eclipse">P/catalog2rdbms</para>
+                </annotation>
+
+                <para>This solution requires a <command>mvn</command>
+                <option>install</option> on dependent project
+                <quote>saxerrorhandler</quote>.</para>
+              </answer>
             </qandaentry>
           </qandadiv>
         </qandaset>
-- 
GitLab