Implementing VPP Renderer registration
[groupbasedpolicy.git] / renderers / vpp / src / main / java / org / opendaylight / groupbasedpolicy / renderer / vpp / sf / IpProtoClassifier.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.vpp.sf;
10
11 import java.util.List;
12 import java.util.Map;
13
14 import org.opendaylight.groupbasedpolicy.api.sf.IpProtoClassifierDefinition;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ClassifierDefinitionId;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ParameterName;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.definitions.ClassifierDefinition;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.subject.feature.instance.ParameterValue;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.has.parameters.type.parameter.type.IntBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValues;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.capabilities.supported.classifier.definition.SupportedParameterValuesBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.supported._int.value.fields.SupportedIntValue;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.supported._int.value.fields.SupportedIntValueBuilder;
24
25 import com.google.common.collect.ImmutableList;
26
27 /**
28  * Match on the IP protocol of IP traffic.
29  */
30 public class IpProtoClassifier extends Classifier {
31
32     protected IpProtoClassifier(Classifier parent) {
33         super(parent);
34     }
35
36     @Override
37     public ClassifierDefinitionId getId() {
38         return IpProtoClassifierDefinition.ID;
39     }
40
41     @Override
42     public ClassifierDefinition getClassifierDefinition() {
43         return IpProtoClassifierDefinition.DEFINITION;
44     }
45
46     @Override
47     public List<SupportedParameterValues> getSupportedParameterValues() {
48
49         List<SupportedIntValue> values = ImmutableList.of(
50                 new SupportedIntValueBuilder().setValue(IpProtoClassifierDefinition.ICMP_VALUE).build(),
51                 new SupportedIntValueBuilder().setValue(IpProtoClassifierDefinition.SCTP_VALUE).build(),
52                 new SupportedIntValueBuilder().setValue(IpProtoClassifierDefinition.TCP_VALUE).build(),
53                 new SupportedIntValueBuilder().setValue(IpProtoClassifierDefinition.UDP_VALUE).build());
54         SupportedParameterValuesBuilder builder = new SupportedParameterValuesBuilder();
55         builder.setParameterName(new ParameterName(IpProtoClassifierDefinition.PROTO_PARAM));
56         builder.setParameterType(new IntBuilder().setSupportedIntValue(values).build());
57
58         return ImmutableList.of(builder.build());
59     }
60
61     @Override
62     protected void checkPresenceOfRequiredParams(Map<String, ParameterValue> params) {
63         if (params.get(IpProtoClassifierDefinition.PROTO_PARAM) == null) {
64             throw new IllegalArgumentException(
65                     "Parameter " + IpProtoClassifierDefinition.PROTO_PARAM + " not specified.");
66         }
67         if (params.get(IpProtoClassifierDefinition.PROTO_PARAM).getIntValue() == null) {
68             throw new IllegalArgumentException(
69                     "Value of " + IpProtoClassifierDefinition.PROTO_PARAM + " parameter is not present.");
70         }
71     }
72
73     /**
74      * Return the IpProtocol value. May return null.
75      *
76      * @param params the parameters of classifier-instance inserted by user
77      * @return the IpProtocol value
78      */
79     public static Long getIpProtoValue(Map<String, ParameterValue> params) {
80         if (params == null) {
81             return null;
82         }
83         if (params.get(IpProtoClassifierDefinition.PROTO_PARAM) == null) {
84             return null;
85         }
86         Long proto = params.get(IpProtoClassifierDefinition.PROTO_PARAM).getIntValue();
87         if (proto != null) {
88             return proto;
89         }
90         return null;
91     }
92 }