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";
}