protected File attachSupplimentNotificationDocumentTextIfNeeded(
      AssignmentServiceContext context,
      String workItemId,
      AbstractHandlerUtils handlerUtils,
      File supplementRequestDocFile)
      throws Exception {
    if (mLogger.isLoggable(Level.INFO)) {
      mLogger.info(
          "********Debug: Staff User - Supplement Assignment Case, \n***** Before handlerUtils.createSupplementRequestDoc");
    }

    // Create Supplement Request Doc (returned as a Text buffer)
    String suppNotificationDocText = handlerUtils.createSupplementRequestDoc(context, workItemId);

    if (mLogger.isLoggable(Level.INFO)) {
      mLogger.info(
          "********Debug:  After handlerUtils.createSupplementRequestDoc, suppNotificationDocText=\n "
              + suppNotificationDocText);
    }

    // Only add the suppplement request doc attachement file
    //      Upon successful generation of Supplement Request doc
    //
    if (suppNotificationDocText.length() > 0) {
      // Save Supplement Request Text as a new disk file
      String fileExt = AssignmentDeliveryConstants.FILE_EXTENSION_TXT;
      String filePrefix1 = AssignmentDeliveryConstants.SUPPLEMENT_REQUEST_PREFIX;
      supplementRequestDocFile =
          handlerUtils.writeSupplementRequestDocFile(
              suppNotificationDocText, filePrefix1, fileExt, workItemId);
      if (supplementRequestDocFile.exists()) {
        if (mLogger.isLoggable(Level.INFO)) {
          mLogger.info(
              "********Debug:  After handlerUtils.writeSupplementRequestDocFile, supp Asb FilePath=\n "
                  + supplementRequestDocFile.getAbsoluteFile());
        }
      }

      if (mLogger.isLoggable(Level.INFO)) {
        mLogger.info("Debug:  Now Attaching Supplement Request Doc File. ");
      }

      AttachmentObject attachmentObjectSup =
          new AttachmentObject(supplementRequestDocFile, MCFConstants.ATTACH_OBJ_TEXT_NOTE);
      attachmentObjectSup.setTabNumber(1);

      // Set Desc1 and Desc2 for Supplement_Request
      attachmentObjectSup.setDesc2("Supplement-Request");
      attachmentObjectSup.setDesc1("Supplement-Request");

      context.getAttachmentObjects().add(attachmentObjectSup);

      String attObjDesc1Prop = attachmentObjectSup.getDesc1();
      mLogger.info(
          "********** Debug: After Attaching Supplement Request Doc File, Verify attachmentObjectSup.getDesc1(), attObjDesc1Prop= "
              + attObjDesc1Prop);
    }
    return supplementRequestDocFile;
  }
  private void attachSupplementToOriginalConversionNotice(
      AssignmentServiceContext context,
      File suppToOrigNoticeFile,
      boolean wasSupplementConvertedToOriginal) {
    if (wasSupplementConvertedToOriginal && suppToOrigNoticeFile.exists()) {

      if (mLogger.isLoggable(Level.INFO)) {
        mLogger.info("Debug:  Now Attaching TextFile Notice - SupplementConvertedToOriginal. ");
      }

      AttachmentObject attachmentObject3 =
          new AttachmentObject(suppToOrigNoticeFile, MCFConstants.ATTACH_OBJ_TEXT_NOTE);
      attachmentObject3.setTabNumber(1);
      context.getAttachmentObjects().add(attachmentObject3);

      // Set Desc1 and Desc2 for TextFile Notice - SupplementConvertedToOriginal
      attachmentObject3.setDesc2("Notice_Supplement-Converted-To-Original");
      attachmentObject3.setDesc1("Notice_Supplement-Converted-To-Original");

      if (mLogger.isLoggable(Level.INFO)) {
        mLogger.info("Debug:  After Attaching TextFile Notice - SupplementConvertedToOriginal. ");
      }
    }
  }
  //
  // --  New method for Jetta/SIP3.5 -
  //
  public void cancelAssignment(AssignmentServiceContext context)
      throws AssignmentDeliveryException {

    final String thisMethod = "cancelAssignment(AssignmentServiceContext context)";
    entering(thisMethod);

    // TODO is validation required for this ADS Cancel interface?

    // Validate the input param
    // context.validate();
    // mLogger.fine("Input AssignmentServiceContext is valid.");

    long arid = 0; // NOTE: no archive ID for Cancel interface, nothing to archive.
    String workItemId = context.getWorkItemId();

    String appLogTxType = ECLAIM_CANCELLATION_ALERT_SENT_SUCCESS_APPLOG_TRNS_TYPE_FILE;

    try {
      // Get CIECADocument from MitchellEnvelope
      CIECADocument ciecaDoc =
          handlerUtils.getCiecaDocFromMitchellEnv(context.getMitchellEnvDoc(), workItemId);

      // Get ClaimNumber from Cieca Doc
      String claimNumber = "";
      if (ciecaDoc != null) {
        claimNumber = ciecaDoc.getCIECA().getAssignmentAddRq().getClaimInfo().getClaimNum();
      }

      if (mLogger.isLoggable(Level.INFO)) {
        mLogger.info(
            "***** cancelAssignment: DEBUG - In ciecaDoc, claimNumber = [ " + claimNumber + " ]");
      }

      // If Not Original Or Supplement, reject delivery and throw fatal error
      rejectDeliveryIfNeitherOriginalNorSuppliment(thisMethod, workItemId, ciecaDoc);

      // Determine Assignment Type - Must be either Original or Supplement
      boolean isOriginal = false;

      isOriginal = handlerUtils.isOriginalAssignment(ciecaDoc);

      // Determine correct UserInfo to provide to EClaim Alert Service - UserInfo or DRPUserInfo
      //
      UserInfoDocument userInfoDoc = null;
      if (context.isDrp()) {
        userInfoDoc = context.getDrpUserInfo();
        if (mLogger.isLoggable(Level.INFO)) {
          mLogger.info("*******DRPUSER for Cancellation **************");
          mLogger.info("********Successfully found DRP UserInfo  = " + userInfoDoc);
        }
      } else {
        userInfoDoc = context.getUserInfo();
        if (mLogger.isLoggable(Level.INFO)) {
          mLogger.info("*******not a DRPUSER for Cancellation **************");
          mLogger.info("********Successfully found non-DRP UserInfo = " + userInfoDoc);
        }
      }

      // Design/Implementation Assumptions & Constraints (09.15.09) --
      //
      //  1a. CompanyCode and UserID will be obtained from the proper UserInfo doc provided in the
      // ADS Context.
      //  1b. workItemID will be obtained from the ADS Context.
      //  2.  The Message Content for "msg" sent to ECM AlertService
      //      will be provided in a SET File Param with a ciecaClaimNumber appended.
      //  3.  The Originator will be a constant defined as the calling service/app.
      //     (  see reference ECALIM_ALERT_ORIGIN - StateFarmMCFJava/WorkflowConstants.java )

      // Submit the Cancellation Global Alert to EClaim --
      //  Note: UserInfoDoc is a Required Input --
      if (userInfoDoc != null) {
        handlerUtils.sendCancellationECAlert(claimNumber, userInfoDoc, isOriginal, workItemId);

        // Write the log in App Log (call super class method)
        //       NOTE: no archive ID (arid) for Cancel interface, nothing to archive
        arid = 0;
        logEClaimSubmissionEvent(context, ciecaDoc, arid, workItemId, appLogTxType);
        if (mLogger.isLoggable(Level.INFO)) {
          mLogger.info("Successfully logged the EClaim Submission Event for Cancellation.");
        }

      } else {
        mLogger.severe(
            "cancelAssignment: Assignment Delivery Svc Cancellation unable to submit EClaim Alert - missing required Inputs..");

        errorLoggingService.logError(
            AssignmentDeliveryErrorCodes.INCOMPLETE_CONTEXT_INFO_FOR_ECM_ALERT_ERROR,
            null,
            getClassName(),
            thisMethod,
            ErrorLoggingService.SEVERITY.FATAL,
            workItemId,
            "Assignment Delivery Service Cancellation unable to submit EClaim Alert.",
            null,
            0,
            null);
        throw mLogger.createException(
            AssignmentDeliveryErrorCodes.INCOMPLETE_CONTEXT_INFO_FOR_ECM_ALERT_ERROR, workItemId);
      }

    } catch (AssignmentDeliveryException adse) {
      throw adse;
    } catch (Exception e) {
      logException(thisMethod, workItemId, e);
    } finally {
      try {
        if (mLogger.isLoggable(Level.INFO)) {
          mLogger.info("Successfully completed cancelAssignment.");
        }
      } catch (Exception e) {
        logException(thisMethod, workItemId, e);
      }
      mLogger.exiting(getClassName(), thisMethod);
    }
  }