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