38097e1f303344489a932cd317825b95db80d8c2
[mdsal.git] / binding / mdsal-binding-model-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.eclipse.jdt.annotation.NonNull;
11 import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
12 import org.opendaylight.mdsal.binding.model.api.Restrictions;
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
23     /**
24      * Add Generated Transfer Object from which will be extended current Generated Transfer Object.<br>
25      * By definition Java does not allow multiple inheritance, hence if there is already a definition
26      * of an Generated Transfer Object the extending object will be overwritten by lastly added Generated Transfer
27      * Object.<br>
28      * If Generated Transfer Object is <code>null</code> the method SHOULD throw {@link IllegalArgumentException}
29      *
30      * @param genTransObj Generated Transfer Object
31      * @return This instance of builder
32      */
33     GeneratedTOBuilder setExtendsType(GeneratedTransferObject genTransObj);
34
35     /**
36      * Add Property that will be part of <code>equals</code> definition. <br>
37      * If Generated Property Builder is <code>null</code> the method SHOULD
38      * throw {@link IllegalArgumentException}
39      *
40      * @param property Generated Property Builder
41      * @return This instance of builder
42      */
43     GeneratedTOBuilder addEqualsIdentity(GeneratedPropertyBuilder property);
44
45     /**
46      * Add Property that will be part of <code>hashCode</code> definition. <br>
47      * If Generated Property Builder is <code>null</code> the method SHOULD
48      * throw {@link IllegalArgumentException}
49      *
50      * @param property Generated Property Builder
51      * @return This instance of builder
52      */
53     GeneratedTOBuilder addHashIdentity(GeneratedPropertyBuilder property);
54
55     /**
56      * Add Property that will be part of <code>toString</code> definition. <br>
57      * If Generated Property Builder is <code>null</code> the method SHOULD
58      * throw {@link IllegalArgumentException}
59      *
60      * @param property Generated Property Builder
61      * @return This instance of builder
62      */
63     GeneratedTOBuilder addToStringProperty(GeneratedPropertyBuilder property);
64
65     void setRestrictions(Restrictions restrictions);
66
67     /**
68      * Returns instance of <code>GeneratedTransferObject</code> which data are build from the data of this builder.
69      *
70      * @return generated transfer object instance
71      */
72     @NonNull GeneratedTransferObject build();
73
74     void setTypedef(boolean isTypedef);
75
76     /**
77      * Sets the base type for Java representation of YANG typedef.
78      *
79      * @param typeDef Type Definition
80      */
81     void setBaseType(TypeDefinition<?> typeDef);
82
83     boolean isUnion();
84
85     /**
86      * Sets the union flag.
87      *
88      * @param isUnion true if the result is a union type.
89      */
90     void setIsUnion(boolean isUnion);
91
92     void setIsUnionBuilder(boolean isUnionTypeBuilder);
93
94     void setSUID(GeneratedPropertyBuilder suid);
95 }