fi.vm.sade.organisaatio.dao.impl.YhteystietojenTyyppiDAOImpl.java Source code

Java tutorial

Introduction

Here is the source code for fi.vm.sade.organisaatio.dao.impl.YhteystietojenTyyppiDAOImpl.java

Source

/*
 *
 * Copyright (c) 2012 The Finnish Board of Education - Opetushallitus
 *
 * This program is free software:  Licensed under the EUPL, Version 1.1 or - as
 * soon as they will be approved by the European Commission - subsequent versions
 * of the EUPL (the "Licence");
 *
 * You may not use this work except in compliance with the Licence.
 * You may obtain a copy of the Licence at: http://www.osor.eu/eupl/
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * European Union Public Licence for more details.
 */
package fi.vm.sade.organisaatio.dao.impl;

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

import javax.persistence.Query;

import org.springframework.stereotype.Repository;

import fi.vm.sade.generic.dao.AbstractJpaDAOImpl;

import fi.vm.sade.organisaatio.dao.YhteystietojenTyyppiDAO;
import fi.vm.sade.organisaatio.model.YhteystietojenTyyppi;

/**
 * @author Antti Salonen
 */
@Repository
public class YhteystietojenTyyppiDAOImpl extends AbstractJpaDAOImpl<YhteystietojenTyyppi, Long>
        implements YhteystietojenTyyppiDAO {

    // TODO rename findLisatietoMetadataForOrganisaatioTyyppis

    private static final String QUERY1 = "SELECT distinct ol FROM YhteystietojenTyyppi ol "
            + "join fetch ol.sovellettavatOrganisaatioTyyppis as so WHERE so in (:organisaatioTyyppis)";
    //"join ol.sovellettavatOrganisaatioTyyppis as so join ol.sovellettavatOppilaitostyyppis as sol WHERE so in (:organisaatioTyyppis) OR sol in (:organisaatioTyyppis)";        
    //"WHERE ol.sovellettavatOrganisaatioTyyppis in (:organisaatioTyyppis)"     
    private static final String QUERY2 = "SELECT distinct ol FROM YhteystietojenTyyppi ol "
            + "join fetch ol.sovellettavatOppilaitostyyppis as so WHERE so in (:organisaatioTyyppis)";

    @Override
    public List<YhteystietojenTyyppi> findLisatietoMetadataForOrganisaatio(Collection<String> organisaatioTyyppis) {

        // TODO: vaihda kyttmn criteria apia JPA2 jlkeen
        Query query = getEntityManager().createQuery(QUERY1);
        // "SELECT ol FROM YhteystietojenTyyppi ol join fetch ol.sovellettavatOrganisaatios as so WHERE so in (:tyypit)");
        query.setParameter("organisaatioTyyppis", organisaatioTyyppis);
        List<YhteystietojenTyyppi> matches = query.getResultList();
        query = getEntityManager().createQuery(QUERY2);
        query.setParameter("organisaatioTyyppis", organisaatioTyyppis);
        matches.addAll(union(matches, query.getResultList()));
        return matches;//query.getResultList();
    }

    private List<YhteystietojenTyyppi> union(List<YhteystietojenTyyppi> list1, List<YhteystietojenTyyppi> list2) {
        List<YhteystietojenTyyppi> additions = new ArrayList<YhteystietojenTyyppi>();
        for (YhteystietojenTyyppi curYt : list2) {
            if (!contained(curYt, list1)) {
                additions.add(curYt);
            }
        }
        return additions;
    }

    private boolean contained(YhteystietojenTyyppi yt, List<YhteystietojenTyyppi> ytlist) {
        for (YhteystietojenTyyppi curYt : ytlist) {
            if (curYt.getOid().equals(yt.getOid())) {
                return true;
            }
        }
        return false;
    }

}