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