org.opentestsystem.authoring.testauth.publish.AdministrationPublisherHelper.java Source code

Java tutorial

Introduction

Here is the source code for org.opentestsystem.authoring.testauth.publish.AdministrationPublisherHelper.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.authoring.testauth.publish;

import static org.opentestsystem.authoring.testauth.publish.PublisherUtil.FIXEDFORM_SEGMENT_FILTER;

import java.util.List;
import java.util.Map;

import org.joda.time.DateTime;
import org.opentestsystem.authoring.testauth.domain.AffinityGroup;
import org.opentestsystem.authoring.testauth.domain.Assessment;
import org.opentestsystem.authoring.testauth.domain.BlueprintElement;
import org.opentestsystem.authoring.testauth.domain.BlueprintReferenceType;
import org.opentestsystem.authoring.testauth.domain.Item;
import org.opentestsystem.authoring.testauth.domain.Segment;
import org.opentestsystem.authoring.testauth.publish.domain.Administration;
import org.opentestsystem.authoring.testauth.publish.domain.Purpose;
import org.opentestsystem.authoring.testauth.publish.domain.PurposeBaseContent;
import org.opentestsystem.authoring.testauth.publish.domain.TestItem;
import org.opentestsystem.authoring.testauth.publish.domain.TestSpecification;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.google.common.collect.Iterables;

@Component("administrationPublisherHelper")
public class AdministrationPublisherHelper extends BasePublisherHelper implements PublisherHelper {
    private static final Logger LOGGER = LoggerFactory.getLogger(AdministrationPublisherHelper.class);

    @Override
    public TestSpecification<Administration> createTestSpec(final Assessment assessment, final DateTime publishDate,
            final String version, final Purpose purpose,
            final TestSpecification<? extends PurposeBaseContent> seedingTestSpec) {
        final long start = System.currentTimeMillis();
        long dataRetrieval = System.currentTimeMillis(), itemPoolCreation = System.currentTimeMillis(),
                blueprintCreation = System.currentTimeMillis();
        long formCreation = System.currentTimeMillis(), segmentCreation = System.currentTimeMillis(),
                poolCreation = System.currentTimeMillis(),
                blueprintReferenceMapCreation = System.currentTimeMillis();

        final TestSpecification<Administration> testSpec = doGeneralTestSpecificationSetup(assessment, publishDate,
                version, purpose, Administration.class);

        final boolean seedIsComplete = seedingTestSpec != null && seedingTestSpec.getComplete() != null;
        final Administration specContent = seedIsComplete ? new Administration(seedingTestSpec.getComplete())
                : new Administration();
        if (!seedIsComplete) {
            final String assessmentId = assessment.getId();
            final List<Item> itemList = retrieveItemsForAssessment(assessmentId);
            final List<Segment> segmentList = retrieveSegmentList(assessmentId);
            final List<BlueprintElement> blueprintElementList = getActiveBlueprintElements(assessmentId);
            specContent.setBlueprintElementList(blueprintElementList);
            final List<AffinityGroup> affinityGroupList = getActiveAffinityGroups(assessmentId);
            dataRetrieval = System.currentTimeMillis();
            final Map<BlueprintReferenceType, Map<String, String>> blueprintReferenceMap = buildBlueprintReferenceMap(
                    assessment, segmentList, blueprintElementList, affinityGroupList);
            specContent.setBlueprintReferenceMap(blueprintReferenceMap);
            blueprintReferenceMapCreation = System.currentTimeMillis();

            // ITEMPOOL
            specContent
                    .setItemPool(setupItemPoolData(assessment, itemList, segmentList, affinityGroupList, version));
            final Map<String, TestItem> testItemMap = buildTestItemMap(specContent.getItemPool().getTestItemList());
            itemPoolCreation = System.currentTimeMillis();

            // BLUEPRINT (counts, different levels of the hierarchy)
            specContent.setTestBlueprintList(
                    setupBlueprintData(assessment, itemList, segmentList, blueprintElementList, affinityGroupList));
            blueprintCreation = System.currentTimeMillis();

            // SEGMENT
            specContent.setAdministrationSegmentList(setupAdminSegmentData(assessment, itemList, segmentList,
                    specContent.getTestBlueprintList(), blueprintElementList, affinityGroupList));
            segmentCreation = System.currentTimeMillis();

            // FORM
            formCreation = segmentCreation;
            if (Iterables.any(segmentList, FIXEDFORM_SEGMENT_FILTER)) {
                specContent.setTestFormList(setupTestFormData(assessment, segmentList, itemList, testItemMap));
                formCreation = System.currentTimeMillis();
            }

            // top-level pool property
            specContent.setPoolPropertyList(
                    buildTopLevelPoolPropertyList(assessmentId, itemList, segmentList, testItemMap));
            poolCreation = System.currentTimeMillis();
        }

        testSpec.setContent(specContent);
        if (LOGGER.isDebugEnabled()) {
            LOGGER.debug("data retrieval: " + (dataRetrieval - start) + "ms\n" + "reference map creation: "
                    + (blueprintReferenceMapCreation - dataRetrieval) + "ms\n" + "item pool: "
                    + (itemPoolCreation - blueprintReferenceMapCreation) + "ms\n" + "blueprint: "
                    + (blueprintCreation - itemPoolCreation) + "ms\n" + "admin segment: "
                    + (segmentCreation - blueprintCreation) + "ms\n" + "form: " + (formCreation - segmentCreation)
                    + "ms\n" + "test poolproperty: " + (poolCreation - formCreation) + "ms\n" + "total time: "
                    + (System.currentTimeMillis() - start) + "ms");
        }
        return testSpec;
    }
}