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


                             


                            

                                     

                                   




                                         
                           

                                   


                                  
 





                                
                             
                               







                                                   
 
                    
                    
                          
                     
 
                                    

                                            
 

                               
                         
                      
                      
                           
                               
                     
 
                           

                                                            



                                                         
                       
                                 
                                                            
                      
                         
                             
                        
                               





                                
                        


                       
                                

                                                            
                                                            
                                                                            
                                                  
                                               

                                                                                                       
 


                            
                                        


                                                                    
                                                       
 

                                                                     
 
                                                      
























                                                                                                                                                              
                                              

                                    
 





                                                                                               
                                                           

                                                                                                 

                 
                                 
                                           


                                                                       



                                             





                                                                        
                                                                                         

                                                                                       

                                                                                                                                               
                                                                                         
 
                                                                       
                                                                         
                                                                                 
                                                           
                                                                

                                                                                
                                                                                        
                                                
                                                                   
                                                                    
                                                  


                                 
                                                                            
                                                                                        

                                                                 
                                         
                                                                                                                 
 
                                                                                
                                                                              
                                                                

                                                                                        
                                                                                 

                                                                                  
                                                                          
                                                                                              


                                 


                                                                    
 
                                                   
                                                                         

                                                                       
 


                         
                                                              
                                                   

                                                       

                                                   
                                                         
                                              
 
                                                                                       
                                                                      
                                                           
 
                                                       
                                                    
                                          
 
                                              
                                                                        
                                                         
                                              
 
                                          
                                                                    
                                                     
                                          
 
                                                    
                                                    
                                          
 
                                                
                                                                          
                                                           
                                                
 
                                                            
                                                    
                                          
 
                                                                              
                                                     
                                          
 
                                            
                                                                      
                                                       
                                            
 
                                                   
                                                                             
                                                              
                                                   
 




                                                      
 



                                                                               
 
                                                              
                                 
                                                                                                                                    



                                                                  
 


                                                        
 
                                                                


                                                        
 


                                                  
 
                                                        


                                                     
 


                                                   
 
                                                            

                                                             
 


                                                          
 


                                                               
 


                                                               
 


                                                               


                                                                      
                                                             
                                                   





                                                                                          

                                                                                     

                                                                                    






                                                                                                                                     
                                                 


                                                               
                                                          
                                                                                      
                                                                   


                                                                                                    
 


                                                                                                  





                                                                                                                     

                                                                          
                                                 



                                         

                                                                                    






























                                                                                                                                                               


                                                                    

                                                                        

                         
 

                                                  
 

                                                
 


                                                              
                                                                   
                                                                 


                                                                          
                                                                  



                                                                          

                         
 
                                   
 


                                                                
                                                                   
                                                                 


                                                                           
                                                                  



                                                                          


                                     
 







                                                                    
                                 
 
         

                                                                     
 
                                        
                                                                                      
                                                         

                     
                                                               
                                                   


                                                                         


                                                          
                                                           

                                                                                                 
                 

                                                                             

                                                                                      





                                                                               

                                                                 
                                                                               
                                                                 




                                                     
         

                                                              
                             
                                                           
                                                                
                                                       
 
                 
 






                                                                   
 







                                                                                   






                                                                                                       
 






















                                                                                                                                                              
 
                                                                      
                                                              
                                                                              




                                                                                
                                                                               
                                                                                           




                                                                                           
                                                                       







                                                                                


                                                          
                                                           

                                                                                                 


                                     
 















                                                                            
package gui.image;

