package test_pcg;

sub bean_chainable {
    my ($tabs, $name, %slots) = @_;
    my $spaces = '  ' x $tabs;
    print "${spaces}public class ${name} {\n";
    print "${spaces}  public ${name}() {}\n";
    foreach my $slot_name (keys(%slots)) {
        my $slot_type = $slots{$slot_name};
        my $uc_slot_name = uc(substr($slot_name, 0, 1)) .
            substr($slot_name, 1, length($slot_name) - 1);
        print "\n${spaces}  private ${slot_type} ${slot_name}_;\n";
        print "${spaces}  public ${slot_type} get${uc_slot_name}() {\n";
        print "${spaces}    return this.${slot_name}_;\n";
        print "${spaces}  }\n";
        print "${spaces}  public ${name} set${uc_slot_name}" .
            "(${slot_type} ${slot_name}) {\n";
        print "${spaces}    this.${slot_name}_ = ${slot_name};\n";
        print "${spaces}    return this;\n";
        print "${spaces}  }\n";
    }
    print "${spaces}}\n";
}

1;