/*******************************************************************************
 * Copyright (c) 2004-2008 Andras Schmidt, Andras Balogh, Istvan Rath and Daniel Varro
 * 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:
 *    Andras Schmidt, Andras Balogh, Istvan Rath - initial API and implementation
 *******************************************************************************/
package org.eclipse.viatra2.tags;

import java.util.Set;

import org.eclipse.core.resources.IMarker;
import org.eclipse.viatra2.core.IModelElement;

/**
 * Describes a Tag that carries some information and can be attached to a set of 
 * VPM model elements.
 * @author Istvan Rath
 *
 */
public interface ITag {

	/**
	 * The textual message of the tag.
	 * 
	 * @return message string
	 */
	public String getMessage();
	
	/**
	 * Gets the set of VPM model elements associated to the tag.
	 */
	public Set<IModelElement> getAssociatedElements();
	
	/**
	 * Gets the kind of tag.
	 */
	public TagKind getKind();
	
	/**
	 * Gets the associated marker if present.
	 * @return
	 */
	public IMarker getMarker();
	
	/**
	 * Sets the associated marker.
	 */
	public void setMarker(IMarker marker);
	
	
	/**
	 * Gets the SWT Color associated to the tag.
	 */
	public int getBackgroundColor();
	
	
	/**
	 * Gets the SWT Color associated to the tag.
	 */
	public int getForegroundColor();
	
	
	/**
	 * Sets the SWT Color associated to the tag.
	 * @param c
	 */
	public void setForegroundColor(int colorindex);

	/**
	 * Sets the background color of the tag.
	 */
	public void setBackgroundColor(int colorindex);

	
}
