543c348fefb43d072bb24e77901fba90d40d68f6
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / core / translator / ErrorTranslator.java
1 /**
2  * Copyright (c) 2013-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.openflow.md.core.translator;
9
10 import java.math.BigInteger;
11
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorType;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadActionErrorNotificationBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadInstructionErrorNotificationBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadMatchErrorNotificationBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.BadRequestErrorNotificationBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.ExperimenterErrorNotificationBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.FlowModErrorNotificationBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.GroupModErrorNotificationBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.HelloFailedErrorNotificationBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.MeterModErrorNotificationBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.PortModErrorNotificationBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.QueueOpErrorNotificationBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.RoleRequestErrorNotificationBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.SwitchConfigErrorNotificationBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.TableFeaturesErrorNotificationBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.node.error.service.rev140410.TableModErrorNotificationBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.ErrorMessage;
31
32 /**
33  * OF-1.3 errorMessage support
34  */
35 public class ErrorTranslator extends AbstractErrorTranslator {
36
37     @Override
38     public ErrorType decodeErrorType(int type) {
39         return ErrorType.forValue(type);
40     }
41
42     @Override
43     public org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorMessage getGranularNodeErrors(ErrorMessage message, ErrorType errorType, NodeRef node){
44         org.opendaylight.yang.gen.v1.urn.opendaylight.flow.errors.rev131116.ErrorMessage outErrorMessage = null;
45         TransactionId txnId = new TransactionId(BigInteger.valueOf(message.getXid()));
46
47         //currently in yang , generation of builders does not support an interface
48         //so each notification is put in a separate if-else
49         if (errorType == ErrorType.HelloFailed) {
50             HelloFailedErrorNotificationBuilder builder = new HelloFailedErrorNotificationBuilder();
51             builder.setTransactionId(txnId);
52             builder.setType(errorType);
53             builder.setCode(message.getCode());
54             builder.setNode(node);
55             if (message.getData() != null) {
56                 builder.setData(new String(message.getData()));
57             }
58             outErrorMessage = builder.build();
59         } else if (errorType == ErrorType.BadRequest) {
60             BadRequestErrorNotificationBuilder builder = new BadRequestErrorNotificationBuilder ();
61             builder.setTransactionId(txnId);
62             builder.setType(errorType);
63             builder.setCode(message.getCode());
64             builder.setNode(node);
65             if (message.getData() != null) {
66                 builder.setData(new String(message.getData()));
67             }
68             outErrorMessage = builder.build();
69         } else if (errorType == ErrorType.BadAction) {
70             BadActionErrorNotificationBuilder builder = new BadActionErrorNotificationBuilder();
71             builder.setTransactionId(txnId);
72             builder.setType(errorType);
73             builder.setCode(message.getCode());
74             builder.setNode(node);
75             if (message.getData() != null) {
76                 builder.setData(new String(message.getData()));
77             }
78             outErrorMessage = builder.build();
79         } else if (errorType == ErrorType.BadInstruction) {
80             BadInstructionErrorNotificationBuilder builder = new BadInstructionErrorNotificationBuilder();
81             builder.setTransactionId(txnId);
82             builder.setType(errorType);
83             builder.setCode(message.getCode());
84             builder.setNode(node);
85             if (message.getData() != null) {
86                 builder.setData(new String(message.getData()));
87             }
88             outErrorMessage = builder.build();
89         } else if (errorType == ErrorType.BadMatch) {
90             BadMatchErrorNotificationBuilder builder = new BadMatchErrorNotificationBuilder();
91             builder.setTransactionId(txnId);
92             builder.setType(errorType);
93             builder.setCode(message.getCode());
94             builder.setNode(node);
95             if (message.getData() != null) {
96                 builder.setData(new String(message.getData()));
97             }
98             outErrorMessage = builder.build();
99         } else if (errorType == ErrorType.FlowModFailed) {
100             FlowModErrorNotificationBuilder builder = new FlowModErrorNotificationBuilder();
101             builder.setTransactionId(txnId);
102             builder.setType(errorType);
103             builder.setCode(message.getCode());
104             builder.setNode(node);
105             if (message.getData() != null) {
106                 builder.setData(new String(message.getData()));
107             }
108             outErrorMessage = builder.build();
109         } else if (errorType == ErrorType.GroupModFailed) {
110             GroupModErrorNotificationBuilder builder = new GroupModErrorNotificationBuilder();
111             builder.setTransactionId(txnId);
112             builder.setType(errorType);
113             builder.setCode(message.getCode());
114             builder.setNode(node);
115             if (message.getData() != null) {
116                 builder.setData(new String(message.getData()));
117             }
118             outErrorMessage = builder.build();
119         } else if (errorType == ErrorType.PortModFailed) {
120             PortModErrorNotificationBuilder builder = new PortModErrorNotificationBuilder();
121             builder.setTransactionId(txnId);
122             builder.setType(errorType);
123             builder.setCode(message.getCode());
124             builder.setNode(node);
125             if (message.getData() != null) {
126                 builder.setData(new String(message.getData()));
127             }
128             outErrorMessage = builder.build();
129         } else if (errorType == ErrorType.QueueOpFailed) {
130             QueueOpErrorNotificationBuilder builder = new QueueOpErrorNotificationBuilder();
131             builder.setTransactionId(txnId);
132             builder.setType(errorType);
133             builder.setCode(message.getCode());
134             builder.setNode(node);
135             if (message.getData() != null) {
136                 builder.setData(new String(message.getData()));
137             }
138             outErrorMessage = builder.build();
139         } else if (errorType == ErrorType.SwitchConfigFailed) {
140             SwitchConfigErrorNotificationBuilder builder = new SwitchConfigErrorNotificationBuilder();
141             builder.setTransactionId(txnId);
142             builder.setType(errorType);
143             builder.setCode(message.getCode());
144             builder.setNode(node);
145             if (message.getData() != null) {
146                 builder.setData(new String(message.getData()));
147             }
148             outErrorMessage = builder.build();
149         } else if (errorType == ErrorType.RoleRequestFailed) {
150             RoleRequestErrorNotificationBuilder builder = new RoleRequestErrorNotificationBuilder();
151             builder.setTransactionId(txnId);
152             builder.setType(errorType);
153             builder.setCode(message.getCode());
154             builder.setNode(node);
155             if (message.getData() != null) {
156                 builder.setData(new String(message.getData()));
157             }
158             outErrorMessage = builder.build();
159         } else if (errorType == ErrorType.MeterModFailed) {
160             MeterModErrorNotificationBuilder builder = new MeterModErrorNotificationBuilder();
161             builder.setTransactionId(txnId);
162             builder.setType(errorType);
163             builder.setCode(message.getCode());
164             builder.setNode(node);
165             if (message.getData() != null) {
166                 builder.setData(new String(message.getData()));
167             }
168             outErrorMessage = builder.build();
169         } else if (errorType == ErrorType.TableModFailed) {
170             TableModErrorNotificationBuilder builder = new TableModErrorNotificationBuilder();
171             builder.setTransactionId(txnId);
172             builder.setType(errorType);
173             builder.setCode(message.getCode());
174             builder.setNode(node);
175             if (message.getData() != null) {
176                 builder.setData(new String(message.getData()));
177             }
178             outErrorMessage = builder.build();
179         } else if (errorType == ErrorType.TableFeaturesFailed) {
180             TableFeaturesErrorNotificationBuilder builder = new TableFeaturesErrorNotificationBuilder();
181             builder.setTransactionId(txnId);
182             builder.setType(errorType);
183             builder.setCode(message.getCode());
184             builder.setNode(node);
185             if (message.getData() != null) {
186                 builder.setData(new String(message.getData()));
187             }
188             outErrorMessage = builder.build();
189         } else if (errorType == ErrorType.Experimenter) {
190             ExperimenterErrorNotificationBuilder builder = new ExperimenterErrorNotificationBuilder();
191             builder.setTransactionId(txnId);
192             builder.setType(errorType);
193             builder.setCode(message.getCode());
194             builder.setNode(node);
195             if (message.getData() != null) {
196                 builder.setData(new String(message.getData()));
197             }
198             outErrorMessage = builder.build();
199         }
200
201         return outErrorMessage;
202     }
203
204 }