266af54d8e82ddd897a2a3aef9092bcde8946f1d
[openflowplugin.git] / extension / openflowplugin-extension-nicira / src / main / java / org / opendaylight / openflowplugin / extension / vendor / nicira / convertor / match / ArpThaConvertor.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 package org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.match;
9
10 import com.google.common.base.Optional;
11 import org.opendaylight.openflowplugin.extension.api.ConvertorFromOFJava;
12 import org.opendaylight.openflowplugin.extension.api.ConvertorToOFJava;
13 import org.opendaylight.openflowplugin.extension.api.ExtensionAugment;
14 import org.opendaylight.openflowplugin.extension.api.path.MatchPath;
15 import org.opendaylight.openflowplugin.extension.vendor.nicira.convertor.CodecPreconditionException;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Nxm1Class;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.ofj.nxm.nx.match.arp.tha.grouping.ArpThaValuesBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.ArpThaCaseValue;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.oxm.container.match.entry.value.ArpThaCaseValueBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.ExtensionKey;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general.rev140714.general.extension.grouping.Extension;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNodesNodeTableFlow;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNodesNodeTableFlowBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifPacketIn;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifPacketInBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifSwitchFlowRemoved;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchNotifSwitchFlowRemovedBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchPacketInMessage;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchPacketInMessageBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchRpcGetFlowStats;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxAugMatchRpcGetFlowStatsBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxArpThaGrouping;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.NxmNxArpThaKey;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.nxm.nx.arp.tha.grouping.NxmNxArpTha;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.nicira.match.rev140714.nxm.nx.arp.tha.grouping.NxmNxArpThaBuilder;
38 import org.opendaylight.yangtools.yang.binding.Augmentation;
39
40 /**
41  * @author msunal
42  */
43 public class ArpThaConvertor implements ConvertorToOFJava<MatchEntry>, ConvertorFromOFJava<MatchEntry, MatchPath> {
44
45     /*
46      * (non-Javadoc)
47      * 
48      * @see
49      * org.opendaylight.openflowplugin.extension.api.ConvertorFromOFJava#convert
50      * (org.opendaylight.yangtools.yang.binding.DataContainer,
51      * org.opendaylight.openflowplugin.extension.api.path.AugmentationPath)
52      */
53     @Override
54     public ExtensionAugment<? extends Augmentation<Extension>> convert(MatchEntry input, MatchPath path) {
55         ArpThaCaseValue arpThaCaseValue = ((ArpThaCaseValue) input.getMatchEntryValue());
56         return resolveAugmentation(new NxmNxArpThaBuilder().setMacAddress(arpThaCaseValue.getArpThaValues().getMacAddress()).build(), path,
57                 NxmNxArpThaKey.class);
58     }
59
60     private static ExtensionAugment<? extends Augmentation<Extension>> resolveAugmentation(NxmNxArpTha value,
61                                                                                            MatchPath path, Class<? extends ExtensionKey> key) {
62         switch (path) {
63             case FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_MATCH:
64                 return new ExtensionAugment<>(NxAugMatchNodesNodeTableFlow.class,
65                         new NxAugMatchNodesNodeTableFlowBuilder().setNxmNxArpTha(value).build(), key);
66             case RPCFLOWSSTATISTICS_FLOWANDSTATISTICSMAPLIST_MATCH:
67                 return new ExtensionAugment<>(NxAugMatchRpcGetFlowStats.class,
68                         new NxAugMatchRpcGetFlowStatsBuilder().setNxmNxArpTha(value).build(), key);
69             case PACKETRECEIVED_MATCH:
70                 return new ExtensionAugment<>(NxAugMatchNotifPacketIn.class, new NxAugMatchNotifPacketInBuilder()
71                         .setNxmNxArpTha(value).build(), key);
72             case SWITCHFLOWREMOVED_MATCH:
73                 return new ExtensionAugment<>(NxAugMatchNotifSwitchFlowRemoved.class,
74                         new NxAugMatchNotifSwitchFlowRemovedBuilder().setNxmNxArpTha(value).build(), key);
75             case PACKETINMESSAGE_MATCH:
76                 return new ExtensionAugment<>(NxAugMatchPacketInMessage.class,
77                         new NxAugMatchPacketInMessageBuilder().setNxmNxArpTha(value).build(), key);
78             default:
79                 throw new CodecPreconditionException(path);
80         }
81     }
82
83     /*
84      * (non-Javadoc)
85      * 
86      * @see
87      * org.opendaylight.openflowplugin.extension.api.ConvertorToOFJava#convert
88      * (org
89      * .opendaylight.yang.gen.v1.urn.opendaylight.openflowplugin.extension.general
90      * .rev140714.general.extension.grouping.Extension)
91      */
92     @Override
93     public MatchEntry convert(Extension extension) {
94         Optional<NxmNxArpThaGrouping> matchGrouping = MatchUtil.arpThaResolver.getExtension(extension);
95         if (!matchGrouping.isPresent()) {
96             throw new CodecPreconditionException(extension);
97         }
98         MacAddress macAddress = matchGrouping.get().getNxmNxArpTha().getMacAddress();
99         ArpThaCaseValueBuilder arpThaCaseValueBuilder = new ArpThaCaseValueBuilder();
100         arpThaCaseValueBuilder.setArpThaValues(new ArpThaValuesBuilder()
101                 .setMacAddress(macAddress).build());
102         return MatchUtil.createDefaultMatchEntryBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxArpTha.class,
103                 Nxm1Class.class,
104                 arpThaCaseValueBuilder.build()).build();
105
106     }
107
108 }