/******************************************************************************
 * Copyright (c) 2002, 2008 IBM 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:
 *    IBM Corporation - initial API and implementation 
 ****************************************************************************/

package org.eclipse.gmf.runtime.diagram.ui.actions;

import org.eclipse.core.runtime.Assert;
import org.eclipse.gmf.runtime.diagram.ui.internal.actions.PropertyChangeAction;
import org.eclipse.ui.IWorkbenchPage;

/**
 * @author melaasar
 *
 * A generic action for changing and reflecting checked properties
 * 
 */
public class CheckedPropertyAction extends PropertyChangeAction {

	/**
	 * The property valye
	 */
	private Object propertyValue;
	
	/**
	 * Creates a new boolean property change action isntance
	 * 
	 * @param workbenchPage The workbench page
	 * @param propertyName The property name
	 * @param propertyId The property id
	 * @param property the initial value of the property
	 */
	protected CheckedPropertyAction(
		IWorkbenchPage workbenchPage,
		String propertyId,
		String propertyName,
		Object propertyValue) {
		super(workbenchPage, propertyId, propertyName);
		Assert.isNotNull(propertyValue);
		this.propertyValue = propertyValue;
	}
    
    protected boolean isOperationHistoryListener() {
        return true;
    }
	
	/* (non-Javadoc)
	 * @see org.eclipse.jface.action.IAction#getStyle()
	 */
	public int getStyle() {
		return AS_CHECK_BOX;
	}
	
	/* (non-Javadoc)
	 * @see org.eclipse.gmf.runtime.common.ui.action.IRepeatableAction#refresh()
	 */
	public void refresh() {
		super.refresh();
		setChecked(calculateChecked());
	}

	/**
	 * Calculates the check state of the action
	 * 
	 * @return <code>true</code> if action should be checked, <code>false</code> otherwise
	 */
	protected boolean calculateChecked() {
		return propertyValue.equals(getOperationSetPropertyValue(getPropertyId()));
	}
	
	/* (non-Javadoc)
	 * @see org.eclipse.gmf.runtime.diagram.ui.actions.internal.PropertyChangeAction#getNewPropertyValue()
	 */
	protected Object getNewPropertyValue() {
		return propertyValue;
	}

}
