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
This commit is contained in:
Andrei Rebegea
2017-06-15 11:14:14 +00:00
parent 1ceecf1ebf
commit d6ccfa432f
3 changed files with 84 additions and 5 deletions

View File

@@ -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.SearchParameters.SortDefinition.SortType;
import org.alfresco.service.cmr.search.StatsRequestParameters; import org.alfresco.service.cmr.search.StatsRequestParameters;
import org.alfresco.util.ParameterCheck; 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_ALLOWABLEOPERATIONS;
import static org.alfresco.rest.api.Nodes.PARAM_INCLUDE_ASSOCIATION; 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.rest.api.Nodes.PARAM_INCLUDE_PROPERTIES;
import static org.alfresco.service.cmr.search.SearchService.*; import static org.alfresco.service.cmr.search.SearchService.*;
import java.time.ZoneId;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.ListIterator; import java.util.ListIterator;
import java.util.Optional; import java.util.Optional;
import java.util.TimeZone;
import java.util.regex.Matcher; import java.util.regex.Matcher;
/** /**
@@ -122,7 +125,7 @@ public class SearchMapper
fromFacetRange(sp, searchQuery.getFacetRange()); fromFacetRange(sp, searchQuery.getFacetRange());
fromScope(sp, searchQuery.getScope(), searchRequestContext); fromScope(sp, searchQuery.getScope(), searchRequestContext);
fromLimits(sp, searchQuery.getLimits()); fromLimits(sp, searchQuery.getLimits());
fromTimezone(sp, searchQuery.getTimezone());
return sp; return sp;
} }
@@ -647,6 +650,28 @@ public class SearchMapper
sp.setHighlight(highlight); 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 * SearchParameters from the Limits object
* @param sp SearchParameters * @param sp SearchParameters

View File

@@ -62,9 +62,11 @@ public class SearchQuery
private final List<Pivot> pivots; private final List<Pivot> pivots;
private final List<StatsRequestParameters> stats; private final List<StatsRequestParameters> stats;
private final RangeParameters facetRange; private final RangeParameters facetRange;
private final String timezone;
public static final SearchQuery EMPTY = new SearchQuery(null, null, null, null, null, null, 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 @JsonCreator
public SearchQuery(@JsonProperty("query") Query query, public SearchQuery(@JsonProperty("query") Query query,
@@ -85,7 +87,8 @@ public class SearchQuery
@JsonProperty("facetIntervals")IntervalParameters facetIntervals, @JsonProperty("facetIntervals")IntervalParameters facetIntervals,
@JsonProperty("pivots") List<Pivot> pivots, @JsonProperty("pivots") List<Pivot> pivots,
@JsonProperty("stats") List<StatsRequestParameters> stats, @JsonProperty("stats") List<StatsRequestParameters> stats,
@JsonProperty("facetRange") RangeParameters facetRange) @JsonProperty("facetRange") RangeParameters facetRange,
@JsonProperty("timezone") String timezone)
{ {
this.query = query; this.query = query;
this.includeRequest = includeRequest==null?false:includeRequest; this.includeRequest = includeRequest==null?false:includeRequest;
@@ -106,6 +109,7 @@ public class SearchQuery
this.pivots = pivots; this.pivots = pivots;
this.stats = stats; this.stats = stats;
this.facetRange = facetRange; this.facetRange = facetRange;
this.timezone = timezone;
} }
public Query getQuery() public Query getQuery()
@@ -202,4 +206,8 @@ public class SearchQuery
return facetRange; return facetRange;
} }
public String getTimezone()
{
return timezone;
}
} }

View File

@@ -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 @Test
public void fromFacetFields() throws Exception public void fromFacetFields() throws Exception
{ {
@@ -866,7 +910,9 @@ public class SearchMapperTests
private SearchQuery minimalQuery() private SearchQuery minimalQuery()
{ {
Query query = new Query("cmis", "foo", ""); 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; return sq;
} }