protected static DicomObject createDicomMetaData(
      MimeType mimeType,
      String filename,
      String description,
      TCReferencedInstance ref,
      String patId,
      String issuerOfPatId,
      String patName,
      String modality) {
    Date now = new Date();

    DicomObject attrs = new BasicDicomObject();

    // patient level
    if (patId != null) {
      attrs.putString(Tag.PatientID, VR.LO, patId);
    }
    if (issuerOfPatId != null) {
      attrs.putString(Tag.IssuerOfPatientID, VR.LO, issuerOfPatId);
    }
    if (patName != null) {
      attrs.putString(Tag.PatientName, VR.PN, patName);
    }

    // study level
    attrs.putString(Tag.StudyInstanceUID, VR.UI, ref.getStudyUID());

    // series level
    attrs.putString(Tag.SeriesInstanceUID, VR.UI, ref.getSeriesUID());
    attrs.putString(Tag.SeriesDescription, VR.LO, SERIES_DESCRIPTION);
    attrs.putString(Tag.Modality, VR.CS, modality);

    // instance level
    attrs.putString(Tag.SOPInstanceUID, VR.UI, ref.getInstanceUID());
    attrs.putString(Tag.SOPClassUID, VR.UI, ref.getClassUID());
    attrs.putInt(Tag.InstanceNumber, VR.IS, ref.getInstanceNumber());
    attrs.putDate(Tag.InstanceCreationDate, VR.DA, now);
    attrs.putDate(Tag.InstanceCreationTime, VR.TM, now);
    attrs.putDate(Tag.ContentDate, VR.DA, now);
    attrs.putDate(Tag.ContentTime, VR.TM, now);
    attrs.putString(Tag.ContentLabel, VR.CS, filename);
    attrs.putString(
        Tag.ContentDescription,
        VR.CS,
        description != null && !description.isEmpty() ? description : getFileName(filename));

    return attrs;
  }