87a037ad32741eed30a4f9586b03f56c4477318f
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Schema / Graph / Node.pm
1 package SQL::Translator::Schema::Graph::Node;
2
3 use strict;
4 use warnings;
5
6 use Class::MakeMethods::Template::Hash (
7   new => [ 'new' ],
8   'array_of_objects -class SQL::Translator::Schema::Graph::Edge' => [ qw( edges ) ],
9   'array_of_objects -class SQL::Translator::Schema::Graph::CompoundEdge' => [ qw( compoundedges ) ],
10   'array_of_objects -class SQL::Translator::Schema::Graph::HyperEdge' => [ qw( hyperedges ) ],
11   #'hash' => [ qw( many via has edgecount data_fields) ],
12   #'hash' => [ qw( many via has data_fields) ],
13   scalar => [ qw( base name order primary_key primary_key_accessor table is_trivial_link ) ],
14   number => [ qw( order ) ],
15 );
16
17 sub many {
18   my($self) = shift;
19
20   $self->{_many} ||= {};
21
22   if(scalar(@_) == 1){
23     my $k = shift;
24     return $self->{_many}{$k} || 0;
25   } elsif(@_) {
26     my %arg = @_;
27
28     foreach my $k (keys %arg){
29       #warn $a,"\t",$arg{$k};
30       $self->{_many}{$k} = $arg{$k};
31     }
32
33     return %arg;
34   } else {
35     return $self->{_many};
36   }
37 }
38
39 sub via {
40   my($self) = shift;
41
42   $self->{_via} ||= {};
43
44   if(scalar(@_) == 1){
45     my $k = shift;
46     return $self->{_via}{$k} || 0;
47   } elsif(@_) {
48     my %arg = @_;
49
50     foreach my $k (keys %arg){
51       #warn $a,"\t",$arg{$k};
52       $self->{_via}{$k} = $arg{$k};
53     }
54
55     return %arg;
56   } else {
57     return $self->{_via};
58   }
59 }
60
61 sub has {
62   my($self) = shift;
63
64   $self->{_has} ||= {};
65
66   if(scalar(@_) == 1){
67     my $k = shift;
68     return $self->{_has}{$k} || 0;
69   } elsif(@_) {
70     my %arg = @_;
71
72     foreach my $k (keys %arg){
73       #warn $a,"\t",$arg{$k};
74       $self->{_has}{$k} = $arg{$k};
75     }
76
77     return %arg;
78   } else {
79     return $self->{_has};
80   }
81 }
82
83 sub edgecount {
84   my($self) = shift;
85
86   $self->{_edgecount} ||= {};
87
88   if(scalar(@_) == 1){
89     my $k = shift;
90     return $self->{_edgecount}{$k} || 0;
91   } elsif(@_) {
92     my %arg = @_;
93
94     foreach my $k (keys %arg){
95       #warn $a,"\t",$arg{$k};
96       $self->{_edgecount}{$k} = $arg{$k};
97     }
98
99     return %arg;
100   } else {
101     return $self->{_edgecount};
102   }
103 }
104
105 sub data_fields {
106   my($self) = shift;
107
108   $self->{_data_fields} ||= {};
109
110   if(scalar(@_) == 1){
111     my $k = shift;
112     return $self->{_data_fields}{$k};
113   } elsif(@_) {
114     my %arg = @_;
115
116     foreach my $k (keys %arg){
117       #warn $a,"\t",$arg{$k};
118       $self->{_data_fields}{$k} = $arg{$k};
119     }
120
121     return %arg;
122   } else {
123     return $self->{_data_fields};
124   }
125 }
126
127 1;