예제 #1
0
  /**
   * Finds the file name extension.
   *
   * @param language
   * @return Returns the file extension.
   */
  protected String getFileExtensionForLanguage(String language) {
    Map languageSpecificPropertyMap =
        (Map) ConfigPropertyFileLoader.getLanguageSpecificPropertiesMap().get(this.language);
    Iterator keys = languageSpecificPropertyMap.keySet().iterator();
    String key;
    String extension = null;
    while (keys.hasNext()) {
      // check for template entries
      key = keys.next().toString();
      if (key.endsWith(EXTENSION_SUFFIX)) {
        extension = languageSpecificPropertyMap.get(key).toString();
        // add a . to the front
        extension = "." + extension;
      }
    }

    return extension;
  }
예제 #2
0
  /** Loads the template. */
  public void loadTemplate() throws CodeGenerationException {
    // the default behavior for the class writers is to use the property map from the languge
    // specific types
    // The properties are arranged in the following order
    // <lang-name>.* .template=<write-class>,<template-name>

    // first get the language specific property map
    Class clazz = this.getClass();
    Map languageSpecificPropertyMap =
        (Map) ConfigPropertyFileLoader.getLanguageSpecificPropertiesMap().get(this.language);
    if (languageSpecificPropertyMap == null) {
      throw new CodeGenerationException(
          CodegenMessages.getMessage("writer.noLangPropertiesExtension"));
    }

    String templateName = findTemplate(languageSpecificPropertyMap);
    if (templateName != null) {
      this.xsltStream = clazz.getResourceAsStream(templateName);
    } else {
      throw new CodeGenerationException(CodegenMessages.getMessage("writer.templateMissing"));
    }
  }
예제 #3
0
public abstract class FileWriter {

  private static final Log log = LogFactory.getLog(FileWriter.class);

  protected File outputFileLocation = null;
  protected File outputFile = null;
  protected FileOutputStream stream = null;
  protected InputStream xsltStream = null;
  protected String language = ConfigPropertyFileLoader.getDefaultLanguage(); // default would java

  protected static final String TEMPLATE_SUFFIX = ".template";
  protected static final String EXTENSION_SUFFIX = ".extension";
  protected static final String SEPARATOR_STRING = ",";

  protected boolean fileExists = false; // a flag saying the file is existing
  protected boolean isOverride = false;

  /**
   * Sets the language.
   *
   * @param language
   */
  public void setLanguage(String language) {
    this.language = language;
  }

  /** Loads the template. */
  public void loadTemplate() throws CodeGenerationException {
    // the default behavior for the class writers is to use the property map from the languge
    // specific types
    // The properties are arranged in the following order
    // <lang-name>.* .template=<write-class>,<template-name>

    // first get the language specific property map
    Class clazz = this.getClass();
    Map languageSpecificPropertyMap =
        (Map) ConfigPropertyFileLoader.getLanguageSpecificPropertiesMap().get(this.language);
    if (languageSpecificPropertyMap == null) {
      throw new CodeGenerationException(
          CodegenMessages.getMessage("writer.noLangPropertiesExtension"));
    }

    String templateName = findTemplate(languageSpecificPropertyMap);
    if (templateName != null) {
      this.xsltStream = clazz.getResourceAsStream(templateName);
    } else {
      throw new CodeGenerationException(CodegenMessages.getMessage("writer.templateMissing"));
    }
  }

  protected String findTemplate(Map languageSpecificPropertyMap) {
    // search through the proprty names to find the template relevant to this class

    String ownClazzName = this.getClass().getName();
    String key;
    String propertyValue;
    String templateName = null;
    Iterator keys = languageSpecificPropertyMap.keySet().iterator();

    while (keys.hasNext()) {
      // check for template entries
      key = keys.next().toString();
      if (key.endsWith(TEMPLATE_SUFFIX)) {
        // check if the class name is there
        propertyValue = languageSpecificPropertyMap.get(key).toString();
        if (propertyValue.startsWith(ownClazzName)) {
          // bingo! we found the right template
          templateName = propertyValue.substring(propertyValue.indexOf(SEPARATOR_STRING) + 1);
          break;
        }
      }
    }
    return templateName;
  }

  /**
   * Creates the output file.
   *
   * @param packageName
   * @param fileName
   * @throws Exception
   */
  public void createOutFile(String packageName, String fileName) throws Exception {
    outputFile =
        org.apache.axis2.util.FileWriter.createClassFile(
            outputFileLocation, packageName, fileName, getFileExtensionForLanguage(language));
    // set the existing flag
    if (this.isOverride) {
      this.stream = new FileOutputStream(outputFile);
    } else {
      fileExists = outputFile.exists();
      if (!fileExists) {
        this.stream = new FileOutputStream(outputFile);
      } else {
        log.info(Messages.getMessage("fileExistsNoOverwrite", outputFile.toString()));
      }
    }
  }

  /**
   * Finds the file name extension.
   *
   * @param language
   * @return Returns the file extension.
   */
  protected String getFileExtensionForLanguage(String language) {
    Map languageSpecificPropertyMap =
        (Map) ConfigPropertyFileLoader.getLanguageSpecificPropertiesMap().get(this.language);
    Iterator keys = languageSpecificPropertyMap.keySet().iterator();
    String key;
    String extension = null;
    while (keys.hasNext()) {
      // check for template entries
      key = keys.next().toString();
      if (key.endsWith(EXTENSION_SUFFIX)) {
        extension = languageSpecificPropertyMap.get(key).toString();
        // add a . to the front
        extension = "." + extension;
      }
    }

    return extension;
  }

  /**
   * Writes the output file.
   *
   * @param doc
   * @throws Exception
   */
  public void parse(Document doc, URIResolver resolver) throws Exception {
    if (!fileExists || this.isOverride()) {
      XSLTTemplateProcessor.parse(this.stream, doc, this.xsltStream, resolver);
      this.stream.flush();
      this.stream.close();
    }
  }

  public boolean isOverride() {
    return isOverride;
  }

  public void setOverride(boolean override) {
    isOverride = override;
  }

  public File getOutputFile() {
    return outputFile;
  }

  public void setOutputFile(File outputFile) {
    this.outputFile = outputFile;
  }
}