Search in sources :

Example 1 with CloseFileOperation

use of org.alfresco.filesys.repo.rules.operations.CloseFileOperation in project alfresco-repository by Alfresco.

the class ScenarioDeleteRenameOrCreate method createInstance.

@Override
public ScenarioInstance createInstance(final EvaluatorContext ctx, Operation operation) {
    /**
     * This scenario is triggered by a rename of a file matching
     * the pattern
     */
    if (operation instanceof CloseFileOperation) {
        CloseFileOperation c = (CloseFileOperation) operation;
        Matcher m = pattern.matcher(c.getName());
        if (m.matches() && c.getNetworkFile().hasDeleteOnClose()) {
            if (logger.isDebugEnabled()) {
                logger.debug("New Scenario ScenarioDeleteRenameOrCreate strPattern:" + pattern);
            }
            ScenarioDeleteRenameOrCreateInstance instance = new ScenarioDeleteRenameOrCreateInstance();
            instance.setTimeout(timeout);
            instance.setRanking(ranking);
            return instance;
        }
    }
    if (operation instanceof DeleteFileOperation) {
        DeleteFileOperation c = (DeleteFileOperation) operation;
        Matcher m = pattern.matcher(c.getName());
        if (m.matches()) {
            if (logger.isDebugEnabled()) {
                logger.debug("New Scenario ScenarioDeleteRenameOrCreate strPattern:" + pattern);
            }
            ScenarioDeleteRenameOrCreateInstance instance = new ScenarioDeleteRenameOrCreateInstance();
            instance.setTimeout(timeout);
            instance.setRanking(ranking);
            return instance;
        }
    }
    // No not interested.
    return null;
}
Also used : Matcher(java.util.regex.Matcher) DeleteFileOperation(org.alfresco.filesys.repo.rules.operations.DeleteFileOperation) CloseFileOperation(org.alfresco.filesys.repo.rules.operations.CloseFileOperation)

Example 2 with CloseFileOperation

use of org.alfresco.filesys.repo.rules.operations.CloseFileOperation 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;
}
Also used : CloseFileCommand(org.alfresco.filesys.repo.rules.commands.CloseFileCommand) DoNothingCommand(org.alfresco.filesys.repo.rules.commands.DoNothingCommand) ReduceQuotaCommand(org.alfresco.filesys.repo.rules.commands.ReduceQuotaCommand) DeleteFileOperation(org.alfresco.filesys.repo.rules.operations.DeleteFileOperation) OpenFileCommand(org.alfresco.filesys.repo.rules.commands.OpenFileCommand) CreateFileCommand(org.alfresco.filesys.repo.rules.commands.CreateFileCommand) ArrayList(java.util.ArrayList) CloseFileOperation(org.alfresco.filesys.repo.rules.operations.CloseFileOperation) RemoveTempFileCommand(org.alfresco.filesys.repo.rules.commands.RemoveTempFileCommand) OpenFileOperation(org.alfresco.filesys.repo.rules.operations.OpenFileOperation) Date(java.util.Date) RenameFileOperation(org.alfresco.filesys.repo.rules.operations.RenameFileOperation) CompoundCommand(org.alfresco.filesys.repo.rules.commands.CompoundCommand) TempNetworkFile(org.alfresco.filesys.repo.TempNetworkFile) RenameFileCommand(org.alfresco.filesys.repo.rules.commands.RenameFileCommand) DoNothingCommand(org.alfresco.filesys.repo.rules.commands.DoNothingCommand) CloseFileCommand(org.alfresco.filesys.repo.rules.commands.CloseFileCommand) CreateFileCommand(org.alfresco.filesys.repo.rules.commands.CreateFileCommand) CopyContentCommand(org.alfresco.filesys.repo.rules.commands.CopyContentCommand) DeleteFileCommand(org.alfresco.filesys.repo.rules.commands.DeleteFileCommand) CompoundCommand(org.alfresco.filesys.repo.rules.commands.CompoundCommand) ReturnValueCommand(org.alfresco.filesys.repo.rules.commands.ReturnValueCommand) OpenFileCommand(org.alfresco.filesys.repo.rules.commands.OpenFileCommand) CallbackCommand(org.alfresco.filesys.repo.rules.commands.CallbackCommand) ReduceQuotaCommand(org.alfresco.filesys.repo.rules.commands.ReduceQuotaCommand) RemoveTempFileCommand(org.alfresco.filesys.repo.rules.commands.RemoveTempFileCommand) ReturnValueCommand(org.alfresco.filesys.repo.rules.commands.ReturnValueCommand) CreateFileOperation(org.alfresco.filesys.repo.rules.operations.CreateFileOperation) TempNetworkFile(org.alfresco.filesys.repo.TempNetworkFile) NetworkFile(org.alfresco.jlan.server.filesys.NetworkFile)

