130 lines
4.0 KiB
Scala
130 lines
4.0 KiB
Scala
package eu.dnetlib.doiboost.uw
|
|
|
|
import eu.dnetlib.dhp.schema.common.ModelConstants
|
|
import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory
|
|
import eu.dnetlib.dhp.schema.oaf.{AccessRight, Instance, OpenAccessRoute, Publication}
|
|
import eu.dnetlib.doiboost.DoiBoostMappingUtil
|
|
import org.json4s
|
|
import org.json4s.DefaultFormats
|
|
import org.json4s.jackson.JsonMethods.parse
|
|
import org.slf4j.{Logger, LoggerFactory}
|
|
|
|
import scala.collection.JavaConverters._
|
|
import eu.dnetlib.doiboost.DoiBoostMappingUtil._
|
|
import eu.dnetlib.doiboost.uw.UnpayWallToOAF.get_unpaywall_color
|
|
|
|
|
|
|
|
case class OALocation(evidence:Option[String], host_type:Option[String], is_best:Option[Boolean], license: Option[String], pmh_id:Option[String], updated:Option[String],
|
|
url:Option[String], url_for_landing_page:Option[String], url_for_pdf:Option[String], version:Option[String]) {}
|
|
|
|
|
|
|
|
|
|
object UnpayWallToOAF {
|
|
val logger: Logger = LoggerFactory.getLogger(getClass)
|
|
|
|
|
|
def get_unpaywall_color(input:String):Option[OpenAccessRoute] = {
|
|
if(input == null || input.equalsIgnoreCase("close"))
|
|
return None
|
|
if(input.equalsIgnoreCase("green"))
|
|
return Some(OpenAccessRoute.green)
|
|
if(input.equalsIgnoreCase("bronze"))
|
|
return Some(OpenAccessRoute.bronze)
|
|
if(input.equalsIgnoreCase("hybrid"))
|
|
return Some(OpenAccessRoute.hybrid)
|
|
else
|
|
return Some(OpenAccessRoute.gold)
|
|
|
|
}
|
|
|
|
def get_color(is_oa:Boolean, location: OALocation, journal_is_oa:Boolean):Option[OpenAccessRoute] = {
|
|
if (is_oa) {
|
|
if (location.host_type.isDefined) {
|
|
{
|
|
if (location.host_type.get.equalsIgnoreCase("repository"))
|
|
return Some(OpenAccessRoute.green)
|
|
else if (location.host_type.get.equalsIgnoreCase("publisher")) {
|
|
if (journal_is_oa)
|
|
return Some(OpenAccessRoute.gold)
|
|
else {
|
|
if (location.license.isDefined)
|
|
return Some(OpenAccessRoute.hybrid)
|
|
else
|
|
return Some(OpenAccessRoute.bronze)
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
None
|
|
}
|
|
|
|
|
|
def convertToOAF(input:String):Publication = {
|
|
val pub = new Publication
|
|
|
|
implicit lazy val formats: DefaultFormats.type = org.json4s.DefaultFormats
|
|
lazy val json: json4s.JValue = parse(input)
|
|
|
|
val doi = DoiBoostMappingUtil.normalizeDoi((json \"doi").extract[String])
|
|
|
|
if(doi == null)
|
|
return null
|
|
|
|
val is_oa = (json\ "is_oa").extract[Boolean]
|
|
|
|
val journal_is_oa= (json\ "journal_is_oa").extract[Boolean]
|
|
|
|
val oaLocation:OALocation = (json \ "best_oa_location").extractOrElse[OALocation](null)
|
|
|
|
val colour = get_unpaywall_color((json \ "oa_status").extractOrElse[String](null))
|
|
|
|
pub.setCollectedfrom(List(createUnpayWallCollectedFrom()).asJava)
|
|
pub.setDataInfo(generateDataInfo())
|
|
|
|
if (!is_oa)
|
|
return null
|
|
|
|
if(oaLocation== null || oaLocation.url.isEmpty)
|
|
return null
|
|
val i :Instance= new Instance()
|
|
|
|
i.setCollectedfrom(createUnpayWallCollectedFrom())
|
|
// i.setAccessright(getOpenAccessQualifier())
|
|
i.setUrl(List(oaLocation.url.get).asJava)
|
|
|
|
if (oaLocation.license.isDefined)
|
|
i.setLicense(asField(oaLocation.license.get))
|
|
pub.setPid(List(createSP(doi, "doi", ModelConstants.DNET_PID_TYPES)).asJava)
|
|
|
|
// Ticket #6282 Adding open Access Colour
|
|
if (colour.isDefined) {
|
|
val a = new AccessRight
|
|
a.setClassid(ModelConstants.ACCESS_RIGHT_OPEN)
|
|
a.setClassname(ModelConstants.ACCESS_RIGHT_OPEN)
|
|
a.setSchemeid(ModelConstants.DNET_ACCESS_MODES)
|
|
a.setSchemename(ModelConstants.DNET_ACCESS_MODES)
|
|
a.setOpenAccessRoute(colour.get)
|
|
i.setAccessright(a)
|
|
i.setPid(List(createSP(doi, "doi", ModelConstants.DNET_PID_TYPES)).asJava)
|
|
}
|
|
pub.setInstance(List(i).asJava)
|
|
|
|
//IMPORTANT
|
|
//The old method pub.setId(IdentifierFactory.createIdentifier(pub))
|
|
//will be replaced using IdentifierFactory
|
|
//pub.setId(generateIdentifier(pub, doi.toLowerCase))
|
|
pub.setId(IdentifierFactory.createDOIBoostIdentifier(pub))
|
|
pub
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|