/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.lib.cvsclient.command.log; import org.netbeans.lib.cvsclient.IClientEnvironment; import org.netbeans.lib.cvsclient.IRequestProcessor; import org.netbeans.lib.cvsclient.connection.AuthenticationException; import org.netbeans.lib.cvsclient.admin.Entry; import org.netbeans.lib.cvsclient.command.AbstractCommand; import org.netbeans.lib.cvsclient.command.CommandException; import org.netbeans.lib.cvsclient.command.ICvsFiles; import org.netbeans.lib.cvsclient.command.IOCommandException; import org.netbeans.lib.cvsclient.event.DualListener; import org.netbeans.lib.cvsclient.event.ICvsListener; import org.netbeans.lib.cvsclient.event.ICvsListenerRegistry; import org.netbeans.lib.cvsclient.event.IEventSender; import org.netbeans.lib.cvsclient.file.FileObject; import org.netbeans.lib.cvsclient.file.ICvsFileSystem; import org.netbeans.lib.cvsclient.progress.IProgressViewer; import org.netbeans.lib.cvsclient.progress.RangeProgressViewer; import org.netbeans.lib.cvsclient.progress.receiving.FileInfoAndMessageResponseProgressHandler; import org.netbeans.lib.cvsclient.progress.sending.FileStateRequestsProgressHandler; import org.netbeans.lib.cvsclient.progress.sending.IRequestsProgressHandler; import org.netbeans.lib.cvsclient.request.CommandRequest; import org.netbeans.lib.cvsclient.request.Requests; import org.jetbrains.annotations.NonNls; import java.io.IOException; /** * @author Thomas Singer */ public class LogCommand extends AbstractCommand { // Constants ============================================================== @NonNls private static final String EXAM_DIR = " server: Logging "; // Fields ================================================================= private boolean defaultBranch; private String dateFilter; private boolean headerOnly; private boolean noTags; private String revisionFilter; private String stateFilter; private String userFilter; private boolean headerAndDescOnly; // Setup ================================================================== public LogCommand() { } // Implemented ============================================================ public final boolean execute(IRequestProcessor requestProcessor, IEventSender eventSender, ICvsListenerRegistry listenerRegistry, IClientEnvironment clientEnvironment, IProgressViewer progressViewer) throws CommandException, AuthenticationException { final ICvsFiles cvsFiles; try { cvsFiles = scanFileSystem(clientEnvironment); } catch (IOException ex) { throw new IOCommandException(ex); } final Requests requests = new Requests(CommandRequest.LOG, clientEnvironment); requests.addArgumentRequest(isDefaultBranch(), "-b"); requests.addArgumentRequest(isHeaderAndDescOnly(), "-t"); requests.addArgumentRequest(isHeaderOnly(), "-h"); requests.addArgumentRequest(isNoTags(), "-N"); requests.addArgumentRequest(getUserFilter(), "-w"); requests.addArgumentRequest(getRevisionFilter(), "-r"); requests.addArgumentRequest(getStateFilter(), "-s"); requests.addArgumentRequest(getDateFilter(), "-d"); addFileRequests(cvsFiles, requests, clientEnvironment); requests.addLocalPathDirectoryRequest(); addArgumentRequests(requests); final IRequestsProgressHandler requestsProgressHandler = new FileStateRequestsProgressHandler(new RangeProgressViewer(progressViewer, 0.0, 0.5), cvsFiles); final ICvsListener responseProgressHandler = new FileInfoAndMessageResponseProgressHandler(new RangeProgressViewer(progressViewer, 0.5, 1.0), cvsFiles, EXAM_DIR); final ICvsListener parser = createParser(eventSender, clientEnvironment.getCvsFileSystem()); final ICvsListener listener = new DualListener(parser, responseProgressHandler); listener.registerListeners(listenerRegistry); try { return requestProcessor.processRequests(requests, requestsProgressHandler); } finally { listener.unregisterListeners(listenerRegistry); } } protected ICvsListener createParser(IEventSender eventSender, ICvsFileSystem cvsFileSystem) { return new LogMessageParser(eventSender, cvsFileSystem); } public final String getCvsCommandLine() { @NonNls final StringBuffer cvsCommandLine = new StringBuffer("log "); cvsCommandLine.append(getCVSArguments()); appendFileArguments(cvsCommandLine); return cvsCommandLine.toString(); } public final void resetCvsCommand() { super.resetCvsCommand(); setRecursive(true); setDefaultBranch(false); setHeaderOnly(false); setHeaderAndDescOnly(false); setNoTags(false); setDateFilter(null); setRevisionFilter(null); setStateFilter(null); setUserFilter(null); } /** * Getter for property defaultBranch, equals the command-line CVS switch * "-b". * @return Value of property defaultBranch. */ private boolean isDefaultBranch() { return defaultBranch; } /** * Setter for property defaultBranch, equals the command-line CVS switch * "-b". * @param defaultBranch New value of property defaultBranch. */ public final void setDefaultBranch(boolean defaultBranch) { this.defaultBranch = defaultBranch; } /** * Getter for property dateFilter, equals the command-line CVS switch "-d". * @return Value of property dateFilter. */ private String getDateFilter() { return dateFilter; } /** Setter for property dateFilter, equals the command-line CVS switch "-d". * @param dateFilter New value of property dateFilter. */ public final void setDateFilter(String dateFilter) { this.dateFilter = dateFilter; } /** Getter for property headerOnly, equals the command-line CVS switch "-h". * @return Value of property headerOnly. */ private boolean isHeaderOnly() { return headerOnly; } /** Setter for property headerOnly, equals the command-line CVS switch "-h". * @param headerOnly New value of property headerOnly. */ public final void setHeaderOnly(boolean headerOnly) { this.headerOnly = headerOnly; } /** Getter for property noTags, equals the command-line CVS switch "-N". * @return Value of property noTags. */ private boolean isNoTags() { return noTags; } /** Setter for property noTags, equals the command-line CVS switch "-N". * @param noTags New value of property noTags. */ public final void setNoTags(boolean noTags) { this.noTags = noTags; } /** Getter for property revisionFilter, equals the command-line CVS switch "-r". * @return Value of property revisionFilter. */ private String getRevisionFilter() { return revisionFilter; } /** Setter for property revisionFilter, equals the command-line CVS switch "-r". * @param revisionFilter New value of property revisionFilter. empty string means latest revision of default branch. */ public final void setRevisionFilter(String revisionFilter) { this.revisionFilter = revisionFilter; } /** Getter for property stateFilter, equals the command-line CVS switch "-s". * @return Value of property stateFilter. */ private String getStateFilter() { return stateFilter; } /** Setter for property stateFilter, equals the command-line CVS switch "-s". * @param stateFilter New value of property stateFilter. */ public final void setStateFilter(String stateFilter) { this.stateFilter = stateFilter; } /** Getter for property userFilter, equals the command-line CVS switch "-w". * @return Value of property userFilter, empty string means the current user. */ private String getUserFilter() { return userFilter; } /** Setter for property userFilter, equals the command-line CVS switch "-w". * @param userFilter New value of property userFilter. */ public final void setUserFilter(String userFilter) { this.userFilter = userFilter; } /** Getter for property headerAndDescOnly, equals the command-line CVS switch "-t". * @return Value of property headerAndDescOnly. */ private boolean isHeaderAndDescOnly() { return headerAndDescOnly; } /** Setter for property headerAndDescOnly, equals the command-line CVS switch "-t". * @param headerAndDescOnly New value of property headerAndDescOnly. */ public final void setHeaderAndDescOnly(boolean headerAndDescOnly) { this.headerAndDescOnly = headerAndDescOnly; } /** * Returns the arguments of the command in the command-line style. * Similar to getCVSCommand() however without the files and command's name */ private String getCVSArguments() { @NonNls final StringBuilder cvsArguments = new StringBuilder(); if (isDefaultBranch()) { cvsArguments.append("-b "); } if (isHeaderAndDescOnly()) { cvsArguments.append("-t "); } if (isHeaderOnly()) { cvsArguments.append("-h "); } if (isNoTags()) { cvsArguments.append("-N "); } if (!isRecursive()) { cvsArguments.append("-l "); } if (userFilter != null) { cvsArguments.append("-w"); cvsArguments.append(userFilter); cvsArguments.append(' '); } if (revisionFilter != null) { cvsArguments.append("-r"); cvsArguments.append(revisionFilter); cvsArguments.append(' '); } if (stateFilter != null) { cvsArguments.append("-s"); cvsArguments.append(stateFilter); cvsArguments.append(' '); } if (dateFilter != null) { cvsArguments.append("-d"); cvsArguments.append(dateFilter); cvsArguments.append(' '); } return cvsArguments.toString(); } // Utils ================================================================== protected final void addModifiedRequest(FileObject fileObject, Entry entry, Requests requests, IClientEnvironment clientEnvironment) { requests.addIsModifiedRequest(fileObject); } }