diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/ExecCreateSchemas.java b/dump-schema/src/main/java/eu/dnetlib/dhp/ExecCreateSchemas.java index 4cb18b9..1b8b9fb 100644 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/ExecCreateSchemas.java +++ b/dump-schema/src/main/java/eu/dnetlib/dhp/ExecCreateSchemas.java @@ -13,7 +13,6 @@ import com.github.imifou.jsonschema.module.addon.AddonModule; import com.github.victools.jsonschema.generator.*; import eu.dnetlib.dhp.eosc.model.Result; -import eu.dnetlib.dhp.oa.model.graph.*; public class ExecCreateSchemas { final static String DIRECTORY = "/eu/dnetlib/dhp/schema/dump/jsonschemas/"; diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/eosc/model/Project.java b/dump-schema/src/main/java/eu/dnetlib/dhp/eosc/model/Project.java index 0985de1..810b657 100644 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/eosc/model/Project.java +++ b/dump-schema/src/main/java/eu/dnetlib/dhp/eosc/model/Project.java @@ -3,8 +3,6 @@ package eu.dnetlib.dhp.eosc.model; import java.io.Serializable; -import org.apache.commons.lang3.StringUtils; - import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema; /** diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/Funder.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/Funder.java deleted file mode 100644 index 49376fc..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/Funder.java +++ /dev/null @@ -1,43 +0,0 @@ - -package eu.dnetlib.dhp.oa.model; - -import java.io.Serializable; - -import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema; - -public class Funder implements Serializable { - - @JsonSchema(description = "The short name of the funder (EC)") - private String shortName; - - @JsonSchema(description = "The name of the funder (European Commission)") - private String name; - - @JsonSchema( - description = "Geographical jurisdiction (e.g. for European Commission is EU, for Croatian Science Foundation is HR)") - private String jurisdiction; - - public String getJurisdiction() { - return jurisdiction; - } - - public void setJurisdiction(String jurisdiction) { - this.jurisdiction = jurisdiction; - } - - public String getShortName() { - return shortName; - } - - public void setShortName(String shortName) { - this.shortName = shortName; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/Project.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/Project.java deleted file mode 100644 index 9b08427..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/Project.java +++ /dev/null @@ -1,57 +0,0 @@ - -package eu.dnetlib.dhp.oa.model; - -import java.io.Serializable; - -import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema; - -/** - * This class to store the common information about the project that will be dumped for community and for the whole - * graph - private String id to store the id of the project (OpenAIRE id) - private String code to store the grant - * agreement of the project - private String acronym to store the acronym of the project - private String title to store - * the tile of the project - */ -public class Project implements Serializable { - @JsonSchema(description = "The OpenAIRE id for the project") - protected String id;// OpenAIRE id - - @JsonSchema(description = "The grant agreement number") - protected String code; - - @JsonSchema(description = "The acronym of the project") - protected String acronym; - - protected String title; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getCode() { - return code; - } - - public void setCode(String code) { - this.code = code; - } - - public String getAcronym() { - return acronym; - } - - public void setAcronym(String acronym) { - this.acronym = acronym; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/Provenance.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/Provenance.java deleted file mode 100644 index 1be96dc..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/Provenance.java +++ /dev/null @@ -1,41 +0,0 @@ - -package eu.dnetlib.dhp.oa.model; - -import java.io.Serializable; - -/** - * Indicates the process that produced (or provided) the information, and the trust associated to the information. It - * has two parameters: - provenance of type String to store the provenance of the information, - trust of type String to - * store the trust associated to the information - */ -public class Provenance implements Serializable { - private String provenance; - private String trust; - - public String getProvenance() { - return provenance; - } - - public void setProvenance(String provenance) { - this.provenance = provenance; - } - - public String getTrust() { - return trust; - } - - public void setTrust(String trust) { - this.trust = trust; - } - - public static Provenance newInstance(String provenance, String trust) { - Provenance p = new Provenance(); - p.provenance = provenance; - p.trust = trust; - return p; - } - - public String toString() { - return provenance + trust; - } -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Constants.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Constants.java deleted file mode 100644 index 8c92aff..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Constants.java +++ /dev/null @@ -1,21 +0,0 @@ - -package eu.dnetlib.dhp.oa.model.graph; - -import java.io.Serializable; - -public class Constants implements Serializable { - // collectedFrom va con isProvidedBy -> becco da ModelSupport - - public static final String HOSTED_BY = "isHostedBy"; - public static final String HOSTS = "hosts"; - - // community result uso isrelatedto - - public static final String RESULT_ENTITY = "result"; - public static final String DATASOURCE_ENTITY = "datasource"; - public static final String CONTEXT_ENTITY = "context"; - - public static final String CONTEXT_ID = "60"; - public static final String CONTEXT_NS_PREFIX = "context____"; - -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Datasource.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Datasource.java deleted file mode 100644 index f2a6dd2..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Datasource.java +++ /dev/null @@ -1,346 +0,0 @@ - -package eu.dnetlib.dhp.oa.model.graph; - -import java.io.Serializable; -import java.util.List; - -import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema; - -import eu.dnetlib.dhp.eosc.model.Container; - -/** - * To store information about the datasource OpenAIRE collects information from. It contains the following parameters: - - * id of type String to store the OpenAIRE id for the datasource. It corresponds to the parameter id of the datasource - * represented in the internal model - originalId of type List to store the list of original ids associated to - * the datasource. It corresponds to the parameter originalId of the datasource represented in the internal model. The - * null values are filtered out - pid of type List to store the - * persistent identifiers for the datasource. For each pid in the datasource represented in the internal model one pid - * in the external model is produced as : - schema corresponds to pid.qualifier.classid of the datasource represented in - * the internal model - value corresponds to pid.value of the datasource represented in the internal model - - * datasourceType of type eu.dnetlib.dhp.schema.dump.oaf.ControlledField to store the datasource type (e.g. - * pubsrepository::institutional, Institutional Repository) as in the dnet vocabulary dnet:datasource_typologies. It - * corresponds to datasourcetype of the datasource represented in the internal model and : - code corresponds to - * datasourcetype.classid - value corresponds to datasourcetype.classname - openairecompatibility of type String to - * store information about the OpenAIRE compatibility of the ingested results (which guidelines they are compliant to). - * It corresponds to openairecompatibility.classname of the datasource represented in the internal model - officialname - * of type Sgtring to store the official name of the datasource. It correspond to officialname.value of the datasource - * represented in the internal model - englishname of type String to store the English name of the datasource. It - * corresponds to englishname.value of the datasource represented in the internal model - websiteurl of type String to - * store the URL of the website of the datasource. It corresponds to websiteurl.value of the datasource represented in - * the internal model - logourl of type String to store the URL of the logo for the datasource. It corresponds to - * logourl.value of the datasource represented in the internal model - dateofvalidation of type String to store the data - * of validation against the guidelines for the datasource records. It corresponds to dateofvalidation.value of the - * datasource represented in the internal model - description of type String to store the description for the - * datasource. It corresponds to description.value of the datasource represented in the internal model - */ -public class Datasource implements Serializable { - @JsonSchema(description = "The OpenAIRE id of the data source") - private String id; // string - - @JsonSchema(description = "Original identifiers for the datasource") - private List originalId; // list string - - @JsonSchema(description = "Persistent identifiers of the datasource") - private List pid; // list - - @JsonSchema( - description = "The type of the datasource. See https://api.openaire.eu/vocabularies/dnet:datasource_typologies") - private DatasourceSchemeValue datasourcetype; // value - - @JsonSchema( - description = "OpenAIRE guidelines the data source comply with. See also https://guidelines.openaire.eu.") - private String openairecompatibility; // value - - @JsonSchema(description = "The official name of the datasource") - private String officialname; // string - - @JsonSchema(description = "The English name of the datasource") - private String englishname; // string - - private String websiteurl; // string - - private String logourl; // string - - @JsonSchema(description = "The date of last validation against the OpenAIRE guidelines for the datasource records") - private String dateofvalidation; // string - - private String description; // description - - @JsonSchema(description = "List of subjects associated to the datasource") - private List subjects; // List - - // opendoar specific fields (od*) - - @JsonSchema(description = "The languages present in the data source's content, as defined by OpenDOAR.") - private List languages; // odlanguages List - - @JsonSchema(description = "Types of content in the data source, as defined by OpenDOAR") - private List contenttypes; // odcontent types List - - // re3data fields - @JsonSchema(description = "Releasing date of the data source, as defined by re3data.org") - private String releasestartdate; // string - - @JsonSchema( - description = "Date when the data source went offline or stopped ingesting new research data. As defined by re3data.org") - private String releaseenddate; // string - - @JsonSchema( - description = "The URL of a mission statement describing the designated community of the data source. As defined by re3data.org") - private String missionstatementurl; // string - - @JsonSchema( - description = "Type of access to the data source, as defined by re3data.org. Possible values: " + - "{open, restricted, closed}") - private String accessrights; // databaseaccesstype string - - // {open, restricted or closed} - @JsonSchema(description = "Type of data upload. As defined by re3data.org: one of {open, restricted,closed}") - private String uploadrights; // datauploadtype string - - @JsonSchema( - description = "Access restrinctions to the data source, as defined by re3data.org. One of {feeRequired, registration, other}") - private String databaseaccessrestriction; // string - - @JsonSchema( - description = "Upload restrictions applied by the datasource, as defined by re3data.org. One of {feeRequired, registration, other}") - private String datauploadrestriction; // string - - @JsonSchema(description = "As defined by redata.org: 'yes' if the data source supports versioning, 'no' otherwise.") - private Boolean versioning; // boolean - - @JsonSchema( - description = "The URL of the data source providing information on how to cite its items. As defined by re3data.org.") - private String citationguidelineurl; // string - - // {yes, no, uknown} - @JsonSchema( - description = "The persistent identifier system that is used by the data source. As defined by re3data.org") - private String pidsystems; // string - - @JsonSchema( - description = "The certificate, seal or standard the data source complies with. As defined by re3data.org.") - private String certificates; // string - - @JsonSchema(description = "Policies of the data source, as defined in OpenDOAR.") - private List policies; // - - @JsonSchema(description = "Information about the journal, if this data source is of type Journal.") - private Container journal; // issn etc del Journal - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public List getOriginalId() { - return originalId; - } - - public void setOriginalId(List originalId) { - this.originalId = originalId; - } - - public List getPid() { - return pid; - } - - public void setPid(List pid) { - this.pid = pid; - } - - public DatasourceSchemeValue getDatasourcetype() { - return datasourcetype; - } - - public void setDatasourcetype(DatasourceSchemeValue datasourcetype) { - this.datasourcetype = datasourcetype; - } - - public String getOpenairecompatibility() { - return openairecompatibility; - } - - public void setOpenairecompatibility(String openairecompatibility) { - this.openairecompatibility = openairecompatibility; - } - - public String getOfficialname() { - return officialname; - } - - public void setOfficialname(String officialname) { - this.officialname = officialname; - } - - public String getEnglishname() { - return englishname; - } - - public void setEnglishname(String englishname) { - this.englishname = englishname; - } - - public String getWebsiteurl() { - return websiteurl; - } - - public void setWebsiteurl(String websiteurl) { - this.websiteurl = websiteurl; - } - - public String getLogourl() { - return logourl; - } - - public void setLogourl(String logourl) { - this.logourl = logourl; - } - - public String getDateofvalidation() { - return dateofvalidation; - } - - public void setDateofvalidation(String dateofvalidation) { - this.dateofvalidation = dateofvalidation; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public List getSubjects() { - return subjects; - } - - public void setSubjects(List subjects) { - this.subjects = subjects; - } - - public List getLanguages() { - return languages; - } - - public void setLanguages(List languages) { - this.languages = languages; - } - - public List getContenttypes() { - return contenttypes; - } - - public void setContenttypes(List contenttypes) { - this.contenttypes = contenttypes; - } - - public String getReleasestartdate() { - return releasestartdate; - } - - public void setReleasestartdate(String releasestartdate) { - this.releasestartdate = releasestartdate; - } - - public String getReleaseenddate() { - return releaseenddate; - } - - public void setReleaseenddate(String releaseenddate) { - this.releaseenddate = releaseenddate; - } - - public String getMissionstatementurl() { - return missionstatementurl; - } - - public void setMissionstatementurl(String missionstatementurl) { - this.missionstatementurl = missionstatementurl; - } - - public String getAccessrights() { - return accessrights; - } - - public void setAccessrights(String accessrights) { - this.accessrights = accessrights; - } - - public String getUploadrights() { - return uploadrights; - } - - public void setUploadrights(String uploadrights) { - this.uploadrights = uploadrights; - } - - public String getDatabaseaccessrestriction() { - return databaseaccessrestriction; - } - - public void setDatabaseaccessrestriction(String databaseaccessrestriction) { - this.databaseaccessrestriction = databaseaccessrestriction; - } - - public String getDatauploadrestriction() { - return datauploadrestriction; - } - - public void setDatauploadrestriction(String datauploadrestriction) { - this.datauploadrestriction = datauploadrestriction; - } - - public Boolean getVersioning() { - return versioning; - } - - public void setVersioning(Boolean versioning) { - this.versioning = versioning; - } - - public String getCitationguidelineurl() { - return citationguidelineurl; - } - - public void setCitationguidelineurl(String citationguidelineurl) { - this.citationguidelineurl = citationguidelineurl; - } - - public String getPidsystems() { - return pidsystems; - } - - public void setPidsystems(String pidsystems) { - this.pidsystems = pidsystems; - } - - public String getCertificates() { - return certificates; - } - - public void setCertificates(String certificates) { - this.certificates = certificates; - } - - public List getPolicies() { - return policies; - } - - public void setPolicies(List policiesr3) { - this.policies = policiesr3; - } - - public Container getJournal() { - return journal; - } - - public void setJournal(Container journal) { - this.journal = journal; - } -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/DatasourcePid.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/DatasourcePid.java deleted file mode 100644 index 50eddbc..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/DatasourcePid.java +++ /dev/null @@ -1,41 +0,0 @@ - -package eu.dnetlib.dhp.oa.model.graph; - -import java.io.Serializable; - -import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema; - -public class DatasourcePid implements Serializable { - - @JsonSchema(description = "The scheme used to express the value ") - private String scheme; - - @JsonSchema(description = "The value expressed in the scheme ") - private String value; - - public String getScheme() { - return scheme; - } - - public void setScheme(String scheme) { - this.scheme = scheme; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public static DatasourcePid newInstance(String scheme, String value) { - DatasourcePid cf = new DatasourcePid(); - - cf.setScheme(scheme); - cf.setValue(value); - - return cf; - } - -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/DatasourceSchemeValue.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/DatasourceSchemeValue.java deleted file mode 100644 index a437403..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/DatasourceSchemeValue.java +++ /dev/null @@ -1,41 +0,0 @@ - -package eu.dnetlib.dhp.oa.model.graph; - -import java.io.Serializable; - -import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema; - -public // TODO change the DatasourceSchemaValue to DatasourceKeyValue. The scheme is always the dnet one. What we show - // here is the entry in the scheme (the key) and its understandable value -class DatasourceSchemeValue implements Serializable { - @JsonSchema(description = "The scheme used to express the value (i.e. pubsrepository::journal)") - private String scheme; - - @JsonSchema(description = "The value expressed in the scheme (Journal)") - private String value; - - public String getScheme() { - return scheme; - } - - public void setScheme(String scheme) { - this.scheme = scheme; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public static DatasourceSchemeValue newInstance(String scheme, String value) { - DatasourceSchemeValue cf = new DatasourceSchemeValue(); - - cf.setScheme(scheme); - cf.setValue(value); - - return cf; - } -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Funder.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Funder.java deleted file mode 100644 index 84c09d2..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Funder.java +++ /dev/null @@ -1,23 +0,0 @@ - -package eu.dnetlib.dhp.oa.model.graph; - -import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema; - -/** - * To store information about the funder funding the project related to the result. It extends - * eu.dnetlib.dhp.schema.dump.oaf.Funder with the following parameter: - - private - * eu.dnetdlib.dhp.schema.dump.oaf.graph.Fundings funding_stream to store the fundingstream - */ -public class Funder extends eu.dnetlib.dhp.oa.model.Funder { - - @JsonSchema(description = "Description of the funding stream") - private Fundings funding_stream; - - public Fundings getFunding_stream() { - return funding_stream; - } - - public void setFunding_stream(Fundings funding_stream) { - this.funding_stream = funding_stream; - } -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Fundings.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Fundings.java deleted file mode 100644 index b0330d7..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Fundings.java +++ /dev/null @@ -1,38 +0,0 @@ - -package eu.dnetlib.dhp.oa.model.graph; - -import java.io.Serializable; - -import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema; - -/** - * To store inforamtion about the funding stream. It has two parameters: - private String id to store the id of the - * fundings stream. The id is created by appending the shortname of the funder to the name of each level in the xml - * representing the fundng stream. For example: if the funder is the European Commission, the funding level 0 name is - * FP7, the funding level 1 name is SP3 and the funding level 2 name is PEOPLE then the id will be: EC::FP7::SP3::PEOPLE - * - private String description to describe the funding stream. It is created by concatenating the description of each - * funding level so for the example above the description would be: SEVENTH FRAMEWORK PROGRAMME - SP3-People - - * Marie-Curie Actions - */ -public class Fundings implements Serializable { - - @JsonSchema(description = "Id of the funding stream") - private String id; - private String description; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Granted.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Granted.java deleted file mode 100644 index c5fb352..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Granted.java +++ /dev/null @@ -1,61 +0,0 @@ - -package eu.dnetlib.dhp.oa.model.graph; - -import java.io.Serializable; - -import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema; - -/** - * To describe the funded amount. It has the following parameters: - private String currency to store the currency of - * the fund - private float totalcost to store the total cost of the project - private float fundedamount to store the - * funded amount by the funder - */ -public class Granted implements Serializable { - @JsonSchema(description = "The currency of the granted amount (e.g. EUR)") - private String currency; - - @JsonSchema(description = "The total cost of the project") - private float totalcost; - - @JsonSchema(description = "The funded amount") - private float fundedamount; - - public String getCurrency() { - return currency; - } - - public void setCurrency(String currency) { - this.currency = currency; - } - - public float getTotalcost() { - return totalcost; - } - - public void setTotalcost(float totalcost) { - this.totalcost = totalcost; - } - - public float getFundedamount() { - return fundedamount; - } - - public void setFundedamount(float fundedamount) { - this.fundedamount = fundedamount; - } - - public static Granted newInstance(String currency, float totalcost, float fundedamount) { - Granted granted = new Granted(); - granted.currency = currency; - granted.totalcost = totalcost; - granted.fundedamount = fundedamount; - return granted; - } - - public static Granted newInstance(String currency, float fundedamount) { - Granted granted = new Granted(); - granted.currency = currency; - granted.fundedamount = fundedamount; - return granted; - } -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/H2020Classification.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/H2020Classification.java deleted file mode 100644 index 96d1ed8..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/H2020Classification.java +++ /dev/null @@ -1,82 +0,0 @@ - -package eu.dnetlib.dhp.oa.model.graph; - -import java.io.Serializable; - -/** - * To store information about the classification for the project. The classification depends on the programme. For example - * H2020-EU.3.4.5.3 can be classified as - * H2020-EU.3. => Societal Challenges (level1) - * H2020-EU.3.4. => Transport (level2) - * H2020-EU.3.4.5. => CLEANSKY2 (level3) - * H2020-EU.3.4.5.3. => IADP Fast Rotorcraft (level4) - * - * We decided to explicitly represent up to three levels in the classification. - * - * H2020Classification has the following parameters: - * - private Programme programme to store the information about the programme related to this classification - * - private String level1 to store the information about the level 1 of the classification (Priority or Pillar of the EC) - * - private String level2 to store the information about the level2 af the classification (Objectives (?)) - * - private String level3 to store the information about the level3 of the classification - * - private String classification to store the entire classification related to the programme - */ -public class H2020Classification implements Serializable { - private Programme programme; - - private String level1; - private String level2; - private String level3; - - private String classification; - - public Programme getProgramme() { - return programme; - } - - public void setProgramme(Programme programme) { - this.programme = programme; - } - - public String getLevel1() { - return level1; - } - - public void setLevel1(String level1) { - this.level1 = level1; - } - - public String getLevel2() { - return level2; - } - - public void setLevel2(String level2) { - this.level2 = level2; - } - - public String getLevel3() { - return level3; - } - - public void setLevel3(String level3) { - this.level3 = level3; - } - - public String getClassification() { - return classification; - } - - public void setClassification(String classification) { - this.classification = classification; - } - - public static H2020Classification newInstance(String programme_code, String programme_description, String level1, - String level2, String level3, String classification) { - H2020Classification h2020classification = new H2020Classification(); - h2020classification.programme = Programme.newInstance(programme_code, programme_description); - h2020classification.level1 = level1; - h2020classification.level2 = level2; - h2020classification.level3 = level3; - h2020classification.classification = classification; - return h2020classification; - } -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Node.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Node.java deleted file mode 100644 index cd2bb78..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Node.java +++ /dev/null @@ -1,38 +0,0 @@ - -package eu.dnetlib.dhp.oa.model.graph; - -import java.io.Serializable; - -/** - * To represent the generic node in a relation. It has the following parameters: - private String id the openaire id of - * the entity in the relation - private String type the type of the entity in the relation. Consider the generic - * relation between a Result R and a Project P, the node representing R will have as id the id of R and as type result, - * while the node representing the project will have as id the id of the project and as type project - */ -public class Node implements Serializable { - private String id; - private String type; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public static Node newInstance(String id, String type) { - Node node = new Node(); - node.id = id; - node.type = type; - return node; - } -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Organization.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Organization.java deleted file mode 100644 index 69038ec..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Organization.java +++ /dev/null @@ -1,94 +0,0 @@ - -package eu.dnetlib.dhp.oa.model.graph; - -import java.io.Serializable; -import java.util.List; - -import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema; - -import eu.dnetlib.dhp.eosc.model.Country; - -/** - * To represent the generic organizaiton. It has the following parameters: - * - private String legalshortname to store the legalshortname of the organizaiton - * - private String legalname to store the legal name of the organization - * - private String websiteurl to store the websiteurl of the organization - * - private List alternativenames to store the alternative names of the organization - * - private Country country to store the country of the organization - * - private String id to store the openaire id of the organization - * - private List pid to store the list of pids for the organization - */ -public class Organization implements Serializable { - private String legalshortname; - private String legalname; - private String websiteurl; - - @JsonSchema(description = "Alternative names that identify the organisation") - private List alternativenames; - - @JsonSchema(description = "The organisation country") - private Country country; - - @JsonSchema(description = "The OpenAIRE id for the organisation") - private String id; - - @JsonSchema(description = "Persistent identifiers for the organisation i.e. isni 0000000090326370") - private List pid; - - public String getLegalshortname() { - return legalshortname; - } - - public void setLegalshortname(String legalshortname) { - this.legalshortname = legalshortname; - } - - public String getLegalname() { - return legalname; - } - - public void setLegalname(String legalname) { - this.legalname = legalname; - } - - public String getWebsiteurl() { - return websiteurl; - } - - public void setWebsiteurl(String websiteurl) { - this.websiteurl = websiteurl; - } - - public List getAlternativenames() { - return alternativenames; - } - - public void setAlternativenames(List alternativenames) { - this.alternativenames = alternativenames; - } - - public Country getCountry() { - return country; - } - - public void setCountry(Country country) { - this.country = country; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public List getPid() { - return pid; - } - - public void setPid(List pid) { - this.pid = pid; - } - -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/OrganizationPid.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/OrganizationPid.java deleted file mode 100644 index 575f4c8..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/OrganizationPid.java +++ /dev/null @@ -1,42 +0,0 @@ - -package eu.dnetlib.dhp.oa.model.graph; - -import java.io.Serializable; - -import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema; - -public - -class OrganizationPid implements Serializable { - @JsonSchema(description = "The scheme of the identifier (i.e. isni)") - private String scheme; - - @JsonSchema(description = "The value in the schema (i.e. 0000000090326370)") - private String value; - - public String getScheme() { - return scheme; - } - - public void setScheme(String scheme) { - this.scheme = scheme; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public static OrganizationPid newInstance(String scheme, String value) { - OrganizationPid cf = new OrganizationPid(); - - cf.setScheme(scheme); - cf.setValue(value); - - return cf; - } - -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Programme.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Programme.java deleted file mode 100644 index 14c9f40..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Programme.java +++ /dev/null @@ -1,41 +0,0 @@ - -package eu.dnetlib.dhp.oa.model.graph; - -import java.io.Serializable; - -import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema; - -/** - * To store information about the ec programme for the project. It has the following parameters: - private String code - * to store the code of the programme - private String description to store the description of the programme - */ -public class Programme implements Serializable { - @JsonSchema(description = "The code of the programme") - private String code; - - @JsonSchema(description = "The description of the programme") - private String description; - - public String getCode() { - return code; - } - - public void setCode(String code) { - this.code = code; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public static Programme newInstance(String code, String description) { - Programme p = new Programme(); - p.code = code; - p.description = description; - return p; - } -} diff --git a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Project.java b/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Project.java deleted file mode 100644 index 67aa076..0000000 --- a/dump-schema/src/main/java/eu/dnetlib/dhp/oa/model/graph/Project.java +++ /dev/null @@ -1,198 +0,0 @@ - -package eu.dnetlib.dhp.oa.model.graph; - -import java.io.Serializable; -import java.util.List; - -import com.github.imifou.jsonschema.module.addon.annotation.JsonSchema; - -/** - * This is the class representing the Project in the model used for the dumps of the whole graph. At the moment the dump - * of the Projects differs from the other dumps because we do not create relations between Funders (Organization) and - * Projects but we put the information about the Funder within the Project representation. We also removed the - * collected from element from the Project. No relation between the Project and the Datasource entity from which it is - * collected will be created. We will never create relations between Project and Datasource. In case some relation will - * be extracted from the Project they will refer the Funder and will be of type ( organization -> funds -> project, - * project -> isFundedBy -> organization) We also removed the duration parameter because the most of times it is set to - * 0. It has the following parameters: - * - private String id to store the id of the project (OpenAIRE id) - * - private String websiteurl to store the websiteurl of the project - * - private String code to store the grant agreement of the project - * - private String acronym to store the acronym of the project - * - private String title to store the tile of the project - * - private String startdate to store the start date - * - private String enddate to store the end date - * - private String callidentifier to store the call indentifier - * - private String keywords to store the keywords - * - private boolean openaccessmandateforpublications to store if the project must accomplish to the open access mandate - * for publications. This value will be set to true if one of the field in the project represented in the internal model - * is set to true - * - private boolean openaccessmandatefordataset to store if the project must accomplish to the open access mandate for - * dataset. It is set to the value in the corresponding filed of the project represented in the internal model - * - private List subject to store the list of subjects of the project - * - private List funding to store the list of funder of the project - * - private String summary to store the summary of the project - * - private Granted granted to store the granted amount - * - private List h2020programme to store the list of programmes the project is related to - */ - -public class Project implements Serializable { - private String id; - - private String websiteurl; - private String code; - private String acronym; - private String title; - - private String startdate; - - private String enddate; - - private String callidentifier; - - private String keywords; - - private boolean openaccessmandateforpublications; - - private boolean openaccessmandatefordataset; - private List subject; - - @JsonSchema(description = "Funding information for the project") - private List funding; - - private String summary; - - @JsonSchema(description = "The money granted to the project") - private Granted granted; - - @JsonSchema(description = "The h2020 programme funding the project") - private List h2020programme; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getWebsiteurl() { - return websiteurl; - } - - public void setWebsiteurl(String websiteurl) { - this.websiteurl = websiteurl; - } - - public String getCode() { - return code; - } - - public void setCode(String code) { - this.code = code; - } - - public String getAcronym() { - return acronym; - } - - public void setAcronym(String acronym) { - this.acronym = acronym; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getStartdate() { - return startdate; - } - - public void setStartdate(String startdate) { - this.startdate = startdate; - } - - public String getEnddate() { - return enddate; - } - - public void setEnddate(String enddate) { - this.enddate = enddate; - } - - public String getCallidentifier() { - return callidentifier; - } - - public void setCallidentifier(String callidentifier) { - this.callidentifier = callidentifier; - } - - public String getKeywords() { - return keywords; - } - - public void setKeywords(String keywords) { - this.keywords = keywords; - } - - public boolean isOpenaccessmandateforpublications() { - return openaccessmandateforpublications; - } - - public void setOpenaccessmandateforpublications(boolean openaccessmandateforpublications) { - this.openaccessmandateforpublications = openaccessmandateforpublications; - } - - public boolean isOpenaccessmandatefordataset() { - return openaccessmandatefordataset; - } - - public void setOpenaccessmandatefordataset(boolean openaccessmandatefordataset) { - this.openaccessmandatefordataset = openaccessmandatefordataset; - } - - public List getSubject() { - return subject; - } - - public void setSubject(List subject) { - this.subject = subject; - } - - public List getFunding() { - return funding; - } - - public void setFunding(List funding) { - this.funding = funding; - } - - public String getSummary() { - return summary; - } - - public void setSummary(String summary) { - this.summary = summary; - } - - public Granted getGranted() { - return granted; - } - - public void setGranted(Granted granted) { - this.granted = granted; - } - - public List getH2020programme() { - return h2020programme; - } - - public void setH2020programme(List h2020programme) { - this.h2020programme = h2020programme; - } -} diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/graph/dump/ResultMapper.java b/dump/src/main/java/eu/dnetlib/dhp/oa/graph/dump/ResultMapper.java index a4de2a0..4babf0a 100644 --- a/dump/src/main/java/eu/dnetlib/dhp/oa/graph/dump/ResultMapper.java +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/graph/dump/ResultMapper.java @@ -69,7 +69,8 @@ public class ResultMapper implements Serializable { } - private static void mapContext(Map communityMap, Result out, eu.dnetlib.dhp.schema.oaf.Result input) { + private static void mapContext(Map communityMap, Result out, + eu.dnetlib.dhp.schema.oaf.Result input) { Set communities = communityMap.keySet(); List contextList = Optional .ofNullable( diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/graph/dump/SendToZenodoHDFS.java b/dump/src/main/java/eu/dnetlib/dhp/oa/graph/dump/SendToZenodoHDFS.java index ac81971..9b153b9 100644 --- a/dump/src/main/java/eu/dnetlib/dhp/oa/graph/dump/SendToZenodoHDFS.java +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/graph/dump/SendToZenodoHDFS.java @@ -9,9 +9,9 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import eu.dnetlib.dhp.application.ArgumentApplicationParser; -import eu.dnetlib.dhp.common.api.MissingConceptDoiException; -import eu.dnetlib.dhp.common.api.ZenodoAPIClient; import eu.dnetlib.dhp.oa.graph.dump.exceptions.NoAvailableEntityTypeException; +import eu.dnetlib.dhp.oa.zenodoapi.MissingConceptDoiException; +import eu.dnetlib.dhp.oa.zenodoapi.ZenodoAPIClient; public class SendToZenodoHDFS implements Serializable { diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/InputStreamRequestBody.java b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/InputStreamRequestBody.java new file mode 100644 index 0000000..0f37da0 --- /dev/null +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/InputStreamRequestBody.java @@ -0,0 +1,61 @@ + +package eu.dnetlib.dhp.oa.zenodoapi; + +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +import java.io.IOException; +import java.io.InputStream; + +import okhttp3.MediaType; +import okhttp3.RequestBody; +import okhttp3.internal.Util; +import okio.BufferedSink; +import okio.Okio; +import okio.Source; + +public class InputStreamRequestBody extends RequestBody { + + private final InputStream inputStream; + private final MediaType mediaType; + private final long lenght; + + public static RequestBody create(final MediaType mediaType, final InputStream inputStream, final long len) { + + return new InputStreamRequestBody(inputStream, mediaType, len); + } + + private InputStreamRequestBody(InputStream inputStream, MediaType mediaType, long len) { + this.inputStream = inputStream; + this.mediaType = mediaType; + this.lenght = len; + } + + @Override + public MediaType contentType() { + return mediaType; + } + + @Override + public long contentLength() { + + return lenght; + + } + + @Override + public void writeTo(BufferedSink sink) throws IOException { + Source source = null; + try { + source = Okio.source(inputStream); + sink.writeAll(source); + } finally { + Util.closeQuietly(source); + } + } +} diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/MissingConceptDoiException.java b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/MissingConceptDoiException.java new file mode 100644 index 0000000..6bfdba6 --- /dev/null +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/MissingConceptDoiException.java @@ -0,0 +1,8 @@ + +package eu.dnetlib.dhp.oa.zenodoapi; + +public class MissingConceptDoiException extends Throwable { + public MissingConceptDoiException(String message) { + super(message); + } +} diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/ZenodoAPIClient.java b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/ZenodoAPIClient.java new file mode 100644 index 0000000..0da7d72 --- /dev/null +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/ZenodoAPIClient.java @@ -0,0 +1,403 @@ + +package eu.dnetlib.dhp.oa.zenodoapi; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.concurrent.TimeUnit; + +import org.apache.http.HttpHeaders; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.InputStreamEntity; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.jetbrains.annotations.NotNull; + +import com.google.gson.Gson; + +import eu.dnetlib.dhp.oa.zenodoapi.model.ZenodoModel; +import eu.dnetlib.dhp.oa.zenodoapi.model.ZenodoModelList; +import okhttp3.*; + +public class ZenodoAPIClient implements Serializable { + + String urlString; + String bucket; + + String deposition_id; + String access_token; + + public static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json; charset=utf-8"); + + private static final MediaType MEDIA_TYPE_ZIP = MediaType.parse("application/zip"); + + public String getUrlString() { + return urlString; + } + + public void setUrlString(String urlString) { + this.urlString = urlString; + } + + public String getBucket() { + return bucket; + } + + public void setBucket(String bucket) { + this.bucket = bucket; + } + + public void setDeposition_id(String deposition_id) { + this.deposition_id = deposition_id; + } + + public ZenodoAPIClient(String urlString, String access_token) { + + this.urlString = urlString; + this.access_token = access_token; + } + + /** + * Brand new deposition in Zenodo. It sets the deposition_id and the bucket where to store the files to upload + * + * @return response code + * @throws IOException + */ + public int newDeposition() throws IOException { + String json = "{}"; + + URL url = new URL(urlString); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestProperty(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString()); + conn.setRequestProperty(HttpHeaders.AUTHORIZATION, "Bearer " + access_token); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + try (OutputStream os = conn.getOutputStream()) { + byte[] input = json.getBytes("utf-8"); + os.write(input, 0, input.length); + } + + String body = getBody(conn); + + int responseCode = conn.getResponseCode(); + conn.disconnect(); + + if (!checkOKStatus(responseCode)) + throw new IOException("Unexpected code " + responseCode + body); + + ZenodoModel newSubmission = new Gson().fromJson(body, ZenodoModel.class); + this.bucket = newSubmission.getLinks().getBucket(); + this.deposition_id = newSubmission.getId(); + + return responseCode; + } + + public int uploadIS2(InputStream is, String fileName) throws IOException { + + final String crlf = "\r\n"; + final String twoHyphens = "--"; + final String boundary = "*****"; + + HttpPut put = new HttpPut(bucket + "/" + fileName); + + put.addHeader(HttpHeaders.CONTENT_TYPE, "application/zip"); + put.addHeader(HttpHeaders.AUTHORIZATION, "Bearer " + access_token); + + put.setEntity(new InputStreamEntity(is)); + + int statusCode; + try (CloseableHttpClient client = HttpClients.createDefault()) { + CloseableHttpResponse response = client.execute(put); + statusCode = response.getStatusLine().getStatusCode(); + + } + + if (!checkOKStatus(statusCode)) { + throw new IOException("Unexpected code " + statusCode); + } + + return statusCode; + } + + public int publish() throws IOException { + String json = "{}"; + HttpPost post = new HttpPost(urlString + "/" + deposition_id + "/actions/publish"); + post.addHeader(HttpHeaders.CONTENT_TYPE, "application/json"); + post.addHeader(HttpHeaders.AUTHORIZATION, "Bearer " + access_token); + post.setEntity(new StringEntity(json)); + int statusCode; + try (CloseableHttpClient client = HttpClients.createDefault()) { + CloseableHttpResponse response = client.execute(post); + statusCode = response.getStatusLine().getStatusCode(); + } + if (!checkOKStatus(statusCode)) { + throw new IOException("Unexpected code " + statusCode); + } + return statusCode; + } + + /** + * Upload files in Zenodo. + * + * @param is the inputStream for the file to upload + * @param file_name the name of the file as it will appear on Zenodo + * @return the response code + */ + public int uploadIS(InputStream is, String file_name) throws IOException { + + URL url = new URL(bucket + "/" + file_name); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestProperty(HttpHeaders.CONTENT_TYPE, "application/zip"); + conn.setRequestProperty(HttpHeaders.AUTHORIZATION, "Bearer " + access_token); + conn.setDoOutput(true); + conn.setRequestMethod("PUT"); + + byte[] buf = new byte[8192]; + int length; + try (OutputStream os = conn.getOutputStream()) { + while ((length = is.read(buf)) != -1) { + os.write(buf, 0, length); + os.flush(); + } + + } + int responseCode = conn.getResponseCode(); + if (!checkOKStatus(responseCode)) { + throw new IOException("Unexpected code " + responseCode + getBody(conn)); + } + + return responseCode; + } + + @NotNull + private String getBody(HttpURLConnection conn) throws IOException { + String body = "{}"; + try (BufferedReader br = new BufferedReader( + new InputStreamReader(conn.getInputStream(), "utf-8"))) { + StringBuilder response = new StringBuilder(); + String responseLine = null; + while ((responseLine = br.readLine()) != null) { + response.append(responseLine.trim()); + } + + body = response.toString(); + + } + return body; + } + + public int uploadIS3(InputStream is, String file_name, long len) throws IOException { + OkHttpClient httpClient = new OkHttpClient.Builder() + .writeTimeout(600, TimeUnit.SECONDS) + .readTimeout(600, TimeUnit.SECONDS) + .connectTimeout(600, TimeUnit.SECONDS) + .build(); + + Request request = new Request.Builder() + .url(bucket + "/" + file_name) + .addHeader(HttpHeaders.CONTENT_TYPE, "application/zip") // add request headers + .addHeader(HttpHeaders.AUTHORIZATION, "Bearer " + access_token) + .put(InputStreamRequestBody.create(MEDIA_TYPE_ZIP, is, len)) + .build(); + + try (Response response = httpClient.newCall(request).execute()) { + if (!response.isSuccessful()) + throw new IOException("Unexpected code " + response + response.body().string()); + return response.code(); + } + } + + /** + * Associates metadata information to the current deposition + * + * @param metadata the metadata + * @return response code + * @throws IOException + */ + public int sendMretadata(String metadata) throws IOException { + + URL url = new URL(urlString + "/" + deposition_id); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestProperty(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString()); + conn.setRequestProperty(HttpHeaders.AUTHORIZATION, "Bearer " + access_token); + conn.setDoOutput(true); + conn.setRequestMethod("PUT"); + + try (OutputStream os = conn.getOutputStream()) { + byte[] input = metadata.getBytes("utf-8"); + os.write(input, 0, input.length); + + } + + final int responseCode = conn.getResponseCode(); + conn.disconnect(); + if (!checkOKStatus(responseCode)) + throw new IOException("Unexpected code " + responseCode + getBody(conn)); + + return responseCode; + + } + + private boolean checkOKStatus(int responseCode) { + + if (HttpURLConnection.HTTP_OK == responseCode || + HttpURLConnection.HTTP_CREATED == responseCode) + return true; + return false; + } + + /** + * To create a new version of an already published deposition. It sets the deposition_id and the bucket to be used + * for the new version. + * + * @param concept_rec_id the concept record id of the deposition for which to create a new version. It is the last + * part of the url for the DOI Zenodo suggests to use to cite all versions: DOI: 10.xxx/zenodo.656930 + * concept_rec_id = 656930 + * @return response code + * @throws IOException + * @throws MissingConceptDoiException + */ + public int newVersion(String concept_rec_id) throws Exception, MissingConceptDoiException { + setDepositionId(concept_rec_id, 1); + String json = "{}"; + + URL url = new URL(urlString + "/" + deposition_id + "/actions/newversion"); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + + conn.setRequestProperty(HttpHeaders.AUTHORIZATION, "Bearer " + access_token); + conn.setDoOutput(true); + conn.setRequestMethod("POST"); + + try (OutputStream os = conn.getOutputStream()) { + byte[] input = json.getBytes("utf-8"); + os.write(input, 0, input.length); + + } + + String body = getBody(conn); + + int responseCode = conn.getResponseCode(); + + conn.disconnect(); + if (!checkOKStatus(responseCode)) + throw new IOException("Unexpected code " + responseCode + body); + + ZenodoModel zenodoModel = new Gson().fromJson(body, ZenodoModel.class); + String latest_draft = zenodoModel.getLinks().getLatest_draft(); + deposition_id = latest_draft.substring(latest_draft.lastIndexOf("/") + 1); + bucket = getBucket(latest_draft); + + return responseCode; + + } + + /** + * To finish uploading a version or new deposition not published + * It sets the deposition_id and the bucket to be used + * + * + * @param deposition_id the deposition id of the not yet published upload + * concept_rec_id = 656930 + * @return response code + * @throws IOException + * @throws MissingConceptDoiException + */ + public int uploadOpenDeposition(String deposition_id) throws IOException, MissingConceptDoiException { + + this.deposition_id = deposition_id; + + String json = "{}"; + + URL url = new URL(urlString + "/" + deposition_id); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + + conn.setRequestProperty(HttpHeaders.AUTHORIZATION, "Bearer " + access_token); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + try (OutputStream os = conn.getOutputStream()) { + byte[] input = json.getBytes("utf-8"); + os.write(input, 0, input.length); + } + + String body = getBody(conn); + + int responseCode = conn.getResponseCode(); + conn.disconnect(); + + if (!checkOKStatus(responseCode)) + throw new IOException("Unexpected code " + responseCode + body); + + ZenodoModel zenodoModel = new Gson().fromJson(body, ZenodoModel.class); + bucket = zenodoModel.getLinks().getBucket(); + + return responseCode; + + } + + private void setDepositionId(String concept_rec_id, Integer page) throws Exception, MissingConceptDoiException { + + ZenodoModelList zenodoModelList = new Gson() + .fromJson(getPrevDepositions(String.valueOf(page)), ZenodoModelList.class); + + for (ZenodoModel zm : zenodoModelList) { + if (zm.getConceptrecid().equals(concept_rec_id)) { + deposition_id = zm.getId(); + return; + } + } + if (zenodoModelList.size() == 0) + throw new MissingConceptDoiException( + "The concept record id specified was missing in the list of depositions"); + setDepositionId(concept_rec_id, page + 1); + + } + + private String getPrevDepositions(String page) throws Exception { + + HttpGet get = new HttpGet(urlString); + URI uri = new URIBuilder(get.getURI()).addParameter("page", page).build(); + + get.setURI(uri); + + get.addHeader(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString()); + get.addHeader(HttpHeaders.AUTHORIZATION, "Bearer " + access_token); + try (CloseableHttpClient client = HttpClients.createDefault()) { + CloseableHttpResponse response = client.execute(get); + final String body = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8); + return body; + } + } + + private String getBucket(String inputUurl) throws IOException { + + URL url = new URL(inputUurl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestProperty(HttpHeaders.CONTENT_TYPE, ContentType.APPLICATION_JSON.toString()); + conn.setRequestProperty(HttpHeaders.AUTHORIZATION, "Bearer " + access_token); + conn.setDoOutput(true); + conn.setRequestMethod("GET"); + + String body = getBody(conn); + + int responseCode = conn.getResponseCode(); + + conn.disconnect(); + if (!checkOKStatus(responseCode)) + throw new IOException("Unexpected code " + responseCode + body); + + ZenodoModel zenodoModel = new Gson().fromJson(body, ZenodoModel.class); + + return zenodoModel.getLinks().getBucket(); + + } + +} diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Community.java b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Community.java new file mode 100644 index 0000000..008737b --- /dev/null +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Community.java @@ -0,0 +1,18 @@ + +package eu.dnetlib.dhp.oa.zenodoapi.model; + +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +public class Community { + private String identifier; + + public String getIdentifier() { + return identifier; + } + + public void setIdentifier(String identifier) { + this.identifier = identifier; + } +} diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Creator.java b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Creator.java new file mode 100644 index 0000000..9e6eab8 --- /dev/null +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Creator.java @@ -0,0 +1,51 @@ + +package eu.dnetlib.dhp.oa.zenodoapi.model; + +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +public class Creator { + private String affiliation; + private String name; + private String orcid; + + public String getAffiliation() { + return affiliation; + } + + public void setAffiliation(String affiliation) { + this.affiliation = affiliation; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getOrcid() { + return orcid; + } + + public void setOrcid(String orcid) { + this.orcid = orcid; + } + + public static Creator newInstance(String name, String affiliation, String orcid) { + Creator c = new Creator(); + if (name != null) { + c.name = name; + } + if (affiliation != null) { + c.affiliation = affiliation; + } + if (orcid != null) { + c.orcid = orcid; + } + + return c; + } +} diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/File.java b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/File.java new file mode 100644 index 0000000..540bc7c --- /dev/null +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/File.java @@ -0,0 +1,52 @@ + +package eu.dnetlib.dhp.oa.zenodoapi.model; + +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +import java.io.Serializable; + +public class File implements Serializable { + private String checksum; + private String filename; + private long filesize; + private String id; + + public String getChecksum() { + return checksum; + } + + public void setChecksum(String checksum) { + this.checksum = checksum; + } + + public String getFilename() { + return filename; + } + + public void setFilename(String filename) { + this.filename = filename; + } + + public long getFilesize() { + return filesize; + } + + public void setFilesize(long filesize) { + this.filesize = filesize; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + +} diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Grant.java b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Grant.java new file mode 100644 index 0000000..3a9ddd2 --- /dev/null +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Grant.java @@ -0,0 +1,31 @@ + +package eu.dnetlib.dhp.oa.zenodoapi.model; + +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +import java.io.Serializable; + +public class Grant implements Serializable { + private String id; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public static Grant newInstance(String id) { + Grant g = new Grant(); + g.id = id; + + return g; + } +} diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Links.java b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Links.java new file mode 100644 index 0000000..e2c3a74 --- /dev/null +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Links.java @@ -0,0 +1,100 @@ + +package eu.dnetlib.dhp.oa.zenodoapi.model; + +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +import java.io.Serializable; + +public class Links implements Serializable { + + private String bucket; + + private String discard; + + private String edit; + private String files; + private String html; + private String latest_draft; + private String latest_draft_html; + private String publish; + + private String self; + + public String getBucket() { + return bucket; + } + + public void setBucket(String bucket) { + this.bucket = bucket; + } + + public String getDiscard() { + return discard; + } + + public void setDiscard(String discard) { + this.discard = discard; + } + + public String getEdit() { + return edit; + } + + public void setEdit(String edit) { + this.edit = edit; + } + + public String getFiles() { + return files; + } + + public void setFiles(String files) { + this.files = files; + } + + public String getHtml() { + return html; + } + + public void setHtml(String html) { + this.html = html; + } + + public String getLatest_draft() { + return latest_draft; + } + + public void setLatest_draft(String latest_draft) { + this.latest_draft = latest_draft; + } + + public String getLatest_draft_html() { + return latest_draft_html; + } + + public void setLatest_draft_html(String latest_draft_html) { + this.latest_draft_html = latest_draft_html; + } + + public String getPublish() { + return publish; + } + + public void setPublish(String publish) { + this.publish = publish; + } + + public String getSelf() { + return self; + } + + public void setSelf(String self) { + this.self = self; + } +} diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Metadata.java b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Metadata.java new file mode 100644 index 0000000..0aaf9b6 --- /dev/null +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/Metadata.java @@ -0,0 +1,161 @@ + +package eu.dnetlib.dhp.oa.zenodoapi.model; + +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +import java.io.Serializable; +import java.util.List; + +public class Metadata implements Serializable { + + private String access_right; + private List communities; + private List creators; + private String description; + private String doi; + private List grants; + private List keywords; + private String language; + private String license; + private PrereserveDoi prereserve_doi; + private String publication_date; + private List references; + private List related_identifiers; + private String title; + private String upload_type; + private String version; + + public String getUpload_type() { + return upload_type; + } + + public void setUpload_type(String upload_type) { + this.upload_type = upload_type; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getAccess_right() { + return access_right; + } + + public void setAccess_right(String access_right) { + this.access_right = access_right; + } + + public List getCommunities() { + return communities; + } + + public void setCommunities(List communities) { + this.communities = communities; + } + + public List getCreators() { + return creators; + } + + public void setCreators(List creators) { + this.creators = creators; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getDoi() { + return doi; + } + + public void setDoi(String doi) { + this.doi = doi; + } + + public List getGrants() { + return grants; + } + + public void setGrants(List grants) { + this.grants = grants; + } + + public List getKeywords() { + return keywords; + } + + public void setKeywords(List keywords) { + this.keywords = keywords; + } + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + public String getLicense() { + return license; + } + + public void setLicense(String license) { + this.license = license; + } + + public PrereserveDoi getPrereserve_doi() { + return prereserve_doi; + } + + public void setPrereserve_doi(PrereserveDoi prereserve_doi) { + this.prereserve_doi = prereserve_doi; + } + + public String getPublication_date() { + return publication_date; + } + + public void setPublication_date(String publication_date) { + this.publication_date = publication_date; + } + + public List getReferences() { + return references; + } + + public void setReferences(List references) { + this.references = references; + } + + public List getRelated_identifiers() { + return related_identifiers; + } + + public void setRelated_identifiers(List related_identifiers) { + this.related_identifiers = related_identifiers; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } +} diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/PrereserveDoi.java b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/PrereserveDoi.java new file mode 100644 index 0000000..a38b338 --- /dev/null +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/PrereserveDoi.java @@ -0,0 +1,33 @@ + +package eu.dnetlib.dhp.oa.zenodoapi.model; + +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +import java.io.Serializable; + +public class PrereserveDoi implements Serializable { + private String doi; + private String recid; + + public String getDoi() { + return doi; + } + + public void setDoi(String doi) { + this.doi = doi; + } + + public String getRecid() { + return recid; + } + + public void setRecid(String recid) { + this.recid = recid; + } +} diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/RelatedIdentifier.java b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/RelatedIdentifier.java new file mode 100644 index 0000000..d128993 --- /dev/null +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/RelatedIdentifier.java @@ -0,0 +1,51 @@ + +package eu.dnetlib.dhp.oa.zenodoapi.model; + +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +import java.io.Serializable; + +public class RelatedIdentifier implements Serializable { + private String identifier; + private String relation; + private String resource_type; + private String scheme; + + public String getIdentifier() { + return identifier; + } + + public void setIdentifier(String identifier) { + this.identifier = identifier; + } + + public String getRelation() { + return relation; + } + + public void setRelation(String relation) { + this.relation = relation; + } + + public String getResource_type() { + return resource_type; + } + + public void setResource_type(String resource_type) { + this.resource_type = resource_type; + } + + public String getScheme() { + return scheme; + } + + public void setScheme(String scheme) { + this.scheme = scheme; + } +} diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/ZenodoModel.java b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/ZenodoModel.java new file mode 100644 index 0000000..1a0a1a9 --- /dev/null +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/ZenodoModel.java @@ -0,0 +1,126 @@ + +package eu.dnetlib.dhp.oa.zenodoapi.model; + +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +import java.io.Serializable; +import java.util.List; + +public class ZenodoModel implements Serializable { + + private String conceptrecid; + private String created; + + private List files; + private String id; + private Links links; + private Metadata metadata; + private String modified; + private String owner; + private String record_id; + private String state; + private boolean submitted; + private String title; + + public String getConceptrecid() { + return conceptrecid; + } + + public void setConceptrecid(String conceptrecid) { + this.conceptrecid = conceptrecid; + } + + public String getCreated() { + return created; + } + + public void setCreated(String created) { + this.created = created; + } + + public List getFiles() { + return files; + } + + public void setFiles(List files) { + this.files = files; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Links getLinks() { + return links; + } + + public void setLinks(Links links) { + this.links = links; + } + + public Metadata getMetadata() { + return metadata; + } + + public void setMetadata(Metadata metadata) { + this.metadata = metadata; + } + + public String getModified() { + return modified; + } + + public void setModified(String modified) { + this.modified = modified; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getRecord_id() { + return record_id; + } + + public void setRecord_id(String record_id) { + this.record_id = record_id; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public boolean isSubmitted() { + return submitted; + } + + public void setSubmitted(boolean submitted) { + this.submitted = submitted; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } +} diff --git a/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/ZenodoModelList.java b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/ZenodoModelList.java new file mode 100644 index 0000000..858eff8 --- /dev/null +++ b/dump/src/main/java/eu/dnetlib/dhp/oa/zenodoapi/model/ZenodoModelList.java @@ -0,0 +1,15 @@ + +package eu.dnetlib.dhp.oa.zenodoapi.model; + +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +/** + * @author miriam.baglioni + * @Date 01/07/23 + */ +import java.util.ArrayList; + +public class ZenodoModelList extends ArrayList { +}