/* * 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.mdsal.binding.dom.adapter; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; import java.util.Set; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.dom.api.DOMDataBroker; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class AbstractForwardedDataBroker extends AbstractBindingAdapter<@NonNull DOMDataBroker> { private static final Logger LOG = LoggerFactory.getLogger(AbstractForwardedDataBroker.class); protected AbstractForwardedDataBroker(final DOMDataBroker domDataBroker, final BindingToNormalizedNodeCodec codec) { super(codec, domDataBroker); } protected Map, DataObject> toBinding(final InstanceIdentifier path, final Map> normalized) { final Map, DataObject> newMap = new HashMap<>(); for (final Entry> entry : normalized.entrySet()) { try { final Optional, DataObject>> potential = getCodec() .toBinding(entry); if (potential.isPresent()) { final Entry, DataObject> binding = potential.get(); newMap.put(binding.getKey(), binding.getValue()); } } catch (final DeserializationException e) { LOG.warn("Failed to transform {}, omitting it", entry, e); } } return newMap; } protected Set> toBinding(final InstanceIdentifier path, final Set normalized) { final Set> hashSet = new HashSet<>(); for (final YangInstanceIdentifier normalizedPath : normalized) { try { final Optional> potential = getCodec().toBinding(normalizedPath); if (potential.isPresent()) { final InstanceIdentifier binding = potential.get(); hashSet.add(binding); } else if (normalizedPath.getLastPathArgument() instanceof YangInstanceIdentifier.AugmentationIdentifier) { hashSet.add(path); } } catch (final DeserializationException e) { LOG.warn("Failed to transform {}, omitting it", normalizedPath, e); } } return hashSet; } @SuppressWarnings("unchecked") protected Optional toBindingData(final InstanceIdentifier path, final NormalizedNode data) { if (path.isWildcarded()) { return Optional.empty(); } return (Optional) getCodec().getCodecRegistry().deserializeFunction(path).apply(Optional.of(data)); } }