Example 3 with CloseFileOperation

use of org.alfresco.filesys.repo.rules.operations.CloseFileOperation in project alfresco-repository by Alfresco.

the class NonTransactionalRuleContentDiskDriver method closeFile.

@Override
public void closeFile(SrvSession sess, TreeConnection tree, NetworkFile param) throws IOException {
    if (logger.isDebugEnabled()) {
        logger.debug("closeFile:" + param.getFullName());
    }
    ContentContext tctx = (ContentContext) tree.getContext();
    NodeRef rootNode = tctx.getRootNode();
    DriverState driverState = getDriverState(sess);
    String[] paths = FileName.splitPath(param.getFullName());
    String folder = paths[0];
    String file = paths[1];
    try {
        EvaluatorContext ctx = getEvaluatorContext(driverState, folder);
        Operation o = new CloseFileOperation(file, param, rootNode, param.getFullName(), param.hasDeleteOnClose(), param.isForce());
        Command c = ruleEvaluator.evaluate(ctx, o);
        commandExecutor.execute(sess, tree, c);
        releaseEvaluatorContextIfEmpty(driverState, ctx, folder);
    } catch (org.alfresco.repo.security.permissions.AccessDeniedException ade) {
        throw new AccessDeniedException("Unable to close file " + param.getFullName(), ade);
    }
}
Also used : AccessDeniedException(org.alfresco.jlan.server.filesys.AccessDeniedException) EvaluatorContext(org.alfresco.filesys.repo.rules.EvaluatorContext) CloseFileOperation(org.alfresco.filesys.repo.rules.operations.CloseFileOperation) OpenFileOperation(org.alfresco.filesys.repo.rules.operations.OpenFileOperation) RenameFileOperation(org.alfresco.filesys.repo.rules.operations.RenameFileOperation) DeleteFileOperation(org.alfresco.filesys.repo.rules.operations.DeleteFileOperation) CreateFileOperation(org.alfresco.filesys.repo.rules.operations.CreateFileOperation) Operation(org.alfresco.filesys.repo.rules.Operation) MoveFileOperation(org.alfresco.filesys.repo.rules.operations.MoveFileOperation) CloseFileOperation(org.alfresco.filesys.repo.rules.operations.CloseFileOperation) NodeRef(org.alfresco.service.cmr.repository.NodeRef) Command(org.alfresco.filesys.repo.rules.Command)

Example 4 with CloseFileOperation

use of org.alfresco.filesys.repo.rules.operations.CloseFileOperation in project alfresco-repository by Alfresco.

