From bd0931241845bc7fb0f745093ec5f96608a6115e Mon Sep 17 00:00:00 2001 From: bgamard Date: Sat, 15 Feb 2020 22:05:04 +0100 Subject: [PATCH] Closes #336: search document by file mime type --- .../docs/core/dao/criteria/DocumentCriteria.java | 13 +++++++++++++ .../core/util/indexing/LuceneIndexingHandler.java | 6 +++++- .../docs/rest/resource/DocumentResource.java | 4 ++++ .../com/sismics/docs/rest/TestDocumentResource.java | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/docs-core/src/main/java/com/sismics/docs/core/dao/criteria/DocumentCriteria.java b/docs-core/src/main/java/com/sismics/docs/core/dao/criteria/DocumentCriteria.java index 4e8ace08..09246c80 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/dao/criteria/DocumentCriteria.java +++ b/docs-core/src/main/java/com/sismics/docs/core/dao/criteria/DocumentCriteria.java @@ -76,6 +76,11 @@ public class DocumentCriteria { * A route is active. */ private Boolean activeRoute; + + /** + * MIME type of a file. + */ + private String mimeType; public List getTargetIdList() { return targetIdList; @@ -181,4 +186,12 @@ public class DocumentCriteria { public void setActiveRoute(Boolean activeRoute) { this.activeRoute = activeRoute; } + + public String getMimeType() { + return mimeType; + } + + public void setMimeType(String mimeType) { + this.mimeType = mimeType; + } } diff --git a/docs-core/src/main/java/com/sismics/docs/core/util/indexing/LuceneIndexingHandler.java b/docs-core/src/main/java/com/sismics/docs/core/util/indexing/LuceneIndexingHandler.java index a1ca6bae..3bf0bec8 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/util/indexing/LuceneIndexingHandler.java +++ b/docs-core/src/main/java/com/sismics/docs/core/util/indexing/LuceneIndexingHandler.java @@ -251,7 +251,7 @@ public class LuceneIndexingHandler implements IndexingHandler { " s.SHA_DELETEDATE_D IS NULL group by ac.ACL_SOURCEID_C) s on s.ACL_SOURCEID_C = d.DOC_ID_C " + " left join (SELECT count(f.FIL_ID_C) count, f.FIL_IDDOC_C " + " FROM T_FILE f " + - " WHERE f.FIL_DELETEDATE_D IS NULL group by f.FIL_IDDOC_C) f on f.FIL_IDDOC_C = d.DOC_ID_C "); + " WHERE f.FIL_DELETEDATE_D is null group by f.FIL_IDDOC_C) f on f.FIL_IDDOC_C = d.DOC_ID_C "); sb.append(" left join (select rs.*, rs3.idDocument " + "from T_ROUTE_STEP rs " + "join (select r.RTE_IDDOCUMENT_C idDocument, rs.RTP_IDROUTE_C idRoute, min(rs.RTP_ORDER_N) minOrder from T_ROUTE_STEP rs join T_ROUTE r on r.RTE_ID_C = rs.RTP_IDROUTE_C and r.RTE_DELETEDATE_D is null where rs.RTP_DELETEDATE_D is null and rs.RTP_ENDDATE_D is null group by rs.RTP_IDROUTE_C, r.RTE_IDDOCUMENT_C) rs3 on rs.RTP_IDROUTE_C = rs3.idRoute and rs.RTP_ORDER_N = rs3.minOrder " + @@ -324,6 +324,10 @@ public class LuceneIndexingHandler implements IndexingHandler { if (criteria.getShared() != null && criteria.getShared()) { criteriaList.add("s.count > 0"); } + if (criteria.getMimeType() != null) { + sb.append("left join T_FILE f0 on f0.FIL_IDDOC_C = d.DOC_ID_C and f0.FIL_DELETEDATE_D is null"); + criteriaList.add("f0.FIL_ID_C is not null"); + } if (criteria.getLanguage() != null) { criteriaList.add("d.DOC_LANGUAGE_C = :language"); parameterMap.put("language", criteria.getLanguage()); diff --git a/docs-web/src/main/java/com/sismics/docs/rest/resource/DocumentResource.java b/docs-web/src/main/java/com/sismics/docs/rest/resource/DocumentResource.java index fb762642..8588980c 100644 --- a/docs-web/src/main/java/com/sismics/docs/rest/resource/DocumentResource.java +++ b/docs-web/src/main/java/com/sismics/docs/rest/resource/DocumentResource.java @@ -569,6 +569,10 @@ public class DocumentResource extends BaseResource { documentCriteria.setLanguage(UUID.randomUUID().toString()); } break; + case "mime": + // New mime type criteria + documentCriteria.setMimeType(params[1]); + break; case "by": // New creator criteria User user = userDao.getActiveByUsername(params[1]); diff --git a/docs-web/src/test/java/com/sismics/docs/rest/TestDocumentResource.java b/docs-web/src/test/java/com/sismics/docs/rest/TestDocumentResource.java index 5f8e613f..59aafc7e 100644 --- a/docs-web/src/test/java/com/sismics/docs/rest/TestDocumentResource.java +++ b/docs-web/src/test/java/com/sismics/docs/rest/TestDocumentResource.java @@ -214,6 +214,7 @@ public class TestDocumentResource extends BaseJerseyTest { Assert.assertEquals(0, searchDocuments("tag:super !tag:hr", document1Token)); Assert.assertEquals(1, searchDocuments("shared:yes", document1Token)); Assert.assertEquals(2, searchDocuments("lang:eng", document1Token)); + Assert.assertEquals(1, searchDocuments("mime:image/png", document1Token)); Assert.assertEquals(1, searchDocuments("after:2010 before:2040-08 tag:super shared:yes lang:eng title description full:uranium", document1Token)); // Search documents (nothing)