|
What this is
Other links
The source code
/*
* 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-2003 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.javacvs.commands;
import org.openide.util.*;
import java.io.*;
import java.util.*;
import org.netbeans.modules.javacvs.*;
import org.netbeans.lib.cvsclient.event.*;
import org.netbeans.lib.cvsclient.command.diff.DiffInformation;
import org.netbeans.lib.cvsclient.command.PipedFileInformation;
import org.netbeans.lib.cvsclient.command.update.UpdateCommand;
import org.netbeans.lib.cvsclient.command.diff.DiffCommand;
import org.netbeans.lib.cvsclient.command.status.StatusCommand;
import org.netbeans.lib.cvsclient.command.Command;
import org.netbeans.lib.cvsclient.command.BasicCommand;
import org.netbeans.lib.cvsclient.command.CommandException;
import org.netbeans.modules.javacvs.commands.*;
import org.openide.filesystems.FileObject;
import java.beans.*;
import org.netbeans.modules.javacvs.customizers.DiffParamInput;
import org.netbeans.modules.javacvs.events.*;
/** This class implements the cvs diff command.
*
* @author mkleint
*/
public class CvsDiff extends FileSystemCommand {
private File startFile;
/**
* Holds value of property beforeDate.
*/
private String beforeDate1 = null;
/**
* Holds value of property firstRevision.
*/
private String revision1 = null;
/**
* Holds value of property secondRevision.
*/
private String revision2 = null;
/**
* Holds value of property beforeDate2.
*/
private String beforeDate2 = null;
/**
* Keyword substitution. The -k switch in command line cvs.
*/
private String keywordSubst;
/**
* to be recursive is default behaviour of command.
*/
private boolean recursive = true;
/** Holds value of property ignoreAllWhitespace. */
private boolean ignoreAllWhitespace;
/** Holds value of property ignoreBlankLines. */
private boolean ignoreBlankLines;
/** Holds value of property ignoreCase. */
private boolean ignoreCase;
/** Holds value of property ignoreSpaceChange. */
private boolean ignoreSpaceChange;
/** Holds value of property contextDiff. */
private boolean contextDiff;
/** Holds value of property unifiedDiff. */
private boolean unifiedDiff;
private boolean includeStatCheckCommands = false;
private LinkedList checkoutCommands;
private FsDiff diffImpl;
/** Creates new CvsDiff instance.
*/
public CvsDiff(File[] filesToCheck, ClientProvider fs) {
super(fs);
setFiles(filesToCheck);
diffImpl = new DiffImpl();
}
/** Creates new CvsDiff instance.
*/
public CvsDiff() {
super();
diffImpl = new DiffImpl();
}
public CvsCommand getImpl() {
return diffImpl;
}
public FsDiff getDiffImpl() {
return diffImpl;
}
public void setIncludeStatusAndCheckout(boolean include) {
includeStatCheckCommands = include;
}
public String getName() {
return NbBundle.getBundle(CvsDiff.class).getString("CvsDiff.name"); // NOI18N
}
protected void initCommand(boolean commandIsRunning) {
// here the the commands is initiated just right before running the command
clearCommandList();
int dirNum = 0;
BasicCommand command;
checkoutCommands = new LinkedList();
File[] files = new File[getFiles().length];
System.arraycopy(getFiles(),0,files,0, getFiles().length);
for (int index = 0; index < files.length; index++) {
if (files[index] != null && files[index].isDirectory()) {
//that way just one UI component is run after finish of the command
File[] fls = new File[1];
fls[0] = files[index];
if (includeStatCheckCommands) {
command = new StatusCommand();
command.setFiles (fls);
toDoCommands.addElement (command);
}
command = new DiffCommand();
command.setFiles(fls);
setCommandArguments(command);
if (includeStatCheckCommands) {
checkNeedForCheckout((DiffCommand)command, checkoutCommands);
}
toDoCommands.addElement(command);
files[index] = null;
dirNum = dirNum + 1;
}
}
// now proceed all single files in one batch.
if (dirNum == files.length) {
super.initCommand(commandIsRunning);
return; // no files to check status on.
}
File[] singleFiles = new File[files.length - dirNum];
int singleIndex = 0;
for (int ind = 0; ind < files.length; ind++) {
if (files[ind] != null) {
singleFiles[singleIndex] = files[ind];
singleIndex = singleIndex + 1;
}
}
if (includeStatCheckCommands) {
command = new StatusCommand();
command.setFiles (singleFiles);
toDoCommands.addElement (command);
}
command = new DiffCommand();
command.setFiles(singleFiles);
setCommandArguments(command);
if (includeStatCheckCommands) {
checkNeedForCheckout((DiffCommand)command, checkoutCommands);
}
toDoCommands.addElement(command);
// just add oen command to the queue
super.initCommand(commandIsRunning);
}
protected void beforeEachExecute() {
super.beforeEachExecute();
}
protected void afterEachExecute() {
super.afterEachExecute();
}
protected void executeFailed(Exception exc) {
stopCommand();
super.executeFailed(exc);
}
/**
* return the library command that is considered main command.
* that one is used for loading from
*/
protected Class getMainCvsCommand() {
return DiffCommand.class;
}
/**
* Called when file status information has been received
*/
public void fileInfoGenerated(FileInfoEvent e) {
super.fileInfoGenerated(e);
}
private void checkNeedForCheckout(DiffCommand comm, LinkedList checkoutList) {
// Do always.. just to be sure we got the base file to start from..
// therwise for Locally removed files we would have to make complicated lookup.. for example.
// if (comm.getRevision2() != null || comm.getBeforeDate2() != null) {
UpdateCommand checkComm = new UpdateCommand();
checkComm.setFiles(comm.getFiles());
checkComm.setPipeToOutput(true);
checkComm.setRecursive(comm.isRecursive());
if (comm.getRevision2() != null) {
checkComm.setUpdateByRevision(comm.getRevision2());
} else if (comm.getBeforeDate2() != null) {
checkComm.setUpdateByDate(comm.getBeforeDate2());
}
checkoutList.add(checkComm);
// }
}
// adds the checkouts commands before the diff commands in order to have the
public void addCheckoutCommands() {
Iterator it = checkoutCommands.iterator();
while (it.hasNext()) {
toDoCommands.add(0, it.next());
}
}
/** Getter for property beforeDate.
* @return Value of property beforeDate.
*/
public String getBeforeDate1()
{
return beforeDate1;
}
/** Setter for property beforeDate.
* @param beforeDate New value of property beforeDate.
*/
public void setBeforeDate1(String beforeDate)
{
this.beforeDate1 = beforeDate;
}
/** Getter for property firstRevision.
* @return Value of property firstRevision.
*/
public String getRevision1()
{
return revision1;
}
/** Setter for property firstRevision.
* @param firstRevision New value of property firstRevision.
*/
public void setRevision1(String firstRevision)
{
revision1 = firstRevision;
}
/** Getter for property secondRevision.
* @return Value of property secondRevision.
*/
public String getRevision2()
{
return revision2;
}
/** Setter for property secondRevision.
* @param secondRevision New value of property secondRevision.
*/
public void setRevision2(String secondRevision)
{
this.revision2 = secondRevision;
}
/** Getter for property beforeDate2.
* @return Value of property beforeDate2.
*/
public String getBeforeDate2()
{
return beforeDate2;
}
/** Setter for property beforeDate2.
* @param beforeDate2 New value of property beforeDate2.
*/
public void setBeforeDate2(String beforeDate2)
{
this.beforeDate2 = beforeDate2;
}
/**
* Getter for property keywordSubst.
* @return Value of property keywordSubst.
*/
public String getKeywordSubst()
{
return keywordSubst;
}
/**
* Setter for property keywordSubst.
* @param keywordSubst New value of property keywordSubst.
*/
public void setKeywordSubst(String keywordSubst)
{
this.keywordSubst = keywordSubst;
}
/** Sets recursive (-R switch) or local (-l switch) behaviour.
*/
public void setRecursive(boolean recursive) {
this.recursive = recursive;
}
/** Returns recursive (-R switch) or local (-l switch) behaviour.
*/
public boolean isRecursive() {
return recursive;
}
/** true if all the whitespace differences should be ignored. (-w)
* @return Value of property ignoreAllWhitespace.
*/
public boolean isIgnoreAllWhitespace() {
return this.ignoreAllWhitespace;
}
/** Setter for property ignoreAllWhitespace.
* true if all the whitespace differences should be ignored. (-w)
* @param ignoreAllWhitespace New value of property ignoreAllWhitespace.
*/
public void setIgnoreAllWhitespace(boolean ignoreAllWhitespace) {
this.ignoreAllWhitespace = ignoreAllWhitespace;
}
/** Getter for property ignoreBlankLines.
* @return Value of property ignoreBlankLines.
*/
public boolean isIgnoreBlankLines() {
return this.ignoreBlankLines;
}
/** Setter for property ignoreBlankLines.
* @param ignoreBlankLines New value of property ignoreBlankLines.
*/
public void setIgnoreBlankLines(boolean ignoreBlankLines) {
this.ignoreBlankLines = ignoreBlankLines;
}
/** Getter for property ignoreCase.
* @return Value of property ignoreCase.
*/
public boolean isIgnoreCase() {
return this.ignoreCase;
}
/** Setter for property ignoreCase.
* @param ignoreCase New value of property ignoreCase.
*/
public void setIgnoreCase(boolean ignoreCase) {
this.ignoreCase = ignoreCase;
}
/** Getter for property ignoreSpaceChange.
* @return Value of property ignoreSpaceChange.
*/
public boolean isIgnoreSpaceChange() {
return this.ignoreSpaceChange;
}
/** Setter for property ignoreSpaceChange.
* @param ignoreSpaceChange New value of property ignoreSpaceChange.
*/
public void setIgnoreSpaceChange(boolean ignoreSpaceChange) {
this.ignoreSpaceChange = ignoreSpaceChange;
}
/**
* equals to the -c switch of cvs
* Getter for property contextDiff.
* @return Value of property contextDiff.
*/
public boolean isContextDiff() {
return this.contextDiff;
}
/**
* equals to the -c switch of cvs
* Setter for property contextDiff.
* @param contextDiff New value of property contextDiff.
*/
public void setContextDiff(boolean contextDiff) {
this.contextDiff = contextDiff;
}
/**
* equals to the -u switch of cvs
* Getter for property unifiedDiff.
* @return Value of property unifiedDiff.
*/
public boolean isUnifiedDiff() {
return this.unifiedDiff;
}
/**
* equals to the -u switch of cvs.
* Setter for property unifiedDiff.
* @param unifiedDiff New value of property unifiedDiff.
*/
public void setUnifiedDiff(boolean unifiedDiff) {
this.unifiedDiff = unifiedDiff;
}
/**
* called when server responses with "ok" or "error", (when the command finishes)
*/
public void commandTerminated(org.netbeans.lib.cvsclient.event.TerminationEvent e) {
// super.commandTerminated(e);
}
public class DiffImpl extends FsDiff implements FileSystemCommandImpl {
public DiffImpl() {
}
public FileSystemCommand getOuterClassInstance() {
return CvsDiff.this;
}
/** Add a CommandDisplayerListener to the FilesystemCommand.
*
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.