1 package de.java2html.properties; 2 3 import java.util.Properties ; 4 import java.util.StringTokenizer ; 5 6 import de.java2html.javasource.JavaSourceType; 7 import de.java2html.options.ConversionOptionsUtilities; 8 import de.java2html.options.HorizontalAlignment; 9 import de.java2html.options.IConversionOptionsConstants; 10 import de.java2html.options.JavaSourceConversionOptions; 11 import de.java2html.options.JavaSourceStyleEntry; 12 import de.java2html.options.JavaSourceStyleTable; 13 import de.java2html.util.RGB; 14 15 18 public class ConversionOptionsPropertiesReader { 19 20 public JavaSourceConversionOptions read(Properties properties) throws IllegalPropertyValueException { 21 JavaSourceConversionOptions conversionOptions = JavaSourceConversionOptions.getRawDefault(); 22 adjustStyleTable(properties, conversionOptions); 23 adjustShowFileName(properties, conversionOptions); 24 adjustBorder(properties, conversionOptions); 25 adjustLineNumbers(properties, conversionOptions); 26 adjustShowJava2HtmlLink(properties, conversionOptions); 27 adjustTabSize(properties, conversionOptions); 28 adjustAlignment(properties, conversionOptions); 29 adjustStyleEntries(properties, conversionOptions); 30 return conversionOptions; 31 } 32 33 private void adjustAlignment(Properties properties, JavaSourceConversionOptions conversionOptions) 34 throws IllegalPropertyValueException { 35 String alignmentValue = properties.getProperty(IConversionOptionsConstants.HORIZONTAL_ALIGNMENT); 36 if (alignmentValue != null) { 37 HorizontalAlignment alignment = HorizontalAlignment.getByName(alignmentValue); 38 if (alignment == null) { 39 throw new IllegalPropertyValueException( 40 IConversionOptionsConstants.HORIZONTAL_ALIGNMENT, 41 alignmentValue, 42 ConversionOptionsUtilities.getAvailableHorizontalAlignmentNames()); 43 } 44 conversionOptions.setHorizontalAlignment(alignment); 45 } 46 } 47 48 private void adjustTabSize(Properties properties, JavaSourceConversionOptions conversionOptions) 49 throws IllegalPropertyValueException { 50 String tabSizeValue = properties.getProperty(IConversionOptionsConstants.TAB_SIZE); 51 if (tabSizeValue != null) { 52 try { 53 int tabSize = Integer.parseInt(tabSizeValue); 54 if (tabSize < 0) { 55 throw new NumberFormatException (); 56 } 57 conversionOptions.setTabSize(tabSize); 58 } 59 catch (NumberFormatException e) { 60 throw new IllegalPropertyValueException(IConversionOptionsConstants.TAB_SIZE, tabSizeValue); 61 } 62 } 63 } 64 65 private void adjustShowFileName(Properties properties, JavaSourceConversionOptions conversionOptions) 66 throws IllegalPropertyValueException { 67 String value = properties.getProperty(IConversionOptionsConstants.SHOW_FILE_NAME); 68 if (value != null) { 69 conversionOptions.setShowFileName(parseBooleanValue(IConversionOptionsConstants.SHOW_FILE_NAME, value)); 70 } 71 } 72 73 private void adjustShowJava2HtmlLink(Properties properties, JavaSourceConversionOptions conversionOptions) 74 throws IllegalPropertyValueException { 75 String value = properties.getProperty(IConversionOptionsConstants.SHOW_JAVA2HTML_LINK); 76 if (value != null) { 77 conversionOptions.setShowJava2HtmlLink( 78 parseBooleanValue(IConversionOptionsConstants.SHOW_JAVA2HTML_LINK, value)); 79 } 80 } 81 82 private void adjustLineNumbers(Properties properties, JavaSourceConversionOptions conversionOptions) 83 throws IllegalPropertyValueException { 84 String value = properties.getProperty(IConversionOptionsConstants.SHOW_LINE_NUMBERS); 85 if (value != null) { 86 conversionOptions.setShowLineNumbers( 87 parseBooleanValue(IConversionOptionsConstants.SHOW_LINE_NUMBERS, value)); 88 } 89 } 90 91 private void adjustBorder(Properties properties, JavaSourceConversionOptions conversionOptions) 92 throws IllegalPropertyValueException { 93 String value = properties.getProperty(IConversionOptionsConstants.SHOW_TABLE_BORDER); 94 if (value != null) { 95 conversionOptions.setShowTableBorder( 96 parseBooleanValue(IConversionOptionsConstants.SHOW_TABLE_BORDER, value)); 97 } 98 } 99 100 private void adjustStyleTable(Properties properties, JavaSourceConversionOptions conversionOptions) 101 throws IllegalPropertyValueException { 102 String defaultTableName = properties.getProperty(IConversionOptionsConstants.DEFAULT_STYLE_NAME); 103 if (defaultTableName != null) { 104 JavaSourceStyleTable table = JavaSourceStyleTable.getPredefinedTable(defaultTableName); 105 if (table == null) { 106 throw new IllegalPropertyValueException( 107 IConversionOptionsConstants.DEFAULT_STYLE_NAME, 108 defaultTableName, 109 ConversionOptionsUtilities.getPredefinedStyleTableNames()); 110 } 111 conversionOptions.setStyleTable(table); 112 } 113 } 114 115 private boolean parseBooleanValue(String propertyName, String value) throws IllegalPropertyValueException { 116 if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("yes")) { 117 return true; 118 } 119 if (value.equalsIgnoreCase("false") || value.equalsIgnoreCase("no")) { 120 return false; 121 } 122 throw new IllegalPropertyValueException(propertyName, value, new String [] { "true", "false" }); 123 } 124 125 private RGB parseColorValue(String propertyName, String colorValue) throws IllegalPropertyValueException { 126 StringTokenizer tokenizer = new StringTokenizer (colorValue, ","); if (tokenizer.countTokens() != 3) { 128 throw new IllegalPropertyValueException(propertyName, colorValue); 129 } 130 String redValue = tokenizer.nextToken(); 131 String greenValue = tokenizer.nextToken(); 132 String blueValue = tokenizer.nextToken(); 133 int red = 0, green = 0, blue = 0; 134 try { 135 red = Integer.parseInt(redValue); 136 green = Integer.parseInt(greenValue); 137 blue = Integer.parseInt(blueValue); 138 } 139 catch (NumberFormatException e) { 140 throw new IllegalPropertyValueException(propertyName, colorValue); 141 } 142 if (red > 255 || red < 0 || green > 255 || green < 0 || blue > 255 || blue < 0) { 143 throw new IllegalPropertyValueException(propertyName, colorValue); 144 } 145 return new RGB(red, green, blue); 146 } 147 148 private void adjustStyleEntries(Properties properties, JavaSourceConversionOptions conversionOptions) 149 throws IllegalPropertyValueException { 150 JavaSourceType[] sourceTypes = JavaSourceType.getAll(); 151 for (int i = 0; i < sourceTypes.length; i++) { 152 adjustStyleEntry(properties, conversionOptions, sourceTypes[i]); 153 } 154 } 155 156 private void adjustStyleEntry( 157 Properties properties, 158 JavaSourceConversionOptions conversionOptions, 159 JavaSourceType type) 160 throws IllegalPropertyValueException { 161 RGB color = getColor(properties, conversionOptions, type); 162 boolean bold = getBold(properties, conversionOptions, type); 163 boolean italic = getItalic(properties, conversionOptions, type); 164 conversionOptions.getStyleTable().put(type, new JavaSourceStyleEntry(color, bold, italic)); 165 } 166 167 private boolean getItalic( 168 Properties properties, 169 JavaSourceConversionOptions conversionOptions, 170 JavaSourceType type) 171 throws IllegalPropertyValueException { 172 173 String italicPropertyName = type.getName() + IConversionOptionsConstants.POSTFIX_ITALIC; 174 String italicValue = properties.getProperty(italicPropertyName); 175 if (italicValue != null) { 176 return parseBooleanValue(italicPropertyName, italicValue); 177 } 178 return conversionOptions.getStyleTable().get(type).isItalic(); 179 } 180 181 private boolean getBold( 182 Properties properties, 183 JavaSourceConversionOptions conversionOptions, 184 JavaSourceType type) 185 throws IllegalPropertyValueException { 186 String boldPropertyName = type.getName() + IConversionOptionsConstants.POSTFIX_BOLD; 187 String boldValue = properties.getProperty(boldPropertyName); 188 if (boldValue != null) { 189 return parseBooleanValue(boldPropertyName, boldValue); 190 } 191 return conversionOptions.getStyleTable().get(type).isBold(); 192 } 193 194 private RGB getColor( 195 Properties properties, 196 JavaSourceConversionOptions conversionOptions, 197 JavaSourceType type) 198 throws IllegalPropertyValueException { 199 String colorPropertyName = type.getName() + IConversionOptionsConstants.POSTFIX_COLOR; 200 String colorValue = properties.getProperty(colorPropertyName); 201 if (colorValue != null) { 202 return parseColorValue(colorPropertyName, colorValue); 203 } 204 return conversionOptions.getStyleTable().get(type).getColor(); 205 } 206 } | Popular Tags |