Open Source Repository

Home /web/java2html | Repository Home



de/java2html/properties/ConversionOptionsPropertiesReader.java
package de.java2html.properties;

import java.util.Properties;
import java.util.StringTokenizer;

import de.java2html.javasource.JavaSourceType;
import de.java2html.options.ConversionOptionsUtilities;
import de.java2html.options.HorizontalAlignment;
import de.java2html.options.IConversionOptionsConstants;
import de.java2html.options.JavaSourceConversionOptions;
import de.java2html.options.JavaSourceStyleEntry;
import de.java2html.options.JavaSourceStyleTable;
import de.java2html.util.RGB;

/**
 @author Markus Gebhard
 */
public class ConversionOptionsPropertiesReader {

  public JavaSourceConversionOptions read(Properties propertiesthrows IllegalPropertyValueException {
    JavaSourceConversionOptions conversionOptions = JavaSourceConversionOptions.getRawDefault();
    adjustStyleTable(properties, conversionOptions);
    adjustShowFileName(properties, conversionOptions);
    adjustBorder(properties, conversionOptions);
    adjustLineNumbers(properties, conversionOptions);
    adjustShowJava2HtmlLink(properties, conversionOptions);
    adjustTabSize(properties, conversionOptions);
    adjustAlignment(properties, conversionOptions);
    adjustStyleEntries(properties, conversionOptions);
    return conversionOptions;
  }

  private void adjustAlignment(Properties properties, JavaSourceConversionOptions conversionOptions)
    throws IllegalPropertyValueException {
    String alignmentValue = properties.getProperty(IConversionOptionsConstants.HORIZONTAL_ALIGNMENT);
    if (alignmentValue != null) {
      HorizontalAlignment alignment = HorizontalAlignment.getByName(alignmentValue);
      if (alignment == null) {
        throw new IllegalPropertyValueException(
          IConversionOptionsConstants.HORIZONTAL_ALIGNMENT,
          alignmentValue,
          ConversionOptionsUtilities.getAvailableHorizontalAlignmentNames());
      }
      conversionOptions.setHorizontalAlignment(alignment);
    }
  }

  private void adjustTabSize(Properties properties, JavaSourceConversionOptions conversionOptions)
    throws IllegalPropertyValueException {
    String tabSizeValue = properties.getProperty(IConversionOptionsConstants.TAB_SIZE);
    if (tabSizeValue != null) {
      try {
        int tabSize = Integer.parseInt(tabSizeValue);
        if (tabSize < 0) {
          throw new NumberFormatException();
        }
        conversionOptions.setTabSize(tabSize);
      }
      catch (NumberFormatException e) {
        throw new IllegalPropertyValueException(IConversionOptionsConstants.TAB_SIZE, tabSizeValue);
      }
    }
  }

  private void adjustShowFileName(Properties properties, JavaSourceConversionOptions conversionOptions)
    throws IllegalPropertyValueException {
    String value = properties.getProperty(IConversionOptionsConstants.SHOW_FILE_NAME);
    if (value != null) {
      conversionOptions.setShowFileName(parseBooleanValue(IConversionOptionsConstants.SHOW_FILE_NAME, value));
    }
  }

  private void adjustShowJava2HtmlLink(Properties properties, JavaSourceConversionOptions conversionOptions)
    throws IllegalPropertyValueException {
    String value = properties.getProperty(IConversionOptionsConstants.SHOW_JAVA2HTML_LINK);
    if (value != null) {
      conversionOptions.setShowJava2HtmlLink(
        parseBooleanValue(IConversionOptionsConstants.SHOW_JAVA2HTML_LINK, value));
    }
  }

  private void adjustLineNumbers(Properties properties, JavaSourceConversionOptions conversionOptions)
    throws IllegalPropertyValueException {
    String value = properties.getProperty(IConversionOptionsConstants.SHOW_LINE_NUMBERS);
    if (value != null) {
      conversionOptions.setShowLineNumbers(
        parseBooleanValue(IConversionOptionsConstants.SHOW_LINE_NUMBERS, value));
    }
  }

  private void adjustBorder(Properties properties, JavaSourceConversionOptions conversionOptions)
    throws IllegalPropertyValueException {
    String value = properties.getProperty(IConversionOptionsConstants.SHOW_TABLE_BORDER);
    if (value != null) {
      conversionOptions.setShowTableBorder(
        parseBooleanValue(IConversionOptionsConstants.SHOW_TABLE_BORDER, value));
    }
  }

  private void adjustStyleTable(Properties properties, JavaSourceConversionOptions conversionOptions)
    throws IllegalPropertyValueException {
    String defaultTableName = properties.getProperty(IConversionOptionsConstants.DEFAULT_STYLE_NAME);
    if (defaultTableName != null) {
      JavaSourceStyleTable table = JavaSourceStyleTable.getPredefinedTable(defaultTableName);
      if (table == null) {
        throw new IllegalPropertyValueException(
          IConversionOptionsConstants.DEFAULT_STYLE_NAME,
          defaultTableName,
          ConversionOptionsUtilities.getPredefinedStyleTableNames());
      }
      conversionOptions.setStyleTable(table);
    }
  }

  private boolean parseBooleanValue(String propertyName, String valuethrows IllegalPropertyValueException {
    if (value.equalsIgnoreCase("true"|| value.equalsIgnoreCase("yes")) {
      return true;
    }
    if (value.equalsIgnoreCase("false"|| value.equalsIgnoreCase("no")) {
      return false;
    }
    throw new IllegalPropertyValueException(propertyName, value, new String[] { "true""false" });
  }

  private RGB parseColorValue(String propertyName, String colorValuethrows IllegalPropertyValueException {
    StringTokenizer tokenizer = new StringTokenizer(colorValue, ",")//$NON-NLS-1$
    if (tokenizer.countTokens() != 3) {
      throw new IllegalPropertyValueException(propertyName, colorValue);
    }
    String redValue = tokenizer.nextToken();
    String greenValue = tokenizer.nextToken();
    String blueValue = tokenizer.nextToken();
    int red = 0, green = 0, blue = 0;
    try {
      red = Integer.parseInt(redValue);
      green = Integer.parseInt(greenValue);
      blue = Integer.parseInt(blueValue);
    }
    catch (NumberFormatException e) {
      throw new IllegalPropertyValueException(propertyName, colorValue);
    }
    if (red > 255 || red < || green > 255 || green < || blue > 255 || blue < 0) {
      throw new IllegalPropertyValueException(propertyName, colorValue);
    }
    return new RGB(red, green, blue);
  }

  private void adjustStyleEntries(Properties properties, JavaSourceConversionOptions conversionOptions)
    throws IllegalPropertyValueException {
    JavaSourceType[] sourceTypes = JavaSourceType.getAll();
    for (int i = 0; i < sourceTypes.length; i++) {
      adjustStyleEntry(properties, conversionOptions, sourceTypes[i]);
    }
  }

  private void adjustStyleEntry(
    Properties properties,
    JavaSourceConversionOptions conversionOptions,
    JavaSourceType type)
    throws IllegalPropertyValueException {
    RGB color = getColor(properties, conversionOptions, type);
    boolean bold = getBold(properties, conversionOptions, type);
    boolean italic = getItalic(properties, conversionOptions, type);
    conversionOptions.getStyleTable().put(type, new JavaSourceStyleEntry(color, bold, italic));
  }

  private boolean getItalic(
    Properties properties,
    JavaSourceConversionOptions conversionOptions,
    JavaSourceType type)
    throws IllegalPropertyValueException {

    String italicPropertyName = type.getName() + IConversionOptionsConstants.POSTFIX_ITALIC;
    String italicValue = properties.getProperty(italicPropertyName);
    if (italicValue != null) {
      return parseBooleanValue(italicPropertyName, italicValue);
    }
    return conversionOptions.getStyleTable().get(type).isItalic();
  }

  private boolean getBold(
    Properties properties,
    JavaSourceConversionOptions conversionOptions,
    JavaSourceType type)
    throws IllegalPropertyValueException {
    String boldPropertyName = type.getName() + IConversionOptionsConstants.POSTFIX_BOLD;
    String boldValue = properties.getProperty(boldPropertyName);
    if (boldValue != null) {
      return parseBooleanValue(boldPropertyName, boldValue);
    }
    return conversionOptions.getStyleTable().get(type).isBold();
  }

  private RGB getColor(
    Properties properties,
    JavaSourceConversionOptions conversionOptions,
    JavaSourceType type)
    throws IllegalPropertyValueException {
    String colorPropertyName = type.getName() + IConversionOptionsConstants.POSTFIX_COLOR;
    String colorValue = properties.getProperty(colorPropertyName);
    if (colorValue != null) {
      return parseColorValue(colorPropertyName, colorValue);
    }
    return conversionOptions.getStyleTable().get(type).getColor();
  }
}