import javax.swing.*;
import javax.swing.JPanel;
import java.awt.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.awt.FileDialog;
import java.sql.*;
import java.util.StringTokenizer;
import java.util.Vector;
import java.util.ArrayList;
import javax.swing.event.*;



/**
 * Write a description of class CSwing_Notizen here.
 * Ein Fenster SWING zur Eingabe der Notizen 
 * Einführung in die GUI
 * @author Manuel Friedrich 
 * @version 2006-01-23
 */
public class CSwing_Notizen extends JFrame
{
    // Instanzvariablen
    // Eine Seite der Homepage hat stets den Focus, wird in der DB abgespeichert
    int aktSeitenID;
   
    
    // Klasse Datenbank, stellt die Methoden zum öffenen einer DB, Abfragen und Schließen der DB bereit
    Datenbank mydatenbank;
    ArrayList seitenID;
    Vector data;
    // Ganze Zahlen
    // wird gelöscht, sobald zweites Listfeld auch mit Vector versehen ist
    int wert1; 
    // FileDialog zum Öffnen der Anlagen
    FileDialog myDialog;
    // Name der Anlage hinzufügen
    String[] anlagen;
    
    // Hier kommen die Fenster-Bestandteile
    // JLABEL
    JLabel m_tUeberschrift;
    JLabel m_tVerzeichnis;    JLabel m_tTitel;        JLabel m_tReihenfolge;
    JLabel m_tDatum;          JLabel m_tBilderliste;  JLabel m_tArea;
    
    // JLIST
    JList m_verzeichnis;    JList m_dokumente;
    
    // JBUTTON
    JButton m_speichern;     JButton m_loeschen;     JButton m_bildEinfuegen;
    JButton m_anlagenHochladen;     JButton m_neuesVerzeichnis;
    
    // JTEXTFIELD
    JTextField m_titel;     JTextField m_reihenfolge;    JTextField m_datum;

    // JTEXTAREA
    JTextArea m_area;
    JEditorPane m_editor;
    
   
    
    // Ereignisbehandlung für das Fenster
    class CMeinWindowLauscher extends WindowAdapter
    {
    public void windowClosing(WindowEvent e)
      {
      System.exit(0);
      }
    }
    
    class CMeinListenLauscher implements ListSelectionListener
    {    
      // Bei jedem Klick wird diese Methode aufgerufen
      public void valueChanged(ListSelectionEvent e)
      {
      	if (e.getValueIsAdjusting()!=true)
      	{
      		try{
      		
      
        int i=m_verzeichnis.getSelectedIndex();
        // System.out.println(i);
        Integer i3=new Integer(0);
        i3=(Integer) seitenID.get(i);
        aktSeitenID=i3.intValue();
       
        seiteAnzeigen();
        listeAktualisieren();
        }
        catch (Exception er) {}
        finally
        {
        	 // Textvorschau anzeigen und Fenster neu zeichnen!
             m_editor.setText(m_area.getText());
             repaint();
       
        }
        }
      }
    }
    
    
    // Ereignisbehandlung für die Steuerelement
    class CMeinActionLauscher implements ActionListener
    {

    public void actionPerformed(ActionEvent e)
      {
      String Label;
      Label=e.getActionCommand();
      
      if (Label.equals("Bild einfügen")){
      // hier wird der Eintrag in die Notizliste aufgenommen
        myDialog.show();
        String m_dateiname=myDialog.getDirectory();
        m_dateiname+=myDialog.getFile();
 
        wert1++;
        // repaint();
      } else
     if (Label.equals("Neues Verzeichnis")) {
                  neuesVerzeichnis();
     } else 
     
     if (Label.equals("Seite speichern")) {
        seiteSpeichern();
        // m_editor.setText(m_area.getText());
        // repaint();
    }
    
    // Textvorschau anzeigen und Fenster neu zeichnen!
    m_editor.setText(m_area.getText());
        repaint();
    }
    }

