/* Generated by Together */
import java.util.Vector;
import java.io.*;

/**
 * CDContainer verwaltet alle CDs, verfügt über Laden und Speichern.
 * Von CDContainter kann und darf es nur eine Instanz geben.
 */
// Serializable erleichtert spaeter das Abspeichern
public class CDContainer implements Serializable
{
    /**
     *Alle verwalteten CDs.
     */
    private Vector lnkCD;
    private static CDContainer instance = null;

    //Konstruktor erzeugt einen Vektor, der CDs aufnehmen kann.
    protected CDContainer(){
      lnkCD = new Vector();
      }

    // Das einzige existierende Objekt dieser Klasse holen...
    // Falls noch kein Objekt dieser Klasse existiert wird eins 
    // erzeugt.
    public static CDContainer getInstance(){
            if (instance == null) {
                instance = new CDContainer();
            }
            return instance;
        }

    /**
     * Fügt der Kollektion eine CD hinzu.
     */
    public void addCD(CD c) {
        lnkCD.add(c);
    }

    /**
     * Entfernt eine CD aus der Kollektion.
     */
    public void removeCD(CD c) {
        lnkCD.remove(c);
    }

    // Eine Test-Methode, die alle Titel der CD auf 
    // dem Bildschirm ausgibt. 
    public void TestAusgabe() {
        CD myCD;

        System.out.println("Bisherige CD-Collection\n");
        for(int i=0; i<lnkCD.size(); i++)
            {
            myCD = (CD)lnkCD.elementAt(i);
            System.out.println(myCD.getTitel()); 
            }
    }

    // Die CD zurueckliefern, die an der n-ten Stelle des Vektors
    // ist.
    public CD getCD(int n) {
        CD myCD = (CD)lnkCD.elementAt(n);
        return myCD;
    }

    // Die Anzahl der CDs zurueckliefern.
    public int getCDNumber() {
        return lnkCD.size();
    }

  // Dieser Code ist aus Aufgabe 9 neu hinzugekommen
  // Es handelt sich um die Operationen laden() und speichern()
  void speichern(String filename)
   {
   try {
     FileOutputStream fs = new FileOutputStream(filename);
     ObjectOutputStream os = new ObjectOutputStream(fs);
     os.writeObject(lnkCD);
     os.close();
      }
   catch (IOException exc) {
         System.err.println(exc.toString());
      }
   }


  void laden(String filename)
    {
    try {
        FileInputStream fs = new FileInputStream(filename);
        ObjectInputStream is = new ObjectInputStream(fs);
        lnkCD=(Vector)is.readObject();
        is.close();
        }
   catch (ClassNotFoundException e) {
         System.err.println(e.toString());
         }
   catch (IOException exc) {
        System.err.println(exc.toString());
        }
    }
  // Ende neuer Code aus Aufgabe 9
}
