Marc-andre Thibodeau typed the following on 11:02 AM 7/6/2001 -0400
>Could anybody suggest me a tool for generating JavaBeans setters and
>getters automatically?

Here's a cheap tool:

#!/usr/local/bin/perl -w
#
#  Program: makeAccessors
#
#  Description:
#     Feed a bunch of Java property declarations into STDIN, get a
#     bunch of setter/getter methods on STDOUT. Ignores anything
#     which doesn't look like a property declaration (comments, etc.)
#     So you can be pretty careless of what you put in, even just
#     feeding it a .java file.
#
#     For Hashtable and Vector properties, the types for parameters
#     and return values are defined as "My<property>ValueType" and
#     My<property>KeyType, so you will have to replaces these with
#     whatever types you want for keys and values.
#
#  Author:
#     Kief Morris <[EMAIL PROTECTED]>
#
#  Sorry, no code comments!

while (<STDIN>) {
        if ( /^ \s* (private|protected|public) \s* (\S+) \s* (\S+) /x )
        {
                my ($type, $name) = ($2, $3);
                if ($type eq 'Hashtable') {
                        PrintHashtableGetter($type, $name);
                        PrintHashtableSetter($type, $name);
                } elsif ($type eq 'Vector') {
                        PrintVectorGetter($type, $name);
                        PrintVectorSetter($type, $name);
                } elsif ($type eq 'List') {
                        PrintListGetter($type, $name);
                        PrintListSetter($type, $name);
                } elsif ($type eq 'boolean') {
                        PrintBooleanGetter($type, $name);
                        PrintSetter($type, $name);
                } else {
                        PrintGetter ($type, $name);
                        PrintSetter ($type, $name);
                }
        }
}

sub PrintGetter 
{
        my ($type, $name) = @_;

        my $getName = "get\u$name";
        $getName =~ s/_([a-z])/"\U$1"/ge;
        
        print "\t/**\tGet $name\n\t*/\n";
        print "\tpublic $type $getName()\n";
        print "\t{\n\n";
        print "\t\treturn $name;\n\n";
        print "\t}\n\n";
}

sub PrintSetter
{
        my ($type, $name) = @_;

        my $setName = "set\u$name";
        $setName =~ s/_([a-z])/"\U$1"/ge;
        
        print "\t/**\tSet $name\n\t*/\n";
        print "\tpublic void $setName ($type $name)\n";
        print "\t{\n\n";
        print "\t\tthis.$name = $name;\n\n";
        print "\t}\n\n";
}

sub PrintHashtableGetter 
{
        my ($type, $name) = @_;

        my $getName = "get\u$name";
        $getName =~ s/_([a-z])/"\U$1"/ge;
        
        print "\t/**\tGet $name Enumeration\n\t*/\n";
        print "\tpublic Enumeration $getName()\n";
        print "\t{\n";
        print "\t\treturn $name != null ? $name.keys() : null;\n";
        print "\t}\n\n";

        $getName =~ s/s$//;
        print "\t/**\tGet $name element\n\t*/\n";
        print "\tpublic My${name}ValueType $getName(My${name}KeyType key)\n";
        print "\t{\n";
        print "\t\treturn $name != null ? (My${name}ValueType) $name.get(key) : 
null;\n";
        print "\t}\n\n";

}

sub PrintHashtableSetter
{
        my ($type, $name) = @_;

        my $putName = "put\u$name";
        $putName =~ s/_([a-z])/"\U$1"/ge;
        $putName =~ s/s$//;
        
        print "\t/**\tPut $name\n\t*/\n";
        print "\tpublic void $putName (My${name}KeyType key, My${name}ValueType 
value)\n";
        print "\t{\n";
        print "\t\tif ($name == null)\n\t\t\t$name = new Hashtable();\n";
        print "\t\t$name.put (key, value);\n";
        print "\t}\n\n";

        my $rmName = $putName;
        $rmName =~ s/^put/remove/;
        
        print "\t/**\tRemove $name\n\t*/\n";
        print "\tpublic void $rmName (My${name}KeyType key)\n";
        print "\t{\n";
        print "\t\tif ($name == null)\n\t\t\treturn;\n";
        print "\t\t$name.remove (key);\n";
        print "\t}\n\n";
}

sub PrintVectorGetter 
{
        my ($type, $name) = @_;

        my $getName = "get\u$name";
        $getName =~ s/_([a-z])/"\U$1"/ge;
        
        print "\t/**\tGet $name Enumeration\n\t*/\n";
        print "\tpublic Enumeration $getName()\n";
        print "\t{\n";
        print "\t\treturn $name != null ? $name.elements() : null;\n";
        print "\t}\n\n";
}

sub PrintVectorSetter
{
        my ($type, $name) = @_;

        my $addName = "add\u$name";
        $addName =~ s/_([a-z])/"\U$1"/ge;
        $addName =~ s/s$//;
        
        print "\t/**\tAdd $name\n\t*/\n";
        print "\tpublic void $addName (My${name}ValueType value)\n";
        print "\t{\n";
        print "\t\tif ($name == null)\n\t\t\t$name = new Vector();\n";
        print "\t\tif (!$name.contains(value))\n";
        print "\t\t\t$name.addElement (value);\n";
        print "\t}\n\n";
}

sub PrintListGetter 
{
        my ($type, $name) = @_;

        my $getName = "get\u$name";
        $getName =~ s/_([a-z])/"\U$1"/ge;
        
        print "\t/**\tGet $name Iterator\n\t*/\n";
        print "\tpublic Iterator $getName()\n";
        print "\t{\n\n";
        print "\t\treturn $name != null ? $name.iterator() : null;\n\n";
        print "\t}\n\n";
}

sub PrintListSetter
{
        my ($type, $name) = @_;

        my $addName = "add\u$name";
        $addName =~ s/_([a-z])/"\U$1"/ge;
        $addName =~ s/s$//;
        
        print "\t/**\tAdd $name\n\t*/\n";
        print "\tpublic void $addName (My${name}ValueType value)\n";
        print "\t{\n\n";
        print "\t\t$name.add (value);\n\n";
        print "\t}\n\n";
}

sub PrintBooleanGetter 
{
        my ($type, $name) = @_;

        my $getName = "is\u$name";
        $getName =~ s/_([a-z])/"\U$1"/ge;
        
        print "\t/**\tGet $name\n\t*/\n";
        print "\tpublic $type $getName()\n";
        print "\t{\n";
        print "\t\treturn $name;\n";
        print "\t}\n\n";
}

Reply via email to