Complexity issue: pcep.ietf.stateful07
[bgpcep.git] / pcep / ietf-stateful07 / src / main / java / org / opendaylight / protocol / pcep / ietf / initiated00 / CInitiated00PCInitiateMessageParser.java
index 32c600c8d9acf9a129e26c941bbaa48b417b554d..74e644a934af731bca8d00686e51c95a302ec861 100644 (file)
@@ -63,7 +63,7 @@ public class CInitiated00PCInitiateMessageParser extends AbstractMessageParser {
         serializeObject(req.getEro(), buffer);
         serializeObject(req.getLspa(), buffer);
         serializeObject(req.getBandwidth(), buffer);
-        if (req.getMetrics() != null && !req.getMetrics().isEmpty()) {
+        if (req.getMetrics() != null) {
             for (final Metrics m : req.getMetrics()) {
                 serializeObject(m.getMetric(), buffer);
             }
@@ -99,51 +99,7 @@ public class CInitiated00PCInitiateMessageParser extends AbstractMessageParser {
         State state = State.INIT;
         while (!objects.isEmpty() && !state.equals(State.END)) {
             obj = objects.get(0);
-
-            switch (state) {
-            case INIT:
-                state = State.ENDPOINTS_IN;
-                if (obj instanceof EndpointsObj) {
-                    builder.setEndpointsObj((EndpointsObj) obj);
-                    break;
-                }
-            case ENDPOINTS_IN:
-                state = State.ERO_IN;
-                if (obj instanceof Ero) {
-                    builder.setEro((Ero) obj);
-                    break;
-                }
-            case ERO_IN:
-                state = State.LSPA_IN;
-                if (obj instanceof Lspa) {
-                    builder.setLspa((Lspa) obj);
-                    break;
-                }
-            case LSPA_IN:
-                state = State.BANDWIDTH_IN;
-                if (obj instanceof Bandwidth) {
-                    builder.setBandwidth((Bandwidth) obj);
-                    break;
-                }
-            case BANDWIDTH_IN:
-                state = State.METRIC_IN;
-                if (obj instanceof Metric) {
-                    metrics.add(new MetricsBuilder().setMetric((Metric) obj).build());
-                    state = State.BANDWIDTH_IN;
-                    break;
-                }
-            case METRIC_IN:
-                state = State.IRO_IN;
-                if (obj instanceof Iro) {
-                    builder.setIro((Iro) obj);
-                    break;
-                }
-            case IRO_IN:
-                state = State.END;
-                break;
-            case END:
-                break;
-            }
+            state = insertObject(state, obj, builder, metrics);
             if (!state.equals(State.END)) {
                 objects.remove(0);
             }
@@ -152,6 +108,46 @@ public class CInitiated00PCInitiateMessageParser extends AbstractMessageParser {
         return builder.build();
     }
 
+    private State insertObject(final State state, final Object obj, final RequestsBuilder builder, final List<Metrics> metrics) {
+        switch (state) {
+        case INIT:
+            if (obj instanceof EndpointsObj) {
+                builder.setEndpointsObj((EndpointsObj) obj);
+                return State.ENDPOINTS_IN;
+            }
+        case ENDPOINTS_IN:
+            if (obj instanceof Ero) {
+                builder.setEro((Ero) obj);
+                return State.ERO_IN;
+            }
+        case ERO_IN:
+            if (obj instanceof Lspa) {
+                builder.setLspa((Lspa) obj);
+                return State.LSPA_IN;
+            }
+        case LSPA_IN:
+            if (obj instanceof Bandwidth) {
+                builder.setBandwidth((Bandwidth) obj);
+                return State.BANDWIDTH_IN;
+            }
+        case BANDWIDTH_IN:
+            if (obj instanceof Metric) {
+                metrics.add(new MetricsBuilder().setMetric((Metric) obj).build());
+                return State.BANDWIDTH_IN;
+            }
+        case METRIC_IN:
+            if (obj instanceof Iro) {
+                builder.setIro((Iro) obj);
+                return State.IRO_IN;
+            }
+        case IRO_IN:
+        case END:
+            return State.END;
+        default:
+            return state;
+        }
+    }
+
     private enum State {
         INIT, ENDPOINTS_IN, ERO_IN, LSPA_IN, BANDWIDTH_IN, METRIC_IN, IRO_IN, END
     }