diff --git a/src/app/enums/index.ts b/src/app/enums/index.ts index 7a1b11b9f3487a9332e5aa9b155eb82a60e2c7d0..ef98f42eaeccda1dde46993f10b74d45ee5f1bab 100644 --- a/src/app/enums/index.ts +++ b/src/app/enums/index.ts @@ -843,6 +843,19 @@ export namespace Enums { value: MARK_AS_TRANSLATABLE("enum.disseminationPolicy.type.basic"), }, ]; + + export type DownloadFileNameEnum = DisseminationPolicyPartial.DownloadFileNameEnum; + export const DownloadFileNameEnum = DisseminationPolicyPartial.DownloadFileNameEnum; + export const DownloadFileNameEnumTranslate: KeyValue[] = [ + { + key: DisseminationPolicy.DownloadFileNameEnum.ID, + value: MARK_AS_TRANSLATABLE("enum.disseminationPolicy.downloadFileName.id"), + }, + { + key: DisseminationPolicy.DownloadFileNameEnum.NAME, + value: MARK_AS_TRANSLATABLE("enum.disseminationPolicy.downloadFileName.name"), + }, + ]; } export namespace FormDescription { diff --git a/src/app/features/admin/dissemination-policy/components/presentationals/admin-dissemination-policy-form/admin-dissemination-policy-form.presentational.html b/src/app/features/admin/dissemination-policy/components/presentationals/admin-dissemination-policy-form/admin-dissemination-policy-form.presentational.html index 766e548b5186f85c27b007f0e35ccaf027e6b83c..d4d848f4b8086854bc2354e7ccaf2414d201bca6 100644 --- a/src/app/features/admin/dissemination-policy/components/presentationals/admin-dissemination-policy-form/admin-dissemination-policy-form.presentational.html +++ b/src/app/features/admin/dissemination-policy/components/presentationals/admin-dissemination-policy-form/admin-dissemination-policy-form.presentational.html @@ -23,6 +23,59 @@ solidifyTooltipOnEllipsis ></mat-error> </mat-form-field> + <mat-form-field *ngIf="getFormControl(formDefinition.prefix) as fd" + [appearance]="appearanceInputMaterial" + [class.mat-form-field-invalid]="formValidationHelper.displayInvalidWhenRequired(fd, displayEmptyRequiredFieldInError)" + solidifyTooltipOnEllipsis + > + <mat-label>{{labelTranslateEnum.prefixLabel | translate}}</mat-label> + <input [formControl]="fd" + [required]="formValidationHelper.hasRequiredField(fd)" + [solidifyValidation]="errors" + matInput + > + <mat-error #errors + solidifyTooltipOnEllipsis + ></mat-error> + </mat-form-field> + + <mat-form-field *ngIf="getFormControl(formDefinition.downloadFileName) as fd" + [appearance]="appearanceInputMaterial" + [class.mat-form-field-invalid]="formValidationHelper.displayInvalidWhenRequired(fd, displayEmptyRequiredFieldInError)" + solidifyTooltipOnEllipsis + > + <mat-label>{{labelTranslateEnum.downloadFileNameLabel | translate}}</mat-label> + <mat-select [formControl]="fd" + [required]="formValidationHelper.hasRequiredField(fd)" + [solidifyValidation]="errors" + > + <mat-option *ngFor="let type of disseminationPolicyDownloadFileNameEnumToTranslate" + [value]="type.key" + solidifyTooltipOnEllipsis + > + {{type.value | translate}} + </mat-option> + </mat-select> + <mat-error #errors + solidifyTooltipOnEllipsis + ></mat-error> + </mat-form-field> + + <mat-form-field *ngIf="getFormControl(formDefinition.suffix) as fd" + [appearance]="appearanceInputMaterial" + [class.mat-form-field-invalid]="formValidationHelper.displayInvalidWhenRequired(fd, displayEmptyRequiredFieldInError)" + solidifyTooltipOnEllipsis + > + <mat-label>{{labelTranslateEnum.suffixLabel | translate}}</mat-label> + <input [formControl]="fd" + [required]="formValidationHelper.hasRequiredField(fd)" + [solidifyValidation]="errors" + matInput + > + <mat-error #errors + solidifyTooltipOnEllipsis + ></mat-error> + </mat-form-field> @if (model | isNotNullNorUndefined) { @for (parameter of fieldsParameters; track parameter) { @@ -56,7 +109,7 @@ [required]="formValidationHelper.hasRequiredField(fd)" [solidifyValidation]="errors" > - <mat-option *ngFor="let type of disseminationPolicyEnumToTranslate" + <mat-option *ngFor="let type of disseminationPolicyTypeEnumToTranslate" [value]="type.key" solidifyTooltipOnEllipsis > diff --git a/src/app/features/admin/dissemination-policy/components/presentationals/admin-dissemination-policy-form/admin-dissemination-policy-form.presentational.ts b/src/app/features/admin/dissemination-policy/components/presentationals/admin-dissemination-policy-form/admin-dissemination-policy-form.presentational.ts index 0ca6976252aa8a5d43f680d32fbe3263c6ef68d0..3a6662822c0ea9bad4baa6bc72c21c9b921ec6a6 100644 --- a/src/app/features/admin/dissemination-policy/components/presentationals/admin-dissemination-policy-form/admin-dissemination-policy-form.presentational.ts +++ b/src/app/features/admin/dissemination-policy/components/presentationals/admin-dissemination-policy-form/admin-dissemination-policy-form.presentational.ts @@ -41,6 +41,7 @@ import {BaseFormDefinition} from "@shared/models/base-form-definition.model"; import { AbstractFormPresentational, isNotNullNorUndefined, + isNotNullNorUndefinedNorEmptyArray, isNotNullNorUndefinedNorWhiteString, MappingObject, MappingObjectUtil, @@ -58,10 +59,15 @@ import { export class AdminDisseminationPolicyFormPresentational extends AbstractFormPresentational<DisseminationPolicy> implements OnInit { formDefinition: FormComponentFormDefinition = new FormComponentFormDefinition(); - get disseminationPolicyEnumToTranslate(): typeof Enums.DisseminationPolicy.TypeEnumTranslate { + get disseminationPolicyTypeEnumToTranslate(): typeof Enums.DisseminationPolicy.TypeEnumTranslate { return Enums.DisseminationPolicy.TypeEnumTranslate; } + get disseminationPolicyDownloadFileNameEnumToTranslate(): typeof Enums.DisseminationPolicy.DownloadFileNameEnumTranslate { + return Enums.DisseminationPolicy.DownloadFileNameEnumTranslate; + } + + get labelTranslateEnum(): typeof LabelTranslateEnum { return LabelTranslateEnum; } @@ -89,6 +95,10 @@ export class AdminDisseminationPolicyFormPresentational extends AbstractFormPres this.form = this._fb.group({ [this.formDefinition.name]: [disseminationPolicies.name, [SolidifyValidator]], [this.formDefinition.type]: [disseminationPolicies.type, [SolidifyValidator]], + [this.formDefinition.prefix]: [disseminationPolicies.prefix, [SolidifyValidator]], + [this.formDefinition.downloadFileName]: [disseminationPolicies.downloadFileName, [SolidifyValidator]], + [this.formDefinition.suffix]: [disseminationPolicies.suffix, [SolidifyValidator]], + }); this.fieldsParameters.forEach((param) => { this.form.addControl(param, this._fb.control(MappingObjectUtil.get(parameters, param), [Validators.required, SolidifyValidator])); @@ -99,12 +109,20 @@ export class AdminDisseminationPolicyFormPresentational extends AbstractFormPres this.form = this._fb.group({ [this.formDefinition.name]: ["", [Validators.required, SolidifyValidator]], [this.formDefinition.type]: ["", [Validators.required, SolidifyValidator]], + [this.formDefinition.prefix]: ["", [SolidifyValidator]], + [this.formDefinition.downloadFileName]: ["", [SolidifyValidator]], + [this.formDefinition.suffix]: ["", [SolidifyValidator]], }); } protected _treatmentBeforeSubmit(disseminationPolicies: DisseminationPolicy): DisseminationPolicy { - if (isNotNullNorUndefined(this.model)) { - disseminationPolicies.parameters = JSON.stringify(disseminationPolicies.parameters); + if (isNotNullNorUndefined(this.model) && isNotNullNorUndefinedNorEmptyArray(this.fieldsParameters)) { + const parameters = {} as MappingObject<string, string>; + this.fieldsParameters.forEach((param) => { + const paramValue = this.form.get(param).value; + MappingObjectUtil.set(parameters, param, paramValue); + }); + disseminationPolicies.parameters = JSON.stringify(parameters); } return disseminationPolicies; } @@ -113,4 +131,7 @@ export class AdminDisseminationPolicyFormPresentational extends AbstractFormPres class FormComponentFormDefinition extends BaseFormDefinition { @PropertyName() name: string; @PropertyName() type: string; + @PropertyName() prefix: string; + @PropertyName() downloadFileName: string; + @PropertyName() suffix: string; } diff --git a/src/app/models/index.ts b/src/app/models/index.ts index 418c809fbcf3a3cc0100d80b99148c6739992a70..f123f397b39976ea19f77a9f398cb8ae1af89ff3 100644 --- a/src/app/models/index.ts +++ b/src/app/models/index.ts @@ -355,6 +355,7 @@ export type Dip = OverrideType<DipPartial, Package> & BaseResource; export type DisseminationPolicy = OverrideType<DisseminationPolicyPartial, { type?: Enums.DisseminationPolicy.TypeEnum; + downloadFileName?: Enums.DisseminationPolicy.DownloadFileNameEnum; }> & BaseResourceExtended; export type DisseminationPolicyDto = OverrideType<DisseminationPolicyDtoPartial, { diff --git a/src/app/shared/enums/label-translate.enum.ts b/src/app/shared/enums/label-translate.enum.ts index 4e52a5c2e5edbf6f668c1df891bd628e6bc726cf..bb9623453f47856d6365b18e297514c12d079cc9 100644 --- a/src/app/shared/enums/label-translate.enum.ts +++ b/src/app/shared/enums/label-translate.enum.ts @@ -353,6 +353,8 @@ export class LabelTranslateEnum { static version: string = MARK_AS_TRANSLATABLE("general.label.version"); static format: string = MARK_AS_TRANSLATABLE("general.label.format"); static urlRedirect: string = MARK_AS_TRANSLATABLE("general.label.urlRedirect"); + static suffixLabel: string = MARK_AS_TRANSLATABLE("general.label.suffix"); + static downloadFileNameLabel: string = MARK_AS_TRANSLATABLE("general.label.downloadFileName"); static nameLabel: string = MARK_AS_TRANSLATABLE("general.label.name"); static titleLabel: string = MARK_AS_TRANSLATABLE("general.label.title"); static taskTypeLabel: string = MARK_AS_TRANSLATABLE("general.label.taskType"); diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 28c992f9d787bd1f3aa9fdacb313ff222836c606..7011c6b7b88919bcb80c294433aef4860fc6ae26 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -1001,6 +1001,10 @@ "hedera": "enum.disseminationPolicy.type.hedera", "iiif": "enum.disseminationPolicy.type.iiif", "basic": "enum.disseminationPolicy.type.basic" + }, + "downloadFileName": { + "name": "enum.disseminationPolicy.downloadFileName.name", + "id": "enum.disseminationPolicy.downloadFileName.archiveId", } }, "globalBanner": { @@ -1381,6 +1385,7 @@ "domainSoftware": "Domain-Software", "downloadArchive": "Archiv herunterladen", "downloadDua": "general.label.downloadDua", + "downloadFileName": "Dateiname für den Archiv-Download", "downloadNumber": "Anzahl der Downloads", "downloadSubmissionAgreementFile": "general.label.downloadSubmissionAgreementFile", "duaFile": "general.label.duaFile", @@ -1619,6 +1624,7 @@ "submissionPolicy": "Einreichungsrichtlinie", "submissionRequireSubmissionAgreement": "general.label.submissionRequireSubmissionAgreement", "submittedDate": "Einreichungsdatum", + "suffix": "Suffix", "system": "general.label.system", "taskType": "general.label.taskType", "theChecksumFormatIsNotTheExpectedOne": "general.label.theChecksumFormatIsNotTheExpectedOne", diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 2f3b7fe60c3a85cdadc58ec4cae0794c295a242b..59f5e0aae514b0249e4345bb577f1b472072ea4b 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -1001,6 +1001,10 @@ "hedera": "Hedera", "iiif": "IIIF", "basic": "Basic" + }, + "downloadFileName": { + "name": "Archive filename", + "id": "Id of the archive" } }, "globalBanner": { @@ -1381,6 +1385,7 @@ "domainSoftware": "Domain software", "downloadArchive": "Download archive", "downloadDua": "Download DUA", + "downloadFileName": "File name for archive download", "downloadNumber": "Number of downloads", "downloadSubmissionAgreementFile": "Download submission agreement file", "duaFile": "Contract on the use of data", @@ -1621,6 +1626,7 @@ "submissionPolicy": "Submission policy", "submissionRequireSubmissionAgreement": "Submission requires a submission agreement", "submittedDate": "Submission date", + "suffix": "Suffix", "system": "System", "taskType": "Task type", "theChecksumFormatIsNotTheExpectedOne": "The checksum format is not the expected one", diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index 6e8eef86f632c930c05a81af7836abf35225ac60..2ce6c20a5ec533b6b69293d4ed499a69b65cfcc6 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -1001,6 +1001,10 @@ "hedera": "Hedera", "iiif": "IIIF", "basic": "Basic" + }, + "downloadFileName": { + "name": "Nom d'archive", + "id": "Id d'archive" } }, "globalBanner": { @@ -1381,6 +1385,7 @@ "domainSoftware": "Logiciels de domaine", "downloadArchive": "Télécharger l'archive", "downloadDua": "Télécharger DUA", + "downloadFileName": "Nom du fichier pour le téléchargement d'archive", "downloadNumber": "Nombre de téléchargements", "downloadSubmissionAgreementFile": "Télécharger le fichier d'accord de versement", "duaFile": "Contrat sur l'utilisation des données", @@ -1621,6 +1626,7 @@ "submissionPolicy": "Politique de soumission", "submissionRequireSubmissionAgreement": "La soumission nécessite un accord de versement", "submittedDate": "Date de soumission", + "suffix": "Suffixe", "system": "Système", "taskType": "Type de tâche", "theChecksumFormatIsNotTheExpectedOne": "Le format du checksum n'est pas celui attendu", diff --git a/src/assets/openapi/dlcm-openapi-3.0.json b/src/assets/openapi/dlcm-openapi-3.0.json index 609adffcf7a4b8bf39ddcb8b6def7fe7712d543e..c34afbdb2fd91c5db0ebc949b2dbcec52cb9f706 100644 --- a/src/assets/openapi/dlcm-openapi-3.0.json +++ b/src/assets/openapi/dlcm-openapi-3.0.json @@ -36105,14 +36105,6 @@ "schema": { "type": "string" } - }, - { - "name": "changeFileNameToArchiveName", - "in": "query", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { @@ -37439,14 +37431,6 @@ "schema": { "type": "string" } - }, - { - "name": "changeFileNameToArchiveName", - "in": "query", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { @@ -38652,14 +38636,6 @@ "schema": { "type": "string" } - }, - { - "name": "changeFileNameToArchiveName", - "in": "query", - "required": false, - "schema": { - "type": "boolean" - } } ], "responses": { @@ -40559,15 +40535,15 @@ "type": "string", "writeOnly": true }, - "hasEmbargo": { - "type": "boolean" - }, "collectionSize": { "type": "integer", "description": "The number of archives in the deposit.", "format": "int32", "readOnly": true }, + "hasEmbargo": { + "type": "boolean" + }, "_links": { "$ref": "#/components/schemas/Links" } @@ -41917,11 +41893,6 @@ "description": "The last archiving process date of the AIP: the first archiving date or the last metadata edition.", "format": "date-time" }, - "ready": { - "type": "boolean", - "description": "If AIP package is ready.", - "readOnly": true - }, "complianceLevel": { "type": "string", "description": "Compliance level to define the preservation quality based on data file format:\n- NOT_ASSESSED => The format could not be evaluated\n- NO_COMPLIANCE => The format could not be determined\n- WEAK_COMPLIANCE => The format was determined: content type detected\n- AVERAGE_COMPLIANCE => The format was determined: WEAK_COMPLIANCE + PRONOM identifier detected\n- FULL_COMPLIANCE => The format was determined: AVERAGE_COMPLIANCE + the format is part of golden formats\n", @@ -41934,6 +41905,11 @@ "FULL_COMPLIANCE" ] }, + "ready": { + "type": "boolean", + "description": "If AIP package is ready.", + "readOnly": true + }, "dataFileNumber": { "type": "integer", "description": "The number of AIP data files.", @@ -42481,15 +42457,15 @@ "description": "The publication date of the deposit.", "format": "date" }, + "organizationalUnitId": { + "type": "string", + "description": "The organizational unit identifier of the SIP." + }, "ready": { "type": "boolean", "description": "If SIP package is ready.", "readOnly": true }, - "organizationalUnitId": { - "type": "string", - "description": "The organizational unit identifier of the SIP." - }, "dataFileNumber": { "type": "integer", "description": "The number of SIP data files.", @@ -44451,6 +44427,26 @@ "type": "string", "description": "The parameters of the dissemination policy." }, + "prefix": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "description": "The prefix used when downloading a file with this dissemination policy." + }, + "downloadFileName": { + "type": "string", + "description": "Name used when downloading file: ARCHIVE_ID or ARCHIVE_NAME", + "enum": [ + "ARCHIVE_ID", + "ARCHIVE_NAME" + ] + }, + "suffix": { + "maxLength": 255, + "minLength": 0, + "type": "string", + "description": "The suffix used when downloading a file with this dissemination policy." + }, "useNumber": { "type": "integer", "description": "The number of the dissemination policy use in organizational units.", @@ -45474,14 +45470,14 @@ "type": "string", "writeOnly": true }, - "dipNumber": { + "aipNumber": { "type": "integer", - "description": "The DIP number of the order query.", + "description": "The AIP number of the order query.", "format": "int32" }, - "aipNumber": { + "dipNumber": { "type": "integer", - "description": "The AIP number of the order query.", + "description": "The DIP number of the order query.", "format": "int32" }, "_links": {