--- a/java/sql-dk/src/info/globalcode/sql/dk/InfoLister.java Sat Aug 15 11:07:50 2015 +0200
+++ b/java/sql-dk/src/info/globalcode/sql/dk/InfoLister.java Sat Aug 15 11:52:38 2015 +0200
@@ -25,8 +25,11 @@
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.PropertyDeclarations;
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;
@@ -184,23 +187,52 @@
}
private void listFormatterProperties(String formatterName) throws FormatterException, ConfigurationException {
- ColumnsHeader header = constructHeader(
- new HeaderField("name", SQLType.VARCHAR),
- new HeaderField("type", SQLType.VARCHAR),
- new HeaderField("default", SQLType.VARCHAR),
- new HeaderField("description", SQLType.VARCHAR)
- );
- List<Object[]> data = new ArrayList<>();
+ FormatterDefinition fd = configurationProvider.getConfiguration().getFormatter(formatterName);
+ try {
+
+ ColumnsHeader header = constructHeader(
+ new HeaderField("name", SQLType.VARCHAR),
+ new HeaderField("type", SQLType.VARCHAR),
+ new HeaderField("default", SQLType.VARCHAR),
+ new HeaderField("description", SQLType.VARCHAR)
+ );
+ List<Object[]> data = new ArrayList<>();
+
+ Class<Formatter> formatterClass = (Class<Formatter>) Class.forName(fd.getClassName());
- data.add(new Object[]{"TODO", "a", "b", "c"});
- data.add(new Object[]{"TODO", "a", "b", "c"});
- data.add(new Object[]{"TODO", "a", "b", "c"});
- data.add(new Object[]{"TODO", "a", "b", "c"});
+ // TOOD: formatterClass.getDeclaredAnnotation(PropertyDeclarations.class); and separate inherited properties
+ // Repeated PropertyDeclaration wrapped in PropertyDeclarations
+ PropertyDeclarations properties = formatterClass.getAnnotation(PropertyDeclarations.class);
+ if (properties == null) {
+ log.log(Level.WARNING, "Formatter „{0}“ has no declared properties", formatterName);
+ } else {
+ for (PropertyDeclaration p : properties.value()) {
+ data.add(propertyDeclarationToRow(p));
+ }
+ }
+
+ // Single PropertyDeclaration
+ PropertyDeclaration property = formatterClass.getAnnotation(PropertyDeclaration.class);
+ if (property != null) {
+ data.add(propertyDeclarationToRow(property));
+ }
- List<Parameter> parameters = new ArrayList<>();
- parameters.add(new NamedParameter("formatter", formatterName, SQLType.VARCHAR));
+ List<Parameter> parameters = new ArrayList<>();
+ parameters.add(new NamedParameter("formatter", formatterName, SQLType.VARCHAR));
- printTable(formatter, header, "-- formatter properties", parameters, data);
+ printTable(formatter, header, "-- formatter properties", parameters, data);
+ } catch (ClassNotFoundException e) {
+ throw new ConfigurationException("Unable to find class " + fd.getClassName() + " of formatter" + fd.getName(), e);
+ }
+ }
+
+ private static Object[] propertyDeclarationToRow(PropertyDeclaration p) {
+ return new Object[]{
+ p.name(),
+ CommonProperties.getSimpleTypeName(p.type()),
+ p.defaultValue(),
+ p.description()
+ };
}
private void listTypes() throws FormatterException, ConfigurationException {
--- a/java/sql-dk/src/info/globalcode/sql/dk/configuration/PropertyDeclaration.java Sat Aug 15 11:07:50 2015 +0200
+++ b/java/sql-dk/src/info/globalcode/sql/dk/configuration/PropertyDeclaration.java Sat Aug 15 11:52:38 2015 +0200
@@ -44,7 +44,7 @@
* @return data type of the value: String, numbers, Boolean or Enum
*/
Class type();
-
+
/**
* @return documentation for the users
*/
--- a/java/sql-dk/src/info/globalcode/sql/dk/formatting/CommonProperties.java Sat Aug 15 11:07:50 2015 +0200
+++ b/java/sql-dk/src/info/globalcode/sql/dk/formatting/CommonProperties.java Sat Aug 15 11:52:38 2015 +0200
@@ -17,12 +17,34 @@
*/
package info.globalcode.sql.dk.formatting;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
/**
*
* @author Ing. František Kučera (frantovo.cz)
*/
public class CommonProperties {
+ private static final Map<Class, String> TYPE_SIMPLE_NAMES;
+
+ static {
+ Map<Class, String> m = new HashMap<>();
+ m.put(Boolean.class, "boolean");
+ m.put(String.class, "String");
+ m.put(Character.class, "char");
+ m.put(Integer.class, "int");
+ m.put(Long.class, "long");
+ m.put(Double.class, "double");
+ TYPE_SIMPLE_NAMES = Collections.unmodifiableMap(m);
+ }
+
+ public static String getSimpleTypeName(Class type) {
+ String name = TYPE_SIMPLE_NAMES.get(type);
+ return name == null ? type.getName() : name;
+ }
+
public static final String COLORFUL = "color";
- public static final String COLORFUL_DESCRIPTION = "whether the output should be printed in color (escape sequences)";
+ public static final String COLORFUL_DESCRIPTION = "whether the output should be printed in color (ANSI Escape Sequences)";
}