All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hp.autonomy.frontend.configuration.validation.ValidationServiceImpl Maven / Gradle / Ivy

There is a newer version: 3.3.0
Show newest version
/*
 * Copyright 2013-2015 Hewlett-Packard Development Company, L.P.
 * Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
 */

package com.hp.autonomy.frontend.configuration.validation;

import com.hp.autonomy.frontend.configuration.Config;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * Reference implementation of ValidationService
 */
@SuppressWarnings("WeakerAccess")
public class ValidationServiceImpl> implements ValidationService {

    private final Map, Validator> validators = new ConcurrentHashMap<>();

    /**
     * {@inheritDoc}
     *
     * @throws IllegalArgumentException If no validator is found for the given component
     */
    @Override
    public ValidationResult validate(final OptionalConfigurationComponent configurationComponent) {
        if (configurationComponent instanceof ValidatingConfigurationComponent) {
            @SuppressWarnings("rawtypes")
            final ValidatingConfigurationComponent validatingComponent = (ValidatingConfigurationComponent) configurationComponent;
            return validatingComponent.validate();
        } else {
            final Class componentClass = configurationComponent.getClass();
            final Validator validator = validators.get(componentClass);
            if (validator != null) {
                @SuppressWarnings({"unchecked", "rawtypes"})
                final ValidationResult validationResult = ((Validator) validator).validate(configurationComponent);
                return validationResult;
            } else {
                throw new IllegalArgumentException("No validator for class " + componentClass.getCanonicalName());
            }
        }
    }

    @Override
    public ValidationResults validateConfig(final T config) {
        return validateConfig(config.getValidationMap());
    }

    @Override
    public ValidationResults validateEnabledConfig(final T config) {
        return validateConfig(config.getEnabledValidationMap());
    }

    private ValidationResults validateConfig(final Map> components) {
        final ValidationResults.Builder builder = new ValidationResults.Builder();

        for (final Map.Entry> stringOptionalConfigurationComponentEntry : components.entrySet()) {
            final OptionalConfigurationComponent optionalConfigurationComponent = stringOptionalConfigurationComponentEntry.getValue();

            final ValidationResult result = validate(optionalConfigurationComponent);

            builder.put(stringOptionalConfigurationComponentEntry.getKey(), result);
        }

        return builder.build();
    }

    /**
     * Set the validators used by the service.  This will clear any existing validators.  This method is thread safe.
     *
     * @param validators The new validators to be used by the service
     */
    public void setValidators(final Iterable> validators) {
        this.validators.clear();

        for (final Validator validator : validators) {
            // this ensures we map OptionalConfigurationComponent classes to validators of the same class
            this.validators.put(validator.getSupportedClass(), validator);
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy