docs: protected void buildRevisionHistoryFromTemplate(final BuildData buildData,
              final String revisionHistoryXml) throws BuildProcessingException {
          log.info("\tBuilding " + REVISION_HISTORY_FILE_NAME);
  
          Document revHistoryDoc;
          try {
              revHistoryDoc = XMLUtilities.convertStringToDocument(revisionHistoryXml);
          } catch (Exception ex) {
              // Exit since we shouldn't fail at converting the basic revision history
              log.debug("", ex);
              throw new BuildProcessingException(
                      String.format(getMessages().getString("FAILED_CONVERTING_TEMPLATE"), REVISION_HISTORY_FILE_NAME));
          }
  
          if (revHistoryDoc == null) {
              throw new BuildProcessingException(
                      String.format(getMessages().getString("FAILED_CONVERTING_TEMPLATE"), REVISION_HISTORY_FILE_NAME));
          }
  
          final String reportHistoryTitleTranslation = buildData.getConstants().getString("REVISION_HISTORY");
          if (reportHistoryTitleTranslation != null) {
              DocBookUtilities.setRootElementTitle(reportHistoryTitleTranslation, revHistoryDoc);
          }
  
          // Find the revhistory node
          final Element revHistory;
          final NodeList revHistories = revHistoryDoc.getElementsByTagName("revhistory");
          if (revHistories.getLength() > 0) {
              revHistory = (Element) revHistories.item(0);
          } else {
              revHistory = revHistoryDoc.createElement("revhistory");
              // <revhistory> should be a direct child of <appendix> in docbook 5
              if (buildData.getDocBookVersion() == DocBookVersion.DOCBOOK_50) {
                  revHistoryDoc.getDocumentElement().appendChild(revHistory);
              } else {
                  final Element simpara = revHistoryDoc.createElement("simpara");
                  simpara.appendChild(revHistory);
                  revHistoryDoc.getDocumentElement().appendChild(simpara);
              }
          }
  
          final TagWrapper author = buildData.getRequester() == null ? null : tagProvider.getTagByName(buildData.getRequester());
  
          // Check if the app should be shutdown
          if (isShuttingDown.get()) {
              return;
          }
  
          // An assigned writer tag exists for the User so check if there is an AuthorInformation tuple for that writer
          if (author != null) {
              AuthorInformation authorInfo = EntityUtilities.getAuthorInformation(providerFactory, buildData.getServerEntities(),
                      author.getId(), author.getRevision());
              if (authorInfo != null) {
                  final Element revision = generateRevision(buildData, revHistoryDoc, authorInfo);
  
                  addRevisionToRevHistory(revHistory, revision);
              } else {
                  // No AuthorInformation so Use the default value
                  authorInfo = new AuthorInformation(-1, BuilderConstants.DEFAULT_AUTHOR_FIRSTNAME, BuilderConstants.DEFAULT_AUTHOR_LASTNAME,
                          BuilderConstants.DEFAULT_EMAIL);
                  final Element revision = generateRevision(buildData, revHistoryDoc, authorInfo);
  
                  addRevisionToRevHistory(revHistory, revision);
              }
          }
          // No assigned writer exists for the uploader so use default values
          else {
              final AuthorInformation authorInfo = new AuthorInformation(-1, BuilderConstants.DEFAULT_AUTHOR_FIRSTNAME,
                      BuilderConstants.DEFAULT_AUTHOR_LASTNAME, BuilderConstants.DEFAULT_EMAIL);
              final Element revision = generateRevision(buildData, revHistoryDoc, authorInfo);
  
              addRevisionToRevHistory(revHistory, revision);
          }
  
          // Add the revision history to the book
          final String fixedRevisionHistoryXml = DocBookBuildUtilities.convertDocumentToDocBookFormattedString(buildData.getDocBookVersion(),
                  revHistoryDoc, "appendix", buildData.getEntityFileName(), getXMLFormatProperties());
          addToZip(buildData.getBookLocaleFolder() + REVISION_HISTORY_FILE_NAME, fixedRevisionHistoryXml, buildData);
      }