Index: /trunk/glueforge/glueforge.in
===================================================================
--- /trunk/glueforge/glueforge.in	(revision 5960)
+++ /trunk/glueforge/glueforge.in	(revision 5961)
@@ -3,5 +3,5 @@
 # Copyright (C) 2005  Joshua Hoblitt
 #
-# $Id: glueforge.in,v 1.39 2006-01-10 00:38:15 jhoblitt Exp $
+# $Id: glueforge.in,v 1.40 2006-01-10 22:49:37 jhoblitt Exp $
 
 use strict;
@@ -42,5 +42,5 @@
 my $data; # hashref
 if ($complex) {
-#    $data = complex_config($config);
+    $data = complex_config($config);
 } else {
     $data = simple_config($config);
@@ -205,4 +205,75 @@
 }
 
+sub complex_config {
+    my $config = shift;
+
+    # find the glueforge metadata
+    my $glueforge_meta;
+    for (my $i = 0; $i < @{$config}; $i++) {
+        my $elem = $config->[$i];
+
+        if ($elem->{name} eq "glueforge") {
+            $glueforge_meta = $elem;
+
+            # delete element from array
+            splice @$config, $i, 1;
+
+            last;
+        }
+    }
+
+    die "missing glueforge METADATA" unless defined $glueforge_meta;
+
+    my %data;
+
+    # global data
+    my $pkg_name = $glueforge_meta->{value}->[0]->{value};
+    $data{pkg_name}         = $pkg_name . "db";
+    $data{pkg_namespace}    = $pkg_name;
+
+    # setup one table per nested metadata
+    my @tables;
+    foreach my $meta (@{$config}) {
+        push @tables, tabledata_from_meta($meta);
+    }
+
+    $data{tables} = \@tables;
+
+    return \%data;
+}
+
+sub tabledata_from_meta {
+    my $meta = shift;   # hashref
+
+    die "not a valid metadata" unless $meta->{class} eq 'metadata';
+
+    my $table_name = $meta->{name};
+
+    my @fields;
+    foreach my $column (@{$meta->{value}}) {
+        my $mdtypes = lookup_type( $column->{type} );
+        next if not defined $mdtypes;
+
+        push @fields, {
+            name    => $column->{name},
+            type    => $column->{type},
+            ctype   => $mdtypes->{ctype},
+            mtype   => $mdtypes->{mtype},
+            test    => $mdtypes->{test},
+            comment => $column->{comment},
+            value   => $column->{value},
+        };
+    }
+
+    my %table = (
+        name        => $table_name,
+        namespace   => $table_name,
+        object_name => $table_name . "Row",
+        columns     => \@fields,
+    );
+
+    return \%table;
+}
+
 __END__
 
