Example usage for org.springframework.util LinkedMultiValueMap size

List of usage examples for org.springframework.util LinkedMultiValueMap size

Introduction

In this page you can find the example usage for org.springframework.util LinkedMultiValueMap size.

Prototype

@Override
    public int size() 

Source Link

Usage

From source file:de.tudarmstadt.ukp.csniper.webapp.evaluation.EvaluationRepository.java

/**
 * Persist the given items. If they already exist in the database, replace the item in the list
 * with the item from the database. Transient data (e.g. match offsets) is preserved.
 * //  www  .  j  a v  a  2 s .co m
 * @param aCreate
 *            true = missing evaluation items are created and returned; false = missing
 *            evaluation items are not created and returned
 */
@Transactional
public List<EvaluationItem> writeEvaluationItems(List<EvaluationItem> aItems, boolean aCreate) {
    long start = System.currentTimeMillis();

    log.info("Building index on in-memory items");
    List<EvaluationItem> result = new ArrayList<EvaluationItem>(aItems.size());
    LinkedMultiValueMap<String, EvaluationItem> idx = new LinkedMultiValueMap<String, EvaluationItem>();
    for (EvaluationItem i : aItems) {
        idx.add(i.getCollectionId() + "-" + i.getDocumentId() + "-" + i.getType(), i);
    }

    TypedQuery<EvaluationItem> query = entityManager
            .createQuery("FROM EvaluationItem WHERE collectionId = :collectionId AND documentId = "
                    + ":documentId AND type = :type", EvaluationItem.class);

    log.info("Merging with in-database items in " + idx.size() + " chunks");
    ProgressMeter progress = new ProgressMeter(idx.size());
    for (List<EvaluationItem> items : idx.values()) {
        progress.next();
        EvaluationItem ref = items.get(0);
        List<EvaluationItem> pItems = query.setParameter("collectionId", ref.getCollectionId())
                .setParameter("documentId", ref.getDocumentId()).setParameter("type", ref.getType())
                .getResultList();

        Comparator<EvaluationItem> cmp = new Comparator<EvaluationItem>() {
            @Override
            public int compare(EvaluationItem aO1, EvaluationItem aO2) {
                if (aO1.getBeginOffset() > aO2.getBeginOffset()) {
                    return 1;
                } else if (aO1.getBeginOffset() < aO2.getBeginOffset()) {
                    return -1;
                } else if (aO1.getEndOffset() > aO2.getEndOffset()) {
                    return 1;
                } else if (aO1.getEndOffset() < aO2.getEndOffset()) {
                    return -1;
                } else {
                    return 0;
                }
            }
        };

        Collections.sort(pItems, cmp);

        for (EvaluationItem item : items) {
            int i = Collections.binarySearch(pItems, item, cmp);
            if (i < 0) {
                if (aCreate) {
                    entityManager.persist(item);
                    result.add(item);
                }
            } else {
                EvaluationItem pItem = pItems.get(i);
                pItem.copyTransientData(item);
                result.add(pItem);
            }
        }

        log.info(progress);
    }

    log.info("writeEvaluationItems for " + aItems.size() + " items completed in "
            + (System.currentTimeMillis() - start) + " ms");

    return result;

    // String query = "FROM EvaluationItem WHERE collectionId = :collectionId AND documentId = "
    // +
    // ":documentId AND type = :type AND beginOffset = :beginOffset AND endOffset = :endOffset";
    // for (ListIterator<EvaluationItem> li = aItems.listIterator(); li.hasNext();) {
    // EvaluationItem item = li.next();
    // try {
    // EvaluationItem pItem = entityManager.createQuery(query, EvaluationItem.class)
    // .setParameter("collectionId", item.getCollectionId())
    // .setParameter("documentId", item.getDocumentId())
    // .setParameter("type", item.getType())
    // .setParameter("beginOffset", item.getBeginOffset())
    // .setParameter("endOffset", item.getEndOffset()).getSingleResult();
    //
    // // if item already exists, use that instead of persisting the new
    // pItem.copyTransientData(item);
    // li.set(pItem);
    // }
    // catch (NoResultException e) {
    // // persist item if not exists
    // if (aCreate) {
    // entityManager.persist(item);
    // }
    // }
    // }
}