org.opentestsystem.authoring.testauth.service.impl.ItemEnemyRunner.java Source code

Java tutorial

Introduction

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

import static org.opentestsystem.authoring.testauth.service.impl.ItemHelper.ENEMY_PAIRING_TRANSFORMER;
import static org.opentestsystem.authoring.testauth.service.impl.ItemHelper.ITEM_TIB_IDENTIFIER_TRANSFORMER;

import java.util.ArrayList;
import java.util.List;

import org.opentestsystem.authoring.testauth.domain.Enemy;
import org.opentestsystem.authoring.testauth.domain.EnemyType;
import org.opentestsystem.authoring.testauth.domain.Item;
import org.opentestsystem.authoring.testauth.persistence.ItemRepository;
import org.opentestsystem.authoring.testauth.service.EnemyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import com.google.common.collect.Lists;

@Component
public class ItemEnemyRunner {
    private static final String ENEMY_METADATA_KEY = "EnemyItem";

    @Autowired
    private transient ItemRepository itemRepository;

    @Autowired
    private EnemyService enemyService;

    @Async
    @SuppressWarnings("unchecked")
    public void reconcileItemEnemyMetadata(final String assessmentId) {
        final List<Enemy> newEnemyToSaveList = Lists.newArrayList();
        final List<Enemy> existingEnemyList = this.enemyService.getEnemiesByAssessmentId(assessmentId);
        final List<String> existingEnemyPairings = Lists.transform(existingEnemyList, ENEMY_PAIRING_TRANSFORMER);
        final List<Item> itemList = this.itemRepository.findAllByAssessmentId(assessmentId);
        final List<String> allItemTibIdentifiers = Lists.transform(itemList, ITEM_TIB_IDENTIFIER_TRANSFORMER);
        for (final Item item : itemList) {
            final Object enemyObject = item.getAllIncludedMetadata().get(ENEMY_METADATA_KEY);
            if (enemyObject != null && enemyObject instanceof ArrayList) {
                final String itemIdentifier = item.getTibIdentifier();
                final List<String> enemyItemList = (List<String>) enemyObject;
                for (final String enemyItem : enemyItemList) {
                    if (allItemTibIdentifiers.contains(enemyItem)
                            && !existingEnemyPairings.contains(itemIdentifier + "|" + enemyItem)) {
                        final Enemy enemy = new Enemy();
                        enemy.setAssessmentId(assessmentId);
                        enemy.setObjectType1(EnemyType.ITEM);
                        enemy.setObjectId1(itemIdentifier);
                        enemy.setObjectType2(EnemyType.ITEM);
                        enemy.setObjectId2(enemyItem);
                        enemy.setObjectIdSearch(new String[] { enemy.getObjectId1(), enemy.getObjectId2() });
                        newEnemyToSaveList.add(enemy);
                    }
                }
            }
        }
        this.enemyService.saveEnemyList(newEnemyToSaveList);
    }
}