package gui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.SystemColor;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
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.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.person;
import org.apache.thrift.TException;
import server.Server.Client;
import thrift.ThriftConnection;
//import util.XMLCreator;
import ftp.UploadTask;
@SuppressWarnings("serial")
public class FTPUploader_GUI extends JFrame implements PropertyChangeListener {
@SuppressWarnings("unused")
private JPanel contentPane;
private final JPanel contentPanel = new JPanel();
JLabel lblNewLabel;
JProgressBar progressBar;
String host = "141.79.128.121";
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;
long filesize;
double speed;
long bytesread;
boolean taskrun = false;
ThriftConnection thrift = new ThriftConnection();
Client client = thrift.getThriftConnection();
JButton finishButton = new JButton("Fertigstellen");
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
FTPUploader_GUI frame = new FTPUploader_GUI();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public FTPUploader_GUI() {
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent arg0) {
if (taskrun == true) {
try {
client.DeleteFtpUser(user.userName);
} catch (TException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
task.cancel(true);
}
}
});
setResizable(false);
// setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException
| IllegalAccessException | UnsupportedLookAndFeelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// filename=name;
setBackground(Color.WHITE);
setTitle("Dozentenmodul *Prototyp*");
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int top = (screenSize.height - 722) / 2;
int left = (screenSize.width - 603) / 2;
setBounds(left, top, 603, 722);
// setBounds(100, 100, 603, 250);
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\u00E4hlen");
btnSpeicherortAuswhlen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
fc.showOpenDialog(getParent());
File file = fc.getSelectedFile();
//check if a file is selected and exists
if (file != null) {
System.out.println("File to upload exists");
uploadFile = file;
filename = uploadFile.getName();
lblNewLabel.setText(file.getAbsolutePath());
} else {
System.out.println("No file selected");
lblNewLabel.setText("");
}//end if
}
});
btnSpeicherortAuswhlen.setBounds(102, 124, 173, 23);
btnSpeicherortAuswhlen.setVerticalAlignment(SwingConstants.TOP);
contentPanel.add(btnSpeicherortAuswhlen);
}
lblNewLabel = new JLabel("");
lblNewLabel.setHorizontalAlignment(SwingConstants.LEFT);
lblNewLabel.setBounds(285, 124, 302, 23);
contentPanel.add(lblNewLabel);
JButton btnUploadStarten = new JButton("Upload auf Server starten");
btnUploadStarten.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
buttonUploadActionPerformed(arg0);
}
});
btnUploadStarten.setBounds(102, 168, 173, 23);
contentPanel.add(btnUploadStarten);
progressBar = new JProgressBar(0, 100);
progressBar.setStringPainted(true);
progressBar.setBounds(102, 202, 485, 30);
contentPanel.add(progressBar);
JLabel label = new JLabel("Downloadgeschwindigkeit:");
label.setBounds(102, 243, 141, 14);
contentPanel.add(label);
JLabel label_1 = new JLabel("Fertig:");
label_1.setBounds(102, 293, 46, 14);
contentPanel.add(label_1);
labelfertig = new JLabel("0");
labelfertig.setHorizontalAlignment(SwingConstants.LEFT);
labelfertig.setBounds(183, 293, 108, 14);
contentPanel.add(labelfertig);
UpSpeed = new JLabel("0");
UpSpeed.setHorizontalAlignment(SwingConstants.LEFT);
UpSpeed.setBounds(374, 243, 117, 14);
contentPanel.add(UpSpeed);
JLabel label_4 = new JLabel("von:");
label_4.setBounds(318, 293, 46, 14);
contentPanel.add(label_4);
labelfilesize = new JLabel("0");
labelfilesize.setHorizontalAlignment(SwingConstants.LEFT);
labelfilesize.setBounds(374, 293, 117, 14);
contentPanel.add(labelfilesize);
JLabel label_6 = new JLabel("Verbleibend:");
label_6.setBounds(102, 318, 71, 14);
contentPanel.add(label_6);
JLabel label_7 = new JLabel("Gesch\u00E4tzte Verbleibende Zeit:");
label_7.setBounds(102, 268, 150, 14);
contentPanel.add(label_7);
labelZeit = new JLabel("0");
labelZeit.setHorizontalAlignment(SwingConstants.LEFT);
labelZeit.setBounds(374, 268, 117, 14);
contentPanel.add(labelZeit);
labelverbleibend = new JLabel("0");
labelverbleibend.setHorizontalAlignment(SwingConstants.LEFT);
labelverbleibend.setBounds(183, 318, 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\u00FChre 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\u00FC");
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("VL-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/Bearbeiten");
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);
JButton btnCopyFileTo = new JButton("Copy File to Prod");
btnCopyFileTo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
System.out.println("Copying file to "+ user.path + "/" + uploadFile.getName());
client.startFileCopy(user.path + "/" + uploadFile.getName());
} catch (TException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
btnCopyFileTo.setBounds(102, 343, 173, 23);
contentPanel.add(btnCopyFileTo);
JLabel lblShritt = new JLabel("Schritt 1:");
lblShritt.setBounds(24, 128, 57, 14);
contentPanel.add(lblShritt);
JLabel lblSchritt = new JLabel("Schritt 2:");
lblSchritt.setBounds(24, 172, 57, 14);
contentPanel.add(lblSchritt);
JLabel lblSchritt_1 = new JLabel("Schritt 3:");
lblSchritt_1.setBounds(20, 391, 57, 14);
contentPanel.add(lblSchritt_1);
JLabel lblKlickenSieAuf = new JLabel(
"Klicken Sie auf \"Fertigstellen\".");
lblKlickenSieAuf.setBounds(98, 391, 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);
{
// Button for starting upload
// JButton finishButton = new JButton("Fertigstellen");
finishButton.setEnabled(false);
finishButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
writeData();
dispose();
MainMenue_GUI m = new MainMenue_GUI();
m.setVisible(true);
if (taskrun == true) {
try {
client.DeleteFtpUser(user.userName);
thrift.closeThriftConnection();
} catch (TException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
task.cancel(true);
}
}
});
// Button for going back to Main Menu
JButton cancelButton = new JButton("Hauptmen\u00FC");
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
dispose();
MainMenue_GUI m = new MainMenue_GUI();
m.setVisible(true);
}
});
JButton btnZurck = new JButton("Zur\u00FCck");
btnZurck.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
EingabeImageTechnisch_GUI m = new EingabeImageTechnisch_GUI();
m.setVisible(true);
}
});
btnZurck.setActionCommand("Cancel");
buttonPane.add(btnZurck);
cancelButton.setActionCommand("Cancel");
buttonPane.add(cancelButton);
finishButton.setActionCommand("Cancel");
buttonPane.add(finishButton);
}
}
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu mnHillfe = new JMenu("Hillfe");
menuBar.add(mnHillfe);
setVisible(true);
}
private void buttonUploadActionPerformed(ActionEvent event) {
// File (or directory) with old name
// File file = new File(lblNewLabel.getText());
// File (or directory) with new name
// System.out.println(file.getAbsolutePath().substring(0,file.getAbsolutePath().lastIndexOf("\\"))+"\\"+vm.vl.getLaborname()+".vmdk");
// File file2 = new
// File(file.getAbsoluteFile()+"\\"+vm.vl.getLaborname()+".vmdk");
// Rename file (or directory)
// boolean success = file.renameTo(file2);
// if (!success) {
// File was not successfully renamed
// System.out.println("Not OK");
// }
// else
// {
// System.out.println("OK");
// }
progressBar.setValue(0);
try {
user = client.getFtpUser();
System.out.println("name" + user.userName);
System.out.println("path" + user.path);
System.out.println("pass" + user.password);
} catch (TException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DateFormat formatter = new SimpleDateFormat("yyyMMddhhmmss");
System.out.println(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");
task = new UploadTask(host, port, user.userName, user.password,
user.path, uploadFile);
task.addPropertyChangeListener(this);
task.execute();
taskrun = true;
// createXML();
// TransferToSatellit();
}
public void propertyChange(PropertyChangeEvent arg0) {
int progress = 0;
if ("progress" == arg0.getPropertyName()) {
progress = (Integer) arg0.getNewValue();
progressBar.setValue(progress);
// Button zum Fertigstellen freischalten, wenn 100% erreicht sind
if (progress == 100) {
finishButton.setEnabled(true);
}
}
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");
// }else
// {
// double MBSpeed=speed/1024;
// downspeed.setText(String.valueOf((MBSpeed)).substring(0,
// String.valueOf(MBSpeed).indexOf(".")));
// }
}
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(),
person.verantwortlicher.getVorname(),
person.verantwortlicher.getName(),
person.verantwortlicher.getHochschule(),
person.verantwortlicher.getEMail(),
person.verantwortlicher.getTel(),
person.verantwortlicher.getFakultät(),
Image.image.isLicensed(), Image.image.isInternet(),
Image.image.getRam(), Image.image.getCpu(),
"/srv/openslx/nfs/temp/" + Image.image.getNewName());
} catch (TException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
return true;
}
}