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


                                             
                      

                      
                                   
                       
                          



                                 

                             
                           
                               
                          

                               
                            
                               
                              

                                      
 
                                   
                                                         
                                   
                                  
                                             

                                                                
                                                       
                                                  
                                                      
                                             
                                                    
                                                 
                                          
                                                   
                                         
                                                     
                                            
                                              
                                            
 

                                                                  




                                                                           

                                                                                                    
                                            
                                                   
                                                
                                            
                                             
                                                 
                                             
                                               
                                             
                                               


                                             
                                                
                                              
                                                                  

                                                       
                                                  
                                              
 
                                         
                                           
 
                                        

                                               
                                                 
 

                                                 

                                              
 
                                            
                                                                           
                                                             
                                                                     
                                                                     
                                                                         












                                                                     
 

                                                       
 
                                                              
                                                                                                                                
                                   
                                                                   
                                                                
                                              
                                                                                                       


                                                                                      

                                                                                                   







                                                                                 
                                                                                                         



                                                                 
                                                                                                              




                                               
                                                                                                           




                                             
                                                                                                              



                                                        
                                                                                                                


                                              
                                                                                                                


                                          
                                                                                                              


                                           
                                                                                                            


                                            
                                   

                                                                                         
                                                                                                         
                                
                                            
                                                                                                            

                                                                                  
 
                              
                                                   
                                                                                                                                                              
                                                                                                           


                                                                        


                                                                           
 


                                               
                                                                                                          
                                                                                                         

                                                                               
 

                                             

                                                                                                                     


                                                                 
 
                               
                       
                                            
                                                                                                                
                                                                    
 
                                        
                                                                                                                 

                                                               
 

                                         
                                                                                                                       
                                 
                                                                                                
                                                                             






                                                                                                           

                                                                                                                                                      

                                                 
                                                              


                                                                                                                         
                                                                     
                                                                   
                                                                    
                                                                                                              


                                                                   
 
                                            
                                                     
                                                                                             
                                                     


                                                       

                                                                                 
                                                                                                                

                                                  
 
                                          
                                                   
                                                                                         
                                                   


                                                     

                                                                             
                                                                                                              



                                                
                                                                                                                   



                                               
 

                                                                 
 


                                                                                                           
                                                                      

                                                                                                                


                                                                                             
                                                  
                                                                                                                                          


                                                          




                                                                                             
 


                                                                                                                   
 
                                                                                                                           
                                                        
                                          
                                    

                                                                                                                                        


                                                          
                                          
 
                                                                                                               
                                                  


                                                  

                                                                                                                      



                                                                

                                             

                                                                                                  


                                                                                                  
                                                                           


                                                                                          



                                                                                                                           






                                                                                                






                                                                                                  






                                                                                                        
                                                                                      




                                                                                                        
                                                                       

                                                                                                  
                                                                     
                                               
                                                                                     
                                                                                              

                                          






                                                                                                  
                                                                                                            

                                                                                             
 









                                                                                                          



                                                                                                  



                                                                                                  

                                                                                                                
                                                               

                                                                                                                                  
                 
                                                                                                      
                                                                                                                            
                 
                                                               
                                                                                                                            
                 
                                                                                                                        
                                                                 
                                                                                                                          

                                                                      
                                                                                                                              
                 

                                                             
                                                  

                                                                                       

                                                                                                                     

                                                  
                                          

                                                  
                                                
                                                 

                                                     
 



                                                             

                                                           
                                                      





                                                                                       
                                                                                               
                                                  



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

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.util.Calendar;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SpinnerDateModel;
import javax.swing.text.DateFormatter;

import org.jdatepicker.JDatePicker;
import org.openslx.bwlp.thrift.iface.ImageVersionDetails;
import org.openslx.dozmod.Branding;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.configurator.*;
import org.openslx.dozmod.gui.control.ComboBox;
import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer;
import org.openslx.dozmod.gui.control.LocationSelector;
import org.openslx.dozmod.gui.control.PersonLabel;
import org.openslx.dozmod.gui.control.QDatePickerImpl;
import org.openslx.dozmod.gui.control.QLabel;
import org.openslx.dozmod.gui.control.WordWrapLabel;
import org.openslx.dozmod.gui.helper.GridManager;
import org.openslx.dozmod.gui.helper.I18n;
import org.openslx.dozmod.gui.panel.ContainerPanel;
import org.openslx.dozmod.thrift.Session;
import org.openslx.dozmod.thrift.cache.MetaDataCache;
import org.openslx.dozmod.util.FormatHelper;
import org.openslx.sat.thrift.version.Feature;
import org.openslx.thrifthelper.Comparators;

