summaryrefslogblamecommitdiffstats
path: root/dozentenmodul/src/main/java/gui/image/FTPEditDownloader_GUI.java
blob: c435cf455fd02fbfc5b76d681949ac8ac391d472 (plain) (tree)
1
2
3
4
5
6
7
                  


                             
                          
                       
                           









                                         
                    
                           

                                   
 



                                


                             
                               

                                

                              



                                                   
 
                    
                    
                          
 
                               
                                    

                                            
 

                                      
                               
                         
                      


                               
                     
 
                           

                                                            
 


                                          


                                                                


                                                         
                       
                            

                                 
                                                            
                      
                                 
                               
                          


                              
                        

                      
                                                 
                       
                       
                                

                                                            
                                                  
                                                                     
                                                                       
                                    
                           

                                                                                                       
                                                                                  



                                                                                                                                                                                                      



                            
                                                           






                                                                                      


                                                                    


                                                                  
                                                      


                                                                          
                                                                          





















                                                                                                                                                                

                                    






                                                                                               
 
                                           


                                                                       

                                          
                                                 
 





                                                                        
                                                                     
                                                                  

                                                                                       
 
                                                                                            

                                                                                               
 
                                                                        


                                                                         
                                                                                    

                                                                     




                                                                                       


                                 
                                                                            
                                                                                        

                                                                 
 
                                         
                                                              
 

                                                                                
                                                                



                                                                                        
                                                                                  






                                                                                       
 
                                                     





                                                                           
                                                                
                                                     

                                                       

                                                   
                                                         
                                              


                                                               
                                                                        
                                                             
 


                                                          
 


                                                           
 


                                                       
 


                                                   
 


                                                         
 
                                                                     
                                                             
                                                   
 


                                                            

                                                                 
                                                                  
                                                                          
                                                               
 


                                                     
 


                                                      
                                                 
                                        
 





                                                                              
                                  
                                                                                                                         



                                                                   
 
                                                        
                                                   
                                            
 
                                                          
                                                  
                                                  
                                          
 
                                                 
                                                  
                                          
 
                                                     
                                                  
                                                  
                                          
 
                                                 
                                                   
                                          
 

                                                                   
                                                   
 


                                                          
 






                                                               
 




                                                               
                                                                
                                                              
                                                   
 


                                                  
 

                                                
 


                                                              
                                                                   
                                                                 


                                                                          
                                                                  



                                                                          



                                   
 


                                                                
                                                                   
                                                                 


                                                                           
                                                                  



                                                                          



                                     
 







                                                                    

                                          
                                                                                                                       

















                                                                                      





                                                                            
                                                                         














                                                                          





                                                                                          
                                                                                 
                                                                                    



                                                                                          
                                                                                          













                                                                                                                                                               
 
                                                                                   
                                                                                                                    





                                                                                    
                                                                           
                                                                                                            



                                                                            
                                                                                    

                                                                                     
                                                                                                 
                                                                                             

                                                                                                    

                                                               
 

                                         

                                                                    


                                 




                                                                    
                                                                                                                                               


                                            
                
                         
 
         


                                                                       
                                  
                                        


                                                                                                        

                                                   
 



                                                                                         
 
                                        

                                                          
                                                        

                                                                                                 
                 
 
                                                                                 
                                                                 





                                                     

                                                              





                                                                        
 

                                                                    
 


                                                                                           
                         
 
                                                                                         


                                                                                                       



                                                                               
                         
 















                                                                                                                                                      
 



                                                                                      
 

                          
 




                                             

                                                                          



                                                   


                                          
















                                                               
             
package gui.image;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JSeparator;
import javax.swing.JTextPane;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;

import models.Image;
import models.Links;
import models.SessionData;

import org.apache.log4j.Logger;
import org.apache.thrift.TException;
import org.ini4j.InvalidFileFormatException;
import org.ini4j.Wini;

import server.generated.Server.Client;
import server.generated.User;
import thrift.ThriftConnection;
import util.GuiOrganizer;
import util.OpenLinks;
import ftp.DownloadTask;
import gui.intro.About_GUI;
import gui.intro.MainMenue_GUI;
import config.Config;

