Do not generate union builders
[mdsal.git] / binding / mdsal-binding-model-api / src / main / java / org / opendaylight / mdsal / binding / model / api / GeneratedTransferObject.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;
9
10 import java.util.List;
11 import java.util.Optional;
12 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
13
14 /**
15  * Generated Transfer Object extends {@link GeneratedType} and is designed to represent Java Class. The Generated
16  * Transfer Object contains declarations of member fields stored in List of Properties. The Generated Transfer Object
17  * can be extended by exactly ONE Generated Transfer Object as Java does not allow multiple inheritance. For retrieval
18  * of implementing Generated Types use {@link #getImplements()} method.<br>
19  * Every transfer object SHOULD contain equals, hashCode and toString definitions. For this purpose retrieve definitions
20  * through {@link #getEqualsIdentifiers ()}, {@link #getHashCodeIdentifiers()} and
21  * {@link #getToStringIdentifiers()}.
22  */
23 public interface GeneratedTransferObject extends GeneratedType {
24
25     GeneratedProperty getSUID();
26
27     /**
28      * Returns the Generated Transfer Object from which this GTO is derived, or null if this GTO is not derived
29      * from a GTO -- e.g. it is either an union or it is derived from a concrete type.
30      *
31      * @return Generated Transfer Object or <code>null</code> if this GTO is not derived from another GTO.
32      */
33     GeneratedTransferObject getSuperType();
34
35     /**
36      * Returns List of Properties that are designated to define equality for Generated Transfer Object.
37      *
38      * @return List of Properties that are designated to define equality for Generated Transfer Object.
39      */
40     List<GeneratedProperty> getEqualsIdentifiers();
41
42     /**
43      * Returns List of Properties that are designated to define identity for Generated Transfer Object.
44      *
45      * @return List of Properties that are designated to define identity for Generated Transfer Object.
46      */
47     List<GeneratedProperty> getHashCodeIdentifiers();
48
49     /**
50      * Returns List of Properties that will be members of toString definition for Generated Transfer Object.
51      *
52      * @return List of Properties that will be members of toString definition for Generated Transfer Object.
53      */
54     List<GeneratedProperty> getToStringIdentifiers();
55
56     boolean isTypedef();
57
58     /**
59      * Returns Base type of Java representation of YANG typedef if set, otherwise it returns null.
60      *
61      * @return Base type of Java representation of YANG typedef if set, otherwise it returns null
62      */
63     TypeDefinition<?> getBaseType();
64
65     /**
66      * Return boolean value which describe whether Generated Transfer Object was created (or not) from union YANG type.
67      *
68      * @return true value if Generated Transfer Object was created from union YANG type.
69      */
70     boolean isUnionType();
71
72     Restrictions getRestrictions();
73
74     default Optional<? extends GeneratedProperty> findProperty(final String name) {
75         final Optional<GeneratedProperty> optProp = getProperties().stream()
76                 .filter(prop -> prop.getName().equals(name)).findFirst();
77         if (optProp.isPresent()) {
78             return optProp;
79         }
80
81         final GeneratedTransferObject parent = getSuperType();
82         return parent != null ? parent.findProperty(name) : Optional.empty();
83     }
84 }