#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
}
