/*
* Copyright (c) 2004 Web Arts AG - [url]http://www.web-arts.com[/url]
*
* TODO Enter description of the java file here
*
* Created on May 23, 2008 by bcliffers
*
* $Id$
* $Source$
*
* TODO Create test case for this class
*/
package de.bcliffers;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import javax.swing.*;
public class DCWin extends JFrame implements Runnable {
/**
*
*/
private static final long serialVersionUID = Long.parseLong("13087830820");
private Container cp;
// Menü-Elemente
private final JMenuBar mymb = new JMenuBar();
private final JMenu fileX = new JMenu("Datei");
private final JMenu stylemen = new JMenu("Style wechseln");
private final JMenuItem menuMotif = new JMenuItem("Mac-Style");
private final JMenuItem menuMetal = new JMenuItem("Metal-Style");
private final JMenuItem menuWindows = new JMenuItem("Windows-Style");
private final JMenuItem fileChoose = new JMenuItem("Datei auswählen");
private final JTextField domain_eingabe = new JTextField();
private final JButton btn_start = new JButton("DirectoryListing prüfen");
private final JButton btn_clear = new JButton("Reset");
// Panels für die Ein- und Ausgabebereiche
private final JPanel allEingabe = new JPanel();
private final JPanel domainEingabe = new JPanel();
private final JPanel allAusgabe = new JPanel();
private final JTextArea info = new JTextArea();
private final JScrollPane scroll = new JScrollPane(info);
private final DChecker dcheck = new DChecker();
private final DCWin win ;
public DCWin() {
super();
win = this;
init();
}
public DCWin(String title) {
super(title);
win = this;
init();
}
public void init() {
this.setSize(1000, 600);
this.setLocation(50, 50);
this.setLayout(new BorderLayout(5,5));
this.setJMenuBar(mymb);
mymb.add(fileX);
mymb.add(stylemen);
fileX.add(fileChoose);
stylemen.add(menuMotif);
stylemen.add(menuMetal);
stylemen.add(menuWindows);
cp = this.getContentPane();
cp.setBackground(new Color(255, 255, 255));
// ladestatus.setVisible(false);
//windowListener der entsprechend alle funktionen killt, wenn das fenster geschlossen wird.
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
setVisible(false);
dispose();
System.exit(0);
}
});
//ActionListener für das stylemenü
menuMotif.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae) {
changeLaF("Motif");
}
});
//ActionListener für das stylemenü
menuMetal.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae) {
changeLaF("Metal");
}
});
//ActionListener für das stylemenü
menuWindows.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae) {
changeLaF("Windows");
}
});
//JFIlechooser wird aufgerufen und die ausgewählte datei übergeben
fileChoose.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
JFileChooser fileChooser = new JFileChooser(".");
fileChooser.addChoosableFileFilter(new SimpleFileFilter("txt", "Textfiles"));
int returnValue = fileChooser.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
String[] datei = dcheck.dateiLesen(selectedFile.getPath());
//hier müsste der neue thread gerufen werden, der am besten die nachfolgenden methoden beinhaltet
dcheck.checkFolders(datei);
checkAll();
}
}
});
//bei Klick auf den Button wird die überprüfung gestartet
btn_start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
buttonAction();
}
});
//löscht alle eingaben und erstellt ein neues Objekt vom dchecker, damit gespeicherte werte gelöscht werden.
btn_clear.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
dcheck.setErrortext("");
dcheck.setAusgabe("");
domain_eingabe.setText("");
info.setText("");
}
});
domain_eingabe.addKeyListener(new KeyListener() {
//Überpfüft, ob die "enter"-taste gedürckt wurde und löst dadurch die überprüfung aus (mit fokus auf den button)
public void keyTyped(KeyEvent e) {
//hier passiert nix!
}
public void keyPressed(KeyEvent e) {
//Enter-Taste gedrückt?? Test durchführen
if(e.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) {
buttonAction();
}
}
public void keyReleased(KeyEvent e) {
//hier passiert auch nix!
}
});
allEingabe.setSize(900, 100);
domainEingabe.setLayout(new GridLayout(1,2,40,0));
allAusgabe.setLayout(new FlowLayout());
domainEingabe.add(domain_eingabe);
domainEingabe.add(btn_start);
domainEingabe.add(btn_clear);
allEingabe.add(domainEingabe);
cp.add(allEingabe, BorderLayout.NORTH);
//scroll =
scroll.setPreferredSize(new Dimension(990, 495));
scroll.setMinimumSize(new Dimension(990, 495));
allAusgabe.add(scroll);
allAusgabe.setBackground(new Color(255, 255, 255));
info.setEditable(false);
cp.add(allAusgabe, BorderLayout.CENTER);
this.setVisible(true);
}//ende DCWin
//veränderung des Styles fürs Fenster
private void changeLaF(String button){
String lookAndFeel="";
String paket="com.sun.java.swing.plaf.";
if(button.equals("Metal")){paket="javax.swing.plaf.";}
String laf= button.toLowerCase();
lookAndFeel = paket + laf + "." + button + "LookAndFeel" ;
try {
UIManager.setLookAndFeel(lookAndFeel);
SwingUtilities.updateComponentTreeUI(this);
}
catch(Exception e) {
}
}
/*Durchführung des Testlaufs und Auswertung, wieviele Zeilen/Domains eingelsen wurden*/
private void checkAll(){
dcheck.finalTest();
String zwischenergebnis;
//wurde keine Datei eingelesen entfällt die Anmerkung wieviele Domains gelesen wurden.
if(dcheck.getFileLineCount()==0){zwischenergebnis = "";}
else{zwischenergebnis="Es wurden: "+dcheck.getFileLineCount()+" Domain(s) eingelesen\n";}
String ergebnis = zwischenergebnis+ "\n\n";
//ausgabe der ergebnisse im GUI und in der Konsole
if(dcheck.getAusgabe().equals("")){dcheck.setAusgabe("Alle Ordner gesichert!");}
ergebnis = zwischenergebnis+ "\n\n"+ dcheck.getAusgabe();
info.setText(dcheck.getSafety()+"\n"+ergebnis);
}
/*Die Action, die passiert wennman auf den Button klickt oder die Enter-Taste drückt*/
private void buttonAction(){
/*Sollte die Eingabezeile nicht leer sein, werden die einzelnen Domains in das Array eintrag geschrieben und ausgewertet*/
if(!domain_eingabe.getText().equals("")){
String[]eintrag = domain_eingabe.getText().split(" ");
dcheck.checkFolders(eintrag);
checkAll();}
//ist die Eingabezeile leer wird entsprechende Meldung ausgegeben
else{JOptionPane.showMessageDialog(null, "Eine oder mehrere Domain/s angeben!", "Fehler bei Eingabe!!", JOptionPane.OK_OPTION);}
}
public void run(){
checkAll();
}
}