    /**
     * Constructor for objects of class CSwing_Notizen
     */
    public CSwing_Notizen(String titel)
    {
    super(titel);
    // mydatenbank=new Datenbank("db151618079");  
      mydatenbank=new Datenbank("mycms");  
    // mydatenbank=new Datenbank("db2924_18492");  
    aktSeitenID=1;
 
    // Instans eines Panels erzeugen, dieser Container dient zur Aufnahme der Liste samt Scrollbar
      JPanel panel1=new JPanel();   
      JPanel panel2=new JPanel();
      JPanel panel3=new JPanel();
      
      m_editor=new JEditorPane("text/html","<b>start</b> Du");
      
      Color c1=new Color(128,255,0);
      panel2.setBackground(c1);
      panel1.setBackground(c1);
      panel3.setBackground(c1);
   
      
      
      
    // Listen erzeugen 
    data=new Vector();
    seitenID=new ArrayList();
    // Liste erzeugen und mit dem Vector füllen
    m_verzeichnis=new JList(data);
    // 3-D-Effekt für Listenfeld festlegen
    m_verzeichnis.setBorder(new BevelBorder(BevelBorder.LOWERED));
    // nur eine Auswahl soll möglich sein
    m_verzeichnis.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    // Die Scrollleiste wird erzeugt und an ein ScrollPane angegliedert
    JScrollPane listenScrollPane = new JScrollPane(m_verzeichnis);
    // Die Größe des sichtbaren Bereichs wird festgelegt
    listenScrollPane.setPreferredSize(new Dimension(190,290));
   
 
    
    // String anlegen
    anlagen=new String[10];
    for (int i=0; i<10; i++)    anlagen[i]=" ";
    
    m_dokumente=new JList(anlagen);
    m_dokumente.setBorder(new BevelBorder(BevelBorder.LOWERED));
    
    // Buttons erzeugen
    m_speichern= new JButton("Seite speichern");
    m_loeschen=new JButton("Seite löschen");
    m_neuesVerzeichnis=new JButton("Neues Verzeichnis");
    m_anlagenHochladen=new JButton("Anlagen hochladen");
    m_bildEinfuegen=new JButton("Bild einfügen");

    // Textfelder erzeugen
    m_titel=new JTextField("Seitenname",100);
    m_reihenfolge=new JTextField("0", 100);
    m_datum=new JTextField("2006-01-01",100);
    
    // Label erzeugen
    m_tTitel=new JLabel("Seitenname");
    m_tReihenfolge=new JLabel("Reihenfolge");
    m_tArea=new JLabel("Seiteninhalt");
    m_tDatum=new JLabel("Datum der letzten Änderung");
    m_tUeberschrift=new JLabel("Schiller-CMS Hauptmenü");
    m_tBilderliste=new JLabel("Dokumente");
    m_tVerzeichnis=new JLabel("Verzeichnis");
    
    
    m_area=new JTextArea(20,10);
    m_area.setLineWrap(true);
    m_area.setWrapStyleWord(true);
    m_area.setBorder(new BevelBorder(BevelBorder.LOWERED));
    JScrollPane listenScrollPane2 = new JScrollPane(m_area);
    // Die Größe des sichtbaren Bereichs wird festgelegt
    listenScrollPane2.setPreferredSize(new Dimension(390,450));


    
    
    m_editor.setBorder(new BevelBorder(BevelBorder.LOWERED));
    JScrollPane scroll3 = new JScrollPane(m_editor);
    // Die Größe des sichtbaren Bereichs wird festgelegt
    scroll3.setPreferredSize(new Dimension(290,290));

    // Dem Panel hinzufügen
    // Spalte 1
    getContentPane().setLayout(null);
    
   // Größe des Panels festlegen
    panel1.setBounds(10,30,200,300); 
    panel2.setBounds(220,70,400,460);
    
    panel3.setBounds(680,400,300,300);

    
    m_tVerzeichnis.setBounds(10,10,150,20);
    m_neuesVerzeichnis.setBounds(10,550,150,20);
    
    // Spalte 2
    m_tTitel.setBounds(220,10,300,20);
    m_titel.setBounds(220,30,300,20);
    m_tArea.setBounds(220,50,300,20);
  
    m_speichern.setBounds(220,550,140,20);
    m_loeschen.setBounds(370,550,140,20);
    
    // Spalte 3
    m_tReihenfolge.setBounds(680,10,150,20);
    m_reihenfolge.setBounds(680,30,150,20);
    m_tDatum.setBounds(680,50,150,20);  
    m_datum.setBounds(680,70,150,20);
    m_bildEinfuegen.setBounds(680,90,150,20);
    m_tBilderliste.setBounds(680,110,150,20);
    m_dokumente.setBounds(680,130,150,150);
    m_anlagenHochladen.setBounds(680,350,150,20);
    

    
    // in das Fenster aufnehmen
    getContentPane().add(m_tVerzeichnis);
   
     // Liste und ScrollPanel in das Panel aufnehmen
     panel1.add(listenScrollPane);
     panel2.add(listenScrollPane2);
     panel3.add(scroll3);
     // das Panel in das Fenster aufnehmen
     getContentPane().add(panel1);
     getContentPane().add(panel2);
     getContentPane().add(panel3);
   
    getContentPane().add(m_neuesVerzeichnis);
    getContentPane().add(m_titel);
    getContentPane().add(m_tTitel);
    getContentPane().add(m_tArea);
  //  getContentPane().add(m_area);
    getContentPane().add(m_speichern);
    getContentPane().add(m_loeschen);
    getContentPane().add(m_tReihenfolge);
    getContentPane().add(m_reihenfolge);
    getContentPane().add(m_tDatum);
    getContentPane().add(m_datum);
    getContentPane().add(m_bildEinfuegen);
    getContentPane().add(m_tBilderliste);
    getContentPane().add(m_dokumente);
    getContentPane().add(m_anlagenHochladen);

    
    
    // Frame bei Lauscher anmelden
    addWindowListener(new CMeinWindowLauscher());
    // Schalter bei Lauscher registrieren
    m_speichern.addActionListener(new CMeinActionLauscher());
    m_loeschen.addActionListener(new CMeinActionLauscher());
    m_bildEinfuegen.addActionListener(new CMeinActionLauscher());
    m_neuesVerzeichnis.addActionListener(new CMeinActionLauscher());
     // Verzeichnis bei Listenlauscher anmelden  
   m_verzeichnis.addListSelectionListener(new CMeinListenLauscher());       
       
    myDialog = new FileDialog(this,"Dokument hinzufügen...", FileDialog.LOAD);
  
    
    wert1=0;
    

 
    }


    
    public static void main(String[] args)
    {
    CSwing_Notizen Fenster=new CSwing_Notizen("Schiller CMS");
    Fenster.setResizable(false);
    
    Fenster.pack();
    Fenster.setSize(1024,768);
    Fenster.show();
    Fenster.seiteAnzeigen();
    Fenster.listeAktualisieren();
 
    
    }
    
// Private Methoden
/**
 * Prüfung ob ein Verzeichnis ein Unterverzeichnis hat
 * @param String verzeichnis Das Aktuelle Verzeichnis
 * @param int ID der aktuellen Seite
 * @return true wenn es Unterverzeichnisse gibt, sonst false
 */



private void listeAktualisieren(){
    
  // Beide Vectors löschen
 //  m_verzeichnis.clearSelection();
  data.clear();
  seitenID.clear();
  ueberverzeichnisAnzeigen();   
  m_verzeichnis.setListData(data);
  
  // Fenster neu zeichnen
  repaint();


}
        

