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 org.eclipse.jdt.annotation.NonNull;
12 import org.opendaylight.yangtools.yang.binding.Action;
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.
64 @NonNull BindingStreamEventWriter newWriter(@NonNull InstanceIdentifier<?> path,
65 @NonNull NormalizedNodeStreamWriter domWriter);
68 * Creates a {@link BindingStreamEventWriter} for RPC data which will translate to NormalizedNode model and invoke
69 * proper events on supplied {@link NormalizedNodeStreamWriter}.
71 * @param rpcInputOrOutput Binding class representing RPC input or output,
72 * for which writer should be instantiated
74 * Stream writer on which events will be invoked.
75 * @return {@link BindingStreamEventWriter} which will write to supplied
76 * {@link NormalizedNodeStreamWriter}.
78 @NonNull BindingStreamEventWriter newRpcWriter(@NonNull Class<? extends DataContainer> rpcInputOrOutput,
79 @NonNull NormalizedNodeStreamWriter domWriter);
82 * Creates a {@link BindingStreamEventWriter} for notification which will translate to NormalizedNode model
83 * and invoke proper events on supplied {@link NormalizedNodeStreamWriter}.
85 * @param notification Binding class representing notification,
86 * for which writer should be instantiated
88 * Stream writer on which events will be invoked.
89 * @return {@link BindingStreamEventWriter} which will write to supplied
90 * {@link NormalizedNodeStreamWriter}.
92 @NonNull BindingStreamEventWriter newNotificationWriter(@NonNull Class<? extends Notification<?>> notification,
93 @NonNull NormalizedNodeStreamWriter domWriter);
96 * Creates a {@link BindingStreamEventWriter} for action input which will translate to NormalizedNode model
97 * and invoke proper events on supplied {@link NormalizedNodeStreamWriter}.
99 * @param action Binding class representing action for which writer should be instantiated
100 * @param domWriter Stream writer on which events will be invoked.
101 * @return {@link BindingStreamEventWriter} which will write to supplied {@link NormalizedNodeStreamWriter}.
103 @NonNull BindingStreamEventWriter newActionInputWriter(@NonNull Class<? extends Action<?, ?, ?>> action,
104 @NonNull NormalizedNodeStreamWriter domWriter);
107 * Creates a {@link BindingStreamEventWriter} for action output which will translate to NormalizedNode model
108 * and invoke proper events on supplied {@link NormalizedNodeStreamWriter}.
110 * @param action Binding class representing action for which writer should be instantiated
111 * @param domWriter Stream writer on which events will be invoked.
112 * @return {@link BindingStreamEventWriter} which will write to supplied {@link NormalizedNodeStreamWriter}.
114 @NonNull BindingStreamEventWriter newActionOutputWriter(@NonNull Class<? extends Action<?, ?, ?>> action,
115 @NonNull NormalizedNodeStreamWriter domWriter);