blob: 62a159a26401ae642f40b330d101ea9c857c3de3 [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 the CVS Client Library.
* The Initial Developer of the Original Code is Robert Greig.
* Portions created by Robert Greig are Copyright (C) 2000.
* All Rights Reserved.
*
* Contributor(s): Robert Greig.
*****************************************************************************/
package org.netbeans.lib.cvsclient.command.remove;
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.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.progress.IProgressViewer;
import org.netbeans.lib.cvsclient.progress.sending.FileStateRequestsProgressHandler;
import org.netbeans.lib.cvsclient.request.CommandRequest;
import org.netbeans.lib.cvsclient.request.Requests;
import org.netbeans.lib.cvsclient.util.BugLog;
import org.jetbrains.annotations.NonNls;
import java.io.IOException;
/**
* @author Thomas Singer
*/
public final class RemoveCommand extends AbstractCommand {
// Fields =================================================================
private boolean deleteBeforeRemove;
private boolean ignoreLocallyExistingFiles;
// Setup ==================================================================
public RemoveCommand() {
}
// Implemented ============================================================
public 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.REMOVE, clientEnvironment);
addFileRequests(cvsFiles, requests, clientEnvironment);
requests.addLocalPathDirectoryRequest();
addArgumentRequests(requests);
final ICvsListener parser = new RemoveParser(eventSender, clientEnvironment.getCvsFileSystem());
parser.registerListeners(listenerRegistry);
try {
return requestProcessor.processRequests(requests, FileStateRequestsProgressHandler.create(progressViewer, cvsFiles));
}
finally {
parser.unregisterListeners(listenerRegistry);
}
}
protected void addRequestForFile(FileObject fileObject,
Entry entry,
boolean fileExists,
Requests requests,
IClientEnvironment clientEnvironment) {
if (isDeleteBeforeRemove()) {
try {
clientEnvironment.getLocalFileWriter()
.removeLocalFile(fileObject, clientEnvironment.getCvsFileSystem(), clientEnvironment.getFileReadOnlyHandler());
}
catch (IOException ex) {
BugLog.getInstance().showException(ex);
}
fileExists = false;
}
if (isIgnoreLocallyExistingFiles()) {
fileExists = false;
}
super.addRequestForFile(fileObject, entry, fileExists, requests, clientEnvironment);
}
public String getCvsCommandLine() {
@NonNls final StringBuffer cvsCommandLine = new StringBuffer("remove ");
cvsCommandLine.append(getCvsArguments());
appendFileArguments(cvsCommandLine);
return cvsCommandLine.toString();
}
public void resetCvsCommand() {
super.resetCvsCommand();
setRecursive(false);
setDeleteBeforeRemove(false);
setIgnoreLocallyExistingFiles(false);
}
// Accessing ==============================================================
/**
* Returns true if the local files will be deleted automatically.
*/
private boolean isDeleteBeforeRemove() {
return deleteBeforeRemove;
}
/**
* Sets whether the local files will be deleted before.
*/
public void setDeleteBeforeRemove(boolean deleteBeforeRemove) {
this.deleteBeforeRemove = deleteBeforeRemove;
}
/**
* Returns true to indicate that locally existing files are treated as they
* would not exist.
* This is a extension to the standard cvs-behaviour!
*/
private boolean isIgnoreLocallyExistingFiles() {
return ignoreLocallyExistingFiles;
}
/**
* Sets whether locally existing files will be treated as they were deleted
* before.
* This is a extension to the standard cvs-behaviour!
*/
public void setIgnoreLocallyExistingFiles(boolean ignoreLocallyExistingFiles) {
this.ignoreLocallyExistingFiles = ignoreLocallyExistingFiles;
}
// Utils ==================================================================
private String getCvsArguments() {
@NonNls final StringBuilder toReturn = new StringBuilder();
if (!isRecursive()) {
toReturn.append("-l ");
}
if (isDeleteBeforeRemove()) {
toReturn.append("-f ");
}
return toReturn.toString();
}
}