org.opentestsystem.delivery.testreg.service.impl.AccommodationServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.opentestsystem.delivery.testreg.service.impl.AccommodationServiceImpl.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.service.impl;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.apache.commons.beanutils.PropertyUtils;
import org.opentestsystem.delivery.testreg.domain.Accommodation;
import org.opentestsystem.delivery.testreg.domain.AccommodationResourceType;
import org.opentestsystem.delivery.testreg.domain.FormatType;
import org.opentestsystem.delivery.testreg.domain.Sb11NonEntity;
import org.opentestsystem.delivery.testreg.domain.Student;
import org.opentestsystem.delivery.testreg.persistence.Sb11NonEntityRepository;
import org.opentestsystem.delivery.testreg.service.MasterResourceAccommodationService;
import org.opentestsystem.shared.exception.LocalizedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * Implementation of Accommodation Service.
 */
@Service("accommodationService")
public class AccommodationServiceImpl<T extends Sb11NonEntity> extends Sb11NonEntityServiceImpl<T> {

    private static final Logger LOGGER = LoggerFactory.getLogger(AccommodationServiceImpl.class);

    @Resource
    private Map<FormatType, Sb11NonEntityRepository<Sb11NonEntity>> nonEntityRepositoryMap;

    @Autowired
    private MasterResourceAccommodationService masterResourceService;

    @Resource(name = "templateDownloadMap")
    private Map<String, List<String>> templateDownloadMap;

    /**
     * {@inheritDoc}
     */
    @Override
    public T saveDomainObject(final T domainObj) {
        // find student record
        Accommodation accommodation = (Accommodation) domainObj;
        setDefaultAccommodations(accommodation);
        Student student = findByAlternateKey(accommodation.createParentAlternateKeySearchRequest(), Student.class);
        if (student != null) {
            // add accommodations
            //student.getAccommodations ().add (accommodation);
            nonEntityRepositoryMap.get(student.getFormatType()).save(student);
            return domainObj;
        } else {
            throw new LocalizedException("accommodation.parent.notfound",
                    new String[] { accommodation.getStudentId(), accommodation.getStateAbbreviation() });
        }
    }

    @Override
    public List<T> updateDomainObjects(final List<T> inDomainObjList) {
        List<T> ret = new ArrayList<T>();
        if (inDomainObjList != null) {
            for (T t : inDomainObjList) {
                ret.add(updateDomainObject(t));
            }
        }
        return ret;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public T updateDomainObject(final T domainObj) {
        // find student record
        Accommodation accommodation = (Accommodation) domainObj;
        setDefaultAccommodations(accommodation);
        Student student = findByAlternateKey(accommodation.createParentAlternateKeySearchRequest(), Student.class);
        if (student != null) {
            /*    int index = student.getAccommodations ().indexOf (accommodation);
                if (index >= 0) {
                  student.getAccommodations ().remove (index);
                }
                // add accommodations to student and update
                student.getAccommodations ().add (accommodation);*/
            nonEntityRepositoryMap.get(student.getFormatType()).save(student);
            return domainObj;
        } else {
            throw new LocalizedException("accommodation.parent.notfound",
                    new String[] { accommodation.getStudentId(), accommodation.getStateAbbreviation() });
        }
    }

    private String getHeaderPropertyName(String headerCode) {
        String headerAlias = null;
        switch (headerCode) {
        case "Zoom":
            headerAlias = "printSize";
            break;
        case "ColorChoices":
            headerAlias = "colorContrast";
            break;
        case "TexttoSpeech":
            headerAlias = "textToSpeech";
        default:
            break;
        }
        if (headerAlias != null) {
            return headerAlias;
        }
        /*
         * if(headerCode.equals ("Zoom")){ headerCode = "printSize"; return
         * headerCode; } if(headerCode.equals ("ColorChoices")){ headerCode =
         * "colorContrast"; return headerCode; }
         */

        char c[] = headerCode.toCharArray();
        String headerProperty = Character.toLowerCase(c[0]) + headerCode.substring(1);
        return headerProperty;
    }

    private void setDefaultAccommodations(final Accommodation accommodation) {
        //List<String> headerCodes = templateDownloadMap.get (FormatType.DESIGNATEDSUPPORTSANDACCOMMODATIONS);
        HashMap<FormatType, List<String>> headerMap = masterResourceService.getAllCodes();
        List<String> headerCodes = headerMap.get(FormatType.DESIGNATEDSUPPORTSANDACCOMMODATIONS);
        HashMap<String, String> defaultOptions = masterResourceService.getAllDefaultOptions();
        HashMap<String, String> accResourceTypes = masterResourceService.getAllResourceTypes();
        for (String option : headerCodes) {
            if (defaultOptions.containsKey(option)) {
                String heaerProperty = getHeaderPropertyName(option);
                try {
                    Object value = PropertyUtils.getProperty(accommodation, heaerProperty);
                    if (value == null && defaultOptions.get(option) != null) {
                        List<String> defaultList = new ArrayList<String>();
                        if (accResourceTypes.get(option)
                                .equalsIgnoreCase(AccommodationResourceType.MultiSelectResource.name())) {
                            defaultList.add(defaultOptions.get(option));
                            PropertyUtils.setProperty(accommodation, heaerProperty, defaultList);
                        } else {
                            PropertyUtils.setProperty(accommodation, heaerProperty, defaultOptions.get(option));
                        }
                    }
                } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
                    e.printStackTrace();
                    LOGGER.error("Failure in accommodation service can't find field called " + heaerProperty
                            + " in accommodation, invalid rule", e);
                }
            }
        }
    }

}