package paketMySQLDBSichern;












import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;

import paketMySQLDBSichern.DatenbankZugriff;
import paketMySQLDBSichern.Datenbank;

import java.awt.List;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Font;
import javax.swing.JLabel;

public class HauptfensterMySQLDBSichern extends JFrame
{

	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private int mOK;
	private Datenbank meineDatenbank;
	private DatenbankZugriff meinZugriff;
	private List lfListe;
	private JButton btSichern;
	private JButton btEnde;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args)
	{
		EventQueue.invokeLater(new Runnable()
		{
			public void run()
			{
				try
				{
					HauptfensterMySQLDBSichern frame = new HauptfensterMySQLDBSichern();
					frame.setVisible(true);
				}
				catch (Exception e)
				{
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public HauptfensterMySQLDBSichern()
	{
		setTitle("mySQL Datenbank sichern");
		addWindowListener(new WindowAdapter()
		{
			@Override
			public void windowOpened(WindowEvent e)
			{
				anzeigen();
				meinZugriff.schliesseDatenbank();
			}
		});
		meineDatenbank = new Datenbank();
		meinZugriff = new DatenbankZugriff(meineDatenbank);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 427, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		lfListe = new List();
		lfListe.setBounds(10, 32, 296, 220);
		contentPane.add(lfListe);

		btSichern = new JButton("Sichern");
		btSichern.setFont(new Font("Tahoma", Font.BOLD, 12));
		btSichern.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{

				String text = "\"" + System.getProperty("user.dir")
						+ "\\mysqldump.exe" + "\"" + " -u root "
						+ lfListe.getSelectedItem() + " --databases > " + "\""
						+ System.getProperty("user.dir").substring(0,
								System.getProperty("user.dir").length()
										- "Programme\\xampp\\mysql\bin\\"
												.length())
						+ "EigeneDateien\\mySQLDatensicherung\\"
						+ lfListe.getSelectedItem() + ".sql" + "\"";
				// String text = "notepad.exe";
				String dateiName = "mySQLDumpStart.bat";
				FileOutputStream schreibeStrom = null;
				try
				{
					schreibeStrom = new FileOutputStream(dateiName);
				}
				catch (FileNotFoundException e2)
				{
					// TODO Auto-generated catch block
					e2.printStackTrace();
				}
				for (int i = 0; i < text.length(); i++)
				{
					try
					{
						schreibeStrom.write((byte) text.charAt(i));
					}
					catch (IOException e1)
					{
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
				try
				{
					schreibeStrom.close();
				}
				catch (IOException e1)
				{
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

				try
				{
					if (meinZugriff.oeffneDatenbank() == 2)
					{
						JOptionPane.showMessageDialog(null,
								"Fehler in mySQL-Verbindung");
					}
					else
					{
						Runtime.getRuntime().exec("mySQLDumpStart.bat");

						try
						{
							Thread.sleep(5000);
						}
						catch (InterruptedException e1)
						{
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}

						File file = new File(
								System.getProperty("user.dir").substring(0,
										System.getProperty("user.dir").length()
												- "Programme\\xampp\\mysql\bin\\"
														.length())
										+ "EigeneDateien\\mySQLDatensicherung\\"
										+ lfListe.getSelectedItem() + ".sql");
						long dateigroesse = file.length();

						JOptionPane.showMessageDialog(null,
								"Die Datensicherungsdatei \n"
										+ lfListe.getSelectedItem()
										+ ".sql \n mit " + dateigroesse
										+ " Byte \n wurde im Ordner \n"
										+ System.getProperty("user.dir")
												.substring(0,
														System.getProperty(
																"user.dir")
																.length()
																- "Programme\\xampp\\mysql\bin\\"
																		.length())
										+ "EigeneDateien\\mySQLDatensicherung\\"
										+ "\n gespeichert !",
								"Sicherung erfolgreich durchgeführt", 1);
					}
				}
				catch (IOException e1)
				{
					// TODO Auto-generated catch block

					e1.printStackTrace();
				}

			}
		});
		btSichern.setBounds(312, 34, 89, 23);
		contentPane.add(btSichern);

		btEnde = new JButton("Beenden");
		btEnde.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
		btEnde.setFont(new Font("Tahoma", Font.BOLD, 12));
		btEnde.setBounds(312, 228, 89, 23);
		contentPane.add(btEnde);

		JLabel lblNewLabel = new JLabel(
				"Bitte w\u00E4hlen Sie die zu sichernde Datenbank aus:");
		lblNewLabel.setBounds(10, 10, 296, 14);
		contentPane.add(lblNewLabel);
	}

	public void anzeigen()
	{

		mOK = meinZugriff.sucheDatenbank();
		switch (mOK)
		{
		case 0:
			lfListe.removeAll();

			lfListe.add(meineDatenbank.getDatenbankname());

			while (meinZugriff.naechsteDatenbank() == true)
			{
				lfListe.add(meineDatenbank.getDatenbankname());
			}

			break;
		case 1:
			JOptionPane.showMessageDialog(null,
					"Es gibt derzeit keine Datenbank!");

			break;
		case 2:
			JOptionPane.showMessageDialog(null, "Fehler in mySQL-Verbindung");

			break;
		}
	}
}
