package polly.rx.core.orion.model;
import java.util.Date;
import de.skuzzle.polly.tools.Check;
import de.skuzzle.polly.tools.EqualsHelper;
import de.skuzzle.polly.tools.Equatable;
import polly.rx.entities.BattleTactic;
public class DefaultBattleReport implements BattleReport {
private final BattleTactic tactic;
private final DefaultBattleReportCompetitor attacker;
private final DefaultBattleReportCompetitor defender;
private final DefaultSector sector;
private final DefaultDrop drop;
private final Date date;
public DefaultBattleReport(BattleTactic tactic,
DefaultBattleReportCompetitor attacker,
DefaultBattleReportCompetitor defender, DefaultSector sector,
DefaultDrop drop, Date date) {
Check.objects(tactic, attacker, defender, sector, drop, date).notNull();
this.tactic = tactic;
this.attacker = attacker;
this.defender = defender;
this.sector = sector;
this.drop = drop;
this.date = date;
attacker.setParent(this);
defender.setParent(this);
}
public DefaultBattleReport(BattleReport report) {
this(report.getTactic(), new DefaultBattleReportCompetitor(report.getAttacker()),
new DefaultBattleReportCompetitor(report.getDefender()),
new DefaultSector(report.getSector()), new DefaultDrop(report.getDrop()),
new Date(report.getDate().getTime()));
}
@Override
public int hashCode() {
return OrionObjectUtil.reportHash(this);
}
@Override
public String toString() {
return OrionObjectUtil.reportString(this);
}
@Override
public final boolean equals(Object obj) {
return EqualsHelper.testEquality(this, obj);
}
@Override
public Class<?> getEquivalenceClass() {
return BattleReport.class;
}
@Override
public boolean actualEquals(Equatable o) {
return OrionObjectUtil.reportsEqual(this, (BattleReport) o);
}
@Override
public Date getDate() {
return this.date;
}
@Override
public BattleTactic getTactic() {
return this.tactic;
}
@Override
public Sector getSector() {
return this.sector;
}
@Override
public Drop getDrop() {
return this.drop;
}
@Override
public BattleReportCompetitor getWinner() {
return this.attacker.getKw() * this.sector.getAttackerBonus() >= this.defender.getKw() * this.sector.getDefenderBonus()
? this.attacker : this.defender;
}
@Override
public BattleReportCompetitor getLoser() {
return this.attacker.getKw() * this.sector.getAttackerBonus() >= this.defender.getKw() * this.sector.getDefenderBonus()
? this.defender : this.attacker;
}
@Override
public BattleReportCompetitor getAttacker() {
return this.attacker;
}
@Override
public BattleReportCompetitor getDefender() {
return this.defender;
}
}