Search in sources :

Example 11 with CreateFileOperation

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

the class ScenarioOpenFile method createInstance.

@Override
public ScenarioInstance createInstance(final EvaluatorContext ctx, Operation operation) {
    /**
     * This scenario is triggered by an open or create of a new file
     */
    if (operation instanceof CreateFileOperation) {
        CreateFileOperation c = (CreateFileOperation) operation;
        if (c.getName() == null) {
            logger.debug("c.getName is null! - scenario not active");
            return null;
        }
        if (c.getName().matches(pattern)) {
            if (checkScenarioActive(c.getName(), ctx.getScenarioInstances())) {
                logger.debug("scenario already active for name" + c.getName());
                return null;
            }
            if (logger.isDebugEnabled()) {
                logger.debug("New Open File Instance for CreateFileOperation:" + c);
            }
            ScenarioOpenFileInstance instance = new ScenarioOpenFileInstance();
            instance.setTimeout(timeout);
            instance.setRanking(ranking);
            return instance;
        }
    }
    if (operation instanceof OpenFileOperation) {
        OpenFileOperation o = (OpenFileOperation) operation;
        if (o.getName() == null) {
            logger.debug("o.getName is null! - scenario not active");
            return null;
        }
        if (o.getName().matches(pattern)) {
            if (checkScenarioActive(o.getName(), ctx.getScenarioInstances())) {
                logger.debug("scenario already active for name" + o.getName());
                return null;
            }
            if (logger.isDebugEnabled()) {
                logger.debug("New Open File Instance for OpenFileOperation:" + o);
            }
            ScenarioOpenFileInstance instance = new ScenarioOpenFileInstance();
            instance.setTimeout(timeout);
            instance.setRanking(ranking);
            return instance;
        }
    }
    // No not interested.
    return null;
}
Also used : CreateFileOperation(org.alfresco.filesys.repo.rules.operations.CreateFileOperation) OpenFileOperation(org.alfresco.filesys.repo.rules.operations.OpenFileOperation)

Example 12 with CreateFileOperation

use of org.alfresco.filesys.repo.rules.operations.CreateFileOperation 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)

Example 13 with CreateFileOperation

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

the class ScenarioDeleteRestoreInstance 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 deleteName:" + deleteName);
            isComplete = true;
            return null;
        }
    }
    switch(internalState) {
        case NONE:
            /**
             * Looking for file being deleted deleted
             */
            if (operation instanceof DeleteFileOperation) {
                DeleteFileOperation d = (DeleteFileOperation) operation;
                deleteName = d.getName();
                if (logger.isDebugEnabled()) {
                    logger.debug("entering LOOKING_FOR_CREATE state: " + deleteName);
                }
                internalState = InternalState.LOOKING_FOR_CREATE;
                ArrayList<Command> commands = new ArrayList<Command>();
                ArrayList<Command> postCommitCommands = new ArrayList<Command>();
                ArrayList<Command> postErrorCommands = new ArrayList<Command>();
                commands.add(new DeleteFileCommand(d.getName(), d.getRootNodeRef(), d.getPath()));
                postCommitCommands.add(newDeleteFileCallbackCommand());
                return new CompoundCommand(commands, postCommitCommands, postErrorCommands);
            } else {
                // anything else bomb out
                if (logger.isDebugEnabled()) {
                    logger.debug("State error, expected a DELETE");
                }
                isComplete = true;
            }
            break;
        case LOOKING_FOR_CREATE:
            /**
             * Looking for a create operation of the deleted file
             */
            if (operation instanceof CreateFileOperation) {
                CreateFileOperation c = (CreateFileOperation) operation;
                if (c.getName().equalsIgnoreCase(deleteName)) {
                    isComplete = true;
                    if (originalNodeRef != null) {
                        logger.debug("Scenario fires:" + this);
                        return new RestoreFileCommand(c.getName(), c.getRootNodeRef(), c.getPath(), c.getAllocationSize(), originalNodeRef);
                    }
                    return null;
                }
            }
    }
    return null;
}
Also used : DeleteFileOperation(org.alfresco.filesys.repo.rules.operations.DeleteFileOperation) CompoundCommand(org.alfresco.filesys.repo.rules.commands.CompoundCommand) RestoreFileCommand(org.alfresco.filesys.repo.rules.commands.RestoreFileCommand) DeleteFileCommand(org.alfresco.filesys.repo.rules.commands.DeleteFileCommand) RestoreFileCommand(org.alfresco.filesys.repo.rules.commands.RestoreFileCommand) ArrayList(java.util.ArrayList) CreateFileOperation(org.alfresco.filesys.repo.rules.operations.CreateFileOperation) DeleteFileCommand(org.alfresco.filesys.repo.rules.commands.DeleteFileCommand) Date(java.util.Date) CompoundCommand(org.alfresco.filesys.repo.rules.commands.CompoundCommand)

Aggregations

CreateFileOperation (org.alfresco.filesys.repo.rules.operations.CreateFileOperation)13 DeleteFileOperation (org.alfresco.filesys.repo.rules.operations.DeleteFileOperation)9 Date (java.util.Date)8 ArrayList (java.util.ArrayList)7 CompoundCommand (org.alfresco.filesys.repo.rules.commands.CompoundCommand)7 CopyContentCommand (org.alfresco.filesys.repo.rules.commands.CopyContentCommand)6 DeleteFileCommand (org.alfresco.filesys.repo.rules.commands.DeleteFileCommand)6 RenameFileOperation (org.alfresco.filesys.repo.rules.operations.RenameFileOperation)6 RenameFileCommand (org.alfresco.filesys.repo.rules.commands.RenameFileCommand)5 Matcher (java.util.regex.Matcher)4 MoveFileOperation (org.alfresco.filesys.repo.rules.operations.MoveFileOperation)4 CloseFileOperation (org.alfresco.filesys.repo.rules.operations.CloseFileOperation)3 OpenFileOperation (org.alfresco.filesys.repo.rules.operations.OpenFileOperation)3 CloseFileCommand (org.alfresco.filesys.repo.rules.commands.CloseFileCommand)2 RestoreFileCommand (org.alfresco.filesys.repo.rules.commands.RestoreFileCommand)2 NetworkFile (org.alfresco.jlan.server.filesys.NetworkFile)2 HashMap (java.util.HashMap)1 Map (java.util.Map)1 TempNetworkFile (org.alfresco.filesys.repo.TempNetworkFile)1 Command (org.alfresco.filesys.repo.rules.Command)1