forked from D-Net/dnet-hadoop
Added fix for pid generation in stableIds
This commit is contained in:
parent
b4805b989d
commit
5f98ea74a9
|
@ -60,6 +60,33 @@ public class IdentifierFactory implements Serializable {
|
||||||
return pidFromInstance(pid, collectedFrom).distinct().collect(Collectors.toList());
|
return pidFromInstance(pid, collectedFrom).distinct().collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static <T extends Result> String createDOIBoostIdentifier(T entity) {
|
||||||
|
if (entity == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
StructuredProperty pid = null;
|
||||||
|
if(entity.getPid() != null ) {
|
||||||
|
pid = entity.getPid()
|
||||||
|
.stream()
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.filter(s -> s.getQualifier()!= null && "doi".equalsIgnoreCase(s.getQualifier().getClassid()))
|
||||||
|
.filter(IdentifierFactory::pidFilter)
|
||||||
|
.findAny().orElse(null);
|
||||||
|
} else {
|
||||||
|
if (entity.getInstance()!= null) {
|
||||||
|
pid = entity.getInstance()
|
||||||
|
.stream()
|
||||||
|
.filter(i -> i.getPid()!= null)
|
||||||
|
.flatMap(i -> i.getPid().stream())
|
||||||
|
.filter(IdentifierFactory::pidFilter)
|
||||||
|
.findAny().orElse(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pid!= null)
|
||||||
|
return idFromPid(entity, pid, true);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an identifier from the most relevant PID (if available) provided by a known PID authority in the given
|
* Creates an identifier from the most relevant PID (if available) provided by a known PID authority in the given
|
||||||
* entity T. Returns entity.id when none of the PIDs meet the selection criteria is available.
|
* entity T. Returns entity.id when none of the PIDs meet the selection criteria is available.
|
||||||
|
|
|
@ -206,6 +206,9 @@ case object Crossref2Oaf {
|
||||||
val links: List[String] = ((for {JString(url) <- json \ "link" \ "URL"} yield url) ::: List(s)).filter(p => p != null).distinct
|
val links: List[String] = ((for {JString(url) <- json \ "link" \ "URL"} yield url) ::: List(s)).filter(p => p != null).distinct
|
||||||
if (links.nonEmpty)
|
if (links.nonEmpty)
|
||||||
instance.setUrl(links.asJava)
|
instance.setUrl(links.asJava)
|
||||||
|
result.setId(IdentifierFactory.createDOIBoostIdentifier(result))
|
||||||
|
if (result.getId== null)
|
||||||
|
return null
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,6 +243,8 @@ case object Crossref2Oaf {
|
||||||
return List()
|
return List()
|
||||||
val cOBJCategory = mappingCrossrefSubType.getOrElse(objectType, mappingCrossrefSubType.getOrElse(objectSubType, "0038 Other literature type"));
|
val cOBJCategory = mappingCrossrefSubType.getOrElse(objectType, mappingCrossrefSubType.getOrElse(objectSubType, "0038 Other literature type"));
|
||||||
mappingResult(result, json, cOBJCategory)
|
mappingResult(result, json, cOBJCategory)
|
||||||
|
if (result == null)
|
||||||
|
return List()
|
||||||
|
|
||||||
|
|
||||||
val funderList: List[mappingFunder] = (json \ "funder").extractOrElse[List[mappingFunder]](List())
|
val funderList: List[mappingFunder] = (json \ "funder").extractOrElse[List[mappingFunder]](List())
|
||||||
|
|
|
@ -197,8 +197,8 @@ case object ConversionUtil {
|
||||||
//IMPORTANT
|
//IMPORTANT
|
||||||
//The old method result.setId(generateIdentifier(result, doi))
|
//The old method result.setId(generateIdentifier(result, doi))
|
||||||
//will be replaced using IdentifierFactory
|
//will be replaced using IdentifierFactory
|
||||||
pub.setId(generateIdentifier(pub, paper.Doi.toLowerCase))
|
|
||||||
pub.setId(IdentifierFactory.createIdentifier(pub))
|
pub.setId(IdentifierFactory.createDOIBoostIdentifier(pub))
|
||||||
|
|
||||||
val mainTitles = createSP(paper.PaperTitle, "main title", "dnet:dataCite_title")
|
val mainTitles = createSP(paper.PaperTitle, "main title", "dnet:dataCite_title")
|
||||||
val originalTitles = createSP(paper.OriginalTitle, "alternative title", "dnet:dataCite_title")
|
val originalTitles = createSP(paper.OriginalTitle, "alternative title", "dnet:dataCite_title")
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package eu.dnetlib.doiboost.orcid
|
package eu.dnetlib.doiboost.orcid
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
|
import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory
|
||||||
import eu.dnetlib.dhp.schema.oaf.{Author, DataInfo, Publication}
|
import eu.dnetlib.dhp.schema.oaf.{Author, DataInfo, Publication}
|
||||||
import eu.dnetlib.dhp.schema.orcid.OrcidDOI
|
import eu.dnetlib.dhp.schema.orcid.OrcidDOI
|
||||||
import eu.dnetlib.doiboost.DoiBoostMappingUtil
|
import eu.dnetlib.doiboost.DoiBoostMappingUtil
|
||||||
|
@ -49,7 +50,11 @@ object ORCIDToOAF {
|
||||||
val pub:Publication = new Publication
|
val pub:Publication = new Publication
|
||||||
pub.setPid(List(createSP(doi.toLowerCase, "doi", PID_TYPES)).asJava)
|
pub.setPid(List(createSP(doi.toLowerCase, "doi", PID_TYPES)).asJava)
|
||||||
pub.setDataInfo(generateDataInfo())
|
pub.setDataInfo(generateDataInfo())
|
||||||
pub.setId(generateIdentifier(pub, doi.toLowerCase))
|
|
||||||
|
pub.setId(IdentifierFactory.createDOIBoostIdentifier(pub))
|
||||||
|
if (pub.getId == null)
|
||||||
|
return null
|
||||||
|
|
||||||
try{
|
try{
|
||||||
|
|
||||||
val l:List[Author]= input.getAuthors.asScala.map(a=> {
|
val l:List[Author]= input.getAuthors.asScala.map(a=> {
|
||||||
|
|
|
@ -55,7 +55,6 @@ object UnpayWallToOAF {
|
||||||
|
|
||||||
val doi = (json \"doi").extract[String]
|
val doi = (json \"doi").extract[String]
|
||||||
|
|
||||||
|
|
||||||
val is_oa = (json\ "is_oa").extract[Boolean]
|
val is_oa = (json\ "is_oa").extract[Boolean]
|
||||||
|
|
||||||
val journal_is_oa= (json\ "journal_is_oa").extract[Boolean]
|
val journal_is_oa= (json\ "journal_is_oa").extract[Boolean]
|
||||||
|
@ -63,10 +62,6 @@ object UnpayWallToOAF {
|
||||||
val oaLocation:OALocation = (json \ "best_oa_location").extractOrElse[OALocation](null)
|
val oaLocation:OALocation = (json \ "best_oa_location").extractOrElse[OALocation](null)
|
||||||
|
|
||||||
val colour = get_color(is_oa, oaLocation, journal_is_oa)
|
val colour = get_color(is_oa, oaLocation, journal_is_oa)
|
||||||
pub.setPid(List(createSP(doi, "doi", PID_TYPES)).asJava)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pub.setCollectedfrom(List(createUnpayWallCollectedFrom()).asJava)
|
pub.setCollectedfrom(List(createUnpayWallCollectedFrom()).asJava)
|
||||||
pub.setDataInfo(generateDataInfo())
|
pub.setDataInfo(generateDataInfo())
|
||||||
|
@ -82,12 +77,9 @@ object UnpayWallToOAF {
|
||||||
// i.setAccessright(getOpenAccessQualifier())
|
// i.setAccessright(getOpenAccessQualifier())
|
||||||
i.setUrl(List(oaLocation.url.get).asJava)
|
i.setUrl(List(oaLocation.url.get).asJava)
|
||||||
|
|
||||||
// Ticket #6281 added pid to Instance
|
|
||||||
i.setPid(pub.getPid)
|
|
||||||
|
|
||||||
if (oaLocation.license.isDefined)
|
if (oaLocation.license.isDefined)
|
||||||
i.setLicense(asField(oaLocation.license.get))
|
i.setLicense(asField(oaLocation.license.get))
|
||||||
|
pub.setPid(List(createSP(doi, "doi", PID_TYPES)).asJava)
|
||||||
|
|
||||||
// Ticket #6282 Adding open Access Colour
|
// Ticket #6282 Adding open Access Colour
|
||||||
if (colour.isDefined) {
|
if (colour.isDefined) {
|
||||||
|
@ -98,6 +90,7 @@ object UnpayWallToOAF {
|
||||||
a.setSchemename(ModelConstants.DNET_ACCESS_MODES)
|
a.setSchemename(ModelConstants.DNET_ACCESS_MODES)
|
||||||
a.setOpenAccessRoute(colour.get)
|
a.setOpenAccessRoute(colour.get)
|
||||||
i.setAccessright(a)
|
i.setAccessright(a)
|
||||||
|
i.setPid(List(createSP(doi, "doi", PID_TYPES)).asJava)
|
||||||
}
|
}
|
||||||
pub.setInstance(List(i).asJava)
|
pub.setInstance(List(i).asJava)
|
||||||
|
|
||||||
|
@ -105,9 +98,7 @@ object UnpayWallToOAF {
|
||||||
//The old method pub.setId(IdentifierFactory.createIdentifier(pub))
|
//The old method pub.setId(IdentifierFactory.createIdentifier(pub))
|
||||||
//will be replaced using IdentifierFactory
|
//will be replaced using IdentifierFactory
|
||||||
//pub.setId(generateIdentifier(pub, doi.toLowerCase))
|
//pub.setId(generateIdentifier(pub, doi.toLowerCase))
|
||||||
val id = IdentifierFactory.createIdentifier(pub)
|
pub.setId(IdentifierFactory.createDOIBoostIdentifier(pub))
|
||||||
logger.info(id);
|
|
||||||
pub.setId(IdentifierFactory.createIdentifier(pub))
|
|
||||||
pub
|
pub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,13 +22,11 @@ class UnpayWallMappingTest {
|
||||||
|
|
||||||
|
|
||||||
for (line <-Ilist.lines) {
|
for (line <-Ilist.lines) {
|
||||||
|
|
||||||
|
|
||||||
val p = UnpayWallToOAF.convertToOAF(line)
|
val p = UnpayWallToOAF.convertToOAF(line)
|
||||||
|
|
||||||
if(p!= null) {
|
if(p!= null) {
|
||||||
assertTrue(p.getPid.size()==1)
|
assertTrue(p.getInstance().size()==1)
|
||||||
logger.info("ID :",p.getId)
|
logger.info(s"ID : ${p.getId}")
|
||||||
}
|
}
|
||||||
assertNotNull(line)
|
assertNotNull(line)
|
||||||
assertTrue(line.nonEmpty)
|
assertTrue(line.nonEmpty)
|
||||||
|
|
Loading…
Reference in New Issue