package org.nextprot.api.tasks.solr.indexer.entry.impl; import org.nextprot.api.core.domain.Entry; import org.nextprot.api.core.domain.Publication; import org.nextprot.api.core.domain.PublicationAuthor; import org.nextprot.api.core.domain.publication.JournalResourceLocator; import org.nextprot.api.solr.index.EntryIndex.Fields; import org.nextprot.api.tasks.solr.indexer.entry.EntryFieldBuilder; import org.nextprot.api.tasks.solr.indexer.entry.FieldBuilder; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.SortedSet; @EntryFieldBuilder public class PublicationsFieldBuilder extends FieldBuilder { @Override protected void init(Entry entry) { // Publications // Shouldn't Xrefs to PubMed and DOIs be also indexed here ? List<Publication> publications = entry.getPublications(); int publi_computed_count = 0; int publi_curated_count = 0; int publi_large_scale_count = 0; String Jinfo = ""; //System.err.println(publications.size() + " publis"); for (Publication currpubli : publications) { if(currpubli.getIsComputed() == true) publi_computed_count++; if(currpubli.getIsCurated() == true) publi_curated_count++; if(currpubli.getIsLargeScale() == true) publi_large_scale_count++; if(currpubli.isLocatedInScientificJournal()) { JournalResourceLocator journalLocator = currpubli.getJournalResourceLocator(); //System.err.println("pubid: " + currpubli.getPublicationId()); //System.err.println("jid: " + currpubli.getCvJournal().getJournalId()); if (journalLocator.hasJournalId()) addField(Fields.PUBLICATIONS, journalLocator.getNLMid()); Jinfo = currpubli.getJournalResourceLocator().getName(); if (journalLocator.hasJournalId()) Jinfo += " - " + currpubli.getJournalResourceLocator().getMedAbbrev(); // Index name and abbrev in the same token addField(Fields.PUBLICATIONS,Jinfo); //System.err.println(Jinfo); } String title = currpubli.getTitle(); //System.err.println("LS:" + currpubli.getIsLargeScale() + " " + title); if(title.length() > 0) addField(Fields.PUBLICATIONS,title); SortedSet<PublicationAuthor> authors = currpubli.getAuthors(); for (PublicationAuthor currauthor : authors) { //System.err.println("author: " + currauthor.toString()); String forename = currauthor.getForeName(); if(forename.contains(".")) // Submission author addField(Fields.PUBLICATIONS, currauthor.getLastName() + " " + currauthor.getInitials()); else if(!forename.isEmpty() ) // trim not to add spaces when forename/initials are empty addField(Fields.PUBLICATIONS, (currauthor.getLastName() + " " + forename + " " + currauthor.getInitials()).trim()); else addField(Fields.PUBLICATIONS, (currauthor.getLastName() + " " + currauthor.getInitials()).trim()); //if(currauthor.getLastName().contains("Consortium")) System.err.println(currauthor.getLastName()); //if(currauthor.getLastName().contains("Bergsten")) System.err.println("id: " + currpubli.getPublicationId() + " type: " + currpubli.getPublicationType() + " " + currauthor.getLastName()); } } //if(publi_computed_count > 0) addField(Fields.PUBLI_COMPUTED_COUNT, publi_computed_count); addField(Fields.PUBLI_COMPUTED_COUNT, publi_computed_count); addField(Fields.PUBLI_CURATED_COUNT, publi_curated_count); addField(Fields.PUBLI_LARGE_SCALE_COUNT, publi_large_scale_count); // Based on the publications and the protein existence level we can compute informational score int pe_level = entry.getOverview().getProteinExistenceLevel(); float info_score = 0; if(pe_level == 1) info_score=12; else if(pe_level == 2) info_score=10; else if(pe_level == 3 || pe_level == 4) info_score=8; else if(pe_level == 5) info_score=5; float coeff = 100*publi_curated_count + 25*publi_computed_count + 10*publi_large_scale_count; info_score = coeff * info_score / 10; addField(Fields.INFORMATIONAL_SCORE, info_score); } @Override public Collection<Fields> getSupportedFields() { return Arrays.asList(Fields.PUBLICATIONS, Fields.PUBLI_COMPUTED_COUNT, Fields.PUBLI_CURATED_COUNT, Fields.PUBLI_LARGE_SCALE_COUNT, Fields.INFORMATIONAL_SCORE); } }