Java tutorial
/******************************************************************************* * Educational Online Test Delivery System * Copyright (c) 2013 American Institutes for Research * * Distributed under the AIR Open Source License, Version 1.0 * See accompanying file AIR-License-1_0.txt or at * http://www.smarterapp.org/documents/American_Institutes_for_Research_Open_Source_Software_License.pdf ******************************************************************************/ package org.opentestsystem.delivery.testreg.domain.search; import java.util.Arrays; import java.util.List; import java.util.Map; import org.joda.time.format.ISODateTimeFormat; import org.opentestsystem.delivery.testreg.domain.Assessment.AssessmentType; import org.opentestsystem.shared.search.domain.SearchFilter; import org.opentestsystem.shared.search.domain.SearchFilter.Operator; import org.opentestsystem.shared.search.domain.SearchFilter.SearchDataType; import org.springframework.util.StringUtils; /** * SearchRequest class for the domain object */ public class AssessmentSearchRequest extends AbstractTestRegNonEntitySearchRequest { private static final long serialVersionUID = 3878125280969640341L; public static final String SEARCH_RAW_XML = "rawXml"; private static final String SEARCH_RESOURCE = "/assessment"; private static final List<SearchFilter> SEARCH_FILTERS = Arrays.asList( new SearchFilter[] { new SearchFilter("entityId", "entityId", Operator.WLD_REG, SearchDataType.String), new SearchFilter("eligibilityType"), getISODateSearchFilter("beginWindow", "testWindow.beginWindow", Operator.GEQ), getISODateSearchFilter("endWindow", "testWindow.endWindow", Operator.LEQ), new SearchFilter("numGlobalOpportunities", "numGlobalOpportunities", Operator.EQ, SearchDataType.Number), new SearchFilter("testName", "testName", Operator.WLD_REG, SearchDataType.String), new SearchFilter("subjectCode", "subjectCode", Operator.WLD_REG, SearchDataType.String), new SearchFilter("grade", "grade", Operator.EQ, SearchDataType.String), new SearchFilter("version"), new SearchFilter("tenantId"), new SearchFilter("testLabel"), new SearchFilter("sourceTsb"), getAssessmentTypeSearchFilter("type") }); public AssessmentSearchRequest(final Map<String, String[]> inRequestMap) { super(inRequestMap); } @Override public List<SearchFilter> getSearchFilters() { return SEARCH_FILTERS; } @Override public String getSearchResource() { return SEARCH_RESOURCE; } @Override public boolean isSearchCriteriaRequired() { return false; } @SuppressWarnings("serial") private static SearchFilter getISODateSearchFilter(final String inSearchApiName, final String inDomainName, final Operator inOperator) { return new SearchFilter(inSearchApiName, inDomainName, inOperator, SearchDataType.ISO8601Date) { @Override public Object[] getSearchValue(final String... strings) { switch (getDataType()) { case ISO8601Date: return super.getSearchValue(getDateTime(strings[0])); default: return super.getSearchValue(strings); } } }; } @SuppressWarnings("serial") private static SearchFilter getAssessmentTypeSearchFilter(final String inSearchApiName) { return new SearchFilter(inSearchApiName) { @Override public Object[] getSearchValue(final String... strings) { switch (getDataType()) { case String: return convertToStringArray(strings[0]); default: return super.getSearchValue(strings); } } }; } private static String getDateTime(String dateTime) { return ISODateTimeFormat.dateTimeParser().parseLocalDate(dateTime).toDateTimeAtStartOfDay().toString(); } private static String[] convertToStringArray(String type) { if (type != null && type.contains(",")) { String[] types = StringUtils.commaDelimitedListToStringArray(type); String[] assessmentTypes = new String[types.length]; for (int i = 0; i < types.length; i++) { assessmentTypes[i] = AssessmentType.valueOf(types[i]).getValue(); } return assessmentTypes; } return new String[] { AssessmentType.valueOf(type).getValue() }; } }