diff --git a/Kitodo/src/main/java/org/kitodo/production/services/data/ProcessService.java b/Kitodo/src/main/java/org/kitodo/production/services/data/ProcessService.java index aa5c35b9039..f6086e6c8e1 100644 --- a/Kitodo/src/main/java/org/kitodo/production/services/data/ProcessService.java +++ b/Kitodo/src/main/java/org/kitodo/production/services/data/ProcessService.java @@ -32,6 +32,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.math.BigInteger; import java.net.URI; import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; @@ -653,7 +654,7 @@ public List findByAnything(String searchQuery) throws DataException ProcessTypeField.PROJECT_TITLE.getKey(), ProcessTypeField.COMMENTS.getKey(), ProcessTypeField.WIKI_FIELD.getKey(), - ProcessTypeField.TEMPLATE_TITLE.getKey()).operator(Operator.AND); + ProcessTypeField.TEMPLATE_TITLE.getKey()).operator(Operator.AND).lenient(true); if (searchQuery.matches("^\\d*$")) { multiMatchQueryForProcessFields.fields().put(ProcessTypeField.ID.getKey(), 1.0f); @@ -810,7 +811,7 @@ public List findLinkableParentProcesses(String searchInput, int proj BoolQueryBuilder processQuery = new BoolQueryBuilder() .should(createSimpleWildcardQuery(ProcessTypeField.TITLE.getKey(), searchInput)); if (searchInput.matches("\\d*")) { - processQuery.should(new MatchQueryBuilder(ProcessTypeField.ID.getKey(), searchInput)); + processQuery.should(new MatchQueryBuilder(ProcessTypeField.ID.getKey(), searchInput).lenient(true)); } BoolQueryBuilder query = new BoolQueryBuilder().must(processQuery) .must(new MatchQueryBuilder(ProcessTypeField.PROJECT_ID.getKey(), projectId)) @@ -2113,6 +2114,8 @@ private Map iterateOverJsonObject(JSONObject xmlJSONObject) { Object value = xmlJSONObject.get(key); if (value instanceof String || value instanceof Integer) { json.put(prepareKey(key), value); + } else if (value instanceof Long || value instanceof BigInteger) { + json.put(prepareKey(key), value.toString()); } else if (value instanceof JSONObject) { JSONObject jsonObject = (JSONObject) value; Map map = iterateOverJsonObject(jsonObject); diff --git a/Kitodo/src/test/java/org/kitodo/production/services/data/ProcessServiceIT.java b/Kitodo/src/test/java/org/kitodo/production/services/data/ProcessServiceIT.java index 7dc7b63b582..2b654096ea7 100644 --- a/Kitodo/src/test/java/org/kitodo/production/services/data/ProcessServiceIT.java +++ b/Kitodo/src/test/java/org/kitodo/production/services/data/ProcessServiceIT.java @@ -229,6 +229,16 @@ public void shouldFindByMetadataContent() throws DataException { assertEquals(processNotFound, 1, processService.findByAnything("SecondMetaShort").size()); } + @Test + public void shouldFindByLongNumberInMetadata() throws DataException { + assertEquals(processNotFound, 1, processService + .findByMetadata(Collections.singletonMap("CatalogIDDigital", "999999999999999991")).size()); + assertEquals(processNotFound, 1, processService + .findByMetadata(Collections.singletonMap("CatalogIDDigital", "991022551489706476")).size()); + assertEquals(processNotFound, 1, processService + .findByMetadata(Collections.singletonMap("CatalogIDDigital", "999999999999999999999999991")).size()); + } + @Test public void shouldFindProcessWithUnderscore() throws DataException, DAOException { Project project = ServiceManager.getProjectService().getById(1); diff --git a/Kitodo/src/test/resources/metadata/5/meta.xml b/Kitodo/src/test/resources/metadata/5/meta.xml index 055d31fc1fb..045a27689db 100644 --- a/Kitodo/src/test/resources/metadata/5/meta.xml +++ b/Kitodo/src/test/resources/metadata/5/meta.xml @@ -15,6 +15,9 @@ Second process Second Proc + 999999999999999991 + 991022551489706476 + 999999999999999999999999991