Handling of update date for Mtg card database.

This commit is contained in:
MarcinSc
2016-02-03 15:09:10 -08:00
parent 49c92bde39
commit febef2da9f
4 changed files with 18 additions and 30 deletions

View File

@@ -14,7 +14,6 @@ import java.util.List;
import java.util.Map;
import static org.jboss.netty.handler.codec.http.HttpHeaders.Names.CONTENT_TYPE;
import static org.jboss.netty.handler.codec.http.HttpHeaders.Names.IF_NONE_MATCH;
public class MtgCardsRequestHandler implements UriRequestHandler {
private MtgCardServer _mtgCardServer;
@@ -27,9 +26,10 @@ public class MtgCardsRequestHandler implements UriRequestHandler {
public void handleRequest(String uri, HttpRequest request, Map<Type, Object> context, ResponseWriter responseWriter, MessageEvent e) throws Exception {
QueryStringDecoder queryDecoder = new QueryStringDecoder(request.getUri());
String provider = getQueryParameterSafely(queryDecoder, "provider");
String updateMarker = getQueryParameterSafely(queryDecoder, "update");
if (provider != null) {
processCardListRequest(request, responseWriter, provider);
processCardListRequest(responseWriter, provider, updateMarker);
} else {
processProviderListRequest(responseWriter);
}
@@ -44,20 +44,20 @@ public class MtgCardsRequestHandler implements UriRequestHandler {
responseWriter.writeByteResponse(dataProvidersResponse, headers);
}
private void processCardListRequest(HttpRequest request, ResponseWriter responseWriter, String provider) {
private void processCardListRequest(ResponseWriter responseWriter, String provider, String updateMarker) {
try {
MtgCardServer.CardDatabaseHolder cardDatabaseHolder = _mtgCardServer.getCardDatabaseHolder(provider);
if (cardDatabaseHolder == null) {
responseWriter.writeError(204);
return;
} else if (clientHasCurrentVersion(request, cardDatabaseHolder.getUpdateMarker())) {
} else if (updateMarker != null && updateMarker.equals(String.valueOf(cardDatabaseHolder.getUpdateDate()))) {
responseWriter.writeError(304);
return;
}
Map<String, String> headers = new HashMap<String, String>();
headers.put(CONTENT_TYPE, "application/json; charset=UTF-8");
headers.put(HttpHeaders.Names.ETAG, cardDatabaseHolder.getUpdateMarker());
headers.put(HttpHeaders.Names.ETAG, String.valueOf(cardDatabaseHolder.getUpdateDate()));
responseWriter.writeByteResponse(cardDatabaseHolder.getBytes(), headers);
} catch (ProviderNotFoundException exp) {
@@ -65,18 +65,6 @@ public class MtgCardsRequestHandler implements UriRequestHandler {
}
}
private boolean clientHasCurrentVersion(HttpRequest request, String version) {
String ifNoneMatch = request.getHeader(IF_NONE_MATCH);
if (ifNoneMatch != null) {
String[] clientKnownVersions = ifNoneMatch.split(",");
for (String clientKnownVersion : clientKnownVersions) {
if (clientKnownVersion.trim().equals(version))
return true;
}
}
return false;
}
protected String getQueryParameterSafely(QueryStringDecoder queryStringDecoder, String parameterName) {
List<String> parameterValues = queryStringDecoder.getParameters().get(parameterName);
if (parameterValues != null && parameterValues.size() > 0)

View File

@@ -49,7 +49,7 @@ public class MtgCardServer extends AbstractServer {
new MtgDataProvider.UpdateCallback() {
@Override
public void callback(TimestampedCardCollection result) {
_providersData.put(key, new CardDatabaseHolder(marshallData(result.getSetCardDataList()), result.getUpdateMarker()));
_providersData.put(key, new CardDatabaseHolder(marshallData(result.getSetCardDataList()), result.getUpdateDate()));
}
});
}
@@ -86,16 +86,16 @@ public class MtgCardServer extends AbstractServer {
}
public class CardDatabaseHolder {
private String _updateMarker;
private long _updateDate;
private byte[] _bytes;
public CardDatabaseHolder(byte[] bytes, String updateMarker) {
public CardDatabaseHolder(byte[] bytes, long updateDate) {
_bytes = bytes;
_updateMarker = updateMarker;
_updateDate = updateDate;
}
public String getUpdateMarker() {
return _updateMarker;
public long getUpdateDate() {
return _updateDate;
}
public byte[] getBytes() {

View File

@@ -3,11 +3,11 @@ package com.gempukku.mtg;
import java.util.List;
public class TimestampedCardCollection {
private final String _updateMarker;
private final long _updateDate;
private final List<SetCardData> _setCardDataList;
public TimestampedCardCollection(String updateMarker, List<SetCardData> setCardDataList) {
_updateMarker = updateMarker;
public TimestampedCardCollection(long updateDate, List<SetCardData> setCardDataList) {
_updateDate = updateDate;
_setCardDataList = setCardDataList;
}
@@ -15,7 +15,7 @@ public class TimestampedCardCollection {
return _setCardDataList;
}
public String getUpdateMarker() {
return _updateMarker;
public long getUpdateDate() {
return _updateDate;
}
}

View File

@@ -75,7 +75,7 @@ public class MtgGoldfishProvider implements MtgDataProvider {
}
private TimestampedCardCollection updateDatabase() {
String updateMarker = String.valueOf(System.currentTimeMillis());
long updateDate = System.currentTimeMillis();
final List<SetCardData> resultArray = new LinkedList<SetCardData>();
try {
@@ -86,7 +86,7 @@ public class MtgGoldfishProvider implements MtgDataProvider {
} catch (IOException exp) {
LOG.error("Unable to download card list", exp);
}
return new TimestampedCardCollection(updateMarker, resultArray);
return new TimestampedCardCollection(updateDate, resultArray);
}
private List<MtgGoldfishCardSet> downloadSetListWithRetry() throws IOException {