diff -r 7e08730da258 -r 4a1864c3e867 java/sql-dk/src/main/java/info/globalcode/sql/dk/InfoLister.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/java/sql-dk/src/main/java/info/globalcode/sql/dk/InfoLister.java Mon Mar 04 20:15:24 2019 +0100
@@ -0,0 +1,673 @@
+/**
+ * SQL-DK
+ * Copyright © 2013 František Kučera (frantovo.cz)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package info.globalcode.sql.dk;
+
+import info.globalcode.sql.dk.configuration.CommandArgument;
+import info.globalcode.sql.dk.configuration.Configuration;
+import info.globalcode.sql.dk.configuration.ConfigurationException;
+import info.globalcode.sql.dk.configuration.ConfigurationProvider;
+import info.globalcode.sql.dk.configuration.DatabaseDefinition;
+import info.globalcode.sql.dk.configuration.FormatterDefinition;
+import info.globalcode.sql.dk.configuration.Properties;
+import info.globalcode.sql.dk.configuration.Property;
+import info.globalcode.sql.dk.configuration.PropertyDeclaration;
+import info.globalcode.sql.dk.configuration.TunnelDefinition;
+import info.globalcode.sql.dk.formatting.ColumnsHeader;
+import info.globalcode.sql.dk.formatting.CommonProperties;
+import info.globalcode.sql.dk.formatting.FakeSqlArray;
+import info.globalcode.sql.dk.formatting.Formatter;
+import info.globalcode.sql.dk.formatting.FormatterContext;
+import info.globalcode.sql.dk.formatting.FormatterException;
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.sql.Array;
+import java.sql.Driver;
+import java.sql.DriverManager;
+import java.sql.DriverPropertyInfo;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.ServiceLoader;
+import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+import javax.sql.rowset.RowSetMetaDataImpl;
+
+/**
+ * Displays info like help, version etc.
+ *
+ * @author Ing. František Kučera (frantovo.cz)
+ */
+public class InfoLister {
+
+ private static final Logger log = Logger.getLogger(InfoLister.class.getName());
+ /**
+ * Fake database name for output formatting
+ */
+ public static final String CONFIG_DB_NAME = "sqldk_configuration";
+ private final PrintStream out;
+ private final ConfigurationProvider configurationProvider;
+ private final CLIOptions options;
+ private Formatter formatter;
+
+ public InfoLister(PrintStream out, ConfigurationProvider configurationProvider, CLIOptions options) {
+ this.out = out;
+ this.configurationProvider = configurationProvider;
+ this.options = options;
+ }
+
+ public void showInfo() throws ConfigurationException, FormatterException {
+ EnumSet commands = options.getShowInfo();
+
+ boolean formattinNeeded = false;
+
+ for (InfoType infoType : commands) {
+ switch (infoType) {
+ case CONNECTION:
+ case JDBC_DRIVERS:
+ case JDBC_PROPERTIES:
+ case DATABASES:
+ case FORMATTERS:
+ case FORMATTER_PROPERTIES:
+ case TYPES:
+ case JAVA_PROPERTIES:
+ case ENVIRONMENT_VARIABLES:
+ formattinNeeded = true;
+ break;
+ }
+ }
+
+ if (formattinNeeded) {
+ try (Formatter f = getFormatter()) {
+ formatter = f;
+ formatter.writeStartBatch();
+ DatabaseDefinition dd = new DatabaseDefinition();
+ dd.setName(CONFIG_DB_NAME);
+ formatter.writeStartDatabase(dd);
+ showInfos(commands);
+ formatter.writeEndDatabase();
+ formatter.writeEndBatch();
+ formatter.close();
+ }
+ } else {
+ showInfos(commands);
+ }
+ }
+
+ private void showInfos(EnumSet commands) throws ConfigurationException, FormatterException {
+ for (InfoType infoType : commands) {
+ infoType.showInfo(this);
+ }
+ }
+
+ private void listJavaProperties() throws FormatterException, ConfigurationException {
+ ColumnsHeader header = constructHeader(new HeaderField("name", SQLType.VARCHAR), new HeaderField("value", SQLType.VARCHAR));
+ List