/********************************************************************** * Copyright (c) 2002 IBM Corporation and others. * All rights reserved.   This program and the accompanying materials * are made available under the terms of the Common Public License v0.5 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v05.html *  * Contributors:  * IBM - Initial API and implementation **********************************************************************/package org.eclipse.ant.internal.ui;import java.util.Vector;import org.apache.tools.ant.Target;import org.eclipse.jface.viewers.LabelProvider;public class TargetsListLabelProvider extends LabelProvider {		private Vector selectedTargets = null;	private String defaultTargetName = null;/** * Takes an object and returns a string which will stand for this object. *  * @param model the object that has to be displayed * @return the string representing the object */	public String getText(Object model) {	Target targetToDisplay = (Target) model;	// Could it be null ?	if (targetToDisplay != null) {		StringBuffer result = new StringBuffer(targetToDisplay.getName());		if (targetToDisplay.getName().equals(defaultTargetName))			result.append(" (" + Policy.bind("labelprovider.defaultTarget") + ")");		if (selectedTargets != null) {			int targetIndex = selectedTargets.indexOf(model);			if (targetIndex >= 0) {				result.append(" [");				result.append(targetIndex + 1);				result.append("]");			}		}		return result.toString();	} else		return "";}public void setSelectedTargets(Vector value) {	selectedTargets = value;}public void setDefaultTargetName(String name) {	defaultTargetName = name;}	}