@Override
  public ITupleReference getTupleFromMetadataEntity(Feed feed)
      throws IOException, MetadataException {
    // write the key in the first two fields of the tuple
    tupleBuilder.reset();
    aString.setValue(feed.getDataverseName());
    stringSerde.serialize(aString, tupleBuilder.getDataOutput());
    tupleBuilder.addFieldEndOffset();

    aString.setValue(feed.getFeedName());
    stringSerde.serialize(aString, tupleBuilder.getDataOutput());
    tupleBuilder.addFieldEndOffset();

    recordBuilder.reset(MetadataRecordTypes.FEED_RECORDTYPE);

    // write field 0
    fieldValue.reset();
    aString.setValue(feed.getDataverseName());
    stringSerde.serialize(aString, fieldValue.getDataOutput());
    recordBuilder.addField(MetadataRecordTypes.FEED_ARECORD_DATAVERSE_NAME_FIELD_INDEX, fieldValue);

    // write field 1
    fieldValue.reset();
    aString.setValue(feed.getFeedName());
    stringSerde.serialize(aString, fieldValue.getDataOutput());
    recordBuilder.addField(MetadataRecordTypes.FEED_ARECORD_FEED_NAME_FIELD_INDEX, fieldValue);

    // write field 2
    fieldValue.reset();
    if (feed.getAppliedFunction() != null) {
      aString.setValue(feed.getAppliedFunction().getName());
      stringSerde.serialize(aString, fieldValue.getDataOutput());
      recordBuilder.addField(MetadataRecordTypes.FEED_ARECORD_FUNCTION_FIELD_INDEX, fieldValue);
    }

    // write field 3
    fieldValue.reset();
    aString.setValue(feed.getFeedType().name().toUpperCase());
    stringSerde.serialize(aString, fieldValue.getDataOutput());
    recordBuilder.addField(MetadataRecordTypes.FEED_ARECORD_FEED_TYPE_FIELD_INDEX, fieldValue);

    // write field 4/5
    fieldValue.reset();
    writeFeedTypeDetailsRecordType(recordBuilder, feed, fieldValue);

    // write field 6
    fieldValue.reset();
    aString.setValue(Calendar.getInstance().getTime().toString());
    stringSerde.serialize(aString, fieldValue.getDataOutput());
    recordBuilder.addField(MetadataRecordTypes.FEED_ARECORD_TIMESTAMP_FIELD_INDEX, fieldValue);

    // write record
    try {
      recordBuilder.write(tupleBuilder.getDataOutput(), true);
    } catch (AsterixException e) {
      throw new MetadataException(e);
    }
    tupleBuilder.addFieldEndOffset();

    tuple.reset(tupleBuilder.getFieldEndOffsets(), tupleBuilder.getByteArray());
    return tuple;
  }