/*
 * "Grundkurs Programmieren in Java - Band 1 (4. Auflage, 2007)"
 * 2001-2007, Carl Hanser Verlag
 * Loesungsvorschlag zu Aufgabe 12.1 (Version 4.0)
 * (c) 2001-2007 D. Ratz, J. Scheffler, D. Seese, J. Wiesenberger
 *
 * benoetigt 'Encoder.java', 'XorInflater.java', 'Inflater.java' und 'XorEncoder.java'
 *
 */

import Prog1Tools.*;

/** Ein einfaches Demonstrationsprogramm */
public class CodingDemo2 {

  /** Liest eine Textzeile ein, ver- und entschluesselt
   diese */
  public static void demo(Encoder enc) {
    // Lies die zu verschluesselnde Zeile ein
    String line=IOTools.readLine("Zu verschluesselnde Zeile: ");
    // Verschluessele die Zeile
    String encoded=enc.encode(line);
    System.out.println("Verschluesselt: " + encoded);
    // Entschluessele die Zeile
    String decoded=enc.decode(encoded);
    System.out.println("Entschluesselt: " + decoded);
    // Test: entsprechen sich Original und Kopie ?
    if (line.equals(decoded)) // Sind die beiden Strings gleich?
      System.out.println("VERSCHLUESSELUNG ERFOLGREICH!");
    else
      System.out.println("PROGRAMMFEHLER!");
  }
  
  /** Die Main-Methode liest einen Schluessel ein, baut ein
   Verschluesselungsobjekt auf und ruft die demo-Routine auf */
  public static void main(String[] args) {
    Encoder enc;
    int     key;

    // Wir suchen uns eine zu verwendende Codierung aus
    System.out.println("Codierungs-Demo                    \n"   +
                       "===================================\n"   +
                       "1 = Demo mit \"Inflater\"-Algorithmus\n" +
                       "2 = Demo mit XOR-Verschluesselung  \n"   +
                       "3 = Demo mir XorInflater (Neu!)    \n"   +
                       "===================================\n"   +
                       "\n"
                      );
    int auswahl = IOTools.readInteger("Ihre Wahl:");
    // Nun durchlaufen wir das eigentliche Demo-Programm
    switch(auswahl) {
      case 1:
        // Der Inflater kommt ohne einen Schluessel aus
        demo(new Inflater());
        break;
      case 2:
        // In diesem Fall brauchen wir noch einen Schluessel
        key = IOTools.readInteger("Bitte Schluessel eingeben: ");
        enc = new XorEncoder(key);
        demo(enc);
        break;
      case 3:
        // In diesem Fall brauchen wir auch einen Schluessel
        key = IOTools.readInteger("Bitte Schluessel eingeben: ");
        enc = new XorInflater(key);
        demo(enc);
        break;
      default:
        System.out.println("Ungueltige Auswahl!");
    }
  }

}
