ValidationConfiguration.java

/*
 * Copyright (C) 2023 B3Partners B.V.
 *
 * SPDX-License-Identifier: MIT
 */

package org.tailormap.api.repository.validation;

import org.springframework.context.annotation.Configuration;
import org.springframework.data.rest.core.event.ValidatingRepositoryEventListener;
import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer;
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;

@Configuration
public class ValidationConfiguration implements RepositoryRestConfigurer {
  // JSR-303 validator
  private final LocalValidatorFactoryBean localValidatorFactoryBean;

  private final GeoServiceValidator geoServiceValidator;

  private final FeatureSourceValidator featureSourceValidator;

  private final ApplicationValidator applicationValidator;

  private final SearchIndexValidator searchIndexValidator;

  public ValidationConfiguration(
      LocalValidatorFactoryBean localValidatorFactoryBean,
      GeoServiceValidator geoServiceValidator,
      FeatureSourceValidator featureSourceValidator,
      ApplicationValidator applicationValidator,
      SearchIndexValidator searchIndexValidator) {
    this.localValidatorFactoryBean = localValidatorFactoryBean;
    this.geoServiceValidator = geoServiceValidator;
    this.featureSourceValidator = featureSourceValidator;
    this.applicationValidator = applicationValidator;
    this.searchIndexValidator = searchIndexValidator;
  }

  @Override
  public void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener validatingListener) {
    validatingListener
        .addValidator("beforeCreate", localValidatorFactoryBean)
        .addValidator("beforeSave", localValidatorFactoryBean)
        .addValidator("beforeCreate", geoServiceValidator)
        .addValidator("beforeSave", geoServiceValidator)
        .addValidator("beforeCreate", featureSourceValidator)
        .addValidator("beforeSave", featureSourceValidator)
        .addValidator("beforeCreate", applicationValidator)
        .addValidator("beforeSave", applicationValidator)
        .addValidator("beforeCreate", searchIndexValidator)
        .addValidator("beforeSave", searchIndexValidator);
  }
}