private String ingestRepresentation(RepresentationObject rObject) throws IngestException {

    String roPID = null;
    try {

      roPID = this.ingestService.createRepresentationObject(rObject);
      rObject.setPid(roPID);

      logger.info("RepresentationObject created with PID " + roPID);

    } catch (NoSuchRODAObjectException e) {
      logger.debug("Error creating representation object - " + e.getMessage(), e);
      throw new IngestException("Error creating representation object - " + e.getMessage(), e);
    } catch (RemoteException e) {
      logger.debug("Error creating representation object - " + e.getMessage(), e);
      throw new IngestException("Error creating representation object - " + e.getMessage(), e);
    }

    try {

      // Upload root file
      this.rodaUploader.uploadRepresentationFile(roPID, rObject.getRootFile());

      logger.info(
          "Root file "
              + rObject.getRootFile().getId()
              + " of representation "
              + roPID
              + " uploaded successfully.");

      // Upload part files
      if (rObject.getPartFiles() != null) {

        for (RepresentationFile partFile : rObject.getPartFiles()) {

          this.rodaUploader.uploadRepresentationFile(roPID, partFile);

          logger.info(
              "Part file "
                  + partFile.getId()
                  + " of representation "
                  + roPID
                  + " uploaded successfully.");
        }
      }

      return roPID;

    } catch (FileNotFoundException e) {
      logger.debug("Error accessing representation file - " + e.getMessage(), e);

      try {
        logger.warn("Ingest of new representation failed. Removing created object " + roPID);

        this.ingestService.removeObjects(new String[] {roPID});

      } catch (RemoteException e1) {
        logger.warn(
            "Error removing representation " + roPID + " - " + e1.getMessage() + ". IGNORING", e1);
      }

      throw new IngestException("Error accessing representation file - " + e.getMessage(), e);
    } catch (UploadException e) {

      logger.debug("Error uploading representation file - " + e.getMessage(), e);

      try {
        logger.warn("Ingest of new representation failed. Removing created object " + roPID);

        this.ingestService.removeObjects(new String[] {roPID});

      } catch (RemoteException e1) {
        logger.warn(
            "Error removing representation " + roPID + " - " + e1.getMessage() + ". IGNORING", e1);
      }

      throw new IngestException("Error uploading representation file - " + e.getMessage(), e);
    }
  }