@SuppressWarnings("serial")
public class FTPEditDownloader_GUI extends JFrame implements
		PropertyChangeListener {

	/**
	 * Logger instance for this class.
	 */
	private final static Logger LOGGER = Logger
			.getLogger(FTPEditDownloader_GUI.class);

	@SuppressWarnings("unused")
	private JPanel contentPane;
	private final JPanel contentPanel = new JPanel();
	JLabel lblPath;
	JLabel lblDownSpeed;
	User user;
	JProgressBar progressBar;
	String host = SessionData.session.getServerAdress();
	int port = 21;
	String downloadFile = "";
	static String arg = "";
	DownloadTask task;
	JLabel lblFertig;
	JLabel lblFilesize;
	JLabel lblVerbleibend;
	JFileChooser fc;
	long filesize;
	double speed;
	int progress = 0; // progress of download
	long bytesread;
	JLabel lblZeit;
	boolean taskrun = false;
	ThriftConnection con = new ThriftConnection();
	Client client = models.Client.clientcon.getClient();
	JButton btnZurck = new JButton("Zurück");
	JButton btnDownloadStarten = new JButton("Download starten");
	JButton btnDownloadStoppen = new JButton("Download abbrechen");
	private JLabel lblAnleitung;
	Component c = null;
	private boolean isCurrentlyLoading = false; // currently up or downloading
												// file
	private boolean isAborted = false; // down- or upload was manually aborted
	private static final String HELP_MESSAGE = 	"<html><div align=\"center\">" +
												"Hier können Sie Images herunterladen.<br />" +
												"Klicken Sie anschließend auf \"Zurück\", um zu Ihrer vorherigen Auswahl zurückzugelangen.<br />" +
												"</div></html>";

	/**
	 * Create the frame.
	 */
	public FTPEditDownloader_GUI(Component formerGUI) {
		
		try {
			client.setTokenForSession(SessionData.session.getAuthToken());
		} catch (TException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		final Object[] options = { "Beenden", "Abbrechen" };

		addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				if (taskrun == true) {
					// check if user wants to quit.
					int choice = JOptionPane
							.showOptionDialog(
									c,
									"Aktuell ist ein Download aktiv. Wollen Sie diesen Abbrechen und das Programm beenden?",
									"Upload aktiv",
									JOptionPane.YES_NO_CANCEL_OPTION,
									JOptionPane.QUESTION_MESSAGE, null,
									options, options[1]);
					// 0=beenden, 1=abbrechen
					if (choice == 0) {
						try {
							client.DeleteFtpUser(user.userName);
							con.closeThriftConnection();
						} catch (TException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
						task.cancel(true);
						System.exit(0);
					}// end if coice
				} else {
					// no download running, close window
					System.exit(0);
				}// end if taskrun
			}// end window closing
		});
		setResizable(false);
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (ClassNotFoundException | InstantiationException
				| IllegalAccessException | UnsupportedLookAndFeelException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		setBackground(Color.WHITE);
		setTitle("Dozentenmodul - Image herunterladen");
		// Aktion die beim Schliessen durchgefuehrt werden soll
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

		setBounds(0, 0, 603, 722);
		setLocationRelativeTo(formerGUI);

		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBackground(SystemColor.menu);
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(null);
		{
			JButton btnSpeicherortAuswhlen = new JButton(
					"Speicherort auswählen");
			btnSpeicherortAuswhlen.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {

					fc = new JFileChooser(Config.getLastDownloadPath());
					fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
					fc.showOpenDialog(getParent());

					File dir = fc.getSelectedFile();
					// check if directory is selected
					if (dir != null) {
						// is selected
						// create dir if it does not exists.
						if (!dir.exists())
							dir.mkdirs();
						lblPath.setText(dir.getAbsolutePath());
					} else {
						// no directory selected
						lblPath.setText("");
					}// end if
				}
			});

			btnSpeicherortAuswhlen.setBounds(102, 124, 173, 23);
			btnSpeicherortAuswhlen.setVerticalAlignment(SwingConstants.TOP);
			contentPanel.add(btnSpeicherortAuswhlen);
		}

		lblPath = new JLabel("");
		lblPath.setText(Config.getLastDownloadPath());

		lblPath.addPropertyChangeListener(new PropertyChangeListener() {
			public void propertyChange(PropertyChangeEvent arg0) {
				if (lblPath.getText() == null) {
					// wenn leer, dann upload button nicht freigeben
					btnDownloadStarten.setEnabled(false);
					btnDownloadStarten.setText("Bitte warten");
				} else {
					// wenn leer, dann upload button freigeben
					btnDownloadStarten.setEnabled(true);
					btnDownloadStarten.setText("Download starten");
				}
			}
		});
		lblPath.setBounds(102, 158, 485, 23);
		contentPanel.add(lblPath);

		btnDownloadStarten.setEnabled(false);
		btnDownloadStarten.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				buttonDownloadActionPerformed(arg0);
			}
		});

		btnDownloadStarten.setBounds(102, 200, 173, 23);
		contentPanel.add(btnDownloadStarten);

		progressBar = new JProgressBar(0, 100);
		progressBar.setStringPainted(true);

		progressBar.setBounds(102, 234, 485, 30);
		contentPanel.add(progressBar);

		JLabel lblDownloadgeschwindigkeit = new JLabel(
				"Downloadgeschwindigkeit:");
		lblDownloadgeschwindigkeit.setBounds(102, 275, 141, 14);
		contentPanel.add(lblDownloadgeschwindigkeit);

		lblDownSpeed = new JLabel("0");
		lblDownSpeed.setBounds(374, 275, 117, 14);
		contentPanel.add(lblDownSpeed);

		JLabel lblFertig_1 = new JLabel("Fertig:");
		lblFertig_1.setBounds(102, 325, 46, 14);
		contentPanel.add(lblFertig_1);

		lblFertig = new JLabel("0");
		lblFertig.setBounds(183, 325, 108, 14);
		contentPanel.add(lblFertig);

		JLabel lblVon = new JLabel("von:");
		lblVon.setBounds(318, 325, 46, 14);
		contentPanel.add(lblVon);

		lblFilesize = new JLabel("0");
		lblFilesize.setBounds(374, 325, 117, 14);
		contentPanel.add(lblFilesize);

		JLabel lblMbVerbleibend = new JLabel("Verbleibend:");
		lblMbVerbleibend.setBounds(102, 350, 71, 14);
		contentPanel.add(lblMbVerbleibend);

		lblVerbleibend = new JLabel("0");
		lblVerbleibend.setBounds(183, 350, 108, 14);
		contentPanel.add(lblVerbleibend);

		JLabel lblGeschtzteVerbleibendeZeit = new JLabel(
				"Geschätzte Verbleibende Zeit:");
		lblGeschtzteVerbleibendeZeit.setBounds(102, 300, 150, 14);
		contentPanel.add(lblGeschtzteVerbleibendeZeit);

		lblZeit = new JLabel("0");
		lblZeit.setBounds(374, 300, 117, 14);
		contentPanel.add(lblZeit);

		JPanel panel = new JPanel();
		panel.setLayout(null);
		panel.setBackground(SystemColor.menu);
		panel.setBounds(10, 24, 577, 57);
		contentPanel.add(panel);

		JLabel lblImageDownloader = new JLabel("Image Downloader");
		lblImageDownloader.setFont(new Font("Tahoma", Font.BOLD, 18));
		lblImageDownloader.setBounds(10, 11, 509, 22);
		panel.add(lblImageDownloader);

		JTextPane txtpnWhlenSieEinen = new JTextPane();
		txtpnWhlenSieEinen
				.setText("Wählen Sie einen Ort aus, um das von Ihnen gewählte Image herunterzuladen.");
		txtpnWhlenSieEinen.setEditable(false);
		txtpnWhlenSieEinen.setBackground(SystemColor.menu);
		txtpnWhlenSieEinen.setBounds(10, 36, 509, 32);
		panel.add(txtpnWhlenSieEinen);

		JSeparator separator = new JSeparator();
		separator.setBounds(0, 88, 597, 2);
		contentPanel.add(separator);

		JLabel label_1 = new JLabel("Hauptmenü");
		label_1.setForeground(Color.BLUE);
		label_1.setBounds(20, 92, 61, 20);
		contentPanel.add(label_1);

		JLabel label_2 = new JLabel(">");
		label_2.setBounds(80, 95, 14, 14);
		contentPanel.add(label_2);

		JLabel label_3 = new JLabel("Image");
		label_3.setForeground(Color.BLUE);
		label_3.setBounds(91, 92, 46, 20);
		contentPanel.add(label_3);

		JLabel label_4 = new JLabel(">");
		label_4.setBounds(139, 95, 14, 14);
		contentPanel.add(label_4);

		JLabel lblNeuBearbeiten = new JLabel("Bearbeiten");
		lblNeuBearbeiten.setBounds(149, 95, 155, 14);
		contentPanel.add(lblNeuBearbeiten);

		JSeparator separator_1 = new JSeparator();
		separator_1.setBounds(-10, 648, 597, 2);
		contentPanel.add(separator_1);

		JLabel lblSchritt = new JLabel("Schritt 1:");
		lblSchritt.setBounds(24, 128, 57, 14);
		contentPanel.add(lblSchritt);

		JLabel lblSchritt_1 = new JLabel("Schritt 2:");
		lblSchritt_1.setBounds(24, 204, 57, 14);
		contentPanel.add(lblSchritt_1);

		JLabel lblSchritt_3 = new JLabel("Schritt 3:");
		lblSchritt_3.setBounds(20, 423, 57, 14);
		contentPanel.add(lblSchritt_3);

		JLabel lblKlickenSieAuf = new JLabel(
				"Klicken Sie auf \"Zurück\".");
		lblKlickenSieAuf.setBounds(102, 423, 241, 14);
		contentPanel.add(lblKlickenSieAuf);

		JMenuBar menuBar = new JMenuBar();
		menuBar.setBounds(0, 0, 597, 21);
		contentPanel.add(menuBar);

		JMenu menu = new JMenu("Hilfe");
		menuBar.add(menu);

		JMenuItem menuItem = new JMenuItem("FAQ");
		menuItem.addMouseListener(new MouseAdapter() {
			@Override
			public void mousePressed(MouseEvent arg0) {
				OpenLinks open = new OpenLinks();
				URI windows;
				try {
					windows = new URI(Links.getFAQ());
					open.openWebpage(windows);
				} catch (URISyntaxException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});

		menu.add(menuItem);

		JMenuItem menuItem_1 = new JMenuItem("OTRS");
		menuItem_1.addMouseListener(new MouseAdapter() {
			@Override
			public void mousePressed(MouseEvent arg0) {
				OpenLinks open = new OpenLinks();
				URI windows;
				try {
					windows = new URI(Links.getOTRS());
					open.openWebpage(windows);
				} catch (URISyntaxException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});

		menu.add(menuItem_1);

		JMenuItem mntmAbout = new JMenuItem("About");
		mntmAbout.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				About_GUI ab = new About_GUI();
				ab.setVisible(true);
			}
		});
		menu.add(mntmAbout);

		lblAnleitung = new JLabel(
				"<HTML><U>Anleitung zum Erstellen einer virtuellen Maschine herunterladen</U></HTML>");
		lblAnleitung.setForeground(Color.BLUE);
		lblAnleitung.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				OpenLinks open = new OpenLinks();

				URI anleitung;
				try {
					anleitung = new URI(Links.getAnleitungVMDK());
					open.openWebpage(anleitung);
				} catch (URISyntaxException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		lblAnleitung.setBounds(102, 448, 311, 14);
		contentPanel.add(lblAnleitung);
		btnDownloadStoppen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				isAborted = true; // set flag
				try {
					client.DeleteFtpUser(user.userName);
					LOGGER.info("FTP user deleted.");
				} catch (TException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				task.cancel(true);
				resetValues();

				// reset buttons
				resetButtons();
			}
		});

		btnDownloadStoppen.setEnabled(false);
		btnDownloadStoppen.setBounds(305, 200, 173, 23);
		contentPanel.add(btnDownloadStoppen);
		{
			JPanel buttonPane = new JPanel();
			buttonPane.setBackground(UIManager.getColor("Button.background"));
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
			{
				btnZurck.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						// check if loading file or not
						if (isCurrentlyLoading() == true) {
							int choice = JOptionPane
									.showOptionDialog(
											c,
											"Nicht abgeschlossene Uploads werden beendet. Trotzdem zurück gehen?",
											"Warnung",
											JOptionPane.YES_NO_CANCEL_OPTION,
											JOptionPane.QUESTION_MESSAGE, null,
											options, options[1]);
							// 0=beenden, 1=abbrechen
							if (choice == 0) {
								task.cancel(true);
								try {
									client.DeleteFtpUser(user.userName);
								} catch (TException e1) {
									// TODO Auto-generated catch block
									e1.printStackTrace();
								}

								// go back one page
								SearchEditImage_GUI se = new SearchEditImage_GUI(c);
								se.setVisible(true);
								dispose();
							}// end choice

						} else {

							// go back one page
							SearchEditImage_GUI se = new SearchEditImage_GUI(c);
							se.setVisible(true);
							dispose();

						}// end else
							// always save download path
						File f = new File(lblPath.getText());
						if (f.isDirectory()) {
							Config.setLastDownloadPath(f.toString());
						} else if (f.getParentFile().isDirectory()) {
							Config.setLastDownloadPath(f.getParentFile()
									.toString());
						}
						Config.store();

					}
				});
				btnZurck.setActionCommand("Cancel");
				buttonPane.add(btnZurck);
			}
		}
		setVisible(true);
		
		JMenu mnNewMenu_Info = new JMenu("Info");
		mnNewMenu_Info.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				JOptionPane.showMessageDialog(c, HELP_MESSAGE, "Hilfe zu dieser Oberfläche", JOptionPane.INFORMATION_MESSAGE);
			}
		});
		menuBar.add(mnNewMenu_Info);
		
		c = this;

	}

	private void buttonDownloadActionPerformed(ActionEvent event) {

		isAborted = false;
		progressBar.setValue(0);
		btnDownloadStarten.setEnabled(false); // verhindert schnellen zweiten
												// Klick
		btnDownloadStarten.setText("Bitte warten");
		try {
			user = client.getFtpUser();

			downloadFile = user.path
					+ "/"
					+ client.getPathOfImage(Image.image.getImageId(),
							Image.image.getVersion());

		} catch (TException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			JOptionPane.showMessageDialog(c,
					e.getCause() + "\n" + e.getStackTrace(), "Debug-Message",
					JOptionPane.ERROR_MESSAGE);
		}

		task = new DownloadTask(host, port, user.userName, user.password,
				downloadFile, lblPath.getText());
		task.addPropertyChangeListener(this);
		task.execute();
		taskrun = true;

	}

	public void propertyChange(PropertyChangeEvent arg0) {

		if (isAborted == false) {
			progress = 0;
			if ("progress" == arg0.getPropertyName()) {
				progress = (Integer) arg0.getNewValue();
				progressBar.setValue(progress);
			}

			if ("speed" == arg0.getPropertyName()) {
				speed = (double) arg0.getNewValue();

				lblDownSpeed.setText(String.valueOf(speed).substring(0,
						String.valueOf(speed).lastIndexOf(".") + 3)
						+ " MB/s");
			}

			// Button zum Fertigstellen freischalten, wenn 100% erreicht sind
			if (isCurrentlyLoading() == false || progressBar.getPercentComplete() == 1.0) {
				// no download
				//LOGGER.info("finished downloading file");
				btnDownloadStoppen.setEnabled(false);
			} else {
				// currently uploading, don't let user interact
				btnDownloadStoppen.setEnabled(true);
			}

			if ("bytesread" == arg0.getPropertyName()) {
				bytesread = (long) arg0.getNewValue();
				lblFertig.setText((bytesread / 1024 / 1024) + " MB");
				lblVerbleibend
						.setText(((filesize / 1024 / 1024) - (bytesread / 1024 / 1024))
								+ " MB");

				lblZeit.setText(String
						.valueOf(
								((((filesize / 1024 / 1024) - (bytesread / 1024 / 1024)) / speed) / 60) + 1)
						.substring(
								0,
								String.valueOf(
										(((filesize / 1024 / 1024) - (bytesread / 1024 / 1024)) / speed) / 60)
										.lastIndexOf("."))
						+ " Minuten");

			}
			if ("filesize" == arg0.getPropertyName()) {
				filesize = (long) arg0.getNewValue();
				lblFilesize.setText((filesize / 1024 / 1024) + " MB");

			}
		}// end if

	}// end PropertyChange()

	public boolean isCurrentlyLoading() {
		isCurrentlyLoading = false;

		if (lblVerbleibend.getText().equals("0 MB")
				|| lblVerbleibend.getText().equals("0")) {
			isCurrentlyLoading = false;
		} else {
			isCurrentlyLoading = true;
		}
		return isCurrentlyLoading;
	}// end isCurrentlyLoading()

	public void resetValues() {
		lblDownSpeed.setText("0");
		lblZeit.setText("0");
		lblFertig.setText("0");
		lblFilesize.setText("0");
		lblVerbleibend.setText("0");
		progressBar.setValue(0);
	}// end resetValues

	public void resetButtons() {
		// btnFinish.setEnabled(false);
		btnDownloadStarten.setEnabled(true);
		btnDownloadStarten.setText("Download starten");
		btnDownloadStoppen.setEnabled(false);

	}// end resetButtons

}// end class