import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import javax.swing.border.Border; import javax.swing.BorderFactory; import javax.swing.border.EtchedBorder; import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.io.FileInputStream; import java.io.ObjectInputStream; import java.io.File; /** * @author Andreas Spirka, Sven Eisenhauer * */ public class thv extends AbstractMyJFrame implements Observer,WindowListener { static boolean unsaved = false; boolean tiercon_exists = false; Container c; JPanel pTop = new JPanel(); JMenuBar menuBar = new JMenuBar(); JMenu menuDatei = new JMenu("Datei"); JMenu menuBearbeiten = new JMenu("Bearbeiten"); JMenu menuAnmeldung = new JMenu ("Anmeldung"); JMenu menuAdmin = new JMenu ("Administration"); JMenuItem dateiNeu = new JMenuItem("Neu"); JMenuItem dateiOeffnen = new JMenuItem("Oeffnen"); JMenuItem dateiSpeichern = new JMenuItem("Speichern"); JMenuItem beenden = new JMenuItem("Beenden"); JMenuItem bearbeitenNeu = new JMenuItem("Tier anlegen/bearbeiten"); JMenuItem bearbeitenAnzeigen = new JMenuItem("Tier anzeigen"); JMenuItem bearbeitenAlleAnzeigen = new JMenuItem("Alle Tiere anzeigen"); JMenuItem bearbeitenAlleNFAnzeigen = new JMenuItem("Nicht freigegebenen Tiere anzeigen"); JMenuItem bearbeitenAlleFAnzeigen = new JMenuItem("Freigegebenen Tiere anzeigen"); JMenuItem anmeldAuth = new JMenuItem("Anmelden"); JMenuItem abmelden = new JMenuItem("Abmelden"); JMenuItem adminNeu = new JMenuItem("Benutzer anlegen"); JMenuItem adminLoeschen = new JMenuItem("Benutzer ändern/löschen"); JPanel statusBar = new JPanel(new BorderLayout()); JLabel statusLabel = new JLabel(); User gastUser = new User("Gast","Gast","Gast",-1,User.ROLE_GUEST); static User actUser = new User(); Border loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED); JTree tree = new JTree(); JScrollPane spane = new JScrollPane(); static TierCon tiercon = new TierCon(); protected transient JFileChooser chooser; TierDialog tierDialog = new TierDialog(0); /** * Konstruktor */ public thv() { newCon(); actUser.addObserver(this); actUser.setUser(gastUser); addWindowListener(this); c = getContentPane(); c.setLayout( new BorderLayout() ); c.add(pTop); ButtonListener bl = new ButtonListener( this ); //***MNEMONICS*** menuDatei.setMnemonic(KeyEvent.VK_D); menuBearbeiten.setMnemonic(KeyEvent.VK_B); bearbeitenNeu.setMnemonic(KeyEvent.VK_N); beenden.setMnemonic(KeyEvent.VK_B); bearbeitenNeu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK)); dateiNeu.setMnemonic(KeyEvent.VK_N); dateiOeffnen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK)); dateiOeffnen.setMnemonic(KeyEvent.VK_O); dateiSpeichern.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)); dateiSpeichern.setMnemonic(KeyEvent.VK_S); anmeldAuth.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, ActionEvent.CTRL_MASK)); anmeldAuth.setMnemonic(KeyEvent.VK_A); abmelden.setMnemonic(KeyEvent.VK_B); //Datei Items dateiOeffnen.addActionListener( bl ); dateiOeffnen.setActionCommand("dateiOeffnen"); dateiNeu.addActionListener( bl ); dateiNeu.setActionCommand("dateiNeu"); dateiSpeichern.addActionListener( bl ); dateiSpeichern.setActionCommand("dateiSpeichern"); beenden.addActionListener( bl ); beenden.setActionCommand("beenden"); // Anmeldung Items anmeldAuth.addActionListener( bl ); anmeldAuth.setActionCommand("auth"); abmelden.addActionListener( bl ); abmelden.setActionCommand("logout"); // Bearbeiten Items bearbeitenNeu.addActionListener( bl ); bearbeitenNeu.setActionCommand("bearbeitenNeu"); bearbeitenAnzeigen.addActionListener( bl ); bearbeitenAnzeigen.setActionCommand("bearbeitenAnzeigen"); bearbeitenAlleAnzeigen.addActionListener( bl ); bearbeitenAlleAnzeigen.setActionCommand("bearbeitenAlleAnzeigen"); bearbeitenAlleNFAnzeigen.addActionListener( bl ); bearbeitenAlleNFAnzeigen.setActionCommand("bearbeitenAlleNFAnzeigen"); bearbeitenAlleFAnzeigen.addActionListener( bl ); bearbeitenAlleFAnzeigen.setActionCommand("bearbeitenAlleFAnzeigen"); // Admin Items adminNeu.addActionListener( bl ); adminNeu.setActionCommand("adminNeu"); adminLoeschen.setActionCommand("adminLoeschen"); adminLoeschen.addActionListener( bl ); // MenuBar menuBar.add(menuDatei); menuBar.add(menuBearbeiten); menuBar.add(menuAnmeldung); menuBar.add(menuAdmin); // Menus menuAdmin.add(adminNeu); menuAdmin.add(adminLoeschen); menuAdmin.setVisible(false); menuAnmeldung.add(anmeldAuth); menuAnmeldung.add(abmelden); menuDatei.add( dateiNeu); menuDatei.add( dateiOeffnen); menuDatei.add( dateiSpeichern); menuDatei.addSeparator(); menuDatei.add( beenden ); menuBearbeiten.add(bearbeitenNeu); menuBearbeiten.add(bearbeitenAnzeigen); menuBearbeiten.add(bearbeitenAlleAnzeigen); menuBearbeiten.add(bearbeitenAlleNFAnzeigen); menuBearbeiten.add(bearbeitenAlleFAnzeigen); setJMenuBar(menuBar); // statusbar statusLabel.setText("Benutzer: "+actUser.getUserName()+" Rolle: "+actUser.getRoleAsString()); statusLabel.setHorizontalAlignment(JLabel.LEFT); statusBar.add(statusLabel,BorderLayout.WEST); statusBar.setBorder(loweredetched); c.add(statusBar, BorderLayout.SOUTH); } /** * Öffnet Benutzerauthentifizierungsdialog * und setzt aktuellen Benutzer */ public void validateUser() { PwDialog pwDialog = new PwDialog(this,"Benutzerauthentifizierung",true); actUser.setUser(pwDialog.getUser()); } /** * Öffnet Dialog zum öffnen einer Datei * @return Dateiname */ public String openFileDialog() { String path = new File("").getAbsolutePath(); chooser = new JFileChooser(path); JOptionPane pane = new JOptionPane(); JDialog dod = pane.createDialog(this,"Datei öffnen..."); String retVal = ""; ThvFilter filter = new ThvFilter(); chooser.setFileFilter(filter); int returnVal = chooser.showOpenDialog(dod); if(returnVal == JFileChooser.APPROVE_OPTION) { retVal= chooser.getSelectedFile().getPath(); } dod.dispose(); return retVal; } /** * Öffnet Dialog zum speichern einer Datei * @return Dateiname */ public String saveFileDialog() { String path = new File("").getAbsolutePath(); chooser = new JFileChooser(path); JOptionPane pane = new JOptionPane(); JDialog dod = pane.createDialog(this,"Datei speichern..."); String retVal = ""; ThvFilter filter = new ThvFilter(); chooser.setFileFilter(filter); int returnVal = chooser.showSaveDialog(dod); if(returnVal == JFileChooser.APPROVE_OPTION) { //retVal= chooser.getSelectedFile().getName(); retVal= chooser.getSelectedFile().getPath(); dod.dispose(); } return retVal; } /** * Lädt Container aus Default-Datei oder legt neuen Container an */ public void newCon() { File file = new File("Tierheim1.thv"); if (file.exists()) { try { FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); tiercon = (TierCon) ois.readObject(); ois.close(); tiercon_exists = true; } catch (Exception exception) { exception.printStackTrace(); } } else { tiercon=new TierCon(); tiercon_exists = true; } } /* (non-Javadoc) * @see AbstractMyJFrame#buttonActionPerformed(java.awt.event.ActionEvent) */ public void buttonActionPerformed( ActionEvent e ) { String ac = e.getActionCommand(); if (ac.equals("dateiOeffnen") ) { String selectedFile = openFileDialog(); //JOptionPane.showMessageDialog(this,selectedFile,"Gewählte Datei",JOptionPane.INFORMATION_MESSAGE); if (!selectedFile.equals("")) { try { FileInputStream fis = new FileInputStream(selectedFile); ObjectInputStream ois = new ObjectInputStream(fis); tiercon = (TierCon) ois.readObject(); ois.close(); tiercon_exists = true; } catch (Exception exception) { exception.printStackTrace(); } /*tiercon.loadFromFile( selectedFile ); * tiercon_exists = true;*/ } } else if (ac.equals("dateiNeu") ) { newCon(); } else if (ac.equals("dateiSpeichern") ) { String saveFile = saveFileDialog(); if (!saveFile.equals("")) { try { FileOutputStream fos = new FileOutputStream(saveFile); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(tiercon); oos.close(); setDataChanged(false); } catch (Exception exception) { exception.printStackTrace(); } } } else if (ac.equals("beenden") ) { exitThv(); } else if (ac.equals("auth") ) { validateUser(); } else if (ac.equals("logout")) { if (unsaved == false) { actUser.setUser(gastUser); } else { int retVal = JOptionPane.showConfirmDialog(this, "Nicht gespeicherte Änderungen\nÄnderungen gehen verloren!", "Abmelden ohne speichern?", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if (retVal == JOptionPane.YES_OPTION) { actUser.setUser(gastUser); } } } else if (ac.equals("adminNeu") ) { new AdminDlg(); } else if (ac.equals("adminLoeschen") ) { new ChgUserDlg(); } else if (ac.equals("bearbeitenNeu")) { if (tiercon_exists == true) { new TierVerDialog(); } } else if (ac.equals("bearbeitenAnzeigen")) { if (tiercon_exists == true) { tierDialog.updateTc(); tierDialog.setVisible(true); } } else if (ac.equals("bearbeitenAlleAnzeigen")) { if (tiercon_exists == true) { new AlleTiereDlg(); } } else if (ac.equals("bearbeitenAlleNFAnzeigen")) { if (tiercon_exists == true) { new AlleNFTiereDlg(); } } else if (ac.equals("bearbeitenAlleFAnzeigen")) { if (tiercon_exists == true) { new AlleFTiereDlg(); } } } /* (non-Javadoc) * @see java.util.Observer#update(java.util.Observable, java.lang.Object) */ public void update(Observable o, Object arg) { statusLabel.setText("Benutzer: "+actUser.getUserName()+" Rolle: "+actUser.getRoleAsString()); tierDialog.updateTc(); if(actUser.getRole() == User.ROLE_GUEST) { adminNeu.setVisible(false); adminLoeschen.setVisible(false); dateiNeu.setVisible(false); dateiSpeichern.setVisible(false); bearbeitenNeu.setVisible(false); bearbeitenAlleNFAnzeigen.setVisible(false); bearbeitenAlleAnzeigen.setVisible(false); tierDialog.setVisible(true); menuAdmin.setVisible(false); } else if (actUser.getRole() == User.ROLE_ADMIN) { adminNeu.setEnabled(true); adminLoeschen.setEnabled(true); dateiNeu.setEnabled(true); dateiOeffnen.setEnabled(true); dateiSpeichern.setEnabled(true); bearbeitenNeu.setEnabled(true); adminNeu.setVisible(true); adminLoeschen.setVisible(true); dateiNeu.setVisible(true); dateiSpeichern.setVisible(true); bearbeitenNeu.setVisible(true); bearbeitenAlleNFAnzeigen.setVisible(true); bearbeitenAlleAnzeigen.setVisible(true); tierDialog.setVisible(false); menuAdmin.setVisible(true); new ChgUserDlg(); } else if (actUser.getRole() == User.ROLE_WORKER) { adminNeu.setEnabled(false); adminLoeschen.setEnabled(false); dateiNeu.setEnabled(true); dateiOeffnen.setEnabled(true); dateiSpeichern.setEnabled(true); bearbeitenNeu.setEnabled(true); adminNeu.setVisible(true); adminLoeschen.setVisible(true); dateiNeu.setVisible(true); dateiSpeichern.setVisible(true); bearbeitenNeu.setVisible(true); bearbeitenAlleNFAnzeigen.setVisible(true); bearbeitenAlleAnzeigen.setVisible(true); tierDialog.setVisible(false); menuAdmin.setVisible(false); new TierVerDialog(); } else if ( actUser.getRole() == User.ROLE_VET ) { adminNeu.setEnabled(false); adminLoeschen.setEnabled(false); dateiNeu.setEnabled(false); //bearbeitenNeu.setEnabled(true); //bearbeitenAlleNFAnzeigen.setEnabled(true); adminNeu.setVisible(true); adminLoeschen.setVisible(true); dateiNeu.setVisible(true); dateiSpeichern.setVisible(true); bearbeitenNeu.setVisible(true); bearbeitenAlleNFAnzeigen.setVisible(true); bearbeitenAlleAnzeigen.setVisible(true); tierDialog.setVisible(false); menuAdmin.setVisible(false); new AlleNFTiereDlg(); } } /** * prüft, ob Daten nicht gespeichert sind und beendet dann die Anwendung */ private void exitThv() { if (unsaved == false) { System.exit(0); } else { int retVal = JOptionPane.showConfirmDialog(this, "Beenden ohne speichern?", "Nicht gespeicherte Änderungen", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if (retVal == JOptionPane.YES_OPTION) { System.exit(0); } } } /** * Wird von anderen Dialogen verwendet, um zu signalisieren, * ob Daten geändert wurden * @param status */ public static void setDataChanged(boolean status) { unsaved=status; } /** * Gibt an aktuell angemeldeten User zurück * @return User */ public static User getActUser() {return actUser; } /** * Gibt den aktuellen Tiercontainer zurück * @return TierCon */ public static TierCon getTierCon() {return tiercon;} //WindowsListener methods public void windowClosing(WindowEvent e) { exitThv(); } public void windowClosed(WindowEvent e) { } public void windowOpened(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowActivated(WindowEvent e) { } public void windowDeactivated(WindowEvent e) { } public void windowGainedFocus(WindowEvent e) { } public void windowLostFocus(WindowEvent e) { } public void windowStateChanged(WindowEvent e) { } /** * Öffnet den ersten Dialog, wenn die Anwendung startet */ public void initDlg() { tierDialog.toFront(); } /** * main-Methode. */ public static void main( String[] argv ) { try { //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception exception) { exception.printStackTrace(); } thv fenster = new thv(); fenster.setTitle( "Tierheimverwaltung" ); fenster.setSize(new Dimension(800,600)); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = fenster.getSize(); fenster.setLocation((screenSize.width/2)-(frameSize.width/2),(screenSize.height/2)-(frameSize.height/2)); fenster.setVisible( true ); //fenster.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); fenster.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE ); fenster.initDlg(); } }