/**
* =============================================================================
*
* 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.core.manager.read_only.impl;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.orcid.core.adapter.JpaJaxbEmailAdapter;
import org.orcid.core.manager.read_only.EmailManagerReadOnly;
import org.orcid.jaxb.model.common_v2.Visibility;
import org.orcid.jaxb.model.record_v2.Email;
import org.orcid.jaxb.model.record_v2.Emails;
import org.orcid.persistence.dao.EmailDao;
import org.orcid.persistence.jpa.entities.EmailEntity;
import org.orcid.pojo.ajaxForm.PojoUtil;
import org.springframework.cache.annotation.Cacheable;
/**
*
* @author Will Simpson
*
*/
public class EmailManagerReadOnlyImpl extends ManagerReadOnlyBaseImpl implements EmailManagerReadOnly {
@Resource
protected JpaJaxbEmailAdapter jpaJaxbEmailAdapter;
protected EmailDao emailDao;
public void setEmailDao(EmailDao emailDao) {
this.emailDao = emailDao;
}
@Override
public boolean emailExists(String email) {
return emailDao.emailExists(email);
}
@Override
public String findOrcidIdByEmail(String email) {
return emailDao.findOrcidIdByCaseInsenitiveEmail(email);
}
@Override
public boolean isPrimaryEmail(String orcid, String email) {
return emailDao.isPrimaryEmail(orcid, email);
}
@Override
@SuppressWarnings("rawtypes")
public Map<String, String> findOricdIdsByCommaSeparatedEmails(String csvEmail) {
Map<String, String> emailIds = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
List<String> emailList = new ArrayList<String>();
String [] emails = csvEmail.split(",");
for(String email : emails) {
if(StringUtils.isNotBlank(email.trim()))
emailList.add(email.trim());
}
List ids = emailDao.findIdByCaseInsensitiveEmail(emailList);
for (Iterator it = ids.iterator(); it.hasNext(); ) {
Object[] orcidEmail = (Object[]) it.next();
String orcid = (String) orcidEmail[0];
String email = (String) orcidEmail[1];
emailIds.put(email, orcid);
}
return emailIds;
}
@Override
@SuppressWarnings("rawtypes")
public Map<String, String> findIdsByEmails(List<String> emailList) {
Map<String, String> emailIds = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
List ids = emailDao.findIdByCaseInsensitiveEmail(emailList);
for (Iterator it = ids.iterator(); it.hasNext();) {
Object[] orcidEmail = (Object[]) it.next();
String orcid = (String) orcidEmail[0];
String email = (String) orcidEmail[1];
emailIds.put(email, orcid);
}
return emailIds;
}
@Override
public boolean isPrimaryEmailVerified(String orcid) {
return emailDao.isPrimaryEmailVerified(orcid);
}
@Override
@Cacheable(value = "emails", key = "#orcid.concat('-').concat(#lastModified)")
public Emails getEmails(String orcid, long lastModified) {
return getEmails(orcid, null);
}
@Override
@Cacheable(value = "public-emails", key = "#orcid.concat('-').concat(#lastModified)")
public Emails getPublicEmails(String orcid, long lastModified) {
return getEmails(orcid, Visibility.PUBLIC);
}
private Emails getEmails(String orcid, Visibility visibility) {
List<EmailEntity> entities = new ArrayList<EmailEntity>();
if(visibility == null) {
entities = emailDao.findByOrcid(orcid);
} else {
entities = emailDao.findByOrcid(orcid, Visibility.PUBLIC);
}
List<org.orcid.jaxb.model.record_v2.Email> emailList = jpaJaxbEmailAdapter.toEmailList(entities);
Emails emails = new Emails();
emails.setEmails(emailList);
return emails;
}
@Override
public boolean haveAnyEmailVerified(String orcid) {
List<EmailEntity> entities = emailDao.findByOrcid(orcid);
if(entities != null) {
for(EmailEntity email : entities) {
if(email.getVerified()) {
return true;
}
}
}
return false;
}
@Override
public EmailEntity findCaseInsensitive(String email) {
return emailDao.findCaseInsensitive(email);
}
@Override
public EmailEntity find(String email) {
return emailDao.find(email);
}
@Override
public Email findPrimaryEmail(String orcid) {
if(PojoUtil.isEmpty(orcid)) {
return null;
}
return jpaJaxbEmailAdapter.toEmail(emailDao.findPrimaryEmail(orcid));
}
}