the class ScenarioRenameDeleteMoveInstance 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");
        }
        isComplete = true;
        return null;
    }
    switch(internalState) {
        case NONE:
            if (operation instanceof RenameFileOperation) {
                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.DELETE;
            } else {
                // anything else bomb out
                if (logger.isDebugEnabled()) {
                    logger.debug("State error, expected a RENAME");
                }
                isComplete = true;
            }
        case DELETE:
            if (operation instanceof DeleteFileOperation) {
                internalState = InternalState.MOVE;
                DeleteFileOperation d = (DeleteFileOperation) operation;
                if (d.getName().equalsIgnoreCase(fileEnd)) {
                    ArrayList<Command> commands = new ArrayList<Command>();
                    ArrayList<Command> postCommitCommands = new ArrayList<Command>();
                    ArrayList<Command> postErrorCommands = new ArrayList<Command>();
                    // Rename node to remove "hidden". In this case node will be moved to the archive store and can be restored later.
                    // This can be replaced with command that removes hidden aspect in future(when ContentDiskDriver2.setFileInformation() method will support hidden attribute)
                    RenameFileCommand r1 = new RenameFileCommand(fileEnd, "tmp" + fileEnd, d.getRootNodeRef(), folderEnd + "\\" + fileEnd, folderEnd + "\\" + "tmp" + fileEnd);
                    fileEnd = "tmp" + fileEnd;
                    commands.add(r1);
                    commands.add(new DeleteFileCommand(fileEnd, d.getRootNodeRef(), folderEnd + "\\" + fileEnd));
                    postCommitCommands.add(newDeleteFileCallbackCommand());
                    return new CompoundCommand(commands, postCommitCommands, postErrorCommands);
                }
            }
            if (operation instanceof CloseFileOperation) {
                CloseFileOperation c = (CloseFileOperation) operation;
                if (c.getNetworkFile().hasDeleteOnClose() && c.getName().equalsIgnoreCase(fileEnd)) {
                    internalState = InternalState.MOVE;
                    ArrayList<Command> commands = new ArrayList<Command>();
                    ArrayList<Command> postCommitCommands = new ArrayList<Command>();
                    ArrayList<Command> postErrorCommands = new ArrayList<Command>();
                    // Rename node to remove "hidden". In this case node will be moved to the archive store and can be restored later.
                    RenameFileCommand r1 = new RenameFileCommand(fileEnd, "tmp" + fileEnd, c.getRootNodeRef(), folderEnd + "\\" + fileEnd, folderEnd + "\\" + "tmp" + fileEnd);
                    fileEnd = "tmp" + fileEnd;
                    commands.add(r1);
                    commands.add(new CloseFileCommand(fileEnd, c.getNetworkFile(), c.getRootNodeRef(), folderEnd + "\\" + fileEnd));
                    postCommitCommands.add(newDeleteFileCallbackCommand());
                    return new CompoundCommand(commands, postCommitCommands, postErrorCommands);
                }
            }
            break;
        case MOVE:
            if (operation instanceof MoveFileOperation && originalNodeRef != null) {
                if (logger.isDebugEnabled()) {
                    logger.info("Tracking rename: " + operation);
                }
                MoveFileOperation m = (MoveFileOperation) operation;
                if (fileMiddle.equalsIgnoreCase(m.getTo())) {
                    if (logger.isDebugEnabled()) {
                        logger.debug("Got second rename");
                    }
                    fileFrom = m.getFrom();
                    String[] paths = FileName.splitPath(m.getFromPath());
                    String oldFolder = paths[0];
                    ArrayList<Command> commands = new ArrayList<Command>();
                    RestoreFileCommand rest1 = new RestoreFileCommand(fileEnd, m.getRootNodeRef(), folderEnd, 0, originalNodeRef);
                    RenameFileCommand r1 = new RenameFileCommand(fileEnd, fileMiddle, m.getRootNodeRef(), folderEnd + "\\" + fileEnd, folderMiddle + "\\" + fileMiddle);
                    commands.add(rest1);
                    commands.add(r1);
                    CopyContentCommand copyContent = new CopyContentCommand(fileFrom, fileMiddle, m.getRootNodeRef(), oldFolder + "\\" + fileFrom, folderMiddle + "\\" + fileMiddle);
                    commands.add(copyContent);
                    DeleteFileCommand d1 = new DeleteFileCommand(oldFolder, m.getRootNodeRef(), oldFolder + "\\" + fileFrom);
                    commands.add(d1);
                    isComplete = true;
                    return new CompoundCommand(commands);
                }
            }
            break;
    }
    return null;
}
Also used : CloseFileCommand(org.alfresco.filesys.repo.rules.commands.CloseFileCommand) DeleteFileOperation(org.alfresco.filesys.repo.rules.operations.DeleteFileOperation) RestoreFileCommand(org.alfresco.filesys.repo.rules.commands.RestoreFileCommand) ArrayList(java.util.ArrayList) CloseFileOperation(org.alfresco.filesys.repo.rules.operations.CloseFileOperation) DeleteFileCommand(org.alfresco.filesys.repo.rules.commands.DeleteFileCommand) Date(java.util.Date) RenameFileOperation(org.alfresco.filesys.repo.rules.operations.RenameFileOperation) CompoundCommand(org.alfresco.filesys.repo.rules.commands.CompoundCommand) CopyContentCommand(org.alfresco.filesys.repo.rules.commands.CopyContentCommand) RenameFileCommand(org.alfresco.filesys.repo.rules.commands.RenameFileCommand) CompoundCommand(org.alfresco.filesys.repo.rules.commands.CompoundCommand) RenameFileCommand(org.alfresco.filesys.repo.rules.commands.RenameFileCommand) CloseFileCommand(org.alfresco.filesys.repo.rules.commands.CloseFileCommand) RestoreFileCommand(org.alfresco.filesys.repo.rules.commands.RestoreFileCommand) CopyContentCommand(org.alfresco.filesys.repo.rules.commands.CopyContentCommand) DeleteFileCommand(org.alfresco.filesys.repo.rules.commands.DeleteFileCommand) MoveFileOperation(org.alfresco.filesys.repo.rules.operations.MoveFileOperation)

