All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opendaylight.restconf.server.spi.AllOperations Maven / Gradle / Ivy

There is a newer version: 8.0.3
Show newest version
/*
 * Copyright (c) 2024 PANTHEON.tech, s.r.o. 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.restconf.server.spi;

import static java.util.Objects.requireNonNull;

import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.common.collect.ImmutableSetMultimap;
import java.io.IOException;
import java.io.Writer;
import java.util.Comparator;
import java.util.Map;
import java.util.Map.Entry;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;

final class AllOperations extends OperationsBody {
    private final ImmutableSetMultimap rpcs;

    AllOperations(final EffectiveModelContext modelContext, final ImmutableSetMultimap rpcs) {
        super(modelContext);
        this.rpcs = requireNonNull(rpcs);
    }

    @Override
    void formatToJSON(final Writer out) throws IOException {
        out.write("""
            {
              "ietf-restconf:operations" : {\
            """);

        if (!rpcs.isEmpty()) {
            final var entryIt = rpcs.asMap().entrySet().stream()
                .map(entry -> Map.entry(jsonPrefix(entry.getKey()), entry.getValue()))
                .sorted(Comparator.comparing(Entry::getKey))
                .iterator();
            var entry = entryIt.next();
            var nameIt = entry.getValue().iterator();
            while (true) {
                out.write("\n    ");
                appendJSON(out, entry.getKey(), nameIt.next());
                if (nameIt.hasNext()) {
                    out.write(',');
                    continue;
                }

                if (entryIt.hasNext()) {
                    out.write(',');
                    entry = entryIt.next();
                    nameIt = entry.getValue().iterator();
                    continue;
                }

                break;
            }
        }

        out.write("\n  }\n}");
    }

    @Override
    void formatToXML(final Writer out) throws IOException {
        // Header with namespace declarations for each module
        out.write("");
            return;
        }

        out.write('>');
        for (var rpc : rpcs.asMap().entrySet().stream()
                .sorted(Comparator.comparing(Entry::getKey))
                .flatMap(entry -> entry.getValue().stream())
                .toArray(QName[]::new)) {
            out.write("\n  ");
            appendXML(out, rpc);
        }
        out.write("\n");
    }

    @Override
    protected ToStringHelper addToStringAttributes(final ToStringHelper helper) {
        return helper.add("rpcs", rpcs);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy