From 4dc5cb12b345485b3fb34d5dd51ef8676892d870 Mon Sep 17 00:00:00 2001 From: jendib Date: Wed, 31 Jul 2013 20:57:12 +0200 Subject: [PATCH] Search on tags (server) --- .../docs/core/dao/jpa/DocumentDao.java | 7 ++++++ .../dao/jpa/criteria/DocumentCriteria.java | 24 +++++++++++++++++++ .../src/test/resources/hibernate.properties | 2 +- docs-parent/TODO | 2 +- .../docs/rest/resource/DocumentResource.java | 4 +++- .../docs/rest/TestDocumentResource.java | 12 ++++++++++ 6 files changed, 48 insertions(+), 3 deletions(-) diff --git a/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/DocumentDao.java b/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/DocumentDao.java index 4f4c4684..c0d8c670 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/DocumentDao.java +++ b/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/DocumentDao.java @@ -112,6 +112,9 @@ public class DocumentDao { StringBuilder sb = new StringBuilder("select d.DOC_ID_C c0, d.DOC_TITLE_C c1, d.DOC_DESCRIPTION_C c2, d.DOC_CREATEDATE_D c3"); sb.append(" from T_DOCUMENT d "); + if (criteria.getTagIdList() != null && !criteria.getTagIdList().isEmpty()) { + sb.append(" left join T_DOCUMENT_TAG dt on dt.DOT_IDDOCUMENT_C = d.DOC_ID_C "); + } // Adds search criteria List criteriaList = new ArrayList(); @@ -132,6 +135,10 @@ public class DocumentDao { criteriaList.add("d.DOC_CREATEDATE_D <= :createDateMax"); parameterMap.put("createDateMax", criteria.getCreateDateMax()); } + if (criteria.getTagIdList() != null && !criteria.getTagIdList().isEmpty()) { + criteriaList.add("dt.DOT_IDTAG_C in :tagIdList"); + parameterMap.put("tagIdList", criteria.getTagIdList()); + } criteriaList.add("d.DOC_DELETEDATE_D is null"); diff --git a/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/criteria/DocumentCriteria.java b/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/criteria/DocumentCriteria.java index 70074657..250b1ddc 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/criteria/DocumentCriteria.java +++ b/docs-core/src/main/java/com/sismics/docs/core/dao/jpa/criteria/DocumentCriteria.java @@ -1,6 +1,7 @@ package com.sismics.docs.core.dao.jpa.criteria; import java.util.Date; +import java.util.List; /** @@ -29,6 +30,11 @@ public class DocumentCriteria { */ private Date createDateMax; + /** + * Tag IDs. + */ + private List tagIdList; + /** * Getter of userId. * @@ -100,4 +106,22 @@ public class DocumentCriteria { public void setCreateDateMax(Date createDateMax) { this.createDateMax = createDateMax; } + + /** + * Getter of tagIdList. + * + * @return the tagIdList + */ + public List getTagIdList() { + return tagIdList; + } + + /** + * Setter of tagIdList. + * + * @param tagIdList tagIdList + */ + public void setTagIdList(List tagIdList) { + this.tagIdList = tagIdList; + } } diff --git a/docs-core/src/test/resources/hibernate.properties b/docs-core/src/test/resources/hibernate.properties index 9cb18f6f..44bb9ddf 100644 --- a/docs-core/src/test/resources/hibernate.properties +++ b/docs-core/src/test/resources/hibernate.properties @@ -1,5 +1,5 @@ hibernate.connection.driver_class=org.hsqldb.jdbcDriver -hibernate.connection.url=jdbc:hsqldb:mem:důs +hibernate.connection.url=jdbc:hsqldb:mem:docs hibernate.connection.username=sa hibernate.connection.password= hibernate.hbm2ddl.auto=none diff --git a/docs-parent/TODO b/docs-parent/TODO index 27e966ce..655ff384 100644 --- a/docs-parent/TODO +++ b/docs-parent/TODO @@ -1,3 +1,3 @@ -- Client/server side search on tags +- Client side search on tags - Client/server side edition of existing tag names - Server side reordering files \ No newline at end of file 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 0e670784..b9d5f08b 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 @@ -108,7 +108,8 @@ public class DocumentResource extends BaseResource { @QueryParam("asc") Boolean asc, @QueryParam("search") String search, @QueryParam("create_date_min") String createDateMinStr, - @QueryParam("create_date_max") String createDateMaxStr) throws JSONException { + @QueryParam("create_date_max") String createDateMaxStr, + @QueryParam("tags[]") List tagIdList) throws JSONException { if (!authenticate()) { throw new ForbiddenClientException(); } @@ -127,6 +128,7 @@ public class DocumentResource extends BaseResource { documentCriteria.setUserId(principal.getId()); documentCriteria.setCreateDateMin(createDateMin); documentCriteria.setCreateDateMax(createDateMax); + documentCriteria.setTagIdList(tagIdList); if (!Strings.isNullOrEmpty(search)) { documentCriteria.setSearch(search); } 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 04cf000f..c977114a 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 @@ -98,6 +98,18 @@ public class TestDocumentResource extends BaseJerseyTest { Assert.assertTrue(documents.length() == 1); Assert.assertEquals(document1Id, documents.getJSONObject(0).getString("id")); + // Search documents by tag + documentResource = resource().path("/document/list"); + documentResource.addFilter(new CookieAuthenticationFilter(document1Token)); + getParams = new MultivaluedMapImpl(); + getParams.putSingle("tags[]", tag1Id); + response = documentResource.queryParams(getParams).get(ClientResponse.class); + json = response.getEntity(JSONObject.class); + Assert.assertEquals(Status.OK, Status.fromStatusCode(response.getStatus())); + documents = json.getJSONArray("documents"); + Assert.assertTrue(documents.length() == 1); + Assert.assertEquals(document1Id, documents.getJSONObject(0).getString("id")); + // Search documents (nothing) documentResource = resource().path("/document/list"); documentResource.addFilter(new CookieAuthenticationFilter(document1Token));