Example 5 with CloseFileOperation

use of org.alfresco.filesys.repo.rules.operations.CloseFileOperation in project alfresco-repository by Alfresco.

the class ScenarioDeleteRenameOrCreateInstance 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(state) {
        case NONE:
            if (operation instanceof CloseFileOperation) {
                CloseFileOperation c = (CloseFileOperation) operation;
                this.name = c.getName();
                logger.debug("New scenario initialised for file " + name);
                state = InternalState.INITIALISED;
                ArrayList<Command> commands = new ArrayList<Command>();
                ArrayList<Command> postCommitCommands = new ArrayList<Command>();
                ArrayList<Command> postErrorCommands = new ArrayList<Command>();
                commands.add(new CloseFileCommand(c.getName(), c.getNetworkFile(), c.getRootNodeRef(), c.getPath()));
                postCommitCommands.add(newDeleteFileCallbackCommand());
                return new CompoundCommand(commands, postCommitCommands, postErrorCommands);
            }
            if (operation instanceof DeleteFileOperation) {
                DeleteFileOperation c = (DeleteFileOperation) operation;
                this.name = c.getName();
                logger.debug("New scenario initialised for file " + name);
                state = InternalState.INITIALISED;
                ArrayList<Command> commands = new ArrayList<Command>();
                ArrayList<Command> postCommitCommands = new ArrayList<Command>();
                ArrayList<Command> postErrorCommands = new ArrayList<Command>();
                commands.add(new DeleteFileCommand(c.getName(), c.getRootNodeRef(), c.getPath()));
                postCommitCommands.add(newDeleteFileCallbackCommand());
                return new CompoundCommand(commands, postCommitCommands, postErrorCommands);
            }
            break;
        case INITIALISED:
            if (operation instanceof CreateFileOperation) {
                CreateFileOperation c = (CreateFileOperation) operation;
                if (c.getName().equalsIgnoreCase(name)) {
                    isComplete = true;
                    if (originalNodeRef != null) {
                        logger.debug("Delete create shuffle fire!:" + this);
                        return new RestoreFileCommand(c.getName(), c.getRootNodeRef(), c.getPath(), c.getAllocationSize(), originalNodeRef);
                    }
                    return null;
                }
            }
            if (operation instanceof RenameFileOperation) {
                RenameFileOperation r = (RenameFileOperation) operation;
                if (name.equals(r.getTo())) {
                    logger.debug("Delete Rename shuffle - fire!");
                    if (originalNodeRef != null) {
                        /**
                         * Shuffle is as follows
                         * a) Copy content from File to File~
                         * b) Delete File
                         * c) Rename File~ to File
                         */
                        ArrayList<Command> commands = new ArrayList<Command>();
                        RestoreFileCommand r1 = new RestoreFileCommand(r.getTo(), r.getRootNodeRef(), r.getToPath(), 0, originalNodeRef);
                        CopyContentCommand copyContent = new CopyContentCommand(r.getFrom(), r.getTo(), r.getRootNodeRef(), r.getFromPath(), r.getToPath());
                        DeleteFileCommand d1 = new DeleteFileCommand(r.getFrom(), r.getRootNodeRef(), r.getFromPath());
                        commands.add(r1);
                        commands.add(copyContent);
                        commands.add(d1);
                        logger.debug("Scenario complete");
                        isComplete = true;
                        return new CompoundCommand(commands);
                    } else {
                        logger.debug("Scenario complete");
                        isComplete = true;
                        return null;
                    }
                }
            }
            if (operation instanceof MoveFileOperation) {
                MoveFileOperation r = (MoveFileOperation) operation;
                if (name.equals(r.getTo())) {
                    logger.debug("Delete Rename shuffle - fire!");
                    if (originalNodeRef != null) {
                        /**
                         * Shuffle is as follows
                         * a) Copy content from File to File~
                         * b) Delete File
                         * c) Rename File~ to File
                         */
                        ArrayList<Command> commands = new ArrayList<Command>();
                        RestoreFileCommand r1 = new RestoreFileCommand(r.getTo(), r.getRootNodeRef(), r.getToPath(), 0, originalNodeRef);
                        CopyContentCommand copyContent = new CopyContentCommand(r.getFrom(), r.getTo(), r.getRootNodeRef(), r.getFromPath(), r.getToPath());
                        DeleteFileCommand d1 = new DeleteFileCommand(r.getFrom(), r.getRootNodeRef(), r.getFromPath());
                        commands.add(r1);
                        commands.add(copyContent);
                        commands.add(d1);
                        logger.debug("Scenario complete");
                        isComplete = true;
                        return new CompoundCommand(commands);
                    } else {
                        logger.debug("Scenario complete");
                        isComplete = true;
                        return null;
                    }
                }
            }
    }
    return null;
}
Also used : CloseFileCommand(org.alfresco.filesys.repo.rules.commands.CloseFileCommand) DeleteFileOperation(org.alfresco.filesys.repo.rules.operations.DeleteFileOperation) RestoreFileCommand(org.alfresco.filesys.repo.rules.commands.RestoreFileCommand) ArrayList(java.util.ArrayList) CloseFileOperation(org.alfresco.filesys.repo.rules.operations.CloseFileOperation) DeleteFileCommand(org.alfresco.filesys.repo.rules.commands.DeleteFileCommand) Date(java.util.Date) RenameFileOperation(org.alfresco.filesys.repo.rules.operations.RenameFileOperation) CompoundCommand(org.alfresco.filesys.repo.rules.commands.CompoundCommand) CopyContentCommand(org.alfresco.filesys.repo.rules.commands.CopyContentCommand) CompoundCommand(org.alfresco.filesys.repo.rules.commands.CompoundCommand) CloseFileCommand(org.alfresco.filesys.repo.rules.commands.CloseFileCommand) RestoreFileCommand(org.alfresco.filesys.repo.rules.commands.RestoreFileCommand) CopyContentCommand(org.alfresco.filesys.repo.rules.commands.CopyContentCommand) DeleteFileCommand(org.alfresco.filesys.repo.rules.commands.DeleteFileCommand) MoveFileOperation(org.alfresco.filesys.repo.rules.operations.MoveFileOperation) CreateFileOperation(org.alfresco.filesys.repo.rules.operations.CreateFileOperation)

