// Template systeem voor webpagina's.
//    - Stelt een tabel op aan de hand van de opgegeven hoogte en breedte
//    - Maakt automatisch de mappen 'images' en 'includes' aan.
//    - ...

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

// Interface binnenloaden
import be.styleit.H17_paginaUI;

public class H17_Oefening_1 extends JFrame {

	private ObjectOutputStream output;
	private H17_paginaUI userInterface;
	private JButton cmdAanmaken, cmdOpslaan;
	private JTextArea txtResultaat;
	private Font verdana = new Font("Verdana",10,10);
	private JMenuItem nieuwItem, openItem, opslaanItem, opslaanAlsItem, sluitItem, aboutItem, linkItem;
	private File fileName;
	private RandomAccessFile file;
	private File openFile;

	

	public H17_Oefening_1() {
				
		super ("Nieuwe pagina aanmaken");
				
		// Menubar aanmaken
		JMenuBar menu = new JMenuBar();
		setJMenuBar(menu);
		
		// Menu "File"
		JMenu bestandMenu = new JMenu("Bestand");
		bestandMenu.setMnemonic('B');
		bestandMenu.setFont(verdana);
		menu.add(bestandMenu);
		
		nieuwItem = new JMenuItem("Nieuw...");
		bestandMenu.add(nieuwItem);
		nieuwItem.setMnemonic('N');
		nieuwItem.setFont(verdana);
		nieuwItem.addActionListener(
			new ActionListener() {
				public void actionPerformed( ActionEvent e) {
					userInterface.setFieldValues();
					txtResultaat.setText("");
					opslaanItem.setEnabled(false);
					opslaanAlsItem.setEnabled(true);
				}
			}
		);
		
		openItem = new JMenuItem("Openen...");
		bestandMenu.add(openItem);
		openItem.setMnemonic('O');
		openItem.setFont(verdana);
		openItem.addActionListener(
			new ActionListener() {
				public void actionPerformed( ActionEvent e) {
					paginaOpenen();
				}
			}
		);

		
		opslaanItem = new JMenuItem("Opslaan");
		bestandMenu.add(opslaanItem);
		opslaanItem.setMnemonic('p');
		opslaanItem.setFont(verdana);
		opslaanItem.setEnabled(false);
		opslaanItem.addActionListener(
			new ActionListener() {
				public void actionPerformed( ActionEvent e) {
					paginaOpslaan();
				}
			}
		);
		
		opslaanAlsItem = new JMenuItem("Opslaan als...");
		bestandMenu.add(opslaanAlsItem);
		opslaanAlsItem.setMnemonic('l');
		opslaanAlsItem.setFont(verdana);
		opslaanAlsItem.addActionListener(
			new ActionListener() {
				public void actionPerformed( ActionEvent e) {
					paginaOpslaanAls();
				}
			}
		);
		
		JSeparator scheiding1 = new JSeparator();
		bestandMenu.add(scheiding1);
		
		sluitItem = new JMenuItem("Afsluiten");
		bestandMenu.add(sluitItem);
		sluitItem.setMnemonic('A');
		sluitItem.setFont(verdana);
		sluitItem.addActionListener(
			new ActionListener() {
				public void actionPerformed( ActionEvent e) {
					System.exit(0);
				}
			}
		);
		
		// Menu "Help"
		JMenu helpMenu = new JMenu("Help");
		helpMenu.setMnemonic('H');
		helpMenu.setFont(verdana);
		menu.add(helpMenu);

		aboutItem = new JMenuItem("About...");
		helpMenu.add(aboutItem);
		aboutItem.setMnemonic('b');
		aboutItem.setFont(verdana);
		aboutItem.addActionListener(
			new ActionListener() {
				public void actionPerformed( ActionEvent e) {
				boodschap("Template Generator\n\n\nCopyright Keppens Toon","About...",2);
				}
			}
		);
		
		
		userInterface = new H17_paginaUI();
		getContentPane().add(userInterface, BorderLayout.CENTER);
		
		// Knop: Pagina Genereren
		cmdAanmaken = userInterface.getDoTask1Button();
		cmdAanmaken.setText("Pagina genereren..");
		cmdAanmaken.setFont(verdana);
		
		cmdAanmaken.addActionListener(
			new ActionListener() {
				public void actionPerformed(ActionEvent event) {
					paginaGenereren();
				}
			}
		);

		// Knop: Opslaan als..
		cmdOpslaan = userInterface.getDoTask2Button();
		cmdOpslaan.setText("Opslaan als..");
		cmdOpslaan.setEnabled(false);
		cmdOpslaan.setFont(verdana);
		
		cmdOpslaan.addActionListener(
			new ActionListener() {
				public void actionPerformed(ActionEvent event) {
					paginaOpslaanAls();
				}
			}
		);

		// Als het venster gesloten wordt, de toepassing deftig afsluiten.
		addWindowListener(
			new WindowAdapter() {
				public void windowClosing(WindowEvent event) {
					System.exit(0);
				}
			}
		);

		txtResultaat = userInterface.getResultaat();
				
		// Eigenschappen van het venster instellen.
		setSize(700,600);
		setVisible(true);
		
	}

