package polly.rx.core.orion.datasource;
import java.util.Collections;
import java.util.List;
import polly.rx.core.orion.PortalProvider;
import polly.rx.core.orion.model.Portal;
import polly.rx.core.orion.model.PortalType;
import polly.rx.core.orion.model.Quadrant;
import polly.rx.core.orion.model.Sector;
import polly.rx.entities.DBPortal;
import polly.rx.entities.DBSector;
import de.skuzzle.polly.sdk.PersistenceManagerV2;
import de.skuzzle.polly.sdk.PersistenceManagerV2.Param;
import de.skuzzle.polly.sdk.PersistenceManagerV2.Read;
public class DBPortalProvider implements PortalProvider {
private final PersistenceManagerV2 persistence;
public DBPortalProvider(PersistenceManagerV2 persistence) {
this.persistence = persistence;
}
@Override
public List<? extends Portal> getPortals(Quadrant quadrant, PortalType type) {
return this.persistence.atomic().findList(DBPortal.class,
DBPortal.QUERY_PORTAL_BY_QUAD,
new Param(type, quadrant.getName()));
}
@Override
public List<? extends Portal> getPortals(Sector sector, PortalType type) {
try (final Read read = this.persistence.read()) {
final DBSector s = read.findSingle(DBSector.class,
DBSector.QUERY_FIND_SECTOR,
new Param(sector.getQuadName(), sector.getX(), sector.getY()));
if (s == null) {
return Collections.emptyList();
}
final List<DBPortal> portals = read.findList(DBPortal.class,
DBPortal.QUERY_PORTAL_BY_TYPE_AND_SECTOR,
new Param(type, s));
return portals;
}
}
@Override
public List<? extends Portal> getPortals(Sector sector) {
try (final Read read = this.persistence.read()) {
final DBSector s = read.findSingle(DBSector.class,
DBSector.QUERY_FIND_SECTOR,
new Param(sector.getQuadName(), sector.getX(), sector.getY()));
if (s == null) {
return Collections.emptyList();
}
final List<DBPortal> portals = read.findList(DBPortal.class,
DBPortal.QUERY_PORTAL_BY_SECTOR,
new Param(s));
return portals;
}
}
@Override
public Portal getPersonalPortal(String ownerName) {
return this.persistence.atomic().findSingle(DBPortal.class,
DBPortal.QUERY_PORTAL_BY_TYPE_AND_OWNER,
new Param(PortalType.PRIVATE, ownerName));
}
@Override
public Portal getClanPortal(String nameOrTag) {
try (final Read read = this.persistence.read()) {
Portal p = read.findSingle(DBPortal.class,
DBPortal.QUERY_PORTAL_BY_TYPE_AND_OWNER,
new Param(PortalType.CLAN, nameOrTag));
if (p == null) {
p = read.findSingle(DBPortal.class,
DBPortal.QUERY_PORTAL_BY_TYPE_AND_CLANTAG,
new Param(PortalType.CLAN, nameOrTag));
}
return p;
}
}
@Override
public List<? extends Portal> getAllPortals() {
return this.persistence.atomic().findList(DBPortal.class, DBPortal.QUERY_ALL_PORTALS);
}
}