public void format(FormatterContext context, Collection updateTypes, String[] levels) {
   if (updateTypes.size() == 0) {
     return;
   }
   TagBuilder tag =
       new TagBuilder(context.getWriter(), "METADATA-UPDATE_TYPE")
           .appendAttribute("Resource", levels[RESOURCE_LEVEL])
           .appendAttribute("Class", levels[CLASS_LEVEL])
           .appendAttribute("Update", levels[UPDATE_LEVEL])
           .appendAttribute("Version", context.getVersion())
           .appendAttribute("Date", context.getDate())
           .beginContentOnNewLine()
           .appendColumns(COLUMNS);
   for (Iterator iterator = updateTypes.iterator(); iterator.hasNext(); ) {
     UpdateType updateType = (UpdateType) iterator.next();
     apppendDataRow(context, updateType);
   }
   tag.close();
 }
 private void apppendDataRow(FormatterContext context, UpdateType updateType) {
   DataRowBuilder row = new DataRowBuilder(context.getWriter());
   row.begin();
   row.append(updateType.getTable().getSystemName());
   row.append(updateType.getSequence());
   row.append(updateType.getAttributes());
   row.append(updateType.getDefault());
   row.append(updateType.getValidationExpressions());
   row.append(updateType.getUpdateHelp());
   row.append(updateType.getValidationLookup());
   row.append(updateType.getValidationExternal());
   row.end();
 }
  private void appendDataRow(FormatterContext context, MForeignKey foreignKey) {
    DataRowBuilder row = new DataRowBuilder(context.getWriter());
    row.begin();

    row.append(foreignKey.getForeignKeyID());

    row.append(foreignKey.getParentResourceID());
    row.append(foreignKey.getParentClassID());
    row.append(foreignKey.getParentSystemName());

    row.append(foreignKey.getChildResourceID());
    row.append(foreignKey.getChildClassID());
    row.append(foreignKey.getChildSystemName());

    // 1.7.2
    row.append(foreignKey.getConditionalParentField());
    row.append(foreignKey.getConditionalParentValue());

    row.end();
  }
  public void format(
      FormatterContext context, Collection<MetaObject> foreignKeys, String[] levels) {
    RetsVersion retsVersion = context.getRetsVersion();
    if (foreignKeys.size() == 0) {
      return;
    }
    TagBuilder tag;

    // 1.7.2 DTD makes changes.
    if (retsVersion.equals(RetsVersion.RETS_1_0)
        || retsVersion.equals(RetsVersion.RETS_1_5)
        || retsVersion.equals(RetsVersion.RETS_1_7)) {
      /*
       * RETS 1.5 spec indicates that Version and Date should be
       * attributes of the METADATA-FOREIGNKEYS tag. However, the 1.5 DTD
       * does not list these in the attribute list.
       */
      tag =
          new TagBuilder(context.getWriter(), "METADATA-FOREIGNKEYS")
              .beginContentOnNewLine()
              .appendColumns(COLUMNS);
    } else {
      // TODO: RETS 1.7.2 spec says tag should be METADATA-FOREIGN_KEYS
      // instead of METADATA-FOREIGNKEYS.
      tag =
          new TagBuilder(context.getWriter(), "METADATA-FOREIGNKEYS")
              .appendAttribute("Version", context.getVersion())
              .appendAttribute("Date", context.getDate(), context.getRetsVersion())
              .beginContentOnNewLine()
              .appendColumns(COLUMNS);
    }
    for (Iterator<?> iterator = foreignKeys.iterator(); iterator.hasNext(); ) {
      MForeignKey foreignKey = (MForeignKey) iterator.next();
      appendDataRow(context, foreignKey);
    }
    tag.close();
  }