summaryrefslogblamecommitdiffstats
path: root/dozentenmodul/src/main/java/gui/intro/Login_GUI.java
blob: 4465ec3a7348c07a8a3c943addf5ed1b011cb4dd (plain) (tree)
1
2
3
4
5
6
7
8
9
10

                  
                      

                           
                            



                                     
                           
                        
 
                             
                           
                             
                          
                          

                               

                                  
                                  


                                                   
 
                          
                     
 
                                    
                                                               
                                                     
 
                                     
                               
                         
                           
                     
 



                                       


                                                  
                                                  
                                              
 






                                                       
                                                                                 
                                             
                                                              




                                                                                                     
                                         
 


                                                                                
 

                                                            
                                                                                              
                                                                                              














                                                                  
 
                                                         
                                    
 
                     
                                                             





                                                                                               
                                            
                                             
                                                                       
                                                               
 
                                                       

                                             
 
                                        
                                           
                                                      
                                                            
                                             

                                                                   
                                
                                            
                                               
                                               
                                                            
                                                      

                                       

                                                                                   

                                                                             
                                                        
                                                       
                                          
 


                                                                                      
 
                                                      
                                                                     
                                                       
                                           
 









                                                                                  
 
                                                          
                                               

                                                                                                  

                                                               
                                                                                  


                                                                                 
                                                                    



                                                                       
                                                         

                                             
 
                                                      
                                                                 
                                                       
                                           
 


                                                                              
                                                                     
 
                                                   
 
                                                                               


                                                                       
 

                                               
                   
 
                                                      
                                          
 
                                                

                          
                                            
                                    
                                                                               


                                                                             
 




                                                                                             
 


                                                                    
                     


                                                                                                   
                                                                                      
 



                                                                                                 
                         

                                    

                                                                            
 
                                                                                          



                                                                                                                           
                                                                     
                                            

                                        


                                                                                         
                               
                 

                                  


                                                                          

                                       


                                                                                    
                                                                                         
                                                            



                                                                                  

                                                                
                                                                                      
 

                                                                                      




                                                                   
                                                                            
                                                          



                                                                       


                                                                                        
                        

                                                                                   
                 

























                                                                           
 
                            
 

                                                                      







                                                                                 





                                                                                      

                                                                                               
         
 
             
package gui.intro;

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Image;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.util.Arrays;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;

import models.SessionData;
import models.person;

import org.apache.thrift.TException;
import org.openslx.imagemaster.thrift.iface.ImageServer.Client;
import org.openslx.imagemaster.thrift.iface.UserInfo;

import thrift.MasterThriftConnection;
import thrift.ThriftConnection;
import util.GuiOrganizer;
import util.ResourceLoader;
import config.Config;

@SuppressWarnings("serial")
public class Login_GUI extends JFrame {

	private JPanel contentPane;
	private JTextField lblusername;
	private JPasswordField lblpass;
	JLabel lblConnectionInfo = new JLabel("");
	boolean isClientReturnedCorrectly = false;
	JCheckBox chckbxBenutzernameSpeichern;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					// Pruefe und Erzeuge gegebenfalls Config
					try {
						Config.init();
					} catch (IOException e) {
						e.printStackTrace();
						JOptionPane.showMessageDialog(null, e.getMessage(),
								"Fehler", JOptionPane.ERROR_MESSAGE);
						return;
					}

