/*******************************************************************************
 * Copyright (c) 2000, 2003 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

package org.eclipse.ui.internal.roles;

import org.eclipse.ui.roles.IRole;
import org.eclipse.ui.roles.IRoleEvent;

final class RoleEvent implements IRoleEvent {

	private boolean activityBindingsChanged;
	private boolean definedChanged;
	private boolean descriptionChanged;
	private boolean nameChanged;
	private IRole role;

	RoleEvent(IRole role, boolean activityBindingsChanged, boolean definedChanged, boolean descriptionChanged, boolean nameChanged) {
		if (role == null)
			throw new NullPointerException();
		
		this.role = role;
		this.activityBindingsChanged = activityBindingsChanged;			
		this.definedChanged = definedChanged;
		this.descriptionChanged = descriptionChanged;
		this.nameChanged = nameChanged;
	}

	public IRole getRole() {
		return role;
	}

	public boolean hasDefinedChanged() {
		return definedChanged;
	}	
	
	public boolean hasDescriptionChanged() {
		return descriptionChanged;
	}

	public boolean hasNameChanged() {
		return nameChanged;
	}
	
	public boolean haveActivityBindingsChanged() {
		return activityBindingsChanged;
	}
}
