/* * Copyright (c) 2017 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.controller.blueprint.ext; import java.util.ArrayList; import java.util.Collection; import java.util.function.Predicate; import org.opendaylight.controller.md.sal.dom.broker.spi.rpc.RpcRoutingStrategy; import org.opendaylight.yangtools.yang.binding.RpcService; import org.opendaylight.yangtools.yang.binding.util.BindingReflections; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Utility methods for dealing with various aspects of RPCs and actions. * * @author Robert Varga */ final class RpcUtil { private static final Logger LOG = LoggerFactory.getLogger(RpcUtil.class); private RpcUtil() { throw new UnsupportedOperationException(); } static Collection decomposeRpcService(final Class service, final SchemaContext schemaContext, final Predicate filter) { final QNameModule moduleName = BindingReflections.getQNameModule(service); final Module module = schemaContext.findModuleByNamespaceAndRevision(moduleName.getNamespace(), moduleName.getRevision()); LOG.debug("Resolved service {} to module {}", service, module); final Collection rpcs = module.getRpcs(); final Collection ret = new ArrayList<>(rpcs.size()); for (RpcDefinition rpc : rpcs) { final RpcRoutingStrategy strategy = RpcRoutingStrategy.from(rpc); if (filter.test(strategy)) { ret.add(rpc.getPath()); } } return ret; } }