Bug-731: PCEPErrors enum with error-type and error-value 70/9770/2
authorMilos Fabian <milfabia@cisco.com>
Thu, 7 Aug 2014 08:17:16 +0000 (10:17 +0200)
committerMilos Fabian <milfabia@cisco.com>
Fri, 8 Aug 2014 07:51:26 +0000 (09:51 +0200)
-enum backed with inverse mapping - look-up enum for type and value
-deleted PCEPErrorMapping class - got rid of Sonar "Magic Number" warnings
-AbstractMessageParser - merge two createErrorMsg methods to one

Change-Id: I94a688427ae606eecdbafffa09d29e364f183526
Signed-off-by: Milos Fabian <milfabia@cisco.com>
21 files changed:
pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCReplyMessageParser.java
pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCReportMessageParser.java
pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCRequestMessageParser.java
pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCUpdateRequestMessageParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07ErrorMessageParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCReportMessageParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCUpdateRequestMessageParser.java
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/Util.java
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPErrorMessageParser.java
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPNotificationMessageParser.java
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPReplyMessageParser.java
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPRequestMessageParser.java
pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing02/SrPcRepMessageParser.java
pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing02/SrPcRptMessageParser.java
pcep/segment-routing/src/main/java/org/opendaylight/protocol/pcep/segment/routing02/SrPcUpdMessageParser.java
pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/AbstractMessageParser.java
pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPErrorMapping.java [deleted file]
pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPErrors.java
pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/UnknownObject.java
pcep/spi/src/test/java/org/opendaylight/protocol/pcep/spi/APITest.java
pcep/spi/src/test/java/org/opendaylight/protocol/pcep/spi/AbstractMessageParserTest.java

