Add yang generated packages in .gitignore
[groupbasedpolicy.git] / groupbasedpolicy / src / main / java / org / opendaylight / groupbasedpolicy / resolver / validator / PolicyValidator.java
1 package org.opendaylight.groupbasedpolicy.resolver.validator;
2
3 /*
4  * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
5  *
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
9  */
10 import java.util.HashMap;
11 import java.util.Map;
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;
18
19 /**
20  *
21  * Factory to create concrete {@link Validator} class for object to validate.
22  *
23  */
24 public class PolicyValidator {
25
26     /**
27      * Map of Objects and their corresponding validators.
28      */
29     private static final Map<Class<? extends DataContainer>, AbstractValidator<? extends DataContainer>> VALIDATORS;
30
31     static {
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);
39     }
40
41     /**
42      * Validator Returns {@link Validator} for given object.
43      *
44      * @param <T>
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
49      */
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) {
54             return null;
55         }
56         validator.setPolicyResolver(policyResolver);
57         return (Validator<T>) validator;
58     }
59
60     /**
61      * @param <T>
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
67      */
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);
72     }
73
74 }