//Titel:        JTree
//Version:       1.0
//Copyright:     Copyright (c) 2203
//Autor:         Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm
//Organisation:  HS Harz
//Beschreibung:  Einführung in JTree

// Einfaches Beispiel mit DefaultMutableTreeNode
// MvcTreeNodeRec liefert Zusatzinformationen, mit toString
// Analysiert eine Festplattenstruktur


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

import java.awt.event.*;

import java.io.*;

public class fcb1 extends JFrame implements ActionListener {

  JTextArea editor = new JTextArea();
  JToolBar toolbar;
	ButtonGroup bg;
  JLabel jLabel1;
  JLabel jLabel2;

  int AnzDir=0;
  int AnzFiles=0;

  public fcb1() {
    setSize(600, 500);
    setTitle("Direktory 1. Beispiel");
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    setGUI();
  }

  private void setGUI() {
    toolbar = new JToolBar();

    jLabel1 = new JLabel("Anzahl Verzeichnisse: 0");
    jLabel2 = new JLabel("Anzahl Dateien: 0");

    this.getContentPane().setLayout( new GridBagLayout() );


    this.getContentPane().add(toolbar,
         new GridBagConstraints(0, 0, 1, 1, 1.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
            new Insets(0,0,10,0), 0, 0));

    this.getContentPane().add(jLabel1,
         new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.NONE,
            new Insets(0,10,0,0), 0, 0));

    this.getContentPane().add(jLabel2,
         new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.NONE,
            new Insets(0,10,0,0), 0, 0));

    this.getContentPane().add(new JScrollPane(editor),
        new GridBagConstraints(0, 3, 1, 1, 1.0, 1.0
            ,GridBagConstraints.WEST, GridBagConstraints.BOTH,
            new Insets(0,10,10,10), 0, 0));

    editor.setFont( new Font("Arial", Font.BOLD,18)  );

    makeRootButton();

  }


  void makeRootButton() {
    File[] driveList = File.listRoots();
    	// neue Buttonleiste erstellen
    	bg=new ButtonGroup();
    	// Feld durchlaufen
    	for(int i=0;i<driveList.length;i++) {
    		// Button erstellen mit den Laufwerken (Buchstaben)
      		JToggleButton bn=new JToggleButton(driveList[i].getPath());
          editor.setFont( new Font("Arial", Font.BOLD,18)  );
          toolbar.add( bn );
          toolbar.addSeparator( new Dimension(20,5) );

      		// Tip Anzeigen bei Mauskontakt
      		bn.setToolTipText("Wechseln zu Laufwerk "+driveList[i].getPath());
      		// gibt auf Tastendruck den Pfad des Laufwerkes
      		bn.setActionCommand("Root"+driveList[i].getPath());
      		// Abstaende einstellen
      		bn.setMargin(new Insets(2,2,2,2));
      		// hinzufuegen des ActionListeners
      		bn.addActionListener(this);
          // suche das aktuelle Verzeichnis, ist es identisch mit Laufwerk
      		bn.setSelected(bn.getText().equals(System.getProperty("user.dir").substring(0,3)));
      		// Button der Buttongroup hinzufuegen
      		bg.add(bn);
    	}//for
  	}//makeRootButton


  	public void actionPerformed(ActionEvent e) {
  		// herausloesen des Root, Kontrolle des Aufrufes
    	if(e.getActionCommand().substring(0,4).equals("Root")) {
    		// Loeschen von Root => in t ist z.B C:\
      		String sStr=e.getActionCommand().substring(4);
      	   	System.out.println("ToolLeiste actionPerformed "+sStr);
      	   	// Aufruf von setRoot im Editor mit Uebergabe des Laufwerks
      		ScanRoot(sStr);
      	}//if
  	}//actionPerformed


    void ScanRoot(String sRoot) {
      AnzDir=0;
      AnzFiles=0;
      editor.setText(sRoot);
      editor.append("\n" );
      // editor.append(System.getProperty("user.dir") );
      Scan(sRoot,0);
      JLabel jLabel1;
      JLabel jLabel2;

      int AnzDir=0;
      int AnzFiles=0;
    }  // ScanRoot


    void  Scan(String sPath, int Stufe) {
        int i;
        String sMargin="";
        for (i=0; i<Stufe+1; i++) sMargin+="   ";

        editor.append("\n"+sMargin+sPath );

        Stufe++;
        sMargin+="   ";
      	 File dir = new File( sPath );
        // File[] items = dir.listRoots();
        File[] items = dir.listFiles();
        for (i=0; i<items.length; i++) {
           if ( items[i].isFile() ) {
             editor.append("\n"+sMargin+items[i].getName() );
             AnzFiles++;
             jLabel2.setText( "Anzahl Dateien: "+Integer.toString(AnzFiles) );
             jLabel2.updateUI();
           }
        }


         // Unterverzeichnisse rekursiv aufrufen, keine HiddenVerz
         // dann Absturz
        for (i=0; i<items.length; i++) {
           if ( items[i].isDirectory() && (!items[i].isHidden()) ) {
              AnzDir++;
              jLabel1.setText( "Anzahl Verzeichnisse: "+Integer.toString(AnzDir) );
              jLabel1.updateUI();
              Scan(sPath+items[i].getName()+"\\", Stufe) ;

             // editor.append("\n"+sMargin+items[i].getName()+ "\\" );
           }
        }


    }


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


}


