Skip to content
Snippets Groups Projects
Commit d52cf452 authored by Martin Weise's avatar Martin Weise
Browse files

Merge branch '290-use-dois-as-pids' into 'dev'

Resolve "Use DOIs as PIDs"

See merge request !150
parents 9328e711 ea5cfdb6
No related branches found
No related tags found
2 merge requests!163Relase 1.3.0,!150Resolve "Use DOIs as PIDs"
Showing
with 336 additions and 8 deletions
......@@ -21,3 +21,8 @@ LOG_LEVEL=trace # error, warning, info, debug, trace
DEFAULT_ROLES=ROLE_RESEARCHER
SUPERUSERS=user1,user2
ELASTIC_PASSWORD=elastic
DOI_URL=https://doi.org
DATACITE_URL=https://api.datacite.org
DATACITE_PREFIX=<prefix>
DATACITE_USERNAME=<username>
DATACITE_PASSWORD=<password>
\ No newline at end of file
......@@ -21,3 +21,8 @@ LOG_LEVEL=trace # error, warning, info, debug, trace
DEFAULT_ROLES=ROLE_RESEARCHER
SUPERUSERS=user1,user2
ELASTIC_PASSWORD=elastic
DOI_URL=https://doi.org
DATACITE_URL=https://api.datacite.org
DATACITE_PREFIX=<prefix>
DATACITE_USERNAME=<username>
DATACITE_PASSWORD=<password>
\ No newline at end of file
......@@ -3,7 +3,7 @@ target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
dbrepo-*
# dbrepo-*
# Notebooks
.jupyter/
......
package at.tuwien.datacite;
import lombok.*;
import java.io.Serializable;
@Data
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DataCiteBody<T> implements Serializable {
private DataCiteData<T> data;
}
package at.tuwien.datacite;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.*;
import java.io.Serializable;
@Data
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonIgnoreProperties(ignoreUnknown = true)
public class DataCiteData<T> implements Serializable {
private String id;
private String type;
private T attributes;
}
package at.tuwien.datacite.doi;
import lombok.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
@Data
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DataCiteCreateDoi implements Serializable {
private String url;
private String prefix;
private DataCiteDoiTypes types;
private DataCiteDoiEvent event;
private List<DataCiteDoiTitle> titles;
@NotBlank
private String publisher;
@NotNull
private Integer publicationYear;
private Integer publicationMonth;
private Integer publicationDay;
private String language;
private List<DataCiteDoiRights> rightsList;
private List<DataCiteDoiCreator> creators;
private List<DataCiteDoiRelatedIdentifier> relatedIdentifiers;
}
package at.tuwien.datacite.doi;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.*;
import java.io.Serializable;
@Data
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonIgnoreProperties(ignoreUnknown = true)
public class DataCiteDoi implements Serializable {
private String doi;
}
package at.tuwien.datacite.doi;
import lombok.*;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.List;
@Data
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DataCiteDoiCreator implements Serializable {
@NotBlank
private String name;
private String givenName;
private String familyName;
private List<DataCiteDoiCreatorAffiliation> affiliation;
private List<DataCiteDoiCreatorNameIdentifier> nameIdentifiers;
}
package at.tuwien.datacite.doi;
import lombok.*;
import java.io.Serializable;
@Data
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DataCiteDoiCreatorAffiliation implements Serializable {
private String affiliationIdentifier;
private String affiliationScheme;
private String name;
private String schemeUri;
}
package at.tuwien.datacite.doi;
import lombok.*;
import java.io.Serializable;
@Data
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DataCiteDoiCreatorNameIdentifier implements Serializable {
private String schemeUri;
private String nameIdentifier;
private String nameIdentifierScheme;
}
package at.tuwien.datacite.doi;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Getter
public enum DataCiteDoiEvent implements Serializable {
@JsonProperty("publish")
PUBLISH("publish"),
@JsonProperty("register")
REGISTER("register"),
@JsonProperty("hide")
HIDE("hide");
private final String name;
DataCiteDoiEvent(String name) {
this.name = name;
}
@Override
public String toString() {
return this.name;
}
}
package at.tuwien.datacite.doi;
import lombok.*;
import java.io.Serializable;
@Data
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DataCiteDoiRelatedIdentifier implements Serializable {
private String relatedIdentifier;
private String relatedIdentifierType;
private String relationType;
private String resourceTypeGeneral;
}
package at.tuwien.datacite.doi;
import lombok.*;
import java.io.Serializable;
@Data
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DataCiteDoiRights implements Serializable {
private String rights;
private String rightsUri;
private String lang;
}
package at.tuwien.datacite.doi;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
@Data
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DataCiteDoiTitle implements Serializable {
@NotBlank
private String title;
private Type titleType;
private String lang;
public enum Type {
@JsonProperty("AlternativeTitle")
ALTERNATIVE_TITLE("AlternativeTitle"),
@JsonProperty("Subtitle")
SUBTITLE("Subtitle"),
@JsonProperty("TranslatedTitle")
TRANSLATED_TITLE("TranslatedTitle"),
@JsonProperty("Other")
OTHER("Other");
private final String name;
Type(String name) {
this.name = name;
}
@Override
public String toString() {
return this.name;
}
}
}
package at.tuwien.datacite.doi;
import lombok.*;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Data
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DataCiteDoiTypes implements Serializable {
public static final DataCiteDoiTypes DATASET = DataCiteDoiTypes.builder().resourceTypeGeneral("Dataset").build();
@NotNull
private String resourceTypeGeneral;
private String resourceType;
private String schemaOrg;
private String bibtex;
private String citeproc;
private String ris;
}
......@@ -172,7 +172,7 @@ public class IdentifierEndpoint extends AbstractEndpoint {
})
public ResponseEntity<IdentifierDto> update(@NotNull @PathVariable("id") Long id,
@NotNull @Valid @RequestBody IdentifierDto data)
throws IdentifierPublishingNotAllowedException, IdentifierNotFoundException {
throws IdentifierPublishingNotAllowedException, IdentifierNotFoundException, IdentifierRequestException {
log.debug("endpoint update identifier, id={}, data={}", id, data);
final Identifier identifier = identifierService.update(id, data);
return ResponseEntity.accepted()
......@@ -195,7 +195,7 @@ public class IdentifierEndpoint extends AbstractEndpoint {
schema = @Schema(implementation = ApiErrorDto.class))}),
})
public ResponseEntity<?> delete(@NotNull @PathVariable("id") Long id)
throws IdentifierNotFoundException {
throws IdentifierNotFoundException, NotAllowedException {
log.debug("endpoint delete identifier, id={}", id);
identifierService.delete(id);
return ResponseEntity.accepted()
......
fda:
datacite:
url: "${DATACITE_URL}"
prefix: "${DATACITE_PREFIX}"
username: "${DATACITE_USERNAME}"
password: "${DATACITE_PASSWORD}"
\ No newline at end of file
[# th:each="creator,idx: ${creators}"][# th:if="${idx.index} &gt; 0 and ${idx.index} != ${idx.size} - 1 and ${idx.index} != 0"], [/][# th:if="${idx.index} == ${idx.size} - 1 and ${idx.size} != 1"] & [/][[${creator.firstname.substring(0,1)}]]., [[${creator.lastname}]][/][# th:if="${creators.size()} &gt; 0"]. [/]([[${publicationYear}]]). [[${title}]]. [[${publisher}]]. [[${doi}]]
\ No newline at end of file
[# th:each="creator,idx: ${creators}"][# th:if="${idx.index} &gt; 0 and ${idx.index} != ${idx.size} - 1 and ${idx.index} != 0"], [/][# th:if="${idx.index} == ${idx.size} - 1 and ${idx.size} != 1"] & [/][[${creator.firstname.substring(0,1)}]]., [[${creator.lastname}]][/][# th:if="${creators.size()} &gt; 0"]. [/]([[${publicationYear}]]). [[${title}]]. [[${publisher}]]. [[${identifierType} == 'doi' ? 'https://doi.org/' : '']][[${identifier}]]
\ No newline at end of file
@misc{dbrepo[[${publicationYear}]],
author = {[# th:each="creator,idx: ${creators}"][# th:if="${idx.index} &gt; 0"] and [/][[${creator.lastname}]], [[${creator.firstname}]][/]},
title = {[[${title}]]},
howpublished = {\url{[[${doi}]]}},
[[${identifierType}]] = {[[${identifierType} == 'url' ? '\url{' : '']][[${identifier}]][[${identifierType} == 'url' ? '}' : '']]},
month = {[[${publicationMonth}]]},
year = {[[${publicationYear}]]}
}
\ No newline at end of file
[1] [# th:each="creator,idx: ${creators}"][# th:if="${idx.index} &gt; 0"] and [/][[${creator.firstname.substring(0,1)}]]. [[${creator.lastname}]][/][# th:if="${creators.size()} &gt; 0"], [/]“[[${title}]]“, [[${publisher}]], [[${publicationYear}]], doi: [[${doi}]].
\ No newline at end of file
[1] [# th:each="creator,idx: ${creators}"][# th:if="${idx.index} &gt; 0"] and [/][[${creator.firstname.substring(0,1)}]]. [[${creator.lastname}]][/][# th:if="${creators.size()} &gt; 0"], [/]“[[${title}]]“, [[${publisher}]], [[${publicationYear}]], [[${identifierType} == 'url' ? 'Available: ' : '']][[${identifier}]].
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment