private void generateComponentClasses(Task task)
     throws ParserConfigurationException, SAXException, IOException,
         TransformerFactoryConfigurationError, TransformerException {
   logInfo(task.getName() + ": generating component classes");
   String outputDirectory =
       task.getOutputBaseDirectory() + "/" + task.getMessageDirectory() + "/component/";
   Document document = getSpecification(task);
   List<String> componentNames = getNames(document.getDocumentElement(), "components/component");
   if (componentNames.size() > 0) {
     writePackageDocumentation(outputDirectory, "Message component classes");
   }
   Transformer transformer = createTransformer(task, "MessageSubclass.xsl");
   for (String componentName : componentNames) {
     logDebug("generating component class: " + componentName);
     Map<String, String> parameters = new HashMap<>();
     parameters.put("itemName", componentName);
     parameters.put("baseClass", "quickfix.MessageComponent");
     parameters.put("subpackage", ".component");
     parameters.put("fieldPackage", task.getFieldPackage());
     parameters.put("messagePackage", task.getMessagePackage());
     parameters.put("orderedFields", Boolean.toString(task.isOrderedFields()));
     parameters.put(XSLPARAM_SERIAL_UID, SERIAL_UID_STR);
     generateCodeFile(
         task, document, parameters, outputDirectory + componentName + ".java", transformer);
   }
 }
 private void generateFieldClasses(Task task)
     throws ParserConfigurationException, SAXException, IOException {
   String outputDirectory = task.getOutputBaseDirectory() + "/" + task.getFieldDirectory() + "/";
   logInfo(task.getName() + ": generating field classes in " + outputDirectory);
   writePackageDocumentation(outputDirectory, "FIX field definitions for " + task.getName());
   Document document = getSpecification(task);
   List<String> fieldNames = getNames(document.getDocumentElement(), "fields/field");
   try {
     Transformer transformer = createTransformer(task, "Fields.xsl");
     for (String fieldName : fieldNames) {
       String outputFile = outputDirectory + fieldName + ".java";
       if (!new File(outputFile).exists()) {
         logDebug("field: " + fieldName);
         Map<String, String> parameters = new HashMap<>();
         parameters.put("fieldName", fieldName);
         parameters.put("fieldPackage", task.getFieldPackage());
         if (task.isDecimalGenerated()) {
           parameters.put("decimalType", "java.math.BigDecimal");
           parameters.put("decimalConverter", "Decimal");
         }
         parameters.put(XSLPARAM_SERIAL_UID, SERIAL_UID_STR);
         generateCodeFile(task, document, parameters, outputFile, transformer);
       }
     }
   } catch (Exception e) {
     logError("error while generating field classes", e);
   }
 }
 private void generateClassCode(Task task, String className, Map<String, String> parameters)
     throws ParserConfigurationException, SAXException, IOException,
         TransformerFactoryConfigurationError, TransformerException {
   logDebug("generating " + className + " for " + task.getName());
   if (parameters == null) {
     parameters = new HashMap<>();
   }
   parameters.put("messagePackage", task.getMessagePackage());
   parameters.put("fieldPackage", task.getFieldPackage());
   Document document = getSpecification(task);
   generateCodeFile(
       task,
       document,
       parameters,
       task.getOutputBaseDirectory()
           + "/"
           + task.getMessageDirectory()
           + "/"
           + className
           + ".java",
       createTransformer(task, className + ".xsl"));
 }