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