#2 Parameterized Enum 1
Generation of a enum with a string parameter.
- Download:
- source code Project Files in Zip (93.7 KB)
- mp4 Full Size H.264 Video (29.4 MB)
- m4v Smaller H.264 Video (16.9 MB)
- webm Full Size VP8 Video (17.5 MB)
- ogv Full Size Theora Video (34.5 MB)
Xtext grammer:
xtext
Model:
(
penums += PEnum
)*
;
PEnum:
'enum' name = ID
'{'
(
elements += PEnumElement
)*
'}'
;
PEnumElement:
name=ID
(
alternateText = STRING
)?
;
Model:
(
penums += PEnum
)*
;
PEnum:
'enum' name = ID
'{'
(
elements += PEnumElement
)*
'}'
;
PEnumElement:
name=ID
(
alternateText = STRING
)?
;Xtend code generator:
xtend
override void doGenerate(Resource resource, IFileSystemAccess fsa) {
for (model : resource.contents.filter(typeof(Model))) {
for (penum : model.penums) {
fsa.generateFile(penum.name + ".java", penum.generatePEnum)
}
}
}
def generatePEnum(PEnum penum) {'''
public enum «penum.name» {
«FOR element : penum.elements»
«element.name»("«element.text»"),
«ENDFOR»
;
private String text;
private «penum.name»(String text) {
this.text = text;
}
public String getText() {
return text;
}
}
'''}
def text(PEnumElement element) {
if (element.alternateText != null) {
element.alternateText
} else {
element.name.toLowerCase.toFirstUpper.replace("_", " ")
}
}
override void doGenerate(Resource resource, IFileSystemAccess fsa) { for (model : resource.contents.filter(typeof(Model))) { for (penum : model.penums) { fsa.generateFile(penum.name + ".java", penum.generatePEnum) } } } def generatePEnum(PEnum penum) {''' public enum «penum.name» { «FOR element : penum.elements» «element.name»("«element.text»"), «ENDFOR» ; private String text; private «penum.name»(String text) { this.text = text; } public String getText() { return text; } } '''} def text(PEnumElement element) { if (element.alternateText != null) { element.alternateText } else { element.name.toLowerCase.toFirstUpper.replace("_", " ") } }
PEnum DSL:
penum
enum Page {
INTRO "Introduction"
NAME_AND_ADDRESS
SUBMIT
}
enum Page {
INTRO "Introduction"
NAME_AND_ADDRESS
SUBMIT
}
