
enterprises.orbital.evekit.model.eve.sync.FacWarTopStatsSync Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ref-sync Show documentation
Show all versions of ref-sync Show documentation
Handles periodic synchronization of reference data
package enterprises.orbital.evekit.model.eve.sync;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.logging.Logger;
import enterprises.orbital.evekit.model.AbstractRefSync;
import enterprises.orbital.evekit.model.AttributeSelector;
import enterprises.orbital.evekit.model.RefCachedData;
import enterprises.orbital.evekit.model.RefData;
import enterprises.orbital.evekit.model.RefSyncTracker;
import enterprises.orbital.evekit.model.RefSynchronizerUtil;
import enterprises.orbital.evekit.model.RefSynchronizerUtil.SyncStatus;
import enterprises.orbital.evekit.model.SyncTracker;
import enterprises.orbital.evekit.model.eve.CharacterKillStat;
import enterprises.orbital.evekit.model.eve.CharacterVictoryPointStat;
import enterprises.orbital.evekit.model.eve.CorporationKillStat;
import enterprises.orbital.evekit.model.eve.CorporationVictoryPointStat;
import enterprises.orbital.evekit.model.eve.FactionKillStat;
import enterprises.orbital.evekit.model.eve.FactionVictoryPointStat;
import enterprises.orbital.evekit.model.eve.StatAttribute;
import enterprises.orbital.evexmlapi.IResponse;
import enterprises.orbital.evexmlapi.eve.ICharacterKillStat;
import enterprises.orbital.evexmlapi.eve.ICharacterVictoryPointStat;
import enterprises.orbital.evexmlapi.eve.ICorporationKillStat;
import enterprises.orbital.evexmlapi.eve.ICorporationVictoryPointStat;
import enterprises.orbital.evexmlapi.eve.IEveAPI;
import enterprises.orbital.evexmlapi.eve.IFacWarTopStats;
import enterprises.orbital.evexmlapi.eve.IFacWarTopSummary;
import enterprises.orbital.evexmlapi.eve.IFactionKillStat;
import enterprises.orbital.evexmlapi.eve.IFactionVictoryPointStat;
public class FacWarTopStatsSync extends AbstractRefSync {
protected static final Logger log = Logger.getLogger(FacWarTopStatsSync.class.getName());
@Override
public boolean isRefreshed(
RefSyncTracker tracker) {
return tracker.getFacWarTopStatsStatus() != SyncTracker.SyncState.NOT_PROCESSED;
}
@Override
public long getExpiryTime(
RefData container) {
return container.getFacWarTopStatsExpiry();
}
@Override
public void updateStatus(
RefSyncTracker tracker,
SyncTracker.SyncState status,
String detail) {
tracker.setFacWarTopStatsStatus(status);
tracker.setFacWarTopStatsDetail(detail);
RefSyncTracker.updateTracker(tracker);
}
@Override
public void updateExpiry(
RefData container,
long expiry) {
container.setFacWarTopStatsExpiry(expiry);
RefCachedData.updateData(container);
}
@Override
public boolean commit(
long time,
RefSyncTracker tracker,
RefData container,
RefCachedData item) {
if (item instanceof CharacterKillStat) {
CharacterKillStat api = (CharacterKillStat) item;
if (api.getLifeStart() != 0) {
// EOL
super.commit(time, tracker, container, api);
} else {
CharacterKillStat existing = CharacterKillStat.get(time, api.getAttribute(), api.getCharacterID());
if (existing != null) {
if (!existing.equivalent(api)) {
// Evolve
existing.evolve(api, time);
super.commit(time, tracker, container, existing);
super.commit(time, tracker, container, api);
}
} else {
// New entity
api.setup(time);
super.commit(time, tracker, container, api);
}
}
} else if (item instanceof CharacterVictoryPointStat) {
CharacterVictoryPointStat api = (CharacterVictoryPointStat) item;
if (api.getLifeStart() != 0) {
// EOL
super.commit(time, tracker, container, api);
} else {
CharacterVictoryPointStat existing = CharacterVictoryPointStat.get(time, api.getAttribute(), api.getCharacterID());
if (existing != null) {
if (!existing.equivalent(api)) {
// Evolve
existing.evolve(api, time);
super.commit(time, tracker, container, existing);
super.commit(time, tracker, container, api);
}
} else {
// New entity
api.setup(time);
super.commit(time, tracker, container, api);
}
}
} else if (item instanceof CorporationKillStat) {
CorporationKillStat api = (CorporationKillStat) item;
if (api.getLifeStart() != 0) {
// EOL
super.commit(time, tracker, container, api);
} else {
CorporationKillStat existing = CorporationKillStat.get(time, api.getAttribute(), api.getCorporationID());
if (existing != null) {
if (!existing.equivalent(api)) {
// Evolve
existing.evolve(api, time);
super.commit(time, tracker, container, existing);
super.commit(time, tracker, container, api);
}
} else {
// New entity
api.setup(time);
super.commit(time, tracker, container, api);
}
}
} else if (item instanceof CorporationVictoryPointStat) {
CorporationVictoryPointStat api = (CorporationVictoryPointStat) item;
if (api.getLifeStart() != 0) {
// EOL
super.commit(time, tracker, container, api);
} else {
CorporationVictoryPointStat existing = CorporationVictoryPointStat.get(time, api.getAttribute(), api.getCorporationID());
if (existing != null) {
if (!existing.equivalent(api)) {
// Evolve
existing.evolve(api, time);
super.commit(time, tracker, container, existing);
super.commit(time, tracker, container, api);
}
} else {
// New entity
api.setup(time);
super.commit(time, tracker, container, api);
}
}
} else if (item instanceof FactionKillStat) {
FactionKillStat api = (FactionKillStat) item;
if (api.getLifeStart() != 0) {
// EOL
super.commit(time, tracker, container, api);
} else {
FactionKillStat existing = FactionKillStat.get(time, api.getAttribute(), api.getFactionID());
if (existing != null) {
if (!existing.equivalent(api)) {
// Evolve
existing.evolve(api, time);
super.commit(time, tracker, container, existing);
super.commit(time, tracker, container, api);
}
} else {
// New entity
api.setup(time);
super.commit(time, tracker, container, api);
}
}
} else if (item instanceof FactionVictoryPointStat) {
FactionVictoryPointStat api = (FactionVictoryPointStat) item;
if (api.getLifeStart() != 0) {
// EOL
super.commit(time, tracker, container, api);
} else {
FactionVictoryPointStat existing = FactionVictoryPointStat.get(time, api.getAttribute(), api.getFactionID());
if (existing != null) {
if (!existing.equivalent(api)) {
// Evolve
existing.evolve(api, time);
super.commit(time, tracker, container, existing);
super.commit(time, tracker, container, api);
}
} else {
// New entity
api.setup(time);
super.commit(time, tracker, container, api);
}
}
} else {
// Should never happen!
assert false;
}
return true;
}
@Override
protected Object getServerData(
IResponse serverRequest)
throws IOException {
return ((IEveAPI) serverRequest).requestFacWarTopStats();
}
private interface StatCreator {
public A createStat(
StatAttribute attr,
B source,
Set seenSet);
}
private interface GetExistingData {
public List getNextSet(
StatAttribute attr,
List previousSet);
}
private interface GetItemID {
public long getID(
A item);
}
private void populateStat(
long time,
StatAttribute attr,
Collection data,
List updates,
StatCreator ctor,
GetExistingData setRetriever,
GetItemID getID) {
Set seen = new HashSet<>();
for (B nextStat : data) {
updates.add(ctor.createStat(attr, nextStat, seen));
}
List nextBatch = setRetriever.getNextSet(attr, Collections.emptyList());
while (!nextBatch.isEmpty()) {
for (A n : nextBatch) {
if (!seen.contains(getID.getID(n))) {
n.evolve(null, time);
updates.add(n);
}
}
nextBatch = setRetriever.getNextSet(attr, nextBatch);
}
}
@Override
protected long processServerData(
long time,
IResponse serverRequest,
Object data,
List updates)
throws IOException {
// Handle all stats
final AttributeSelector ats = makeAtSelector(time);
IFacWarTopSummary summary = (IFacWarTopSummary) data;
// Handle character stats
IFacWarTopStats charStats = summary.getCharacterStats();
StatCreator charKillCreator = new StatCreator() {
@Override
public CharacterKillStat createStat(
StatAttribute attr,
ICharacterKillStat source,
Set seenSet) {
seenSet.add(source.getCharacterID());
return new CharacterKillStat(attr, source.getKills(), source.getCharacterID(), source.getCharacterName());
}
};
GetItemID charKillIDGet = new GetItemID() {
@Override
public long getID(
CharacterKillStat item) {
return item.getCharacterID();
}
};
GetExistingData charKillGetExisting = new GetExistingData() {
@Override
public List getNextSet(
StatAttribute attr,
List previousSet) {
long contid = previousSet.isEmpty() ? -1 : previousSet.get(previousSet.size() - 1).getCid();
return CharacterKillStat.accessQuery(contid, 1000, false, ats, new AttributeSelector("{values: ['" + attr.toString() + "']}"), ANY_SELECTOR,
ANY_SELECTOR, ANY_SELECTOR);
}
};
populateStat(time, StatAttribute.LAST_WEEK, charStats.getKillsLastWeek(), updates, charKillCreator, charKillGetExisting, charKillIDGet);
populateStat(time, StatAttribute.TOTAL, charStats.getKillsTotal(), updates, charKillCreator, charKillGetExisting, charKillIDGet);
populateStat(time, StatAttribute.YESTERDAY, charStats.getKillsYesterday(), updates, charKillCreator, charKillGetExisting, charKillIDGet);
StatCreator charVPCreator = new StatCreator() {
@Override
public CharacterVictoryPointStat createStat(
StatAttribute attr,
ICharacterVictoryPointStat source,
Set seenSet) {
seenSet.add(source.getCharacterID());
return new CharacterVictoryPointStat(attr, source.getVictoryPoints(), source.getCharacterID(), source.getCharacterName());
}
};
GetItemID charVPIDGet = new GetItemID() {
@Override
public long getID(
CharacterVictoryPointStat item) {
return item.getCharacterID();
}
};
GetExistingData charVPGetExisting = new GetExistingData() {
@Override
public List getNextSet(
StatAttribute attr,
List previousSet) {
long contid = previousSet.isEmpty() ? -1 : previousSet.get(previousSet.size() - 1).getCid();
return CharacterVictoryPointStat.accessQuery(contid, 1000, false, ats, new AttributeSelector("{values: ['" + attr.toString() + "']}"), ANY_SELECTOR,
ANY_SELECTOR, ANY_SELECTOR);
}
};
populateStat(time, StatAttribute.LAST_WEEK, charStats.getVictoryPointsLastWeek(), updates, charVPCreator, charVPGetExisting, charVPIDGet);
populateStat(time, StatAttribute.TOTAL, charStats.getVictoryPointsTotal(), updates, charVPCreator, charVPGetExisting, charVPIDGet);
populateStat(time, StatAttribute.YESTERDAY, charStats.getVictoryPointsYesterday(), updates, charVPCreator, charVPGetExisting, charVPIDGet);
// Handle corporation stats
IFacWarTopStats corpStats = summary.getCorporationStats();
StatCreator corpKillCreator = new StatCreator() {
@Override
public CorporationKillStat createStat(
StatAttribute attr,
ICorporationKillStat source,
Set seenSet) {
seenSet.add(source.getCorporationID());
return new CorporationKillStat(attr, source.getKills(), source.getCorporationID(), source.getCorporationName());
}
};
GetItemID corpKillIDGet = new GetItemID() {
@Override
public long getID(
CorporationKillStat item) {
return item.getCorporationID();
}
};
GetExistingData corpKillGetExisting = new GetExistingData() {
@Override
public List getNextSet(
StatAttribute attr,
List previousSet) {
long contid = previousSet.isEmpty() ? -1 : previousSet.get(previousSet.size() - 1).getCid();
return CorporationKillStat.accessQuery(contid, 1000, false, ats, new AttributeSelector("{values: ['" + attr.toString() + "']}"), ANY_SELECTOR,
ANY_SELECTOR, ANY_SELECTOR);
}
};
populateStat(time, StatAttribute.LAST_WEEK, corpStats.getKillsLastWeek(), updates, corpKillCreator, corpKillGetExisting, corpKillIDGet);
populateStat(time, StatAttribute.TOTAL, corpStats.getKillsTotal(), updates, corpKillCreator, corpKillGetExisting, corpKillIDGet);
populateStat(time, StatAttribute.YESTERDAY, corpStats.getKillsYesterday(), updates, corpKillCreator, corpKillGetExisting, corpKillIDGet);
StatCreator corpVPCreator = new StatCreator() {
@Override
public CorporationVictoryPointStat createStat(
StatAttribute attr,
ICorporationVictoryPointStat source,
Set seenSet) {
seenSet.add(source.getCorporationID());
return new CorporationVictoryPointStat(attr, source.getVictoryPoints(), source.getCorporationID(), source.getCorporationName());
}
};
GetItemID corpVPIDGet = new GetItemID() {
@Override
public long getID(
CorporationVictoryPointStat item) {
return item.getCorporationID();
}
};
GetExistingData corpVPGetExisting = new GetExistingData() {
@Override
public List getNextSet(
StatAttribute attr,
List previousSet) {
long contid = previousSet.isEmpty() ? -1 : previousSet.get(previousSet.size() - 1).getCid();
return CorporationVictoryPointStat.accessQuery(contid, 1000, false, ats, new AttributeSelector("{values: ['" + attr.toString() + "']}"), ANY_SELECTOR,
ANY_SELECTOR, ANY_SELECTOR);
}
};
populateStat(time, StatAttribute.LAST_WEEK, corpStats.getVictoryPointsLastWeek(), updates, corpVPCreator, corpVPGetExisting, corpVPIDGet);
populateStat(time, StatAttribute.TOTAL, corpStats.getVictoryPointsTotal(), updates, corpVPCreator, corpVPGetExisting, corpVPIDGet);
populateStat(time, StatAttribute.YESTERDAY, corpStats.getVictoryPointsYesterday(), updates, corpVPCreator, corpVPGetExisting, corpVPIDGet);
// Handle faction stats
IFacWarTopStats factionStats = summary.getFactionStats();
StatCreator factionKillCreator = new StatCreator() {
@Override
public FactionKillStat createStat(
StatAttribute attr,
IFactionKillStat source,
Set seenSet) {
seenSet.add(source.getFactionID());
return new FactionKillStat(attr, source.getKills(), source.getFactionID(), source.getFactionName());
}
};
GetItemID factionKillIDGet = new GetItemID() {
@Override
public long getID(
FactionKillStat item) {
return item.getFactionID();
}
};
GetExistingData factionKillGetExisting = new GetExistingData() {
@Override
public List getNextSet(
StatAttribute attr,
List previousSet) {
long contid = previousSet.isEmpty() ? -1 : previousSet.get(previousSet.size() - 1).getCid();
return FactionKillStat.accessQuery(contid, 1000, false, ats, new AttributeSelector("{values: ['" + attr.toString() + "']}"), ANY_SELECTOR, ANY_SELECTOR,
ANY_SELECTOR);
}
};
populateStat(time, StatAttribute.LAST_WEEK, factionStats.getKillsLastWeek(), updates, factionKillCreator, factionKillGetExisting, factionKillIDGet);
populateStat(time, StatAttribute.TOTAL, factionStats.getKillsTotal(), updates, factionKillCreator, factionKillGetExisting, factionKillIDGet);
populateStat(time, StatAttribute.YESTERDAY, factionStats.getKillsYesterday(), updates, factionKillCreator, factionKillGetExisting, factionKillIDGet);
StatCreator factionVPCreator = new StatCreator() {
@Override
public FactionVictoryPointStat createStat(
StatAttribute attr,
IFactionVictoryPointStat source,
Set seenSet) {
seenSet.add(source.getFactionID());
return new FactionVictoryPointStat(attr, source.getVictoryPoints(), source.getFactionID(), source.getFactionName());
}
};
GetItemID factionVPIDGet = new GetItemID() {
@Override
public long getID(
FactionVictoryPointStat item) {
return item.getFactionID();
}
};
GetExistingData factionVPGetExisting = new GetExistingData() {
@Override
public List getNextSet(
StatAttribute attr,
List previousSet) {
long contid = previousSet.isEmpty() ? -1 : previousSet.get(previousSet.size() - 1).getCid();
return FactionVictoryPointStat.accessQuery(contid, 1000, false, ats, new AttributeSelector("{values: ['" + attr.toString() + "']}"), ANY_SELECTOR,
ANY_SELECTOR, ANY_SELECTOR);
}
};
populateStat(time, StatAttribute.LAST_WEEK, factionStats.getVictoryPointsLastWeek(), updates, factionVPCreator, factionVPGetExisting, factionVPIDGet);
populateStat(time, StatAttribute.TOTAL, factionStats.getVictoryPointsTotal(), updates, factionVPCreator, factionVPGetExisting, factionVPIDGet);
populateStat(time, StatAttribute.YESTERDAY, factionStats.getVictoryPointsYesterday(), updates, factionVPCreator, factionVPGetExisting, factionVPIDGet);
// Return cache time
return serverRequest.getCachedUntil().getTime();
}
private static final FacWarTopStatsSync syncher = new FacWarTopStatsSync();
public static SyncStatus sync(
long time,
RefSynchronizerUtil syncUtil,
IResponse serverRequest) {
return syncher.syncData(time, syncUtil, serverRequest, "FacWarTopStats");
}
public static SyncStatus exclude(
RefSynchronizerUtil syncUtil) {
return syncher.excludeState(syncUtil, "FacWarTopStats", SyncTracker.SyncState.SYNC_ERROR);
}
public static SyncStatus notAllowed(
RefSynchronizerUtil syncUtil) {
return syncher.excludeState(syncUtil, "FacWarTopStats", SyncTracker.SyncState.NOT_ALLOWED);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy