I've written the following dumb perl script to generate a dia file
from my database table layout (pretending that each table is a UML object
with just attributes). So, I run this, and try to read the resulting
file. I get "Error loading diagram: /tmp/dbinfo Unknown file
type". What am I doing wrong?
I suspect that the problem has to do with not knowing up-front what
the width/heights should be for everything. How do I calculate those,
if I don't know the font, etc?
#!/usr/bin/perl
while(<>) {
if (/^CREATE\s+TABLE\s+(\w+)\s*\(/) {
$table = $1;
} elsif (/^\s*--/) {
next;
} elsif (/^\s*(\w+)\s+(.*),\s*$/) {
push @{$data{$table}}, [$1,$2];
} elsif (/^\s*(\w+)\s+(.*\S)\s*$/) {
push @{$data{$table}}, [$1,$2];
} else {
}
}
print q{<?xml version="1.0"?>
<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
<dia:diagramdata>
<dia:attribute name="background">
<dia:color val="#ffffff"/>
</dia:attribute>
</dia:diagramdata>
<dia:layer name="Background" visible="true">
};
$i=1;
foreach $table (sort keys %data) {
last if $i > 10;
$x = $y = $i/5+2;
print qq{ <dia:object type="UML - Class" version="0" id="O},$i-1,qq{">
<dia attribute name="obj_pos">
<dia:point val="$x,$y"/>
</dia:attribute>
};
# print qq{ <dia:attribute name="obj_bb">
# <dia:rectangle val="$x,$y;25.666,12.65"/>
# </dia:attribute>
# <dia:attribute name="elem_corner">
# <dia:point val="$x,$y"/>
# </dia:attribute>
# <dia:attribute name="elem_width">
# <dia:real val="22.616"/>
# </dia:attribute>
# <dia:attribute name="elem_height">
# <dia:real val="10.4"/>
# </dia:attribute>
#};
print qq{ <dia:attribute name="name">\n
<dia:string>\#$table\#</dia:string>
</dia:attribute>
<dia:attribute name="stereotype">
<dia:string/>
</dia:attribute>
<dia:attribute name="abstract">
<dia:boolean val="false"/>
</dia:attribute>
<dia:attribute name="suppress_attributes">
<dia:boolean val="false"/>
</dia:attribute>
<dia:attribute name="suppress_operations">
<dia:boolean val="false"/>
</dia:attribute>
<dia:attribute name="visible_attributes">
<dia:boolean val="true"/>
</dia:attribute>
<dia:attribute name="visible_operations">
<dia:boolean val="false"/>
</dia:attribute>
<dia:attribute name="attributes">
};
foreach $attr (@{$data{$table}}) {
($name,$type) = @$attr;
print qq{ <dia:composite type="umlattribute">
<dia:attribute name="name">
<dia:string>\#$name\#</dia:string>
</dia:attribute>
<dia:attribute name="type">
<dia:string>\#$type\#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string/>
</dia:attribute>
<dia:attribute name="visibility">
<dia:enum val="0"/>
</dia:attribute>
<dia:attribute name="abstract">
<dia:boolean val="false"/>
</dia:attribute>
<dia:attribute name="class_scope">
<dia:boolean val="false"/>
</dia:attribute>
</dia:composite>
};
}
print q{ </dia:attribute>
<dia:attribute name="operations"/>
<dia:attribute name="template">
<dia:boolean val="false"/>
</dia:attribute>
<dia:attribute name="templates"/>
</dia:object>
};
$i++;
}
print q{ </dia:layer>
</dia:diagram>
};