/*******************************************************************************
 * Copyright (c) 2006, 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.ui.views.markers.internal;

import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.ui.internal.views.markers.MarkerSupportInternalUtilities;

/**
 * MarkerGroupingEntry is the configuration object for the markerGroupingEntry
 * extension.
 *
 * @since 3.2
 *
 */
public class MarkerGroupingEntry {

	private static final String PRIORITY = "priority"; //$NON-NLS-1$

	private MarkerGroup markerGroup;
	private String label;
	private String id;
	private int sortPriority;

	/**
	 * Create a new instance of the receiver from element.
	 * @param element
	 */
	public MarkerGroupingEntry(IConfigurationElement element) {
		label = element.getAttribute(MarkerSupportRegistry.LABEL);
		id = element.getAttribute(MarkerSupportInternalUtilities.ATTRIBUTE_ID);
		sortPriority = Integer.valueOf(element.getAttribute(PRIORITY))
				.intValue();
	}

	/**
	 * Create a new instance of the receiver with just a label.
	 * @param label
	 */
	public MarkerGroupingEntry(String label) {
		this.label = label;
		sortPriority = 0;
	}

	/**
	 * Set the receiver as the default grouping entry for type markerType.
	 *
	 * @param markerType
	 *            String
	 */
	public void setAsDefault(String markerType) {
		markerGroup.setAsDefault(markerType, this);

	}

	/**
	 * Return the id for the receiver.
	 *
	 * @return String
	 */
	public String getId() {
		return id;
	}

	/**
	 * Set the group for the receiver.
	 *
	 * @param group
	 */
	public void setGroup(MarkerGroup group) {
		markerGroup = group;

	}

	/**
	 * Get the label of the receiver.
	 *
	 * @return String
	 */
	public String getLabel() {
		return label;
	}

	/**
	 * Return the priority of the receiver.
	 *
	 * @return int
	 */
	public int getPriority() {
		return sortPriority;
	}

	/**
	 * Return the marker group for the receiver.
	 *
	 * @return FieldMarkerGroup
	 */
	public MarkerGroup getMarkerGroup() {
		return markerGroup;
	}

}
