Introduce top-level pom file.
[mdsal.git] / code-generator / binding-data-codec / src / main / java / org / opendaylight / yangtools / binding / data / codec / api / BindingNormalizedNodeWriterFactory.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.binding.data.codec.api;
9
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;
18
19 /**
20  *
21  * Factory for {@link BindingStreamEventWriter}, which provides stream writers
22  * which translates data and delegates calls to
23  * {@link NormalizedNodeStreamWriter}.
24  *
25  */
26 public interface BindingNormalizedNodeWriterFactory {
27
28     /**
29      *
30      * Creates a {@link BindingStreamEventWriter} for data tree path which will
31      * translate to NormalizedNode model and invoke proper events on supplied
32      * {@link NormalizedNodeStreamWriter}.
33      * <p>
34      * Also provides translation of supplied Instance Identifier to
35      * {@link YangInstanceIdentifier} so client code, does not need to translate
36      * that separately.
37      * <p>
38      * If {@link YangInstanceIdentifier} is not needed, please use
39      * {@link #newWriter(InstanceIdentifier, NormalizedNodeStreamWriter)}
40      * method to conserve resources.
41      *
42      * @param path
43      *            Binding Path in conceptual data tree, for which writer should
44      *            be instantiated
45      * @param domWriter
46      *            Stream writer on which events will be invoked.
47      * @return Instance Identifier and {@link BindingStreamEventWriter}
48      *         which will write to supplied {@link NormalizedNodeStreamWriter}.
49      * @throws IllegalArgumentException If supplied Instance Identifier is not valid.
50      */
51     @Nonnull Entry<YangInstanceIdentifier, BindingStreamEventWriter> newWriterAndIdentifier(@Nonnull InstanceIdentifier<?> path,
52             @Nonnull NormalizedNodeStreamWriter domWriter);
53
54     /**
55      *
56      * Creates a {@link BindingStreamEventWriter} for data tree path which will
57      * translate to NormalizedNode model and invoke proper events on supplied
58      * {@link NormalizedNodeStreamWriter}.
59      * <p>
60      *
61      * This variation does not provide YANG instance identifier and is useful
62      * for use-cases, where {@link InstanceIdentifier} translation is done
63      * in other way, or YANG instance identifier is unnecessary (e.g. notifications, RPCs).
64      *
65      * @param path Binding Path in conceptual data tree, for which writer should
66      *            be instantiated
67      * @param domWriter Stream writer on which events will be invoked.
68      * @return {@link BindingStreamEventWriter}
69      *         which will write to supplied {@link NormalizedNodeStreamWriter}.
70      * @throws IllegalArgumentException If supplied Instance Identifier is not valid.
71      */
72     @Nonnull
73     BindingStreamEventWriter newWriter(@Nonnull InstanceIdentifier<?> path,
74             @Nonnull NormalizedNodeStreamWriter domWriter);
75
76     /**
77      *
78      * Creates a {@link BindingStreamEventWriter} for rpc data which will
79      * translate to NormalizedNode model and invoke proper events on supplied
80      * {@link NormalizedNodeStreamWriter}.
81      *
82      * @param rpcInputOrOutput Binding class representing RPC input or output,
83      *            for which writer should be instantiated
84      * @param domWriter
85      *            Stream writer on which events will be invoked.
86      * @return {@link BindingStreamEventWriter} which will write to supplied
87      *         {@link NormalizedNodeStreamWriter}.
88      */
89     @Nonnull
90     BindingStreamEventWriter newRpcWriter(@Nonnull Class<? extends DataContainer> rpcInputOrOutput,
91             @Nonnull NormalizedNodeStreamWriter domWriter);
92
93     /**
94      *
95      * Creates a {@link BindingStreamEventWriter} for notification which will
96      * translate to NormalizedNode model and invoke proper events on supplied
97      * {@link NormalizedNodeStreamWriter}.
98      *
99      * @param notification Binding class representing notification,
100      *            for which writer should be instantiated
101      * @param domWriter
102      *            Stream writer on which events will be invoked.
103      * @return {@link BindingStreamEventWriter} which will write to supplied
104      *         {@link NormalizedNodeStreamWriter}.
105      */
106     @Nonnull
107     BindingStreamEventWriter newNotificationWriter(@Nonnull Class<? extends Notification> notification,
108             @Nonnull NormalizedNodeStreamWriter domWriter);
109 }