Search in sources :

Example 1 with LeafSchemaNode

use of org.opendaylight.yangtools.yang.model.api.LeafSchemaNode in project controller by opendaylight.

the class RuntimeBeanEntry method extractSubtree.

/**
 * Get direct descendants of this subtree, together with attributes defined
 * in subtree.
 */
private static AttributesRpcsAndRuntimeBeans extractSubtree(final String packageName, final DataNodeContainer subtree, final TypeProviderWrapper typeProviderWrapper, final Module currentModule, final SchemaContext ctx) {
    Multimap<QName, RpcDefinition> identitiesToRpcs = getIdentitiesToRpcs(ctx);
    List<AttributeIfc> attributes = Lists.newArrayList();
    List<RuntimeBeanEntry> runtimeBeanEntries = new ArrayList<>();
    for (DataSchemaNode child : subtree.getChildNodes()) {
        // runtime beans
        if (child instanceof LeafSchemaNode) {
            // just save the attribute
            LeafSchemaNode leaf = (LeafSchemaNode) child;
            attributes.add(new JavaAttribute(leaf, typeProviderWrapper));
        } else if (child instanceof ContainerSchemaNode) {
            ContainerSchemaNode container = (ContainerSchemaNode) child;
            // this can be either TO or hierarchical RB
            TOAttribute toAttribute = TOAttribute.create(container, typeProviderWrapper, packageName);
            attributes.add(toAttribute);
        } else if (child instanceof ListSchemaNode) {
            if (isInnerStateBean(child)) {
                ListSchemaNode listSchemaNode = (ListSchemaNode) child;
                RuntimeBeanEntry hierarchicalChild = createHierarchical(packageName, listSchemaNode, typeProviderWrapper, currentModule, ctx);
                runtimeBeanEntries.add(hierarchicalChild);
            } else /* ordinary list attribute */
            {
                ListAttribute listAttribute = ListAttribute.create((ListSchemaNode) child, typeProviderWrapper, packageName);
                attributes.add(listAttribute);
            }
        } else if (child instanceof LeafListSchemaNode) {
            ListAttribute listAttribute = ListAttribute.create((LeafListSchemaNode) child, typeProviderWrapper);
            attributes.add(listAttribute);
        } else {
            throw new IllegalStateException("Unexpected running-data node " + child);
        }
    }
    Set<Rpc> rpcs = new HashSet<>();
    SchemaNode subtreeSchemaNode = (SchemaNode) subtree;
    for (UnknownSchemaNode unknownSchemaNode : subtreeSchemaNode.getUnknownSchemaNodes()) {
        if (ConfigConstants.RPC_CONTEXT_INSTANCE_EXTENSION_QNAME.equals(unknownSchemaNode.getNodeType())) {
            String localIdentityName = unknownSchemaNode.getNodeParameter();
            QName identityQName = unknownSchemaNode.isAddedByUses() ? findQNameFromGrouping(subtree, ctx, unknownSchemaNode, localIdentityName) : QName.create(currentModule.getNamespace(), currentModule.getRevision(), localIdentityName);
            // convert RpcDefinition to Rpc
            for (RpcDefinition rpcDefinition : identitiesToRpcs.get(identityQName)) {
                String name = TypeProviderWrapper.findJavaParameter(rpcDefinition);
                AttributeIfc returnType;
                if (rpcDefinition.getOutput() == null || rpcDefinition.getOutput().getChildNodes().isEmpty()) {
                    returnType = VoidAttribute.getInstance();
                } else if (rpcDefinition.getOutput().getChildNodes().size() == 1) {
                    DataSchemaNode returnDSN = rpcDefinition.getOutput().getChildNodes().iterator().next();
                    returnType = getReturnTypeAttribute(returnDSN, typeProviderWrapper, packageName);
                } else {
                    throw new IllegalArgumentException("More than one child node in rpc output is not supported. " + "Error occured in " + rpcDefinition);
                }
                List<JavaAttribute> parameters = new ArrayList<>();
                for (DataSchemaNode childNode : sortAttributes(rpcDefinition.getInput().getChildNodes())) {
                    if (childNode.isAddedByUses() == false) {
                        // skip
                        // refined
                        // context-instance
                        checkArgument(childNode instanceof LeafSchemaNode, "Unexpected type of rpc input type. " + "Currently only leafs and empty output nodes are supported, got " + childNode);
                        JavaAttribute javaAttribute = new JavaAttribute((LeafSchemaNode) childNode, typeProviderWrapper);
                        parameters.add(javaAttribute);
                    }
                }
                Rpc newRpc = new Rpc(returnType, name, rpcDefinition.getQName().getLocalName(), parameters);
                rpcs.add(newRpc);
            }
        }
    }
    return new AttributesRpcsAndRuntimeBeans(runtimeBeanEntries, attributes, rpcs);
}
Also used : RpcDefinition(org.opendaylight.yangtools.yang.model.api.RpcDefinition) LeafListSchemaNode(org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode) ArrayList(java.util.ArrayList) TOAttribute(org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute) ContainerSchemaNode(org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode) UnknownSchemaNode(org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode) JavaAttribute(org.opendaylight.controller.config.yangjmxgenerator.attribute.JavaAttribute) HashSet(java.util.HashSet) DataSchemaNode(org.opendaylight.yangtools.yang.model.api.DataSchemaNode) QName(org.opendaylight.yangtools.yang.common.QName) LeafSchemaNode(org.opendaylight.yangtools.yang.model.api.LeafSchemaNode) LeafListSchemaNode(org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode) UnknownSchemaNode(org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode) ListSchemaNode(org.opendaylight.yangtools.yang.model.api.ListSchemaNode) ContainerSchemaNode(org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode) SchemaNode(org.opendaylight.yangtools.yang.model.api.SchemaNode) DataSchemaNode(org.opendaylight.yangtools.yang.model.api.DataSchemaNode) LeafSchemaNode(org.opendaylight.yangtools.yang.model.api.LeafSchemaNode) LeafListSchemaNode(org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode) ListSchemaNode(org.opendaylight.yangtools.yang.model.api.ListSchemaNode) AttributeIfc(org.opendaylight.controller.config.yangjmxgenerator.attribute.AttributeIfc) ListAttribute(org.opendaylight.controller.config.yangjmxgenerator.attribute.ListAttribute)

