public FileAction update()

in vault-vlt/src/main/java/org/apache/jackrabbit/vault/vlt/VltFile.java [431:536]


    public FileAction update(VaultFile remoteFile, boolean force)
            throws VltException {
        State state  = getStatus();
        switch (state) {
            case IGNORED:
            case OBSTRUCTED:
            case REPLACED:
                if (!force || remoteFile == null) {
                    throw error("update not possible. file is " + state.name().toLowerCase(Locale.ROOT) + ". " +
                            "Specify --force to overwrite existing files.");
                }
                return doUpdate(remoteFile, false);

            case ADDED:
                if (remoteFile != null) {
                    if (mergeableWithRemote(remoteFile) != FileAction.VOID) {
                        throw error("Failed to add file: object of the same name already exists.");
                    }
                    return doUpdate(remoteFile, false);
                } else {
                    return FileAction.VOID;
                }

            case CLEAN:
                if (remoteFile == null) {
                    return doDelete(false);
                } else {
                    if (file.isDirectory()) {
                        // do nothing
                        return FileAction.VOID;
                    } else {
                        return doUpdate(remoteFile, false);
                    }
                }

            case CONFLICTED:
                if (remoteFile == null) {
                    try {
                        if (!entry.revertConflict(file)) {
                            return FileAction.CONFLICTED;
                        }
                    } catch (IOException e) {
                        throw exception("Error during update.", e);
                    }
                    // refetch status, and delete file if clean
                    return doDelete(getStatus() != State.CLEAN);
                } else {
                    try {
                        if (!entry.revertConflict(file)) {
                            return doMerge(remoteFile, FileAction.CONFLICTED);
                        } else {
                            return doMerge(remoteFile, FileAction.UPDATED);
                        }
                    } catch (IOException e) {
                        throw exception("Error during update.", e);
                    }
                }

            case DELETED:
                if (remoteFile == null) {
                    // we can delete the entry since someone else deleted it as well
                    return doDelete(false);
                } else {
                    // just update base and entry, in case someone wants to revert
                    return doUpdate(remoteFile, true);
                }

            case MISSING:
                if (remoteFile == null) {
                    // if file is missing, just delete it
                    return doDelete(false);
                } else {
                    // do update
                    entry = null;
                    return doUpdate(remoteFile, false);
                }

            case MODIFIED:
                if (remoteFile == null) {
                    // keep the file
                    return doDelete(true);
                } else {
                    return doMerge(remoteFile, FileAction.VOID);
                }

            case UNKNOWN:
                if (remoteFile == null) {
                    // do nothing
                    return FileAction.VOID;
                } else {
                    // do update
                    if (file.exists() && !force) {
                        throw error("Failed to update: object of the same name already exists." +
                                " Specify --force to overwrite existing files.");
                    }
                    return doUpdate(remoteFile, false);
                }

            case VOID:
                // do update
                return doUpdate(remoteFile, false);

            default:
                throw exception("illegal state: " + state, null);
        }
    }