multiple configuration for repository
This commit is contained in:
parent
c53553c25c
commit
09d45d0538
2
pom.xml
2
pom.xml
|
@ -52,7 +52,7 @@
|
|||
<dependency>
|
||||
<groupId>gr.cite.opendmp</groupId>
|
||||
<artifactId>repositorydepositbase</artifactId>
|
||||
<version>1.0.2</version>
|
||||
<version>1.0.4</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package eu.eudat.depositinterface.dspacerepository.config;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface ConfigLoader {
|
||||
byte[] getLogo();
|
||||
DSpaceConfig getDSpaceConfig();
|
||||
byte[] getLogo(String repositoryId);
|
||||
List<DSpaceConfig> getDSpaceConfig();
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package eu.eudat.depositinterface.dspacerepository.config;
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -8,46 +9,58 @@ import org.springframework.core.env.Environment;
|
|||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Service("dspaceConfigLoader")
|
||||
public class ConfigLoaderImpl implements ConfigLoader{
|
||||
private static final Logger logger = LoggerFactory.getLogger(ConfigLoaderImpl.class);
|
||||
private static final ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
private DSpaceConfig dspaceConfig;
|
||||
private List<DSpaceConfig> dSpaceConfigs = new ArrayList<>();
|
||||
|
||||
private final Environment environment;
|
||||
|
||||
@Autowired
|
||||
private Environment environment;
|
||||
public ConfigLoaderImpl(Environment environment){
|
||||
this.environment = environment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public DSpaceConfig getDSpaceConfig() {
|
||||
if(dspaceConfig == null){
|
||||
public List<DSpaceConfig> getDSpaceConfig() {
|
||||
if(dSpaceConfigs == null || dSpaceConfigs.isEmpty()){
|
||||
try{
|
||||
dspaceConfig = mapper.readValue(getStreamFromPath(environment.getProperty("configuration.dspace")), DSpaceConfig.class);
|
||||
dSpaceConfigs = mapper.readValue(getStreamFromPath(environment.getProperty("configuration.dspace")), new TypeReference<List<DSpaceConfig>>() {});
|
||||
} catch (IOException e) {
|
||||
logger.error(e.getLocalizedMessage(), e);
|
||||
}
|
||||
}
|
||||
return dspaceConfig;
|
||||
return dSpaceConfigs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getLogo() {
|
||||
String logo = environment.getProperty("configuration.logo");
|
||||
InputStream logoStream;
|
||||
if(logo != null && !logo.isEmpty()) {
|
||||
logoStream = getStreamFromPath(logo);
|
||||
}
|
||||
else{
|
||||
logoStream = getClass().getClassLoader().getResourceAsStream("dspace.svg");
|
||||
}
|
||||
try {
|
||||
return (logoStream != null) ? logoStream.readAllBytes() : null;
|
||||
}
|
||||
catch (IOException e){
|
||||
logger.error(e.getMessage(), e);
|
||||
public byte[] getLogo(String repositoryId) {
|
||||
if (!dSpaceConfigs.isEmpty()) {
|
||||
DSpaceConfig dSpaceConfig = dSpaceConfigs.stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst().orElse(null);
|
||||
if (dSpaceConfig != null) {
|
||||
String logo = dSpaceConfig.getLogo();
|
||||
InputStream logoStream;
|
||||
if(logo != null && !logo.isEmpty()) {
|
||||
logoStream = getStreamFromPath(logo);
|
||||
}
|
||||
else{
|
||||
logoStream = getClass().getClassLoader().getResourceAsStream("dspace.svg");
|
||||
}
|
||||
try {
|
||||
return (logoStream != null) ? logoStream.readAllBytes() : null;
|
||||
}
|
||||
catch (IOException e){
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private InputStream getStreamFromPath(String filePath) {
|
||||
|
|
|
@ -51,6 +51,8 @@ public class DSpaceConfig {
|
|||
private String collection;
|
||||
@JsonProperty("hasLogo")
|
||||
private boolean hasLogo;
|
||||
@JsonProperty("logo")
|
||||
private String logo;
|
||||
|
||||
public int getDepositType() {
|
||||
return depositType;
|
||||
|
@ -122,6 +124,13 @@ public class DSpaceConfig {
|
|||
this.hasLogo = hasLogo;
|
||||
}
|
||||
|
||||
public String getLogo() {
|
||||
return logo;
|
||||
}
|
||||
public void setLogo(String logo) {
|
||||
this.logo = logo;
|
||||
}
|
||||
|
||||
public RepositoryDepositConfiguration toRepoConfig() {
|
||||
RepositoryDepositConfiguration config = new RepositoryDepositConfiguration();
|
||||
config.setDepositType(this.depositType);
|
||||
|
|
|
@ -32,14 +32,15 @@ import java.nio.file.Files;
|
|||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class DSpaceDeposit implements RepositoryDeposit {
|
||||
private static final Logger logger = LoggerFactory.getLogger(DSpaceDeposit.class);
|
||||
private static final ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
private ConfigLoader configLoader;
|
||||
private Environment environment;
|
||||
private final ConfigLoader configLoader;
|
||||
private final Environment environment;
|
||||
|
||||
private String csrfToken;
|
||||
private String bearerToken;
|
||||
|
@ -51,83 +52,90 @@ public class DSpaceDeposit implements RepositoryDeposit {
|
|||
public DSpaceDeposit(ConfigLoader configLoader, Environment environment){
|
||||
this.configLoader = configLoader;
|
||||
this.environment = environment;
|
||||
this.repositoryApiUrl = configLoader.getDSpaceConfig().getRepositoryUrl();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String deposit(DMPDepositModel dmpDepositModel, String repositoryAccessToken) throws Exception {
|
||||
public String deposit(String repositoryId, DMPDepositModel dmpDepositModel, String repositoryAccessToken) throws Exception {
|
||||
|
||||
DSpaceConfig dSpaceConfig = this.configLoader.getDSpaceConfig();
|
||||
DSpaceConfig dSpaceConfig = this.configLoader.getDSpaceConfig().stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst().orElse(null);
|
||||
|
||||
this.setCsrfToken();
|
||||
this.setBearerToken(dSpaceConfig.getEmail(), dSpaceConfig.getPassword());
|
||||
this.setSubmitterId();
|
||||
if (dSpaceConfig != null) {
|
||||
|
||||
if(dmpDepositModel.getPreviousDOI() == null || dmpDepositModel.getPreviousDOI().isEmpty()){
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
|
||||
this.repositoryApiUrl = dSpaceConfig.getRepositoryUrl();
|
||||
|
||||
HttpHeaders headers = this.createHeaders();
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
String url = this.repositoryApiUrl + "submission/workspaceitems?owningCollection=" + dSpaceConfig.getCollection();
|
||||
Object response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>("", headers), Object.class).getBody();
|
||||
Map<String, Object> respMap = objectMapper.convertValue(response, Map.class);
|
||||
String id = String.valueOf(respMap.get("id"));
|
||||
respMap = (Map<String, Object>) respMap.get("_embedded");
|
||||
respMap = (Map<String, Object>) respMap.get("item");
|
||||
String itemId = String.valueOf(respMap.get("id"));
|
||||
this.setCsrfToken();
|
||||
this.setBearerToken(dSpaceConfig.getEmail(), dSpaceConfig.getPassword());
|
||||
this.setSubmitterId();
|
||||
|
||||
url = this.repositoryApiUrl + "submission/workspaceitems/" + id;
|
||||
sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.title", dmpDepositModel.getLabel());
|
||||
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
||||
sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.date.issued", df.format(new Date()));
|
||||
if (dmpDepositModel.getPreviousDOI() == null || dmpDepositModel.getPreviousDOI().isEmpty()) {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
|
||||
|
||||
PatchBooleanEntity entity = new PatchBooleanEntity();
|
||||
entity.setOp("add");
|
||||
entity.setPath("/sections/license/granted");
|
||||
entity.setValue(true);
|
||||
HttpHeaders headers = this.createHeaders();
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
String url = this.repositoryApiUrl + "submission/workspaceitems?owningCollection=" + dSpaceConfig.getCollection();
|
||||
Object response = restTemplate.exchange(url, HttpMethod.POST, new HttpEntity<>("", headers), Object.class).getBody();
|
||||
Map<String, Object> respMap = objectMapper.convertValue(response, Map.class);
|
||||
String id = String.valueOf(respMap.get("id"));
|
||||
respMap = (Map<String, Object>) respMap.get("_embedded");
|
||||
respMap = (Map<String, Object>) respMap.get("item");
|
||||
String itemId = String.valueOf(respMap.get("id"));
|
||||
|
||||
List<PatchBooleanEntity> entityList = new ArrayList<>();
|
||||
entityList.add(entity);
|
||||
logger.debug(objectMapper.writeValueAsString(entityList));
|
||||
restTemplate.exchange(url, HttpMethod.PATCH, new HttpEntity<>(entityList, headers), Object.class);
|
||||
url = this.repositoryApiUrl + "submission/workspaceitems/" + id;
|
||||
sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.title", dmpDepositModel.getLabel());
|
||||
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
||||
sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.date.issued", df.format(new Date()));
|
||||
|
||||
sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.contributor.author", "Argos User");
|
||||
sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.publisher", "Argos User");
|
||||
PatchBooleanEntity entity = new PatchBooleanEntity();
|
||||
entity.setOp("add");
|
||||
entity.setPath("/sections/license/granted");
|
||||
entity.setValue(true);
|
||||
|
||||
this.uploadFiles(dmpDepositModel, url);
|
||||
List<PatchBooleanEntity> entityList = new ArrayList<>();
|
||||
entityList.add(entity);
|
||||
logger.debug(objectMapper.writeValueAsString(entityList));
|
||||
restTemplate.exchange(url, HttpMethod.PATCH, new HttpEntity<>(entityList, headers), Object.class);
|
||||
|
||||
String workFlowId = this.createWorkflow(url);
|
||||
sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.contributor.author", "Argos User");
|
||||
sendPatchRequest(url, "add", "/sections/traditionalpageone/dc.publisher", "Argos User");
|
||||
|
||||
this.setBearerToken(dSpaceConfig.getWorkflowEmail(), dSpaceConfig.getWorkflowPassword());
|
||||
String claimedTaskId = this.createClaimedTask(workFlowId);
|
||||
this.uploadFiles(dmpDepositModel, url);
|
||||
|
||||
this.submitTask(claimedTaskId);
|
||||
String workFlowId = this.createWorkflow(url);
|
||||
|
||||
return this.getHandle(itemId);
|
||||
this.setBearerToken(dSpaceConfig.getWorkflowEmail(), dSpaceConfig.getWorkflowPassword());
|
||||
String claimedTaskId = this.createClaimedTask(workFlowId);
|
||||
|
||||
this.submitTask(claimedTaskId);
|
||||
|
||||
return this.getHandle(itemId);
|
||||
|
||||
}
|
||||
else {
|
||||
String itemId = this.getItemIdFromHandle(dSpaceConfig.getRepositoryRecordUrl(), dmpDepositModel.getPreviousDOI());
|
||||
|
||||
this.setBearerToken(dSpaceConfig.getWorkflowEmail(), dSpaceConfig.getWorkflowPassword());
|
||||
String workSpaceItemId = this.createNewVersion(itemId);
|
||||
|
||||
this.deleteFiles(workSpaceItemId);
|
||||
|
||||
String workSpaceItemUrl = this.repositoryApiUrl + "submission/workspaceitems/" + workSpaceItemId;
|
||||
|
||||
this.uploadFiles(dmpDepositModel, workSpaceItemUrl);
|
||||
|
||||
String workFlowId = this.createWorkflow(workSpaceItemUrl);
|
||||
|
||||
String claimedTaskId = this.createClaimedTask(workFlowId);
|
||||
|
||||
this.submitTask(claimedTaskId);
|
||||
|
||||
return this.getHandle(itemId);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else{
|
||||
String itemId = this.getItemIdFromHandle(dSpaceConfig.getRepositoryRecordUrl(), dmpDepositModel.getPreviousDOI());
|
||||
|
||||
this.setBearerToken(dSpaceConfig.getWorkflowEmail(), dSpaceConfig.getWorkflowPassword());
|
||||
String workSpaceItemId = this.createNewVersion(itemId);
|
||||
|
||||
this.deleteFiles(workSpaceItemId);
|
||||
|
||||
String workSpaceItemUrl = this.repositoryApiUrl + "submission/workspaceitems/" + workSpaceItemId;
|
||||
|
||||
this.uploadFiles(dmpDepositModel, workSpaceItemUrl);
|
||||
|
||||
String workFlowId = this.createWorkflow(workSpaceItemUrl);
|
||||
|
||||
String claimedTaskId = this.createClaimedTask(workFlowId);
|
||||
|
||||
this.submitTask(claimedTaskId);
|
||||
|
||||
return this.getHandle(itemId);
|
||||
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
|
@ -372,22 +380,24 @@ public class DSpaceDeposit implements RepositoryDeposit {
|
|||
}
|
||||
|
||||
@Override
|
||||
public RepositoryDepositConfiguration getConfiguration() {
|
||||
eu.eudat.depositinterface.dspacerepository.config.DSpaceConfig dspaceConfig = this.configLoader.getDSpaceConfig();
|
||||
return dspaceConfig.toRepoConfig();
|
||||
public List<RepositoryDepositConfiguration> getConfiguration() {
|
||||
List<eu.eudat.depositinterface.dspacerepository.config.DSpaceConfig> dSpaceConfigs = this.configLoader.getDSpaceConfig();
|
||||
return dSpaceConfigs.stream().map(DSpaceConfig::toRepoConfig).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String authenticate(String code) {
|
||||
public String authenticate(String repositoryId, String code) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLogo() {
|
||||
RepositoryDepositConfiguration conf = this.getConfiguration();
|
||||
if(conf.isHasLogo()){
|
||||
byte[] logo = this.configLoader.getLogo();
|
||||
return (logo != null && logo.length != 0) ? Base64.getEncoder().encodeToString(logo) : null;
|
||||
public String getLogo(String repositoryId) {
|
||||
RepositoryDepositConfiguration conf = this.getConfiguration().stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst().orElse(null);
|
||||
if(conf != null) {
|
||||
if(conf.isHasLogo()){
|
||||
byte[] logo = this.configLoader.getLogo(repositoryId);
|
||||
return (logo != null && logo.length != 0) ? Base64.getEncoder().encodeToString(logo) : null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,2 @@
|
|||
storage.temp=${STORAGE_TMP_DSPACE}
|
||||
configuration.dspace=${CONFIGURATION_DSPACE}
|
||||
configuration.dspace.logo=${CONFIGURATION_LOGO_DSPACE}
|
||||
configuration.dspace=${CONFIGURATION_DSPACE}
|
Loading…
Reference in New Issue