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:
name@ @
//note: swapping once again to script mode for writing the inheritance, if any
if existVariable(parent) {
    @ extends @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 : variable) {
    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 listOfAttributes {
    @    private @getJAVAType(i)@ _@i.name@ = null;
@
}
//note: swapping to text mode for putting the constructor into the output file,
@
    //constructor:
    public @i.name@() {
    }

    // accessors:
@
//note: swapping to script mode for implementing the accessors to the attributes of the class
foreach i in 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,
@}