import java.util.*;
import java.io.*;

public class Fachwerk
{
  private Vector stabListe    = new Vector();
  private Vector knotenListe  = new Vector();
  
  public Vector getStabListe(){return stabListe;}
  public Vector getKnotenListe(){return knotenListe;}
  public Knoten getKnoten( int nr )
  {
    Knoten      result = null;
    Enumeration enum   = knotenListe.elements();
    
    while ( enum.hasMoreElements() )
    {
      Knoten k = (Knoten)enum.nextElement();
      if( k.getNr()==nr )
        result = k;
    }    
    return result;
  }
  
  public void speichern() throws IOException
  {
    File              file = new File("c:"+File.separator+"fachwerk.txt");
    FileOutputStream  fos  = new FileOutputStream(file);
    DataOutputStream  dos  = new DataOutputStream( fos );
      
    // Alle Knoten speichern
    // Anzahl der Knoten "\n" bedeutet "new line"
    dos.writeBytes(knotenListe.size()+"\n");
    
    // Knotennummern und Koordinaten
    for( int i=0 ; i<knotenListe.size() ; i++ )
    {
      Knoten k = (Knoten)knotenListe.elementAt(i);
      dos.writeBytes(k.getNr()+" "+k.getX()+" "+k.getY()+"\n");
    }    
  
    //Alle Staebe speichern
	dos.writeBytes(stabListe.size()+"\n" );
	for( int i=0; i<stabListe.size(); i++ )
	{
		Stab s= (Stab)stabListe.elementAt(i);
		dos.writeBytes(s.getNr()+" "+s.getKnotenA().getNr()+" "+s.getKnotenB()+"\n");
	}
  }
  public static Fachwerk laden() throws IOException
  {
    Fachwerk          fachwerk  = new Fachwerk();
    File              file      = new File("c:"+File.separator+"fachwerk.txt");
    FileInputStream   fis       = new FileInputStream(file);
    DataInputStream   dis       = new DataInputStream( fis );
        
    // Wieviele Knoten sind einzuladen
    int anzKnt = Integer.parseInt(dis.readLine());
    // Alle Knotendaten einlesen, Objekte erzeugen und in der 
    // Liste speichern
    for( int i=0 ; i<anzKnt ; i++ )
    {
      // Ein StringTokenizer zerlegt eine Zeichenkette in
      // einzelne Elemente, die durch ein Leerzeichen getrennt sind
      StringTokenizer st = new StringTokenizer( dis.readLine() );      
      int nr  = Integer.parseInt( st.nextToken() );
      int x   = Integer.parseInt( st.nextToken() );
      int y   = Integer.parseInt( st.nextToken() );
      
      // Knoten erzeugen
      Knoten k = new Knoten( nr, x, y );
      // Knoten speichern
      fachwerk.getKnotenListe().addElement( k );
    }
    
    
    // Wieviele Stäbe sind einzulesen
    int anzStb = Integer.parseInt(dis.readLine());
    // Alle Stabdaten einlesen, Objekte erzeugen und in der 
    // Liste speichern
    for( int i=0 ; i<anzStb ; i++ )
    {
      // Ein StringTokenizer zerlegt eine Zeichenkette in
      // einzelne Elemente, die durch ein Leerzeichen getrennt sind
      StringTokenizer st = new StringTokenizer( dis.readLine() );      
      int nr      = Integer.parseInt( st.nextToken() );
      int kntAnr  = Integer.parseInt( st.nextToken() );
      int kntBnr  = Integer.parseInt( st.nextToken() );
      
      // Stab erzeugen
      Stab s = new Stab( nr, fachwerk.getKnoten(kntAnr), fachwerk.getKnoten(kntBnr) );
      // Knoten speichern
      fachwerk.getStabListe().addElement( s );
    }
        
    return fachwerk;
  }
}
