org.opentestsystem.delivery.testreg.domain.search.AssessmentSearchRequest.java Source code

Java tutorial

Introduction

Here is the source code for org.opentestsystem.delivery.testreg.domain.search.AssessmentSearchRequest.java

Source

/*******************************************************************************
 * 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() };
    }
}