package gui;import gui.PersonGui.ContentsInitialiser;import java.awt.Color;import java.awt.Cursor;import java.awt.Dimension;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Vector;import javax.swing.Box;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;import client.ClientInterface.UnableToConnectToHostException;import actors.Person;/** * @class GuiClient * @author Dirk, PJ */public class GuiClient { PersonGui gui; /** * Default constructor. * initialiseert een PersonGui aan de hand van een OnderwijsCommissie als actor */ public GuiClient(){ gui = new PersonGui(new Person()); gui.drawApplication(new LoginScreen()); } private void determineType ( String type ) throws Exception{ if ( type.equals("student") ){ gui = new StudentGui(gui.getActor(), gui.geefApplication()); } else if ( type.equals("studiebegeleider") ){ gui = new StudieBegeleiderGui(gui.getActor(), gui.geefApplication()); } else if ( type.equals("systeembeheerder") ){ gui = new SysteemBeheerderGui(gui.getActor(), gui.geefApplication()); } else if ( type.equals("professor") ){ gui = new ProfGui(gui.getActor(), gui.geefApplication()); } else if ( type.equals("secretariaat") ){ gui = new SecretariaatGui(gui.getActor(), gui.geefApplication()); } else if (type.equals("onderwijscommissie")) { gui = new OCGui(gui.getActor(), gui.geefApplication()); } else{ throw new Exception("U hebt geen rechten om in te loggen."); } } /** * @class LoginActionListener * De klasse LoginActionListener is een action-listener die gebruikt wordt voor * het login-gebeuren te controleren. * @author Dirk, Tony */ private class LoginActionListener implements ActionListener{ private JTextField user; private JPasswordField pass; /** * Constructor met initialisatie-waarden * @param username -> Het text-field waaruit de gebruikersnaam gelezen kan worden * @param password -> Het password-field waaruit het password gelezen kan worden */ public LoginActionListener(JTextField username,JPasswordField password){ this.user = username; this.pass = password; } /** * Method die uitgevoerd wordt wanneer er een actie optreedt (enter, button-klik) * Deze methode is verplicht aangezien het een abstracte methode is in ActionListener * @param event -> Het event dat gebeurt. */ public void actionPerformed(ActionEvent event){ try{ //if ( user.getText().length() > 0 && new String(pass.getPassword()).length() > 0 ){ //gui.getActor().logIn(user.getText(),new String(pass.getPassword())); //if (gui.getActor().getConnection()!= null ){ //Vector<String> persoon = gui.getActor().getConnection().getClearances(); //bepaal persoon Vector<String> persoon = new Vector<String>(); persoon.add("student");//deze lijn maakt dus alles hardcoded een studnet, zie boven persoon.add("secretariaat"); persoon.add("systeembeheerder"); persoon.add("onderwijscommissie"); persoon.add("professor"); persoon.add("studiebegeleider"); if ( persoon.size() > 1 ){ //laat de persoon kiezen uit functies gui.setContentsFrame(new PickType(persoon), ""); } else if ( persoon.size() == 1 ){ determineType ( persoon.get(0) ); } else{ throw new Exception("U hebt geen rechten om in te loggen."); } /*} else{ throw new Exception("Er is een fout bij het opzetten van de connectie."); } } else{ throw new Exception("Gelieve een login en paswoord in te vullen."); }*/ } catch(RuntimeException ex){ gui.getActor().closeConnection(); gui.createWarningPopup("Fout", "Er is een fout op getreden met volgende boodschap:\n" + ex.getMessage()); } catch(Throwable ex){ gui.getActor().closeConnection(); gui.createWarningPopup("Fout", "Er is een fout op getreden met volgende boodschap:\n" + ex.getMessage()); } } } /** * De klass loginscreen implementeert de interface ContentsInitialiser * Het creëert een login-scherm op het doel-paneel. * @author Dirk, Tony, Pieter-Jan */ protected class LoginScreen implements ContentsInitialiser{ // deze methode wordt opgeroepen wanneer het target gezet moet worden om te tekenen. public void init(JPanel target,String errorMessage){ // Zet de layout op GridBagLayout target.setLayout(new GridBagLayout()); // Via de GridBagConstraints kunnen vele parameters voor componenten gezet worden (zie Java API) GridBagConstraints cons = new GridBagConstraints(); cons.fill = GridBagConstraints.NONE; //top label al dan niet met error msg JLabel tempLabel; cons.gridwidth = 5; cons.gridx = 0; cons.gridy = 0; if(!errorMessage.equals("")){ // Er is een errormessage die getoond moet worden, Deze wordt bovenaan in het rood getoond tempLabel = new JLabel(errorMessage); tempLabel.setForeground(Color.red); } else{ tempLabel = new JLabel(); } target.add(tempLabel,cons); cons.gridwidth = 1; //de velden moeten hier worden gezet want we hebben ze nodig vooor de action listeners JTextField username = new JTextField(12); JPasswordField password = new JPasswordField(12); //loginnaam lbl cons.gridx = 1; cons.gridy = 1; cons.anchor = GridBagConstraints.LAST_LINE_END; tempLabel = new JLabel("Gebruikersnaam: "); tempLabel.setForeground(Color.black); target.add(tempLabel,cons); //login input veld cons.gridx = 3; cons.gridy = 1; cons.anchor = GridBagConstraints.FIRST_LINE_END; username.setCursor(new Cursor(Cursor.TEXT_CURSOR)); username.setEditable(true); username.setBackground(Color.black); username.setForeground(Color.white); username.setName("Log in"); target.add(username,cons); cons.gridx = 2; cons.gridy = 1; target.add(Box.createRigidArea(new Dimension(5, 10)),cons); //maak een spatie tussen de login en paswd cons.gridwidth = 5; cons.gridx = 0; cons.gridy = 2; target.add(Box.createRigidArea(new Dimension(10, 10)),cons); cons.gridwidth = 1; // label voor het wachtwoord wordt gezet cons.gridx = 1; cons.gridy = 3; cons.anchor = GridBagConstraints.LAST_LINE_START; tempLabel = new JLabel("Wachtwoord : "); tempLabel.setForeground(Color.black); target.add(tempLabel,cons); cons.gridx = 2; cons.gridy = 3; target.add(Box.createRigidArea(new Dimension(5, 10)),cons); // input-veld voor het wachtwoord wordt gezet cons.gridx = 3; cons.gridy = 3; cons.anchor = GridBagConstraints.FIRST_LINE_START; password.setCursor(new Cursor(Cursor.TEXT_CURSOR)); password.setEditable(true); password.setBackground(Color.black); password.setForeground(Color.white); password.setName("Log in"); target.add(password,cons); //maak een spatie tussen de login knop en paswoord cons.gridwidth = 5; cons.gridx = 0; cons.gridy = 4; target.add(Box.createRigidArea(new Dimension(10, 10)),cons); // Er wordt een button toegevoegd cons.gridwidth = 3; cons.gridx = 1; cons.gridy = 5; cons.anchor = GridBagConstraints.CENTER; JButton login = gui.createButton("Log in",new LoginActionListener(username,password)); login.setBackground(Color.black); login.setForeground(Color.white); login.setEnabled(true); target.add(login,cons); tempLabel = new JLabel(); cons.gridwidth = 5; cons.gridx = 0; cons.gridy = 6; target.add(tempLabel,cons); } } /** * @class PickTypeActionListener * De klasse PickTypeActionListener is een action-listener die gebruikt wordt voor * de functie te selecteren. * @author Pieter-Jan */ private class PickTypeActionListener implements ActionListener{ private JComboBox functionlist; public PickTypeActionListener( JComboBox functionlist ){ this.functionlist = functionlist; } public void actionPerformed(ActionEvent arg0) { try{ String result = (String)functionlist.getSelectedItem(); if ( result != null ){ determineType ( result ); } else{ throw new Exception("U hebt geen rechten om in te loggen."); } } catch(Throwable ex){ gui.getActor().closeConnection(); ex.printStackTrace(); gui.createWarningPopup( "Fout", "Er is een fout op getreden met volgende boodschap:\n" + ex.getMessage() ); } } } /** * De klass PickType implementeert de interface ContentsInitialiser * Het creëert een drop down box zodat de gebruiker zijn fucntie kan kiezen. * @author Pieter-Jan */ protected class PickType implements ContentsInitialiser{ Vector<String> functies; public PickType( Vector<String> functies ) { this.functies = functies; } public void init(JPanel target,String errorMessage){ // Zet de layout op GridBagLayout target.setLayout(new GridBagLayout()); // Via de GridBagConstraints kunnen vele parameters voor componenten gezet worden (zie Java API) GridBagConstraints cons = new GridBagConstraints(); cons.fill = GridBagConstraints.NONE; //top label JLabel tempLabel; cons.gridwidth = 3; cons.gridx = 0; cons.gridy = 0; tempLabel = new JLabel("Kies de functie waarmee u wil inloggen:"); tempLabel.setBackground(Color.black); tempLabel.setForeground(Color.white); target.add(tempLabel,cons); //drop down box cons.gridwidth = 1; cons.gridx = 1; cons.gridy = 1; cons.weightx = 0.5; JComboBox functionlist = new JComboBox(functies.toArray()); functionlist.setBackground(Color.black); functionlist.setForeground(Color.white); functionlist.setSelectedIndex(1); target.add(functionlist,cons); //knop cons.gridwidth = 1; cons.gridx = 1; cons.gridy = 2; JButton confirm = gui.createButton("OK",new PickTypeActionListener( functionlist )); target.add(confirm,cons); //top label cons.gridwidth = 3; cons.gridx = 0; cons.gridy = 0; tempLabel = new JLabel(); target.add(tempLabel,cons); } } /** * Deze methode is verplicht om af te leiden (abstracte methode in parent-class). * Hierin kun je het menu van de applicatie zetten door behulp van de protected * methode addMenuItem, die een string meekrijgt, welke het label is dat op de * menu-button zal komen, en een ContentsInitialiser. * Een ContentsInitialiser is een protected interface van de parent-klasse, en * moet minstens 1 methode bevatten, namelijk init, die een JPanel meekrijgt en * een eventuele foutcode. De ContentsInitialiser initialiseert alle elementen * die op het panel zullen moeten komen. Het Panel in kwestie is het inhouds- * veld van de applicatie. */ public void initMenuItems() { //niks } }