package de.achim.turnier.spielplan;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import de.achim.turnier.Turniervewaltung2;
import de.achim.turnier.tabellen.TabellenPanel;
import de.achim.turnier.utility.Begegnung;
import de.achim.turnier.utility.IPaarungPanels;
import de.achim.turnier.utility.ITabellen;
public class SpielPlanPanel extends JPanel implements IPaarungPanels{
private static final int WIDTH = 400;
private static final int HEIGHT = 80;
private Vector<SpielPanel> spieleListe = new Vector<SpielPanel>();
private Vector<Begegnung> begegnungsListe = new Vector<Begegnung>();
private TabellenPanel tabelle;
private JLabel title;
private JPanel spiele;// = new JPanel();
private JPanel motherPanel;
private String errorMsg = new String();
private int gruppe = 0;
public JLabel getTitle() {
return title;
}
public void setTitle(String title) {
if(this.title.getText().length() <= 0){
this.title.setText(title);
revalidate();
}
}
public SpielPlanPanel(){
setSize(WIDTH, HEIGHT);
BorderLayout bd = new BorderLayout();
GridLayout griddy = new GridLayout(0,1);
setLayout(bd);
title = new JLabel();
Font font = new Font( Font.SANS_SERIF, Font.PLAIN, 20 );
title.setFont(font);
title.setHorizontalAlignment(title.CENTER);
spiele = new JPanel();
spiele.setLayout(griddy);
JButton druckButton = new JButton("Drucken");
ActionListener al = new PrintSPP(this);
druckButton.addActionListener(al);
add(title, bd.NORTH);
add(spiele, bd.CENTER);
add(druckButton, bd.SOUTH);
}
public void initFromFile(Vector<String> vLine){
// data line has the following format:
// abc;cde2;0;0;uhrzeit
Iterator<String> iter = vLine.iterator();
while(iter.hasNext()){
String line = iter.next();
initFromLine(line);
}
}
public void initFromLine(String line){
StringTokenizer st = new StringTokenizer(line, ";");
String m1 =st.nextToken();
String m2 =st.nextToken();
String t1 =st.nextToken();
String t2 =st.nextToken();
String u1 = st.nextToken();
String gruppe = st.nextToken();
if(u1 == null)
u1 = "12:00";
int index = u1.indexOf(" ");
String datum = u1.substring(0, index).trim();
String uhrzeit = u1.substring(index, u1.length()).trim();
setTitle(datum);
addSpielPaarung(m1, m2, Integer.parseInt(t1), Integer.parseInt(t2), u1, gruppe);
}
/**
*
* @param mannschaft1
* @param mannschaft2
* @param date z.B. 12.01.2010 12:12
*/
public void addSpielPaarung(String mannschaft1, String mannschaft2, String date){
addSpielPaarung(mannschaft1, mannschaft2,0,0, date);
if(title.getText().length()<=0){
int index = date.indexOf(" ");
String datum = date.substring(0, index).trim();
String uhrzeit = date.substring(index, date.length()).trim();
title.setText(datum);
}
}
/**
*
*/
public void addSpielPaarung(String mannschaft1, String mannschaft2, int tore1, int tore2, String date){
addSpielPaarung(mannschaft1, mannschaft2,tore1, tore2, date, String.valueOf(getGruppe()));
}
/**
*
* @param mannschaft1
* @param mannschaft2
* @param tore1
* @param tore2
* @param date z.B. 12.01.2010 12:12
*/
public void addSpielPaarung(String mannschaft1, String mannschaft2, int tore1, int tore2, String date, String gruppe){
SpielPanel sp = new SpielPanel();
if(tabelle!=null)
sp.setTabellenPanel(tabelle);
// sp.setMotherPanel(this);
Begegnung bg = new Begegnung();
bg.setMannschaft1(mannschaft1);
bg.setMannschaft2(mannschaft2);
bg.setToreMannschaft1(tore1);
bg.setToreMannschaft2(tore2);
bg.setDate(date);
bg.setGruppe(gruppe);
if(!isDoppelPaarung(bg)){
if(!isValidSpielZeit(bg)){
begegnungsListe.add(bg);
Comparator comp = new SpielSorter();
Collections.sort(begegnungsListe, comp);
//alle bisherigen begegnungen von dem SpielPanel weg
spiele.removeAll();
//spielparungen sortiert einfuegen
addPaarung2Panel(begegnungsListe);
setErrorMsg("");
} else {
setErrorMsg(" Spielzeit schon vergeben");
}
} else {
setErrorMsg(" Paarung bereits angelegt ");
}
revalidate();
}
public void setTabellenPanel(ITabellen tabelle){
if(tabelle!=null)
this.tabelle = (TabellenPanel) tabelle;
}
public TabellenPanel getTabellenPanel(){
return this.tabelle;
}
public Vector<SpielPanel> getSpieleListe() {
return spieleListe;
}
private void addPaarung2Panel(Vector<Begegnung> bl){
Iterator<Begegnung> iter = bl.iterator();
while(iter.hasNext()){
Begegnung bg = iter.next();
fillSpielPanel(bg);
}
}
private void fillSpielPanel(Begegnung bg){
SpielPanel sp = new SpielPanel();
if(tabelle!=null)
sp.setTabellenPanel(tabelle);
sp.setMotherPanel(this);
sp.setMannschaft1(bg.getMannschaft1());
sp.setMannschaft2(bg.getMannschaft2());
sp.setTore1(bg.getToreMannschaft1());
sp.setTore2(bg.getToreMannschaft2());
int index = bg.getDate().indexOf(" ");;
String datum = bg.getDate().substring(0, index).trim();
String uhrzeit = bg.getDate().substring(index, bg.getDate().length()).trim();
sp.setUhrzeit(uhrzeit);
sp.setDatum(datum);
Component[] coms = sp.getComponents();
for (int i = 0; i < coms.length; i++){
System.out.println(coms[i].getName());
if(coms[i].getName() != null){
if(coms[i].getName().equals("tfTore1")){
JTextField tx = (JTextField)coms[i];
tx.setText(String.valueOf(bg.getToreMannschaft1()));
}
if(coms[i].getName().equals("tfTore2")){
JTextField tx = (JTextField)coms[i];
tx.setText(String.valueOf(bg.getToreMannschaft2()));
}
}
} //end of for loop
sp.setBegegnung(bg);
if(bg.isSpielfertig()){
sp.setBtnStatus(false);
}
spiele.add(sp);
//spieleListe.add(sp);
revalidate();
}
/*
* ist die eingegebene Paarung schon vorhanden?
*/
private boolean isDoppelPaarung(SpielPanel sp){
boolean result = false;
String m1 = sp.getMannschaft1();
String m2 = sp.getMannschaft2();
Iterator<SpielPanel> iter = spieleListe.iterator();
while(iter.hasNext()){
SpielPanel spp = iter.next();
String sppM1 = spp.getMannschaft1();
String sppM2 = spp.getMannschaft2();
if(m1.equals(sppM1) && m2.equals(sppM2)) {
return true;
} else if (m2.equals(sppM1) && m1.equals(sppM2)){
return true;
}
else {
result = false;
}
}
return result;
}
/*
* ist die eingegebene Paarung schon vorhanden?
*/
private boolean isDoppelPaarung(Begegnung sp){
boolean result = false;
String m1 = sp.getMannschaft1();
String m2 = sp.getMannschaft2();
Iterator<Begegnung> iter = begegnungsListe.iterator();
while(iter.hasNext()){
Begegnung spp = iter.next();
String sppM1 = spp.getMannschaft1();
String sppM2 = spp.getMannschaft2();
if(m1.equals(sppM1) && m2.equals(sppM2)) {
return true;
} else if (m2.equals(sppM1) && m1.equals(sppM2)){
return true;
}
else {
result = false;
}
}
return result;
}
private boolean isValidSpielZeit(Begegnung bg){
boolean result = false;
String date1 = bg.getDate();
Iterator<Begegnung> iter = begegnungsListe.iterator();
while(iter.hasNext()){
String date = iter.next().getDate();
if(date.equals(date1))
return true;
}
return result;
}
public Vector<Begegnung> getBegegnungsListe() {
return this.begegnungsListe;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
public String getErrorMsg() {
return errorMsg;
}
public JPanel getMotherPanel() {
return this.motherPanel;
}
public void setMotherPanel(JPanel motherPanel) {
this.motherPanel = motherPanel;
}
public void updateData(JComponent comp){
((SpielPlanContainer)getMotherPanel()).updateData(comp);
}
/**
* @param gruppe the gruppe to set
*/
public void setGruppe(int gruppe) {
this.gruppe = gruppe;
}
/**
* @return the gruppe
*/
public int getGruppe() {
return this.gruppe;
}
}
class PrintSPP implements ActionListener {
SpielPlanPanel spp;
public PrintSPP(SpielPlanPanel s){
this.spp = s;
}
@Override
public void actionPerformed(ActionEvent e) {
((Turniervewaltung2)((SpielPlanContainer)spp.getMotherPanel()).getMotherFrame()).printData(spp);
}
}