| /******************************************************************************* |
| * Copyright (c) 2001, 2007 Oracle Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Oracle Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jst.jsf.core.internal.jsflibraryregistry.util; |
| |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.core.commands.ExecutionException; |
| import org.eclipse.core.commands.operations.AbstractOperation; |
| import org.eclipse.core.commands.operations.IUndoableOperation; |
| import org.eclipse.core.runtime.IAdaptable; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| |
| /** |
| * Encapsulates a chain of one or more version steps into a full upgrade. |
| * |
| * @author cbateman |
| * @deprecated |
| */ |
| public class UpgradeOperation extends AbstractOperation { |
| |
| private final List/*<VersionUpgradeOperation*/ _stepOperations; |
| |
| /** |
| * @param label |
| */ |
| public UpgradeOperation(String label) { |
| super(label); |
| _stepOperations = new ArrayList(); |
| } |
| |
| /** |
| * Add upgrade operation to the list of operations. |
| * Execute, undo and redo call each operation's corresponding |
| * method in the order they are added to the list. |
| * @param operation |
| */ |
| public void addVersionUpgrade(VersionUpgradeOperation operation) |
| { |
| _stepOperations.add(operation); |
| } |
| |
| /** |
| * @param monitor |
| * @param info |
| * @return an OK status if all goes well. The status for the first op |
| * that fails otherwise. |
| * @throws ExecutionException |
| */ |
| public IStatus execute(IProgressMonitor monitor, IAdaptable info) |
| throws ExecutionException { |
| |
| boolean upgraded = false; |
| |
| for (final Iterator it = _stepOperations.iterator(); it.hasNext();) |
| { |
| VersionUpgradeOperation op = (VersionUpgradeOperation) it.next(); |
| // TODO: move to covariant |
| UpgradeStatus status = (UpgradeStatus) op.execute(monitor, info); |
| |
| // fail fast |
| if (status.getSeverity() != IStatus.OK) |
| { |
| return status; |
| } |
| |
| // once an upgrade is flagged, set flag |
| if (status.isUpgradeOccurred()) |
| { |
| upgraded = true; |
| } |
| } |
| |
| return new UpgradeStatus(IStatus.OK, upgraded, Messages.UpgradeOperation_Success); |
| } |
| |
| /** |
| * @param monitor |
| * @param info |
| * @return an OK status if all goes well. The status for the first op |
| * that fails otherwise. |
| * @throws ExecutionException |
| */ |
| public IStatus redo(IProgressMonitor monitor, IAdaptable info) |
| throws ExecutionException { |
| for (final Iterator it = _stepOperations.iterator(); it.hasNext();) |
| { |
| VersionUpgradeOperation op = (VersionUpgradeOperation) it.next(); |
| IStatus status = op.redo(monitor, info); |
| |
| // fail fast |
| if (status.getSeverity() != IStatus.OK) |
| { |
| return status; |
| } |
| } |
| |
| return new UpgradeStatus(IStatus.OK, true, Messages.UpgradeOperation_Success); |
| } |
| |
| /** |
| * @param monitor |
| * @param info |
| * @return an OK status if all goes well. The status for the first op |
| * that fails otherwise. |
| * @throws ExecutionException |
| */ |
| public IStatus undo(IProgressMonitor monitor, IAdaptable info) |
| throws ExecutionException { |
| for (final Iterator it = _stepOperations.iterator(); it.hasNext();) |
| { |
| VersionUpgradeOperation op = (VersionUpgradeOperation) it.next(); |
| IStatus status = op.undo(monitor, info); |
| |
| // fail fast |
| if (status.getSeverity() != IStatus.OK) |
| { |
| return status; |
| } |
| } |
| |
| return Status.OK_STATUS; |
| } |
| |
| /** |
| * @return an OK status if all goes well. The status for the first op |
| * that fails otherwise. |
| * @throws ExecutionException |
| */ |
| public IStatus commit() throws ExecutionException |
| { |
| for (final Iterator it = _stepOperations.iterator(); it.hasNext();) |
| { |
| VersionUpgradeOperation op = (VersionUpgradeOperation) it.next(); |
| |
| if (op.canCommit()) |
| { |
| IStatus status = op.commit(); |
| |
| // fail fast |
| if (status.getSeverity() != IStatus.OK) |
| { |
| return status; |
| } |
| } |
| } |
| |
| return Status.OK_STATUS; |
| } |
| |
| public boolean canExecute() |
| { |
| for (final Iterator it = _stepOperations.iterator(); it.hasNext();) |
| { |
| IUndoableOperation op = (IUndoableOperation) it.next(); |
| |
| // fail fast |
| if (!op.canExecute()) |
| { |
| return false; |
| } |
| } |
| |
| return true; |
| } |
| |
| public boolean canRedo() { |
| for (final Iterator it = _stepOperations.iterator(); it.hasNext();) |
| { |
| IUndoableOperation op = (IUndoableOperation) it.next(); |
| |
| // fail fast |
| if (!op.canRedo()) |
| { |
| return false; |
| } |
| } |
| |
| return true; |
| } |
| |
| public boolean canUndo() { |
| for (final Iterator it = _stepOperations.iterator(); it.hasNext();) |
| { |
| IUndoableOperation op = (IUndoableOperation) it.next(); |
| |
| // fail fast |
| if (!op.canUndo()) |
| { |
| return false; |
| } |
| } |
| |
| return true; |
| } |
| |
| public void dispose() |
| { |
| for (final Iterator it = _stepOperations.iterator(); it.hasNext();) |
| { |
| IUndoableOperation op = (IUndoableOperation) it.next(); |
| op.dispose(); |
| } |
| } |
| |
| } |