use of org.alfresco.filesys.repo.rules.operations.RenameFileOperation in project alfresco-repository by Alfresco.
the class ScenarioDoubleRenameShuffleInstance method evaluate.
/**
* Evaluate the next operation
* @param operation
*/
public Command evaluate(Operation operation) {
/**
* Anti-pattern : timeout
*/
Date now = new Date();
if (now.getTime() > startTime.getTime() + getTimeout()) {
if (logger.isDebugEnabled()) {
logger.debug("Instance timed out");
}
isComplete = true;
return null;
}
switch(internalState) {
case NONE:
/**
* Looking for first rename Y(middle) to Z(end)
*/
if (operation instanceof RenameFileOperation) {
if (logger.isDebugEnabled()) {
logger.debug("Got first rename - tracking rename: " + operation);
}
RenameFileOperation r = (RenameFileOperation) operation;
fileMiddle = r.getFrom();
fileEnd = r.getTo();
String[] paths = FileName.splitPath(r.getFromPath());
folderMiddle = paths[0];
String[] paths2 = FileName.splitPath(r.getToPath());
folderEnd = paths2[0];
internalState = InternalState.RENAME1;
return new RenameFileCommand(r.getFrom(), r.getTo(), r.getRootNodeRef(), r.getFromPath(), r.getToPath());
} else {
// anything else bomb out
if (logger.isDebugEnabled()) {
logger.debug("State error, expected a RENAME");
}
isComplete = true;
}
case RENAME1:
/**
* Looking for the second of two renames X(createName) to Y(middle) to Z(end)
*/
if (operation instanceof RenameFileOperation) {
if (logger.isDebugEnabled()) {
logger.debug("Tracking rename: " + operation);
}
RenameFileOperation r = (RenameFileOperation) operation;
// Now see if this rename makes a pair
if (fileMiddle.equalsIgnoreCase(r.getTo())) {
if (logger.isDebugEnabled()) {
logger.debug("Got second rename");
}
fileFrom = r.getFrom();
/**
* This shuffle reverses the rename out of the way and then copies the
* content only. Finally it moves the temp file into place for the subsequent
* delete.
* a) Rename Z to Y (Reverse previous move)
* b) Copy Content from X to Y
* c) Rename X to Z (move temp file out to old location)
*/
if (logger.isDebugEnabled()) {
logger.debug("Go and shuffle! fromName:" + fileFrom + " middle: " + fileMiddle + " end: " + fileEnd);
}
String[] paths = FileName.splitPath(r.getFromPath());
String oldFolder = paths[0];
ArrayList<Command> commands = new ArrayList<Command>();
RenameFileCommand r1 = new RenameFileCommand(fileEnd, fileMiddle, r.getRootNodeRef(), oldFolder + "\\" + fileEnd, oldFolder + "\\" + fileMiddle);
commands.add(r1);
CopyContentCommand copyContent = new CopyContentCommand(fileFrom, fileMiddle, r.getRootNodeRef(), oldFolder + "\\" + fileFrom, oldFolder + "\\" + fileMiddle);
commands.add(copyContent);
if (deleteBackup) {
logger.debug("deleteBackup option turned on");
DeleteFileCommand d1 = new DeleteFileCommand(oldFolder, r.getRootNodeRef(), oldFolder + "\\" + fileFrom);
commands.add(d1);
} else {
RenameFileCommand r2 = new RenameFileCommand(fileFrom, fileEnd, r.getRootNodeRef(), oldFolder + "\\" + fileFrom, oldFolder + "\\" + fileEnd);
commands.add(r2);
}
/**
* TODO - we may need to copy a new node for the backup and delete the temp node.
* It depends if we care about the contents of the Backup file.
*/
isComplete = true;
return new CompoundCommand(commands);
}
}
if (operation instanceof MoveFileOperation) {
if (logger.isDebugEnabled()) {
logger.info("Tracking rename: " + operation);
}
MoveFileOperation r = (MoveFileOperation) operation;
// Now see if this rename makes a pair
if (fileMiddle.equalsIgnoreCase(r.getTo())) {
if (logger.isDebugEnabled()) {
logger.debug("Got second rename");
}
fileFrom = r.getFrom();
/**
* This shuffle reverses the rename out of the way and then copies the
* content only. Finally it moves the temp file into place for the subsequent
* delete.
* a) Rename Z to Y (Reverse previous move)
* b) Copy Content from X to Y
* c) Rename X to Z (move temp file out to old location)
*/
if (logger.isDebugEnabled()) {
logger.debug("Go and shuffle! fromName:" + fileFrom + " middle: " + fileMiddle + " end: " + fileEnd);
}
String[] paths = FileName.splitPath(r.getFromPath());
String oldFolder = paths[0];
ArrayList<Command> commands = new ArrayList<Command>();
RenameFileCommand r1 = new RenameFileCommand(fileEnd, fileMiddle, r.getRootNodeRef(), folderEnd + "\\" + fileEnd, folderMiddle + "\\" + fileMiddle);
commands.add(r1);
CopyContentCommand copyContent = new CopyContentCommand(fileFrom, fileMiddle, r.getRootNodeRef(), oldFolder + "\\" + fileFrom, folderMiddle + "\\" + fileMiddle);
commands.add(copyContent);
if (deleteBackup) {
logger.debug("deleteBackup option turned on");
DeleteFileCommand d1 = new DeleteFileCommand(oldFolder, r.getRootNodeRef(), oldFolder + "\\" + fileFrom);
commands.add(d1);
} else {
MoveFileCommand m1 = new MoveFileCommand(fileFrom, fileEnd, r.getRootNodeRef(), oldFolder + "\\" + fileFrom, folderEnd + "\\" + fileEnd, isMoveAsSystem());
commands.add(m1);
}
/**
* TODO - we may need to copy a new node for the backup and delete the temp node.
* It depends if we care about the contents of the Backup file.
*/
isComplete = true;
return new CompoundCommand(commands);
} else {
if ((interimPattern != null)) {
// ALF-16257: temporary Word file moved from .TemporaryItems
Matcher m = interimPattern.matcher(r.getFromPath());
if (m.matches() && r.getFrom().equals(r.getTo())) {
if (logger.isDebugEnabled()) {
logger.debug("Got system move from temporary folder: " + r.getFrom() + " to " + r.getToPath());
}
return new MoveFileCommand(r.getFrom(), r.getTo(), r.getRootNodeRef(), r.getFromPath(), r.getToPath(), true);
}
}
}
}
break;
}
return null;
}
use of org.alfresco.filesys.repo.rules.operations.RenameFileOperation in project alfresco-repository by Alfresco.
the class ScenarioMultipleRenameShuffleInstance method evaluate.
/**
* Evaluate the next operation
* @param operation
*/
public Command evaluate(Operation operation) {
/**
* Anti-pattern : timeout
*/
Date now = new Date();
if (now.getTime() > startTime.getTime() + getTimeout()) {
if (logger.isDebugEnabled()) {
logger.debug("Instance timed out");
}
isComplete = true;
return null;
}
switch(internalState) {
case NONE:
/**
* Looking for first rename O(original) to T(temporary)
*/
if (operation instanceof RenameFileOperation) {
RenameFileOperation r = (RenameFileOperation) operation;
if (logger.isDebugEnabled()) {
logger.debug("Got first rename - tracking rename: " + operation);
}
originalName = r.getFromPath();
ArrayList<Command> commands = new ArrayList<Command>();
ArrayList<Command> postCommitCommands = new ArrayList<Command>();
ArrayList<Command> postErrorCommands = new ArrayList<Command>();
CreateFileCommand c1 = new CreateFileCommand(r.getTo(), r.getRootNodeRef(), r.getToPath(), 0, true);
CopyContentCommand copyContent = new CopyContentCommand(r.getFrom(), r.getTo(), r.getRootNodeRef(), r.getFromPath(), r.getToPath());
DeleteFileCommand d1 = new DeleteFileCommand(r.getFrom(), r.getRootNodeRef(), r.getFromPath());
postCommitCommands.add(deleteFileCallbackCommand());
commands.add(c1);
commands.add(copyContent);
commands.add(d1);
internalState = InternalState.INITIALISED;
return new CompoundCommand(commands, postCommitCommands, postErrorCommands);
} else {
// anything else bomb out
if (logger.isDebugEnabled()) {
logger.debug("State error, expected a RENAME");
}
isComplete = true;
}
case INITIALISED:
/**
* Looking for last rename T(temporary) to O(original)
*/
if (operation instanceof RenameFileOperation) {
if (logger.isDebugEnabled()) {
logger.debug("Tracking rename: " + operation);
}
RenameFileOperation r = (RenameFileOperation) operation;
if (r.getToPath().equalsIgnoreCase(originalName)) {
ArrayList<Command> commands = new ArrayList<Command>();
RestoreFileCommand r1 = new RestoreFileCommand(r.getTo(), r.getRootNodeRef(), r.getToPath(), 0, originalNodeRef);
CopyContentCommand copyContent = new CopyContentCommand(r.getFrom(), r1.getName(), r.getRootNodeRef(), r.getFromPath(), r1.getPath());
DeleteFileCommand d1 = new DeleteFileCommand(r.getFrom(), r.getRootNodeRef(), r.getFromPath());
commands.add(r1);
commands.add(copyContent);
commands.add(d1);
if (logger.isDebugEnabled()) {
logger.debug("Scenario complete");
}
isComplete = true;
return new CompoundCommand(commands);
}
}
break;
}
return null;
}
use of org.alfresco.filesys.repo.rules.operations.RenameFileOperation in project alfresco-repository by Alfresco.
the class ScenarioOpenFileInstance method evaluate.
/**
* Evaluate the next operation
* @param operation
*/
public Command evaluate(Operation operation) {
/**
* Anti Pattern - Delete of the open file.
*/
if (operation instanceof DeleteFileOperation) {
DeleteFileOperation d = (DeleteFileOperation) operation;
if (d.getName() == null) {
return null;
}
if (name.equalsIgnoreCase(d.getName())) {
logger.debug("Anti-Pattern - delete of the open file, scenario:" + this);
isComplete = true;
return null;
}
}
switch(state) {
case NONE:
if (operation instanceof CreateFileOperation) {
CreateFileOperation c = (CreateFileOperation) operation;
name = c.getName();
if (name != null) {
state = InternalState.OPENING;
logger.debug("Create File name:" + name);
ArrayList<Command> commands = new ArrayList<Command>();
ArrayList<Command> postCommitCommands = new ArrayList<Command>();
ArrayList<Command> postErrorCommands = new ArrayList<Command>();
commands.add(new CreateFileCommand(c.getName(), c.getRootNodeRef(), c.getPath(), c.getAllocationSize(), c.isHidden()));
postCommitCommands.add(newOpenFileCallbackCommand());
postErrorCommands.add(newOpenFileErrorCallbackCommand());
return new CompoundCommand(commands, postCommitCommands, postErrorCommands);
}
} else if (operation instanceof OpenFileOperation) {
OpenFileOperation o = (OpenFileOperation) operation;
name = o.getName();
if (name != null) {
state = InternalState.OPENING;
logger.debug("Open File name:" + name);
ArrayList<Command> commands = new ArrayList<Command>();
commands.add(new OpenFileCommand(o.getName(), o.getMode(), o.isTruncate(), o.getRootNodeRef(), o.getPath()));
ArrayList<Command> postCommitCommands = new ArrayList<Command>();
ArrayList<Command> postErrorCommands = new ArrayList<Command>();
postCommitCommands.add(newOpenFileCallbackCommand());
postErrorCommands.add(newOpenFileErrorCallbackCommand());
return new CompoundCommand(commands, postCommitCommands, postErrorCommands);
}
}
// Scenario Not Started
logger.debug("Scenario not started - no name");
isComplete = true;
return null;
case OPENING:
if (operation instanceof OpenFileOperation) {
OpenFileOperation o = (OpenFileOperation) operation;
if (o.getName() == null) {
return null;
}
if (name.equalsIgnoreCase(o.getName())) {
/**
* TODO What to do here - one thread is in the middle of
* opening a file while another tries to open the same file
* sleep for a bit? then check state again? What happens if file
* closes while sleeping. For now log an error.
*/
logger.error("Second open while in opening state. :" + name);
// isComplete = true;
// return null;
}
}
/**
* Anti-pattern : timeout - is this needed ?
*/
Date now = new Date();
if (now.getTime() > startTime.getTime() + getTimeout()) {
if (logger.isDebugEnabled()) {
logger.debug("Instance in OPENING STATE timed out name" + name);
}
isComplete = true;
}
return null;
case ERROR:
logger.debug("Open has failed :" + name);
isComplete = true;
return null;
case OPEN:
if (operation instanceof RenameFileOperation) {
RenameFileOperation r = (RenameFileOperation) operation;
if (r.getFrom() == null) {
return null;
}
if (name.equalsIgnoreCase(r.getFrom())) {
logger.warn("rename of an open file");
}
}
if (operation instanceof CloseFileOperation) {
CloseFileOperation c = (CloseFileOperation) operation;
if (c.getName() == null) {
return null;
}
if (name.equalsIgnoreCase(c.getName())) {
NetworkFile file = c.getNetworkFile();
if (isReadOnly(file)) {
// Read Only File
if (openReadOnlyCount == 1) {
if (logger.isDebugEnabled()) {
logger.debug("Close of last read only file handle:" + this);
}
openReadOnlyCount = 0;
if (openReadWriteCount <= 0) {
if (logger.isDebugEnabled()) {
logger.debug("Scenario is complete:" + this);
}
isComplete = true;
}
if (file instanceof TempNetworkFile) {
logger.debug("this is the last close of a temp read only file");
ArrayList<Command> commands = new ArrayList<Command>();
ArrayList<Command> postCommitCommands = new ArrayList<Command>();
commands.add(new CloseFileCommand(c.getName(), file, c.getRootNodeRef(), c.getPath()));
postCommitCommands.add(new RemoveTempFileCommand((TempNetworkFile) file));
return new CompoundCommand(commands, postCommitCommands);
} else {
return new CloseFileCommand(c.getName(), file, c.getRootNodeRef(), c.getPath());
}
}
if (logger.isDebugEnabled()) {
logger.debug("Only decrement count of read only file handle:" + this);
}
openReadOnlyCount--;
return new DoNothingCommand();
} else {
// Read Only File
if (openReadWriteCount == 1) {
if (logger.isDebugEnabled()) {
logger.debug("Close of last read write file handle:" + this);
}
openReadWriteCount = 0;
if (openReadOnlyCount <= 0) {
if (logger.isDebugEnabled()) {
logger.debug("Scenario is complete:" + this);
}
isComplete = true;
}
//
ArrayList<Command> commands = new ArrayList<Command>();
ArrayList<Command> postCommitCommands = new ArrayList<Command>();
ArrayList<Command> postErrorCommands = new ArrayList<Command>();
commands.add(new CloseFileCommand(c.getName(), file, c.getRootNodeRef(), c.getPath()));
if (c.isDeleteOnClose()) {
postCommitCommands.add(new ReduceQuotaCommand(c.getName(), file, c.getRootNodeRef(), c.getPath()));
}
if (file instanceof TempNetworkFile) {
postCommitCommands.add(new RemoveTempFileCommand((TempNetworkFile) file));
}
return new CompoundCommand(commands, postCommitCommands, postErrorCommands);
}
if (logger.isDebugEnabled()) {
logger.debug("Only decrement count of read write file handle:" + this);
}
openReadWriteCount--;
return new DoNothingCommand();
}
}
} else if (operation instanceof OpenFileOperation) {
OpenFileOperation o = (OpenFileOperation) operation;
if (o.getName() == null) {
return null;
}
if (name != null && name.equalsIgnoreCase(o.getName())) {
if (o.getMode() == OpenFileMode.READ_WRITE) {
// This is an open of a read write access
if (openReadWriteCount == 0) {
logger.debug("Open first read/write from scenario:" + this);
ArrayList<Command> commands = new ArrayList<Command>();
commands.add(new OpenFileCommand(o.getName(), o.getMode(), o.isTruncate(), o.getRootNodeRef(), o.getPath()));
ArrayList<Command> postCommitCommands = new ArrayList<Command>();
postCommitCommands.add(newOpenFileCallbackCommand());
return new CompoundCommand(commands, postCommitCommands);
} else {
// TODO Need a permission check here and increment post check
openReadWriteCount++;
logger.debug("Return already open read/write file handle from scenario:" + this);
return new ReturnValueCommand(fileHandleReadWrite);
}
} else {
if (openReadWriteCount > 0) {
// however the file is already open for read/write
openReadWriteCount++;
logger.debug("Return already open read/write file handle from scenario:" + this);
return new ReturnValueCommand(fileHandleReadWrite);
}
if (openReadOnlyCount == 0) {
logger.debug("Open first read only from scenario:" + this);
ArrayList<Command> commands = new ArrayList<Command>();
commands.add(new OpenFileCommand(o.getName(), o.getMode(), o.isTruncate(), o.getRootNodeRef(), o.getPath()));
ArrayList<Command> postCommitCommands = new ArrayList<Command>();
postCommitCommands.add(newOpenFileCallbackCommand());
return new CompoundCommand(commands, postCommitCommands);
} else {
openReadOnlyCount++;
logger.debug("Return already open only file handle from scenario:" + this);
return new ReturnValueCommand(fileHandleReadOnly);
}
}
}
}
break;
}
return null;
}
use of org.alfresco.filesys.repo.rules.operations.RenameFileOperation in project alfresco-repository by Alfresco.
the class ScenarioCreateDeleteRenameShuffleInstance method evaluate.
/**
* Evaluate the next operation
* @param operation
*/
public Command evaluate(Operation operation) {
/**
* Anti-pattern : timeout
*/
Date now = new Date();
if (now.getTime() > startTime.getTime() + getTimeout()) {
if (logger.isDebugEnabled()) {
logger.debug("Instance timed out createName:" + createName);
isComplete = true;
return null;
}
}
/**
* Anti-pattern for all states - delete the file we are
* shuffling
*/
if (createName != null) {
if (operation instanceof DeleteFileOperation) {
DeleteFileOperation d = (DeleteFileOperation) operation;
if (d.getName().equals(createName)) {
if (logger.isDebugEnabled()) {
logger.debug("Anti-pattern : Shuffle file deleted createName:" + createName);
}
isComplete = true;
return null;
}
}
}
switch(internalState) {
case NONE:
// Looking for a create transition
if (operation instanceof CreateFileOperation) {
CreateFileOperation c = (CreateFileOperation) operation;
this.createName = c.getName();
if (logger.isDebugEnabled()) {
logger.debug("entering ACTIVE state: " + createName);
}
internalState = InternalState.ACTIVE;
return null;
} else {
// anything else bomb out
if (logger.isDebugEnabled()) {
logger.debug("State error, expected a CREATE");
}
isComplete = true;
}
break;
case ACTIVE:
/**
* Looking for target file being deleted
*
* Need to intervene and replace delete with a rename to temp file.
*/
if (operation instanceof DeleteFileOperation) {
DeleteFileOperation d = (DeleteFileOperation) operation;
String deleteName = d.getName();
/**
* For Mac 2011 powerpoint files - add an extra check based on the filename
* e.g FileA1 - delete FileA.
* For Mac 2011 excel files - check that file to delete is not temporary
*/
if (checkFilename) {
boolean isRightTarget = false;
int i = deleteName.lastIndexOf('.');
int j = createName.lastIndexOf('.');
if (i > 0) {
String deleteExt = deleteName.substring(i + 1, deleteName.length());
String createExt = (j > 0) ? createName.substring(j + 1, createName.length()) : "";
if (deleteExt.startsWith("ppt") && createExt.startsWith("ppt")) {
isRightTarget = (i < createName.length()) && deleteName.substring(0, i).equalsIgnoreCase(createName.substring(0, i));
} else if (deleteExt.startsWith("xls") && createExt.isEmpty()) {
isRightTarget = !deleteName.startsWith("._") && !deleteName.startsWith("~$");
}
}
if (isRightTarget) {
logger.debug("check filenames - does match");
} else {
if (logger.isDebugEnabled()) {
logger.debug("check filename patterns do not match - Ignore" + createName + deleteName);
}
return null;
}
}
if (logger.isDebugEnabled()) {
logger.debug("got a delete : replace with rename createName:" + createName + "deleteName:" + deleteName);
}
String tempName = ".shuffle" + d.getName();
deletes.put(d.getName(), tempName);
String[] paths = FileName.splitPath(d.getPath());
String currentFolder = paths[0];
RenameFileCommand r1 = new RenameFileCommand(d.getName(), tempName, d.getRootNodeRef(), d.getPath(), currentFolder + "\\" + tempName);
return r1;
}
/**
*/
if (operation instanceof RenameFileOperation) {
RenameFileOperation m = (RenameFileOperation) operation;
String targetFile = m.getTo();
if (deletes.containsKey(targetFile)) {
String tempName = deletes.get(targetFile);
String[] paths = FileName.splitPath(m.getToPath());
String currentFolder = paths[0];
/**
* This is where the scenario fires.
* a) Rename the temp file back to the targetFile
* b) Copy content from moved file
* c) Delete rather than move file
*/
if (logger.isDebugEnabled()) {
logger.debug("scenario fires:" + createName);
}
ArrayList<Command> commands = new ArrayList<Command>();
RenameFileCommand r1 = new RenameFileCommand(tempName, targetFile, m.getRootNodeRef(), currentFolder + "\\" + tempName, m.getToPath());
CopyContentCommand copyContent = new CopyContentCommand(m.getFrom(), targetFile, m.getRootNodeRef(), m.getFromPath(), m.getToPath());
DeleteFileCommand d1 = new DeleteFileCommand(m.getFrom(), m.getRootNodeRef(), m.getFromPath());
commands.add(r1);
commands.add(copyContent);
commands.add(d1);
logger.debug("Scenario complete");
isComplete = true;
return new CompoundCommand(commands);
}
}
}
return null;
}
use of org.alfresco.filesys.repo.rules.operations.RenameFileOperation in project alfresco-repository by Alfresco.
the class ScenarioCreateShuffleInstance method evaluate.
/**
* Evaluate the next operation
* @param operation Operation
*/
public Command evaluate(Operation operation) {
/**
* Anti-pattern : timeout
*/
Date now = new Date();
if (now.getTime() > startTime.getTime() + getTimeout()) {
if (logger.isDebugEnabled()) {
logger.debug("Instance timed out createName:" + createName);
isComplete = true;
return null;
}
}
/**
* Anti-pattern for all states - delete the file we are
* shuffling
*/
if (createName != null) {
if (operation instanceof DeleteFileOperation) {
DeleteFileOperation d = (DeleteFileOperation) operation;
if (d.getName().equals(createName)) {
if (logger.isDebugEnabled()) {
logger.debug("Anti-pattern : Shuffle file deleted createName:" + createName);
}
isComplete = true;
return null;
}
}
}
switch(internalState) {
case NONE:
// Looking for a create transition
if (operation instanceof CreateFileOperation) {
CreateFileOperation c = (CreateFileOperation) operation;
this.createName = c.getName();
if (logger.isDebugEnabled()) {
logger.debug("entering RENAME state: " + createName);
}
internalState = InternalState.RENAME;
return null;
} else {
// anything else bomb out
if (logger.isDebugEnabled()) {
logger.debug("State error, expected a CREATE");
}
isComplete = true;
}
break;
case RENAME:
/**
* Looking for two renames X(createName) to Y(middle) to Z(end)
*/
if (operation instanceof RenameFileOperation) {
if (logger.isDebugEnabled()) {
logger.debug("Tracking rename: " + operation);
}
RenameFileOperation r = (RenameFileOperation) operation;
renames.put(r.getFrom(), r.getTo());
// Now see if this rename makes a pair.
String middle = renames.get(createName);
if (middle != null) {
if (logger.isDebugEnabled()) {
logger.debug("Got second rename");
}
String end = renames.get(middle);
if (end != null) {
if (logger.isDebugEnabled()) {
logger.debug("Got two renames ");
}
this.move1 = middle;
this.move2 = end;
if (logger.isDebugEnabled()) {
logger.debug("entering DELETE state");
}
internalState = InternalState.DELETE;
/**
* This shuffle reverses the rename out of the way and then copies the
* content only. Finally it moves the temp file into place for the subsequent
* delete.
* a) Rename Z to Y (Reverse previous move)
* b) Copy Content from X to Y
* c) Rename X to Z (move temp file out to old location)
*/
if (logger.isDebugEnabled()) {
logger.debug("Go and shuffle! createName:" + createName + " move1 " + move1 + " move2 " + move2);
}
String[] paths = FileName.splitPath(r.getFromPath());
String oldFolder = paths[0];
// String oldFile = paths[1];
ArrayList<Command> commands = new ArrayList<Command>();
RenameFileCommand r1 = new RenameFileCommand(end, middle, r.getRootNodeRef(), oldFolder + "\\" + end, oldFolder + "\\" + middle);
CopyContentCommand copyContent = new CopyContentCommand(createName, move1, r.getRootNodeRef(), oldFolder + "\\" + createName, oldFolder + "\\" + middle);
RenameFileCommand r2 = new RenameFileCommand(createName, end, r.getRootNodeRef(), oldFolder + "\\" + createName, oldFolder + "\\" + end);
commands.add(r1);
commands.add(copyContent);
commands.add(r2);
return new CompoundCommand(commands);
}
}
}
break;
case DELETE:
if (operation instanceof DeleteFileOperation) {
DeleteFileOperation d = (DeleteFileOperation) operation;
if (d.getName().equals(move2)) {
if (logger.isDebugEnabled()) {
logger.debug("Scenario complete createName:" + createName);
}
isComplete = true;
}
}
/**
* Todo consider create shuffle with backup file which will never
* calls delete - do we need to pattern match on "Backup*".
* At the moment the delete state does nothing - hence
* we can simply set complete here for all situations.
*/
isComplete = true;
break;
}
return null;
}
Aggregations