private void appendDisseminators(DigitalObject obj, PrintWriter writer)
      throws ObjectIntegrityException {
    Iterator<String> dissIdIter = obj.disseminatorIdIterator();
    while (dissIdIter.hasNext()) {
      String did = dissIdIter.next();
      Disseminator diss =
          DOTranslationUtility.setDisseminatorDefaults(obj.disseminators(did).get(0));
      writer.print("<");
      writer.print(METS.prefix);
      writer.print(":behaviorSec ID=\"");
      writer.print(did);
      writer.print("\" STATUS=\"");
      writer.print(diss.dissState);
      writer.print("\">\n");
      for (int i = 0; i < obj.disseminators(did).size(); i++) {
        diss = DOTranslationUtility.setDisseminatorDefaults(obj.disseminators(did).get(i));
        writer.print("<");
        writer.print(METS.prefix);
        writer.print(":serviceBinding ID=\"");
        writer.print(diss.dissVersionID);
        writer.print("\" STRUCTID=\"");
        writer.print(diss.dsBindMapID);
        writer.print("\" BTYPE=\"");
        writer.print(diss.bDefID);
        writer.print("\" CREATED=\"");
        writer.print(DateUtility.convertDateToString(diss.dissCreateDT));
        writer.print("\"");
        if (diss.dissLabel != null && !diss.dissLabel.equals("")) {
          writer.print(" LABEL=\"");
          writer.print(StreamUtility.enc(diss.dissLabel));
          writer.print("\"");
        }
        writer.print(">\n");
        writer.print("<");
        writer.print(METS.prefix);
        writer.print(":interfaceMD LOCTYPE=\"URN\" ");
        writer.print(XLINK.prefix);
        writer.print(":href=\"");
        writer.print(diss.bDefID);
        writer.print("\"/>\n");
        writer.print("<");
        writer.print(METS.prefix);
        writer.print(":serviceBindMD LOCTYPE=\"URN\" ");
        writer.print(XLINK.prefix);
        writer.print(":href=\"");
        writer.print(diss.sDepID);
        writer.print("\"/>\n");

        writer.print("</");
        writer.print(METS.prefix);
        writer.print(":serviceBinding>\n");
      }
      writer.print("</");
      writer.print(METS.prefix);
      writer.print(":behaviorSec>\n");
    }
  }
 private void appendStructMaps(DigitalObject obj, PrintWriter writer)
     throws ObjectIntegrityException {
   Iterator<String> dissIdIter = obj.disseminatorIdIterator();
   while (dissIdIter.hasNext()) {
     String did = dissIdIter.next();
     Iterator<Disseminator> dissIter = obj.disseminators(did).iterator();
     while (dissIter.hasNext()) {
       Disseminator diss = DOTranslationUtility.setDisseminatorDefaults(dissIter.next());
       writer.print("<");
       writer.print(METS.prefix);
       writer.print(":structMap ID=\"");
       writer.print(diss.dsBindMapID);
       writer.print("\" TYPE=\"fedora:dsBindingMap\">\n");
       writer.print("<");
       writer.print(METS.prefix);
       writer.print(":div TYPE=\"");
       writer.print(diss.sDepID);
       writer.print("\"");
       if (diss.dsBindMap.dsBindMapLabel != null && !diss.dsBindMap.dsBindMapLabel.equals("")) {
         writer.print(" LABEL=\"");
         writer.print(StreamUtility.enc(diss.dsBindMap.dsBindMapLabel));
         writer.print("\"");
       }
       writer.print(">\n");
       DSBinding[] bindings = diss.dsBindMap.dsBindings;
       for (int i = 0; i < bindings.length; i++) {
         if (bindings[i].bindKeyName == null || bindings[i].bindKeyName.equals("")) {
           throw new ObjectIntegrityException(
               "Object's disseminator" + " binding map binding must have a binding key name.");
         }
         writer.print("<");
         writer.print(METS.prefix);
         writer.print(":div TYPE=\"");
         writer.print(bindings[i].bindKeyName);
         if (bindings[i].bindLabel != null && !bindings[i].bindLabel.equals("")) {
           writer.print("\" LABEL=\"");
           writer.print(StreamUtility.enc(bindings[i].bindLabel));
         }
         if (bindings[i].seqNo != null && !bindings[i].seqNo.equals("")) {
           writer.print("\" ORDER=\"");
           writer.print(bindings[i].seqNo);
         }
         if (bindings[i].datastreamID == null || bindings[i].datastreamID.equals("")) {
           throw new ObjectIntegrityException(
               "Object's disseminator" + " binding map binding must point to a datastream.");
         }
         writer.print("\">\n<");
         writer.print(METS.prefix);
         writer.print(":fptr FILEID=\"");
         writer.print(bindings[i].datastreamID);
         writer.print("\"/>\n");
         writer.print("</");
         writer.print(METS.prefix);
         writer.print(":div>\n");
       }
       writer.print("</");
       writer.print(METS.prefix);
       writer.print(":div>\n");
       writer.print("</");
       writer.print(METS.prefix);
       writer.print(":structMap>\n");
     }
   }
 }