public abstract class LectureDetailsWindowLayout extends JDialog {

	/**
	 * Version for serialization.
	 */
	private static final long serialVersionUID = -8773468375105202314L;

	// stuff ending in '...Info' are supposed to be the read-only labels for the information tab
	protected final QLabel lblTitleInfo;
	protected final JTextField txtTitle;
	protected final JEditorPane txtDescription;
	protected final QLabel lblImageNameInfo;
	protected final QLabel txtImageName;
	protected final JButton btnLinkImage;
	protected final PersonLabel lblOwnerInfo;
	protected final PersonLabel lblOwner;
	protected final JButton btnChangeOwner;
	protected final QLabel lblCreateTime;
	protected final PersonLabel lblUpdater;
	protected final QLabel lblUpdateTime;
	protected final QLabel lblStartTime;
	protected final QLabel lblEndTime;
	protected final JCheckBox chkAutoUpdate;
	protected final QLabel lblVersionInfo;
	protected final ComboBox<ImageVersionDetails> cboVersions;
	protected final JCheckBox chkIsExam;
	protected final JCheckBox chkHasInternetAccess;
	protected final JCheckBox chkHasUsbAccess;
	protected final JCheckBox chkIsActive;

	protected final JTextField txtId;
	protected final QLabel lblUseCount;

	protected final QLabel lblError;
	protected final JButton btnSaveChanges;
	protected final JButton btnClose;
	protected final JButton btnDownloadImage;

	protected final JDatePicker dtpStartDate;
	protected final JDatePicker dtpEndDate;
	protected final JSpinner spnStartTime;
	protected final JSpinner spnEndTime;

	protected final JTabbedPane pnlTabs;
	protected final LecturePermissionConfigurator ctlPermissionManager;
	protected final LocationSelector ctlLocationSelector;
	protected final StartupConfigurator ctlRunscriptConfigurator;
	protected final NetshareConfigurator ctlNetshareConfigurator;
	protected final LdapFilterConfigurator ctlLdapFilterConfigurator;
	protected final NetrulesConfigurator ctlNetrulesConfigurator;

	protected final JCheckBox chkCustomPermEdit;
	protected final JCheckBox chkCustomPermAdmin;
	protected final JPanel pnlTabGeneral;
	protected final JPanel pnlTabInfo;
	protected final JPanel pnlTabNetrules;
	protected final JPanel pnlTabRestrictions;
	protected final JPanel pnlTabPermissions;
	protected final JPanel pnlTabLocations;
	protected final JPanel pnlTabRunscript;
	protected final JPanel pnlTabNetshare;
	protected final JPanel pnlTabLdapFilter;

	protected final ContainerPanel pnlTabContainer;


	public LectureDetailsWindowLayout(Frame modalParent) {
		super(modalParent, I18n.WINDOW_LAYOUT.getString("LectureDetails.Dialog.title"), ModalityType.APPLICATION_MODAL);
		setResizable(true);
		setPreferredSize(Gui.getScaledDimension(570, 650));
		setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE );
		setLayout(new BorderLayout());
		((JPanel) getContentPane()).setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

		pnlTabInfo = new JPanel();
		pnlTabInfo.setBorder(BorderFactory.createEmptyBorder(25, 25, 25, 25));
		GridManager grdInfo = new GridManager(pnlTabInfo, 3, true, new Insets(7, 7, 7, 7));

		// title
		lblTitleInfo = new QLabel();
		lblTitleInfo.setFont(lblTitleInfo.getFont().deriveFont(Font.BOLD,
				lblTitleInfo.getFont().getSize2D() * 1.5f));
		grdInfo.add(lblTitleInfo, 3);
		grdInfo.nextRow();
		// lblOwner
		lblOwnerInfo = new PersonLabel();
		grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.owner.text")));
		grdInfo.add(lblOwnerInfo, 2).expand(true, false);
		grdInfo.nextRow();
		// creation time
		lblCreateTime = new QLabel();
		grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.createTime.text")));
		grdInfo.add(lblCreateTime, 2);
		grdInfo.nextRow();

		// last updater
		lblUpdater = new PersonLabel();
		grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.updater.text")));
		grdInfo.add(lblUpdater, 2);
		grdInfo.nextRow();

