/** * ============================================================================= * * ORCID (R) Open Source * http://orcid.org * * Copyright (c) 2012-2014 ORCID, Inc. * Licensed under an MIT-Style License (MIT) * http://orcid.org/open-source-license * * This copyright and license information (including a link to the full license) * shall be included in its entirety in all copies or substantial portion of * the software. * * ============================================================================= */ package org.orcid.persistence.dao.impl; import java.util.List; import javax.persistence.Query; import javax.persistence.TypedQuery; import org.orcid.jaxb.model.message.Iso3166Country; import org.orcid.persistence.dao.OrgDao; import org.orcid.persistence.jpa.entities.AmbiguousOrgEntity; import org.orcid.persistence.jpa.entities.OrgEntity; import org.springframework.transaction.annotation.Transactional; /** * * @author Will Simpson * */ public class OrgDaoImpl extends GenericDaoImpl<OrgEntity, Long> implements OrgDao { public OrgDaoImpl() { super(OrgEntity.class); } @Override public List<AmbiguousOrgEntity> getAmbiguousOrgs(int firstResult, int maxResults) { // Order by ID so we can page through in a predictable way TypedQuery<AmbiguousOrgEntity> query = entityManager.createQuery("from AmbiguousOrgEntity order by id", AmbiguousOrgEntity.class); query.setFirstResult(firstResult); query.setMaxResults(maxResults); return query.getResultList(); } @Override public List<OrgEntity> getOrgs(String searchTerm, int firstResult, int maxResults) { TypedQuery<OrgEntity> query = entityManager.createQuery("from OrgEntity where lower(name) like lower(:searchTerm) || '%' order by name", OrgEntity.class); query.setParameter("searchTerm", searchTerm); query.setFirstResult(firstResult); query.setMaxResults(maxResults); return query.getResultList(); } @Override public List<OrgEntity> getOrgsByName(String searchTerm) { TypedQuery<OrgEntity> query = entityManager.createQuery("from OrgEntity where lower(name) like lower(:searchTerm) order by name", OrgEntity.class); query.setParameter("searchTerm", searchTerm); return query.getResultList(); } @Override public OrgEntity findByNameCityRegionAndCountry(String name, String city, String region, Iso3166Country country) { TypedQuery<OrgEntity> query = entityManager.createQuery( "from OrgEntity where name = :name and city = :city and (region = :region or (region is null and :region is null)) and country = :country", OrgEntity.class); query.setParameter("name", name); query.setParameter("city", city); query.setParameter("region", region); query.setParameter("country", country); List<OrgEntity> results = query.getResultList(); return results.isEmpty() ? null : results.get(0); } /** * Deletes all orgs where the source matches the give app id * @param clientSourceId the app id * */ @Override @Transactional public void removeOrgsByClientSourceId(String clientSourceId) { Query query = entityManager.createNativeQuery("delete from org where client_source_id=:clientSourceId"); query.setParameter("clientSourceId", clientSourceId); query.executeUpdate(); } }