diff --git a/dmp-backend/core/pom.xml b/dmp-backend/core/pom.xml
index 6b4369902..742d5372d 100644
--- a/dmp-backend/core/pom.xml
+++ b/dmp-backend/core/pom.xml
@@ -14,6 +14,13 @@
UTF-8
+
+
+ jakarta.validation
+ jakarta.validation-api
+ 2.0.2
+
+
diff --git a/dmp-backend/core/src/main/java/eu/eudat/audit/AuditableAction.java b/dmp-backend/core/src/main/java/eu/eudat/audit/AuditableAction.java
new file mode 100644
index 000000000..2ff1dfb63
--- /dev/null
+++ b/dmp-backend/core/src/main/java/eu/eudat/audit/AuditableAction.java
@@ -0,0 +1,13 @@
+package eu.eudat.audit;
+
+import gr.cite.tools.logging.EventId;
+
+public class AuditableAction {
+
+ public static final EventId DescriptionTemplateType_Query = new EventId(1000, "DescriptionTemplateType_Query");
+
+ public static final EventId DescriptionTemplateType_Persist = new EventId(1001, "DescriptionTemplateType_Persist");
+
+ public static final EventId DescriptionTemplateType_Delete = new EventId(1002, "DescriptionTemplateType_Delete");
+
+}
diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/validation/ValidationServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/commons/validation/ValidationServiceImpl.java
new file mode 100644
index 000000000..a3695cfe6
--- /dev/null
+++ b/dmp-backend/core/src/main/java/eu/eudat/commons/validation/ValidationServiceImpl.java
@@ -0,0 +1,36 @@
+package eu.eudat.commons.validation;
+
+import eu.eudat.errorcode.ErrorThesaurusProperties;
+import gr.cite.tools.exception.MyValidationException;
+import gr.cite.tools.validation.BaseValidationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Service;
+
+import javax.validation.Validator;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+public class ValidationServiceImpl extends BaseValidationService {
+
+ private ErrorThesaurusProperties errors;
+
+ @Autowired
+ public ValidationServiceImpl(Validator validator, ErrorThesaurusProperties errors){
+ super(validator);
+ this.errors = errors;
+ }
+
+ @Override
+ public void validateForce(T item, Class>... groups) {
+ List>> validationErrors = this.validate(item, groups);
+ if (validationErrors != null && !validationErrors.isEmpty()) {
+ throw new MyValidationException(this.errors.getModelValidation().getCode(),
+ this.errors.getModelValidation().getMessage(),
+ validationErrors);
+ }
+ }
+}
diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/DescriptionTemplateTypeService.java b/dmp-backend/core/src/main/java/eu/eudat/service/DescriptionTemplateTypeService.java
index 13e7edd61..4c93f85da 100644
--- a/dmp-backend/core/src/main/java/eu/eudat/service/DescriptionTemplateTypeService.java
+++ b/dmp-backend/core/src/main/java/eu/eudat/service/DescriptionTemplateTypeService.java
@@ -1,11 +1,13 @@
package eu.eudat.service;
+import eu.eudat.audit.AuditableAction;
import eu.eudat.commons.enums.DescriptionTemplateTypeStatus;
import eu.eudat.data.DescriptionTemplateTypeEntity;
import eu.eudat.model.DescriptionTemplateType;
import eu.eudat.model.builder.DescriptionTemplateTypeBuilder;
import eu.eudat.query.DescriptionTemplateTypeQuery;
import eu.eudat.query.lookup.DescriptionTemplateTypeLookup;
+import gr.cite.tools.auditing.AuditService;
import gr.cite.tools.data.builder.BuilderFactory;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
@@ -28,27 +30,38 @@ public class DescriptionTemplateTypeService {
private final PlatformTransactionManager transactionManager;
+ private final AuditService auditService;
+
@PersistenceContext
private EntityManager entityManager;
- public DescriptionTemplateTypeService(ApplicationContext applicationContext, BuilderFactory builderFactory, PlatformTransactionManager platformTransactionManager) {
+ public DescriptionTemplateTypeService(ApplicationContext applicationContext, BuilderFactory builderFactory, PlatformTransactionManager platformTransactionManager, AuditService auditService) {
this.applicationContext = applicationContext;
this.builderFactory = builderFactory;
this.transactionManager = platformTransactionManager;
+ this.auditService = auditService;
}
- public List getAll(DescriptionTemplateTypeLookup lookup) {
+ public List query(DescriptionTemplateTypeLookup lookup) {
DescriptionTemplateTypeQuery query = applicationContext.getBean(DescriptionTemplateTypeQuery.class);
- return builderFactory
+ List results = builderFactory
.builder(DescriptionTemplateTypeBuilder.class)
.build(lookup.getProject(), query.fromLookup(lookup).collect());
+
+ auditService.track(AuditableAction.DescriptionTemplateType_Query, "lookup", lookup);
+
+ return results;
}
- public DescriptionTemplateType getById(UUID id) {
+ public DescriptionTemplateType get(UUID id) {
DescriptionTemplateTypeQuery query = applicationContext.getBean(DescriptionTemplateTypeQuery.class);
- return builderFactory
+ DescriptionTemplateType result = builderFactory
.builder(DescriptionTemplateTypeBuilder.class)
.build(null, query.ids(id).first());
+
+ auditService.track(AuditableAction.DescriptionTemplateType_Query, "id", id);
+
+ return result;
}
public DescriptionTemplateTypeEntity getEntityByName(String name) {
@@ -56,7 +69,7 @@ public class DescriptionTemplateTypeService {
return query.names(name).first();
}
- public DescriptionTemplateType create(DescriptionTemplateType payload) {
+ public DescriptionTemplateType persist(DescriptionTemplateType payload) {
DescriptionTemplateTypeEntity created = new DescriptionTemplateTypeEntity();
created.setId(UUID.randomUUID());
created.setName(payload.getName());
@@ -79,6 +92,8 @@ public class DescriptionTemplateTypeService {
throw ex;
}
+ auditService.track(AuditableAction.DescriptionTemplateType_Persist, "persist", payload);
+
DescriptionTemplateTypeQuery query = applicationContext.getBean(DescriptionTemplateTypeQuery.class);
return builderFactory
.builder(DescriptionTemplateTypeBuilder.class)
@@ -91,6 +106,9 @@ public class DescriptionTemplateTypeService {
entity.setStatus(payload.getStatus());
entityManager.merge(entity);
entityManager.flush();
+
+ auditService.track(AuditableAction.DescriptionTemplateType_Persist, "update", payload);
+
return builderFactory.builder(DescriptionTemplateTypeBuilder.class).build(null, entity);
}
@@ -101,6 +119,9 @@ public class DescriptionTemplateTypeService {
entity.setStatus(DescriptionTemplateTypeStatus.DELETED.getValue());
entityManager.merge(entity);
entityManager.flush();
+
+ auditService.track(AuditableAction.DescriptionTemplateType_Delete, "delete", id);
+
return true;
}
diff --git a/dmp-backend/pom.xml b/dmp-backend/pom.xml
index 5d693e51f..ae9fae260 100644
--- a/dmp-backend/pom.xml
+++ b/dmp-backend/pom.xml
@@ -314,6 +314,16 @@
exceptions
2.1.0
+
+ gr.cite
+ logging
+ 2.1.0
+
+
+ gr.cite
+ validation
+ 1.0.0
+
diff --git a/dmp-backend/web/src/main/java/eu/eudat/configurations/AppMessageSourceConfiguration.java b/dmp-backend/web/src/main/java/eu/eudat/configurations/AppMessageSourceConfiguration.java
new file mode 100644
index 000000000..d799f1047
--- /dev/null
+++ b/dmp-backend/web/src/main/java/eu/eudat/configurations/AppMessageSourceConfiguration.java
@@ -0,0 +1,10 @@
+package eu.eudat.configurations;
+
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class AppMessageSourceConfiguration {
+
+
+
+}
diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateTypeV2Controller.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateTypeV2Controller.java
index c067e6496..c38d9c5c7 100644
--- a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateTypeV2Controller.java
+++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/DescriptionTemplateTypeV2Controller.java
@@ -29,19 +29,19 @@ public class DescriptionTemplateTypeV2Controller {
this.descriptionTemplateTypeService = descriptionTemplateTypeService;
}
- @PostMapping("all")
- public QueryResult getAll(@RequestBody DescriptionTemplateTypeLookup lookup, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal ignoredPrincipal) {
- return extractQueryResultWithCount(descriptionTemplateTypeService::getAll, lookup);
+ @PostMapping("query")
+ public QueryResult query(@RequestBody DescriptionTemplateTypeLookup lookup, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal ignoredPrincipal) {
+ return extractQueryResultWithCount(descriptionTemplateTypeService::query, lookup);
}
@GetMapping("{id}")
public QueryResult get(@PathVariable("id") UUID id, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal ignoredPrincipal) {
- return new QueryResult<>(descriptionTemplateTypeService.getById(id));
+ return new QueryResult<>(descriptionTemplateTypeService.get(id));
}
- @PostMapping("create")
- public QueryResult create(@RequestBody DescriptionTemplateType payload, @ClaimedAuthorities(claims = {Authorities.ADMIN}) Principal ignoredPrincipal) {
- return new QueryResult<>(descriptionTemplateTypeService.create(payload));
+ @PostMapping("persist")
+ public QueryResult persist(@RequestBody DescriptionTemplateType payload, @ClaimedAuthorities(claims = {Authorities.ADMIN}) Principal ignoredPrincipal) {
+ return new QueryResult<>(descriptionTemplateTypeService.persist(payload));
}
@PostMapping("update")
diff --git a/dmp-frontend/src/app/core/services/description-template-type/description-template-type.service.ts b/dmp-frontend/src/app/core/services/description-template-type/description-template-type.service.ts
index bacb2c558..0428d4bca 100644
--- a/dmp-frontend/src/app/core/services/description-template-type/description-template-type.service.ts
+++ b/dmp-frontend/src/app/core/services/description-template-type/description-template-type.service.ts
@@ -15,18 +15,18 @@ export class DescriptionTemplateTypeService {
constructor(private http: BaseHttpV2Service, private configurationService: ConfigurationService) {}
- getAll(lookup: DescriptionTemplateTypeLookup): Observable> {
- const url = `${this.apiBase}/all`;
+ query(lookup: DescriptionTemplateTypeLookup): Observable> {
+ const url = `${this.apiBase}/query`;
return this.http.post>(url, lookup, { headers: this.headers });
}
- getSingle(id: string): Observable> {
+ get(id: string): Observable> {
const url = `${this.apiBase}/${id}`;
return this.http.get>(url , { headers: this.headers });
}
- create(payload: DescriptionTemplateType): Observable> {
- const url = `${this.apiBase}/create`;
+ persist(payload: DescriptionTemplateType): Observable> {
+ const url = `${this.apiBase}/persist`;
return this.http.post>(url, payload, { headers: this.headers });
}
diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts
index d3ffca7d0..ad53c3431 100644
--- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts
+++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/dataset-profile-editor.component.ts
@@ -617,7 +617,7 @@ export class DatasetProfileEditorComponent extends CheckDeactivateBaseComponent
nameof(x => x.status)
]
};
- this.descriptionTemplateTypeService.getAll(lookup).pipe(takeUntil(this._destroyed))
+ this.descriptionTemplateTypeService.query(lookup).pipe(takeUntil(this._destroyed))
.subscribe(types => {
this.descriptionTemplateTypes = types.items.filter(type => type.status === DescriptionTemplateTypeStatus.Finalized);
});
diff --git a/dmp-frontend/src/app/ui/admin/description-types/editor/description-type-editor.component.ts b/dmp-frontend/src/app/ui/admin/description-types/editor/description-type-editor.component.ts
index b7f045d96..6dbd92de8 100644
--- a/dmp-frontend/src/app/ui/admin/description-types/editor/description-type-editor.component.ts
+++ b/dmp-frontend/src/app/ui/admin/description-types/editor/description-type-editor.component.ts
@@ -44,7 +44,7 @@ export class DescriptionTypeEditorComponent extends BaseComponent implements OnI
if (this.descriptionTemplateTypeId != null) {
this.isNew = false;
- this.descriptionTemplateTypeService.getSingle(this.descriptionTemplateTypeId)
+ this.descriptionTemplateTypeService.get(this.descriptionTemplateTypeId)
.pipe(takeUntil(this._destroyed)).subscribe(
type => {
this.descriptionTypeModel = new DescriptionTypeEditorModel().fromModel(type.items[0]);
@@ -84,7 +84,7 @@ export class DescriptionTypeEditorComponent extends BaseComponent implements OnI
onSubmit(): void {
if (this.isNew) {
- this.descriptionTemplateTypeService.create(this.formGroup.value)
+ this.descriptionTemplateTypeService.persist(this.formGroup.value)
.pipe(takeUntil(this._destroyed))
.subscribe(
complete => this.onCallbackSuccess(true),
diff --git a/dmp-frontend/src/app/ui/admin/description-types/listing/description-types.component.ts b/dmp-frontend/src/app/ui/admin/description-types/listing/description-types.component.ts
index bdeb32aa3..9843dbc4b 100644
--- a/dmp-frontend/src/app/ui/admin/description-types/listing/description-types.component.ts
+++ b/dmp-frontend/src/app/ui/admin/description-types/listing/description-types.component.ts
@@ -152,7 +152,7 @@ export class DescriptionTypesDataSource extends DataSource {
return result;