Rework inlined union generation
[mdsal.git] / binding / mdsal-binding-generator-api / src / main / java / org / opendaylight / mdsal / binding / model / api / type / builder / GeneratedTOBuilder.java
1 /*
2  * Copyright (c) 2013 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.mdsal.binding.model.api.type.builder;
9
10 import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
11 import org.opendaylight.mdsal.binding.model.api.Restrictions;
12 import org.opendaylight.yangtools.concepts.Builder;
13 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
14
15 /**
16  * Generated Transfer Object Builder is interface that contains methods to build
17  * and instantiate Generated Transfer Object definition.
18  *
19  * @see GeneratedTransferObject
20  */
21 public interface GeneratedTOBuilder extends GeneratedTypeBuilderBase<GeneratedTOBuilder>,
22         Builder<GeneratedTransferObject> {
23
24     /**
25      * Add Generated Transfer Object from which will be extended current
26      * Generated Transfer Object. <br>
27      * By definition Java does not allow multiple inheritance, hence if there is
28      * already definition of Generated Transfer Object the extending object will
29      * be overwritten by lastly added Generated Transfer Object. <br>
30      * If Generated Transfer Object is <code>null</code> the method SHOULD throw
31      * {@link IllegalArgumentException}
32      *
33      * @param genTransObj
34      *            Generated Transfer Object
35      * @return This instance of builder
36      */
37     GeneratedTOBuilder setExtendsType(final GeneratedTransferObject genTransObj);
38
39     /**
40      * Add Property that will be part of <code>equals</code> definition. <br>
41      * If Generated Property Builder is <code>null</code> the method SHOULD
42      * throw {@link IllegalArgumentException}
43      *
44      * @param property
45      *            Generated Property Builder
46      * @return This instance of builder
47      */
48     GeneratedTOBuilder addEqualsIdentity(final GeneratedPropertyBuilder property);
49
50     /**
51      * Add Property that will be part of <code>hashCode</code> definition. <br>
52      * If Generated Property Builder is <code>null</code> the method SHOULD
53      * throw {@link IllegalArgumentException}
54      *
55      * @param property
56      *            Generated Property Builder
57      * @return This instance of builder
58      */
59     GeneratedTOBuilder addHashIdentity(final GeneratedPropertyBuilder property);
60
61     /**
62      * Add Property that will be part of <code>toString</code> definition. <br>
63      * If Generated Property Builder is <code>null</code> the method SHOULD
64      * throw {@link IllegalArgumentException}
65      *
66      * @param property
67      *            Generated Property Builder
68      * @return This instance of builder
69      */
70     GeneratedTOBuilder addToStringProperty(final GeneratedPropertyBuilder property);
71
72     void setRestrictions(Restrictions restrictions);
73
74     /**
75      * Returns instance of <code>GeneratedTransferObject</code> which data are
76      * build from the data of this builder
77      *
78      * @return generated transfer object instance
79      */
80     @Override
81     GeneratedTransferObject build();
82
83     void setTypedef(boolean isTypedef);
84
85     /**
86      * Sets the base type for Java representation of YANG typedef
87      *
88      * @param typeDef
89      *           Type Definition
90      */
91     void setBaseType(TypeDefinition<?> typeDef);
92
93     boolean isUnion();
94
95     /**
96      *
97      * @param isUnion
98      */
99     void setIsUnion(boolean isUnion);
100
101     void setIsUnionBuilder(boolean isUnionTypeBuilder);
102
103     void setSUID(GeneratedPropertyBuilder suid);
104 }