code: public CopyResult waitForCopyResult() throws AmazonClientException,
              AmazonServiceException, InterruptedException {
          try {
              CopyResult result = null;
              while (!monitor.isDone() || result == null) {
                  Future<?> f = monitor.getFuture();
                  result = (CopyResult) f.get();
              }
              return result;
          } catch (ExecutionException e) {
              rethrowExecutionException(e);
              return null;
          }
      }
docs: Waits for this copy operation to complete and returns the result of the
  operation. Be prepared to handle errors when calling this method. Any
  errors that occurred during the asynchronous transfer will be re-thrown
  through this method.
  
  @return The result of this transfer.
  
  @throws AmazonClientException
  If any errors were encountered in the client while making the
  request or handling the response.
  @throws AmazonServiceException
  If any errors occurred in Amazon S3 while processing the
  request.
  @throws InterruptedException
  If this thread is interrupted while waiting for the upload to
  complete.