Package org.eclipse.jst.jsf.core.internal.jsflibraryregistry.util

Source Code of org.eclipse.jst.jsf.core.internal.jsflibraryregistry.util.VersionUpgradeOperation

/*******************************************************************************
* 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 org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.operations.AbstractOperation;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;

/**
* Implements a single step (vX -> v(X+1)) version upgrade as an
* Eclipse operation.  Adds an additional  "commit" abstract method.  This
* can be called after execute in situations where further actions require
* user approval etc.  See the javadocs for the method, it contains important
* API rules
*
* @author cbateman
* @deprecated
*/
public abstract class VersionUpgradeOperation extends AbstractOperation
{
  /**
   * the version being upgraded from
   */
  protected final int    _oldVersion;
  /**
   * the version being upgraded to
   */
  protected final int    _newVersion;
 
  private boolean        _hasExecuted;
  private boolean        _hasCommitted;
  private boolean        _hasCleanState = true;
 
  /**
   * @param label
   * @param oldVersion
   * @param newVersion
   */
  public VersionUpgradeOperation(String label, int oldVersion, int newVersion) {
    super(label);
    _oldVersion = oldVersion;
    _newVersion = newVersion;
  }
 
  /**
   * Allows selected functionality to be called after execute is called.
   * Commit must conform to following contract:
   *
   *  1) should do nothing if execute() has not been called.
   *  2) must do nothing if canCommit == false
   *  3) once executed, undo should undo commit() first, then execute()
   *  4) once undone, redo should call commit only if it was called before undo()
   * @return must conform to same contract as execute()
   * @throws ExecutionException
   * 
   */
  public final IStatus commit() throws ExecutionException
  {
    if (canCommit())
    {
      IStatus result =  doCommit();
      if (result.getSeverity() == IStatus.OK)
      {
        _hasCommitted = true;
      }
      else
      {
        _hasCommitted = false;
        _hasCleanState = false;
      }
      return result;
    }
    throw new ExecutionException("Cannot execute"); //$NON-NLS-1$
  }

  /**
   * @return the result of the actual commit
   * @throws ExecutionException
   */
  protected abstract IStatus doCommit() throws ExecutionException;

  /**
   * @return true if the operation can be committed
   */
  public boolean canCommit()
  {
    return _hasExecuted && !_hasCommitted && _hasCleanState;
  }

  public final IStatus execute(IProgressMonitor monitor, IAdaptable info)
      throws ExecutionException
  {
    if (canExecute())
    {
      IStatus result = doExecute(monitor, info);
      if (result.getSeverity() == IStatus.OK)
      {
        _hasExecuted = true;
      }
      else
      {
        _hasExecuted = false;
        _hasCleanState = false;
      }
      return result;
    }
    throw new ExecutionException("Cannot execute"); //$NON-NLS-1$
  }

  /**
   * @param monitor
   * @param info
   * @return the status of the real execution
   * @throws ExecutionException
   */
  protected abstract IStatus doExecute(IProgressMonitor monitor, IAdaptable info)throws ExecutionException;

  public final IStatus redo(IProgressMonitor monitor, IAdaptable info)
      throws ExecutionException {
    if (canRedo())
    {
      IStatus result = doRedo(monitor, info);
      if (result.getSeverity() == IStatus.OK)
      {
        _hasExecuted = true;
      }
      else
      {
        _hasExecuted = false;
        _hasCleanState = false;
      }
      return result;
    }
    throw new ExecutionException("Cannot redo"); //$NON-NLS-1$
  }

  /**
   * @param monitor
   * @param info
   * @return the status of the real redo
   * @throws ExecutionException
   */
  protected abstract IStatus doRedo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException;

  public final IStatus undo(IProgressMonitor monitor, IAdaptable info)
      throws ExecutionException {
    if (canUndo())
    {
      IStatus result = doUndo(monitor, info);
      if (result.getSeverity() == IStatus.OK)
      {
        _hasExecuted = false;
      }
      else
      {
        _hasExecuted = true;
        _hasCleanState = false;
      }
      return result;
    }
    throw new ExecutionException("Cannot redo"); //$NON-NLS-1$
  }

  /**
   * @param monitor
   * @param info
   * @return the status of the real redo
   * @throws ExecutionException
   */
  protected abstract IStatus doUndo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException;

  public boolean canExecute() {
    return !_hasExecuted && _hasCleanState;
  }

  public boolean canRedo() {
    return canExecute();
  }

  public boolean canUndo() {
    return _hasExecuted && _hasCleanState;
  }

  /**
   * @param executed
   */
  protected void setHasExecuted(boolean executed) {
    _hasExecuted = executed;
  }

  /**
   * @param committed
   */
  protected void setHasCommitted(boolean committed) {
    _hasCommitted = committed;
  }

  /**
   * @param cleanState
   */
  protected void setHasCleanState(boolean cleanState) {
    _hasCleanState = cleanState;
  }

  /**
   * @return true if has executed
   */
  protected boolean hasExecuted() {
    return _hasExecuted;
  }

  /**
   * @return true if has committed
   */
  protected boolean hasCommitted() {
    return _hasCommitted;
  }

  /**
   * @return true if has clean state
   */
  protected boolean hasCleanState() {
    return _hasCleanState;
  }
 
}
TOP

Related Classes of org.eclipse.jst.jsf.core.internal.jsflibraryregistry.util.VersionUpgradeOperation

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.