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.generated.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.generated.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