SearchIndexValidator.java
/*
* Copyright (C) 2024 B3Partners B.V.
*
* SPDX-License-Identifier: MIT
*/
package org.tailormap.api.repository.validation;
import java.lang.invoke.MethodHandles;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
import org.tailormap.api.persistence.SearchIndex;
import org.tailormap.api.persistence.TMFeatureSource;
import org.tailormap.api.repository.FeatureTypeRepository;
@Component
public class SearchIndexValidator implements Validator {
private static final Logger logger =
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private final FeatureTypeRepository featureTypeRepository;
public SearchIndexValidator(FeatureTypeRepository featureTypeRepository) {
this.featureTypeRepository = featureTypeRepository;
}
@Override
public boolean supports(@NonNull Class<?> clazz) {
return SearchIndex.class.isAssignableFrom(clazz);
}
@Override
public void validate(@NonNull Object target, @NonNull Errors errors) {
final SearchIndex searchIndex = (SearchIndex) target;
if (searchIndex.getFeatureTypeId() != null) {
featureTypeRepository.findById(searchIndex.getFeatureTypeId()).ifPresent((ft) -> {
if (TMFeatureSource.Protocol.WFS.equals(ft.getFeatureSource().getProtocol())) {
logger.warn(
"Attempt to index feature type '{}' from unsupported WFS source '{}'.",
ft.getName(),
ft.getFeatureSource().getTitle());
errors.rejectValue("featureTypeId", "invalid", "This feature type is not available for indexing.");
}
});
}
}
}