#!/usr/bin/perl
# This reads the passed object directories, and generates a nice
# graphviz graph on stdout. Use it like:
#   find dir -type d | graphhelp | dot

use Mooix::Thing;

print "digraph objects {\n";

my $objnames;
my %parent;
my %names;
my %shape;

sub getshape {
	my $dir=shift;

	return 'box' if /\/concrete\// or /\/contrib\//;
	return 'parallelogram' if /\/system\//;
	return 'triangle' if /\/mixin\//;
	return 'ellipse';
}

while (<>) {
	chomp;
	my $dir=$_;
	my $obj=Mooix::Thing->get($dir);
	my $id=$obj->index;
	
	my $basename=$obj->name;
	if (! length $basename) {
		($basename) = $dir =~ /.*\/(.*)$/;
	}
	my $name=$basename;
	my $c=0;
	while (exists $names{$name}) {
		$name=$basename." (".++$c.")";
	}
	$names{$name}=1;
	$objnames{$id}=$name;
	$shape{$id}=getshape($dir);
	if ($obj->parent) {
		$parent{$id}=$obj->parent->index;
	}
}

foreach my $obj (sort keys %objnames) {
	print "\t\"$objnames{$obj}\" [ shape=$shape{$obj} ];\n";
	print "\t\"".$objnames{$obj}."\" -> \"".
	      $objnames{$parent{$obj}}."\" [] ;\n" if $parent{$obj};
}

print "}\n";
