2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.groupbasedpolicy.resolver.validator;
11 import java.util.HashMap;
13 import javax.annotation.Nullable;
14 import org.opendaylight.groupbasedpolicy.resolver.PolicyResolver;
15 import org.opendaylight.groupbasedpolicy.resolver.validator.validators.ActionInstanceValidator;
16 import org.opendaylight.groupbasedpolicy.resolver.validator.validators.SubjectFeatureInstancesValidator;
17 import org.opendaylight.groupbasedpolicy.resolver.validator.validators.TenantValidator;
18 import org.opendaylight.yangtools.yang.binding.DataContainer;
22 * Factory to create concrete {@link Validator} class for object to validate.
25 public class PolicyValidator {
28 * Map of Objects and their corresponding validators.
30 private static final Map<Class<? extends DataContainer>, AbstractValidator<? extends DataContainer>> VALIDATORS;
33 VALIDATORS = new HashMap<>();
34 TenantValidator tenantValidator = new TenantValidator();
35 VALIDATORS.put(tenantValidator.getType(), tenantValidator);
36 SubjectFeatureInstancesValidator subjectFeatureInstancesValidator = new SubjectFeatureInstancesValidator();
37 VALIDATORS.put(subjectFeatureInstancesValidator.getType(), subjectFeatureInstancesValidator);
38 ActionInstanceValidator actionInstanceValidator = new ActionInstanceValidator();
39 VALIDATORS.put(actionInstanceValidator.getType(), actionInstanceValidator);
43 * Validator Returns {@link Validator} for given object.
46 * @param object Object, for which validator should be created.
47 * @param policyResolver Instance of {@link PolicyResolver} that contains
48 * additional data required for individual validation process
49 * @return Concrete {@link Validator} for given object
51 @SuppressWarnings({"unchecked", "rawtypes"})
52 static <T extends DataContainer> Validator<T> createValidator(T object, PolicyResolver policyResolver) {
53 AbstractValidator validator = VALIDATORS.get(object.getImplementedInterface());
54 if (validator == null) {
57 validator.setPolicyResolver(policyResolver);
58 return (Validator<T>) validator;
63 * @param object Object to validate
64 * @param policyResolver Instance of {@link PolicyResolver} that contains
65 * additional data required for individual validation process
66 * @return {@code null} if validator for the object does not exist;
67 * {@link ValidationResult} otherwise
69 public static @Nullable
70 <T extends DataContainer> ValidationResult validate(T object, PolicyResolver policyResolver) {
71 Validator<T> validator = createValidator(object, policyResolver);
72 return validator.validate(object);