lock and description template fixes

dmp-refactoring
amentis 1 month ago
parent a90a4e1180
commit d4d06a9d47

@ -195,10 +195,6 @@ public class DescriptionTemplatePersist {
.on(DescriptionTemplatePersist._definition)
.over(item.getDefinition())
.using(() -> this.validatorFactory.validator(DefinitionPersist.DefinitionPersistValidator.class)),
this.spec()
.iff(() -> item.getStatus() == DescriptionTemplateStatus.Finalized)
.must(() -> !this.isListNullOrEmpty(item.getUsers()))
.failOn(DescriptionTemplatePersist._users).failWith(messageSource.getMessage("Validation_Required", new Object[]{DescriptionTemplatePersist._users}, LocaleContextHolder.getLocale())),
this.navSpec()
.iff(() -> !this.isListNullOrEmpty(item.getUsers()))
.on(DescriptionTemplatePersist._users)

@ -563,7 +563,7 @@ public class DmpServiceImpl implements DmpService {
public List<DmpUser> assignUsers(UUID dmpId, List<DmpUserPersist> model, FieldSet fieldSet, boolean disableDelete) throws InvalidApplicationException, IOException {
this.authorizationService.authorizeAtLeastOneForce(List.of(this.authorizationContentResolver.dmpAffiliation(dmpId)), Permission.AssignDmpUsers);
if (model == null || model.stream().noneMatch(x-> x.getUser() != null && DmpUserRole.Owner.equals(x.getRole()))) throw new MyApplicationException("At least one owner required");
if (!disableDelete && (model == null || model.stream().noneMatch(x-> x.getUser() != null && DmpUserRole.Owner.equals(x.getRole())))) throw new MyApplicationException("At least one owner required");
DmpEntity dmpEntity = this.entityManager.find(DmpEntity.class, dmpId);
if (dmpEntity == null) throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{dmpId, Dmp.class.getSimpleName()}, LocaleContextHolder.getLocale()));

@ -25,5 +25,5 @@ public interface LockService {
void unlock(UUID target) throws InvalidApplicationException;
void deleteAndSave(UUID id) throws MyForbiddenException, InvalidApplicationException;
void deleteAndSave(UUID id, UUID target) throws MyForbiddenException, InvalidApplicationException;
}

@ -130,7 +130,7 @@ public class LockServiceImpl implements LockService {
else {
if (new Date().getTime() - Date.from(lock.getTouchedAt()).getTime() > lockProperties.getLockInterval()) {
lockStatus.setStatus(false);
this.deleteAndSave(lock.getId());
this.deleteAndSave(lock.getId(), lock.getTarget());
} else lockStatus.setStatus(true);
}
@ -167,14 +167,14 @@ public class LockServiceImpl implements LockService {
if (!lock.getLockedBy().equals(this.userScope.getUserId())) {
throw new InvalidApplicationException("Only the user who created that lock can delete it");
}
this.deleteAndSave(lock.getId());
this.deleteAndSave(lock.getId(), lock.getTarget());
}
public void deleteAndSave(UUID id) throws MyForbiddenException, InvalidApplicationException {
public void deleteAndSave(UUID id, UUID target) throws MyForbiddenException, InvalidApplicationException {
logger.debug("deleting : {}", id);
AffiliatedResource affiliatedResourceDmp = this.authorizationContentResolver.dmpAffiliation(id);
AffiliatedResource affiliatedResourceDescription = this.authorizationContentResolver.descriptionAffiliation(id);
AffiliatedResource affiliatedResourceDmp = this.authorizationContentResolver.dmpAffiliation(target);
AffiliatedResource affiliatedResourceDescription = this.authorizationContentResolver.descriptionAffiliation(target);
this.authorizationService.authorizeAtLeastOneForce(List.of(affiliatedResourceDmp, affiliatedResourceDescription), Permission.DeleteLock);
this.deleterFactory.deleter(LockDeleter.class).deleteAndSaveByIds(List.of(id));

@ -212,12 +212,12 @@ public class LockController {
return true;
}
@DeleteMapping("{id}")
@DeleteMapping("{id}/{target}")
@Transactional
public void delete(@PathVariable("id") UUID id) throws MyForbiddenException, InvalidApplicationException {
public void delete(@PathVariable("id") UUID id, @PathVariable("id") UUID target) throws MyForbiddenException, InvalidApplicationException {
logger.debug(new MapLogEntry("retrieving" + Lock.class.getSimpleName()).And("id", id));
this.lockService.deleteAndSave(id);
this.lockService.deleteAndSave(id, target);
this.auditService.track(AuditableAction.Lock_Delete, "id", id);
}

@ -325,16 +325,16 @@
{{'DESCRIPTION-TEMPLATE-EDITOR.ACTIONS.UPDATE' |translate}}
<mat-icon (click)="$event.stopPropagation();" style="width: 14px;" [matMenuTriggerFor]="menuUpdate">expand_more</mat-icon>
</button> -->
<button *ngIf="formGroup.disabled || formGroup.get('status').value==1" [@finalize_btn] mat-raised-button class="template_action_btn save-btn" (click)="formSubmit()">
<!-- <button *ngIf="formGroup.disabled || formGroup.get('status').value==1" [@finalize_btn] mat-raised-button class="template_action_btn save-btn" (click)="formSubmit()">
{{'DESCRIPTION-TEMPLATE-EDITOR.ACTIONS.UPDATE' | translate}}
<mat-icon (click)="$event.stopPropagation();" style="width: 14px;" [matMenuTriggerFor]="menuUpdate">expand_more</mat-icon>
</button>
<mat-menu #menuUpdate="matMenu">
</button> -->
<!-- <mat-menu #menuUpdate="matMenu">
<button [disabled]="!formGroup.valid" mat-menu-item (click)="updateAndFinalize(true)" type="button">{{ 'DESCRIPTION-TEMPLATE-EDITOR.ACTIONS.UPDATE-AND-CLOSE' | translate }}</button>
<button [disabled]="!formGroup.valid" mat-menu-item (click)="updateAndFinalize()" type="button">{{ 'DESCRIPTION-TEMPLATE-EDITOR.ACTIONS.UPDATE-AND-CONTINUE' | translate }}</button>
</mat-menu>
</mat-menu> -->
<button *ngIf="!formGroup.disabled && formGroup.get('status').value!=1 && steps?.length-1 === stepper?.selectedIndex" [@finalize_btn] mat-button class="finalize-btn ml-3" [disabled]="!formGroup.valid" [class.invisible]="steps?.length-1 !== stepper?.selectedIndex" (click)="updateAndFinalize(true)">
<button *ngIf="!formGroup.disabled && formGroup.get('status').value!= finalized && steps?.length-1 === stepper?.selectedIndex" [@finalize_btn] mat-button class="finalize-btn ml-3" [disabled]="!formGroup.valid" [class.invisible]="steps?.length-1 !== stepper?.selectedIndex" (click)="finalize()">
{{'DESCRIPTION-TEMPLATE-EDITOR.ACTIONS.FINALIZE' | translate}}
</button>
</div>

@ -60,6 +60,7 @@ export class DescriptionTemplateEditorComponent extends BaseEditor<DescriptionTe
formGroup: UntypedFormGroup = null;
item: DescriptionTemplate;
showInactiveDetails = false;
finalized: DescriptionTemplateStatus.Finalized;
availableLanguages: LanguageInfo[] = this.languageInfoService.getLanguageInfoValues();
@ -183,6 +184,10 @@ export class DescriptionTemplateEditorComponent extends BaseEditor<DescriptionTe
if (this.editorModel.status == DescriptionTemplateStatus.Finalized || this.isDeleted) {
this.formGroup.disable();
}
const action = this.route.snapshot.data['action'];
if (action && action == 'new-version') {
this.formGroup.enable();
}
}
refreshData(): void {
@ -262,6 +267,25 @@ export class DescriptionTemplateEditorComponent extends BaseEditor<DescriptionTe
this.formService.validateAllFormFields(this.formGroup);
}
finalize() {
this.formService.removeAllBackEndErrors(this.formGroup);
this.formService.touchAllFormFields(this.formGroup);
const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
restoreFocus: false,
data: {
message: this.language.instant('DESCRIPTION-OVERVIEW.FINALIZE-DIALOG.TITLE'),
confirmButton: this.language.instant('DESCRIPTION-OVERVIEW.FINALIZE-DIALOG.CONFIRM'),
cancelButton: this.language.instant('DESCRIPTION-OVERVIEW.FINALIZE-DIALOG.NEGATIVE'),
isDeleteConfirmation: false
}
});
dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => {
if (result) {
this.formGroup.get('status').setValue(DescriptionTemplateStatus.Finalized);
this.persistEntity();
}});
}
//
//
// Description Template User

@ -352,7 +352,7 @@ export class FieldInSectionEditorModel implements FieldInSectionPersist {
id: [{ value: this.id, disabled: disabled }, context.getValidation('id').validators],
category: [{ value: this.category, disabled: disabled }, context.getValidation('category').validators],
label: [{ value: this.label, disabled: disabled }, this.category === DmpBlueprintFieldCategory.System ? context.getValidation('label-system').validators : context.getValidation('label-extra').validators],
label: [{ value: this.label, disabled: disabled }, this.category === DmpBlueprintFieldCategory.System ? context.getValidation('label-system').validators : ( this.category === DmpBlueprintFieldCategory.Extra ? context.getValidation('label-extra').validators : context.getValidation('label-external-reference').validators)],
placeholder: [{ value: this.placeholder, disabled: disabled }, context.getValidation('placeholder').validators],
description: [{ value: this.description, disabled: disabled }, context.getValidation('description').validators],
required: [{ value: this.required, disabled: disabled }, context.getValidation('required').validators],
@ -377,6 +377,7 @@ export class FieldInSectionEditorModel implements FieldInSectionPersist {
baseValidationArray.push({ key: 'category', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}category`)] });
baseValidationArray.push({ key: 'label-system', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}label`)] });
baseValidationArray.push({ key: 'label-extra', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}label`)] });
baseValidationArray.push({ key: 'label-external-reference', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}label`)] });
baseValidationArray.push({ key: 'placeholder', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}placeholder`)] });
baseValidationArray.push({ key: 'description', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}description`)] });
baseValidationArray.push({ key: 'semantics', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}semantics`)] });
@ -406,7 +407,7 @@ export class FieldInSectionEditorModel implements FieldInSectionPersist {
const control = formGroup?.get(keyField);
control?.clearValidators();
if (keyField == 'label') {
control?.addValidators(context.has('label-system') ? context.getValidation('label-system').validators : context.getValidation('label-extra').validators);
control?.addValidators(context.has('label-system') ? context.getValidation('label-system').validators : (context.has('label-extra') ? context.getValidation('label-extra').validators : context.getValidation('label-external-reference').validators));
} else if (keyField == 'referenceTypeId') {
if (formGroup.get('category').value == DmpBlueprintFieldCategory.ReferenceType) control?.addValidators([Validators.required, ...context.getValidation('referenceTypeId').validators]);
else control?.addValidators([...context.getValidation('referenceTypeId').validators]);

Loading…
Cancel
Save