/*******************************************************************************
 * Copyright (c) 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.views.properties;

import org.eclipse.jface.viewers.LabelProvider;

/**
 * An <code>ILabelProvider</code> that assists in rendering labels for 
 * <code>ComboBoxPropertyDescriptors</code>.  The label for a given 
 * <code>Integer</code> value is the <code>String</code> at the value in 
 * the provided values array.  
 * 
 * @since 3.0
 */
public class ComboBoxLabelProvider extends LabelProvider {

    /**
     * The array of String labels.
     */
    private String[] values;

    /**
     * @param values the possible label values that this 
     * <code>ILabelProvider</code> may return.
     */
    public ComboBoxLabelProvider(String[] values) {
        this.values = values;
    }

    /**
     * @return the possible label values that this 
     * <code>ILabelProvider</code> may return.
     */
    public String[] getValues() {
        return values;
    }

    /**
     * @param values the possible label values that this 
     * <code>ILabelProvider</code> may return.
     */
    public void setValues(String[] values) {
        this.values = values;
    }

    /**
     * Returns the <code>String</code> that maps to the given 
     * <code>Integer</code> offset in the values array.
     * 
     * @param element an <code>Integer</code> object whose value is a valid 
     * location within the values array of the receiver
     * @return a <code>String</code> from the provided values array, or the 
     * empty <code>String</code> 
     * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
     */
    public String getText(Object element) {
        if (element == null) {
            return ""; //$NON-NLS-1$
        }

        if (element instanceof Integer) {
            int index = ((Integer) element).intValue();
            if (index >= 0 && index < values.length) {
                return values[index];
            } else {
                return ""; //$NON-NLS-1$
            }
        }

        return ""; //$NON-NLS-1$
    }
}