    private boolean hatUnterverzeichnis(){
      String verzeichnis="";
      int anzahl=0;
      try {
         //   mydatenbank.verbindungAufbauen(); 
            String SQLBefehl="Select Verzeichnis from seiten where ID='"+aktSeitenID+"';";
            ResultSet Ergebnis=mydatenbank.selectAnfrage(SQLBefehl);
            while (Ergebnis.next()){
              verzeichnis=(Ergebnis.getString(1));
            }
            verzeichnis=verzeichnis+"."+aktSeitenID;

            SQLBefehl="SELECT * FROM seiten WHERE Verzeichnis ='"+verzeichnis+"';";
       
            Ergebnis=mydatenbank.selectAnfrage(SQLBefehl);
            try 
            {
               Ergebnis.last();
               anzahl = Ergebnis.getRow();
            }
            catch(Exception e)
            { }
           }
       catch(Exception e) { }
       finally{
        // mydatenbank.verbindungBeenden();
         if (anzahl>0) return true; else return false;
       }
    
    }
    
    
   
    
    private void ueberverzeichnisAnzeigen(){
    
//  Verzeichnisse oberhalb anzeigen   
     if (aktSeitenID==1)
     {
     
      data.add("Startseite");
      seitenID.add(new Integer(1));
      }
      mydatenbank.verbindungAufbauen(); 
       
      String verzeichnis="";
      String SQLBefehl="SELECT Verzeichnis FROM seiten WHERE ID='"+aktSeitenID+"';"; 

      ResultSet rs=mydatenbank.selectAnfrage(SQLBefehl);
      
      try
      {
        while (rs.next())
        {
          verzeichnis= rs.getString(1);
         
        }
        StringTokenizer tokenizer = new StringTokenizer( verzeichnis,"." );
       // mydatenbank.verbindungAufbauen();
        while ( tokenizer.hasMoreTokens() )
        {
          SQLBefehl="SELECT * FROM seiten WHERE ID="+tokenizer.nextToken()+";"; 
          rs=mydatenbank.selectAnfrage(SQLBefehl);
          while (rs.next())
          {
               data.add("«"+rs.getString(3));
               seitenID.add(new Integer(rs.getInt(1)));
          }
        }
        
//        Aktuelle Seiten anzeigen
        
        if (aktSeitenID!=1){
          SQLBefehl="SELECT * FROM seiten WHERE ID="+aktSeitenID+";"; 
          rs=mydatenbank.selectAnfrage(SQLBefehl);
          while (rs.next()){
             data.add("|-   "+rs.getString(3));
             seitenID.add(new Integer(rs.getInt(1)));
          }
         }
         
//      Unterverzeichnsse anzeigen

        if (hatUnterverzeichnis()) 
        {
          verzeichnis="";
          SQLBefehl="Select Verzeichnis from seiten where ID='"+aktSeitenID+"';";
          ResultSet Ergebnis=mydatenbank.selectAnfrage(SQLBefehl);
          try 
          {
            while (Ergebnis.next())
            {
              verzeichnis=(Ergebnis.getString(1));
            }
          } catch (Exception e) { }
          verzeichnis=verzeichnis+"."+aktSeitenID;
          SQLBefehl="Select * from seiten where Verzeichnis='"+verzeichnis+"' ORDER BY Reihenfolge;";
          Ergebnis=mydatenbank.selectAnfrage(SQLBefehl);
          try 
          {
             while (Ergebnis.next())
             {
                data.add("»"+Ergebnis.getString(3));
                // Integer i2=new Integer(Ergebnis.getInt(1));
                seitenID.add(new Integer(Ergebnis.getInt(1)));
             }
          }
          catch (Exception e) 
          {
                System.out.println("Select Verzeichnis from seiten where ID="+aktSeitenID+";");
                System.out.println("Abfrage des Verzeichnisses fehlgeschlagen");
          }
        }
         
         
       }
       catch(Exception e) {System.out.println("Fehler in unterverzeichnisAnezeigen: Es ist ein Abfrage-Fehler aufgetreten!");}
       finally { 
         mydatenbank.verbindungBeenden();
       }
    
    
    }
    /*
     * AKTUELLE SEITENINHALTE ANZEIGEN
     */
    
