/*******************************************************************************
 * Copyright (c) 2002, 2004 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.wst.ws.internal.explorer.platform.wsdl.fragment.util;

import java.util.*;

public class OptionVector
{
  private Vector options_;
  
  public OptionVector()
  {
    options_ = new Vector();
  }
  
  public void addOption(String displayValue,String value)
  {
    options_.addElement(new Option(displayValue,value));
  }
  
  public String getDisplayValue(int position)
  {
    Option option = (Option)options_.elementAt(position);
    return option.getDisplayValue();
  }
  
  public String getValue(int position)
  {
    Option option = (Option)options_.elementAt(position);
    return option.getValue();
  }
  
  public int size()
  {
    return options_.size();
  }
  
  private final class Option
  {
    private String displayValue_;
    private String value_;
    public Option(String displayValue,String value)
    {
      displayValue_ = displayValue;
      value_ = value;
    }
    
    public final String getDisplayValue()
    {
      return displayValue_;
    }
    
    public final String getValue()
    {
      return value_;
    }
  }
}
