/*
 * Created on Jul 10, 2004
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package zemplen;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.action.*;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.*;
import org.eclipse.ui.dialogs.ListDialog;
import org.hibernate.Query;
import org.hibernate.Session;

import static hibergui.HiberGUI.*;
import hibergui.FormDialog;
import hibergui.Form;
import static hibergui.Util.ensure;
import hibergui.hibernate.SessionManager;

import zemplen.model.Kategoria;
import zemplen.model.Nevezes;
import zemplen.model.NevezesStatusz;
import zemplen.model.Szemely;
import zemplen.model.Tav;
import zemplen.model.Verseny;
import zemplen.ui.NevezesForm;
import zemplen.ui.SzemelyForm;
import zemplen.ui.VersenyForm;

/**
 * @author espakm
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class MainWindow extends ApplicationWindow {
    
	private String title;
	
    public MainWindow() {
        super(null);
        
        addMenuBar();
        addToolBar(SWT.FLAT | SWT.WRAP);
        addStatusLine();        
    }
    
    protected Control createContents(Composite parent) {
        getShell().setText(title);
        
        return super.createContents(parent);
    }
    
    protected MenuManager createMenuManager() {
        MenuManager menubar = new MenuManager("");
        
        MenuManager fileMenu = new MenuManager("&Fájl");
//        Separator separator = new Separator();
        fileMenu.add(new Action("&Kilépés@Ctrl+Q") {
			@Override
			public void run() {
				MainWindow.this.close();
			}
		});
        MenuManager versenyek = new MenuManager("&Versenyek");
/*        MenuManager versenyadatok = new MenuManager("&Versenyek adatai");
        versenyek.add(versenyadatok);*/
        versenyek.add(new Action(){
            { setText("&Versenyadatok"); }
			@Override
            public void run(){
                FormDialog<Verseny> dlgVerseny = new FormDialog<Verseny>(getShell()) {
        			@Override
                    protected Form<Verseny> createForm(Composite cptParent) {
                        return new VersenyForm(cptParent, NONE);
                    }
                }; 
                dlgVerseny.create();
//                dlgVerseny.getShell().setSize(800, 600);
                dlgVerseny.setBlockOnOpen(true);
                dlgVerseny.open();
            }
        });
        
        MenuManager versenyzok = new MenuManager("V&ersenyzők");
        versenyzok.add(new Action(){
            {
                setText("&Személyek");
            }
			@Override
            public void run(){
                FormDialog<Szemely> dlg = new FormDialog<Szemely>(getShell()) {
        			@Override
                    protected Form<Szemely> createForm(Composite cptParent) {
                        return new SzemelyForm(cptParent, NONE);
                    }
                };
                dlg.create();
//                dlg.getShell().setSize(800, 900);
                dlg.setBlockOnOpen(true);
                dlg.open();
            }
        });
        versenyzok.add(new Action(){
            {
                setText("&Nevezések");
            }
			@Override
            public void run(){
                ListDialog versenyValaszto = new VersenyValasztoDialog(getShell());
                Session session = SessionManager.instance().getSession();
                versenyValaszto.setInput(session.createQuery("from Verseny").list());
                versenyValaszto.open();
                if (versenyValaszto.getReturnCode() == Window.OK) {
                	final Object[] result = versenyValaszto.getResult();
                	FormDialog<Nevezes> dlg = new FormDialog<Nevezes>(getShell()) {
                		@Override
                		protected Form<Nevezes> createForm(Composite cptParent) {
                			NevezesForm f = new NevezesForm(cptParent, NONE);
                			f.eVerseny.set((Verseny)result[0]);
            				f.eVerseny.fix(true);
                			return f;
                		}
                	};
                	dlg.create();
//                	dlg.getShell().setSize(1000, 900);
                	dlg.setBlockOnOpen(true);
                	dlg.open();
                }
            }
        });
        
        MenuManager exportMenu = new MenuManager("&Exportálás");
        exportMenu.add(new Action(){
            { setText("&Nevezések szinkronizálása"); }
			@SuppressWarnings({ "unchecked", "deprecation" })
			@Override
            public void run(){
				try {
					// URL of CGI-Bin script.
					URL url = new URL("http://www.zemplenmaraton.hu/nomination_sync.php");
					// URL connection channel.
					URLConnection urlConn = url.openConnection();
					// Let the run-time system (RTS) know that we want input.
					urlConn.setDoInput (true);
					// Let the RTS know that we want to do output.
					urlConn.setDoOutput (true);
					// No caching, we want the real thing.
					urlConn.setUseCaches (false);
					// Specify the content type.
					urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
					// Send POST output.
					DataOutputStream printout = new DataOutputStream (urlConn.getOutputStream ());

					StringBuilder command = new StringBuilder();
					command.append("DELETE FROM NevezesiLap WHERE felvive = 'igen'");
					
			    	Query q = SessionManager.instance().getSession().createQuery(
	    			    "from Nevezes n where n.verseny.idopont = '2007-07-22'");

			    	for (Nevezes nevezes: (List<Nevezes>)q.list()) {
			    		Szemely szemely = nevezes.getSzemely();
			    		Tav t = nevezes.getTav();
			    		command.append(
			    				"|INSERT INTO NevezesiLap (nev, becenev, orszag, iranyitoszam, " +
			    				"telepules, utca, szuletesiDatum, egyesulet, email, telefonszam, " +
			    				"nem, tav, megjegyzes, nevezesiDatum, statusz, nevezesiHely, felvive) " +
			    				"VALUES ('");
			    		command.append(ensure(szemely.getNev()));
			    		command.append("', '");
			    		command.append(ensure(szemely.getBecenev()));
			    		command.append("', '");
			    		command.append(ensure(szemely.getLakcimOrszag()));
			    		command.append("', '");
			    		command.append(ensure(szemely.getLakcimIranyitoszam()));
			    		command.append("', '");
			    		command.append(ensure(szemely.getLakcimTelepules()));
			    		command.append("', '");
			    		command.append(ensure(szemely.getLakcimUtca()));
			    		command.append("', '");
			    		Date d = szemely.getSzuletesiDatum();
			    		command.append(d.getYear()+1900).append('-').append(d.getMonth()+1).append('-').append(d.getDate());
			    		command.append("', '");
			    		command.append(szemely.getEgyesulet()==null? "": ensure(szemely.getEgyesulet().getNev()));
			    		command.append("', '");
			    		command.append(ensure(szemely.getEmail()));
			    		command.append("', '");
			    		command.append(ensure(szemely.getTelefonszam()));
			    		command.append("', '");
			    		command.append(szemely.getNem());
			    		command.append("', '");
			    		command.append(t == null? "": ensure(t.getElnevezes()));
			    		command.append("', '");
			    		command.append(ensure(nevezes.getMegjegyzes()));
			    		command.append("', '");
			    		d = nevezes.getNevezesiDatum();
			    		command.append(d.getYear()+1900).append('-').append(d.getMonth()+1).append('-').append(d.getDate());
			    		command.append("', '");
			    		command.append(nevezes.getStatusz()==null? "": ensure(nevezes.getStatusz().getElnevezes()));
			    		command.append("', '");
			    		command.append(nevezes.getNevezesiHely()==null? "": ensure(nevezes.getNevezesiHely().getElnevezes()));
			    		command.append("', 'igen')");
			    	}
			    	
					String content = URLEncoder.encode("command", "UTF-8") + "=" + URLEncoder.encode(command.toString(), "UTF-8");
		
					printout.writeBytes (content);
					printout.flush ();
					printout.close ();

					// Get response data.
					BufferedReader input = new BufferedReader(new InputStreamReader(urlConn.getInputStream ()));
					String str;
					while ((str = input.readLine()) != null)
						System.out.println (str);
					input.close ();
				}
				catch (MalformedURLException exc) {
					System.err.println("MalformedURLException: " + exc);
				}
				catch (IOException exc) {
					System.err.println("IOException: " + exc.getMessage());
				}
			}
        });
        exportMenu.add(new Action(){
            { setText("&Eredmények szinkronizálása"); }
			@SuppressWarnings("unchecked")
			@Override
            public void run(){
				try {
					// URL of CGI-Bin script.
					URL url = new URL("http://www.zemplenmaraton.hu/result_sync.php");
					// URL connection channel.
					URLConnection urlConn = url.openConnection();
					// Let the run-time system (RTS) know that we want input.
					urlConn.setDoInput (true);
					// Let the RTS know that we want to do output.
					urlConn.setDoOutput (true);
					// No caching, we want the real thing.
					urlConn.setUseCaches (false);
					// Specify the content type.
					urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
					// Send POST output.
					DataOutputStream printout = new DataOutputStream (urlConn.getOutputStream ());
//					DataOutputStream printout = new DataOutputStream (new FileOutputStream("ered.txt"));

					StringBuilder command = new StringBuilder();
					command.append("DELETE FROM Eredmeny");
					
			    	Query q = SessionManager.instance().getSession().createQuery(
	    			    "from Nevezes n where n.verseny.idopont = '2007-07-22' and rajtszam is not null");

			    	for (Nevezes nevezes: (List<Nevezes>)q.list()) {
			    		Szemely szemely = nevezes.getSzemely();
			    		Tav tav = nevezes.getTav();
			    		Kategoria kategoria = nevezes.getKategoria();
			    		Date celido = nevezes.getCelido();
			    		NevezesStatusz statusz = nevezes.getStatusz();
			    		command.append(
			    				"|INSERT INTO Eredmeny (rajtszam, tav, kategoria, celido, nev, szuletesiDatum, telepules, statusz) VALUES ('");
			    		command.append(nevezes.getRajtszam());
			    		command.append("', '");
			    		command.append(tav.getElnevezes());
			    		command.append("', '");
			    		if (kategoria != null)
			    			command.append(kategoria.getElnevezes());
			    		command.append("', '");
			    		if (celido != null)
			    			command.append(celido);
			    		command.append("', '");
			    		command.append(szemely.getNev());
			    		command.append("', '");
			    		command.append(szemely.getSzuletesiDatum());
			    		command.append("', '");
			    		command.append(szemely.getLakcimTelepules());
			    		command.append("', '");
			    		if (statusz != null)
			    			command.append(statusz.getElnevezes());
			    		command.append("')");
			    	}
			    	
					String content = URLEncoder.encode("command", "UTF-8") + "=" + URLEncoder.encode(command.toString(), "UTF-8");
		
					printout.writeBytes (content);
					printout.flush ();
					printout.close ();

					// Get response data.
					BufferedReader input = new BufferedReader(new InputStreamReader(urlConn.getInputStream ()));
					String str;
					while ((str = input.readLine()) != null)
						System.out.println (str);
					input.close ();
				}
				catch (MalformedURLException exc) {
					System.err.println("MalformedURLException: " + exc);
				}
				catch (IOException exc) {
					System.err.println("IOException: " + exc.getMessage());
				}
			}
        });
        exportMenu.add(new Action(){
            { setText("&Nevezési lapok adatai"); }
			@SuppressWarnings({ "unchecked", "deprecation" })
			@Override
            public void run(){
				try {
					FileDialog dlg = new FileDialog(getShell(), SWT.SAVE);
					String fileToSave = dlg.open();
					if (fileToSave == null)
						return;
					PrintWriter pw = new PrintWriter(new FileWriter(fileToSave));
					pw.println("a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w");
			    	Query q = SessionManager.instance().getSession().createQuery(
	    			"from Nevezes n where n.verseny.idopont='2006-7-23' order by n.tav.elnevezes, sz.nev");
			    	Iterator<Nevezes> nevezesek = (Iterator<Nevezes>) q.iterate();
			    	while (nevezesek.hasNext()) {
			    		Nevezes n = nevezesek.next();
			    		Szemely sz = n.getSzemely();
			    		pw.print(ensure(sz.getNev()));
			    		pw.print(',');
			    		pw.print(ensure(sz.getBecenev()));
			    		pw.print(',');
			    		pw.print(ensure(sz.getLakcimOrszag()));
			    		pw.print(',');
			    		pw.print(ensure(sz.getLakcimTelepules()));
			    		pw.print(',');
			    		pw.print(ensure(sz.getLakcimUtca()));
			    		pw.print(',');
			    		pw.print(ensure(sz.getLakcimIranyitoszam()));
			    		pw.print(',');
			    		Date szul = sz.getSzuletesiDatum();
			    		pw.print(szul.getYear());
			    		pw.print(',');
			    		pw.print(szul.getMonth()+1);
			    		pw.print(',');
			    		pw.print(szul.getDate());
			    		pw.print(',');
			    		pw.print(ensure(sz.getTelefonszam()));
			    		pw.print(',');
			    		pw.print(ensure(sz.getEmail()));
			    		pw.print(',');
			    		pw.print(sz.getEgyesulet()==null? " ": sz.getEgyesulet().getNev());
			    		pw.print(',');
			    		pw.print(sz.getNem()=='F'? 'X': ' ');
			    		pw.print(',');
			    		pw.print(sz.getNem()=='N'? 'X': ' ');
			    		pw.print(',');
			    		Tav t = n.getTav();
			    		pw.print(t.getElnevezes().equals("rövidtáv")? 'X': ' ');
			    		pw.print(',');
			    		pw.print(t.getElnevezes().equals("középtáv")? 'X': ' ');
			    		pw.print(',');
			    		pw.print(t.getElnevezes().equals("hosszútáv")? 'X': ' ');
			    		pw.print(',');
//			    		pw.print(n.getMegjegyzes() == null? "": n.getMegjegyzes());
//			    		pw.print(',');
			    		pw.print(n.getNevezesiDatum()==null?"":n.getNevezesiDatum());
			    		pw.print(',');
			    		pw.print(n.getStatusz()==null? " ": n.getStatusz().getElnevezes());
			    		pw.print(',');
			    		pw.print(n.getNevezesiHely()==null? " ": n.getNevezesiHely().getElnevezes());
			    		pw.print(',');
			    		pw.print(n.getFizetesiMod()==null? " ": n.getFizetesiMod().getElnevezes());
			    		pw.print(',');
			    		pw.print(n.getRajtszam()==null? " ": n.getRajtszam());
			    		if (!nevezesek.hasNext())
			    			break;
			    		n = nevezesek.next();
			    		sz = n.getSzemely();
			    		pw.print(',');
			    		pw.print(ensure(sz.getNev()));
			    		pw.print(',');
			    		pw.print(ensure(sz.getBecenev()));
			    		pw.print(',');
			    		pw.print(ensure(sz.getLakcimOrszag()));
			    		pw.print(',');
			    		pw.print(ensure(sz.getLakcimTelepules()));
			    		pw.print(',');
			    		pw.print(ensure(sz.getLakcimUtca()));
			    		pw.print(',');
			    		pw.print(ensure(sz.getLakcimIranyitoszam()));
			    		pw.print(',');
			    		szul = sz.getSzuletesiDatum();
			    		pw.print(szul.getYear());
			    		pw.print(',');
			    		pw.print(szul.getMonth()+1);
			    		pw.print(',');
			    		pw.print(szul.getDate());
			    		pw.print(',');
			    		pw.print(ensure(sz.getTelefonszam()));
			    		pw.print(',');
			    		pw.print(ensure(sz.getEmail()));
			    		pw.print(',');
			    		pw.print(sz.getEgyesulet()==null? " ": sz.getEgyesulet().getNev());
			    		pw.print(',');
			    		pw.print(sz.getNem()=='F'? 'X': ' ');
			    		pw.print(',');
			    		pw.print(sz.getNem()=='N'? 'X': ' ');
			    		pw.print(',');
			    		t = n.getTav();
			    		pw.print(t.getElnevezes().equals("rövidtáv")? 'X': ' ');
			    		pw.print(',');
			    		pw.print(t.getElnevezes().equals("középtáv")? 'X': ' ');
			    		pw.print(',');
			    		pw.print(t.getElnevezes().equals("hosszútáv")? 'X': ' ');
			    		pw.print(',');
//			    		pw.print(n.getMegjegyzes() == null? "": n.getMegjegyzes());
//			    		pw.print(',');
			    		pw.print(n.getNevezesiDatum()==null?"":n.getNevezesiDatum());
			    		pw.print(',');
			    		pw.print(n.getStatusz()==null? " ": n.getStatusz().getElnevezes());
			    		pw.print(',');
			    		pw.print(n.getNevezesiHely()==null? " ": n.getNevezesiHely().getElnevezes());
			    		pw.print(',');
			    		pw.print(n.getFizetesiMod()==null? " ": n.getFizetesiMod().getElnevezes());
			    		pw.print(',');
			    		pw.println(n.getRajtszam()==null? " ": n.getRajtszam());
			    	}
			    	pw.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
        });
        exportMenu.add(new Action(){
            { setText("&Rajtszámok adatai"); }
			@SuppressWarnings("unchecked")
			@Override
            public void run(){
				try {
					FileDialog dlg = new FileDialog(getShell(), SWT.SAVE);
					String fileToSave = dlg.open();
					if (fileToSave == null)
						return;
					PrintWriter pw = new PrintWriter(new FileWriter(fileToSave));
			    	Query q = SessionManager.instance().getSession().createQuery(
	    			"from Nevezes n where n.verseny.idopont='2006-7-23' and n.tav.elnevezes='rövidtáv'");
			    	pw.println("RÖVIDTÁV:");
			    	for (Nevezes n: (List<Nevezes>) q.list()) {
			    		pw.print(n.getRajtszam());
			    		String b = n.getSzemely().getBecenev();
			    		if (b != null) {
			    			pw.print(',');
			    			pw.print(b);
			    		}
			    		pw.println();
			    	}
			    	pw.println("--------------------------------------------------");
			    	q = SessionManager.instance().getSession().createQuery(
	    			"from Nevezes n where n.verseny.idopont='2006-7-23' and n.tav.elnevezes='középtáv'");
			    	pw.println("KÖZÉPTÁV:");
			    	for (Nevezes n: (List<Nevezes>) q.list()) {
			    		pw.print(n.getRajtszam());
			    		String b = n.getSzemely().getBecenev();
			    		if (b != null) {
			    			pw.print(',');
			    			pw.print(b);
			    		}
			    		pw.println();
			    	}
			    	pw.println("--------------------------------------------------");
			    	q = SessionManager.instance().getSession().createQuery(
	    			"from Nevezes n where n.verseny.idopont='2006-7-23' and n.tav.elnevezes='hosszútáv'");
			    	pw.println("HOSSZÚTÁV:");
			    	for (Nevezes n: (List<Nevezes>) q.list()) {
			    		pw.print(n.getRajtszam());
			    		String b = n.getSzemely().getBecenev();
			    		if (b != null) {
			    			pw.print(',');
			    			pw.print(b);
			    		}
			    		pw.println();
			    	}
			    	pw.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
        });
        exportMenu.add(new Action(){
            { setText("&Eredmények"); }
			@SuppressWarnings("unchecked")
			@Override
            public void run(){
				try {
					FileDialog dlg = new FileDialog(getShell(), SWT.SAVE);
					String fileToSave = dlg.open();					
					if (fileToSave == null)
						return;
					PrintWriter pw = new PrintWriter(new FileWriter(fileToSave));
			    	Query q = SessionManager.instance().getSession().createQuery(
	    			"from Nevezes n where n.verseny.idopont='2007-07-22' and n.tav.elnevezes='kismaraton' and n.celido is not null order by n.celido");
			    	pw.println("RÖVIDTÁV ABSZOLÚT:");
			    	pw.println("Absz.hely;Rajtszám;Kategória;Kat.hely;Név;Születési dátum;Település;Célidő");
			    	int hely = 0;
			    	HashMap<Kategoria, Integer> kathely = new HashMap<Kategoria, Integer>();
			    	for (Nevezes n: (List<Nevezes>) q.list()) {
			    		pw.print(++hely);
			    		pw.print(";" + n.getRajtszam());
			    		Kategoria kat = n.getKategoria();
			    		if (kat == null)
			    			pw.print(";---;---");
			    		else {
			    			pw.print(";" + kat.getElnevezes());
			    			Integer khely = kathely.get(kat);
			    			if (khely == null)
			    				khely = 1;
			    			else
			    				++khely;
			    			kathely.put(kat, khely);
			    			pw.print(";" + khely);
			    		}
			    		String nev = n.getSzemely().getNev();
			    		pw.print(";" + nev);
			    		pw.print(";" + n.getSzemely().getSzuletesiDatum());
			    		pw.print(";" + n.getSzemely().getLakcimTelepules());
			    		pw.println(";" + n.getCelido());
			    	}
			    	q = SessionManager.instance().getSession().createQuery(
	    			"from Nevezes n where n.verseny.idopont='2007-7-22' and n.tav.elnevezes='félmaraton' and n.celido is not null order by n.celido");
			    	pw.println("KÖZÉPTÁV ABSZOLÚT:");
			    	pw.println("Absz.hely;Rajtszám;Kategória;Kat.hely;Név;Születési dátum;Település;Célidő");
			    	hely = 0;
			    	kathely = new HashMap<Kategoria, Integer>();
			    	for (Nevezes n: (List<Nevezes>) q.list()) {
			    		pw.print(++hely);
			    		pw.print(";" + n.getRajtszam());
			    		Kategoria kat = n.getKategoria();
			    		if (kat == null)
			    			pw.print(";---;---");
			    		else {
			    			pw.print(";" + kat.getElnevezes());
			    			Integer khely = kathely.get(kat);
			    			if (khely == null)
			    				khely = 1;
			    			else
			    				++khely;
			    			kathely.put(kat, khely);
			    			pw.print(";" + khely);
			    		}
			    		String nev = n.getSzemely().getNev();
			    		pw.print(";" + nev);
			    		pw.print(";" + n.getSzemely().getSzuletesiDatum());
			    		pw.print(";" + n.getSzemely().getLakcimTelepules());			   
			    		pw.println(";" + n.getCelido());
			    	}
			    	q = SessionManager.instance().getSession().createQuery(
	    			"from Nevezes n where n.verseny.idopont='2007-07-22' and n.tav.elnevezes='maraton' and n.celido is not null order by n.celido");
			    	pw.println("HOSSZÚTÁV ABSZOLÚT:");
			    	pw.println("Absz.hely;Rajtszám;Kategória;Kat.hely;Név;Születési dátum;Település;Célidő");
			    	hely = 0;
			    	kathely = new HashMap<Kategoria, Integer>();
			    	for (Nevezes n: (List<Nevezes>) q.list()) {
			    		pw.print(++hely);
			    		pw.print(";" + n.getRajtszam());
			    		Kategoria kat = n.getKategoria();
			    		if (kat == null)
			    			pw.print(";---;---");
			    		else {
			    			pw.print(";" + kat.getElnevezes());
			    			Integer khely = kathely.get(kat);
			    			if (khely == null)
			    				khely = 1;
			    			else
			    				++khely;
			    			kathely.put(kat, khely);
			    			pw.print(";" + khely);
			    		}
			    		String nev = n.getSzemely().getNev();
			    		pw.print(";" + nev);
			    		pw.print(";" + n.getSzemely().getSzuletesiDatum());
			    		pw.print(";" + n.getSzemely().getLakcimTelepules());			   
			    		pw.println(";" + n.getCelido());
			    	}
			    	pw.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
        });
        exportMenu.add(new Action(){
            { setText("&Rajtszamlista..."); }
			@SuppressWarnings("unchecked")
			@Override
            public void run(){
				try {
					FileDialog dlg = new FileDialog(getShell(), SWT.SAVE);
					String fileToSave = dlg.open();
					if (fileToSave == null)
						return;
					PrintWriter pw = new PrintWriter(new FileWriter(fileToSave));
			    	Query q = SessionManager.instance().getSession().createQuery(
	    			"from Nevezes n where n.verseny.idopont='2007-7-22' order by n.rajtszam asc");
			    	for (Nevezes n: (List<Nevezes>) q.list()) {
			    		if (n.getStatusz() == null)
			    			continue;
			    		if (!n.getStatusz().getElnevezes().equals("Fizetett") && !n.getStatusz().getElnevezes().equals("Rajtszámot felvette"))
			    			continue;
			    		pw.print(n.getRajtszam());
			    		pw.print(";" + n.getSzemely().getNev());
			    		pw.print(";" + (n.getSzemely().getSzuletesiDatum() == null? n.getSzemely().getSzuletesiDatum() : "ismeretlen"));
			    		pw.print(";" + n.getSzemely().getLakcimTelepules());
			    		pw.print(";" + n.getTav().getElnevezes());
			    		pw.print(";" + (n.getKategoria() == null ? "kategórián kívül" : n.getKategoria().getElnevezes()));
			    		pw.println();			    		
			    	}
			    	pw.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
        });
        exportMenu.add(new Action(){
            { setText("&Rajtszamlista..."); }
			@SuppressWarnings("unchecked")
			@Override
            public void run(){
				try {
					FileDialog dlg = new FileDialog(getShell(), SWT.SAVE);
					String fileToSave = dlg.open();
					if (fileToSave == null)
						return;
					PrintWriter pw = new PrintWriter(new FileWriter(fileToSave));
			    	Query q = SessionManager.instance().getSession().createQuery(
	    			"from Nevezes n where n.verseny.idopont='2007-7-22' order by n.rajtszam asc");
			    	for (Nevezes n: (List<Nevezes>) q.list()) {
			    		if (n.getStatusz() == null)
			    			continue;
			    		if (!n.getStatusz().getElnevezes().equals("Fizetett") && !n.getStatusz().getElnevezes().equals("Rajtszámot felvette"))
			    			continue;
			    		pw.print(n.getRajtszam());
//			    		pw.print(";" + n.getSzemely().getNev());
//			    		pw.print(";" + (n.getSzemely().getSzuletesiDatum() == null? n.getSzemely().getSzuletesiDatum() : "ismeretlen"));
//			    		pw.print(";" + n.getSzemely().getLakcimTelepules());
//			    		pw.print(";" + n.getTav().getElnevezes());
//			    		pw.print(";" + (n.getKategoria() == null ? "kategórián kívül" : n.getKategoria().getElnevezes()));
			    		pw.println();			    		
			    	}
			    	pw.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
        });
//        exportMenu.add(new Action(){
//            { setText("&Riport generálása..."); }
//			@Override
//            public void run(){
//				ReportDialog dlgReport = new ReportDialog(getShell());
//				dlgReport.open();
//			}
//        });
        menubar.add(fileMenu);
        menubar.add(versenyek);
        menubar.add(versenyzok);
        menubar.add(exportMenu);
        
        return menubar;
    }

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
		if (getShell() != null)
			getShell().setText(title);
	}
}