protected Map<String, String> buildDisplayImage(UserSessionData usd) {
    MasterImageMetaData mimd = usd.getMimd();
    Map<String, String> displayImage = new HashMap<String, String>();
    displayImage.put("title", mimd.getDisplayTitle());
    displayImage.put("alt", mimd.getAlt());
    String url;
    if (usd.getDisplayImage() != null) {
      displayImage.put("height", String.valueOf(usd.getDisplayImage().getHeight()));
      displayImage.put("width", String.valueOf(usd.getDisplayImage().getWidth()));
      url = this.urlBuilder.buildUrl(usd.getDisplayImage().getImageKey());
      displayImage.put("url", url);
    } else {
      displayImage.put("height", String.valueOf(mimd.getMetaData().getHeight()));
      displayImage.put("width", String.valueOf(mimd.getMetaData().getWidth()));
      url = this.urlBuilder.buildUrl(mimd.getImageKey());
      displayImage.put("url", url);
    }

    return displayImage;
  }
  @Override
  protected Object formBackingObject(HttpServletRequest request) throws Exception {
    Object cmd = "Exists";

    String openImed = request.getParameter("openImed");
    log.debug("formBackingObject: openImed is: " + openImed);

    if (openImed != null) {
      if (openImed.equals("true")) {
        cmd = null;
        setUserSessionData(request, null);
        log.debug("formBackingObject: set cmd to null and cleared USD");
      }
    }

    // log.debug("in the form backing object with page " + getCurrentPage(request));
    String contentid = request.getParameter(IPSHtmlParameters.SYS_CONTENTID);
    log.debug("formBackingObject: The contentid is: " + contentid);

    if (StringUtils.isBlank(contentid)) {

      log.debug("formBackingObject: cmd is: " + cmd);
      try {
        log.debug(
            "formBackingObject: attempting to get command, if it doesn't exist, catch error and return new");
        Object command = getCommand(request);

        log.debug("formBackingObject: command exists");
        if (cmd == null) {
          log.debug("formBackingObject: opening from Action Menu, returning new");
          return new ImageBean();
        }
        if (command != null) {
          log.debug("formBackingObject: navigating, so using same command");
          return command;
        }
        log.debug(
            "formBackingObject: not coming from Action Menu, but command null? returning new");
        return new ImageBean();
      } catch (HttpSessionRequiredException hsre) {
        log.debug(
            "formBackingObject: info - Command does not exist yet, need to create it, continuing");
      }

      return new ImageBean();
    }
    // Found a content id, so load the item.
    log.debug("formBackingObject: found contentid [id:" + contentid + "]");
    String user = RxRequestUtils.getUserName(request);
    log.debug("formBackingObject: user is " + user);
    String session = RxRequestUtils.getSessionId(request);
    log.debug("formBackingObject: session is " + session);

    if (StringUtils.isNotBlank(contentid) && contentid != null) {
      log.debug("formBackingObject: contentid is not blank, going to open the image...");
      OpenImageResult oir = imagePersistenceManager.OpenImage(contentid, session, user);
      log.debug("formBackingObject: ItemStatus is  " + oir.getItemStatus());

      MasterImageMetaData mimd = oir.getMasterImage();
      log.info("formBackingObject: masterimage " + mimd);

      UserSessionData usd = getUserSessionData(request);
      usd.setMimd(mimd);
      setupDisplayImage(mimd, usd);

      ImageBean ib = new ImageBean();
      ib.setSysTitle(mimd.getSysTitle());
      ib.setDescription(mimd.getDescription());
      ib.setAlt(mimd.getAlt());
      ib.setDisplayTitle(mimd.getDisplayTitle());

      String sizedImages = null;
      Iterator<SizedImageMetaData> simds = mimd.getSizedImages().values().iterator();
      while (simds.hasNext()) {
        SizedImageMetaData simd = simds.next();
        ImageSizeDefinition isd = simd.getSizeDefinition();
        String code = isd.getCode();
        sizedImages += code;
        if (simds.hasNext()) sizedImages += ",";

        // testing to ensure simds have x,y,w,h
        log.debug(
            "formBackingObject: simd ["
                + code
                + "]: x -> "
                + simd.getX()
                + " == y -> "
                + simd.getY());
      }

      ib.setSizedImages(sizedImages);
      setUserSessionData(request, usd);
      setPagesDynamically(request, sizedImages);

      return ib;
    }
    log.debug("formBackingObject: contentid is blank, so creating a new item / imagebean");
    return new ImageBean();
  }