/** * ============================================================================= * * 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 javax.annotation.Resource; import org.orcid.core.manager.ProfileEntityCacheManager; import org.orcid.core.manager.impl.OrcidUrlManager; import org.orcid.core.manager.read_only.ActivitiesSummaryManagerReadOnly; import org.orcid.core.manager.read_only.EmailManagerReadOnly; import org.orcid.core.manager.read_only.PersonDetailsManagerReadOnly; import org.orcid.core.manager.read_only.RecordManagerReadOnly; import org.orcid.jaxb.model.common_v2.LastModifiedDate; import org.orcid.jaxb.model.common_v2.OrcidIdentifier; import org.orcid.jaxb.model.common_v2.Source; import org.orcid.jaxb.model.message.CreationMethod; import org.orcid.jaxb.model.common_v2.OrcidType; import org.orcid.jaxb.model.record_v2.CompletionDate; import org.orcid.jaxb.model.record_v2.DeactivationDate; import org.orcid.jaxb.model.record_v2.Email; import org.orcid.jaxb.model.record_v2.Emails; import org.orcid.jaxb.model.record_v2.History; import org.orcid.jaxb.model.record_v2.Preferences; import org.orcid.jaxb.model.record_v2.Record; import org.orcid.jaxb.model.record_v2.SubmissionDate; import org.orcid.persistence.jpa.entities.ProfileEntity; import org.orcid.pojo.ajaxForm.PojoUtil; import org.orcid.utils.DateUtils; /** * * @author Angel Montenegro * */ public class RecordManagerReadOnlyImpl implements RecordManagerReadOnly { @Resource protected OrcidUrlManager orcidUrlManager; protected ProfileEntityCacheManager profileEntityCacheManager; protected EmailManagerReadOnly emailManager; protected ActivitiesSummaryManagerReadOnly activitiesSummaryManager; protected PersonDetailsManagerReadOnly personDetailsManager; public void setProfileEntityCacheManager(ProfileEntityCacheManager profileEntityCacheManager) { this.profileEntityCacheManager = profileEntityCacheManager; } public void setEmailManager(EmailManagerReadOnly emailManager) { this.emailManager = emailManager; } public void setActivitiesSummaryManager(ActivitiesSummaryManagerReadOnly activitiesSummaryManager) { this.activitiesSummaryManager = activitiesSummaryManager; } public void setPersonDetailsManager(PersonDetailsManagerReadOnly personDetailsManager) { this.personDetailsManager = personDetailsManager; } @Override public Record getPublicRecord(String orcid) { Record record = new Record(); record.setOrcidType(getOrcidType(orcid)); record.setHistory(getHistory(orcid)); record.setOrcidIdentifier(getOrcidIdentifier(orcid)); record.setPreferences(getPreferences(orcid)); record.setActivitiesSummary(activitiesSummaryManager.getPublicActivitiesSummary(orcid)); record.setPerson(personDetailsManager.getPublicPersonDetails(orcid)); return record; } @Override public Record getRecord(String orcid) { Record record = new Record(); record.setOrcidType(getOrcidType(orcid)); record.setHistory(getHistory(orcid)); record.setOrcidIdentifier(getOrcidIdentifier(orcid)); record.setPreferences(getPreferences(orcid)); record.setActivitiesSummary(activitiesSummaryManager.getActivitiesSummary(orcid)); record.setPerson(personDetailsManager.getPersonDetails(orcid)); return record; } @Override public OrcidIdentifier getOrcidIdentifier(String orcid) { OrcidIdentifier orcidIdentifier = new OrcidIdentifier(); orcidIdentifier.setPath(orcid); orcidIdentifier.setHost(orcidUrlManager.getBaseHost()); orcidIdentifier.setUri(orcidUrlManager.getBaseUriHttp() + "/" + orcid); return orcidIdentifier; } private OrcidType getOrcidType(String orcid) { ProfileEntity profile = profileEntityCacheManager.retrieve(orcid); return profile.getOrcidType(); } private Preferences getPreferences(String orcid) { Preferences preferences = new Preferences(); ProfileEntity profile = profileEntityCacheManager.retrieve(orcid); org.orcid.jaxb.model.common_v2.Locale profileEntityLocale = profile.getLocale(); if (profileEntityLocale != null) { preferences.setLocale(profileEntityLocale); } return preferences; } private History getHistory(String orcid) { History history = new History(); ProfileEntity profile = profileEntityCacheManager.retrieve(orcid); history.setClaimed(profile.getClaimed()); if(profile.getCompletedDate() != null) { history.setCompletionDate(new CompletionDate(DateUtils.convertToXMLGregorianCalendar(profile.getCompletedDate()))); } if(!PojoUtil.isEmpty(profile.getCreationMethod())) { history.setCreationMethod(CreationMethod.fromValue(profile.getCreationMethod())); } if(profile.getDeactivationDate() != null) { history.setDeactivationDate(new DeactivationDate(DateUtils.convertToXMLGregorianCalendar(profile.getDeactivationDate()))); } if(profile.getLastModified() != null) { history.setLastModifiedDate(new LastModifiedDate(DateUtils.convertToXMLGregorianCalendar(profile.getLastModified()))); } if(profile.getSubmissionDate() != null) { history.setSubmissionDate(new SubmissionDate(DateUtils.convertToXMLGregorianCalendar(profile.getSubmissionDate()))); } if(profile.getSource() != null) { history.setSource(new Source(profile.getSource().getSourceId())); } boolean verfiedEmail = false; boolean verfiedPrimaryEmail = false; Emails emails = emailManager.getEmails(orcid, profile.getLastModified().getTime()); if (emails != null) { for (Email email : emails.getEmails()) { if (email.isVerified()) { verfiedEmail = true; if (email.isPrimary()) { verfiedPrimaryEmail = true; break; } } } } history.setVerifiedEmail(verfiedEmail); history.setVerifiedPrimaryEmail(verfiedPrimaryEmail); return history; } }