/*******************************************************************************
 * Copyright (c) 2000, 2005 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.update.internal.operations;

import org.eclipse.core.runtime.*;
import org.eclipse.update.core.*;


/**
 * The feature status provide info about the broken features and what is
 * wrong.
 */
public class FeatureStatus extends Status {
	public final static int CODE_OTHER = IStatus.OK;//0
	public final static int CODE_PREREQ_FEATURE = 1;
	public final static int CODE_PREREQ_PLUGIN = 2;
	public final static int CODE_EXCLUSIVE = 4;
	public final static int CODE_CYCLE = 8;
	public final static int CODE_OPTIONAL_CHILD = 16;
	public final static int CODE_ENVIRONMENT = 32;
	IFeature feature;

	public FeatureStatus(IFeature feature, int severity, String pluginId, int code, String message, Throwable exception) {
		super(severity, pluginId, code, message, exception);
		this.feature = feature;
	}
	public IFeature getFeature() {
		return feature;
	}
	public boolean equals(Object obj) {
		if (!(obj instanceof FeatureStatus))
			return false;
		FeatureStatus fs = (FeatureStatus) obj;
		// only check for feature, regardless of status type
		if (fs.getFeature() == feature)
			return true;
		else if (fs.getFeature() == null && feature == null)
			return fs.getMessage().equals(getMessage());
		else if (fs.getFeature() == null && feature != null)
			return false;
		else if (fs.getFeature() != null && feature == null)
			return false;
		else if (fs.getFeature().equals(feature))
			return true;
		else
			return false;
	}

}