Example 2 with LeafSchemaNode

use of org.opendaylight.yangtools.yang.model.api.LeafSchemaNode in project controller by opendaylight.

the class RuntimeRegistratorTest method testHierarchy.

@Test
public void testHierarchy() {
    final LeafSchemaNode leaf = mock(LeafSchemaNode.class);
    doReturn(QName.create(URI.create("urn:x"), "leaf-local-name")).when(leaf).getQName();
    doReturn(Collections.emptyList()).when(leaf).getUnknownSchemaNodes();
    doReturn(java.util.Optional.empty()).when(leaf).getDescription();
    final StringTypeDefinition leafType = mock(StringTypeDefinition.class);
    doReturn(java.util.Optional.empty()).when(leafType).getDefaultValue();
    doReturn(leafType).when(leaf).getType();
    final TypeProviderWrapper typeProviderWrapper = mock(TypeProviderWrapper.class);
    final Type mockedType = mock(Type.class);
    doReturn(mockedType).when(typeProviderWrapper).getType(leaf);
    doReturn("java.lang.String").when(mockedType).getFullyQualifiedName();
}
Also used : Type(org.opendaylight.mdsal.binding.model.api.Type) StringTypeDefinition(org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition) LeafSchemaNode(org.opendaylight.yangtools.yang.model.api.LeafSchemaNode) Test(org.junit.Test)

Example 3 with LeafSchemaNode

use of org.opendaylight.yangtools.yang.model.api.LeafSchemaNode in project controller by opendaylight.

the class RuntimeBeanEntryTest method createRuntimeBean.

@Test
public void createRuntimeBean() {
    final CaseSchemaNode caseNode = Mockito.mock(CaseSchemaNode.class);
    doReturn(new HashSet<LeafSchemaNode>()).when(caseNode).getChildNodes();
    doReturn(new ArrayList<UnknownSchemaNode>()).when(caseNode).getUnknownSchemaNodes();
    final Map<String, RuntimeBeanEntry> runtimeBeans = RuntimeBeanEntry.extractClassNameToRuntimeBeanMap(PACKAGE_NAME, caseNode, "test-name", new TypeProviderWrapper(new TypeProviderImpl(this.context)), "test", this.jmxImplModule, this.context);
    assertEquals(1, runtimeBeans.size());
    final RuntimeBeanEntry runtimeMXBean = runtimeBeans.get("testRuntimeMXBean");
    assertTrue(runtimeMXBean.isRoot());
    assertEquals("test-name", runtimeMXBean.getYangName());
}
Also used : CaseSchemaNode(org.opendaylight.yangtools.yang.model.api.CaseSchemaNode) LeafSchemaNode(org.opendaylight.yangtools.yang.model.api.LeafSchemaNode) UnknownSchemaNode(org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode) TypeProviderImpl(org.opendaylight.mdsal.binding.yang.types.TypeProviderImpl) Test(org.junit.Test)

Example 4 with LeafSchemaNode

use of org.opendaylight.yangtools.yang.model.api.LeafSchemaNode in project controller by opendaylight.

the class ModuleMXBeanEntryBuilder method extractDependency.

