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); } }