when new version is deposited, create dataset in existing dataverse

This commit is contained in:
Bernaldo Mihasi 2022-11-14 09:34:49 +02:00
parent b4490cb0f3
commit 6c13d3b68f
3 changed files with 41 additions and 22 deletions

View File

@ -3,10 +3,7 @@ package eu.eudat.depositinterface.dataverserepository.interfaces;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.researchspace.dataverse.api.v1.DataverseAPI; import com.researchspace.dataverse.api.v1.DataverseAPI;
import com.researchspace.dataverse.api.v1.DataverseConfig; import com.researchspace.dataverse.api.v1.DataverseConfig;
import com.researchspace.dataverse.entities.DataverseContacts; import com.researchspace.dataverse.entities.*;
import com.researchspace.dataverse.entities.DataversePost;
import com.researchspace.dataverse.entities.DataverseResponse;
import com.researchspace.dataverse.entities.Identifier;
import com.researchspace.dataverse.entities.facade.DatasetAuthor; import com.researchspace.dataverse.entities.facade.DatasetAuthor;
import com.researchspace.dataverse.entities.facade.DatasetContact; import com.researchspace.dataverse.entities.facade.DatasetContact;
import com.researchspace.dataverse.entities.facade.DatasetDescription; import com.researchspace.dataverse.entities.facade.DatasetDescription;
@ -76,13 +73,17 @@ public class DataverseDeposit implements RepositoryDeposit {
if(!this.isApiSet) if(!this.isApiSet)
this.setDataverseApi(); this.setDataverseApi();
DataversePost entity = new DataversePost(); String alias = dmpDepositModel.getLabel().replace(" ", "_");
entity.setName(dmpDepositModel.getLabel()); DataverseGet dataverse = this.api.getDataverseOperations().getDataverseById(alias);
entity.setAlias(dmpDepositModel.getLabel().replace(" ", "_")); if(dataverse == null) {
entity.setDescription(dmpDepositModel.getDescription()); DataversePost entity = new DataversePost();
entity.setCreationDate(new Date()); entity.setName(dmpDepositModel.getLabel());
entity.setDataverseContacts(Collections.singletonList(new DataverseContacts(SYSTEM_EMAIL))); entity.setAlias(alias);
DataverseResponse<DataversePost> response = this.api.getDataverseOperations().createNewDataverse(SYSTEM_PARENT_DATAVERSE_ALIAS, entity); entity.setDescription(dmpDepositModel.getDescription());
entity.setCreationDate(new Date());
entity.setDataverseContacts(Collections.singletonList(new DataverseContacts(SYSTEM_EMAIL)));
DataverseResponse<DataversePost> response = this.api.getDataverseOperations().createNewDataverse(SYSTEM_PARENT_DATAVERSE_ALIAS, entity);
}
DatasetFacade dataset = DatasetFacade.builder() DatasetFacade dataset = DatasetFacade.builder()
.title(dmpDepositModel.getLabel()) .title(dmpDepositModel.getLabel())
@ -93,7 +94,7 @@ public class DataverseDeposit implements RepositoryDeposit {
.languages(new ArrayList<>()) .languages(new ArrayList<>())
.depositor("") .depositor("")
.build(); .build();
Identifier id = this.api.getDataverseOperations().createDataset(dataset, entity.getAlias()); Identifier id = this.api.getDataverseOperations().createDataset(dataset, alias);
String doi = this.api.getDatasetOperations().getDataset(id).getDoiId().orElse(null); String doi = this.api.getDatasetOperations().getDataset(id).getDoiId().orElse(null);
@ -148,7 +149,7 @@ public class DataverseDeposit implements RepositoryDeposit {
conf.setDepositAccountStatus(SystemDeposit.getValue()); conf.setDepositAccountStatus(SystemDeposit.getValue());
conf.setAccessToken(API_TOKEN); conf.setAccessToken(API_TOKEN);
conf.setRepositoryUrl(SERVER + "/api/"); conf.setRepositoryUrl(SERVER + "/api/");
conf.setRepositoryRecordUrl(SERVER + "/dataverse/"); conf.setRepositoryRecordUrl(SERVER + "/dataset.xhtml?persistentId=doi:");
return conf; return conf;
} }

View File

@ -114,13 +114,13 @@
<div *ngIf="!hasDoi(dmp)" class="row d-flex flex-column ml-0 mr-0 mb-3"> <div *ngIf="!hasDoi(dmp)" class="row d-flex flex-column ml-0 mr-0 mb-3">
<p class="doi-label">{{'DMP-EDITOR.TITLE.SUBTITLE' | translate}}</p> <p class="doi-label">{{'DMP-EDITOR.TITLE.SUBTITLE' | translate}}</p>
<div class="doi-panel"> <div class="doi-panel">
<mat-select class="mb-0 ml-3" placeholder="{{ dmp.dois[0].doi }}"> <mat-select #select class="mb-0 ml-3" placeholder="{{ dmp.dois[0].doi }}">
<mat-option *ngFor="let doi of dmp.dois"> <mat-option *ngFor="let doi of dmp.dois" (click)="selectDoi(select, doi)">
{{doi.repositoryId}} {{doi.repositoryId}}
</mat-option> </mat-option>
</mat-select> </mat-select>
<div class="d-flex justify-content-end ml-3"> <div class="d-flex justify-content-end ml-3">
<button (click)="copyDoi(doi)" mat-mini-fab class="mr-2 d-flex justify-content-center align-items-center" matTooltip="{{'DMP-LISTING.ACTIONS.COPY' | translate}}" matTooltipPosition="above"> <button (click)="copyDoi(dmp.dois[0].doi)" mat-mini-fab class="mr-2 d-flex justify-content-center align-items-center" matTooltip="{{'DMP-LISTING.ACTIONS.COPY' | translate}}" matTooltipPosition="above">
<mat-icon class="mat-mini-fab-icon">content_copy</mat-icon> <mat-icon class="mat-mini-fab-icon">content_copy</mat-icon>
</button> </button>
<button mat-mini-fab class="mr-2 d-flex justify-content-center align-items-center" matTooltip="{{'GRANT-EDITOR.ACTIONS.VISIT-WEBSITE' | translate}}" matTooltipPosition="above"> <button mat-mini-fab class="mr-2 d-flex justify-content-center align-items-center" matTooltip="{{'GRANT-EDITOR.ACTIONS.VISIT-WEBSITE' | translate}}" matTooltipPosition="above">

View File

@ -44,6 +44,7 @@ import { DepositRepositoriesService } from '@app/core/services/deposit-repositor
import { DmpDepositDialogComponent } from '../editor/dmp-deposit-dialog/dmp-deposit-dialog.component'; import { DmpDepositDialogComponent } from '../editor/dmp-deposit-dialog/dmp-deposit-dialog.component';
import { DepositConfigurationModel } from '@app/core/model/deposit/deposit-configuration'; import { DepositConfigurationModel } from '@app/core/model/deposit/deposit-configuration';
import { DoiModel } from '@app/core/model/doi/doi'; import { DoiModel } from '@app/core/model/doi/doi';
import { MatSelect } from '@angular/material/select';
@Component({ @Component({
selector: 'app-dmp-overview', selector: 'app-dmp-overview',
@ -615,10 +616,22 @@ export class DmpOverviewComponent extends BaseComponent implements OnInit {
this.router.navigate(['/datasets', 'new', this.dmp.id]); this.router.navigate(['/datasets', 'new', this.dmp.id]);
} }
selectDoi(s: MatSelect, doiModel: DoiModel){
s.placeholder = doiModel.doi;
const foundIdx = this.dmp.dois.findIndex(el => el == doiModel);
this.dmp.dois.splice(foundIdx, 1);
this.dmp.dois.unshift(doiModel);
}
createDoiLink(doiModel: DoiModel): string { createDoiLink(doiModel: DoiModel): string {
const doiarr = doiModel.doi.split('.'); if(doiModel.repositoryId == "Zenodo"){
const id = doiarr[doiarr.length - 1]; const doiarr = doiModel.doi.split('.');
return this.depositRepos.find(r => r.repositoryId == doiModel.repositoryId).repositoryRecordUrl + id; const id = doiarr[doiarr.length - 1];
return this.depositRepos.find(r => r.repositoryId == doiModel.repositoryId).repositoryRecordUrl + id;
}
else{
return this.depositRepos.find(r => r.repositoryId == doiModel.repositoryId).repositoryRecordUrl + doiModel.doi;
}
} }
reverse() { reverse() {
@ -688,10 +701,15 @@ export class DmpOverviewComponent extends BaseComponent implements OnInit {
} }
copyDoi(doi) { copyDoi(doi) {
let domElement = doi.nativeElement as HTMLInputElement; const el = document.createElement('textarea');
domElement.select(); el.value = doi;
el.setAttribute('readonly', '');
el.style.position = 'absolute';
el.style.left = '-9999px';
document.body.appendChild(el);
el.select();
document.execCommand('copy'); document.execCommand('copy');
domElement.setSelectionRange(0, 0); document.body.removeChild(el);
this.uiNotificationService.snackBarNotification(this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-COPY-TO-CLIPBOARD'), SnackBarNotificationLevel.Success); this.uiNotificationService.snackBarNotification(this.language.instant('GENERAL.SNACK-BAR.SUCCESSFUL-COPY-TO-CLIPBOARD'), SnackBarNotificationLevel.Success);
} }