diff --git a/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/client/Duniter4jClient.java b/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/client/Duniter4jClient.java index 242a0cfb1de489a136f1d4c5efaee3c7a740d1f9..d7afec69051ad3a6d0eeaab5b12add4dc4df8c80 100644 --- a/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/client/Duniter4jClient.java +++ b/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/client/Duniter4jClient.java @@ -62,6 +62,8 @@ public interface Duniter4jClient extends Bean, Client { Map<String, Object> getMandatoryFieldsById(String index, String type, String docId, String... fieldNames); + <T> T getMandatoryTypedFieldById(String index, String type, String docId, String fieldName); + String indexDocumentFromJson(String index, String type, String json); void updateDocumentFromJson(String index, String type, String id, String json); diff --git a/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/client/Duniter4jClientImpl.java b/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/client/Duniter4jClientImpl.java index 2f18e63bf7dc92fb2ab160414ce42c9b06fb6ac4..6af177c6becb90576b050530ae67c7f7f3ba7c49 100644 --- a/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/client/Duniter4jClientImpl.java +++ b/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/client/Duniter4jClientImpl.java @@ -325,6 +325,15 @@ public class Duniter4jClientImpl implements Duniter4jClient { return (T)getFieldById(index, type, docId, fieldName); } + @Override + public <T> T getMandatoryTypedFieldById(String index, String type, String docId, String fieldName) { + Object result = getFieldById(index, type, docId, fieldName); + if (result == null) { + throw new NotFoundException(String.format("Document [%s/%s/%s] missing value for mandatory field [%s].", index, type, docId, fieldName)); + } + return (T)result; + } + /** * Retrieve a document by id (safe mode) * @param docId diff --git a/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/rest/AbstractRestPostUpdateAction.java b/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/rest/AbstractRestPostUpdateAction.java index 42dd60bbddf320a20a4c1c125efacd7f967314c8..2daa5387110ac813a01e7a9b7b2bc2bcf88fb491 100644 --- a/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/rest/AbstractRestPostUpdateAction.java +++ b/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/rest/AbstractRestPostUpdateAction.java @@ -50,7 +50,7 @@ public abstract class AbstractRestPostUpdateAction extends BaseRestHandler { String typeName, JsonUpdater updater) { super(settings, controller, client); - log = Loggers.getLogger("duniter.rest" + indexName, settings, String.format("[%s]", indexName)); + log = Loggers.getLogger("duniter.rest." + indexName, settings, String.format("[%s]", indexName)); controller.registerHandler(POST, String.format("/%s/%s/{id}/_update", indexName, typeName), this); diff --git a/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/service/AbstractService.java b/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/service/AbstractService.java index cfc6306a451a73581545acfc95fff89694d7488a..a0616ed957c2ef69c57b5ee0592a6dd3e4d0282c 100644 --- a/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/service/AbstractService.java +++ b/duniter4j-es-core/src/main/java/org/duniter/elasticsearch/service/AbstractService.java @@ -170,7 +170,7 @@ public abstract class AbstractService implements Bean { protected void verifyTimeForUpdate(String index, String type, String id, JsonNode actualObj, boolean allowOldDocuments, String timeFieldName) { // Check time has been increase - fix #27 int actualTime = getMandatoryField(actualObj, timeFieldName).asInt(); - int existingTime = client.getTypedFieldById(index, type, id, timeFieldName); + int existingTime = client.getMandatoryTypedFieldById(index, type, id, timeFieldName); if (actualTime <= existingTime) { throw new InvalidTimeException(String.format("Invalid '%s' value: can not be less or equal to the previous value.", timeFieldName, timeFieldName)); }