/* * 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.data.api.schema.tree.spi; import com.google.common.base.Optional; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNodeContainer; /** * A TreeNode capable of holding child nodes. The fact that any of the children * changed is tracked by the subtree version. */ abstract class AbstractContainerNode extends AbstractTreeNode { protected AbstractContainerNode(final NormalizedNode data, final Version version) { super(data, version); } @SuppressWarnings("unchecked") protected final NormalizedNodeContainer> castData() { return (NormalizedNodeContainer>) getData(); } protected final Optional getChildFromData(final PathArgument childId) { // We do not cache the instantiated node as it is dirt cheap return Optional.fromNullable(getChildFromData(castData(), childId, getVersion())); } static final TreeNode getChildFromData(final NormalizedNodeContainer> data, final PathArgument childId, final Version version) { final Optional> child = data.getChild(childId); return child.isPresent() ? TreeNodeFactory.createTreeNode(child.get(), version) : null; } }