package tiny;

public class @
//note: swapping to script mode: the value of \textit{this.name} is put into the output file,
//note: knowing that the variable \textit{this} is determined by the second parameter that is
//note: passed to the procedure \samp{generate} (see section \ref{generate()} and below). If
//note: the notation appears confusing to you (where does the writing mode ends, where does
//note: the script mode starts or the contrary), you can choose to inlay the variables in tags
//note: \textbf{'<\%'} and \textbf{'\%>'}.
//merge:
this.name@ @
//note: swapping once again to script mode for writing the inheritance, if any
if existVariable(this.parent) {
	@ extends @this.parent.name@ @
}
//note: swapping to text mode,
@{
	// attributes:
@
//note: we'll need a function to convert a type specifier of the tiny modeling language to JAVA,
//note: which expects the attribute's node (parameter mode is \samp{variable}, instead of \samp{value}),
function getJAVAType(myAttribute : node) {
	local sType = myAttribute.class.name;
	if myAttribute.isArray {
//note: we have chosen \samp{java.util.ArrayList} to represent an array, why not?
		set sType = "java.util.ArrayList/*<" + sType + ">*/";
	}
	return sType;
}

//note: swapping to script mode for declaring the attributes of the class
foreach i in this.listOfAttributes {
	@	private @getJAVAType(i)@ _@i.name@ = null;
@
}
//note: swapping to text mode for putting the constructor into the output file,
@
	//constructor:
	public @this.name@() {
	}

	// accessors:
@
//note: swapping to script mode for implementing the accessors to the attributes of the class
foreach i in this.listOfAttributes {
//note: the predefined function \samp{toUpperString} capitalizes the parameter,
	@	public @getJAVAType(i)@ get@toUpperString(i.name)@() { return _@i.name@; }
	public void set@toUpperString(i.name)@(@getJAVAType(i)@ @i.name@) { _@i.name@ = @i.name@; }
@
}
//note: the procedure \samp{setProtectedArea} (see section \ref{setProtectedArea()}) adds
//note: a protected area that is intended to the user and that is preserved during a
//note: generation process,
setProtectedArea("Methods");
//note: swapping to text mode for writing the trailing brace,
@}