index 993f5fea1eb76ae66f3db24fa69a97f322f14ea2..e1c327ae3ae68e53623f7502da12c9129b212d1c 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.protocol.pcep.ietf.stateful02;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import io.netty.buffer.ByteBuf;
@@ -112,7 +113,7 @@ public final class Stateful02PCReplyMessageParser extends PCEPReplyMessageParser
     @Override
     protected Replies getValidReply(final List<Object> objects, final List<Message> errors) {
         if (!(objects.get(0) instanceof Rp)) {
-            errors.add(createErrorMsg(PCEPErrors.RP_MISSING));
+            errors.add(createErrorMsg(PCEPErrors.RP_MISSING, Optional.<Rp>absent()));
             return null;
         }
         final Rp rp = (Rp) objects.get(0);
index 74a15c7a9e1038c298fd3feed744998e21eacc40..1b7b2bef08e4410ea582d9764dd3ab6d4f306c00 100644 (file)
@@ -7,14 +7,12 @@
  */
 package org.opendaylight.protocol.pcep.ietf.stateful02;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
-
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-
 import java.util.List;
-
 import org.opendaylight.protocol.pcep.spi.AbstractMessageParser;
 import org.opendaylight.protocol.pcep.spi.MessageUtil;
 import org.opendaylight.protocol.pcep.spi.ObjectRegistry;
@@ -37,6 +35,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.MetricsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.metric.object.Metric;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Rp;
 
 /**
  * Parser for {@link Pcrpt}
@@ -107,7 +106,7 @@ public final class Stateful02PCReportMessageParser extends AbstractMessageParser
             builder.setLsp((Lsp) objects.get(0));
             objects.remove(0);
         } else {
-            errors.add(createErrorMsg(PCEPErrors.LSP_MISSING));
+            errors.add(createErrorMsg(PCEPErrors.LSP_MISSING, Optional.<Rp>absent()));
             return null;
         }
         if (!objects.isEmpty()) {
index 7003ada7be2fe33cbe75a3650b66e744558b505c..17199b34a9664f877605ee65e1687f4525e51d76 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.protocol.pcep.ietf.stateful02;
 
+import com.google.common.base.Optional;
 import com.google.common.collect.Lists;
 import io.netty.buffer.ByteBuf;
 import java.util.List;
@@ -177,7 +178,7 @@ public final class Stateful02PCRequestMessageParser extends PCEPRequestMessagePa
                 if (obj instanceof ClassType) {
                     final ClassType classType = (ClassType) obj;
                     if (!classType.isProcessingRule()) {
-                        errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, rp));
+                        errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, Optional.of(rp)));
                     } else {
                         builder.setClassType(classType);
                     }
@@ -201,7 +202,7 @@ public final class Stateful02PCRequestMessageParser extends PCEPRequestMessagePa
                 && builder.getBandwidth() != null
                 && builder.getReportedRoute().getBandwidth().getBandwidth() != new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth(new byte[] { 0 })
                 && builder.getReportedRoute().getRro() == null) {
-            errors.add(createErrorMsg(PCEPErrors.RRO_MISSING, rp));
+            errors.add(createErrorMsg(PCEPErrors.RRO_MISSING, Optional.of(rp)));
             return null;
         }
         return new SegmentComputationBuilder().setP2p(builder.build()).build();
index 04e2e33df2b5545e708072e7dd6e7da4488156d2..2ac1c2e8717905abeeba2ba9c17d094f9adb3ba7 100644 (file)
@@ -7,14 +7,12 @@
  */
 package org.opendaylight.protocol.pcep.ietf.stateful02;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
-
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-
 import java.util.List;
-
 import org.opendaylight.protocol.pcep.spi.AbstractMessageParser;
 import org.opendaylight.protocol.pcep.spi.MessageUtil;
 import org.opendaylight.protocol.pcep.spi.ObjectRegistry;
@@ -37,6 +35,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.MetricsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.metric.object.Metric;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Rp;
 
 /**
  * Parser for {@link Pcupd}
@@ -108,7 +107,7 @@ public final class Stateful02PCUpdateRequestMessageParser extends AbstractMessag
             builder.setLsp((Lsp) objects.get(0));
             objects.remove(0);
         } else {
-            errors.add(createErrorMsg(PCEPErrors.LSP_MISSING));
+            errors.add(createErrorMsg(PCEPErrors.LSP_MISSING, Optional.<Rp>absent()));
             return null;
         }
         if (!objects.isEmpty()) {
@@ -117,7 +116,7 @@ public final class Stateful02PCUpdateRequestMessageParser extends AbstractMessag
                 pBuilder.setEro((Ero) objects.get(0));
                 objects.remove(0);
             } else {
-                errors.add(createErrorMsg(PCEPErrors.ERO_MISSING));
+                errors.add(createErrorMsg(PCEPErrors.ERO_MISSING, Optional.<Rp>absent()));
                 return null;
             }
             parsePath(objects, pBuilder);
index 41a2a4df2f0c93cad1ae321111d65200806eff74..0ce108f0e541ceebebd9ce4288cbc060c8331621 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.protocol.pcep.ietf.stateful07;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
@@ -109,7 +110,7 @@ public final class Stateful07ErrorMessageParser extends PCEPErrorMessageParser {
         } else if (obj instanceof Rp) {
             final Rp o = (Rp) obj;
             if (o.isProcessingRule()) {
-                errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET));
+                errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, Optional.<Rp>absent()));
                 return null;
             }
             requestParameters.add(new RpsBuilder().setRp(o).build());
index 6849dee2c1eb7f07bd98c1338e6d9cfa05152d10..3b75c77a29d0ce5120c9adad986526ef708a0322 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.protocol.pcep.ietf.stateful07;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import io.netty.buffer.ByteBuf;
@@ -36,6 +37,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.metric.object.Metric;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.Rro;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Rp;
 
 /**
  * Parser for {@link Pcrpt}
@@ -119,7 +121,7 @@ public class Stateful07PCReportMessageParser extends AbstractMessageParser {
             builder.setLsp((Lsp) objects.get(0));
             objects.remove(0);
         } else {
-            errors.add(createErrorMsg(PCEPErrors.LSP_MISSING));
+            errors.add(createErrorMsg(PCEPErrors.LSP_MISSING, Optional.<Rp>absent()));
             isValid = false;
         }
         if (!objects.isEmpty()) {
@@ -128,7 +130,7 @@ public class Stateful07PCReportMessageParser extends AbstractMessageParser {
                 pBuilder.setEro((Ero) objects.get(0));
                 objects.remove(0);
             } else {
-                errors.add(createErrorMsg(PCEPErrors.ERO_MISSING));
+                errors.add(createErrorMsg(PCEPErrors.ERO_MISSING, Optional.<Rp>absent()));
                 isValid = false;
             }
             parsePath(objects, pBuilder);
index b4e4b7ec696536b5d50e08b025bf71cab7afc1a5..581e28781c160f781c20fc49d8489ce0ffa38fb5 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.protocol.pcep.ietf.stateful07;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import io.netty.buffer.ByteBuf;
@@ -35,6 +36,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.MetricsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.metric.object.Metric;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Rp;
 
 /**
  * Parser for {@link Pcupd}
@@ -112,14 +114,14 @@ public class Stateful07PCUpdateRequestMessageParser extends AbstractMessageParse
             builder.setSrp((Srp) objects.get(0));
             objects.remove(0);
         } else {
-            errors.add(createErrorMsg(PCEPErrors.SRP_MISSING));
+            errors.add(createErrorMsg(PCEPErrors.SRP_MISSING, Optional.<Rp>absent()));
             isValid = false;
         }
         if (objects.get(0) instanceof Lsp) {
             builder.setLsp((Lsp) objects.get(0));
             objects.remove(0);
         } else {
-            errors.add(createErrorMsg(PCEPErrors.LSP_MISSING));
+            errors.add(createErrorMsg(PCEPErrors.LSP_MISSING, Optional.<Rp>absent()));
             isValid = false;
         }
         if (!objects.isEmpty()) {
@@ -128,7 +130,7 @@ public class Stateful07PCUpdateRequestMessageParser extends AbstractMessageParse
                 pBuilder.setEro((Ero) objects.get(0));
                 objects.remove(0);
             } else {
-                errors.add(createErrorMsg(PCEPErrors.ERO_MISSING));
+                errors.add(createErrorMsg(PCEPErrors.ERO_MISSING, Optional.<Rp>absent()));
                 isValid = false;
             }
             parsePath(objects, pBuilder);
index 28ba9322308c9286678daa7958c93b5b5f4f5817..1221f68f4e08777946e376a4ebb18c8c693d7317 100644 (file)
@@ -8,9 +8,6 @@
 package org.opendaylight.protocol.pcep.impl;
 
 import java.util.Arrays;
-
-import org.opendaylight.protocol.pcep.spi.PCEPErrorMapping;
-import org.opendaylight.protocol.pcep.spi.PCEPErrorMapping.PCEPErrorIdentifier;
 import org.opendaylight.protocol.pcep.spi.PCEPErrors;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcerrBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
@@ -33,9 +30,7 @@ public final class Util {
 
     public static Message createErrorMessage(final PCEPErrors e, final Open t) {
         final PcerrBuilder errMessageBuilder = new PcerrBuilder();
-        final PCEPErrorMapping mapping = PCEPErrorMapping.getInstance();
-        final PCEPErrorIdentifier id = mapping.getFromErrorsEnum(e);
-        final ErrorObject err = new ErrorObjectBuilder().setType(id.getType()).setValue(id.getValue()).build();
+        final ErrorObject err = new ErrorObjectBuilder().setType(e.getErrorType()).setValue(e.getErrorValue()).build();
         if (t == null) {
             return errMessageBuilder.setPcerrMessage(
                     new PcerrMessageBuilder().setErrors(Arrays.asList(new ErrorsBuilder().setErrorObject(err).build())).build()).build();
index 76c8270fbddd78a1db5c58fc4411e8dc34f2b205..bb465e27d370121842160a52d28f2b1cf4bda1af 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.protocol.pcep.impl.message;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
@@ -98,7 +99,7 @@ public class PCEPErrorMessageParser extends AbstractMessageParser {
         } else if (obj instanceof Rp) {
             final Rp o = (Rp) obj;
             if (o.isProcessingRule()) {
-                errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET));
+                errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, Optional.<Rp>absent()));
                 return null;
             }
             requestParameters.add(new RpsBuilder().setRp(o).build());
index 19447a3b9c583a5f0c7653b68f51f3c732dccc59..401f10cb4875e9c2d0e3af6cc99ea50d1d4ae2d2 100644 (file)
@@ -7,14 +7,12 @@
  */
 package org.opendaylight.protocol.pcep.impl.message;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
-
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-
 import java.util.List;
-
 import org.opendaylight.protocol.pcep.spi.AbstractMessageParser;
 import org.opendaylight.protocol.pcep.spi.MessageUtil;
 import org.opendaylight.protocol.pcep.spi.ObjectRegistry;
@@ -110,7 +108,7 @@ public class PCEPNotificationMessageParser extends AbstractMessageParser {
                 if (obj instanceof Rp) {
                     final Rp rp = (Rp) obj;
                     if (rp.isProcessingRule()) {
-                        errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET));
+                        errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, Optional.<Rp>absent()));
                         return null;
                     }
                     requestParameters.add(new RpsBuilder().setRp(rp).build());
