summaryrefslogblamecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java
blob: ae665e23990c67d3d8e145672c09500847dc89c1 (plain) (tree)
1
2
3
4
5
6
7
                                             
 
                               
                           

                                          
                                          








                                         
                                  
                                              
 
                                                           
 

                                                                                       
                                                      
                                          


                                  
 
                                    
 
                                                  
                                     
                 
         
 

                                                          
 


                                               
 


                                       
 



                                                 
 
                                                              
                                                                                       
 

                                       
           
                           
                                                     
           
                                                         

                                           
                                      
                                         
 
                                                                    


                                                                
                                                               
                                                   
                                                                                       


                                                          
                                                       
                                                  
                                                            
                                                            


                                                
                                                                                    


                                                  
                                                                  
                                            

                                                                                        
                                                                                  
                                                                       
 

                                                                                                        
                                                                                  
                                                                                
 

                                                                                                       
                                                                                  
                                                                                  
 
                                           








                                                                                     
                                                          
                                        
 
                                                                                
                                                                                                  

                                                                         
                                                                             
                                                                                                      

                                                                     
                                                                                            
                                                                                                      

                                                               
                                             
                                                                      

                                                                    
         
 
                                   
                     
                                                                                              
                                                                                                                     









                                                                                                            
                                       
                                                            
                 
                            
         
 
package org.openslx.dozmod.gui.window.layout;

import org.apache.log4j.Logger;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.util.ResourceLoader;

public abstract class LoginWindowLayout extends Composite {

	private static final Logger LOGGER = Logger.getLogger(LoginWindowLayout.class);

	// TODO This has nothing to to with the layout
	protected static enum LOGIN_TYPE {
		ECP(0),
		TEST_ACCOUNT(1),
		DIRECT_CONNECT(2);

		public final int id;

		private LOGIN_TYPE(final int id) {
			this.id = id;
		}
	}

	// authentication method to use for login attempts
	protected LOGIN_TYPE loginType = null;

	// textfields for the username/password
	protected Text usernameText;
	protected Text passwordText;

	// ComboBox/label for the IDP
	protected final Combo idpCombo;
	protected final Label idpText;

	// buttons
	protected final Button loginButton;
	protected final Button saveUsernameCheck;
	protected final Button[] authButtons;

	private static final String title = "bwSuite - Login";
	private static final String authenticationGroupLabel = "Authentifizierungsart";

	/**
	 * Create a new login composite
	 * 
	 * @param mainShell
	 *            The shell it should be added to
	 */
	public LoginWindowLayout(final Shell mainShell) {
		super(mainShell, SWT.NONE);

		// title for composite
		mainShell.setText(title);

		// left authentication selection and right loginmask
		GridLayout gridLayout = new GridLayout(2, true);
		this.setLayout(gridLayout);

		Label titlePicture = new Label(this, SWT.NONE);
		titlePicture.setImage(loadImage());
		GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
		gridData.horizontalAlignment = SWT.CENTER;
		titlePicture.setLayoutData(gridData);

		// group for the authentication method.
		// groups have borders and a title
		Group authGroup = new Group(this, SWT.NONE);
		authGroup.setText(authenticationGroupLabel);
		gridLayout = new GridLayout();
		gridLayout.numColumns = 1;
		authGroup.setLayout(gridLayout);
		gridData = new GridData(GridData.FILL, GridData.FILL, false, false);
		gridData.heightHint = 150;
		authGroup.setLayoutData(gridData);

		// add the authentication method selection buttons
		authButtons = new Button[3];
		authButtons[LOGIN_TYPE.ECP.id] = new Button(authGroup, SWT.RADIO);
		authButtons[LOGIN_TYPE.ECP.id].setText("Authentifizierung über bwIDM");
		gridData = new GridData(GridData.FILL, GridData.FILL, true, true);
		authButtons[LOGIN_TYPE.ECP.id].setLayoutData(gridData);

		authButtons[LOGIN_TYPE.TEST_ACCOUNT.id] = new Button(authGroup, SWT.RADIO);
		authButtons[LOGIN_TYPE.TEST_ACCOUNT.id].setText("Test-Zugang mit festem Benutzernamen");
		gridData = new GridData(GridData.FILL, GridData.FILL, true, true);
		authButtons[LOGIN_TYPE.TEST_ACCOUNT.id].setLayoutData(gridData);

		authButtons[LOGIN_TYPE.DIRECT_CONNECT.id] = new Button(authGroup, SWT.RADIO);
		authButtons[LOGIN_TYPE.DIRECT_CONNECT.id].setText("Direkte Verbindung zum Satelliten");
		gridData = new GridData(GridData.FILL, GridData.FILL, true, true);
		authButtons[LOGIN_TYPE.DIRECT_CONNECT.id].setLayoutData(gridData);

		// group for the login mask
		final Group loginGroup = new Group(this, SWT.NONE);
		loginGroup.setText("Zugangsdaten");
		gridLayout = new GridLayout();
		gridLayout.numColumns = 2;
		loginGroup.setLayout(gridLayout);
		gridData = new GridData(GridData.FILL, GridData.CENTER, true, false);
		gridData.heightHint = 150;
		loginGroup.setLayoutData(gridData);

		idpText = new Label(loginGroup, SWT.NONE);
		idpText.setText("IdP:");

		idpCombo = new Combo(loginGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
		idpCombo.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));

		new Label(loginGroup, SWT.NONE).setText("Benutzername:");
		usernameText = new Text(loginGroup, SWT.SINGLE | SWT.BORDER);
		usernameText.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));

		new Label(loginGroup, SWT.NONE).setText("Passwort:");
		passwordText = new Text(loginGroup, SWT.SINGLE | SWT.BORDER | SWT.PASSWORD);
		passwordText.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
		// login button
		loginButton = new Button(loginGroup, SWT.PUSH);
		loginButton.setText("Login");
		saveUsernameCheck = new Button(loginGroup, SWT.CHECK);
		saveUsernameCheck.setText("Benutzername speichern");

	}

	private Image loadImage() {
		try {
			ImageData image = ResourceLoader.getImage("/img/Logo_bwLehrpool.png");
			Rectangle screenSize = Gui.getMonitorFromRectangle(getShell().getBounds(), true).getBounds();
			float scaleX = (float)screenSize.width / (float)image.width;
			float scaleY = (float)screenSize.height / (float)image.height;
			final float scaling;
			if (scaleX < scaleY) {
				scaling = scaleX / 2;
			} else {
				scaling = scaleY / 2;
			}
			image = image.scaledTo((int)(image.width * scaling), (int)(image.height * scaling));
			return new Image(Gui.display, image);
		} catch (Exception e) {
			LOGGER.warn("Cannot load image", e);
		}
		return null;
	}
}