package biblioteka_gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.logging.*;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSeparator;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.io.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.dom.*;
import org.w3c.dom.*;
/**
* Glowne okno programu dziedziczace po JFrame
*
Obiekt tej klasy zawiera statyczne zmienne: czytelnicy oraz ksiazki stanowiace baze danych czytelnikow i ksiazek
* @author w21826
* @version 1.3
*/
public class JFrGlowne extends JFrame implements ActionListener
{
/**
* Etykieta wyswietlajaca tekst "Program obslugi biblioteki"
*/
JLabel Powitanie;
/**
* Etykieta wyswietlajaca tekst "Wybierz opcję z paska Menu"
*/
JLabel Powitanie1;
//String ui;
/**
* Statyczny obiekt klasy String pobierajacy domyslny styl dla systemu operacyjnego
*/
static public String ui_styl = UIManager.getCrossPlatformLookAndFeelClassName();
/**
* Statyczny obiekt klasy String wskazujacy na domyslny katalog bazy danych ksiazek
*/
static public String sciezka_ksiazki = "c:\\";
/**
* Statyczny obiekt klasy String wskazujacy na domyslny katalog bazy danych czytelnikow
*/
static public String sciezka_czytelnicy = "c:\\";
/**
* Statyczny obiekt klasy String wskazujacy na domyslne polozenie pliku ustawien programu
*/
static public String ustawienia="settings.xml";
/**
* Statyczny kolekcja zawierajaca obiekty klasy Czytelnik, baza danych czytelnikow dostepna w kazdym miejscu programu
* @see Czytelnik
*/
static public ArrayList czytelnicy = new ArrayList();
/**
* Statyczny kolekcja zawierajaca obiekty klasy Ksiazka, baza danych ksiazek dostepna w kazdym miejscu programu
* @see Ksiazka
*/
static public ArrayList ksiazki = new ArrayList();
/**
* Statyczny obiekt klasy Logger sluzacy do logowania zachowan programu
* @see Logger
*/
static public Logger log = Logger.getLogger("");
/**
* Konstruktor klasy, tworzy nowe okno, ustawia jego skladniki, wczytuje domyslne ustawienia z pliku settings.xml
*
*/
JFrGlowne()
{
try
{
FileHandler fileHandler1 = new FileHandler("log_Biblioteka.xml");
log.addHandler(fileHandler1);
}
catch(IOException ioe)
{
log.log(Level.SEVERE, "Unable to create file handler.", ioe);
}
log.info("Uruchomiono program");
try
{
File plik=new File(ustawienia);
log.info("Proba otwarcia pliku settings.xml");
DocumentBuilderFactory fabr=DocumentBuilderFactory.newInstance();
DocumentBuilder parser=fabr.newDocumentBuilder();
Document dokument=parser.parse(plik);
Element root=dokument.getDocumentElement();
NodeList Opcje=root.getElementsByTagName("Ustawienia");
JFrGlowne.ui_styl=((Element)Opcje.item(0)).getAttribute("ui_styl");
log.info("Zostanie użyty styl " + JFrGlowne.ui_styl);
SwingUtilities.updateComponentTreeUI(this);
JFrGlowne.sciezka_czytelnicy=((Element)Opcje.item(0)).getAttribute("sciezka_czytelnicy");
log.info("Domyslna ścieżka bazy czytelników " + JFrGlowne.sciezka_czytelnicy);
JFrGlowne.sciezka_ksiazki=((Element)Opcje.item(0)).getAttribute("sciezka_ksiazki");
log.info("Domyslna scieżka bazy książek " + JFrGlowne.sciezka_ksiazki);
JOptionPane.showMessageDialog(this,"Wczytano ustawienia z pliku " + JFrGlowne.ustawienia + "\nDomyślny styl: "+ JFrGlowne.ui_styl + "\nŚcieżka zapisu/odczytu książek: " + JFrGlowne.sciezka_ksiazki + "\nŚcieżka zapisu/odczytu czytelników: " + JFrGlowne.sciezka_czytelnicy,"Komunikat",JOptionPane.INFORMATION_MESSAGE);
} catch(Exception ex)
{
try
{
DocumentBuilderFactory fabr=DocumentBuilderFactory.newInstance();
DocumentBuilder parser=fabr.newDocumentBuilder();
Document dokument=parser.newDocument();
Element root=dokument.createElement("Opcje");
dokument.appendChild(root);
Element elem=dokument.createElement("Ustawienia");
elem.setAttribute("ui_styl",JFrGlowne.ui_styl);
elem.setAttribute("sciezka_czytelnicy",JFrGlowne.sciezka_czytelnicy);
elem.setAttribute("sciezka_ksiazki", JFrGlowne.sciezka_ksiazki);
root.appendChild(elem);
Transformer przekszt = TransformerFactory.newInstance().newTransformer();
Source zrodlo=new DOMSource(dokument);
File plik=new File(JFrGlowne.ustawienia);
Result wyjscie=new StreamResult(plik);
przekszt.transform(zrodlo, wyjscie);
//JOptionPane.showMessageDialog(this,"Zapisano domyślne ustawienia do pliku " + JFrGlowne.ustawienia ,"Komunikat",JOptionPane.INFORMATION_MESSAGE);
} catch(Exception exc)
{
JOptionPane.showMessageDialog(this,"Błąd przy zapisywaniu pliku ustawień " + JFrGlowne.ustawienia,"Błąd",JOptionPane.ERROR_MESSAGE);
log.warning("Błąd przy zapisywaniu pliku ustawień");
log.warning("Stos: " + ex.getStackTrace());
}
JOptionPane.showMessageDialog(this,"Błąd przy otwieraniu pliku ustawień, utworzono plik ustawien " + JFrGlowne.ustawienia,"Błąd",JOptionPane.ERROR_MESSAGE);
log.info("Nie powiodlo się wczytywanie pliku ustawień, utworzono plik settings.xml z ustawieniami domyślnymi");
}
try
{
UIManager.setLookAndFeel(ui_styl);
}
catch (Exception e)
{
e.printStackTrace();
log.warning("Nie udalo się stawić stylu" + ui_styl);
log.warning("Stos: " + e.getStackTrace());
}
JMenuBar mb = new JMenuBar();
JMenu jmPlik = new JMenu("Plik");
mb.add(jmPlik);
JMenuItem jmiOtBK = new JMenuItem("Otwórz bazę książek");
jmPlik.add(jmiOtBK);
jmiOtBK.addActionListener(this);
JMenuItem jmiZaBK = new JMenuItem("Zapisz bazę książek");
jmPlik.add(jmiZaBK);
jmiZaBK.addActionListener(this);
jmPlik.add(new JSeparator());
JMenuItem jmiOtBC = new JMenuItem("Otwórz bazę czytelników");
jmPlik.add(jmiOtBC);
jmiOtBC.addActionListener(this);
JMenuItem jmiZaBC = new JMenuItem("Zapisz bazę czytelników");
jmPlik.add(jmiZaBC);
jmiZaBC.addActionListener(this);
jmPlik.add(new JSeparator());
JMenuItem jmiKoniec = new JMenuItem("Zakończ pracę programu");
jmPlik.add(jmiKoniec);
jmiKoniec.addActionListener(this);
JMenu jmKsiazka = new JMenu("Książka");
mb.add(jmKsiazka);
JMenuItem jmiDodKsiazka = new JMenuItem("Dodaj książkę");
jmKsiazka.add(jmiDodKsiazka);
jmiDodKsiazka.addActionListener(this);
JMenuItem jmiSzukKsiazka = new JMenuItem("Szukaj książki");
jmKsiazka.add(jmiSzukKsiazka);
jmiSzukKsiazka.addActionListener(this);
JMenuItem jmiListaKsiazka = new JMenuItem("Lista książek");
jmKsiazka.add(jmiListaKsiazka);
jmiListaKsiazka.addActionListener(this);
JMenu jmCzytelnik = new JMenu("Czytelnik");
mb.add(jmCzytelnik);
JMenuItem jmiDodCzytelnik = new JMenuItem("Dodaj czytelnika");
jmCzytelnik.add(jmiDodCzytelnik);
jmiDodCzytelnik.addActionListener(this);
JMenuItem jmiSzukCzytelnik = new JMenuItem("Szukaj czytelnika");
jmCzytelnik.add(jmiSzukCzytelnik);
jmiSzukCzytelnik.addActionListener(this);
jmCzytelnik.add(new JSeparator());
JMenuItem jmiListaCzytelnik = new JMenuItem("Lista czytelników");
jmCzytelnik.add(jmiListaCzytelnik);
jmiListaCzytelnik.addActionListener(this);
jmCzytelnik.add(new JSeparator());
JMenuItem jmiWypKs = new JMenuItem("Wypożycz książkę");
jmCzytelnik.add(jmiWypKs);
jmiWypKs.addActionListener(this);
JMenuItem jmiOddKs = new JMenuItem("Oddaj książkę");
jmCzytelnik.add(jmiOddKs);
jmiOddKs.addActionListener(this);
JMenu jmOpcje = new JMenu("Opcje");
mb.add(jmOpcje);
JMenuItem jmiWygląd = new JMenuItem("Wygląd");
jmOpcje.add(jmiWygląd);
jmiWygląd.addActionListener(this);
JMenuItem jmiŚcieżki = new JMenuItem("Ścieżki");
jmOpcje.add(jmiŚcieżki);
jmiŚcieżki.addActionListener(this);
JMenuItem jmiZapiszOpcje = new JMenuItem("Zapisz opcje");
jmOpcje.add(jmiZapiszOpcje);
jmiZapiszOpcje.addActionListener(this);
JMenuItem jmiOdswiezOkno = new JMenuItem("Odswież okno");
jmOpcje.add(jmiOdswiezOkno);
jmiOdswiezOkno.addActionListener(this);
JMenu jmStats = new JMenu("Statystyki");
mb.add(jmStats);
JMenuItem jmiW = new JMenuItem("Wyświetl statystyki");
jmStats.add(jmiW);
jmiW.addActionListener(this);
JMenu jmPomoc = new JMenu("Pomoc");
mb.add(jmPomoc);
JMenuItem jmiTematy = new JMenuItem("Tematy pomocy");
jmPomoc.add(jmiTematy);
jmiTematy.addActionListener(this);
jmPomoc.add(new JSeparator());
JMenuItem jmiAbout = new JMenuItem("About");
jmPomoc.add(jmiAbout);
jmiAbout.addActionListener(this);
setJMenuBar(mb);
this.setTitle("Program obsługi biblioteki");
this.setLayout(null);
Powitanie = new JLabel("Witam w programie obsługi biblioteki");
Powitanie.setSize(300,30);
Powitanie.setLocation(300, 200);
Powitanie.setVisible(true);
this.add(Powitanie);
Powitanie1 = new JLabel("Wybierz opcję z paska Menu");
Powitanie1.setSize(300,30);
Powitanie1.setLocation(300, 230);
Powitanie1.setVisible(true);
this.add(Powitanie1);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(800,600);
this.setVisible( true );
}
public void actionPerformed(ActionEvent e)
{
String komenda=e.getActionCommand();
//System.err.println(e.getActionCommand());
if(komenda == "Otwórz bazę książek")
{
log.info("Wybieranie bazy książek do otworzenia");
final JFileChooser fc = new JFileChooser();
fc.setDialogTitle("Otwórz bazę książek");
fc.setCurrentDirectory(new File(sciezka_ksiazki));
fc.showOpenDialog(this);
// In response to a button click:
try
{
File plik=fc.getSelectedFile();
if(plik != null)
{
System.err.println(fc.getSelectedFile());
DocumentBuilderFactory fabr=DocumentBuilderFactory.newInstance();
DocumentBuilder parser=fabr.newDocumentBuilder();
Document dokument=parser.parse(plik);
Element root=dokument.getDocumentElement();
NodeList Książki=root.getElementsByTagName("Ksiazka");
for(int i=0;i