/* * Copyright (c) 2015 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.data.impl.schema.tree; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.opendaylight.yangtools.concepts.Immutable; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.data.api.schema.tree.spi.TreeNode; import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; final class CaseEnforcer implements Immutable { private final Map children; private final MandatoryLeafEnforcer enforcer; private CaseEnforcer(final Map children, final MandatoryLeafEnforcer enforcer) { this.children = Preconditions.checkNotNull(children); this.enforcer = Preconditions.checkNotNull(enforcer); } static CaseEnforcer forTree(final ChoiceCaseNode schema, final TreeType type) { final Builder builder = ImmutableMap.builder(); if (SchemaAwareApplyOperation.belongsToTree(type, schema)) { for (DataSchemaNode child : schema.getChildNodes()) { if (SchemaAwareApplyOperation.belongsToTree(type, child)) { builder.put(NodeIdentifier.create(child.getQName()), child); } } } final Map children = builder.build(); return children.isEmpty() ? null : new CaseEnforcer(children, MandatoryLeafEnforcer.forContainer(schema, type)); } Set> getChildEntries() { return children.entrySet(); } Set getChildIdentifiers() { return children.keySet(); } void enforceOnTreeNode(final TreeNode tree) { enforcer.enforceOnTreeNode(tree); } void enforceOnTreeNode(final NormalizedNode normalizedNode) { enforcer.enforceOnTreeNode(normalizedNode); } }