index 93a7fb029193c40d2fa54603ed481657f9b65483..a1a15cba59529cba961c585ecfc0f2878f49f935 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.protocol.pcep.impl.message;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import io.netty.buffer.ByteBuf;
@@ -144,7 +145,7 @@ public class PCEPReplyMessageParser extends AbstractMessageParser {
 
     protected Replies getValidReply(final List<Object> objects, final List<Message> errors) {
         if (!(objects.get(0) instanceof Rp)) {
-            errors.add(createErrorMsg(PCEPErrors.RP_MISSING));
+            errors.add(createErrorMsg(PCEPErrors.RP_MISSING, Optional.<Rp>absent()));
             return null;
         }
         final Rp rp = (Rp) objects.get(0);
index 2572cb3ef26995e0359c5071c83df13585887204..d1b87f855dde4916e055ffef656650bc20c9f0fd 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.protocol.pcep.impl.message;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import io.netty.buffer.ByteBuf;
@@ -169,13 +170,13 @@ public class PCEPRequestMessageParser extends AbstractMessageParser {
                 rpObj = (Rp) objects.get(0);
                 objects.remove(0);
                 if (!rpObj.isProcessingRule()) {
-                    errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET));
+                    errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, Optional.<Rp>absent()));
                 } else {
                     rBuilder.setRp(rpObj);
                 }
             } else {
                 // if RP obj is missing return error only
-                errors.add(createErrorMsg(PCEPErrors.RP_MISSING));
+                errors.add(createErrorMsg(PCEPErrors.RP_MISSING, Optional.<Rp>absent()));
                 return null;
             }
             final List<VendorInformationObject> vendorInfo = addVendorInformationObjects(objects);
@@ -196,12 +197,12 @@ public class PCEPRequestMessageParser extends AbstractMessageParser {
                 final EndpointsObj ep = (EndpointsObj) objects.get(0);
                 objects.remove(0);
                 if (!ep.isProcessingRule()) {
-                    errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, rpObj));
+                    errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, Optional.of(rpObj)));
                 } else {
                     p2pBuilder.setEndpointsObj(ep);
                 }
             } else {
-                errors.add(createErrorMsg(PCEPErrors.END_POINTS_MISSING, rpObj));
+                errors.add(createErrorMsg(PCEPErrors.END_POINTS_MISSING, Optional.of(rpObj)));
                 return null;
             }
             // p2p
@@ -313,7 +314,7 @@ public class PCEPRequestMessageParser extends AbstractMessageParser {
                 if (obj instanceof ClassType) {
                     final ClassType classType = (ClassType) obj;
                     if (!classType.isProcessingRule()) {
-                        errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, rp));
+                        errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, Optional.of(rp)));
                     } else {
                         builder.setClassType(classType);
                     }
@@ -341,7 +342,7 @@ public class PCEPRequestMessageParser extends AbstractMessageParser {
                 && builder.getReportedRoute().getBandwidth().getBandwidth() !=
                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth(new byte[] { 0 })
                 && builder.getReportedRoute().getRro() == null) {
-            errors.add(createErrorMsg(PCEPErrors.RRO_MISSING, rp));
+            errors.add(createErrorMsg(PCEPErrors.RRO_MISSING, Optional.of(rp)));
             return null;
         }
         return new SegmentComputationBuilder().setP2p(builder.build()).build();
index 29db7de09e9ef6fc87c17906163ab830a965ddc5..144c1029dac51744d4a77342b421152490a00af0 100644 (file)
@@ -8,6 +8,7 @@
 
 package org.opendaylight.protocol.pcep.segment.routing02;
 
+import com.google.common.base.Optional;
 import com.google.common.collect.Lists;
 import io.netty.buffer.ByteBuf;
 import java.util.List;
