diff options
| author | Jonathan Bauer | 2015-06-22 13:40:02 +0200 |
|---|---|---|
| committer | Jonathan Bauer | 2015-06-22 13:40:02 +0200 |
| commit | bb09d09546c00fe8b0c21d525af31c87097367d4 (patch) | |
| tree | 61fd648989bcde8ed32b3bf426870d9846e948cb /dozentenmodul/src/main/java/gui/intro/Login_GUI.java | |
| parent | [server] Implement getOperatingSystems and getVirtualizers (diff) | |
| download | tutor-module-bb09d09546c00fe8b0c21d525af31c87097367d4.tar.gz tutor-module-bb09d09546c00fe8b0c21d525af31c87097367d4.tar.xz tutor-module-bb09d09546c00fe8b0c21d525af31c87097367d4.zip | |
[client] rebasing the whole app...
Diffstat (limited to 'dozentenmodul/src/main/java/gui/intro/Login_GUI.java')
| -rw-r--r-- | dozentenmodul/src/main/java/gui/intro/Login_GUI.java | 746 |
1 files changed, 0 insertions, 746 deletions
diff --git a/dozentenmodul/src/main/java/gui/intro/Login_GUI.java b/dozentenmodul/src/main/java/gui/intro/Login_GUI.java deleted file mode 100644 index 7035f057..00000000 --- a/dozentenmodul/src/main/java/gui/intro/Login_GUI.java +++ /dev/null @@ -1,746 +0,0 @@ -package gui.intro; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Image; -import java.awt.SystemColor; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Enumeration; -import java.util.List; -import java.util.concurrent.ExecutionException; - -import javax.swing.AbstractButton; -import javax.swing.ButtonGroup; -import javax.swing.DefaultComboBoxModel; -import javax.swing.DefaultListCellRenderer; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JComboBox; -import javax.swing.JInternalFrame; -import javax.swing.JLabel; -import javax.swing.JList; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JPasswordField; -import javax.swing.JRadioButton; -import javax.swing.JTextField; -import javax.swing.SwingConstants; -import javax.swing.SwingWorker; -import javax.swing.UIManager; -import javax.swing.border.EmptyBorder; -import javax.swing.border.TitledBorder; - -import models.SessionData; -import models.person; - -import org.apache.log4j.Logger; -import org.apache.thrift.TException; -import org.openslx.imagemaster.thrift.iface.ImageServer; -import org.openslx.imagemaster.thrift.iface.OrganizationData; -import org.openslx.imagemaster.thrift.iface.UserInfo; -import org.openslx.sat.thrift.version.Version; -import org.openslx.thrifthelper.ThriftManager; - -import util.GuiManager; -import util.ResourceLoader; -import util.ShibbolethECP; -import config.Config; - -@SuppressWarnings("serial") -public class Login_GUI extends JInternalFrame { - - /** - * Logger instance for this class. - */ - private final static Logger LOGGER = Logger.getLogger(Login_GUI.class); - // String constants representing the different login methods - private final static String LOGIN_TYPE_BWIDM = "bwidm"; - private final static String LOGIN_TYPE_BWLEHRPOOL = "bwlp"; - private final static String LOGIN_TYPE_SATELLITE = "sat"; - - private JPanel contentPane; - private JTextField lblusername; - private JPasswordField lblpass; - private JLabel lblConnectionInfo = new JLabel(""); - private JCheckBox chckbxBenutzernameSpeichern; - - private JPanel panel; - private JPanel panel_1; - private JLabel LabelUser; - private JLabel LabelPass; - - // radio button and group for login types. - private ButtonGroup bgLoginType; - private JRadioButton rdbtnBwIDM; - private JRadioButton rdbtnDirekteVerbindung; - private JRadioButton rdbtnMasterserver; - // its action listener - private ActionListener loginTypeActionListener; - - // bwIDM label and dropdown - private JComboBox<OrganizationData> idpChoice; - private JLabel lblIdp; - private List<OrganizationData> organizations; - - // Satellite IP label and text field - private JLabel lblSatellitenIp; - private JTextField lblSatIP; - - /** - * Create the frame. - */ - public Login_GUI() { - // Titel des Fensters setzen - setTitle("bwLehrpool Suite"); - - // Größe setzen und mittig ausrichten - setBounds(0, 0, 785, 430); - - // 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(231, 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); - - lblConnectionInfo.setHorizontalAlignment(SwingConstants.LEFT); - lblConnectionInfo.setBounds(10, 359, 449, 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(bgLoginType.getSelection().getActionCommand()); - }// end actionPerformed - }); - - BtnLogin.setBounds(488, 358, 239, 23); - contentPane.add(BtnLogin); - - // Start of the actual content of the right panel - panel = new JPanel(); - panel.setLayout(null); - panel.setBorder(new TitledBorder(null, "Zugangsdaten", TitledBorder.LEADING, TitledBorder.TOP, null, - null)); - panel.setBackground(SystemColor.menu); - panel.setBounds(354, 143, 400, 181); - contentPane.add(panel); - - chckbxBenutzernameSpeichern = new JCheckBox("Benutzername speichern"); - chckbxBenutzernameSpeichern.setBounds(135, 137, 237, 23); - chckbxBenutzernameSpeichern.setSelected(Config.getSaveUsername()); - panel.add(chckbxBenutzernameSpeichern); - - // Erzeugen und Hinzufuegen des Labels - LabelUser = new JLabel("Benutzername:"); - LabelUser.setBounds(25, 60, 82, 20); - panel.add(LabelUser); - - // Erzeugen und Hinzufuegen des Textfeldes - lblusername = new JTextField(); - lblusername.setBounds(135, 60, 237, 20); - lblusername.setToolTipText("Bitte geben Sie Ihren bwIDM-Benutzernamen ein."); - lblusername.setColumns(10); - // Lese Benutzername aus der Konfigurationsdatei - lblusername.setText(Config.getUsername()); - lblusername.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent arg0) { - performLogin(bgLoginType.getSelection().getActionCommand()); - } - }); - panel.add(lblusername); - - // Erzeugen und Hinzufuegen des Labels - LabelPass = new JLabel("Passwort:"); - LabelPass.setBounds(25, 85, 82, 20); - panel.add(LabelPass); - - // Erzeugen und Hinzufuegen des Passwortfeldes - lblpass = new JPasswordField(); - lblpass.setBounds(135, 85, 237, 20); - lblpass.setToolTipText("Bitte geben Sie Ihr bwIDM-Passwort ein."); - lblpass.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - performLogin(bgLoginType.getSelection().getActionCommand()); - } - }); - panel.add(lblpass); - - lblSatellitenIp = new JLabel("Satelliten IP:"); - lblSatellitenIp.setBounds(25, 105, 82, 20); - // panel.add(lblSatellitenIp); - - lblSatIP = new JTextField(); - lblSatIP.setBounds(135, 110, 237, 20); - lblSatIP.setToolTipText("Bitte geben Sie die IP-Adresse des Satelliten ein."); - // panel.add(lblSatIP); - - idpChoice = new JComboBox<OrganizationData>(); - idpChoice.setBounds(135, 35, 237, 20); - // panel.add(choice); - - lblIdp = new JLabel("IdP:"); - lblIdp.setBounds(25, 35, 82, 20); - // panel.add(lblIdp); - - // action listener for the radio buttons to - // toggle the gui elements depending on the login type - loginTypeActionListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - toggleLoginType(e.getActionCommand()); - } - }; - - panel_1 = new JPanel(); - panel_1.setLayout(null); - panel_1.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), - "Authentifizierungsart", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0))); - panel_1.setBackground(SystemColor.menu); - panel_1.setBounds(10, 143, 334, 181); - contentPane.add(panel_1); - - // group radio button for the login type together - bgLoginType = new ButtonGroup(); - - rdbtnBwIDM = new JRadioButton("Authentifizierung über bwIDM"); - rdbtnBwIDM.setBounds(32, 35, 244, 23); - rdbtnBwIDM.setActionCommand(LOGIN_TYPE_BWIDM); - rdbtnBwIDM.addActionListener(loginTypeActionListener); - bgLoginType.add(rdbtnBwIDM); - panel_1.add(rdbtnBwIDM); - - rdbtnMasterserver = new JRadioButton("Test-Zugang mit festem Benutzer"); - //rdbtnMasterserver.setSelected(true); - rdbtnMasterserver.setActionCommand(LOGIN_TYPE_BWLEHRPOOL); - rdbtnMasterserver.addActionListener(loginTypeActionListener); - rdbtnMasterserver.setBounds(32, 60, 244, 23); - bgLoginType.add(rdbtnMasterserver); - panel_1.add(rdbtnMasterserver); - - rdbtnDirekteVerbindung = new JRadioButton("Direkte Verbindung zum Satelliten"); - rdbtnDirekteVerbindung.setBounds(32, 85, 244, 23); - rdbtnDirekteVerbindung.setActionCommand(LOGIN_TYPE_SATELLITE); - rdbtnDirekteVerbindung.addActionListener(loginTypeActionListener); - rdbtnDirekteVerbindung.setEnabled(false); - bgLoginType.add(rdbtnDirekteVerbindung); - panel_1.add(rdbtnDirekteVerbindung); - - setSelectedRadioButton(); - - panel.setVisible(true); - panel_1.setVisible(true); - contentPane.setVisible(true); - - - }// end LoginGUI() - - // Versuche den Benutzer einzuloggen - public void performLogin(final String loginType) { - LOGGER.info("Trying login of type: " + loginType); - - if (loginType == LOGIN_TYPE_BWLEHRPOOL) { - - // start the authentication process against the masterserver - org.openslx.imagemaster.thrift.iface.SessionData result = null; - // Connect to Master - ImageServer.Iface client = ThriftManager.getMasterClient(); - 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); - LOGGER.info("Antwort des Masterservers korrupt"); - return; - } - - // User-Info - LOGGER.info("Authentifizierung von '" + lblusername.getText() + "' 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) { - e.printStackTrace(); - setStatus(Color.red, "Kommunikation mit Masterserver fehlgeschlagen.", null); - LOGGER.error("Thrift-communication to the masterserver failed, see trace: ", e); - return; - } - - // set Information - SessionData.authToken = result.authToken; - SessionData.sessionID = result.sessionId; - SessionData.serverAdress = result.serverAddress; - if (!ThriftManager.setSatellite(result.serverAddress)) { - LOGGER.error("Setting satellite IP to '" - + result.serverAddress - + "' failed. Appears to be empty. Is the satellite IP returned from masterserver correct?"); - setStatus(Color.green, "IP vom Satelliten ungültig.", null); - System.exit(1); - } - - // User-Info - setStatus(Color.green, "Daten erhalten.", null); - - String hochschule = user.eMail.substring(user.eMail.indexOf("@") + 1); - - person.verantwortlicher.setUsername(lblusername.getText().trim()); - person.verantwortlicher.setUserID(lblusername.getText().trim()); - 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 - if (lblusername.getText().trim().startsWith("admin@")) { - person.verantwortlicher.setRole("Admin"); - } else { - person.verantwortlicher.setRole("Dozent"); - // person.verantwortlicher.setRole("Student"); - } - postLogin(); - - // } - } // end bwLehrpool-Login - - if (loginType == LOGIN_TYPE_BWIDM) { - // try the shibbo login in its own SwingWorker to avoid GUI lockups - SwingWorker<ShibbolethECP.ReturnCode, String> worker = new SwingWorker<ShibbolethECP.ReturnCode, String>() { - @Override - protected ShibbolethECP.ReturnCode doInBackground() throws Exception { - publish("Info: Initialisiere Shibboleth-Client ..."); - OrganizationData selectedOrg = (OrganizationData) idpChoice.getSelectedItem(); - publish("Info: Überprüfe Zugangdaten über bwIDM ..."); - return ShibbolethECP.doLogin(selectedOrg.getEcpUrl(), lblusername.getText().trim(), - String.valueOf(lblpass.getPassword())); - } - - protected void done() { - try { - ShibbolethECP.ReturnCode ecpReturn = get(); - switch (ecpReturn) { - case NO_ERROR: - setStatus(Color.green, "Info: bwIDM-Anmeldung erfolgreich.", null); - /* - * Login successful - */ - person.verantwortlicher.setUsername(lblusername.getText().trim()); - person.verantwortlicher.setUserID(lblusername.getText().trim()); - person.verantwortlicher.setName(ShibbolethECP.getResponse().lastName); - person.verantwortlicher.setVorname(ShibbolethECP.getResponse().firstName); - person.verantwortlicher.setEMail(ShibbolethECP.getResponse().mail); - person.verantwortlicher.setHochschule(((OrganizationData) idpChoice - .getSelectedItem()).getOrganizationId()); - person.verantwortlicher.setRole("Dozent"); - ThriftManager.setSatellite(ShibbolethECP.getResponse().satellites.get("default")); - SessionData.serverAdress = ShibbolethECP.getResponse().satellites.get("default"); - SessionData.authToken = ShibbolethECP.getResponse().token; - SessionData.sessionID = ShibbolethECP.getResponse().sessionId; - - /* - * Now postprocess successful login - */ - postLogin(); - break; - case ERROR_IDP: - setStatus(Color.red, "Fehler: bwIDM-Anmeldung fehlgeschlagen!", null); - JOptionPane - .showMessageDialog( - null, - "Anmeldung fehlgeschlagen. Überprüfen Sie den Benutzername und Passwort.", - "Fehler", JOptionPane.ERROR_MESSAGE); - break; - case ERROR_UNREG: - setStatus(Color.red, "Fehler: Nicht bei bwLehrpool registriert!", null); - JOptionPane.showMessageDialog(null, - "Sie sind nicht bei bwLehrpool registriert.\nGehen Sie dazu auf folgende Seite:\n" - + ShibbolethECP.getRegistrationUrl(), "Fehler", - JOptionPane.ERROR_MESSAGE); - break; - case ERROR_SP: - setStatus(Color.red, "Fehler: bwIDM-Anmeldung fehlgeschlagen!", null); - JOptionPane - .showMessageDialog( - null, - "Anmeldung erfolgreich aber die Antwort des Service Providers ist ungültig.", - "Fehler", JOptionPane.ERROR_MESSAGE); - break; - case ERROR_OTHER: - setStatus(Color.red, "Fehler: bwIDM-Anmeldung fehlgeschlagen!", null); - JOptionPane.showMessageDialog(null, - "Fataler Fehler. Schicken Sie die Log-Datei einem Administrator zu!", - "Fehler", JOptionPane.ERROR_MESSAGE); - break; - default: - setStatus(Color.red, "Fehler: bwIDM-Login fehlgeschlagen!", null); - } - } catch (InterruptedException e) { - LOGGER.error("SwingWorker for ShibbolethECP got interrupted, see trace: ", e); - } catch (ExecutionException e) { - LOGGER.error("Execution of SwingWorker for ShibbolethECP failed, see trace: ", e); - } - } - - @Override - protected void process(List<String> msgs) { - String currentMessage = msgs.get(msgs.size() - 1); - setStatus(Color.black, currentMessage, null); - } - }; - worker.execute(); - } - - // always save to user's config file. - if (chckbxBenutzernameSpeichern.isSelected()) - { - Config.setUsername(lblusername.getText()); - Config.setSaveUsername(true); - Config.setIdP(String.valueOf(idpChoice.getSelectedIndex())); - Config.setAuthenticationMethod(getSelectedRadioButton()); - } else - { - Config.setUsername(""); - Config.setSaveUsername(false); - } - // save it to local disk - Config.store(); - - }// end performLogin - - private String getSelectedRadioButton() - { - for (Enumeration<AbstractButton> buttons = bgLoginType.getElements(); buttons.hasMoreElements();) { - AbstractButton button = buttons.nextElement(); - - if (button.isSelected()) { - return button.getText(); - } - } - - return null; - } - - private void setSelectedRadioButton() - { - String authMethodByConfig = Config.getAuthenticationMethod(); - - if(authMethodByConfig.equals("Test-Zugang mit festem Benutzer")) - { - rdbtnMasterserver.setSelected(true); - } - else if(authMethodByConfig.equals("Direkte Verbindung zum Satelliten")) - { - rdbtnMasterserver.setSelected(true); - - } - else - { - rdbtnBwIDM.setSelected(true); - toggleLoginType(LOGIN_TYPE_BWIDM); - } - } - - - - /** - * Common function for either authentication method - */ - private void postLogin() { - // Version check - long remoteVersion; - try { - remoteVersion = ThriftManager.getSatClient().getVersion(); - LOGGER.info("Satellite RPC version: " + remoteVersion); - } catch (Exception e) { - LOGGER.error( - "Could not query sat server version after successful connect! Assuming untagged version 1", - e); - remoteVersion = 1; - } - String text = null; - if (remoteVersion > Version.VERSION) { - text = "Das von Ihnen verwendete Dozentenmodul ist zu alt, um mit dem Satelliten-Server zu verbinden.\n" - + "Sie verwenden Version " - + Version.VERSION - + ", der Satellit " - + remoteVersion - + "\n" - + "Aktuelle Version unter http://bwlehrpool.hs-offenburg.de/"; - } else if (remoteVersion < Version.VERSION) { - text = "Das von Ihnen verwendete Dozentenmodul ist zu neu, um mit dem Satelliten-Server zu verbinden.\n" - + "Sie verwenden Version " + Version.VERSION + ", der Satellit " + remoteVersion; - } - if (text != null) { - JOptionPane.showMessageDialog(null, text, "Fehler", JOptionPane.ERROR_MESSAGE); - } - - LOGGER.debug("Post-processing login ..."); - // TODO here do all the session data stuff - // TODO and the telling the sat Server who we are - LOGGER.debug("Checking token: " + SessionData.authToken); - try { - boolean authenticated = ThriftManager.getSatClient().authenticated(SessionData.authToken); - if (!authenticated) { - JOptionPane.showMessageDialog(null, "Sessionübergabe an den Satelliten fehlgeschlagen.", - "Fehler", JOptionPane.ERROR_MESSAGE); - return; - } - String pk_institution = ThriftManager.getSatClient().setInstitution( - person.verantwortlicher.getHochschule(), SessionData.authToken); - ThriftManager.getSatClient().setPerson(person.verantwortlicher.getUserID(), - SessionData.authToken, pk_institution); - } catch (TException e) { - JOptionPane.showMessageDialog(null, "Unerwarteter Fehler.\n\n" + e.toString(), "Fehler", - JOptionPane.ERROR_MESSAGE); - LOGGER.error("Unexpected exception", e); - return; - } - - // at the end - showMainMenu(); - } - - /** - * Shows the next GUI's til the main menu. It checks if the user has already - * seen the bill of rights and/or the vmware license windows and shows them - * before continuing to the main menu. - * - * This function should be called on a successful login. - */ - private void showMainMenu() { - /** - * - * DISPLAY LICENSES / MAIN MENU - * - */ - if (!Config.getBillOfRights()) { - // display bill of rights? - GuiManager.show(new BillOfRights_GUI(), true); - } else { - // display vmware license? - if (!Config.getVmwareLicense()) { - GuiManager.show(new VmWareLink_GUI(), true); - } else { - // main menu - GuiManager.show(new MainMenue_GUI(), true); - } - } - } - - /** - * 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) { - LOGGER.info(shortMessage); - lblConnectionInfo.setForeground(color); - lblConnectionInfo.setText(shortMessage); - if (longMessage != null) - JOptionPane.showMessageDialog(null, longMessage, "Anmeldung fehlgeschlagen", - JOptionPane.ERROR_MESSAGE); - } - - /** - * Toggle the elements needed for the different login types. - * - * @param type - * Type of the login to toggle. Valid are: - LOGIN_TYPE_BWIDM - - * LOGIN_TYPE_BWLEHRPOOL - LOGIN_TYPE_SATELLITE - */ - private void toggleLoginType(String type) { - LOGGER.info("Toggling to login method to: " + type); - panel.setVisible(false); - switch (type) { - case LOGIN_TYPE_BWIDM: - initIdpList(); - panel.remove(lblSatIP); - panel.remove(lblSatellitenIp); - panel.add(idpChoice); - panel.add(lblIdp); - panel.add(LabelPass); - lblpass.setText(""); - lblpass.setToolTipText("Bitte geben Sie Ihr bwIDM-Passwort ein."); - panel.add(lblpass); - lblusername.setToolTipText("Bitte geben Sie Ihren bwIDM-Benutzernamen ein."); - panel.revalidate(); - panel.repaint(); - panel.setVisible(true); - break; - case LOGIN_TYPE_BWLEHRPOOL: - panel.remove(idpChoice); - panel.remove(lblIdp); - panel.remove(lblSatIP); - panel.remove(lblSatellitenIp); - panel.add(LabelPass); - lblpass.setToolTipText("Bitte geben Sie Ihr bwLehrpool-Passwort ein."); - panel.add(lblpass); - lblusername.setToolTipText("Bitte geben Sie Ihr bwLehrpool-Benutzername ein."); - panel.revalidate(); - panel.repaint(); - panel.setVisible(true); - break; - case LOGIN_TYPE_SATELLITE: - panel.remove(idpChoice); - panel.remove(lblIdp); - panel.remove(LabelPass); - panel.remove(lblpass); - lblSatIP.setBounds(135, 85, 237, 20); - lblSatIP.setText(""); - panel.add(lblSatIP); - lblSatellitenIp.setBounds(25, 85, 82, 20); - panel.add(lblSatellitenIp); - panel.revalidate(); - panel.repaint(); - panel.setVisible(true); - setStatus(Color.black, "Info: Bereit für bwIDM-Login", null); - break; - default: - panel.setVisible(true); - return; - } - } - - /** - * Request the list of identity providers from the masterserver and display - * them in a combobox. - */ - private void initIdpList() { - // abort if we fetched the list already. - if (organizations != null) { - return; - } else { - organizations = new ArrayList<OrganizationData>(); - } - LOGGER.info("Fetching list of identity providers from masterserver..."); - SwingWorker<Boolean, String> worker = new SwingWorker<Boolean, String>() { - @Override - protected Boolean doInBackground() throws Exception { - publish("Info: Hole Liste von IdPs"); - // if not then request it from the masterserver - List<OrganizationData> tempOrgs = null; - try { - tempOrgs = ThriftManager.getMasterClient().getOrganizations(); - } catch (TException e) { - LOGGER.error( - "Could not fetch list of identity providers from the masterserver, see trace: ", - e); - return false; - } - // safety check to see if we got any organizations at all - if (tempOrgs != null) { - // now add those with an Ecp URL to the result list. - for (OrganizationData org : tempOrgs) { - if (org.getEcpUrl() != null && !org.getEcpUrl().isEmpty()) { - organizations.add(org); - LOGGER.debug("Valid IdP: " + org.toString()); - } else { - LOGGER.debug("Skipped bad organization (no ECPUrl): " + org.toString()); - } - } - // now we build the list, lets sort it - Collections.sort(organizations, new Comparator<OrganizationData>() { - @Override - public int compare(OrganizationData o1, OrganizationData o2) { - return o1.displayName.compareTo(o2.displayName); - } - }); - } else { - LOGGER.error("Thrift call of 'getOrganizations()' seems to have worked, but 'organizations' is still null."); - LOGGER.error("Is the API of the masterserver working correctly?"); - return false; - } - publish("Info: Liste von IdPs empfangen."); - - return true; - } - - protected void done() { - try { - if (get()) { - // fill the combobox with the IdPs returned from the - // masterserver - OrganizationData[] orgs = organizations.toArray(new OrganizationData[] {}); - idpChoice.setModel(new DefaultComboBoxModel<OrganizationData>(orgs)); - // now override the renderer, to show the display names - // of the organizations. - idpChoice.setRenderer(new DefaultListCellRenderer() - { - @Override - public Component getListCellRendererComponent(JList<?> list, Object value, - int index, boolean isSelected, boolean cellHasFocus) { - super.getListCellRendererComponent(list, value, index, isSelected, - cellHasFocus); - if (value instanceof OrganizationData) { - OrganizationData org = (OrganizationData) value; - setText(org.getDisplayName()); - } - return this; - } - }); - - setStatus(Color.black, "Info: Bereit für Login", null); - } else { - setStatus(Color.red, "Fehler: Vorbereitung für bwIDM-Login fehlgeschlagen!", null); - } - } catch (InterruptedException e) { - LOGGER.error("SwingWorker for 'getOrganizationsList' got interrupted, see trace: ", e); - } catch (ExecutionException e) { - LOGGER.error("Execution of SwingWorker for 'getOrganizationsList' failed, see trace: ", e); - } - - if(Config.getIdP() != -1) - { - idpChoice.setSelectedIndex(Config.getIdP()); //set IdP preselction to saved value, if stored. 0 is default - } - } - - @Override - protected void process(List<String> msgs) { - String currentMessage = msgs.get(msgs.size() - 1); - setStatus(Color.black, currentMessage, null); - } - }; - worker.execute(); - } -}// end class |
