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 = "
" + "Hier können Sie Images herunterladen.
" + "Klicken Sie anschließend auf \"Zurück\", um zu Ihrer vorherigen Auswahl zurückzugelangen.
" + "
"; /** * 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( "Anleitung zum Erstellen einer virtuellen Maschine herunterladen"); 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