]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/perlmods/OpenILS/Application/Cat/Utils.pm
fixed logic error in adding children to the tree
[Evergreen.git] / Open-ILS / src / perlmods / OpenILS / Application / Cat / Utils.pm
1 package OpenILS::Application::Cat::Utils;
2 use strict; use warnings;
3 use OpenILS::Utils::Fieldmapper;
4
5 # ---------------------------------------------------------------------------
6 # Converts an XML nodeset into a tree
7 sub nodeset2tree {
8         my($class, $nodeset) = @_;
9
10         my $size = @$nodeset;
11         for my $index (0..$size) {
12
13                 my $child = $nodeset->[$index];
14                 next unless $child;
15
16                 if( defined($child->parent_node) ) {
17                         my $parent = $nodeset->[$child->parent_node];
18                         $parent->children( 
19                                         [ @{$parent->children() ? $parent->children() : [] }, $child ]);
20                 }
21         }
22         return $nodeset->[0];
23 }
24
25 # ---------------------------------------------------------------------------
26 # Converts a tree into an xml nodeset
27
28 my @_nodelist = ();
29 sub tree2nodeset {
30         my($self, $node) = @_;
31
32         if((ref($node) eq "ARRAY")) {
33                 $node = Fieldmapper::biblio::record_node->new($node);
34         }
35
36         return \@_nodelist unless $node;
37
38         if(!defined($node->parent_node)) {
39                 @_nodelist = ();
40         }
41
42         push( @_nodelist, $node );
43
44         if( $node->children() ) {
45
46                 for my $child (@{ $node->children() }) {
47
48                         next unless $child;
49                         $child = 
50                                 Fieldmapper::biblio::record_node->new($child);
51         
52                         if(!defined($child->parent_node)) {
53                                 $child->parent_node($node->intra_doc_id);
54                                 $child->ischanged(1); #just to be sure
55                         }
56         
57                         $self->tree2nodeset( $child );
58                 }
59         }
60
61         $node->children(undef);
62         return \@_nodelist;
63 }
64
65 # ---------------------------------------------------------------------------
66 # Walks a nodeset and checks for insert, update, and delete and makes 
67 # appropriate db calls
68
69 sub commit_nodeset {
70         my($self, $nodeset) = @_;
71
72         warn "3\n";
73         my $size = @$nodeset;
74         my $offset = 0;
75
76         for my $index (0..$size) {
77
78                 my $pos = $index + $offset;
79                 my $node = $nodeset->[$index];
80                 next unless $node;
81
82                 if($node->isdeleted()) {
83                         $offset--;
84                         return 0 unless _deletenode($node);
85                         next;
86                 }
87
88                 if($node->isnew()) {
89                         $node->intra_doc_id($pos);
90                         return 0 unless _addnode($node);
91                         next;
92                 }
93
94                 if($node->intra_doc_id() != $pos ||
95                          $node->ischanged() ) {
96
97                         $node->intra_doc_id($pos);
98                         return 0 unless _updatenode($node);
99                         next;
100                 }
101         }
102         return 1;
103 }
104
105 sub _updatenode {
106         my $node = shift;
107         return 1;
108 }
109
110 sub _addnode {
111         my $node = shift;
112         return 1;
113 }
114
115 sub _deletenode {
116         my $node = shift;
117         return 1;
118 }
119  
120 # ---------------------------------------------------------------------------
121
122
123 sub nodeset_to_mods_nodeset {
124
125
126 }
127
128
129
130
131
132
133
134 1;