@@ -56,7 +57,7 @@ public class SrPcRepMessageParser extends PCEPReplyMessageParser {
     @Override
     protected Replies getValidReply(List<Object> objects, List<Message> errors) {
         if (!(objects.get(0) instanceof Rp)) {
-            errors.add(createErrorMsg(PCEPErrors.RP_MISSING));
+            errors.add(createErrorMsg(PCEPErrors.RP_MISSING, Optional.<Rp>absent()));
             return null;
         }
         final Rp rp = (Rp) objects.get(0);
@@ -73,7 +74,7 @@ public class SrPcRepMessageParser extends PCEPReplyMessageParser {
                         final Ero ero = (Ero) object;
                         final PCEPErrors error = SrEroUtil.validateSrEroSubobjects(ero);
                         if (error != null) {
-                            errors.add(createErrorMsg(error));
+                            errors.add(createErrorMsg(error, Optional.<Rp>absent()));
                             return null;
                         } else {
                             paths.add(pBuilder.setEro(ero).build());
index fdbf66009f32491c38484fe324c6cbedebe30aef..5e057e6eaf561ddb5e4e7d33814364cbf0455e77 100644 (file)
@@ -8,6 +8,7 @@
 
 package org.opendaylight.protocol.pcep.segment.routing02;
 
+import com.google.common.base.Optional;
 import io.netty.buffer.ByteBuf;
 import java.util.List;
 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07PCReportMessageParser;
@@ -22,6 +23,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.lsp
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.Ero;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Rp;
 
 public class SrPcRptMessageParser extends Stateful07PCReportMessageParser {
 
@@ -46,7 +48,7 @@ public class SrPcRptMessageParser extends Stateful07PCReportMessageParser {
     @Override
     protected Reports getValidReports(List<Object> objects, List<Message> errors) {
         if (!(objects.get(0) instanceof Srp)) {
-            errors.add(createErrorMsg(PCEPErrors.SRP_MISSING));
+            errors.add(createErrorMsg(PCEPErrors.SRP_MISSING, Optional.<Rp>absent()));
         }
         final Srp srp = (Srp) objects.get(0);
         if (isSegmentRoutingPath(srp)) {
@@ -58,7 +60,7 @@ public class SrPcRptMessageParser extends Stateful07PCReportMessageParser {
                 builder.setLsp((Lsp) objects.get(0));
                 objects.remove(0);
             } else {
-                errors.add(createErrorMsg(PCEPErrors.LSP_MISSING));
+                errors.add(createErrorMsg(PCEPErrors.LSP_MISSING, Optional.<Rp>absent()));
                 isValid = false;
             }
 
@@ -67,14 +69,14 @@ public class SrPcRptMessageParser extends Stateful07PCReportMessageParser {
                 final Ero ero = (Ero) obj;
                 final PCEPErrors error = SrEroUtil.validateSrEroSubobjects(ero);
                 if (error != null) {
-                    errors.add(createErrorMsg(error));
+                    errors.add(createErrorMsg(error, Optional.<Rp>absent()));
                     isValid = false;
                 } else {
                     builder.setPath(new PathBuilder().setEro(ero).build());
                 }
                 objects.remove(0);
             } else {
-                errors.add(createErrorMsg(PCEPErrors.ERO_MISSING));
+                errors.add(createErrorMsg(PCEPErrors.ERO_MISSING, Optional.<Rp>absent()));
                 isValid = false;
             }
             if (isValid) {
index b6aa0548d03b4be4080f83ee6b24ca03f9ec06fb..40be76fed309963c03ff6008a85071a890ed914c 100644 (file)
@@ -8,6 +8,7 @@
 
 package org.opendaylight.protocol.pcep.segment.routing02;
 
+import com.google.common.base.Optional;
 import io.netty.buffer.ByteBuf;
 import java.util.List;
 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07PCUpdateRequestMessageParser;
@@ -23,6 +24,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.lsp
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.Ero;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Rp;
 
 public class SrPcUpdMessageParser extends Stateful07PCUpdateRequestMessageParser {
 
@@ -58,7 +60,7 @@ public class SrPcUpdMessageParser extends Stateful07PCUpdateRequestMessageParser
                 builder.setLsp((Lsp) objects.get(0));
                 objects.remove(0);
             } else {
-                errors.add(createErrorMsg(PCEPErrors.LSP_MISSING));
+                errors.add(createErrorMsg(PCEPErrors.LSP_MISSING, Optional.<Rp>absent()));
                 isValid = false;
             }
 
@@ -67,14 +69,14 @@ public class SrPcUpdMessageParser extends Stateful07PCUpdateRequestMessageParser
                 final Ero ero = (Ero) obj;
                 final PCEPErrors error = SrEroUtil.validateSrEroSubobjects(ero);
                 if (error != null) {
-                    errors.add(createErrorMsg(error));
+                    errors.add(createErrorMsg(error, Optional.<Rp>absent()));
                     isValid = false;
                 } else {
                     builder.setPath(new PathBuilder().setEro(ero).build());
                     objects.remove(0);
                 }
             } else {
-                errors.add(createErrorMsg(PCEPErrors.ERO_MISSING));
+                errors.add(createErrorMsg(PCEPErrors.ERO_MISSING, Optional.<Rp>absent()));
                 isValid = false;
             }
             if (isValid) {
index 1ae5cd57e1bedcd7093ff61a528241ac61acf489..66c9489f0f074e8085297cc5a4d87c0d1b9f48ba 100644 (file)
@@ -11,14 +11,12 @@ import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import com.google.common.primitives.UnsignedBytes;
-
 import io.netty.buffer.ByteBuf;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.BitSet;
+import java.util.Collections;
 import java.util.List;
-
 import org.opendaylight.protocol.util.ByteArray;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.iana.rev130816.EnterpriseNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcerrBuilder;
@@ -117,24 +115,16 @@ public abstract class AbstractMessageParser implements MessageParser, MessageSer
         return objs;
     }
 
-    public static Message createErrorMsg(final PCEPErrors e) {
-        final PCEPErrorMapping maping = PCEPErrorMapping.getInstance();
-        return new PcerrBuilder().setPcerrMessage(
-                new PcerrMessageBuilder().setErrors(
-                        Arrays.asList(new ErrorsBuilder().setErrorObject(
-                                new ErrorObjectBuilder().setType(maping.getFromErrorsEnum(e).getType()).setValue(
-                                        maping.getFromErrorsEnum(e).getValue()).build()).build())).build()).build();
-    }
-
-    public static Message createErrorMsg(final PCEPErrors e, final Rp rp) {
-        final PCEPErrorMapping maping = PCEPErrorMapping.getInstance();
+    public static Message createErrorMsg(final PCEPErrors e, final Optional<Rp> rp) {
+        final PcerrMessageBuilder msgBuilder = new PcerrMessageBuilder();
+        if (rp.isPresent()) {
+            new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(Collections.singletonList(new RpsBuilder().setRp(
+                    rp.get()).build())).build()).build();
+        }
         return new PcerrBuilder().setPcerrMessage(
-                new PcerrMessageBuilder().setErrorType(
-                        new RequestCaseBuilder().setRequest(
-                                new RequestBuilder().setRps(Lists.newArrayList(new RpsBuilder().setRp(rp).build())).build()).build()).setErrors(
-                                        Arrays.asList(new ErrorsBuilder().setErrorObject(
-                                                new ErrorObjectBuilder().setType(maping.getFromErrorsEnum(e).getType()).setValue(
-                                                        maping.getFromErrorsEnum(e).getValue()).build()).build())).build()).build();
+                msgBuilder.setErrors(Arrays.asList(new ErrorsBuilder().setErrorObject(
+                        new ErrorObjectBuilder().setType(e.getErrorType()).setValue(
+                                e.getErrorValue()).build()).build())).build()).build();
     }
 
     protected abstract Message validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException;
diff --git a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPErrorMapping.java b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPErrorMapping.java
deleted file mode 100644 (file)
index d1d82e7..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.protocol.pcep.spi;
-
-import com.google.common.annotations.VisibleForTesting;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Bidirectional mapping of {@link org.opendaylight.protocol.pcep.spi.PCEPErrors PCEPErrors} and
- * {@link org.opendaylight.protocol.pcep.impl.object.PCEPErrorObjectParser.PCEPErrorIdentifier ErrorIdentifier}
- */
-public final class PCEPErrorMapping {
-
-    private static final Logger LOG = LoggerFactory.getLogger(PCEPErrorMapping.class);
-
-    /**
-     * Caret for combination of Error-type and Error-value
-     */
-    public static final class PCEPErrorIdentifier {
-        private final short type;
-        private final short value;
-
-        @VisibleForTesting
-        PCEPErrorIdentifier(final short type, final short value) {
-            this.type = type;
-            this.value = value;
-        }
-
-        public short getType() {
-            return this.type;
-        }
-
-        public short getValue() {
-            return this.value;
-        }
-
-        @Override
-        public int hashCode() {
-            final int prime = 31;
-            int result = 1;
-            result = prime * result + this.type;
-            result = prime * result + this.value;
-            return result;
-        }
-
-        @Override
-        public boolean equals(final java.lang.Object obj) {
-            if (this == obj) {
-                return true;
-            }
-            if (obj == null) {
-                return false;
-            }
-            if (this.getClass() != obj.getClass()) {
-                return false;
-            }
-            final PCEPErrorIdentifier other = (PCEPErrorIdentifier) obj;
-            if (this.type != other.type) {
-                return false;
-            }
-            if (this.value != other.value) {
-                return false;
-            }
-            return true;
-        }
-
-        @Override
-        public String toString() {
-            return "type " + this.type + " value " + this.value;
-        }
-    }
-
-    private static final PCEPErrorMapping INSTANCE = new PCEPErrorMapping();
-
-    private final Map<PCEPErrors, PCEPErrorIdentifier> errorsMap = new HashMap<PCEPErrors, PCEPErrorIdentifier>();
-    private final Map<PCEPErrorIdentifier, PCEPErrors> errorIdsMap = new HashMap<PCEPErrorIdentifier, PCEPErrors>();
-
-    private PCEPErrorMapping() {
-        this.fillIn();
-    }
-
-    private void fillIn() {
-        this.fillIn(new PCEPErrorIdentifier((short) 1, (short) 1), PCEPErrors.NON_OR_INVALID_OPEN_MSG);
-        this.fillIn(new PCEPErrorIdentifier((short) 1, (short) 2), PCEPErrors.NO_OPEN_BEFORE_EXP_OPENWAIT);
-        this.fillIn(new PCEPErrorIdentifier((short) 1, (short) 3), PCEPErrors.NON_ACC_NON_NEG_SESSION_CHAR);
-        this.fillIn(new PCEPErrorIdentifier((short) 1, (short) 4), PCEPErrors.NON_ACC_NEG_SESSION_CHAR);
-        this.fillIn(new PCEPErrorIdentifier((short) 1, (short) 5), PCEPErrors.SECOND_OPEN_MSG);
-        this.fillIn(new PCEPErrorIdentifier((short) 1, (short) 6), PCEPErrors.PCERR_NON_ACC_SESSION_CHAR);
-        this.fillIn(new PCEPErrorIdentifier((short) 1, (short) 7), PCEPErrors.NO_MSG_BEFORE_EXP_KEEPWAIT);
-        this.fillIn(new PCEPErrorIdentifier((short) 1, (short) 8), PCEPErrors.PCEP_VERSION_NOT_SUPPORTED);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 2, (short) 0), PCEPErrors.CAPABILITY_NOT_SUPPORTED);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 3, (short) 1), PCEPErrors.UNRECOGNIZED_OBJ_CLASS);
-        this.fillIn(new PCEPErrorIdentifier((short) 3, (short) 2), PCEPErrors.UNRECOGNIZED_OBJ_TYPE);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 4, (short) 1), PCEPErrors.NOT_SUPPORTED_OBJ_CLASS);
-        this.fillIn(new PCEPErrorIdentifier((short) 4, (short) 2), PCEPErrors.NOT_SUPPORTED_OBJ_TYPE);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 5, (short) 1), PCEPErrors.C_BIT_SET);
-        this.fillIn(new PCEPErrorIdentifier((short) 5, (short) 2), PCEPErrors.O_BIT_SET);
-        this.fillIn(new PCEPErrorIdentifier((short) 5, (short) 3), PCEPErrors.OF_NOT_ALLOWED);
-        this.fillIn(new PCEPErrorIdentifier((short) 5, (short) 4), PCEPErrors.OF_BIT_SET);
-        this.fillIn(new PCEPErrorIdentifier((short) 5, (short) 5), PCEPErrors.GCO_NOT_ALLOWED);
-        this.fillIn(new PCEPErrorIdentifier((short) 5, (short) 7), PCEPErrors.P2MP_COMPUTATION_NOT_ALLOWED);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 1), PCEPErrors.RP_MISSING);
-        this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 2), PCEPErrors.RRO_MISSING);
-        this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 3), PCEPErrors.END_POINTS_MISSING);
-        this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 8), PCEPErrors.LSP_MISSING);
-        this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 9), PCEPErrors.ERO_MISSING);
-        this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 10), PCEPErrors.SRP_MISSING);
-        this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 11), PCEPErrors.LSP_IDENTIFIERS_TLV_MISSING);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 13), PCEPErrors.LSP_CLEANUP_TLV_MISSING);
-        this.fillIn(new PCEPErrorIdentifier((short) 6, (short) 14), PCEPErrors.SYMBOLIC_PATH_NAME_MISSING);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 7, (short) 0), PCEPErrors.SYNC_PATH_COMP_REQ_MISSING);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 8, (short) 0), PCEPErrors.UNKNOWN_REQ_REF);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 9, (short) 0), PCEPErrors.ATTEMPT_2ND_SESSION);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 10, (short) 1), PCEPErrors.P_FLAG_NOT_SET);
-
-        /* Segment Routing errors
-            https://tools.ietf.org/html/draft-sivabalan-pce-segment-routing-02#section-9.2 */
-        this.fillIn(new PCEPErrorIdentifier((short) 10, (short) 2), PCEPErrors.BAD_LABEL_VALUE);
-        this.fillIn(new PCEPErrorIdentifier((short) 10, (short) 5), PCEPErrors.NON_IDENTICAL_ERO_SUBOBJECTS);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 12, (short) 1), PCEPErrors.UNSUPPORTED_CT);
-        this.fillIn(new PCEPErrorIdentifier((short) 12, (short) 2), PCEPErrors.INVALID_CT);
-        this.fillIn(new PCEPErrorIdentifier((short) 12, (short) 3), PCEPErrors.CT_AND_SETUP_PRIORITY_DO_NOT_FORM_TE_CLASS);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 15, (short) 1), PCEPErrors.INSUFFICIENT_MEMORY);
-        this.fillIn(new PCEPErrorIdentifier((short) 15, (short) 2), PCEPErrors.GCO_NOT_SUPPORTED);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 16, (short) 1), PCEPErrors.CANNOT_SATISFY_P2MP_REQUEST_DUE_TO_INSUFFISIENT_MEMMORY);
-        this.fillIn(new PCEPErrorIdentifier((short) 16, (short) 2), PCEPErrors.NOT_CAPPABLE_P2MP_COMPUTATION);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 17, (short) 1), PCEPErrors.P2MP_NOT_CAPPABLE_SATISFY_REQ_DUE_LT2);
-        this.fillIn(new PCEPErrorIdentifier((short) 17, (short) 2), PCEPErrors.P2MP_NOT_CAPPABLE_SATISFY_REQ_DUE_LT3);
-        this.fillIn(new PCEPErrorIdentifier((short) 17, (short) 3), PCEPErrors.P2MP_NOT_CAPPABLE_SATISFY_REQ_DUE_LT4);
-        this.fillIn(new PCEPErrorIdentifier((short) 17, (short) 4), PCEPErrors.P2MP_NOT_CAPPABLE_SATISFY_REQ_DUE_INCONSISTENT_EP);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 18, (short) 1), PCEPErrors.P2MP_FRAGMENTATION_FAILRUE);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 1), PCEPErrors.UPDATE_REQ_FOR_NON_LSP);
-        this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 2), PCEPErrors.UPDATE_REQ_FOR_NO_STATEFUL);
-        this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 3), PCEPErrors.UNKNOWN_PLSP_ID);
-        this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 4), PCEPErrors.RESOURCE_LIMIT_EXCEEDED);
-        this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 6), PCEPErrors.LSP_LIMIT_EXCEEDED);
-        this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 7), PCEPErrors.DELEGATION_NON_REVOKABLE);
-        this.fillIn(new PCEPErrorIdentifier((short) 19, (short) 8), PCEPErrors.NON_ZERO_PLSPID);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 20, (short) 1), PCEPErrors.CANNOT_PROCESS_STATE_REPORT);
-        this.fillIn(new PCEPErrorIdentifier((short) 20, (short) 2), PCEPErrors.LSP_DB_VERSION_MISMATCH);
-        this.fillIn(new PCEPErrorIdentifier((short) 20, (short) 3), PCEPErrors.DB_VERSION_TLV_MISSING_WHEN_SYNC_ALLOWED);
-        this.fillIn(new PCEPErrorIdentifier((short) 20, (short) 5), PCEPErrors.CANNOT_COMPLETE_STATE_SYNC);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 23, (short) 1), PCEPErrors.USED_SYMBOLIC_PATH_NAME);
-
-        this.fillIn(new PCEPErrorIdentifier((short) 24, (short) 1), PCEPErrors.LSP_UNACC_INST_PARAMS);
-        this.fillIn(new PCEPErrorIdentifier((short) 24, (short) 2), PCEPErrors.LSP_INTERNAL_ERROR);
-        this.fillIn(new PCEPErrorIdentifier((short) 24, (short) 3), PCEPErrors.LSP_RSVP_ERROR);
-    }
-
-    private void fillIn(final PCEPErrorIdentifier identifier, final PCEPErrors error) {
-        this.errorsMap.put(error, identifier);
-        this.errorIdsMap.put(identifier, error);
-    }
-
-    public PCEPErrorIdentifier getFromErrorsEnum(final PCEPErrors error) {
-        final PCEPErrorIdentifier ei = this.errorsMap.get(error);
-        if (ei == null) {
-            LOG.debug("Unknown PCEPErrors type: {}.", error);
-            throw new NoSuchElementException("Unknown PCEPErrors type: " + error);
-        }
-        return ei;
-    }
-
-    public PCEPErrors getFromErrorIdentifier(final PCEPErrorIdentifier identifier) {
-        final PCEPErrors e = this.errorIdsMap.get(identifier);
-        if (e == null) {
-            LOG.debug("Unknown error type/value combination: {}.", identifier);
-            throw new NoSuchElementException("Unknown error type/value combination: " + identifier);
-        }
-        return e;
-    }
-
-    public static PCEPErrorMapping getInstance() {
-        return INSTANCE;
-    }
-}
index 2e6328c1702b9bbdbc0de1c7c3481fdaaa01e3ac..252399ac9a366a9fff73452e51fc2b36a362c44b 100644 (file)
@@ -7,6 +7,12 @@
  */
 package org.opendaylight.protocol.pcep.spi;
 