					// Aufruf und Anzeige des Login Fensters
					Login_GUI frame = new Login_GUI();
					frame.setVisible(true);

				} catch (Exception e) {
					e.printStackTrace();
					JOptionPane.showMessageDialog(null, e.getStackTrace(),
							"Message", JOptionPane.ERROR_MESSAGE);
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Login_GUI() {
		addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		// Fenster darf nicht vergroessert werden
		setResizable(false);

		try {
			// Setzt das Look and Feel auf System
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (ClassNotFoundException | InstantiationException
				| IllegalAccessException | UnsupportedLookAndFeelException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// Titel des Fensters setzen
		setTitle("bwLehrpool Suite");
		// Aktion die beim Schliessen durchgefuehrt werden soll
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// Größe setzen und mittig ausrichten
		setBounds(0, 0, 603, 400);
		GuiOrganizer.centerGUI(this);

		// Erzeugen eines Panels
		contentPane = new JPanel();
		// Hintergrund Farbe des Panels setzen
		contentPane.setBackground(SystemColor.menu);
		// Rahmen des Fensters setzen
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		// Layout setzen
		contentPane.setLayout(null);
		// Label fuer das Logo erzeugen
		JLabel imgLabel = new JLabel();
		// Groesse und Position des Logos festelegen
		imgLabel.setBounds(150, 11, 350, 142);
		// Pfadangabe des Logos

		ImageIcon icon = ResourceLoader.getIcon("/img/Logo_bwLehrpool.png",
				"Logo");
		// Skalierung des Logos
		Image scaled = icon.getImage().getScaledInstance(270, 64, 0);
		imgLabel.setIcon(new ImageIcon(scaled));
		// Hinzufuegen des Logos in das Fenster
		contentPane.add(imgLabel);

		chckbxBenutzernameSpeichern = new JCheckBox("Benutzername speichern");
		chckbxBenutzernameSpeichern.setBounds(292, 222, 237, 23);
		contentPane.add(chckbxBenutzernameSpeichern);

		// Erzeugen und Hinzufuegen des Labels
		JLabel LabelUser = new JLabel("bwIDM-Benutzername:");
		LabelUser.setBounds(111, 164, 134, 20);
		contentPane.add(LabelUser);

		// Erzeugen und Hinzufuegen des Passwortfeldes
		lblpass = new JPasswordField();
		lblpass.setToolTipText("Bitte geben Sie Ihr bwIDM-Passwort ein.");
		lblpass.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				performLogin();
			}
		});
		lblpass.setBounds(292, 195, 237, 20);
		contentPane.add(lblpass);

		// Erzeugen und Hinzufuegen des Textfeldes
		lblusername = new JTextField();
		lblusername
				.setToolTipText("Bitte geben Sie Ihren bwIDM-Benutzernamen ein.");

		// Lese Information aus der Konfigurationsdatei
		lblusername.setText(Config.getString("main", "Benutzername", ""));
		chckbxBenutzernameSpeichern.setSelected(Config.getBoolean("main",
				"Benutzername speichern", false));

		lblusername.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				performLogin();
			}
		});
		lblusername.setBounds(292, 164, 237, 20);
		contentPane.add(lblusername);
		lblusername.setColumns(10);

		// Erzeugen und Hinzufuegen des Labels
		JLabel LabelPass = new JLabel("bwIDM-Passwort:");
		LabelPass.setBounds(111, 195, 134, 20);
		contentPane.add(LabelPass);

		lblConnectionInfo.setHorizontalAlignment(SwingConstants.LEFT);
		lblConnectionInfo.setBounds(111, 290, 418, 20);
		lblConnectionInfo.setEnabled(true);
		lblConnectionInfo.setText("Info: Bereit für Login");

		contentPane.add(lblConnectionInfo);

		// Erzeugen, Hinzufuegen und definierung der Aktion des Buttons
		JButton BtnLogin = new JButton("Login");
		BtnLogin.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				performLogin();
			}// end actionPerformed
		});

		BtnLogin.setBounds(292, 252, 237, 23);
		contentPane.add(BtnLogin);

		// GuiOrganizer.centerGUI(this);
	}// end LoginGUI()

	// Versuche den Benutzer einzuloggen
	public void performLogin() {
		org.openslx.imagemaster.thrift.iface.SessionData result = null;
		// Connect to Master
		MasterThriftConnection thrift = new MasterThriftConnection();
		Client client = thrift.getMasterThriftConnection();

		if (client == null) {
			// Thrift connection to master could not be established
			setStatus(Color.red, "Fehler: Masterserver nicht erreichbar.", null);
			return;
		}

		String passText = new String(lblpass.getPassword());
		UserInfo user = null;
		// Log user in
		try {
			setStatus(Color.black,
					"Authentifiziere - warte auf Antwort von Server...", null);

			result = client.authenticate(lblusername.getText(), passText);

			// Sanity checks
			if (result.authToken == null || result.sessionId == null) {
				setStatus(Color.red, "Antwort des Masterservers korrupt.", null);
				return;
			}

			// User-Info
			System.out.println("Authentifizierung erfolgreich");
			user = client.getUserFromToken(result.authToken);

		} catch (org.openslx.imagemaster.thrift.iface.AuthenticationException e) {
			setStatus(
					Color.red,
					"Fehler: Zugangsdaten nicht akzeptiert.",
					"Benutzeranmeldung fehlgeschlagen: Bitte Benutzername und Passwort überprüfen.\n"
							+ e.message);
			e.printStackTrace();
			return;
		} catch (TException e) {
			setStatus(Color.red,
					"Kommunikation mit Masterserver fehlgeschlagen.",
					Arrays.toString(e.getStackTrace()));
			return;
		}

		// set Information
		SessionData.session.setAuthToken(result.authToken);
		SessionData.session.setSessionID(result.sessionId);
		SessionData.session.setServerAdress(result.serverAddress);

		// Satellite-Connection
		setStatus(Color.black, "Hole Verbindungsdaten von Server...", null);
		// set connection to bwLehrpoolSuiteServer
		ThriftConnection bwthrift = new ThriftConnection();
		server.generated.Server.Client bwClient = bwthrift.getThriftConnection();
		models.Client.clientcon.setClient(bwClient);

		// User-Info
		System.out.println("Session-ID: " + result.sessionId + "\nToken: "
				+ result.authToken);
		setStatus(Color.green, "Daten erhalten.", null);

		String hochschule = user.eMail.substring(user.eMail.indexOf("@") + 1);

		person.verantwortlicher.setUsername(lblusername.getText().substring(0,
				lblusername.getText().indexOf("@")));
		person.verantwortlicher.setName(user.lastName);
		person.verantwortlicher.setVorname(user.firstName);
		person.verantwortlicher.setEMail(user.eMail);
		person.verantwortlicher.setHochschule(hochschule);

		// Spaeter ueber result.getRole zum Beispiel die Rolle holen
		person.verantwortlicher.setRole("Dozent");
		// person.verantwortlicher.setRole("Admin");
		// person.verantwortlicher.setRole("Student");
		// person.verantwortlicher.setRole("GetToTheChopper!");

		if (chckbxBenutzernameSpeichern.isSelected()) {
			Config.setString("main", "Benutzername", lblusername.getText());
			Config.setBoolean("main", "Benutzername speichern", true);
		} else {
			Config.setString("main", "Benutzername", "");
			Config.setBoolean("main", "Benutzername speichern", false);
		}
		// speichern
		Config.store();

		// Pruefe ob Bills Of Rights schon akzeptiert wurden,
		// wenn nicht zeige diese an
		if (!Config.getBoolean("main", "BillOfRights", false)) {
			// Erstellen einer Instanz der Aktionsauswahl
			BillOfRights_GUI re = new BillOfRights_GUI();
			re.setVisible(true);
			// Schliessen des Fensters nach erfolgreichen Login
			setVisible(false);
		} else {
			// Pruefe ob die Links zu vmware angezeigt werden
			// sollen
			if (!Config.getBoolean("main", "vmware", false)) {
				VmWareLink_GUI vm = new VmWareLink_GUI();
				vm.setVisible(true);
				setVisible(false);
			} else {

				// oeffne das Hauptmenue
				MainMenue_GUI main = new MainMenue_GUI();
				main.setVisible(true);
				setVisible(false);
			}
		}

	}// end performLogin

	/**
	 * Set connection status message, optionally show message box.
	 * 
	 * @param color
	 *            Color to display status message in.
	 * @param shortMessage
	 *            The message to display.
	 * @param longMessage
	 *            Optional message to show in a message box. null means don't
	 *            show.
	 */
	private void setStatus(Color color, String shortMessage, String longMessage) {
		System.out.println(shortMessage);
		lblConnectionInfo.setForeground(color);
		lblConnectionInfo.setText(shortMessage);
		if (longMessage != null)
			JOptionPane.showMessageDialog(null, longMessage,
					"Anmeldung fehlgeschlagen", JOptionPane.ERROR_MESSAGE);
	}

}// end class