Handling of update date for Mtg card database.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user