ProgressListenerChain listenerChain = new ProgressListenerChain(
new TransferProgressUpdatingListener(transferProgress));
CopyImpl copy = new CopyImpl(description, transferProgress,
listenerChain, stateChangeListener);
CopyCallable copyCallable = new CopyCallable(this, threadPool, copy,
copyObjectRequest, metadata.getContentLength(), listenerChain);
CopyMonitor watcher = new CopyMonitor(this, copy, threadPool,
copyCallable, copyObjectRequest, listenerChain);
watcher.setTimedThreadPool(timedThreadPool);
copy.setMonitor(watcher);