blob: 21a5d8bd3d937ffa80403e14a924d7c99787aecb [file] [log] [blame]
/*
* 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);
}
}