/*
 * TreeMap1.java
 *
 * Created on 16. Juni 2006, 20:49
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

// TreeSet für JDK Version bis 1.4

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;


import java.util.TreeMap;
import java.util.Iterator;
import java.util.*;

// fügt in eine Liste Daten
// wenn der Datensatz existiert, wird
//    er erneut rausgeholt, und zur
//    Variable summe hinzuaddiert
// Es wird automatisch sortiert
// Am Schluss wird "SORTIERT" ausgegeben

// Funktioniert ab JDK 1,2

public class TreeMap2 extends JFrame {

  JTextArea Editor;
  TreeMap feld = new TreeMap();
//  TreeMap Comparator

  //Frame konstruieren
  public TreeMap2() {

    setSize(1000, 800);
    setTitle("Testbeispiel TreeMap1 Version bis JDK 1.4");

    // setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setGUI();
  } // create


  void setGUI() {
    JScrollPane Sc;

    JButton BnStart;		// Schalter definieren
    JButton BnSort;		// Schalter definieren
    JButton BnEsc;		// Schalter definieren

      // Center
    Editor = new JTextArea();
    Editor.setFont( new Font("Courier New", Font.BOLD,20));
    Editor.setText("-");
    Sc = new JScrollPane(Editor);
    getContentPane().add( Sc, BorderLayout.CENTER);

      // South
    JPanel panel1 = new JPanel();
    panel1.setLayout( new FlowLayout() );

		BnStart = new JButton("Start");  	// Schalter erzeugen
    BnStart.setFont( new Font("Arial", Font.BOLD,28));
		BnSort = new JButton("Sort");  	// Schalter erzeugen
    BnSort.setFont( new Font("Arial", Font.BOLD,28));
		BnEsc= new JButton();  	// Schalter erzeugen
		BnEsc.setText("Esc");  	// Text setzen
    BnEsc.setFont( new Font("Arial", Font.BOLD,28));
    panel1.add( BnStart );
    panel1.add( BnSort );
    panel1.add( BnEsc ) ;
    this.getContentPane().add(panel1, BorderLayout.SOUTH);

    BnStart.addActionListener(new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        BnStart_Click();
      }
    });
    BnSort.addActionListener(new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        BnSort_Click();
      }
    });
    BnEsc.addActionListener(new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        BnEsc_Click();
      }
    });

  }

  void add(int Nr, String sName, int summe) {
      MyClass m1;
      Object obj;
      String sNr;
      boolean bVorhanden;

      // Prüfen, ob Objekt im Feld ist?
      m1 = new MyClass(Nr,sName, summe);  // Objekt erzeugen

      obj = feld.get( new Integer(Nr) );
      if ( obj !=null ) {
        m1 = (MyClass) obj;
        // nun wird die Summe hinzuaddiert
        m1.addSumme(summe);
      }
      else {
        feld.put( new Integer(Nr), m1);
        // 1. Parameter ist der Schlüssel
        // 2. Parameter ist der Wert
        //   hier beide gleich
      }

      sNr = Integer.toString(Nr);
      while (sNr.length()<3) sNr="0"+sNr;
      Editor.append( "  "+sNr+"\t"+m1.getSumme()+"\t"+m1.getName()+"\n" );
  }


  void BnStart_Click() {
      //feld = new TreeMap();
      Editor.setText("");
      add(100,"Abba",10);
      add(140,"Zappa",2);
      add(4,"Whitesnake",200);
      add(999,"Metallica",3);
      add(345,"Elton John",4);
      add(44,"Madonna",55);
      add(46,"Dire Straits",44);
      add(1,"Deep Purple",55);
      add(23,"Al di Meola",66);
      add(456,"Charly Antolini",33);
      add(44,"Bruce Springsteen",33);

      add(4,"Whitesnake",100);
      add(1,"Deep Purple",355);
      add(345,"Elton John",24);

      Editor.append( "\n\nAnzahl im Array: "+feld.size() );
  }  // BnStart_Click

  void BnSort_Click() {
       // TreeMap
      MyClass m1;
      String sNr;
      Editor.append( "\n\nSortierte Reihenfolge:\n");

      Editor.append( "  Nr\tSumme\tName\n" );
      Collection c = feld.values();
      Iterator it = c.iterator();
      while (it.hasNext() ) {
          m1 = (MyClass) it.next();  // wird nun weitergeschaltet
          sNr = Integer.toString( m1.getNr() );
          while (sNr.length()<3) sNr="0"+sNr;
          Editor.append( "  "+sNr+"\t"+m1.getSumme()+"\t"+m1.getName()+"\n" );
      }
  }  // BnSort_Click


  void BnEsc_Click() {
    System.exit(0);
  }


  //Überschreiben, damit das Programm bei Herunterfahren des Systems beendet werden kann
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if(e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }


  public static void main(String[] args) {
    TreeMap2 frame = new TreeMap2();
    frame.setVisible(true);
  }


}



class MyClass implements Comparable {
  private int _Nummer;
  private String _Name;
  private int _Summe;

  public MyClass(int Nummer, String Name, int summe) {
    _Nummer = Nummer;
    _Name = Name;
    _Summe = summe;
  }

  // Funktion sortiert absteigend
  // deshalb umgekehrt sortieren
  public int compareTo(Object obj2) {
    MyClass myObj2 = (MyClass) obj2;
    if (getSumme() < myObj2.getSumme()) {
      return -1;
    }
    else {
      if ( getSumme() == myObj2.getSumme() )
        return 0;
      else
        return +1;
    }
  }


  public int getNr() {
    return _Nummer;
  }

  public String getName() {
    return _Name;
  }

  public int getSumme() {
    return _Summe;
  }

  public void addSumme(int summe) {
    _Summe+=summe;
  }

} // MyClass