+import com.google.common.collect.Maps;
+import java.util.Map;
+
+
+
+
 /**
  * Possible errors listed in RFC5440, RFC 5455 and stateful draft.
  *
@@ -16,252 +22,339 @@ package org.opendaylight.protocol.pcep.spi;
  *      "http://www.ietf.org/id/draft-crabbe-pce-pce-initiated-lsp-00.txt#section-7.1" >PCEP-Error Object</a>
  */
 public enum PCEPErrors {
+
     /**
      * Reception of an invalid Open message or a non Open message.
      */
-    NON_OR_INVALID_OPEN_MSG,
+    NON_OR_INVALID_OPEN_MSG(1, 1),
     /**
      * No Open message received before the expiration of the OpenWait timer.
      */
-    NO_OPEN_BEFORE_EXP_OPENWAIT,
+    NO_OPEN_BEFORE_EXP_OPENWAIT(1, 2),
     /**
      * Unacceptable and non-negotiable session characteristics.
      */
-    NON_ACC_NON_NEG_SESSION_CHAR,
+    NON_ACC_NON_NEG_SESSION_CHAR(1, 3),
     /**
      * Unacceptable but negotiable session characteristics.
      */
-    NON_ACC_NEG_SESSION_CHAR,
+    NON_ACC_NEG_SESSION_CHAR(1, 4),
     /**
      * Reception of a second Open message with still unacceptable session characteristics.
      */
-    SECOND_OPEN_MSG,
+    SECOND_OPEN_MSG(1, 5),
     /**
      * Reception of a PCErr message proposing unacceptable session characteristics.
      */
-    PCERR_NON_ACC_SESSION_CHAR,
+    PCERR_NON_ACC_SESSION_CHAR(1, 6),
     /**
      * No Keepalive or PCErr message received before the expiration of the KeepWait timer.
      */
-    NO_MSG_BEFORE_EXP_KEEPWAIT,
+    NO_MSG_BEFORE_EXP_KEEPWAIT(1, 7),
     /**
      * Capability not supported.
      */
-    CAPABILITY_NOT_SUPPORTED,
+    CAPABILITY_NOT_SUPPORTED(2, 0),
     /**
      * PCEP version not supported.
      */
-    PCEP_VERSION_NOT_SUPPORTED,
+    PCEP_VERSION_NOT_SUPPORTED(1, 8),
     /**
      * Unrecognized object class.
      */
-    UNRECOGNIZED_OBJ_CLASS,
+    UNRECOGNIZED_OBJ_CLASS(3, 1),
     /**
      * Unrecognized object Type.
      */
-    UNRECOGNIZED_OBJ_TYPE,
+    UNRECOGNIZED_OBJ_TYPE(3, 2),
     /**
      * Not supported object class.
      */
-    NOT_SUPPORTED_OBJ_CLASS,
+    NOT_SUPPORTED_OBJ_CLASS(4, 1),
     /**
      * Not supported object Type.
      */
-    NOT_SUPPORTED_OBJ_TYPE,
+    NOT_SUPPORTED_OBJ_TYPE(4, 2),
     /**
      * C bit of the METRIC object set (request rejected).
      */
-    C_BIT_SET,
+    C_BIT_SET(5, 1),
     /**
      * O bit of the RP object cleared (request rejected).
      */
-    O_BIT_SET,
+    O_BIT_SET(5, 2),
     /**
      * Objective function not allowed (request rejected)
      */
-    OF_NOT_ALLOWED,
+    OF_NOT_ALLOWED(5, 3),
     /**
      * OF bit of the RP object set (request rejected)
      */
-    OF_BIT_SET,
+    OF_BIT_SET(5, 4),
     /**
      * Global concurrent optimization not allowed (GCO extension)
      */
-    GCO_NOT_ALLOWED,
+    GCO_NOT_ALLOWED(5, 5),
     /**
      * P2MP Path computation is not allowed
      */
-    P2MP_COMPUTATION_NOT_ALLOWED,
+    P2MP_COMPUTATION_NOT_ALLOWED(5, 7),
     /**
      * RP object missing
      */
-    RP_MISSING,
+    RP_MISSING(6, 1),
     /**
      * RRO missing for a reoptimization request (R bit of the RP object set).
      */
-    RRO_MISSING,
+    RRO_MISSING(6, 2),
     /**
      * END-POINTS object missing
      */
-    END_POINTS_MISSING,
+    END_POINTS_MISSING(6, 3),
     /**
      * LSP cleanup TLV missing
      */
-    LSP_CLEANUP_TLV_MISSING,
+    LSP_CLEANUP_TLV_MISSING(6, 13),
     /**
      * SYMBOLIC-PATH-NAME TLV missing
      */
-    SYMBOLIC_PATH_NAME_MISSING,
+    SYMBOLIC_PATH_NAME_MISSING(6, 14),
     /**
      * Synchronized path computation request missing.
      */
-    SYNC_PATH_COMP_REQ_MISSING,
+    SYNC_PATH_COMP_REQ_MISSING(7, 0),
     /**
      * Unknown request reference
      */
-    UNKNOWN_REQ_REF,
+    UNKNOWN_REQ_REF(8, 0),
     /**
      * Attempt to establish a second PCEP session.
      */
-    ATTEMPT_2ND_SESSION,
+    ATTEMPT_2ND_SESSION(9, 0),
     /**
      * LSP Object missing.
      */
-    LSP_MISSING,
+    LSP_MISSING(6, 8),
     /**
      * ERO Object missing for a path in an LSP Update Request where TE-LSP setup is requested.
      */
-    ERO_MISSING,
+    ERO_MISSING(6, 9),
     /**
      * Srp Object missing for a path in an LSP Update Request where TE-LSP setup is requested.
      */
-    SRP_MISSING,
+    SRP_MISSING(6, 10),
     /**
      * LSP-IDENTIFIERS TLV missing for a path in an LSP Update Request where TE-LSP setup is requested.
      */
-    LSP_IDENTIFIERS_TLV_MISSING,
+    LSP_IDENTIFIERS_TLV_MISSING(6, 11),
     /**
      * Reception of an object with P flag not set although the P flag must be set according to this specification.
      */
-    P_FLAG_NOT_SET,
+    P_FLAG_NOT_SET(10, 1),
     /**
      * Insufficient memory (GCO extension)
      */
-    INSUFFICIENT_MEMORY,
+    INSUFFICIENT_MEMORY(15, 1),
     /**
      * Global concurrent optimization not supported (GCO extension)
      */
-    GCO_NOT_SUPPORTED,
+    GCO_NOT_SUPPORTED(15, 2),
     /**
      * Diffserv-aware TE error: Unsupported Class-Type.
      */
-    UNSUPPORTED_CT,
+    UNSUPPORTED_CT(12, 1),
     /**
      * Diffserv-aware TE error: Invalid Class-Type.
      */
-    INVALID_CT,
+    INVALID_CT(12, 2),
     /**
      * Diffserv-aware TE error: Class-Type and setup priority do not form a configured TE-class.
      */
-    CT_AND_SETUP_PRIORITY_DO_NOT_FORM_TE_CLASS,
+    CT_AND_SETUP_PRIORITY_DO_NOT_FORM_TE_CLASS(12, 3),
 
     /**
      * The PCE cannot satisfy the request due to insufficient memory
      */
-    CANNOT_SATISFY_P2MP_REQUEST_DUE_TO_INSUFFISIENT_MEMMORY,
+    CANNOT_SATISFY_P2MP_REQUEST_DUE_TO_INSUFFISIENT_MEMMORY(16, 1),
     /**
      * The PCE is not capable of P2MP computation
      */
-    NOT_CAPPABLE_P2MP_COMPUTATION,
+    NOT_CAPPABLE_P2MP_COMPUTATION(16, 2),
     /**
      * The PCE is not capable to satisfy the request due to no END-POINTS with leaf type 2
      */
-    P2MP_NOT_CAPPABLE_SATISFY_REQ_DUE_LT2,
+    P2MP_NOT_CAPPABLE_SATISFY_REQ_DUE_LT2(17, 1),
     /**
      * The PCE is not capable to satisfy the request due to no END-POINTS with leaf type 3
      */
-    P2MP_NOT_CAPPABLE_SATISFY_REQ_DUE_LT3,
+    P2MP_NOT_CAPPABLE_SATISFY_REQ_DUE_LT3(17, 2),
     /**
      * The PCE is not capable to satisfy the request due to no END-POINTS with leaf type 4
      */
-    P2MP_NOT_CAPPABLE_SATISFY_REQ_DUE_LT4,
+    P2MP_NOT_CAPPABLE_SATISFY_REQ_DUE_LT4(17, 3),
     /**
      * The PCE is not capable to satisfy the request due to inconsistent END-POINTS
      */
-    P2MP_NOT_CAPPABLE_SATISFY_REQ_DUE_INCONSISTENT_EP,
+    P2MP_NOT_CAPPABLE_SATISFY_REQ_DUE_INCONSISTENT_EP(17, 4),
     /**
      * P2MP Fragmented request failure
      */
-    P2MP_FRAGMENTATION_FAILRUE,
+    P2MP_FRAGMENTATION_FAILRUE(18, 1),
     /**
      * Attempted LSP Update Request for a non- delegated LSP. The PCEP-ERROR Object is followed by the LSP Object that
      * identifies the LSP.
      */
-    UPDATE_REQ_FOR_NON_LSP,
+    UPDATE_REQ_FOR_NON_LSP(19, 1),
     /**
      * Attempted LSP Update Request if active stateful PCE capability was not negotiated active PCE.
      */
-    UPDATE_REQ_FOR_NO_STATEFUL,
+    UPDATE_REQ_FOR_NO_STATEFUL(19, 2),
     /**
      * Attempted LSP Update Request for an LSP identified by an unknown PLSP-ID.
      */
-    UNKNOWN_PLSP_ID,
+    UNKNOWN_PLSP_ID(19, 3),
     /**
      * A PCE indicates to a PCC that it has exceeded the resource limit allocated for its state, and thus it cannot
      * accept and process its LSP State Report message.
      */
-    RESOURCE_LIMIT_EXCEEDED,
+    RESOURCE_LIMIT_EXCEEDED(19, 4),
     /**
      * PCE-initiated LSP limit reached
      */
-    LSP_LIMIT_EXCEEDED,
+    LSP_LIMIT_EXCEEDED(19, 6),
     /**
      * Delegation for PCE-initiated LSP cannot be revoked
      */
-    DELEGATION_NON_REVOKABLE,
+    DELEGATION_NON_REVOKABLE(19, 7),
     /**
      * Non-zero PLSP-ID in LSP initiation request
      */
-    NON_ZERO_PLSPID,
+    NON_ZERO_PLSPID(19, 8),
     /**
      * A PCE indicates to a PCC that it can not process (an otherwise valid) LSP State Report. The PCEP-ERROR Object is
      * followed by the LSP Object that identifies the LSP.
      */
-    CANNOT_PROCESS_STATE_REPORT,
+    CANNOT_PROCESS_STATE_REPORT(20, 1),
     /**
      * LSP Database version mismatch.
      */
-    LSP_DB_VERSION_MISMATCH,
+    LSP_DB_VERSION_MISMATCH(20, 2),
     /**
      * The LSP-DB-VERSION TLV Missing when State Synchronization Avoidance enabled.
      */
-    DB_VERSION_TLV_MISSING_WHEN_SYNC_ALLOWED,
+    DB_VERSION_TLV_MISSING_WHEN_SYNC_ALLOWED(20, 3),
     /**
      * A PCC indicates to a PCE that it can not complete the state synchronization,
      */
-    CANNOT_COMPLETE_STATE_SYNC,
+    CANNOT_COMPLETE_STATE_SYNC(20, 5),
     /**
      * SYMBOLIC-PATH-NAME in use
      */
-    USED_SYMBOLIC_PATH_NAME,
+    USED_SYMBOLIC_PATH_NAME(23, 1),
     /**
      * LSP instantiation error: Unacceptable instantiation parameters
      */
-    LSP_UNACC_INST_PARAMS,
+    LSP_UNACC_INST_PARAMS(24, 1),
     /**
      * LSP instantiation error: Internal error
      */
-    LSP_INTERNAL_ERROR,
+    LSP_INTERNAL_ERROR(24, 2),
     /**
      * LSP instantiation error: RSVP signaling error
      */
-    LSP_RSVP_ERROR,
+    LSP_RSVP_ERROR(24, 3),
     /**
      * Segment Routing error: Non-identical ERO subobjects
      */
-    NON_IDENTICAL_ERO_SUBOBJECTS,
+    NON_IDENTICAL_ERO_SUBOBJECTS(10, 5),
     /**
      * Segment Routing error: ERO subobject with invalid SID value;
      * */
-    BAD_LABEL_VALUE,
+    BAD_LABEL_VALUE(10, 2);
+
+    private PCEPErrorIdentifier errorId;
+    private static final Map<PCEPErrorIdentifier, PCEPErrors> VALUE_MAP;
+
+    static {
+        VALUE_MAP = Maps.newHashMap();
+        for (final PCEPErrors enumItem : PCEPErrors.values()) {
+            VALUE_MAP.put(enumItem.getErrorIdentifier(), enumItem);
+        }
+    }
+
+    public static PCEPErrors forValue(final short errorType, final short errorValue) {
+        return VALUE_MAP.get(new PCEPErrorIdentifier(errorType, errorValue));
+    }
+
+    private PCEPErrors(final int type, final int value) {
+        this.errorId = new PCEPErrorIdentifier((short) type, (short) value);
+    }
+
+    private PCEPErrorIdentifier getErrorIdentifier() {
+        return this.errorId;
+    }
+
+    public short getErrorType() {
+        return this.errorId.getType();
+    }
+
+    public short getErrorValue() {
+        return this.errorId.getValue();
+    }
+
+    /**
+     * Caret for combination of Error-type and Error-value
+     */
+    private static final class PCEPErrorIdentifier {
+        private final short type;
+        private final short value;
+
+        PCEPErrorIdentifier(final short type, final short value) {
+            this.type = type;
+            this.value = value;
+        }
+
+        public short getType() {
+            return this.type;
+        }
+
+        public short getValue() {
+            return this.value;
+        }
+
+        @Override
+        public int hashCode() {
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + this.type;
+            result = prime * result + this.value;
+            return result;
+        }
+
+        @Override
+        public boolean equals(final java.lang.Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (this.getClass() != obj.getClass()) {
+                return false;
+            }
+            final PCEPErrorIdentifier other = (PCEPErrorIdentifier) obj;
+            if (this.type != other.type) {
+                return false;
+            }
+            if (this.value != other.value) {
+                return false;
+            }
+            return true;
+        }
+
+        @Override
+        public String toString() {
+            return "type " + this.type + " value " + this.value;
+        }
+    }
 }