Aggregations

CloseFileOperation (org.alfresco.filesys.repo.rules.operations.CloseFileOperation)5 DeleteFileOperation (org.alfresco.filesys.repo.rules.operations.DeleteFileOperation)5 RenameFileOperation (org.alfresco.filesys.repo.rules.operations.RenameFileOperation)4 ArrayList (java.util.ArrayList)3 Date (java.util.Date)3 CloseFileCommand (org.alfresco.filesys.repo.rules.commands.CloseFileCommand)3 CompoundCommand (org.alfresco.filesys.repo.rules.commands.CompoundCommand)3 CopyContentCommand (org.alfresco.filesys.repo.rules.commands.CopyContentCommand)3 DeleteFileCommand (org.alfresco.filesys.repo.rules.commands.DeleteFileCommand)3 CreateFileOperation (org.alfresco.filesys.repo.rules.operations.CreateFileOperation)3 MoveFileOperation (org.alfresco.filesys.repo.rules.operations.MoveFileOperation)3 RenameFileCommand (org.alfresco.filesys.repo.rules.commands.RenameFileCommand)2 RestoreFileCommand (org.alfresco.filesys.repo.rules.commands.RestoreFileCommand)2 OpenFileOperation (org.alfresco.filesys.repo.rules.operations.OpenFileOperation)2 Matcher (java.util.regex.Matcher)1 TempNetworkFile (org.alfresco.filesys.repo.TempNetworkFile)1 Command (org.alfresco.filesys.repo.rules.Command)1 EvaluatorContext (org.alfresco.filesys.repo.rules.EvaluatorContext)1 Operation (org.alfresco.filesys.repo.rules.Operation)1 CallbackCommand (org.alfresco.filesys.repo.rules.commands.CallbackCommand)1