java/sql-dk/src/info/globalcode/sql/dk/InfoLister.java
branchv_0
changeset 160 84ea4a819fb2
parent 159 9632b23df30c
child 161 385929a50dd9
equal deleted inserted replaced
159:9632b23df30c 160:84ea4a819fb2
    20 import info.globalcode.sql.dk.configuration.Configuration;
    20 import info.globalcode.sql.dk.configuration.Configuration;
    21 import info.globalcode.sql.dk.configuration.ConfigurationException;
    21 import info.globalcode.sql.dk.configuration.ConfigurationException;
    22 import info.globalcode.sql.dk.configuration.ConfigurationProvider;
    22 import info.globalcode.sql.dk.configuration.ConfigurationProvider;
    23 import info.globalcode.sql.dk.configuration.DatabaseDefinition;
    23 import info.globalcode.sql.dk.configuration.DatabaseDefinition;
    24 import info.globalcode.sql.dk.configuration.FormatterDefinition;
    24 import info.globalcode.sql.dk.configuration.FormatterDefinition;
       
    25 import info.globalcode.sql.dk.configuration.Properties;
    25 import info.globalcode.sql.dk.configuration.Property;
    26 import info.globalcode.sql.dk.configuration.Property;
    26 import info.globalcode.sql.dk.formatting.ColumnsHeader;
    27 import info.globalcode.sql.dk.formatting.ColumnsHeader;
    27 import info.globalcode.sql.dk.formatting.FakeSqlArray;
    28 import info.globalcode.sql.dk.formatting.FakeSqlArray;
    28 import info.globalcode.sql.dk.formatting.Formatter;
    29 import info.globalcode.sql.dk.formatting.Formatter;
    29 import info.globalcode.sql.dk.formatting.FormatterContext;
    30 import info.globalcode.sql.dk.formatting.FormatterContext;
    30 import info.globalcode.sql.dk.formatting.FormatterException;
    31 import info.globalcode.sql.dk.formatting.FormatterException;
    31 import java.io.BufferedReader;
    32 import java.io.BufferedReader;
       
    33 import java.io.ByteArrayInputStream;
       
    34 import java.io.ByteArrayOutputStream;
    32 import java.io.InputStreamReader;
    35 import java.io.InputStreamReader;
    33 import java.io.PrintStream;
    36 import java.io.PrintStream;
    34 import java.sql.Array;
    37 import java.sql.Array;
    35 import java.sql.Driver;
    38 import java.sql.Driver;
    36 import java.sql.DriverPropertyInfo;
    39 import java.sql.DriverPropertyInfo;
   112 	private void listFormatters() throws ConfigurationException, FormatterException {
   115 	private void listFormatters() throws ConfigurationException, FormatterException {
   113 		ColumnsHeader header = constructHeader(
   116 		ColumnsHeader header = constructHeader(
   114 				new HeaderField("name", SQLType.VARCHAR),
   117 				new HeaderField("name", SQLType.VARCHAR),
   115 				new HeaderField("built_in", SQLType.BOOLEAN),
   118 				new HeaderField("built_in", SQLType.BOOLEAN),
   116 				new HeaderField("default", SQLType.BOOLEAN),
   119 				new HeaderField("default", SQLType.BOOLEAN),
   117 				new HeaderField("class_name", SQLType.VARCHAR));
   120 				new HeaderField("class_name", SQLType.VARCHAR),
       
   121 				new HeaderField("valid", SQLType.BOOLEAN));
   118 		List<Object[]> data = new ArrayList<>();
   122 		List<Object[]> data = new ArrayList<>();
   119 
   123 
   120 		String defaultFormatter = configurationProvider.getConfiguration().getDefaultFormatter();
   124 		String defaultFormatter = configurationProvider.getConfiguration().getDefaultFormatter();
   121 		defaultFormatter = defaultFormatter == null ? Configuration.DEFAULT_FORMATTER : defaultFormatter;
   125 		defaultFormatter = defaultFormatter == null ? Configuration.DEFAULT_FORMATTER : defaultFormatter;
   122 
   126 
   123 		for (FormatterDefinition fd : configurationProvider.getConfiguration().getBuildInFormatters()) {
   127 		for (FormatterDefinition fd : configurationProvider.getConfiguration().getBuildInFormatters()) {
   124 			data.add(new Object[]{fd.getName(), true, defaultFormatter.equals(fd.getName()), fd.getClassName()});
   128 			data.add(new Object[]{fd.getName(), true, defaultFormatter.equals(fd.getName()), fd.getClassName(), isInstantiable(fd)});
   125 		}
   129 		}
   126 
   130 
   127 		for (FormatterDefinition fd : configurationProvider.getConfiguration().getFormatters()) {
   131 		for (FormatterDefinition fd : configurationProvider.getConfiguration().getFormatters()) {
   128 			data.add(new Object[]{fd.getName(), false, defaultFormatter.equals(fd.getName()), fd.getClassName()});
   132 			data.add(new Object[]{fd.getName(), false, defaultFormatter.equals(fd.getName()), fd.getClassName(), isInstantiable(fd)});
   129 		}
   133 		}
   130 
   134 
   131 		printTable(formatter, header, data, "-- configured and built-in output formatters", null);
   135 		printTable(formatter, header, data, "-- configured and built-in output formatters", null);
   132 
   136 	}
   133 
   137 
       
   138 	private boolean isInstantiable(FormatterDefinition fd) {
       
   139 		try {
       
   140 			try (ByteArrayOutputStream testStream = new ByteArrayOutputStream()) {
       
   141 				fd.getInstance(new FormatterContext(testStream, new Properties(0)));
       
   142 				return true;
       
   143 			}
       
   144 		} catch (Exception e) {
       
   145 			log.log(Level.SEVERE, "Unable to create an instance of formatter: " + fd.getName(), e);
       
   146 			return false;
       
   147 		}
   134 	}
   148 	}
   135 
   149 
   136 	public void listTypes() throws FormatterException, ConfigurationException {
   150 	public void listTypes() throws FormatterException, ConfigurationException {
   137 		ColumnsHeader header = constructHeader(new HeaderField("name", SQLType.VARCHAR), new HeaderField("code", SQLType.INTEGER));
   151 		ColumnsHeader header = constructHeader(new HeaderField("name", SQLType.VARCHAR), new HeaderField("code", SQLType.INTEGER));
   138 		List<Object[]> data = new ArrayList<>();
   152 		List<Object[]> data = new ArrayList<>();