import java.awt.BorderLayout;
import java.awt.Color;
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 java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

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 models.person;

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

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

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

	@SuppressWarnings("unused")
	private JPanel contentPane;
	private final JPanel contentPanel = new JPanel();
	JLabel lblPath;
	JProgressBar progressBar;
	String host = SessionData.session.getServerAdress();
	int port = 21;
	server.User user;
	String filename = "";
	File uploadFile;
	static String arg = "";
	UploadTask task;
	JLabel UpSpeed;
	JLabel labelfertig;
	JLabel labelfilesize;
	JLabel labelZeit;
	JLabel labelverbleibend;
	JFileChooser fc;
	long filesize;
	double speed;
	long bytesread;
	boolean taskrun = false;
	ThriftConnection con = new ThriftConnection();
	Client client = models.Client.clientcon.getClient();
	JButton finishButton = new JButton("Fertigstellen");
	JButton btnUploadStarten = new JButton("Upload auf Server starten");
	JButton btnZurck = new JButton("Zurück");
	int progress = 0; // progress of upload
	private boolean isCurrentlyLoading = false; // currently up or downloading
												// file

	/**
	 * Create the frame.
	 */
	public FTPCreateUploader_GUI() {

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

		addWindowListener(new WindowAdapter() {

			@Override
			public void windowClosing(WindowEvent arg0) {

				if (taskrun == true) {
					// check if user wants to quit.
					int choice = JOptionPane
							.showOptionDialog(
									null,
									"Aktuell ist ein Upload 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);
						} catch (TException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
						task.cancel(true);
						con.closeThriftConnection();
						System.exit(0);
					}// end if choice
				} else {
					// no upload 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();
			JOptionPane.showMessageDialog(null,
					e.getCause() + "\n" + e.getStackTrace(), "Debug-Message",
					JOptionPane.ERROR_MESSAGE);
		}

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

		setBounds(0, 0, 603, 722);
		GuiOrganizer.centerGUI(this);

		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("Image auswählen");
			btnSpeicherortAuswhlen.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					
					fc = new JFileChooser(Config.getString("main", "Letzter Uploadpfad", System.getProperty("user.home")));
					fc.setFileSelectionMode(JFileChooser.FILES_ONLY);

					fc.showOpenDialog(getParent());
					File file = fc.getSelectedFile();
					// check if a file is selected and exists
					if (file != null) {
						// file selected
						uploadFile = file;
						filename = uploadFile.getName();
						lblPath.setText(file.getAbsolutePath());
					} else {
						// no file selected
						lblPath.setText("");
					}// end if
				}
			});

			btnSpeicherortAuswhlen.setBounds(102, 124, 173, 23);
			btnSpeicherortAuswhlen.setVerticalAlignment(SwingConstants.TOP);
			contentPanel.add(btnSpeicherortAuswhlen);
		}
		lblPath = new JLabel("");
		lblPath.setText(Config.getString("main", "Letzter Uploadpfad", System.getProperty("user.home")));

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

		btnUploadStarten.setEnabled(false);
		btnUploadStarten.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				buttonUploadActionPerformed(arg0);

			}
		});

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

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

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

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

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

		labelfertig = new JLabel("0");
		labelfertig.setHorizontalAlignment(SwingConstants.LEFT);
		labelfertig.setBounds(183, 325, 108, 14);
		contentPanel.add(labelfertig);

		UpSpeed = new JLabel("0");
		UpSpeed.setHorizontalAlignment(SwingConstants.LEFT);
		UpSpeed.setBounds(374, 275, 117, 14);
		contentPanel.add(UpSpeed);

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

		labelfilesize = new JLabel("0");
		labelfilesize.setHorizontalAlignment(SwingConstants.LEFT);
		labelfilesize.setBounds(374, 325, 117, 14);
		contentPanel.add(labelfilesize);

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

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

		labelZeit = new JLabel("0");
		labelZeit.setHorizontalAlignment(SwingConstants.LEFT);
		labelZeit.setBounds(374, 300, 117, 14);
		contentPanel.add(labelZeit);

		labelverbleibend = new JLabel("0");
		labelverbleibend.setHorizontalAlignment(SwingConstants.LEFT);
		labelverbleibend.setBounds(183, 350, 108, 14);
		contentPanel.add(labelverbleibend);

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

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

		JTextPane txtpnFhreSieBitte = new JTextPane();
		txtpnFhreSieBitte
				.setText("Führe Sie bitte die folgenden 3 Schritte aus um Ihr Image auf unseren Server zu laden.");
		txtpnFhreSieBitte.setEditable(false);
		txtpnFhreSieBitte.setBackground(SystemColor.menu);
		txtpnFhreSieBitte.setBounds(10, 36, 509, 32);
		panel.add(txtpnFhreSieBitte);

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

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

		JLabel label_3 = new JLabel(">");
		label_3.setBounds(80, 91, 14, 14);
		contentPanel.add(label_3);

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

		JLabel label_5 = new JLabel(">");
		label_5.setBounds(139, 91, 14, 14);
		contentPanel.add(label_5);

		JLabel lblNeubearbeiten = new JLabel("Neu");
		lblNeubearbeiten.setBounds(149, 91, 108, 14);
		contentPanel.add(lblNeubearbeiten);

		JSeparator separator_1 = new JSeparator();
		separator_1.setBounds(0, 627, 597, 2);
		contentPanel.add(separator_1);

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

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

		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 \"Fertigstellen\".");
		lblKlickenSieAuf.setBounds(98, 423, 241, 14);
		contentPanel.add(lblKlickenSieAuf);
		{
			JPanel buttonPane = new JPanel();
			buttonPane.setBackground(UIManager.getColor("Button.background"));
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
			{
				finishButton.setEnabled(false);
				finishButton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						writeData();

						File f = new File(lblPath.getText());
						if (f.isDirectory()) {
							// shouldn't be a directory, but let's check that case anyway
							Config.setString("main", "Letzter Uploadpfad", f.toString());
						} else if (f.getParentFile().isDirectory()) {
							Config.setString("main", "Letzter Uploadpfad", f.getParentFile().toString());
						}
						// save config.
						Config.store();
						
						dispose();
						MainMenue_GUI m = new MainMenue_GUI();
						m.setVisible(true);
						if (taskrun == true) {
							try {
								client.DeleteFtpUser(user.userName);

							} catch (TException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
								JOptionPane.showMessageDialog(
										null,
										e1.getCause() + "\n"
												+ e1.getStackTrace(),
										"Debug-Message",
										JOptionPane.ERROR_MESSAGE);
							}
							task.cancel(true);
						}

					}
				});

				btnZurck.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						// check if loading file or not
						if (isCurrentlyLoading() == true) {
							int choice = JOptionPane
									.showOptionDialog(
											null,
											"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) {
								try {
									client.DeleteFtpUser(user.userName);
								} catch (TException e1) {
									// TODO Auto-generated catch block
									e1.printStackTrace();
								}
								task.cancel(true);
								// not loading files, go back one page
								dispose();
								PermissionCreateImage_GUI m = new PermissionCreateImage_GUI();
								m.setVisible(true);

							}// end if choice
						} else {
							dispose();
							PermissionCreateImage_GUI m = new PermissionCreateImage_GUI();
							m.setVisible(true);
						}// end else
					}// end action
				});
				btnZurck.setActionCommand("Cancel");
				buttonPane.add(btnZurck);
				finishButton.setActionCommand("Cancel");
				buttonPane.add(finishButton);
			}
		}

		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(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);
		setVisible(true);

	}

	private void buttonUploadActionPerformed(ActionEvent event) {

		progressBar.setValue(0);
		btnUploadStarten.setEnabled(false); // verhindert einen weiteren klick
		btnUploadStarten.setText("Bitte warten");

		try {
			System.out.println("Getting FTP User");
			user = client.getFtpUser();
			System.out.println("FTP name: " + user.userName);
			System.out.println("FTP path: " + user.path);
			System.out.println("FTP pass: " + user.password);
		} catch (TException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			JOptionPane.showMessageDialog(null,
					e.getCause() + "\n" + e.getStackTrace(), "Debug-Message",
					JOptionPane.ERROR_MESSAGE);
		}
		DateFormat formatter = new SimpleDateFormat("yyyMMddhhmmss");

		System.out.println("Setting new Name: " + formatter.format(new Date())
				+ "_" + person.verantwortlicher.getHochschule() + "_"
				+ person.verantwortlicher.getUsername() + "_"
				+ Image.image.getImagename() + ".vmdk");
		Image.image.setNewName(formatter.format(new Date()) + "_"
				+ person.verantwortlicher.getHochschule() + "_"
				+ person.verantwortlicher.getUsername() + "_"
				+ Image.image.getImagename() + ".vmdk");
		System.out.println("Uploading to host: " + host);

		task = new UploadTask(host, port, user.userName, user.password,
				user.path + "temp/", uploadFile);

		task.addPropertyChangeListener(this);
		task.execute();
		taskrun = true;

	}

	public void propertyChange(PropertyChangeEvent arg0) {
		progress = 0;
		if ("progress" == arg0.getPropertyName()) {
			progress = (Integer) arg0.getNewValue();
			progressBar.setValue(progress);

		}

		// Fertigstellen erlauben wenn upload abgeschlossen
		if (isCurrentlyLoading() == false) {
			// isCurrentlyLoading();
			finishButton.setEnabled(true);
		} else {
			finishButton.setEnabled(false);
		}

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

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

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

			labelZeit
					.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();
			labelfilesize.setText((filesize / 1024 / 1024) + " MB");

		}

	}

	public boolean writeData() {

		try {

			client.writeVLdata(Image.image.getImagename(),
					Image.image.getDesc(),
					person.verantwortlicher.getUsername(),
					person.verantwortlicher.getVorname(),
					person.verantwortlicher.getName(),
					person.verantwortlicher.getHochschule(),
					person.verantwortlicher.getEMail(),
					person.verantwortlicher.getTel(),
					person.verantwortlicher.getFakultaet(),
					Image.image.isLicensed(), Image.image.isInternet(),
					Image.image.getRam(), Image.image.getCpu(), "temp/"
							+ Image.image.getNewName(),
					Image.image.isVorlage(), Image.image.getFilesize(),
					Image.image.getShareMode(), Image.image.getOS());

			client.startFileCopy(Image.image.getNewName());

			client.writeImageRights(Image.image.getImagename(),
					person.verantwortlicher.getUsername(),
					person.verantwortlicher.getName(),
					person.verantwortlicher.getVorname(),
					person.verantwortlicher.getEMail(),
					person.verantwortlicher.getHochschule(),
					person.verantwortlicher.getRole());
		} catch (TException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			JOptionPane.showMessageDialog(null,
					e.getCause() + "\n" + e.getStackTrace(), "Debug-Message",
					JOptionPane.ERROR_MESSAGE);
			return false;
		}
		return true;

	}// end writeData()

	public boolean isCurrentlyLoading() {
		isCurrentlyLoading = false;

		if (labelverbleibend.getText().equals("0 MB")
				|| labelverbleibend.getText().equals("0")) {
			isCurrentlyLoading = false;
		} else {
			isCurrentlyLoading = true;
		}

		return isCurrentlyLoading;
	}// end isCurrentlyLoading()

}// end class