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.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; } }