package ru.hflabs.rcd.service.document.dictionary;
import org.springframework.validation.Errors;
import ru.hflabs.rcd.exception.constraint.IllegalPrimaryKeyException;
import ru.hflabs.rcd.exception.search.document.UnknownDictionaryException;
import ru.hflabs.rcd.model.document.Dictionary;
import ru.hflabs.rcd.service.document.IDictionaryService;
import ru.hflabs.rcd.service.document.IGroupService;
import ru.hflabs.rcd.service.document.NamedDocumentChangeValidator;
import static ru.hflabs.rcd.accessor.Accessors.GROUP_TO_DICTIONARY_INJECTOR;
/**
* Класс <class>DictionaryValidator</class> реализует базовый сервис валидации справочников
*
* @author Nazin Alexander
*/
public class DictionaryChangeValidator extends NamedDocumentChangeValidator<Dictionary, IDictionaryService> {
/** Сервис работы с группами справочников */
private IGroupService groupService;
public DictionaryChangeValidator(boolean mustExist) {
super(Dictionary.class, mustExist, UnknownDictionaryException.class);
}
public void setGroupService(IGroupService groupService) {
this.groupService = groupService;
}
@Override
protected Dictionary findUniqueByName(Dictionary target) {
return getDocumentService().findUniqueByRelativeId(target.getGroupId(), target.getName(), false, true);
}
@Override
protected void doValidateCommon(Errors errors, Dictionary target) {
String relativeId = GROUP_TO_DICTIONARY_INJECTOR.applyRelativeId(target);
try {
GROUP_TO_DICTIONARY_INJECTOR.inject(target, groupService.findByID(relativeId, true, false));
doValidatePermissions(errors, GROUP_TO_DICTIONARY_INJECTOR.apply(target));
} catch (IllegalPrimaryKeyException ex) {
reject(errors, ex, relativeId);
}
}
}