-
Notifications
You must be signed in to change notification settings - Fork 234
/
Copy pathCodeEnumWriter.cs
52 lines (50 loc) · 2.46 KB
/
CodeEnumWriter.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System.Linq;
using Kiota.Builder.CodeDOM;
using Kiota.Builder.Extensions;
namespace Kiota.Builder.Writers.Java;
public class CodeEnumWriter : BaseElementWriter<CodeEnum, JavaConventionService>
{
public CodeEnumWriter(JavaConventionService conventionService) : base(conventionService) { }
public override void WriteCodeElement(CodeEnum codeElement, LanguageWriter writer)
{
var enumOptions = codeElement.Options.ToArray();
if (!enumOptions.Any())
return;
var enumName = codeElement.Name.ToFirstCharacterUpperCase();
writer.WriteLines($"package {(codeElement.Parent as CodeNamespace)?.Name};",
string.Empty,
"import com.microsoft.kiota.serialization.ValuedEnum;",
"import java.util.Objects;",
string.Empty);
conventions.WriteShortDescription(codeElement.Documentation.Description, writer);
writer.WriteLine($"public enum {enumName} implements ValuedEnum {{");
writer.IncreaseIndent();
var lastEnumOption = enumOptions.Last();
foreach (var enumOption in enumOptions)
{
conventions.WriteShortDescription(enumOption.Documentation.Description, writer);
writer.WriteLine($"{enumOption.Name.ToFirstCharacterUpperCase()}(\"{enumOption.SerializationName}\"){(enumOption == lastEnumOption ? ";" : ",")}");
}
writer.WriteLines("public final String value;",
$"{enumName}(final String value) {{");
writer.IncreaseIndent();
writer.WriteLine("this.value = value;");
writer.DecreaseIndent();
writer.WriteLines("}",
"@javax.annotation.Nonnull",
"public String getValue() { return this.value; }",
"@javax.annotation.Nullable",
$"public static {enumName} forValue(@javax.annotation.Nonnull final String searchValue) {{");
writer.IncreaseIndent();
writer.WriteLines("Objects.requireNonNull(searchValue);",
"switch(searchValue) {");
writer.IncreaseIndent();
writer.Write(enumOptions
.Select(x => $"case \"{x.WireName}\": return {x.Name.ToFirstCharacterUpperCase()};")
.Aggregate((x, y) => $"{x}{LanguageWriter.NewLine}{writer.GetIndent()}{y}") + LanguageWriter.NewLine);
writer.WriteLine("default: return null;");
writer.CloseBlock();
writer.CloseBlock();
writer.CloseBlock();
}
}