Integrate JavaTypeName as Identifier
[mdsal.git] / binding / mdsal-binding-generator-util / src / main / java / org / opendaylight / mdsal / binding / model / util / generated / type / builder / CodegenEnumerationBuilder.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.util.generated.type.builder;
9
10 import static java.util.Objects.requireNonNull;
11
12 import java.util.Optional;
13 import org.opendaylight.mdsal.binding.model.api.Enumeration;
14 import org.opendaylight.mdsal.binding.model.api.Type;
15 import org.opendaylight.mdsal.binding.model.api.TypeComment;
16 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
17 import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
20 import org.opendaylight.yangtools.yang.model.api.Status;
21
22 public final class CodegenEnumerationBuilder extends AbstractEnumerationBuilder {
23     private String description;
24     private String reference;
25     private String moduleName;
26     private SchemaPath schemaPath;
27
28     public CodegenEnumerationBuilder(final JavaTypeName identifier) {
29         super(identifier);
30     }
31
32     @Override
33     public void setReference(final String reference) {
34         this.reference = reference;
35     }
36
37     @Override
38     public void setModuleName(final String moduleName) {
39         this.moduleName = moduleName;
40     }
41
42     @Override
43     public void setSchemaPath(final SchemaPath schemaPath) {
44         this.schemaPath = schemaPath;
45     }
46
47     @Override
48     public void setDescription(final String description) {
49         this.description = description;
50
51     }
52
53     @Override
54     public Enumeration toInstance(final Type definingType) {
55         return new EnumerationImpl(this, definingType);
56     }
57
58     @Override
59     EnumPair createEnumPair(final String name, final String mappedName, final int value, final Status status,
60             final String description, final String reference) {
61         return new EnumPair(name, mappedName, value, status, description, reference);
62     }
63
64     private static final class EnumPair extends AbstractPair {
65         private final String description;
66         private final String reference;
67         private final Status status;
68
69         EnumPair(final String name, final String mappedName, final int value, final Status status, final String description,
70             final String reference) {
71             super(name, mappedName, value);
72             this.status = requireNonNull(status);
73             this.description = description;
74             this.reference = reference;
75         }
76
77         @Override
78         public Optional<String> getDescription() {
79             return Optional.ofNullable(description);
80         }
81
82         @Override
83         public Optional<String> getReference() {
84             return Optional.ofNullable(reference);
85         }
86
87         @Override
88         public Status getStatus() {
89             return status;
90         }
91     }
92
93     private static final class EnumerationImpl extends AbstractEnumeration {
94
95         private final String description;
96         private final String reference;
97         private final String moduleName;
98         private final SchemaPath schemaPath;
99
100         EnumerationImpl(final CodegenEnumerationBuilder builder, final Type definingType) {
101             super(builder, definingType);
102             this.description = builder.description;
103             this.moduleName = builder.moduleName;
104             this.schemaPath = builder.schemaPath;
105             this.reference = builder.reference;
106         }
107
108         @Override
109         public TypeComment getComment() {
110             return null;
111         }
112
113         @Override
114         public String getDescription() {
115             return this.description;
116         }
117
118         @Override
119         public String getReference() {
120             return this.reference;
121         }
122
123         @Override
124         public Iterable<QName> getSchemaPath() {
125             return this.schemaPath.getPathFromRoot();
126         }
127
128         @Override
129         public String getModuleName() {
130             return this.moduleName;
131         }
132
133         @Override
134         public Optional<YangSourceDefinition> getYangSourceDefinition() {
135             return Optional.empty();
136         }
137     }
138 }