package eu.eudat.validators; import eu.eudat.entities.DMP; import eu.eudat.models.criteria.DataManagementPlanCriteria; import eu.eudat.models.dmp.DataManagementPlanNewVersionModel; import eu.eudat.services.ApiContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.validation.Errors; import org.springframework.validation.Validator; import java.util.Arrays; import java.util.List; import java.util.UUID; /** * Created by ikalyvas on 3/7/2018. */ @Component("dataManagementPlanNewVersionValidator") public class DataManagementPlanNewVersionValidator implements Validator { private ApiContext apiContext; @Autowired public DataManagementPlanNewVersionValidator(ApiContext apiContext) { this.apiContext = apiContext; } @Override public boolean supports(Class aClass) { return DataManagementPlanNewVersionModel.class.equals(aClass); } @Override public void validate(Object obj, Errors errors) { DataManagementPlanNewVersionModel dataManagementPlanNewVersionModel = (DataManagementPlanNewVersionModel) obj; DataManagementPlanCriteria criteria = new DataManagementPlanCriteria(); List groupIds = Arrays.asList(dataManagementPlanNewVersionModel.getGroupId()); criteria.setGroupIds(groupIds); DMP latestDmp = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(criteria).getSingleOrDefault(); if (latestDmp.getVersion() >= dataManagementPlanNewVersionModel.getVersion()) { errors.rejectValue("version", "datamanagementplannewversion.version.notacceptable"); } else if (latestDmp.getVersion() + 1 != dataManagementPlanNewVersionModel.getVersion()) { errors.rejectValue("version", "datamanagementplannewversion.version.notnext"); } } public static boolean supportsType(Class aClass) { return DataManagementPlanNewVersionModel.class.equals(aClass); } }