/*******************************************************************************
 * 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) {
	}

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

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

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

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