2022-09-08 10:42:57 +02:00
/ *
This file is a part of the SteamWar software .
Copyright ( C ) 2020 SteamWar . de - Serverteam
This program is free software : you can redistribute it and / or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation , either version 3 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU Affero General Public License for more details .
You should have received a copy of the GNU Affero General Public License
along with this program . If not , see < https : //www.gnu.org/licenses/>.
* /
package de.steamwar.sql ;
import de.steamwar.sql.internal.Field ;
import de.steamwar.sql.internal.SelectStatement ;
import de.steamwar.sql.internal.Statement ;
import de.steamwar.sql.internal.Table ;
import lombok.AllArgsConstructor ;
import lombok.Getter ;
2023-02-21 18:22:06 +01:00
import java.sql.Timestamp ;
import java.util.* ;
import static java.time.temporal.ChronoUnit.SECONDS ;
2022-09-08 10:42:57 +02:00
@AllArgsConstructor
2023-02-21 18:22:06 +01:00
public class EventFight implements Comparable < EventFight > {
2022-09-08 10:42:57 +02:00
private static final Table < EventFight > table = new Table < > ( EventFight . class ) ;
private static final SelectStatement < EventFight > byId = table . select ( Table . PRIMARY ) ;
2023-02-21 18:22:06 +01:00
private static final SelectStatement < EventFight > allComing = new SelectStatement < > ( table , " SELECT * FROM EventFight WHERE StartTime > now() ORDER BY StartTime ASC " ) ;
private static final SelectStatement < EventFight > event = new SelectStatement < > ( table , " SELECT * FROM EventFight WHERE EventID = ? ORDER BY StartTime ASC " ) ;
private static final Statement reschedule = table . update ( Table . PRIMARY , " StartTime " ) ;
2022-09-08 10:42:57 +02:00
private static final Statement setResult = table . update ( Table . PRIMARY , " Ergebnis " ) ;
private static final Statement setFight = table . update ( Table . PRIMARY , " Fight " ) ;
2023-02-21 18:22:06 +01:00
private static final Queue < EventFight > fights = new PriorityQueue < > ( ) ;
2022-09-08 10:42:57 +02:00
public static EventFight get ( int fightID ) {
return byId . select ( fightID ) ;
}
2023-02-21 18:22:06 +01:00
public static void loadAllComingFights ( ) {
fights . clear ( ) ;
fights . addAll ( allComing . listSelect ( ) ) ;
}
public static List < EventFight > getEvent ( int eventID ) {
return event . listSelect ( eventID ) ;
}
public static Queue < EventFight > getFights ( ) {
return fights ;
}
2022-09-08 10:42:57 +02:00
@Getter
@Field
2022-12-23 23:17:13 +01:00
private final int eventID ;
2022-09-08 10:42:57 +02:00
@Getter
@Field ( keys = { Table . PRIMARY } , autoincrement = true )
2022-12-23 23:17:13 +01:00
private final int fightID ;
2022-09-08 10:42:57 +02:00
@Getter
@Field
2023-02-21 18:22:06 +01:00
private Timestamp startTime ;
@Getter
@Field
private final String spielmodus ;
@Getter
@Field
private final String map ;
@Getter
@Field
2022-12-23 23:17:13 +01:00
private final int teamBlue ;
2022-09-08 10:42:57 +02:00
@Getter
@Field
2022-12-23 23:17:13 +01:00
private final int teamRed ;
2022-09-08 10:42:57 +02:00
@Getter
@Field
2022-12-23 23:17:13 +01:00
private final int kampfleiter ;
2022-09-08 10:42:57 +02:00
@Getter
@Field ( def = " 0 " )
private int ergebnis ;
@Field ( nullable = true )
private int fight ;
public void setErgebnis ( int winner ) {
this . ergebnis = winner ;
setResult . update ( winner , fightID ) ;
}
public void setFight ( int fight ) {
//Fight.FightID, not EventFight.FightID
this . fight = fight ;
setFight . update ( fight , fightID ) ;
}
2023-02-21 18:22:06 +01:00
public boolean hasFinished ( ) {
return fight ! = 0 ;
}
public void reschedule ( ) {
startTime = Timestamp . from ( new Date ( ) . toInstant ( ) . plus ( 30 , SECONDS ) ) ;
reschedule . update ( startTime , fightID ) ;
}
@Override
public int hashCode ( ) {
return fightID ;
}
@Override
public boolean equals ( Object o ) {
if ( o = = null )
return false ;
if ( ! ( o instanceof EventFight ) )
return false ;
return fightID = = ( ( EventFight ) o ) . fightID ;
}
@Override
public int compareTo ( EventFight o ) {
return startTime . compareTo ( o . startTime ) ;
}
2022-09-08 10:42:57 +02:00
}