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


                                        
                          


                           


                             

                          
                               
                                                     
                                                            
                                                             

                                                       
                                             



                                                                                            
                                         
 
                                        
 
                                        
 
                                            
 

                                           



                                                  
                                                    




                                                 

                                      

                                       
                                                                                   


                                       
                                
 
                                                                                                  
                                                                    
                                                                  
                                      
                                                                             
                                                        

                                                          
                                                        
                                                           


                                                                       


                                                                



                                                          
                                               
                                                                
                                                                              



                                                                                   
                                      
                                                                             


                                               

                                                                           


                                             
                                                                              






                                                             




                                                                  


















                                                                                                  
                                                      


                                                                    
                                                                  


                                                                                       

                                                      
                                                               





                                                                   
                                                                               

                                                      
                                                                                

                                                      
                                                                  





                                                                              




                                                                                                                









                                                                           



                                               
                                        

                                                  

         
 
package org.openslx.dozmod.gui.activity;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JPanel;

import org.apache.log4j.Logger;
import org.openslx.dozmod.filetransfer.TransferEvent;
import org.openslx.dozmod.filetransfer.TransferEventEmitter;
import org.openslx.dozmod.filetransfer.TransferEventListener;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.control.BlockProgressBar;
import org.openslx.dozmod.gui.control.QLabel;

@SuppressWarnings("serial")
public abstract class TransferPanel extends ActivityPanel implements TransferEventListener {

	protected final QLabel lblStatus;

	protected final QLabel lblError;

	protected final QLabel lblSpeed;

	protected final QLabel lblRemaining;

	protected final QLabel lblFilename;

	protected final JButton btnClose;

	protected final BlockProgressBar progress;

	private final TransferEventEmitter transfer;

	private final TransferPanel panel = this;

	private final Color defaultLabelColor;

	protected final JPanel header;

	private int errorCountdown = 0;

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

	private JPanel progressWrapper;

	protected JPanel footer;

	public TransferPanel(TransferEventEmitter transfer, String displayName, String fileName) {
		setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
		// Header: [status] VM-Name ---- fileName [Button]
		header = new JPanel();
		header.setLayout(new BoxLayout(header, BoxLayout.LINE_AXIS));
		lblStatus = new QLabel("Initialisiere");
		header.add(lblStatus);
		header.add(Box.createHorizontalStrut(10));
		QLabel vmName = new QLabel(displayName);
		vmName.setMinimumSize(new Dimension(0, 0));
		vmName.setFont(vmName.getFont().deriveFont(Font.BOLD));
		header.add(vmName);
		header.add(Box.createHorizontalGlue());
		lblFilename = new QLabel(fileName);
		lblFilename.setMinimumSize(new Dimension(0, 0));
		header.add(lblFilename);
		header.add(Box.createHorizontalStrut(10));
		btnClose = new JButton("Abbrechen");
		header.add(btnClose);
		add(header);
		progressWrapper = new JPanel();
		progressWrapper.setLayout(new GridLayout(1, 1));
		progressWrapper.setMinimumSize(Gui.getScaledDimension(0, 50));
		progressWrapper.setPreferredSize(progressWrapper.getMinimumSize());
		progress = new BlockProgressBar(null);
		progressWrapper.add(progress);
		add(progressWrapper);
		footer = new JPanel();
		footer.setLayout(new BoxLayout(footer, BoxLayout.LINE_AXIS));
		lblError = new QLabel();
		lblSpeed = new QLabel("-");
		lblRemaining = new QLabel("-");
		lblSpeed.setMinimumSize(Gui.getScaledDimension(50, 0));
		lblRemaining.setMinimumSize(Gui.getScaledDimension(60, 0));
		footer.add(lblError);
		footer.add(Box.createGlue());
		footer.add(lblSpeed);
		footer.add(Box.createRigidArea(Gui.getScaledDimension(6, 6)));
		footer.add(lblRemaining);
		add(footer);
		this.transfer = transfer;
		defaultLabelColor = lblError.getForeground();
	}

	@Override
	public boolean wantConfirmQuit() {
		return transfer != null && !transfer.isCanceled();
	}

	@Override
	public void update(final TransferEvent event) {
		Gui.asyncExec(new Runnable() {
			@Override
			public void run() {
				// Any error message?
				if (event.errorMessage != null && !event.errorMessage.isEmpty()) {
					lblError.setText(event.errorMessage);
					lblError.setForeground(Color.RED);
					errorCountdown = 20;
				} else if (errorCountdown > 0) {
					errorCountdown--;
					if (errorCountdown == 10) {
						lblError.setForeground(defaultLabelColor);
					} else if (errorCountdown == 0) {
						lblError.setText("");
					}
				}
				// Status?
				if (event.state != null) {
					String status;
					switch (event.state) {
					case ERROR:
						errorCountdown = 20;
						status = "Fehler";
						if (transfer.isCanceled()) {
							transfer.removeListener(panel);
						}
						break;
					case FINISHED:
						transferDone();
						status = "Beendet";
						break;
					case IDLE:
						status = "Inaktiv";
						break;
					case WORKING:
						status = "Übertragung läuft";
						break;
					default:
						status = event.state.toString();
						break;
					}
					lblStatus.setText(status);
				}
				// Remaining + Speed
				if (event.remainingRaw != 0) {
					lblRemaining.setText(event.remaining);
				}
				if (event.speedRaw != 0) {
					if (event.virtualSpeedRaw != 0) {
						lblSpeed.setText(event.speed + " (" + event.virtualSpeed + ")");
					} else {
						lblSpeed.setText(event.speed);
					}
				}
				// Progress bar
				if (event.progress != null) {
					progress.setStatus(event.progress);
				}
				panel.validate();
			}
		});
	}

	private void transferDone() {
		transfer.removeListener(panel);
		lblRemaining.setText("-");
		btnClose.setText("Schließen");
		lblFilename.setText("");
		footer.setVisible(false);
		progressWrapper.setVisible(false);
	}

}