/*******************************************************************************
 * Copyright (c) 2006 Sybase, Inc. 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:
 *     Sybase, Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.pagedesigner.ui.common;

import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IWorkbenchPart;

/**
 * @author mengbo
 */
public abstract class PartActivationHandler extends ShellAdapter implements
		IPartListener {
	private IWorkbenchPart _activePart;

	private boolean _isHandlingActivation = false;

	private IWorkbenchPart _trace;

	public PartActivationHandler(IWorkbenchPart part) {
		_trace = part;
	}

	/**
	 * this method is called when the specified part is activated.
	 */
	public abstract void handleActivation();

	private void internalHandleActivation() {

		if (_isHandlingActivation)
			return;

		if (_activePart == _trace) {
			_isHandlingActivation = true;
			try {
				handleActivation();
			} finally {
				_isHandlingActivation = false;
			}
		}
	}

	/**
	 * @see IPartListener#partActivated(IWorkbenchPart)
	 */
	public void partActivated(IWorkbenchPart part) {
		_activePart = part;
		internalHandleActivation();
	}

	/**
	 * @see IPartListener#partBroughtToTop(IWorkbenchPart)
	 */
	public void partBroughtToTop(IWorkbenchPart part) {
        // do nothing
	}

	/**
	 * @see IPartListener#partClosed(IWorkbenchPart)
	 */
	public void partClosed(IWorkbenchPart part) {
        // do nothing
	}

	/**
	 * @see IPartListener#partDeactivated(IWorkbenchPart)
	 */
	public void partDeactivated(IWorkbenchPart part) {
		_activePart = null;
	}

	/**
	 * @see IPartListener#partOpened(IWorkbenchPart)
	 */
	public void partOpened(IWorkbenchPart part) {
        // do nothing
	}

	/*
	 * @see ShellListener#shellActivated(ShellEvent)
	 */
	public void shellActivated(ShellEvent e) {
		internalHandleActivation();
	}
}
