org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils.java

Source

/*
 * Copyright (c) 2014 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.yangtools.yang.model.util;

import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
import org.opendaylight.yangtools.yang.model.api.SchemaNode;

public class SchemaNodeUtils {

    private SchemaNodeUtils() {
        throw new UnsupportedOperationException("Utility class");
    }

    public static Optional<SchemaNode> getOriginalIfPossible(final SchemaNode node) {
        if (node instanceof DerivableSchemaNode) {
            @SuppressWarnings("unchecked")
            final Optional<SchemaNode> ret = (Optional<SchemaNode>) (((DerivableSchemaNode) node).getOriginal());
            return ret;
        }
        return Optional.absent();
    }

    public static SchemaNode getRootOriginalIfPossible(final SchemaNode data) {
        Optional<SchemaNode> previous = Optional.absent();
        Optional<SchemaNode> next = getOriginalIfPossible(data);
        while (next.isPresent()) {
            previous = next;
            next = getOriginalIfPossible(next.get());
        }
        return previous.orNull();
    }

    /**
     * Returns RPC input or output schema based on supplied QName
     *
     * @param rpc RPC Definition
     * @param qname input or output QName with namespace same as RPC
     * @return input or output schema. Returns null if RPC does not have input/output specified.
     */
    @Nullable
    public static ContainerSchemaNode getRpcDataSchema(@Nonnull final RpcDefinition rpc,
            @Nonnull final QName qname) {
        Preconditions.checkNotNull(rpc, "Rpc Schema must not be null");
        Preconditions.checkNotNull(qname, "QName must not be null");
        switch (qname.getLocalName()) {
        case "input":
            return rpc.getInput();
        case "output":
            return rpc.getOutput();
        default:
            throw new IllegalArgumentException(
                    "Supplied qname " + qname + " does not represent rpc input or output.");
        }
    }
}