index ddad96a929e765c97995a8b78d52ec68984232ed..61db86914d155e0552d7dffa0992d6b0da674b6a 100644 (file)
@@ -8,10 +8,8 @@
 package org.opendaylight.protocol.pcep.spi;
 
 import com.google.common.base.Preconditions;
-
 import java.util.Arrays;
 import java.util.List;
-
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObjectBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.Errors;
@@ -34,10 +32,9 @@ public final class UnknownObject implements Object {
     public UnknownObject(final PCEPErrors error, final Object invalidObject) {
         this.e = Preconditions.checkNotNull(error);
 
-        final PCEPErrorMapping mapping = PCEPErrorMapping.getInstance();
         this.error = new ErrorsBuilder().setErrorObject(
-                new ErrorObjectBuilder().setType(mapping.getFromErrorsEnum(error).getType()).setValue(
-                        mapping.getFromErrorsEnum(error).getValue()).build()).build();
+                new ErrorObjectBuilder().setType(error.getErrorType()).setValue(
+                        error.getErrorValue()).build()).build();
         this.invalidObject = invalidObject;
     }
 
index fdb43fa83525d93c7252c6a159623f0a017d3122..056d4329ecf62e85956cbdf16c9189da9319bbad 100644 (file)
@@ -13,7 +13,6 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import org.junit.Test;
-import org.opendaylight.protocol.pcep.spi.PCEPErrorMapping.PCEPErrorIdentifier;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.close.object.CCloseBuilder;
 