    private void seiteAnzeigen()
    {
     try 
     {
       mydatenbank.verbindungAufbauen(); 
       String SQLBefehl="Select * from seiten where ID="+aktSeitenID+";";
       ResultSet Ergebnis=mydatenbank.selectAnfrage(SQLBefehl);
       while (Ergebnis.next())
       {
          m_titel.setText(Ergebnis.getString(3));
          m_area.setText(Ergebnis.getString(5));
          m_reihenfolge.setText(Ergebnis.getString(4));
          m_datum.setText(Ergebnis.getString(6));
       }
     } catch(Exception e)
     {
       System.out.println("Fehler 0815: Kann Seite nicht aufbauen!");
     }
     finally 
     {
        mydatenbank.verbindungBeenden();
     }
   }
    
    private void seiteSpeichern(){
    
      mydatenbank.verbindungAufbauen();
   //     String SQLBefehl="INSERT INTO seiten (Name, Inhalt) VALUES ('"+m_titel.getText()+"', "+"'"+m_area.getText()+"')";
         String SQLBefehl= "UPDATE seiten SET Name='"+m_titel.getText()+"', Inhalt='"+m_area.getText()+"' WHERE ID="+aktSeitenID;
        // , Reihenfolge='$Reihenfolge' WHERE SeitenID='$VerzeichnisNr'";

        mydatenbank.insertAnfrage(SQLBefehl);
        mydatenbank.verbindungBeenden();
    
    
    }
    
    
    private void neuesVerzeichnis(){
    String verzeichnis="";
    String SQLBefehl="SELECT Verzeichnis FROM seiten WHERE ID="+aktSeitenID+";";
    
   
    mydatenbank.verbindungAufbauen();    
    ResultSet Ergebnis=mydatenbank.selectAnfrage(SQLBefehl);
    try{
    while (Ergebnis.next()){
      verzeichnis=Ergebnis.getString(1);
    }
    }
    catch (Exception e) 
    {
      System.out.println("Kann Verzeichnis nicht anlegen");
    }
    
    verzeichnis=verzeichnis+"."+aktSeitenID;
    SQLBefehl = "INSERT INTO seiten (ID, Verzeichnis, Name, Inhalt, Reihenfolge, Datum) VALUES ('','"+verzeichnis+"','Neue Seite', 'In Kürze erscheinen hier neue Informationen, wir bitten noch um etwas Geduld!', '0', '"+m_datum.getText()+"');";
    mydatenbank.insertAnfrage(SQLBefehl);
    mydatenbank.verbindungBeenden();
    
    }
    
}

	