From d6ccfa432f3ec8c8d66aa7304e5e4e7ec10ee600 Mon Sep 17 00:00:00 2001 From: Andrei Rebegea Date: Thu, 15 Jun 2017 11:14:14 +0000 Subject: [PATCH] Merged 5.2.N (5.2.2) to HEAD (5.2) 137044 gjames: Merged searchrep (5.2.1) to 5.2.N (5.2.1) 136707 gjames: SEARCH-348: Adding timezone to search api git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@137559 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../rest/api/search/impl/SearchMapper.java | 27 ++++++++++- .../rest/api/search/model/SearchQuery.java | 14 ++++-- .../rest/api/search/SearchMapperTests.java | 48 ++++++++++++++++++- 3 files changed, 84 insertions(+), 5 deletions(-) diff --git a/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java b/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java index 7d7b6d4040..d5a1fba6d6 100644 --- a/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java +++ b/source/java/org/alfresco/rest/api/search/impl/SearchMapper.java @@ -61,6 +61,7 @@ import org.alfresco.service.cmr.search.SearchParameters.SortDefinition; import org.alfresco.service.cmr.search.SearchParameters.SortDefinition.SortType; import org.alfresco.service.cmr.search.StatsRequestParameters; import org.alfresco.util.ParameterCheck; +import sun.util.calendar.ZoneInfo; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ALLOWABLEOPERATIONS; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ASSOCIATION; @@ -70,10 +71,12 @@ import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ASPECTNAMES; import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_PROPERTIES; import static org.alfresco.service.cmr.search.SearchService.*; +import java.time.ZoneId; import java.util.Arrays; import java.util.List; import java.util.ListIterator; import java.util.Optional; +import java.util.TimeZone; import java.util.regex.Matcher; /** @@ -122,7 +125,7 @@ public class SearchMapper fromFacetRange(sp, searchQuery.getFacetRange()); fromScope(sp, searchQuery.getScope(), searchRequestContext); fromLimits(sp, searchQuery.getLimits()); - + fromTimezone(sp, searchQuery.getTimezone()); return sp; } @@ -647,6 +650,28 @@ public class SearchMapper sp.setHighlight(highlight); } + /** + * Validates and sets the timezone + * @param sp SearchParameters + * @param timezone a valid java.time.ZoneId + */ + public void fromTimezone(SearchParameters sp, String timezone) + { + if (timezone!= null && !timezone.isEmpty()) + { + ZoneId validZoneId = null; + try + { + validZoneId = ZoneId.of(timezone); + sp.setTimezone(validZoneId.toString()); + } + catch (Exception e) + { + throw new IllegalArgumentException("Invalid timezone "+timezone); + } + } + } + /** * SearchParameters from the Limits object * @param sp SearchParameters diff --git a/source/java/org/alfresco/rest/api/search/model/SearchQuery.java b/source/java/org/alfresco/rest/api/search/model/SearchQuery.java index dfb6210bd3..1b8662258b 100644 --- a/source/java/org/alfresco/rest/api/search/model/SearchQuery.java +++ b/source/java/org/alfresco/rest/api/search/model/SearchQuery.java @@ -62,9 +62,11 @@ public class SearchQuery private final List pivots; private final List stats; private final RangeParameters facetRange; + private final String timezone; public static final SearchQuery EMPTY = new SearchQuery(null, null, null, null, null, null, - null,null, null, null, null,null, null, null, null, null, null, null,null); + null,null, null, null, null,null, null, null, null, + null, null, null,null, null); @JsonCreator public SearchQuery(@JsonProperty("query") Query query, @@ -85,7 +87,8 @@ public class SearchQuery @JsonProperty("facetIntervals")IntervalParameters facetIntervals, @JsonProperty("pivots") List pivots, @JsonProperty("stats") List stats, - @JsonProperty("facetRange") RangeParameters facetRange) + @JsonProperty("facetRange") RangeParameters facetRange, + @JsonProperty("timezone") String timezone) { this.query = query; this.includeRequest = includeRequest==null?false:includeRequest; @@ -106,6 +109,7 @@ public class SearchQuery this.pivots = pivots; this.stats = stats; this.facetRange = facetRange; + this.timezone = timezone; } public Query getQuery() @@ -201,5 +205,9 @@ public class SearchQuery { return facetRange; } - + + public String getTimezone() + { + return timezone; + } } diff --git a/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java b/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java index f24dc82aef..7cb79a84c6 100644 --- a/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java +++ b/source/test-java/org/alfresco/rest/api/search/SearchMapperTests.java @@ -511,6 +511,50 @@ public class SearchMapperTests } } + @Test + public void fromTimezone() throws Exception + { + SearchParameters searchParameters = new SearchParameters(); + //Doesn't error + searchMapper.fromTimezone(searchParameters, null); + searchMapper.fromTimezone(searchParameters, ""); + + try + { + searchMapper.fromTimezone(searchParameters, "nonsense"); + fail(); + } catch (IllegalArgumentException iae) + { + assertTrue(iae.getLocalizedMessage().contains("Invalid timezone")); + } + + try + { + searchMapper.fromTimezone(searchParameters, "GMT+25"); + fail(); + } catch (IllegalArgumentException iae) + { + assertTrue(iae.getLocalizedMessage().contains("Invalid timezone")); + } + + searchMapper.fromTimezone(searchParameters, "America/New_York"); + assertEquals("America/New_York", searchParameters.getTimezone()); + searchMapper.fromTimezone(searchParameters, "America/Denver"); + assertEquals("America/Denver", searchParameters.getTimezone()); + searchMapper.fromTimezone(searchParameters, "America/Los_Angeles"); + assertEquals("America/Los_Angeles", searchParameters.getTimezone()); + searchMapper.fromTimezone(searchParameters, "Europe/Madrid"); + assertEquals("Europe/Madrid", searchParameters.getTimezone()); + searchMapper.fromTimezone(searchParameters, "GMT+1"); + assertEquals("GMT+01:00", searchParameters.getTimezone()); + searchMapper.fromTimezone(searchParameters, "GMT-9"); + assertEquals("GMT-09:00", searchParameters.getTimezone()); + searchMapper.fromTimezone(searchParameters, "GMT+08:00"); + assertEquals("GMT+08:00", searchParameters.getTimezone()); + searchMapper.fromTimezone(searchParameters, "GMT-12:00"); + assertEquals("GMT-12:00", searchParameters.getTimezone()); + } + @Test public void fromFacetFields() throws Exception { @@ -866,7 +910,9 @@ public class SearchMapperTests private SearchQuery minimalQuery() { Query query = new Query("cmis", "foo", ""); - SearchQuery sq = new SearchQuery(query, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,null); + SearchQuery sq = new SearchQuery(query, null, null, null, null, null, null, null, + null, null, null, null, null, null, null, null, + null, null,null, null); return sq; }