	public void paginaGenereren() {
		
		// Ingevulde velden ophalen.
		String fieldValues[] = userInterface.getFieldValues();
		
		// Inhoud wissen.
		txtResultaat.setText("");
		
		// Aan de hand van de ingevulde velden, de html code samenstellen.
		txtResultaat.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html>\n\t<head>\n\t\t");
		txtResultaat.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n\t\t");
		txtResultaat.append("<title>" + fieldValues[0] + "</title>\n\t\t");
		txtResultaat.append("<meta name=\"keywords\" lang=\"nl\" content=\"" + fieldValues[1] + "\">\n\t\t");
		txtResultaat.append("<meta name=\"description\" lang=\"nl\" content=\"" + fieldValues[2] + "\">\n\t\t");
		txtResultaat.append("<link href=\"includes/" + fieldValues[3] + ".css\" type=\"text/css\" rel=\"stylesheet\">\n\t");
		txtResultaat.append("</head>\n\n\t<body bgcolor=\"#" + fieldValues[4] + "\" leftmargin=\"0\" marginheight=\"0\" marginwidth=\"0\" topmargin=\"0\" style=\"height: 100%; width: 100%\">\n\n\t\t");
		txtResultaat.append("<!-- " + fieldValues[1] + " -->\n\t\t<!-- " + fieldValues[1] + " -->\n\t\t");
		txtResultaat.append("<table style=\"width: 100%; height: 100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n\t\t\t<tr>\n\t\t\t\t<td valign=\"middle\" align=\"center\">\n\t\t\t\t\t<table width=\"" + fieldValues[6] + "\" height=\"" + fieldValues[5] + "\" style=\"width: " + fieldValues[6] + "; height: " + fieldValues[5] + "\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>\n\t\t\t\t\t\t\t\t");
		txtResultaat.append("\n\n\t\t\t\t\t\t\t\t<!-- Hier komt de content -->\n\n\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</table>\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</table>\n\t</body>\n\n</html>");
		
		//Ze moeten terug kunnen opslaan
		if (fileName != null)
			opslaanItem.setEnabled(true);
		
	}
	
	public void boodschap(String bericht, String titel, int type) {
		
		switch(type) {
			case 1:
				JOptionPane.showMessageDialog(this, bericht, titel, JOptionPane.ERROR_MESSAGE);
				break;
			case 2:
				JOptionPane.showMessageDialog(this, bericht, titel, JOptionPane.INFORMATION_MESSAGE);
				break;
			default:
				JOptionPane.showMessageDialog(this, bericht, titel, JOptionPane.INFORMATION_MESSAGE);
		}
		
	}


	public void paginaOpenen() {
		
		JFileChooser fileChooser = new JFileChooser();
		fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
		
		int result = fileChooser.showOpenDialog(null);
		
		if (result == JFileChooser.CANCEL_OPTION)
			return;
		
		fileName = fileChooser.getSelectedFile();
		//openFile = new File(fileName.getAbsolutePath());
		
		
		// Inhoud van het bestand weergeven.
		if (fileName == null || fileName.getName().equals(""))
			boodschap("Ongeldige Bestandsnaam","Error",1);
		else {
			try {
				
				txtResultaat.setText("");
				
				openFile = new File(fileName.getAbsolutePath());
				
				BufferedReader input = new BufferedReader( new FileReader(openFile));
				StringBuffer buffer = new StringBuffer();
				String text;

				while((text = input.readLine()) != null) 
						buffer.append(text + "\n");
					
				txtResultaat.append(buffer.toString());
			}
			catch (IOException ioException) {
				boodschap("Fout bij het openen of schrijven naar bestand!","Error!",1);
			}
		}
		
		
	}
	
	public void paginaOpslaan() {
		
		if (fileName == null || fileName.getName().equals(""))
			boodschap("Ongeldige bestandsnaam!","Error!",1);
		else {
			
			try {
				
				file = new RandomAccessFile(fileName, "rw");
				
				// Inhoud van het tekstveld wegschrijven naar het gekozen bestand.
				file.writeBytes(txtResultaat.getText());
				
				file.close();
				
				boodschap("Opslaan voltooid.","Status",1);
				
			}
			catch (IOException ioException) {
				boodschap("Fout bij het openen of schrijven naar bestand!","Error!",1);
			}
		}
		
	}
	
	public void paginaOpslaanAls() {
		
		// Bestand selecteren.
		JFileChooser fileChooser = new JFileChooser();
		fileChooser.setFileSelectionMode (JFileChooser.FILES_ONLY);
		
		int result = fileChooser.showSaveDialog(this);
		
		// Als men op cancel duwt, teruggaan.
		if (result == JFileChooser.CANCEL_OPTION)
			return;
		
		// File Object aanmaken
		fileName = fileChooser.getSelectedFile();
		
		// Als ze niet gewoon op 'ok' geklikt hebben of niets ingevult hebben,
		// doorgaan, anders: gepaste foutmelding
		if (fileName == null || fileName.getName().equals(""))
			boodschap("Opslaan voltooid.","Status",1);
		else {
			
			try {
				
				// Inhoud van het tekstveld wegschrijven naar het gekozen bestand.
				file = new RandomAccessFile(fileName, "rw");
		
				file.writeBytes(txtResultaat.getText());
				
				file.close();
				
				boodschap("Het bestand " + fileName + " werd aangemaakt.","Status",2);
				
				// Pagina moet opnieuw gegenereerd worden voor ze kunnen opslaan.
				cmdOpslaan.setEnabled(false);
				opslaanItem.setEnabled(true);
				opslaanAlsItem.setEnabled(false);

				
			}
			catch (IOException ioException) {
				boodschap("Fout bij het openen of schrijven naar bestand!","Error!",1);
			}
		}
		
	}

	public static void main( String args[]) {
		new H17_Oefening_1();
	}

}