		// last updated
		lblUpdateTime = new QLabel();
		grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.updateTime.text")));
		grdInfo.add(lblUpdateTime, 2);
		grdInfo.nextRow();
		lblVersionInfo = new QLabel(); // UNUSED
		lblImageNameInfo = new QLabel();
		grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.imageName.text")), 2);
		grdInfo.add(lblImageNameInfo);
		grdInfo.nextRow();
		lblStartTime = new QLabel();
		grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.startTime.text")), 2);
		grdInfo.add(lblStartTime);
		grdInfo.nextRow();
		lblEndTime = new QLabel();
		grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.endTime.text")), 2);
		grdInfo.add(lblEndTime);
		grdInfo.nextRow();
		lblUseCount = new QLabel();
		grdInfo.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.useCount.text")));
		grdInfo.add(lblUseCount, 2);
		grdInfo.finish(true);

		// Make general tab
		pnlTabGeneral = new JPanel();
		pnlTabGeneral.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
		GridManager grdGeneral = new GridManager(pnlTabGeneral, 5, true, new Insets(3, 3, 3, 3));
		// lecture title
		txtTitle = new JTextField();
		grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.title.text")));
		grdGeneral.add(txtTitle, 4).expand(true, false).fill(true, false);
		grdGeneral.nextRow();

