/** * ============================================================================= * * 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.listener.solr; import static org.orcid.utils.solr.entities.SolrConstants.ORCID; import static org.orcid.utils.solr.entities.SolrConstants.PROFILE_LAST_MODIFIED_DATE; import java.io.IOException; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.orcid.utils.solr.entities.OrcidSolrDocument; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.dao.NonTransientDataAccessResourceException; import org.springframework.stereotype.Component; @Component public class SolrIndexUpdater { Logger LOG = LoggerFactory.getLogger(SolrIndexUpdater.class); @Resource(name = "solrServer") private SolrServer solrServer; public void persist(OrcidSolrDocument orcidSolrDocument) { try { solrServer.addBean(orcidSolrDocument); solrServer.commit(); } catch (SolrServerException se) { throw new NonTransientDataAccessResourceException("Error persisting to SOLR Server", se); } catch (IOException ioe) { throw new NonTransientDataAccessResourceException("IOException when persisting to SOLR", ioe); } } public Date retrieveLastModified(String orcid) { SolrQuery query = new SolrQuery(); query.setQuery(ORCID + ":\"" + orcid + "\""); query.setFields(PROFILE_LAST_MODIFIED_DATE); try { QueryResponse response = solrServer.query(query); List<SolrDocument> results = response.getResults(); if (results.isEmpty()) { return null; } else { return (Date) results.get(0).getFieldValue(PROFILE_LAST_MODIFIED_DATE); } } catch (SolrServerException e) { throw new NonTransientDataAccessResourceException("Error retrieving last modified date from SOLR Server", e); } } /** Updates solr with just the ORCID and lastUpdated, blanking the record. * * @param orcid * @param lastUpdated */ public void updateSolrIndexForLockedOrDeprecatedRecord(String orcid, Date lastUpdated) { OrcidSolrDocument profileIndexDocument = new OrcidSolrDocument(); profileIndexDocument.setOrcid(orcid); profileIndexDocument.setProfileLastModifiedDate(lastUpdated); this.persist(profileIndexDocument); } }