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