blob: a58de32f808b2167a323bb8b4c8acac329070784 [file] [log] [blame]
package org.netbeans.lib.cvsclient.progress.sending;
import org.netbeans.lib.cvsclient.admin.Entry;
import org.netbeans.lib.cvsclient.command.ICvsFiles;
import org.netbeans.lib.cvsclient.command.ICvsFilesVisitor;
import org.netbeans.lib.cvsclient.file.DirectoryObject;
import org.netbeans.lib.cvsclient.file.FileObject;
import org.netbeans.lib.cvsclient.progress.IProgressViewer;
import org.netbeans.lib.cvsclient.progress.RangeProgressViewer;
import org.netbeans.lib.cvsclient.request.AbstractFileStateRequest;
import org.netbeans.lib.cvsclient.request.IRequest;
import org.netbeans.lib.cvsclient.util.BugLog;
import java.util.HashSet;
import java.util.Set;
/**
* @author Thomas Singer
*/
public class FileStateRequestsProgressHandler
implements IRequestsProgressHandler {
// TODO: inline me
public static IRequestsProgressHandler create(IProgressViewer parentProgressViewer, ICvsFiles cvsFiles) {
return new FileStateRequestsProgressHandler(new RangeProgressViewer(parentProgressViewer, 0.0, 0.5), cvsFiles);
}
// Fields =================================================================
private final Set fileObjects = new HashSet(2000);
private final IProgressViewer progressViewer;
private int count;
private final int maxCount;
// Setup ==================================================================
public FileStateRequestsProgressHandler(IProgressViewer progressViewer, ICvsFiles cvsFiles) {
BugLog.getInstance().assertNotNull(progressViewer);
BugLog.getInstance().assertNotNull(cvsFiles);
this.progressViewer = progressViewer;
cvsFiles.visit(new ICvsFilesVisitor() {
public void handleFile(FileObject fileObject, Entry entry, boolean exists) {
fileObjects.add(fileObject);
}
public void handleDirectory(DirectoryObject directoryObject) {
}
});
count = 0;
maxCount = fileObjects.size();
}
public void requestSent(IRequest request) {
if (!(request instanceof AbstractFileStateRequest)) {
return;
}
final AbstractFileStateRequest fileStateRequest = (AbstractFileStateRequest)request;
final FileObject fileObject = fileStateRequest.getFileObject();
if (!fileObjects.remove(fileObject)) {
return;
}
count++;
notifyProgress(count, maxCount, progressViewer);
}
// Utils ==================================================================
private void notifyProgress(int count, int maxCount, IProgressViewer progressViewer) {
progressViewer.setProgress((double)count / maxCount);
}
}