package polly.rx.core;
import java.util.List;
import polly.rx.MSG;
import polly.rx.MyPlugin;
import polly.rx.entities.AZEntry;
import de.skuzzle.polly.sdk.MyPolly;
import de.skuzzle.polly.sdk.PersistenceManagerV2;
import de.skuzzle.polly.sdk.PersistenceManagerV2.Param;
import de.skuzzle.polly.sdk.PersistenceManagerV2.Read;
import de.skuzzle.polly.sdk.PersistenceManagerV2.Write;
import de.skuzzle.polly.sdk.Types.TimespanType;
import de.skuzzle.polly.sdk.User;
import de.skuzzle.polly.sdk.exceptions.DatabaseException;
public class AZEntryManager {
private final PersistenceManagerV2 persistence;
private final MyPolly myPolly;
public AZEntryManager(MyPolly myPolly) {
this.myPolly = myPolly;
this.persistence = myPolly.persistence();
}
public List<AZEntry> getEntries(int byUser) {
return this.persistence.atomic().findList(AZEntry.class,
AZEntry.AZ_ENTRY_BY_USER, new Param(byUser));
}
public void deleteEntry(int id, int byUserId) throws DatabaseException {
try (final Write w = this.persistence.write()) {
final AZEntry e = w.read().find(AZEntry.class, id);
if (e != null) {
if (e.getByUserId() != byUserId) {
throw new DatabaseException(MSG.azEntryCantDeleteOther);
}
w.remove(e);
}
}
}
public void addEntry(int byUserId, String fleet, String az, String jumpTime)
throws DatabaseException {
try (final Write w = this.persistence.write()) {
final AZEntry check = w.read().findSingle(AZEntry.class,
AZEntry.AZ_ENTRY_BY_FLEET_AND_USER, new Param(fleet, byUserId));
if (check != null) {
// user already has an entry for this fleet. remove and replace
w.remove(check);
}
final AZEntry newEntry = new AZEntry(byUserId, fleet, az, jumpTime);
w.single(newEntry);
}
}
public TimespanType getAz(String fleet, User executor) {
try (final Read r = this.persistence.read()) {
final AZEntry e = r.findSingle(AZEntry.class,
AZEntry.AZ_ENTRY_BY_FLEET_AND_USER,
new Param(fleet, executor.getId()));
if (e == null) {
return (TimespanType) executor.getAttribute(MyPlugin.AUTO_REMIND_AZ);
} else {
return (TimespanType) this.myPolly.parse(e.getAz());
}
}
}
public TimespanType getJumpTime(int fleetId, User executor) {
try (final Read r = this.persistence.read()) {
final AZEntry e = r.find(AZEntry.class, fleetId);
if (e == null) {
return new TimespanType(0);
} else {
return (TimespanType) this.myPolly.parse(e.getJumpTime());
}
}
}
}