summaryrefslogblamecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/SatelliteListWindow.java
blob: c71b2d0e115cda8bee42aa722581ea221cb8ef49 (plain) (tree)
1
2
3
4
5
6
7
8
9
10




                                      


                                    

                           
                           
 
                                
 

                                               
                                 
                                  
                                              
                                                 
                                                

                                                                      


                                                                    
                           
                                                                                          
 
                                           




                                                                                 
                                                                                        
                                            














                                                                                                    
                                                        
                                                           
                                                            





                                                                                            
                                                                                   




                                                                                  
                        

                                                          

                                              


                                                                       

                 
                                                                                                         
                                                                
                                 
                                                                    
                                                                                          
                         
                  
                                                                

                                                          
                                                            
                                                   
 
                                
                                                                  




                                                                    
                                  
                                                                    

                                                                    

                                                        

                                                                                                          

                                                                                                                       
                                         


                                                                                                                                 
                                 


                         
                                                            
 

                                                            
 

                                         
                                                    








                                                                                            
                                                                                            

                                                                        
                                                                              


                 



                                          





                                                            
                                                                         
           
















                                                                                                    

         
 
package org.openslx.dozmod.gui.window;

import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;

import javax.swing.JRadioButton;

import org.openslx.bwlp.thrift.iface.Satellite;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.dozmod.Config;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.Gui.GuiCallable;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.helper.UiFeedback;
import org.openslx.dozmod.gui.window.layout.SatelliteListWindowLayout;

/**
 * Window for selecting an available satellite or setting custom ip.
 */
@SuppressWarnings("serial")
public class SatelliteListWindow extends SatelliteListWindowLayout implements UiFeedback {

	private Satellite satellite = null;

	public interface UserAddedCallback {
		public void userAdded(UserInfo user, SatelliteListWindow window);
	}

	private SatelliteListWindow(final Window modalParent, List<Satellite> satList) {
		super(modalParent, satList);
		// Prepare doubleclick listener
		MouseListener radioDoubleClick = new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
					if (e.getSource() instanceof JRadioButton) {
						((JRadioButton) e.getSource()).setSelected(true);
					}
					prepareSelection();
					if (satellite != null) {
						dispose();
					}
				}
			}
		};
		// Check, whether we have any satellites
		String lastSat = Config.getLastSatellite();
		if (satList != null && !satList.isEmpty()) {
			for (Entry<JRadioButton, Satellite> entry : radioToSat.entrySet()) {
				if (!lastSat.isEmpty()) {
					Satellite sat = entry.getValue();
					if (sat.displayName.equals(lastSat)) {
						entry.getKey().setSelected(true);
						entry.getKey().requestFocus();
						txtCustomAddress.setEnabled(false);
						lastSat = "";
					}
				}
				entry.getKey().addMouseListener(radioDoubleClick);
			}
		} else {
			rdoCusomAddress.setSelected(true);
			txtCustomAddress.requestFocus();
		}
		if (lastSat.startsWith("@")) {
			txtCustomAddress.setText(lastSat.substring(1));
			rdoCusomAddress.setSelected(true);
			txtCustomAddress.requestFocus();
		}

		// deactivate the custom field when selecting a satellite to make things clearer for user
		ActionListener listener = new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				txtCustomAddress.setEnabled(rdoCusomAddress.isSelected());
			}
		};
		for (JRadioButton radio : radioToSat.keySet()) {
			radio.addActionListener(listener);
		}
		rdoCusomAddress.addActionListener(listener);
		txtCustomAddress.setEnabled(false);

		// Cancel button
		btnCancel.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				dispose();
			}
		});
		// Continue button
		btnContinue.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				prepareSelection();
				if (satellite != null) {
					if (rdoCusomAddress.isSelected()) {
						Config.setLastSatellite("@" + txtCustomAddress.getText());
					} else if (satellite.displayName != null && !satellite.displayName.isEmpty()) {
						Config.setLastSatellite(satellite.displayName);
					}
					dispose();
				} else {
					Gui.showMessageBox(rootPane, "Kein Satellit ausgewählt", MessageType.ERROR, null, null);
				}
			}
		});

		getRootPane().setDefaultButton(btnContinue);

		Gui.centerShellOverShell(modalParent, this);
	}

	private void prepareSelection() {
		// satellite is selected
		if (!rdoCusomAddress.isSelected()) {
			// check, which satellite is selected
			for (Entry<JRadioButton, Satellite> entry : radioToSat.entrySet()) {
				if (entry.getKey().isSelected()) {
					satellite = entry.getValue();
					break;
				}
			}
		}
		// custom button selected
		if (rdoCusomAddress.isSelected() && !txtCustomAddress.getText().isEmpty()) {
			satellite = new Satellite();
			satellite.addressList = new ArrayList<String>();
			satellite.addressList.add(txtCustomAddress.getText());
		}
	}

	private Satellite runAndReturn() {
		setVisible(true);
		return satellite;
	}

	/**
	 * Open a new SatelliteListWindow
	 * 
	 * @param modalParent
	 * @param satList The list of satellites to display.
	 * @return satellite with address to use, or null on error/cancel
	 */
	public static Satellite open(final Window modalParent, final List<Satellite> satList) {
		return Gui.syncExec(new GuiCallable<Satellite>() {
			@Override
			public Satellite run() {
				return new SatelliteListWindow(modalParent, satList).runAndReturn();
			}
		});
	}

	@Override
	public boolean wantConfirmQuit() {
		return false;
	}

	@Override
	public void escapePressed() {
		dispose();
	}

}