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();
 }
  public void doUpdateType(Session hSession) throws HibernateException {
    MetadataTable tUpdateTypes = getMetadataTable(MetadataTable.UPDATE_TYPE);

    Iterator i = mUpdates.values().iterator();
    while (i.hasNext()) {
      Update update = (Update) i.next();
      Set hUpdateTypes = new HashSet();
      List updateTypes = tUpdateTypes.getDataRows(update.getPath());
      if (updateTypes != null) {
        Iterator j = updateTypes.iterator();
        while (j.hasNext()) {
          Metadata md = (Metadata) j.next();
          UpdateType updateType = new UpdateType();

          updateType.setUpdate(update);
          String level = update.getLevel();
          String systemName = md.getAttribute("SystemName");
          String tablePath = level + ":" + systemName;
          Table table = (Table) mTables.get(tablePath);
          updateType.setTable(table);
          // Hack to get around metadata bug
          if (table == null) {
            LOG.error("null table for path: " + tablePath);
            System.exit(1);
          }

          updateType.setSequence(Integer.parseInt(md.getAttribute("Sequence")));

          String joinedAttributes = md.getAttribute("Attributes");
          String attributes[] = StringUtils.split(joinedAttributes, ",");
          Set attributeSet = new HashSet();
          for (int c = 0; c < attributes.length; c++) {
            attributeSet.add(UpdateTypeAttributeEnum.fromInt(Integer.parseInt(attributes[c])));
          }
          updateType.setAttributes(attributeSet);

          updateType.setDefault(md.getAttribute("Default"));

          String valExp[] = StringUtils.split(md.getAttribute("ValidationExpressionID"), ",");
          Set valExpSet = new HashSet();
          String resourcePath = update.getMClass().getResource().getPath();
          for (int c = 0; c < valExp.length; c++) {
            String vePath = resourcePath + ":" + valExp[c];
            ValidationExpression ve = (ValidationExpression) mValidationExpressions.get(vePath);
            valExpSet.add(ve);
          }
          updateType.setValidationExpressions(valExpSet);

          String updateHelpPath = resourcePath + ":" + md.getAttribute("UpdateHelpID");
          updateType.setUpdateHelp((UpdateHelp) mUpdateHelps.get(updateHelpPath));

          String vlPath = resourcePath + ":" + md.getAttribute("ValdiationLookupName");
          updateType.setValidationLookup((ValidationLookup) mValidationLookups.get(vlPath));

          String vePath = resourcePath + ":" + md.getAttribute("ValdationExternalName");
          updateType.setValidationExternal((ValidationExternal) mValidationExternals.get(vePath));

          hSession.save(updateType);
          hUpdateTypes.add(updateType);
        }
      }
      update.setUpdateTypes(hUpdateTypes);
      hSession.saveOrUpdate(update);
    }
  }