		// description
		txtDescription = new JEditorPane();
		grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.description.text"))).anchor(GridBagConstraints.FIRST_LINE_START);
		JScrollPane jsp = new JScrollPane(txtDescription, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
				JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		jsp.setMinimumSize(Gui.getScaledDimension(450, 120));
		jsp.setPreferredSize(Gui.getScaledDimension(450, 120));
		grdGeneral.add(jsp, 4).expand(true, true).fill(true, true);
		grdGeneral.nextRow();


		// ID. NOTE: currently disabled
		txtId = new JTextField();
		txtId.setEditable(false);
		txtId.setFont(txtId.getFont().deriveFont(Font.BOLD, txtId.getFont().getSize2D() * 0.66f));
		grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.ID.text")));
		grdGeneral.add(txtId, 4).expand(true, false).fill(true, false);
		grdGeneral.nextRow();

		// owner
		lblOwner = new PersonLabel();
		btnChangeOwner = new JButton(I18n.WINDOW_LAYOUT.getString("LectureDetails.Button.changeOwner.text"));
		grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.owner.text")));
		grdGeneral.add(lblOwner, 3).expand(true, false);
		grdGeneral.add(btnChangeOwner).fill(true, false);
		grdGeneral.nextRow();

		// linked image
		// name
		txtImageName = new QLabel();
		grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.imageName.text")));
		grdGeneral.add(txtImageName, 3).expand(true, false);

		// link button for image
		btnLinkImage = new JButton(I18n.WINDOW_LAYOUT.getString("LectureDetails.Button.linkImage.text"));
		grdGeneral.add(btnLinkImage).fill(true, false);
		grdGeneral.nextRow();

		// image version handling
		// auto update
		chkAutoUpdate = new JCheckBox(I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.autoUpdate.text"));
		// versions combo
		cboVersions = new ComboBox<ImageVersionDetails>(Comparators.imageVersionDetails,
				new ComboBoxRenderer<ImageVersionDetails>() {
					@Override
					public String renderItem(ImageVersionDetails item) {
						if (item == null)
							return null;
						if (item.isValid) {
							return FormatHelper.longDate(item.getCreateTime());
						} else {
							return FormatHelper.longDate(item.getCreateTime())
									+ I18n.WINDOW_LAYOUT.getString("LectureDetails.ComboBox.versionInvalid.text");
						}
					}
				}, ImageVersionDetails.class);
		btnDownloadImage = new JButton(I18n.WINDOW_LAYOUT.getString("LectureDetails.Button.downloadImage.text"));
		btnDownloadImage.setToolTipText(
				I18n.WINDOW_LAYOUT.getString("LectureDetails.Button.downloadImage.toolTipText"));
		JPanel versionPanel = new JPanel(new BorderLayout());
		versionPanel.add(cboVersions, BorderLayout.CENTER);
		versionPanel.add(chkAutoUpdate, BorderLayout.SOUTH);
		grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.version.text")));
		grdGeneral.add(versionPanel, 3);
		grdGeneral.add(btnDownloadImage).fill(true, false);
		grdGeneral.nextRow();

		// start time of the lecture
		JPanel startTimePanel = new JPanel();
		startTimePanel.setLayout(new BoxLayout(startTimePanel, BoxLayout.LINE_AXIS));
		dtpStartDate = new QDatePickerImpl();
		spnStartTime = makeTimeSpinner(23, 59);
		startTimePanel.add(dtpStartDate);
		startTimePanel.add(spnStartTime);
		startTimePanel.setMinimumSize(startTimePanel.getPreferredSize());
		startTimePanel.setMaximumSize(startTimePanel.getPreferredSize());
		grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.startTime.text")));
		grdGeneral.add(startTimePanel, 4);
		grdGeneral.nextRow();

		// end time of the lecture
		JPanel endTimePanel = new JPanel();
		endTimePanel.setLayout(new BoxLayout(endTimePanel, BoxLayout.LINE_AXIS));
		dtpEndDate = new QDatePickerImpl();
		spnEndTime = makeTimeSpinner(00, 59);
		endTimePanel.add(dtpEndDate);
		endTimePanel.add(spnEndTime);
		endTimePanel.setMinimumSize(endTimePanel.getPreferredSize());
		endTimePanel.setMaximumSize(endTimePanel.getPreferredSize());
		grdGeneral.add(new QLabel(I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.endTime.text")));
		grdGeneral.add(endTimePanel, 4);
		grdGeneral.nextRow();

		// lecture active
		chkIsActive = new JCheckBox(I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.isActive.text"));
		grdGeneral.skip();
		grdGeneral.add(chkIsActive, 4);
		grdGeneral.nextRow();
		grdGeneral.finish(true);

		Insets descriptionInset = new Insets(2, 4, 2, 4);
		Insets firstInset = new Insets(12, 4, 2, 4);

		// Network rules
		pnlTabNetrules = new JPanel();
		GridManager grdNetrules = new GridManager(pnlTabNetrules, 1, true, new Insets(9, 4, 2, 4));
		// "restrictions": internet access / usb access / exam
		chkHasInternetAccess = new JCheckBox(
				I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.hasInternetAccess.text"));
		grdNetrules.add(chkHasInternetAccess).expand(true, false).insets(firstInset);
		grdNetrules.nextRow();
		grdNetrules.add(
				new WordWrapLabel(
						I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.hasInternetAccess.text"), false, true))
				.fill(true, false)
				.expand(true, false)
				.insets(descriptionInset);
		grdNetrules.nextRow();
		ctlNetrulesConfigurator = new NetrulesConfigurator();
		grdNetrules.add(ctlNetrulesConfigurator).fill(true, true).expand(true, true);
		grdNetrules.nextRow();
		grdNetrules.finish(false);

		// Tab restrictions
		pnlTabRestrictions = new JPanel();
		GridManager grdRestrictions = new GridManager(pnlTabRestrictions, 2, true, new Insets(9, 4, 2, 4));

		chkHasUsbAccess = new JCheckBox(I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.hasUSBAccess.text"));
		grdRestrictions.add(chkHasUsbAccess, 2);
		grdRestrictions.nextRow();
		grdRestrictions.add(
				new WordWrapLabel(
						I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.hasUSBAccess.text"), false, true), 2)
				.fill(true, false)
				.expand(true, false)
				.insets(descriptionInset);
		grdRestrictions.nextRow();

		chkIsExam = new JCheckBox(I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.isExam.text"));
		grdRestrictions.add(chkIsExam, 2);
		grdRestrictions.nextRow();
		grdRestrictions.add(
				new WordWrapLabel(
						I18n.WINDOW_LAYOUT.getString("LectureDetails.Label.isExam.text",
								Branding.getServiceName(), Branding.getServiceName()),
						false, true), 2)
				.fill(true, false)
				.expand(true, false)
				.insets(descriptionInset);
		grdRestrictions.finish(true);

		/* *******************************************************************************
		 *
		 *                        		Tab "Permissions"
		 *
		 ********************************************************************************/
		ctlPermissionManager = new LecturePermissionConfigurator();
		pnlTabPermissions = new JPanel();
		GridManager grdPermissions = new GridManager(pnlTabPermissions, 1, false);
		JPanel defaultPermissionPane = new JPanel();
		defaultPermissionPane.setBorder(BorderFactory.createTitledBorder(
				I18n.WINDOW_LAYOUT.getString("LectureDetails.TitledBorder.defaultPermissionPane.title")));
		chkCustomPermEdit = new JCheckBox(I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.permEdit.text"));
		chkCustomPermAdmin = new JCheckBox(I18n.WINDOW_LAYOUT.getString("LectureDetails.CheckBox.permAdmin.text"));
		defaultPermissionPane.add(chkCustomPermEdit);
		defaultPermissionPane.add(chkCustomPermAdmin);
		grdPermissions.add(ctlPermissionManager).fill(true, true).expand(true, true);
		grdPermissions.nextRow();
		grdPermissions.add(defaultPermissionPane).fill(true, false).expand(true, false);
		grdPermissions.finish(false);

		/* *******************************************************************************
		 *
		 *                        		Tab "Container"
		 *
		 ********************************************************************************/
		pnlTabContainer = new ContainerPanel();

		/* *******************************************************************************	
		 * 
		 *                        		Tab "Locations"
		 *
		 ********************************************************************************/
		ctlLocationSelector = new LocationSelector();
		pnlTabLocations = new JPanel();
		GridManager grdLocations = new GridManager(pnlTabLocations, 1, false);
		grdLocations.add(ctlLocationSelector).fill(true, true).expand(true, true);
		grdLocations.finish(false);

		/* *******************************************************************************	
		 * 
		 *                        		Tab "Runscript"
		 *
		 ********************************************************************************/
		ctlRunscriptConfigurator = new StartupConfigurator();
		pnlTabRunscript = new JPanel();
		GridManager grdAdvanced = new GridManager(pnlTabRunscript, 1, false);
		grdAdvanced.add(ctlRunscriptConfigurator).fill(true, true).expand(true, true);
		grdAdvanced.finish(false);

		/* *******************************************************************************
		 *
		 *                        		Tab "Network-Shares"
		 *
		 ********************************************************************************/
		ctlNetshareConfigurator = new NetshareConfigurator();
		pnlTabNetshare = new JPanel();
		GridManager grdNetshare = new GridManager(pnlTabNetshare, 1, false, new Insets(8, 2, 8, 2));
		grdNetshare.add(ctlNetshareConfigurator).fill(true, true).expand(true, true);
		grdNetshare.finish(false);

		/* *******************************************************************************
		 *
		 *                        		Tab "LDAP-Filters"
		 *
		 ********************************************************************************/
		ctlLdapFilterConfigurator = new LdapFilterConfigurator();
		pnlTabLdapFilter = new JPanel();
		GridManager grdLdap = new GridManager(pnlTabLdapFilter, 1, false, new Insets(8, 2, 8, 2));
		grdLdap.add(ctlLdapFilterConfigurator).fill(true, true).expand(true, true);
		grdLdap.finish(false);

		/* *******************************************************************************
		 *
		 *                        Main panel containing the tabs
		 *
		 ********************************************************************************/
		// finally build the tabbedPane and add it to the main view
		pnlTabs = new JTabbedPane();
		pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.info.title"), pnlTabInfo);
		pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.general.title"), pnlTabGeneral);
		if (Session.isLectureRestrictionsSupported()) {
			pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.restrictions.title"), pnlTabRestrictions);
			pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.netRules.title"), pnlTabNetrules);
		}
		if (MetaDataCache.getLocations() != null && !MetaDataCache.getLocations().isEmpty()) {
			pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.locations.title"), pnlTabLocations);
		}
		if (Session.isLectureRestrictionsSupported()) {
			pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.runScript.title"), pnlTabRunscript);
		}
		pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.permissions.title"), pnlTabPermissions);
		if (Session.hasFeature(Feature.NETWORK_SHARES)) {
			pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.netShare.title"), pnlTabNetshare);
		}
		if (Session.hasFeature(Feature.LECTURE_FILTER_LDAP)) {
			pnlTabs.addTab(I18n.WINDOW_LAYOUT.getString("LectureDetails.Tab.ldapFilter.title"), pnlTabLdapFilter);
		}
		add(pnlTabs, BorderLayout.CENTER);
		// usage counter + button panel on the bottom
		JPanel buttonPanel = new JPanel();
		buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
		buttonPanel.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
		btnClose = new JButton(I18n.WINDOW_LAYOUT.getString("LectureDetails.Button.close.text"));
		btnSaveChanges = new JButton(I18n.WINDOW_LAYOUT.getString("LectureDetails.Button.saveChanges.text"));
		lblError = new QLabel("");
		lblError.setForeground(Color.RED);
		buttonPanel.add(lblError);
		buttonPanel.add(Box.createGlue());
		buttonPanel.add(btnClose);
		buttonPanel.add(btnSaveChanges);
		// buttons at the end of the page
		add(buttonPanel, BorderLayout.SOUTH);
	}

	protected void showContainerTab() {
		pnlTabs.addTab("Container", pnlTabContainer);
	}

	private JSpinner makeTimeSpinner(int h, int m) {
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.HOUR_OF_DAY, h);
		calendar.set(Calendar.MINUTE, m);
		calendar.set(Calendar.SECOND, 0);
		SpinnerDateModel model = new SpinnerDateModel();
		model.setValue(calendar.getTime());
		JSpinner spinner = new JSpinner(model);
		JSpinner.DateEditor editor = new JSpinner.DateEditor(spinner, "HH:mm");
		DateFormatter formatter = (DateFormatter) editor.getTextField().getFormatter();
		formatter.setAllowsInvalid(false);
		formatter.setOverwriteMode(true);
		spinner.setEditor(editor);
		return spinner;
	}
}