use of org.orcid.jaxb.model.record_rc4.Funding in project ORCID-Source by ORCID.
the class JSONFundingExternalIdentifiersConverterV2Test method getFunding.
private Funding getFunding() throws JAXBException {
JAXBContext context = JAXBContext.newInstance(new Class[] { Funding.class });
Unmarshaller unmarshaller = context.createUnmarshaller();
String name = "/record_2.0/samples/read_samples/funding-full-2.0.xml";
InputStream inputStream = getClass().getResourceAsStream(name);
return (Funding) unmarshaller.unmarshal(inputStream);
}
use of org.orcid.jaxb.model.record_rc4.Funding in project ORCID-Source by ORCID.
the class SourceInActivitiesTest method sourceDoesntChange_Funding_Test.
@Test
@Transactional
public void sourceDoesntChange_Funding_Test() {
when(mockSourceManager.retrieveSourceEntity()).thenReturn(new SourceEntity(new ProfileEntity(userOrcid)));
Funding funding1 = getFunding(userOrcid);
assertNotNull(funding1);
assertNotNull(funding1.getTitle());
assertNotNull(funding1.getTitle().getTitle());
assertFalse(PojoUtil.isEmpty(funding1.getTitle().getTitle().getContent()));
assertEquals(userOrcid, funding1.getSource().retrieveSourcePath());
when(mockSourceManager.retrieveSourceEntity()).thenReturn(new SourceEntity(new ClientDetailsEntity(CLIENT_1_ID)));
Funding funding2 = getFunding(userOrcid);
assertNotNull(funding2.getTitle());
assertNotNull(funding2.getTitle().getTitle());
assertFalse(PojoUtil.isEmpty(funding2.getTitle().getTitle().getContent()));
assertEquals(CLIENT_1_ID, funding2.getSource().retrieveSourcePath());
when(mockSourceManager.retrieveSourceEntity()).thenReturn(new SourceEntity(new ClientDetailsEntity(CLIENT_2_ID)));
Funding funding3 = getFunding(userOrcid);
assertNotNull(funding3.getTitle());
assertNotNull(funding3.getTitle().getTitle());
assertFalse(PojoUtil.isEmpty(funding3.getTitle().getTitle().getContent()));
assertEquals(CLIENT_2_ID, funding3.getSource().retrieveSourcePath());
when(mockSourceManager.retrieveSourceEntity()).thenReturn(new SourceEntity(new ProfileEntity(userOrcid)));
Funding funding4 = getFunding(userOrcid);
assertNotNull(funding4.getTitle());
assertNotNull(funding4.getTitle().getTitle());
assertFalse(PojoUtil.isEmpty(funding4.getTitle().getTitle().getContent()));
assertEquals(userOrcid, funding4.getSource().retrieveSourcePath());
Funding fromDb1 = profileFundingManager.getFunding(userOrcid, funding1.getPutCode());
assertNotNull(fromDb1);
assertEquals(userOrcid, fromDb1.getSource().retrieveSourcePath());
Funding fromDb2 = profileFundingManager.getFunding(userOrcid, funding2.getPutCode());
assertNotNull(fromDb2);
assertEquals(CLIENT_1_ID, fromDb2.getSource().retrieveSourcePath());
Funding fromDb3 = profileFundingManager.getFunding(userOrcid, funding3.getPutCode());
assertNotNull(fromDb3);
assertEquals(CLIENT_2_ID, fromDb3.getSource().retrieveSourcePath());
Funding fromDb4 = profileFundingManager.getFunding(userOrcid, funding4.getPutCode());
assertNotNull(fromDb4);
assertEquals(userOrcid, fromDb4.getSource().retrieveSourcePath());
}
use of org.orcid.jaxb.model.record_rc4.Funding in project ORCID-Source by ORCID.
the class SolrMessageProcessor method updateSolrIndex.
private void updateSolrIndex(BaseMessage message) {
String orcid = message.getOrcid();
LOG.info("Updating using Record " + orcid + " in SOLR index");
if (!isSolrIndexingEnabled) {
LOG.info("Solr indexing is disabled");
return;
}
try {
org.orcid.jaxb.model.record_v2.Record record = orcid20ApiClient.fetchPublicRecord(message);
// Remove deactivated records from SOLR index
if (record.getHistory() != null && record.getHistory().getDeactivationDate() != null && record.getHistory().getDeactivationDate().getValue() != null) {
solrUpdater.processInvalidRecord(orcid);
recordStatusManager.markAsSent(orcid, AvailableBroker.SOLR);
return;
}
// get detailed funding so we can discover org name and id
List<Funding> fundings = new ArrayList<Funding>();
if (record.getActivitiesSummary() != null && record.getActivitiesSummary().getFundings() != null && record.getActivitiesSummary().getFundings().getFundingGroup() != null) {
for (FundingGroup group : record.getActivitiesSummary().getFundings().getFundingGroup()) {
if (group.getFundingSummary() != null) {
for (FundingSummary f : group.getFundingSummary()) {
fundings.add(orcid20ApiClient.fetchFunding(record.getOrcidIdentifier().getPath(), f.getPutCode()));
}
}
}
}
solrUpdater.persist(recordConv.convert(record, fundings));
recordStatusManager.markAsSent(orcid, AvailableBroker.SOLR);
} catch (LockedRecordException lre) {
LOG.error("Record " + orcid + " is locked");
solrUpdater.processInvalidRecord(orcid);
recordStatusManager.markAsSent(orcid, AvailableBroker.SOLR);
} catch (DeprecatedRecordException dre) {
LOG.error("Record " + orcid + " is deprecated");
solrUpdater.processInvalidRecord(orcid);
recordStatusManager.markAsSent(orcid, AvailableBroker.SOLR);
} catch (Exception e) {
LOG.error("Unable to fetch record " + orcid + " for SOLR");
LOG.error(e.getMessage(), e);
recordStatusManager.markAsFailed(orcid, AvailableBroker.SOLR);
}
}
use of org.orcid.jaxb.model.record_rc4.Funding in project ORCID-Source by ORCID.
the class OrcidRecordToSolrDocumentTest method testNonSchemaExternalID.
@Test
public void testNonSchemaExternalID() throws JAXBException {
// as above, but with PDB identifier
Record record = getRecord("/v20recordWithPDB.xml");
OrcidRecordToSolrDocument v20 = new OrcidRecordToSolrDocument(false);
OrcidSolrDocument v20Doc = v20.convert(record, new ArrayList<Funding>());
Assert.assertEquals("cite-self", v20Doc.getSelfIds().get("cit-self").get(0));
Assert.assertEquals("pdb-value-self", v20Doc.getSelfIds().get("pdb-self").get(0));
Assert.assertEquals("cit-part-of", v20Doc.getPartOfIds().get("cit-part-of").get(0));
Assert.assertEquals("pdb-value-part-of", v20Doc.getPartOfIds().get("pdb-part-of").get(0));
Assert.assertTrue(v20Doc.getDigitalObjectIds().containsAll(v20Doc.getSelfIds().get("doi-self")));
Assert.assertTrue(v20Doc.getSelfIds().get("doi-self").containsAll(v20Doc.getDigitalObjectIds()));
Assert.assertTrue(v20Doc.getOtherIdentifierType().contains("pdb-value-self"));
Assert.assertTrue(v20Doc.getOtherIdentifierType().contains("pdb-value-part-of"));
}
use of org.orcid.jaxb.model.record_rc4.Funding in project ORCID-Source by ORCID.
the class OrcidRecordToSolrDocument method convert.
public OrcidSolrDocument convert(Record record, List<Funding> fundings) {
OrcidSolrDocument profileIndexDocument = new OrcidSolrDocument();
profileIndexDocument.setOrcid(record.getOrcidIdentifier().getPath());
if (record.getHistory() != null) {
if (record.getHistory().getLastModifiedDate() != null) {
profileIndexDocument.setProfileLastModifiedDate(record.getHistory().getLastModifiedDate().getValue().toGregorianCalendar().getTime());
}
if (record.getHistory().getSubmissionDate() != null) {
profileIndexDocument.setProfileSubmissionDate(record.getHistory().getSubmissionDate().getValue().toGregorianCalendar().getTime());
}
}
if (record.getDeprecated() != null) {
profileIndexDocument.setPrimaryRecord(record.getDeprecated().getPrimaryRecord() != null ? record.getDeprecated().getPrimaryRecord().getOrcidIdentifier().getPath() : null);
}
if (record.getPerson() != null) {
if (record.getPerson().getName() != null) {
profileIndexDocument.setFamilyName(record.getPerson().getName().getFamilyName() != null ? record.getPerson().getName().getFamilyName().getContent() : null);
profileIndexDocument.setGivenNames(record.getPerson().getName().getGivenNames() != null ? record.getPerson().getName().getGivenNames().getContent() : null);
profileIndexDocument.setCreditName(record.getPerson().getName().getCreditName() != null ? record.getPerson().getName().getCreditName().getContent() : null);
}
if (record.getPerson().getOtherNames() != null) {
if (record.getPerson().getOtherNames().getOtherNames() != null && !record.getPerson().getOtherNames().getOtherNames().isEmpty()) {
List<String> names = new ArrayList<String>();
for (org.orcid.jaxb.model.record_v2.OtherName on : record.getPerson().getOtherNames().getOtherNames()) {
names.add(on.getContent());
}
profileIndexDocument.setOtherNames(names);
}
}
if (record.getPerson().getEmails() != null && record.getPerson().getEmails().getEmails() != null) {
for (org.orcid.jaxb.model.record_v2.Email e : record.getPerson().getEmails().getEmails()) {
profileIndexDocument.addEmailAddress(e.getEmail());
}
}
// weird, the type is not indexed...!
if (record.getPerson().getExternalIdentifiers() != null && record.getPerson().getExternalIdentifiers().getExternalIdentifiers() != null) {
List<String> extIdOrcids = new ArrayList<String>();
List<String> extIdRefs = new ArrayList<String>();
List<String> extIdOrcidsAndRefs = new ArrayList<String>();
for (PersonExternalIdentifier externalIdentifier : record.getPerson().getExternalIdentifiers().getExternalIdentifiers()) {
String sourcePath = null;
if (externalIdentifier.getSource() != null && externalIdentifier.getSource().retrieveSourcePath() != null) {
sourcePath = externalIdentifier.getSource().retrieveSourcePath();
extIdOrcids.add(sourcePath);
}
if (externalIdentifier.getValue() != null) {
// weird, the type is not indexed...!
extIdRefs.add(externalIdentifier.getValue());
}
if (NullUtils.noneNull(sourcePath, externalIdentifier.getValue())) {
extIdOrcidsAndRefs.add(sourcePath + "=" + externalIdentifier.getValue());
}
}
if (!extIdOrcids.isEmpty()) {
profileIndexDocument.setExternalIdSources(extIdOrcids);
}
if (!extIdRefs.isEmpty()) {
profileIndexDocument.setExternalIdReferences(extIdRefs);
}
if (!extIdOrcidsAndRefs.isEmpty()) {
profileIndexDocument.setExternalIdSourcesAndReferences(extIdOrcidsAndRefs);
}
}
// weird, we only index keywords if activities exist...!
if (record.getActivitiesSummary() != null) {
if (record.getPerson().getKeywords() != null && record.getPerson().getKeywords().getKeywords() != null) {
List<String> keywordValues = new ArrayList<String>();
for (org.orcid.jaxb.model.record_v2.Keyword keyword : record.getPerson().getKeywords().getKeywords()) {
keywordValues.add(keyword.getContent());
}
profileIndexDocument.setKeywords(keywordValues);
}
}
if (record.getActivitiesSummary() != null && record.getActivitiesSummary().getWorks() != null && record.getActivitiesSummary().getWorks().getWorkGroup() != null) {
// work ids
Map<String, List<String>> allExternalIdentifiers = new HashMap<String, List<String>>();
Map<String, List<String>> partOf = new HashMap<String, List<String>>();
Map<String, List<String>> self = new HashMap<String, List<String>>();
Set<String> workTitles = new HashSet<String>();
for (WorkGroup wg : record.getActivitiesSummary().getWorks().getWorkGroup()) {
if (wg.getWorkSummary() != null) {
for (WorkSummary w : wg.getWorkSummary()) {
// have to use summaries here as group does not include part-of
if (w.getExternalIdentifiers() != null && w.getExternalIdentifiers().getExternalIdentifier() != null) {
for (ExternalID id : w.getExternalIdentifiers().getExternalIdentifier()) {
// old way
if (!allExternalIdentifiers.containsKey(id.getType())) {
allExternalIdentifiers.put(id.getType(), new ArrayList<String>());
}
if (!allExternalIdentifiers.get(id.getType()).contains(id.getValue())) {
allExternalIdentifiers.get(id.getType()).add(id.getValue());
}
// new way
if (Relationship.SELF.equals(id.getRelationship())) {
if (!self.containsKey(id.getType() + SolrConstants.DYNAMIC_SELF)) {
self.put(id.getType() + SolrConstants.DYNAMIC_SELF, new ArrayList<String>());
}
if (!self.get(id.getType() + SolrConstants.DYNAMIC_SELF).contains(id.getValue())) {
self.get(id.getType() + SolrConstants.DYNAMIC_SELF).add(id.getValue());
}
}
if (Relationship.PART_OF.equals(id.getRelationship())) {
if (!partOf.containsKey(id.getType() + SolrConstants.DYNAMIC_PART_OF)) {
partOf.put(id.getType() + SolrConstants.DYNAMIC_PART_OF, new ArrayList<String>());
}
if (!partOf.get(id.getType() + SolrConstants.DYNAMIC_PART_OF).contains(id.getValue())) {
partOf.get(id.getType() + SolrConstants.DYNAMIC_PART_OF).add(id.getValue());
}
}
}
}
if (w.getTitle() != null) {
if (w.getTitle().getTitle() != null && StringUtils.isNotEmpty(w.getTitle().getTitle().getContent())) {
workTitles.add(w.getTitle().getTitle().getContent());
}
if (w.getTitle().getSubtitle() != null && StringUtils.isNotEmpty(w.getTitle().getSubtitle().getContent())) {
workTitles.add(w.getTitle().getSubtitle().getContent());
}
if (w.getTitle().getTranslatedTitle() != null && StringUtils.isNotEmpty(w.getTitle().getTranslatedTitle().getContent())) {
workTitles.add(w.getTitle().getTranslatedTitle().getContent());
}
}
}
}
}
profileIndexDocument.setSelfIds(self);
profileIndexDocument.setPartOfIds(partOf);
// now add them to the doc, the old way
addExternalIdentifiersToIndexDocument(profileIndexDocument, allExternalIdentifiers);
profileIndexDocument.setWorkTitles(new ArrayList<String>(workTitles));
}
Map<String, List<String>> organisationIds = new HashMap<String, List<String>>();
organisationIds.put(SolrConstants.FUNDREF_ORGANISATION_ID, new ArrayList<String>());
organisationIds.put(SolrConstants.RINGGOLD_ORGANISATION_ID, new ArrayList<String>());
organisationIds.put(SolrConstants.GRID_ORGANISATION_ID, new ArrayList<String>());
Map<String, List<String>> organisationNames = new HashMap<String, List<String>>();
organisationNames.put(SolrConstants.AFFILIATION_ORGANISATION_NAME, new ArrayList<String>());
organisationNames.put(SolrConstants.FUNDING_ORGANISATION_NAME, new ArrayList<String>());
if (!fundings.isEmpty()) {
Set<String> fundingTitle = new HashSet<String>();
Set<String> fundingGrantNumbers = new HashSet<String>();
for (Funding f : fundings) {
if (f.getTitle() != null) {
if (f.getTitle().getTitle() != null && StringUtils.isNotEmpty(f.getTitle().getTitle().getContent())) {
fundingTitle.add(f.getTitle().getTitle().getContent());
}
if (f.getTitle().getTranslatedTitle() != null && StringUtils.isNotEmpty(f.getTitle().getTranslatedTitle().getContent())) {
fundingTitle.add(f.getTitle().getTranslatedTitle().getContent());
}
}
if (f.getExternalIdentifiers() != null && f.getExternalIdentifiers().getExternalIdentifier() != null) {
for (ExternalID id : f.getExternalIdentifiers().getExternalIdentifier()) {
if (id.getType().equals("grant_number")) {
fundingGrantNumbers.add(id.getValue());
}
}
}
if (f.getOrganization() != null) {
organisationNames.get(SolrConstants.FUNDING_ORGANISATION_NAME).add(f.getOrganization().getName());
if (f.getOrganization().getDisambiguatedOrganization() != null)
organisationIds.get(SolrConstants.FUNDREF_ORGANISATION_ID).add(f.getOrganization().getDisambiguatedOrganization().getDisambiguatedOrganizationIdentifier());
}
}
profileIndexDocument.setFundingTitles(new ArrayList<String>(fundingTitle));
profileIndexDocument.setGrantNumbers(new ArrayList<String>(fundingGrantNumbers));
}
// now do affiliations
if (record.getActivitiesSummary() != null && record.getActivitiesSummary().getEducations() != null && record.getActivitiesSummary().getEducations().getSummaries() != null) {
for (EducationSummary e : record.getActivitiesSummary().getEducations().getSummaries()) {
if (e.getOrganization() != null) {
organisationNames.get(SolrConstants.AFFILIATION_ORGANISATION_NAME).add(e.getOrganization().getName());
if (e.getOrganization().getDisambiguatedOrganization() != null) {
String sourceType = e.getOrganization().getDisambiguatedOrganization().getDisambiguationSource();
if (SolrConstants.RINGGOLD_ORG_TYPE.equals(sourceType)) {
organisationIds.get(SolrConstants.RINGGOLD_ORGANISATION_ID).add(e.getOrganization().getDisambiguatedOrganization().getDisambiguatedOrganizationIdentifier());
} else if (SolrConstants.GRID_ORG_TYPE.equals(sourceType)) {
organisationIds.get(SolrConstants.GRID_ORGANISATION_ID).add(e.getOrganization().getDisambiguatedOrganization().getDisambiguatedOrganizationIdentifier());
}
}
}
}
}
if (record.getActivitiesSummary() != null && record.getActivitiesSummary().getEmployments() != null && record.getActivitiesSummary().getEmployments().getSummaries() != null) {
for (EmploymentSummary e : record.getActivitiesSummary().getEmployments().getSummaries()) {
if (e.getOrganization() != null) {
organisationNames.get(SolrConstants.AFFILIATION_ORGANISATION_NAME).add(e.getOrganization().getName());
if (e.getOrganization().getDisambiguatedOrganization() != null) {
String sourceType = e.getOrganization().getDisambiguatedOrganization().getDisambiguationSource();
if (SolrConstants.RINGGOLD_ORG_TYPE.equals(sourceType)) {
organisationIds.get(SolrConstants.RINGGOLD_ORGANISATION_ID).add(e.getOrganization().getDisambiguatedOrganization().getDisambiguatedOrganizationIdentifier());
} else if (SolrConstants.GRID_ORG_TYPE.equals(sourceType)) {
organisationIds.get(SolrConstants.GRID_ORGANISATION_ID).add(e.getOrganization().getDisambiguatedOrganization().getDisambiguatedOrganizationIdentifier());
}
}
}
}
}
profileIndexDocument.setOrganisationIds(organisationIds);
profileIndexDocument.setOrganisationNames(organisationNames);
}
if (indexProfile) {
try {
StringWriter sw = new StringWriter();
jaxbContext_2_0_api.createMarshaller().marshal(record, sw);
profileIndexDocument.setPublicProfileMessage(sw.getBuffer().toString());
} catch (JAXBException e) {
LOG.error("problem marshalling xml", e);
}
}
LOG.debug(profileIndexDocument.toString());
return profileIndexDocument;
}
Aggregations