private static Optional<? extends AbstractDependencyAttribute> extractDependency(final DataNodeContainer dataNodeContainer, final DataSchemaNode attrNode, final Module currentModule, final Map<QName, ServiceInterfaceEntry> qNamesToSIEs, final SchemaContext schemaContext) {
    if (isDependencyContainer(dataNodeContainer)) {
        // reference
        UsesNode usesNode = dataNodeContainer.getUses().iterator().next();
        for (SchemaNode refineNode : usesNode.getRefines().values()) {
            // this will ignore name nodes, since they are not needed here
            if (TYPE.equals(refineNode.getQName().getLocalName())) {
                checkState(refineNode.getUnknownSchemaNodes().size() == 1, "Unexpected unknown schema node size of " + refineNode);
                UnknownSchemaNode requiredIdentity = refineNode.getUnknownSchemaNodes().iterator().next();
                checkState(ConfigConstants.REQUIRED_IDENTITY_EXTENSION_QNAME.equals(requiredIdentity.getNodeType()), "Unexpected language extension " + requiredIdentity);
                String prefixAndIdentityLocalName = requiredIdentity.getNodeParameter();
                // import should point to a module
                ServiceInterfaceEntry serviceInterfaceEntry = findSIE(prefixAndIdentityLocalName, currentModule, qNamesToSIEs, schemaContext);
                LeafSchemaNode refine = (LeafSchemaNode) usesNode.getRefines().values().iterator().next();
                boolean mandatory = refine.isMandatory();
                AbstractDependencyAttribute reference;
                if (dataNodeContainer instanceof ContainerSchemaNode) {
                    reference = new DependencyAttribute(attrNode, serviceInterfaceEntry, mandatory, attrNode.getDescription().orElse(null));
                } else {
                    reference = new ListDependenciesAttribute(attrNode, serviceInterfaceEntry, mandatory, attrNode.getDescription().orElse(null));
                }
                return Optional.of(reference);
            }
        }
    }
    return Optional.absent();
}
Also used : CaseSchemaNode(org.opendaylight.yangtools.yang.model.api.CaseSchemaNode) AugmentationSchemaNode(org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode) LeafListSchemaNode(org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode) UnknownSchemaNode(org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode) ListSchemaNode(org.opendaylight.yangtools.yang.model.api.ListSchemaNode) ContainerSchemaNode(org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode) SchemaNode(org.opendaylight.yangtools.yang.model.api.SchemaNode) IdentitySchemaNode(org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode) DataSchemaNode(org.opendaylight.yangtools.yang.model.api.DataSchemaNode) LeafSchemaNode(org.opendaylight.yangtools.yang.model.api.LeafSchemaNode) DependencyAttribute(org.opendaylight.controller.config.yangjmxgenerator.attribute.DependencyAttribute) AbstractDependencyAttribute(org.opendaylight.controller.config.yangjmxgenerator.attribute.AbstractDependencyAttribute) ContainerSchemaNode(org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode) AbstractDependencyAttribute(org.opendaylight.controller.config.yangjmxgenerator.attribute.AbstractDependencyAttribute) LeafSchemaNode(org.opendaylight.yangtools.yang.model.api.LeafSchemaNode) ListDependenciesAttribute(org.opendaylight.controller.config.yangjmxgenerator.attribute.ListDependenciesAttribute) UnknownSchemaNode(org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode) UsesNode(org.opendaylight.yangtools.yang.model.api.UsesNode)

Aggregations

LeafSchemaNode (org.opendaylight.yangtools.yang.model.api.LeafSchemaNode)4 UnknownSchemaNode (org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode)3 Test (org.junit.Test)2 CaseSchemaNode (org.opendaylight.yangtools.yang.model.api.CaseSchemaNode)2 ContainerSchemaNode (org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode)2 DataSchemaNode (org.opendaylight.yangtools.yang.model.api.DataSchemaNode)2 LeafListSchemaNode (org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode)2 ListSchemaNode (org.opendaylight.yangtools.yang.model.api.ListSchemaNode)2 SchemaNode (org.opendaylight.yangtools.yang.model.api.SchemaNode)2 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 AbstractDependencyAttribute (org.opendaylight.controller.config.yangjmxgenerator.attribute.AbstractDependencyAttribute)1 AttributeIfc (org.opendaylight.controller.config.yangjmxgenerator.attribute.AttributeIfc)1 DependencyAttribute (org.opendaylight.controller.config.yangjmxgenerator.attribute.DependencyAttribute)1 JavaAttribute (org.opendaylight.controller.config.yangjmxgenerator.attribute.JavaAttribute)1 ListAttribute (org.opendaylight.controller.config.yangjmxgenerator.attribute.ListAttribute)1 ListDependenciesAttribute (org.opendaylight.controller.config.yangjmxgenerator.attribute.ListDependenciesAttribute)1 TOAttribute (org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute)1 Type (org.opendaylight.mdsal.binding.model.api.Type)1 TypeProviderImpl (org.opendaylight.mdsal.binding.yang.types.TypeProviderImpl)1