152 lines
3.6 KiB
Java
152 lines
3.6 KiB
Java
package dev.peerat.backend.model;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Objects;
|
|
|
|
import org.jose4j.json.internal.json_simple.JSONArray;
|
|
import org.jose4j.json.internal.json_simple.JSONObject;
|
|
|
|
import be.jeffcheasey88.peeratcode.mapping.SeaBottle;
|
|
import dev.peerat.framework.utils.json.JsonMap;
|
|
|
|
public class Group implements Comparable<Group> {
|
|
private String name;
|
|
private Integer linkToChapter;
|
|
// private Integer linkToPuzzle;
|
|
private List<Player> players;
|
|
|
|
@Override
|
|
public String toString(){
|
|
return "Group[name="+name+", chapter="+linkToChapter+"]";
|
|
}
|
|
|
|
public Group(JsonMap json){
|
|
this.name = (String) json.get("name");
|
|
if (json.has("chapter"))
|
|
this.linkToChapter = ((Number) json.get("chapter")).intValue();
|
|
// if (json.has("puzzle"))
|
|
// this.linkToPuzzle = ((Number) json.get("puzzle")).intValue();
|
|
}
|
|
|
|
public Group(String name, Integer initChap, Integer initPuzz) {
|
|
this.name = name;
|
|
this.linkToChapter = initChap;
|
|
// this.linkToPuzzle = initPuzz;
|
|
}
|
|
|
|
@SeaBottle
|
|
public static Group getGroup(int player){
|
|
return null;
|
|
}
|
|
|
|
public void addPlayer(Player newPlayer) {
|
|
if (newPlayer != null) {
|
|
if (players == null)
|
|
players = new ArrayList<Player>();
|
|
|
|
int pPosition = players.indexOf(newPlayer);
|
|
if (pPosition < 0) {
|
|
players.add(newPlayer);
|
|
} else {
|
|
players.get(pPosition).addCompletion(new Completion(newPlayer.getTotalTries(), newPlayer.getTotalScore()));
|
|
}
|
|
}
|
|
}
|
|
|
|
public int getScore() {
|
|
int score = 0;
|
|
|
|
if (players != null) {
|
|
for (Player p : players) {
|
|
score = score + p.getTotalScore();
|
|
}
|
|
}
|
|
return score;
|
|
}
|
|
|
|
public int getTries() {
|
|
int tries = 0;
|
|
|
|
if (players != null) {
|
|
for (Player p : players) {
|
|
tries = tries + p.getTotalTries();
|
|
}
|
|
}
|
|
return tries;
|
|
}
|
|
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
public Integer getLinkToChapter() {
|
|
return linkToChapter;
|
|
}
|
|
|
|
// public Integer getLinkToPuzzle() {
|
|
// return linkToPuzzle;
|
|
// }
|
|
|
|
public JSONObject toJson() {
|
|
return this.toJson(null);
|
|
}
|
|
|
|
public JSONObject toJson(Integer rank) {
|
|
JSONObject groupJSON = new JSONObject();
|
|
groupJSON.put("name", name);
|
|
if (rank != null)
|
|
groupJSON.put("rank", rank);
|
|
else if (linkToChapter != null)
|
|
groupJSON.put("chapter", linkToChapter);
|
|
// else if (linkToPuzzle != null)
|
|
// groupJSON.put("puzzle", linkToPuzzle);
|
|
if (players != null) {
|
|
JSONArray groupsPlayerJSON = new JSONArray();
|
|
for (Player p : players) {
|
|
JSONObject playerJSON = new JSONObject();
|
|
playerJSON.put("pseudo", p.getPseudo());
|
|
playerJSON.put("score", p.getTotalScore());
|
|
playerJSON.put("completion", p.getTotalCompletion());
|
|
playerJSON.put("tries", p.getTotalTries());
|
|
groupsPlayerJSON.add(playerJSON);
|
|
}
|
|
groupJSON.put("players", groupsPlayerJSON);
|
|
}
|
|
return groupJSON;
|
|
}
|
|
|
|
@Override
|
|
public int compareTo(Group arg0) {
|
|
int comparo = arg0.getScore() - getScore();
|
|
if (comparo == 0) {
|
|
comparo = players.size() - arg0.players.size();
|
|
if (comparo == 0) {
|
|
comparo = getTries() - arg0.getTries();
|
|
if (comparo == 0) {
|
|
comparo = name.compareTo(arg0.name);
|
|
}
|
|
}
|
|
}
|
|
return comparo;
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return Objects.hash(name);
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object obj){
|
|
if(obj == this) return true;
|
|
if(obj == null) return false;
|
|
if(!(obj instanceof Group)) return false;
|
|
Group other = (Group) obj;
|
|
return this.name.equals(other.name) && integerEquals(this.linkToChapter, other.linkToChapter); // && integerEquals(this.linkToPuzzle, other.linkToPuzzle);
|
|
}
|
|
|
|
private boolean integerEquals(Integer a, Integer b){
|
|
if(a == null) return b == null;
|
|
return a.equals(b);
|
|
}
|
|
}
|