001 package de.java2html.properties;
002
003 import java.util.Properties;
004 import java.util.StringTokenizer;
005
006 import de.java2html.javasource.SourceType;
007 import de.java2html.options.ConversionOptionsUtilities;
008 import de.java2html.options.HorizontalAlignment;
009 import de.java2html.options.IConversionOptionsConstants;
010 import de.java2html.options.JavaSourceConversionOptions;
011 import de.java2html.options.JavaSourceStyleEntry;
012 import de.java2html.options.JavaSourceStyleTable;
013 import de.java2html.util.RGB;
014
015 /**
016 * @author Markus Gebhard
017 */
018 public class ConversionOptionsPropertiesReader {
019
020 public JavaSourceConversionOptions read(Properties properties) throws IllegalPropertyValueException {
021 final JavaSourceConversionOptions conversionOptions = JavaSourceConversionOptions.getRawDefault();
022 adjustStyleTable(properties, conversionOptions);
023 adjustShowFileName(properties, conversionOptions);
024 adjustBorder(properties, conversionOptions);
025 adjustLineNumbers(properties, conversionOptions);
026 adjustShowJava2HtmlLink(properties, conversionOptions);
027 adjustTabSize(properties, conversionOptions);
028 adjustAlignment(properties, conversionOptions);
029 adjustStyleEntries(properties, conversionOptions);
030 return conversionOptions;
031 }
032
033 private void adjustAlignment(Properties properties, JavaSourceConversionOptions conversionOptions)
034 throws IllegalPropertyValueException {
035 final String alignmentValue = properties.getProperty(IConversionOptionsConstants.HORIZONTAL_ALIGNMENT);
036 if (alignmentValue != null) {
037 final HorizontalAlignment alignment = HorizontalAlignment.getByName(alignmentValue);
038 if (alignment == null) {
039 throw new IllegalPropertyValueException(
040 IConversionOptionsConstants.HORIZONTAL_ALIGNMENT,
041 alignmentValue,
042 ConversionOptionsUtilities.getAvailableHorizontalAlignmentNames());
043 }
044 conversionOptions.setHorizontalAlignment(alignment);
045 }
046 }
047
048 private void adjustTabSize(Properties properties, JavaSourceConversionOptions conversionOptions)
049 throws IllegalPropertyValueException {
050 final String tabSizeValue = properties.getProperty(IConversionOptionsConstants.TAB_SIZE);
051 if (tabSizeValue != null) {
052 try {
053 final int tabSize = Integer.parseInt(tabSizeValue);
054 if (tabSize < 0) {
055 throw new NumberFormatException();
056 }
057 conversionOptions.setTabSize(tabSize);
058 }
059 catch (final NumberFormatException e) {
060 throw new IllegalPropertyValueException(IConversionOptionsConstants.TAB_SIZE, tabSizeValue);
061 }
062 }
063 }
064
065 private void adjustShowFileName(Properties properties, JavaSourceConversionOptions conversionOptions)
066 throws IllegalPropertyValueException {
067 final String value = properties.getProperty(IConversionOptionsConstants.SHOW_FILE_NAME);
068 if (value != null) {
069 conversionOptions.setShowFileName(parseBooleanValue(IConversionOptionsConstants.SHOW_FILE_NAME, value));
070 }
071 }
072
073 private void adjustShowJava2HtmlLink(Properties properties, JavaSourceConversionOptions conversionOptions)
074 throws IllegalPropertyValueException {
075 final String value = properties.getProperty(IConversionOptionsConstants.SHOW_JAVA2HTML_LINK);
076 if (value != null) {
077 conversionOptions.setShowJava2HtmlLink(
078 parseBooleanValue(IConversionOptionsConstants.SHOW_JAVA2HTML_LINK, value));
079 }
080 }
081
082 private void adjustLineNumbers(Properties properties, JavaSourceConversionOptions conversionOptions)
083 throws IllegalPropertyValueException {
084 final String value = properties.getProperty(IConversionOptionsConstants.SHOW_LINE_NUMBERS);
085 if (value != null) {
086 conversionOptions.setShowLineNumbers(
087 parseBooleanValue(IConversionOptionsConstants.SHOW_LINE_NUMBERS, value));
088 }
089 }
090
091 private void adjustBorder(Properties properties, JavaSourceConversionOptions conversionOptions)
092 throws IllegalPropertyValueException {
093 final String value = properties.getProperty(IConversionOptionsConstants.SHOW_TABLE_BORDER);
094 if (value != null) {
095 conversionOptions.setShowTableBorder(
096 parseBooleanValue(IConversionOptionsConstants.SHOW_TABLE_BORDER, value));
097 }
098 }
099
100 private void adjustStyleTable(Properties properties, JavaSourceConversionOptions conversionOptions)
101 throws IllegalPropertyValueException {
102 final String defaultTableName = properties.getProperty(IConversionOptionsConstants.DEFAULT_STYLE_NAME);
103 if (defaultTableName != null) {
104 final 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 final StringTokenizer tokenizer = new StringTokenizer(colorValue, ","); //$NON-NLS-1$
127 if (tokenizer.countTokens() != 3) {
128 throw new IllegalPropertyValueException(propertyName, colorValue);
129 }
130 final String redValue = tokenizer.nextToken();
131 final String greenValue = tokenizer.nextToken();
132 final 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 (final 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 final SourceType[] sourceTypes = SourceType.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 SourceType type)
160 throws IllegalPropertyValueException {
161 final RGB color = getColor(properties, conversionOptions, type);
162 final boolean bold = getBold(properties, conversionOptions, type);
163 final 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 SourceType type)
171 throws IllegalPropertyValueException {
172
173 final String italicPropertyName = type.getName() + IConversionOptionsConstants.POSTFIX_ITALIC;
174 final 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 SourceType type)
185 throws IllegalPropertyValueException {
186 final String boldPropertyName = type.getName() + IConversionOptionsConstants.POSTFIX_BOLD;
187 final 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 SourceType type)
198 throws IllegalPropertyValueException {
199 final String colorPropertyName = type.getName() + IConversionOptionsConstants.POSTFIX_COLOR;
200 final String colorValue = properties.getProperty(colorPropertyName);
201 if (colorValue != null) {
202 return parseColorValue(colorPropertyName, colorValue);
203 }
204 return conversionOptions.getStyleTable().get(type).getColor();
205 }
206 }
|