Registration point for renderer capabilities
[groupbasedpolicy.git] / renderers / ofoverlay / src / main / java / org / opendaylight / groupbasedpolicy / renderer / ofoverlay / sf / SubjectFeatures.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.sf;
10
11 import java.util.List;
12 import java.util.Map;
13
14 import org.opendaylight.groupbasedpolicy.sf.classifiers.EtherTypeClassifierDefinition;
15 import org.opendaylight.groupbasedpolicy.sf.classifiers.IpProtoClassifierDefinition;
16 import org.opendaylight.groupbasedpolicy.sf.classifiers.L4ClassifierDefinition;
17 import org.opendaylight.groupbasedpolicy.sf.actions.AllowActionDefinition;
18 import org.opendaylight.groupbasedpolicy.sf.actions.ChainActionDefinition;
19
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ActionDefinitionId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierDefinitionId;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitions;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.SubjectFeatureDefinitionsBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ActionDefinition;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinition;
26
27 import com.google.common.base.Function;
28 import com.google.common.collect.Collections2;
29 import com.google.common.collect.ImmutableList;
30 import com.google.common.collect.ImmutableMap;
31
32 /**
33  * Defines the subject features that are supported by the OF overlay renderer
34  */
35 public class SubjectFeatures {
36
37     private static final Map<ClassifierDefinitionId, Classifier> classifiers = ImmutableMap.
38             of(EtherTypeClassifierDefinition.ID, Classifier.ETHER_TYPE_CL,
39                     IpProtoClassifierDefinition.ID, Classifier.IP_PROTO_CL,
40                     L4ClassifierDefinition.ID, Classifier.L4_CL);
41
42     private static final List<ClassifierDefinition> classifierDefs =
43             ImmutableList.copyOf(Collections2.transform(classifiers.values(),
44                 new Function<Classifier, ClassifierDefinition>() {
45                     @Override
46                     public ClassifierDefinition apply(Classifier input) {
47                         return input.getClassifierDefinition();
48                     }
49                 }
50             ));
51
52     private static final Map<ActionDefinitionId, Action> actions = ImmutableMap.
53             of(AllowActionDefinition.ID, new AllowAction(), ChainActionDefinition.ID,
54                     new ChainAction());
55
56     private static final List<ActionDefinition> actionDefs =
57             ImmutableList.copyOf(Collections2.transform(actions.values(),
58                 new Function<Action, ActionDefinition>() {
59                     @Override
60                     public ActionDefinition apply(Action input) {
61                         return input.getActionDef();
62                     }
63                 }
64              ));
65
66     public static final SubjectFeatureDefinitions OF_OVERLAY_FEATURES =
67             new SubjectFeatureDefinitionsBuilder()
68                 .setActionDefinition(actionDefs)
69                 .setClassifierDefinition(classifierDefs)
70                 .build();
71
72     /**
73      * Get the {@link Classifier} associated with the given
74      * {@link ClassifierDefinitionId}
75      * @param id the {@link ClassifierDefinitionId} to look up
76      * @return the {@link Classifier} if one exists, or <code>null</code>
77      * otherwise
78      */
79     public static Classifier getClassifier(ClassifierDefinitionId id) {
80         return classifiers.get(id);
81     }
82
83
84     public static Map<ClassifierDefinitionId, Classifier> getClassifiers() {
85         return classifiers;
86     }
87
88     public static Map<ActionDefinitionId, Action> getActions() {
89         return actions;
90     }
91
92     /**
93      * Get the {@link Action} associated with the given
94      * {@link ActionDefinitionId}
95      * @param id the {@link ActionDefinitionId} to look up
96      * @return the {@link Action} if one exists, or <code>null</code>
97      * otherwise
98      */
99     public static Action getAction(ActionDefinitionId id) {
100         return actions.get(id);
101     }
102 }