private void mapPublisherName(Document opus, OriginInfoDefinition oid) {
    final String publisherName = opus.getPublisherName();

    XmlString modsPublisher = (XmlString) select("mods:publisher", oid);

    if (modsPublisher == null) {
      modsPublisher = oid.addNewPublisher();
      signalChanges(MODS_CHANGES);
    }

    if (!modsPublisher.getStringValue().equals(publisherName)) {
      modsPublisher.setStringValue(publisherName);
      signalChanges(MODS_CHANGES);
    }
  }
  private void mapPublisherPlace(Document opus, OriginInfoDefinition oid) {
    final String publisherPlace = singleline(opus.getPublisherPlace());

    PlaceDefinition pd = (PlaceDefinition) select("mods:place", oid);

    if (pd == null) {
      pd = oid.addNewPlace();
      signalChanges(MODS_CHANGES);
    }

    PlaceTermDefinition ptd =
        (PlaceTermDefinition)
            select("mods:placeTerm[@type='text' and text()='" + publisherPlace + "']", pd);

    if (ptd == null) {
      ptd = pd.addNewPlaceTerm();
      ptd.setType(TEXT);
      ptd.setStringValue(publisherPlace);
      signalChanges(MODS_CHANGES);
    }
  }
  private void mapServerDatePublished(Document opus, OriginInfoDefinition oid) {
    final String mappedDateEncoding = dateEncoding(opus.getServerDatePublished());

    DateDefinition dateIssued =
        (DateDefinition)
            select(
                String.format(
                    "mods:dateIssued[@encoding='%s' and @keyDate='%s']", "iso8601", "yes"),
                oid);

    if (dateIssued == null) {
      dateIssued = oid.addNewDateIssued();
      dateIssued.setEncoding(ISO_8601);
      dateIssued.setKeyDate(XmlString.Factory.newValue("yes"));
      signalChanges(MODS_CHANGES);
    }

    if (!dateIssued.getStringValue().equals(mappedDateEncoding)) {
      dateIssued.setStringValue(mappedDateEncoding);
      signalChanges(MODS_CHANGES);
    }
  }