2020-05-22 15:15:09 +02:00
|
|
|
package eu.dnetlib.doiboost.uw
|
|
|
|
|
2020-11-09 11:53:55 +01:00
|
|
|
import eu.dnetlib.dhp.schema.oaf.utils.IdentifierFactory
|
2020-05-22 15:15:09 +02:00
|
|
|
import eu.dnetlib.dhp.schema.oaf.{Instance, Publication}
|
|
|
|
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._
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 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 = (json \"doi").extract[String]
|
|
|
|
|
|
|
|
|
|
|
|
val is_oa = (json\ "is_oa").extract[Boolean]
|
|
|
|
|
|
|
|
val oaLocation:OALocation = (json \ "best_oa_location").extractOrElse[OALocation](null)
|
|
|
|
pub.setPid(List(createSP(doi, "doi", PID_TYPES)).asJava)
|
2020-11-09 11:53:55 +01:00
|
|
|
|
|
|
|
//IMPORTANT
|
|
|
|
//The old method pub.setId(IdentifierFactory.createIdentifier(pub))
|
|
|
|
//will be replaced using IdentifierFactory
|
2020-05-22 15:15:09 +02:00
|
|
|
pub.setId(generateIdentifier(pub, doi.toLowerCase))
|
2020-11-09 11:53:55 +01:00
|
|
|
pub.setId(IdentifierFactory.createIdentifier(pub))
|
|
|
|
|
2020-05-22 15:15:09 +02:00
|
|
|
|
|
|
|
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())
|
2020-06-04 14:39:20 +02:00
|
|
|
i.setAccessright(getOpenAccessQualifier())
|
2020-05-22 15:15:09 +02:00
|
|
|
i.setUrl(List(oaLocation.url.get).asJava)
|
|
|
|
|
2021-01-12 14:42:30 +01:00
|
|
|
// Ticket #6281 added pid to Instance
|
|
|
|
i.setPid(pub.getPid.asScala.filter(p => p.getQualifier.getClassid.equalsIgnoreCase("doi")).asJava)
|
|
|
|
|
2020-05-22 15:15:09 +02:00
|
|
|
if (oaLocation.license.isDefined)
|
|
|
|
i.setLicense(asField(oaLocation.license.get))
|
|
|
|
pub.setInstance(List(i).asJava)
|
|
|
|
|
|
|
|
pub
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|