2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.mdsal.binding.dom.codec.api;
10 import java.util.Map.Entry;
11 import javax.annotation.Nonnull;
12 import org.opendaylight.yangtools.yang.binding.BindingStreamEventWriter;
13 import org.opendaylight.yangtools.yang.binding.DataContainer;
14 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
15 import org.opendaylight.yangtools.yang.binding.Notification;
16 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
17 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
20 * Factory for {@link BindingStreamEventWriter}, which provides stream writers which translates data and delegates
21 * calls to {@link NormalizedNodeStreamWriter}.
23 public interface BindingNormalizedNodeWriterFactory {
25 * Creates a {@link BindingStreamEventWriter} for data tree path which will translate to NormalizedNode model
26 * and invoke proper events on supplied {@link NormalizedNodeStreamWriter}.
29 * Also provides translation of supplied Instance Identifier to {@link YangInstanceIdentifier} so client code, does
30 * not need to translate that separately.
33 * If {@link YangInstanceIdentifier} is not needed, please use
34 * {@link #newWriter(InstanceIdentifier, NormalizedNodeStreamWriter)} method to conserve resources.
37 * Binding Path in conceptual data tree, for which writer should
40 * Stream writer on which events will be invoked.
41 * @return Instance Identifier and {@link BindingStreamEventWriter}
42 * which will write to supplied {@link NormalizedNodeStreamWriter}.
43 * @throws IllegalArgumentException If supplied Instance Identifier is not valid.
45 @Nonnull Entry<YangInstanceIdentifier, BindingStreamEventWriter> newWriterAndIdentifier(
46 @Nonnull InstanceIdentifier<?> path, @Nonnull NormalizedNodeStreamWriter domWriter);
49 * Creates a {@link BindingStreamEventWriter} for data tree path which will translate to NormalizedNode model
50 * and invoke proper events on supplied {@link NormalizedNodeStreamWriter}.
53 * This variant does not provide YANG instance identifier and is useful for use-cases, where
54 * {@link InstanceIdentifier} translation is done in other way, or YANG instance identifier is unnecessary
55 * (e.g. notifications, RPCs).
57 * @param path Binding Path in conceptual data tree, for which writer should
59 * @param domWriter Stream writer on which events will be invoked.
60 * @return {@link BindingStreamEventWriter}
61 * which will write to supplied {@link NormalizedNodeStreamWriter}.
62 * @throws IllegalArgumentException If supplied Instance Identifier is not valid.
65 BindingStreamEventWriter newWriter(@Nonnull InstanceIdentifier<?> path,
66 @Nonnull NormalizedNodeStreamWriter domWriter);
69 * Creates a {@link BindingStreamEventWriter} for RPC data which will translate to NormalizedNode model and invoke
70 * proper events on supplied {@link NormalizedNodeStreamWriter}.
72 * @param rpcInputOrOutput Binding class representing RPC input or output,
73 * for which writer should be instantiated
75 * Stream writer on which events will be invoked.
76 * @return {@link BindingStreamEventWriter} which will write to supplied
77 * {@link NormalizedNodeStreamWriter}.
80 BindingStreamEventWriter newRpcWriter(@Nonnull Class<? extends DataContainer> rpcInputOrOutput,
81 @Nonnull NormalizedNodeStreamWriter domWriter);
84 * Creates a {@link BindingStreamEventWriter} for notification which will translate to NormalizedNode model
85 * and invoke proper events on supplied {@link NormalizedNodeStreamWriter}.
87 * @param notification Binding class representing notification,
88 * for which writer should be instantiated
90 * Stream writer on which events will be invoked.
91 * @return {@link BindingStreamEventWriter} which will write to supplied
92 * {@link NormalizedNodeStreamWriter}.
95 BindingStreamEventWriter newNotificationWriter(@Nonnull Class<? extends Notification> notification,
96 @Nonnull NormalizedNodeStreamWriter domWriter);