public ZipColumnMetaDataWriter writeColumnMetaDataEntry(final ColumnMetaData columnMetaData)
      throws IOException {
    setProperty(COLUMN_NAME, columnMetaData.getColumnName());
    setProperty(COLUMN_CLASS_NAME, columnMetaData.getColumnClassName());
    setProperty(COLUMN_TYPE_NAME, columnMetaData.getColumnTypeName());
    setProperty(COLUMN_TYPE, String.valueOf(columnMetaData.getColumnType()));
    setProperty(COLUMN_PRECISION, String.valueOf(columnMetaData.getPrecision()));
    setProperty(COLUMN_PRECISION, String.valueOf(columnMetaData.getPrecision()));
    setProperty(COLUMN_SCALE, String.valueOf(columnMetaData.getScale()));
    setProperty(PRIMARY_KEY, String.valueOf(columnMetaData.isPrimaryKey()));
    setProperty(NULLABLE, String.valueOf(columnMetaData.isNullable()));
    setProperty(AUTO_INCREMENT, String.valueOf(columnMetaData.isAutoIncrement()));
    setProperty(COLUMN_ID, String.valueOf(((InternalColumnMetaData) columnMetaData).getColumnId()));

    final InternalColumnMetaData referencedColumn =
        (InternalColumnMetaData) columnMetaData.getReferencedColumn();

    if (referencedColumn != null) {
      setProperty(COLUMN_REFERENCES, String.valueOf(referencedColumn.getColumnId()));
    }

    int i = 1;
    for (final Iterator<ColumnMetaData> iterator =
            columnMetaData.getReferencedByColumn().iterator();
        iterator.hasNext();
        i++) {
      final InternalColumnMetaData referencedByColumn = (InternalColumnMetaData) iterator.next();
      setProperty(COLUMN_REFERENCED_BY_ID + i, String.valueOf(referencedByColumn.getColumnId()));
      setProperty(COLUMN_REFERENCED_BY + i, referencedByColumn.getColumnName());
    }

    return this;
  }