@@ -46,9 +45,7 @@ public class APITest {
         assertFalse(un.isIgnore());
         assertFalse(un.isProcessingRule());
         assertEquals(PCEPErrors.CT_AND_SETUP_PRIORITY_DO_NOT_FORM_TE_CLASS, un.getError());
-        final PCEPErrorMapping mapping = PCEPErrorMapping.getInstance();
-        final PCEPErrorIdentifier id = mapping.getFromErrorsEnum(PCEPErrors.CT_AND_SETUP_PRIORITY_DO_NOT_FORM_TE_CLASS);
-        assertEquals(id.getType(), un.getErrors().get(0).getErrorObject().getType().shortValue());
+        assertEquals(PCEPErrors.CT_AND_SETUP_PRIORITY_DO_NOT_FORM_TE_CLASS.getErrorType(), un.getErrors().get(0).getErrorObject().getType().shortValue());
 
         final Object o = new CCloseBuilder().build();
         UnknownObject unknown = new UnknownObject(PCEPErrors.LSP_RSVP_ERROR, o);
index de3d2e2bd9b057b14c9f02d47133f958b958d548..1007e51ecba51d3971962f77a4717f32db8e80bd 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.protocol.pcep.spi;
 
 import static org.junit.Assert.assertEquals;
 
+import com.google.common.base.Optional;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import java.util.Collections;
@@ -18,12 +19,12 @@ import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.protocol.pcep.spi.PCEPErrorMapping.PCEPErrorIdentifier;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Pcerr;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObject;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObjectBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Rp;
 
 public class AbstractMessageParserTest {
 
@@ -44,10 +45,9 @@ public class AbstractMessageParserTest {
 
         @Override
         protected Message validate(List<Object> objects, List<Message> errors) throws PCEPDeserializerException {
-            short type = ((ErrorObject)objects.get(0)).getType();
-            short value = ((ErrorObject)objects.get(0)).getValue();
-            final PCEPErrorMapping map = PCEPErrorMapping.getInstance();
-            return createErrorMsg(map.getFromErrorIdentifier(new PCEPErrorIdentifier(type, value)));
+            final short errorType = ((ErrorObject) objects.get(0)).getType();
+            final short errorValue = ((ErrorObject) objects.get(0)).getValue();
+            return createErrorMsg(PCEPErrors.forValue(errorType, errorValue), Optional.<Rp>absent());
         }
     };