/*                                                                           *\
        file: Language.java
       class: Language
        date: 02/05/1996
      author: Arthur
 description: Class to add lines of code to function points with a selected
              language
\*                                                                           */

import java.awt.*;
import java.util.*;
import java.io.*;
import java.net.*;

public class Language extends Frame
{
  /* private data */
  private String lang="Java";
  private Hashtable langs;
  private Object parent;
  private List listbox;
  private CocomoTool main;

  /* method for getting language name */
  public String getLanguage()
  {
    return lang;
  }

  /* method for getting lines of code for selected language */
  public int getLOC()
  {
    if(langs.containsKey(lang))
      return ((Integer)langs.get(lang)).intValue();
    else
      return 0;
  }

  /* change the current language to l */
  public void setLanguage(String l)
  {
    if(langs.containsKey(l))
    {
      lang=l;
      int i;
      for(i=0;i<listbox.countItems();i++)
        if(listbox.getItem(i).equals(l))
          listbox.select(i);
    }
  }

  /* defenition of availeble languages */
  private void FillList()
  {
    langs.clear();
    try
    {
      DataInputStream in;
      String s,t;
      int i;

      /* get data from file of url */
      if(main.inAnApplet)
        in=new DataInputStream(new URL(main.getCodeBase(),"Languages.list").openStream());
      else
        in=new DataInputStream(new FileInputStream("Languages.list"));

      /* read lines from the stream */
      while((s=in.readLine())!=null)
      {
        i=s.indexOf('\t');
        /* split in name and loc */
        t=s.substring(0,i);
        listbox.addItem(t);
        langs.put(t,new Integer(s.substring(i+1)));
      }
      in.close();
    }
    catch(Exception e)
    {
      System.out.println("Error: "+e);
      listbox.addItem("Java");
      langs.put("Java",new Integer(53));
    }
  }

  /* constructor */
  public Language(CocomoTool m)
  {
    main=m;

    langs=new Hashtable();
    listbox=new List();
    FillList();

    setLayout(new BorderLayout());

    /* build the listbox 
    listbox=new List();
    Enumeration e=langs.keys();
    while(e.hasMoreElements())
      listbox.addItem((String)e.nextElement());*/

    add("Center",listbox);
    add("South",new Button("Close"));

    setTitle("Select Language");
    pack();
    resize(400,400);

    setLanguage("Java");
  }

  /* Event Handler */
  public boolean handleEvent(Event evt)
  {
    if((evt.id==Event.WINDOW_ICONIFY)||(evt.id==Event.WINDOW_DESTROY))
    {
      hide();
      main.updateLOC();
      return true;
    }
    else if(evt.target instanceof List)
    {
      /* value could have changed */
      String l=listbox.getSelectedItem();
      if((l!=null)&&(l.compareTo(lang)!=0))
      {
        lang=l;
        main.updateLOC();
      }
      return true;
    }
    else if((evt.target instanceof Button)&&(evt.id==Event.ACTION_EVENT)&&(((Button)evt.target).getLabel()=="Close"))
    {
      hide();
      main.updateLOC();
      return true;
    }
    return false;
  }
}

