# HG changeset patch # User František Kučera # Date 1439632358 -7200 # Node ID d154d6012cbe49c70c9e49b3fe4000853fa21bc2 # Parent b5148f646278e11137d6e9f802bad39ded5456ee property annotations: first version (inherited properties are not working yet) diff -r b5148f646278 -r d154d6012cbe java/sql-dk/src/info/globalcode/sql/dk/InfoLister.java --- 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 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 data = new ArrayList<>(); + + Class formatterClass = (Class) 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 parameters = new ArrayList<>(); - parameters.add(new NamedParameter("formatter", formatterName, SQLType.VARCHAR)); + List 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 { diff -r b5148f646278 -r d154d6012cbe java/sql-dk/src/info/globalcode/sql/dk/configuration/PropertyDeclaration.java --- 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 */ diff -r b5148f646278 -r d154d6012cbe java/sql-dk/src/info/globalcode/sql/dk/formatting/CommonProperties.java --- 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 TYPE_SIMPLE_NAMES; + + static { + Map 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)"; }