Pcep Stateful & Initiated renaming
[bgpcep.git] / pcep / ietf-stateful07 / src / main / java / org / opendaylight / protocol / pcep / ietf / stateful07 / Stateful07PCReportMessageParser.java
diff --git a/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCReportMessageParser.java b/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCReportMessageParser.java
deleted file mode 100644 (file)
index 8efd940..0000000
+++ /dev/null
@@ -1,240 +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.ietf.stateful07;
-
-import static com.google.common.base.Preconditions.checkArgument;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.Unpooled;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
-import org.opendaylight.protocol.pcep.spi.AbstractMessageParser;
-import org.opendaylight.protocol.pcep.spi.MessageUtil;
-import org.opendaylight.protocol.pcep.spi.ObjectRegistry;
-import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.spi.PCEPErrors;
-import org.opendaylight.protocol.pcep.spi.PSTUtil;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Pcrpt;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcrptBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.object.Lsp;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.PcrptMessageBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.Reports;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.ReportsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.reports.Path;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.reports.PathBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.srp.object.Srp;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.srp.object.srp.Tlvs;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.Message;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.Object;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bandwidth.object.Bandwidth;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.Ero;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.Iro;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lsp.attributes.Metrics;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lsp.attributes.MetricsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa.object.Lspa;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.metric.object.Metric;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reported.route.object.Rro;
-
-/**
- * Parser for {@link Pcrpt}.
- */
-public class Stateful07PCReportMessageParser extends AbstractMessageParser {
-
-    public static final int TYPE = 10;
-
-    public Stateful07PCReportMessageParser(final ObjectRegistry registry) {
-        super(registry);
-    }
-
-    @Override
-    public void serializeMessage(final Message message, final ByteBuf out) {
-        checkArgument(message instanceof Pcrpt, "Wrong instance of Message. Passed instance of %s. Need Pcrpt.",
-            message.getClass());
-        final Pcrpt msg = (Pcrpt) message;
-        final List<Reports> reports = msg.getPcrptMessage().getReports();
-        final ByteBuf buffer = Unpooled.buffer();
-        for (final Reports report : reports) {
-            serializeReport(report, buffer);
-        }
-        MessageUtil.formatMessage(TYPE, buffer, out);
-    }
-
-    private void serializeReport(final Reports report, final ByteBuf buffer) {
-        if (report.getSrp() != null) {
-            serializeObject(report.getSrp(), buffer);
-        }
-        serializeObject(report.getLsp(), buffer);
-        final Path p = report.getPath();
-        if (p != null) {
-            serializeObject(p.getEro(), buffer);
-            serializeObject(p.getLspa(), buffer);
-            serializeObject(p.getBandwidth(), buffer);
-            serializeObject(p.getReoptimizationBandwidth(), buffer);
-            if (p.getMetrics() != null) {
-                for (final Metrics m : p.getMetrics()) {
-                    serializeObject(m.getMetric(), buffer);
-                }
-            }
-            serializeObject(p.getIro(), buffer);
-            serializeObject(p.getRro(), buffer);
-        }
-    }
-
-    @Override
-    public Message validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException {
-        checkArgument(objects != null, "Passed list can't be null.");
-        if (objects.isEmpty()) {
-            throw new PCEPDeserializerException("Pcrpt message cannot be empty.");
-        }
-
-        final List<Reports> reports = new ArrayList<>();
-
-        while (!objects.isEmpty()) {
-            final Reports report = getValidReports(objects, errors);
-            if (report != null) {
-                reports.add(report);
-            }
-        }
-        return new PcrptBuilder().setPcrptMessage(new PcrptMessageBuilder().setReports(reports).build()).build();
-    }
-
-    protected Reports getValidReports(final List<Object> objects, final List<Message> errors) {
-        final ReportsBuilder builder = new ReportsBuilder();
-
-        boolean lspViaSR = false;
-        Object object = objects.remove(0);
-        if (object instanceof Srp) {
-            final Srp srp = (Srp) object;
-            final Tlvs tlvs = srp.getTlvs();
-            if (tlvs != null) {
-                lspViaSR = PSTUtil.isDefaultPST(tlvs.getPathSetupType());
-            }
-            builder.setSrp(srp);
-            if (objects.isEmpty()) {
-                object = null;
-            } else {
-                object = objects.remove(0);
-            }
-        }
-
-        if (validateLsp(object, lspViaSR, errors, builder)) {
-            if (!objects.isEmpty()) {
-                if (!validatePath(objects, errors, builder)) {
-                    return null;
-                }
-            }
-
-            return builder.build();
-        }
-        return null;
-    }
-
-    private static boolean validateLsp(final Object object, final boolean lspViaSR, final List<Message> errors,
-            final ReportsBuilder builder) {
-        if (object instanceof Lsp) {
-            final Lsp lsp = (Lsp) object;
-            final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp
-                .object.lsp.Tlvs tlvs = lsp.getTlvs();
-            if (!lspViaSR && lsp.getPlspId().getValue().toJava() != 0
-                    && (tlvs == null || tlvs.getLspIdentifiers() == null)) {
-                final Message errorMsg = createErrorMsg(PCEPErrors.LSP_IDENTIFIERS_TLV_MISSING, Optional.empty());
-                errors.add(errorMsg);
-                return false;
-            }
-
-            builder.setLsp(lsp);
-            return true;
-        }
-
-        errors.add(createErrorMsg(PCEPErrors.LSP_MISSING, Optional.empty()));
-        return false;
-    }
-
-    private static boolean validatePath(final List<Object> objects, final List<Message> errors,
-            final ReportsBuilder builder) {
-        final PathBuilder pBuilder = new PathBuilder();
-        Object object = objects.remove(0);
-        if (object instanceof Ero) {
-            pBuilder.setEro((Ero) object);
-        } else {
-            errors.add(createErrorMsg(PCEPErrors.ERO_MISSING, Optional.empty()));
-            return false;
-        }
-        parsePath(objects, pBuilder);
-        builder.setPath(pBuilder.build());
-        return true;
-    }
-
-    private static void parsePath(final List<Object> objects, final PathBuilder builder) {
-        final List<Metrics> pathMetrics = new ArrayList<>();
-        Object obj;
-        State state = State.INIT;
-        while (!objects.isEmpty() && !state.equals(State.END)) {
-            obj = objects.get(0);
-            state = insertObject(state, obj, builder, pathMetrics);
-            if (!state.equals(State.END)) {
-                objects.remove(0);
-            }
-        }
-        if (!pathMetrics.isEmpty()) {
-            builder.setMetrics(pathMetrics);
-        }
-    }
-
-    private static State insertObject(final State state, final Object obj, final PathBuilder builder,
-            final List<Metrics> pathMetrics) {
-        switch (state) {
-            case INIT:
-                if (obj instanceof Lspa) {
-                    builder.setLspa((Lspa) obj);
-                    return State.LSPA_IN;
-                }
-                // fall through
-            case LSPA_IN:
-                if (obj instanceof Bandwidth) {
-                    builder.setBandwidth((Bandwidth) obj);
-                    return State.LSPA_IN;
-                }
-                if (obj instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
-                        .reoptimization.bandwidth.object.ReoptimizationBandwidth) {
-                    builder.setReoptimizationBandwidth((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang
-                            .pcep.types.rev181109.reoptimization.bandwidth.object.ReoptimizationBandwidth) obj);
-                    return State.LSPA_IN;
-                }
-                // fall through
-            case BANDWIDTH_IN:
-                if (obj instanceof Metric) {
-                    pathMetrics.add(new MetricsBuilder().setMetric((Metric) obj).build());
-                    return State.BANDWIDTH_IN;
-                }
-                // fall through
-            case METRIC_IN:
-                if (obj instanceof Iro) {
-                    builder.setIro((Iro) obj);
-                    return State.IRO_IN;
-                }
-                // fall through
-            case IRO_IN:
-                if (obj instanceof Rro) {
-                    builder.setRro((Rro) obj);
-                    return State.RRO_IN;
-                }
-                // fall through
-            case RRO_IN:
-            case END:
-                return State.END;
-            default:
-                return state;
-        }
-    }
-
-    private enum State {
-        INIT, LSPA_IN, BANDWIDTH_IN, METRIC_IN, IRO_IN, RRO_IN, END
-    }
-}