Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extend validation api #155

Merged
merged 3 commits into from
Sep 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@
import cz.cvut.kbss.analysis.exception.EntityNotFoundException;
import cz.cvut.kbss.analysis.exception.ValidationException;
import cz.cvut.kbss.analysis.model.util.HasIdentifier;
import cz.cvut.kbss.analysis.service.validation.EntityValidator;
import cz.cvut.kbss.analysis.service.validation.groups.ValidationScopes;
import org.springframework.lang.NonNull;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;
import org.springframework.validation.DataBinder;
import org.springframework.validation.Validator;


/**
Expand All @@ -42,9 +43,9 @@ public abstract class BaseRepositoryService<T extends HasIdentifier> {
*/
protected abstract GenericDao<T> getPrimaryDao();

private final Validator validator;
private final EntityValidator validator;

protected BaseRepositoryService(Validator validator) {
protected BaseRepositoryService(EntityValidator validator) {
this.validator = validator;
}

Expand Down Expand Up @@ -137,7 +138,7 @@ public void persist(@NonNull T instance) {
* @param instance The instance to be persisted, not {@code null}
*/
protected void prePersist(@NonNull T instance) {
validate(instance);
validate(instance, ValidationScopes.Create.class);
}

protected void postPersist(@NonNull T instance) {
Expand Down Expand Up @@ -173,7 +174,7 @@ protected void preUpdate(@NonNull T instance) {
if (!exists(instance.getUri())) {
throw EntityNotFoundException.create(instance.getClass().getSimpleName(), instance.getUri());
}
validate(instance);
validate(instance, ValidationScopes.Update.class);
}

/**
Expand Down Expand Up @@ -260,17 +261,25 @@ public boolean existsInPersistenceContext(URI id) {
* @param instance The instance to validate
* @throws ValidationException In case the instance is not valid
*/
protected void validate(T instance) {
public void validate(T instance, Object ... groups) {
DataBinder binder = new DataBinder(instance);
binder.setValidator(validator);
BindingResult bindingResult = binder.getBindingResult();

validator.validate(instance, bindingResult);
validator.validate(instance, bindingResult, groups);
if(bindingResult.hasErrors()) {
throw new ValidationException(bindingResult.getAllErrors());
}
}

public void validateNew(T instance){
validate(instance, ValidationScopes.Create.class);
}

public void validateUpdate(T instance){
validate(instance, ValidationScopes.Update.class);
}

public URI getToolContext(URI uri){
return getToolContext(uri.toString());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
import cz.cvut.kbss.analysis.model.ManagedEntity;
import cz.cvut.kbss.analysis.model.UserReference;
import cz.cvut.kbss.analysis.service.security.SecurityUtils;
import cz.cvut.kbss.analysis.service.validation.EntityValidator;
import lombok.NonNull;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.Validator;

import java.net.URI;
import java.util.Arrays;
Expand All @@ -24,7 +24,7 @@ public abstract class ComplexManagedEntityRepositoryService<T extends ManagedEnt
protected final UserDao userDao;
protected final SecurityUtils securityUtils;

public ComplexManagedEntityRepositoryService(Validator validator, UserDao userDao, SecurityUtils securityUtils) {
public ComplexManagedEntityRepositoryService(EntityValidator validator, UserDao userDao, SecurityUtils securityUtils) {
super(validator);
this.userDao = userDao;
this.securityUtils = securityUtils;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
import cz.cvut.kbss.analysis.model.Component;
import cz.cvut.kbss.analysis.model.FailureMode;
import cz.cvut.kbss.analysis.model.Function;
import cz.cvut.kbss.analysis.service.validation.EntityValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.Validator;

import java.net.URI;
import java.util.HashSet;
Expand All @@ -26,7 +26,7 @@ public class ComponentRepositoryService extends BaseRepositoryService<Component>
private final FunctionRepositoryService functionService;

@Autowired
public ComponentRepositoryService(@Qualifier("componentValidator") Validator validator, ComponentDao componentDao
public ComponentRepositoryService(@Qualifier("componentValidator") EntityValidator validator, ComponentDao componentDao
, FailureModeRepositoryService failureModeRepositoryService, FunctionRepositoryService functionService) {
super(validator);
this.componentDao = componentDao;
Expand Down Expand Up @@ -114,6 +114,8 @@ public void deleteFunction(URI componentUri, URI functionUri) {
public FailureMode addFailureMode(URI componentUri, FailureMode failureMode) {
log.info("> addFailureMode - {}, {}", componentUri, failureMode);

failureModeRepositoryService.validateNew(failureMode);

Component component = findRequired(componentUri);
component.addFailureMode(failureMode);
update(component);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,14 @@
import cz.cvut.kbss.analysis.dao.FailureModeDao;
import cz.cvut.kbss.analysis.dao.GenericDao;
import cz.cvut.kbss.analysis.model.FailureMode;
import cz.cvut.kbss.analysis.model.Function;
import cz.cvut.kbss.analysis.service.validation.EntityValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.Validator;

import java.net.URI;
import java.util.HashSet;
import java.util.Set;

@Service
Expand All @@ -23,7 +21,7 @@ public class FailureModeRepositoryService extends BaseRepositoryService<FailureM
private final FunctionRepositoryService functionRepositoryService;

@Autowired
public FailureModeRepositoryService(@Qualifier("defaultValidator") Validator validator, FailureModeDao failureModeDao, FunctionRepositoryService functionRepositoryService) {
public FailureModeRepositoryService(@Qualifier("defaultEntityValidator") EntityValidator validator, FailureModeDao failureModeDao, FunctionRepositoryService functionRepositoryService) {
super(validator);
this.failureModeDao = failureModeDao;
this.functionRepositoryService = functionRepositoryService;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
import cz.cvut.kbss.analysis.dto.update.FailureModesRowRpnUpdateDTO;
import cz.cvut.kbss.analysis.model.FailureModesRow;
import cz.cvut.kbss.analysis.model.Mitigation;
import cz.cvut.kbss.analysis.service.validation.EntityValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.Validator;

import java.net.URI;

Expand All @@ -22,8 +22,8 @@ public class FailureModesRowRepositoryService extends BaseRepositoryService<Fail
private final MitigationRepositoryService mitigationRepositoryService;

@Autowired
public FailureModesRowRepositoryService(@Qualifier("defaultValidator") Validator validator, FailureModesRowDao failureModesRowDao
,MitigationRepositoryService mitigationRepositoryService) {
public FailureModesRowRepositoryService(@Qualifier("defaultEntityValidator") EntityValidator validator, FailureModesRowDao failureModesRowDao
, MitigationRepositoryService mitigationRepositoryService) {
super(validator);
this.failureModesRowDao = failureModesRowDao;
this.mitigationRepositoryService = mitigationRepositoryService;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
import cz.cvut.kbss.analysis.model.*;
import cz.cvut.kbss.analysis.service.util.FaultTreeTraversalUtils;
import cz.cvut.kbss.analysis.service.util.Pair;
import cz.cvut.kbss.analysis.service.validation.EntityValidator;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.SerializationUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.Validator;

import java.io.StringWriter;
import java.net.URI;
Expand All @@ -33,7 +33,7 @@ public class FailureModesTableRepositoryService extends BaseRepositoryService<Fa
private final FunctionRepositoryService functionRepositoryService;

@Autowired
public FailureModesTableRepositoryService(@Qualifier("defaultValidator") Validator validator,
public FailureModesTableRepositoryService(@Qualifier("defaultEntityValidator") EntityValidator validator,
FailureModesTableDao failureModesTableDao,
FaultEventRepositoryService faultEventRepositoryService,
FunctionRepositoryService functionRepositoryService) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@
import cz.cvut.kbss.analysis.model.fta.FtaEventType;
import cz.cvut.kbss.analysis.service.security.SecurityUtils;
import cz.cvut.kbss.analysis.service.strategy.DirectFtaEvaluation;
import cz.cvut.kbss.analysis.service.validation.EntityValidator;
import cz.cvut.kbss.analysis.util.Vocabulary;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.Validator;

import java.net.URI;
import java.util.*;
Expand All @@ -39,7 +39,7 @@ public class FaultEventRepositoryService extends BaseRepositoryService<FaultEven
private final SecurityUtils securityUtils;

@Autowired
public FaultEventRepositoryService(@Qualifier("faultEventValidator") Validator validator, FaultEventDao faultEventDao, ComponentRepositoryService componentRepositoryService, FaultTreeDao faultTreeDao, FaultEventTypeService faultEventTypeService, FaultEventTypeDao faultEventTypeDao, SecurityUtils securityUtils) {
public FaultEventRepositoryService(@Qualifier("faultEventValidator") EntityValidator validator, FaultEventDao faultEventDao, ComponentRepositoryService componentRepositoryService, FaultTreeDao faultTreeDao, FaultEventTypeService faultEventTypeService, FaultEventTypeDao faultEventTypeDao, SecurityUtils securityUtils) {
super(validator);
this.faultEventDao = faultEventDao;
this.componentRepositoryService = componentRepositoryService;
Expand All @@ -62,6 +62,7 @@ protected void preRemove(FaultEvent instance) {

@Transactional
public FaultEvent addInputEvent(URI eventUri, FaultEvent inputEvent) {
validateNew(inputEvent);
FaultEvent currentEvent = findRequired(eventUri);

if(inputEvent.getUri() == null && inputEvent.getRectangle() == null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,6 @@ protected GenericDao<FaultEventType> getPrimaryDao() {
}

@Override
protected void validate(FaultEventType instance) {
public void validate(FaultEventType instance, Object ... groups) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import cz.cvut.kbss.analysis.dao.*;
import cz.cvut.kbss.analysis.dao.util.FaultTreeFilterParams;
import cz.cvut.kbss.analysis.exception.EntityNotFoundException;
import cz.cvut.kbss.analysis.model.*;
import cz.cvut.kbss.analysis.model.System;
import cz.cvut.kbss.analysis.model.*;
import cz.cvut.kbss.analysis.model.ava.ATASystem;
import cz.cvut.kbss.analysis.model.ava.FHAEventType;
import cz.cvut.kbss.analysis.model.diagram.Rectangle;
Expand All @@ -19,6 +19,7 @@
import cz.cvut.kbss.analysis.service.security.SecurityUtils;
import cz.cvut.kbss.analysis.service.util.FaultTreeTraversalUtils;
import cz.cvut.kbss.analysis.service.util.Pair;
import cz.cvut.kbss.analysis.service.validation.EntityValidator;
import cz.cvut.kbss.analysis.util.Vocabulary;
import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -29,7 +30,6 @@
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.Validator;

import java.net.URI;
import java.net.URISyntaxException;
Expand All @@ -56,7 +56,7 @@ public class FaultTreeRepositoryService extends ComplexManagedEntityRepositorySe
private final FailureRateDao failureRateDao;

@Autowired
public FaultTreeRepositoryService(@Qualifier("defaultValidator") Validator validator,
public FaultTreeRepositoryService(@Qualifier("defaultEntityValidator") EntityValidator validator,
FaultTreeDao faultTreeDao,
FaultEventScenarioDao faultEventScenarioDao,
FaultEventRepositoryService faultEventRepositoryService,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,18 @@
import cz.cvut.kbss.analysis.model.Behavior;
import cz.cvut.kbss.analysis.model.Component;
import cz.cvut.kbss.analysis.model.Function;
import cz.cvut.kbss.analysis.service.validation.EntityValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.Validator;

import java.net.URI;
import java.util.*;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Slf4j
@Service
Expand All @@ -24,7 +27,7 @@ public class FunctionRepositoryService extends BaseRepositoryService<Function> {
private final FailureModeDao failureModeDao;

@Autowired
public FunctionRepositoryService(@Qualifier("functionValidator") Validator validator, FunctionDao functionDao, FailureModeDao failureModeDao) {
public FunctionRepositoryService(@Qualifier("functionValidator") EntityValidator validator, FunctionDao functionDao, FailureModeDao failureModeDao) {
super(validator);
this.functionDao = functionDao;
this.failureModeDao = failureModeDao;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,23 @@
import cz.cvut.kbss.analysis.dao.MitigationDao;
import cz.cvut.kbss.analysis.dto.update.MitigationUpdateDTO;
import cz.cvut.kbss.analysis.model.Mitigation;
import cz.cvut.kbss.analysis.service.validation.EntityValidator;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.Validator;

import java.net.URI;

@Slf4j
@Service
public class MitigationRepositoryService extends BaseRepositoryService<Mitigation> {

private MitigationDao mitigationDao;
private final MitigationDao mitigationDao;

@Autowired
public MitigationRepositoryService(@Qualifier("defaultValidator") Validator validator, MitigationDao mitigationDao) {
public MitigationRepositoryService(@Qualifier("defaultEntityValidator") EntityValidator validator, MitigationDao mitigationDao) {
super(validator);
this.mitigationDao = mitigationDao;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,6 @@ protected GenericDao<OperationalDataFilter> getPrimaryDao() {
}

@Override
protected void validate(OperationalDataFilter instance) {
public void validate(OperationalDataFilter instance, Object ... groups) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
import cz.cvut.kbss.analysis.model.System;
import cz.cvut.kbss.analysis.model.opdata.OperationalDataFilter;
import cz.cvut.kbss.analysis.service.security.SecurityUtils;
import cz.cvut.kbss.analysis.service.validation.EntityValidator;
import cz.cvut.kbss.analysis.util.Vocabulary;
import lombok.NonNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.Validator;

import java.net.URI;
import java.util.HashSet;
Expand All @@ -37,7 +37,7 @@ public class SystemRepositoryService extends ComplexManagedEntityRepositoryServi
private final OperationalDataFilterService operationalDataFilterService;

@Autowired
public SystemRepositoryService(@Qualifier("defaultValidator") Validator validator,
public SystemRepositoryService(@Qualifier("systemValidator") EntityValidator validator,
SystemDao systemDao,
ComponentRepositoryService componentRepositoryService,
ComponentDao componentDao,
Expand Down Expand Up @@ -69,12 +69,6 @@ public System findRequired(URI id) {

@Transactional
public System create(System system){
List<URI> existingSystems = systemDao.findUriByName(system.getName());
if(!existingSystems.isEmpty())
throw new LogicViolationException((
"Cannot create system with name \"%s\", " +
"the name is already assigned to another system.")
.formatted(system.getName()));
this.persist(system);
return system;
}
Expand All @@ -96,12 +90,6 @@ public void remove(@NonNull URI instanceUri) {
@Transactional
public System rename(System systemRename) {
log.info("> rename - {}", systemRename);
List<URI> existingSystems = systemDao.findUriByName(systemRename.getName());
if(!existingSystems.isEmpty())
throw new LogicViolationException((
"Cannot rename system to \"%s\", " +
"the name is already assigned to another system.")
.formatted(systemRename.getName()));

System system = findRequired(systemRename.getUri());
system.setName(systemRename.getName());
Expand Down
Loading
Loading