1 package OpenILS::Application::Cat::Utils;
2 use strict; use warnings;
3 use OpenILS::Utils::Fieldmapper;
5 # ---------------------------------------------------------------------------
6 # Converts an XML nodeset into a tree
8 my($class, $nodeset) = @_;
11 for my $index (0..$size) {
13 my $child = $nodeset->[$index];
16 if( defined($child->parent_node) ) {
17 my $parent = $nodeset->[$child->parent_node];
19 [ @{$parent->children() ? $parent->children() : [] }, $child ]);
25 # ---------------------------------------------------------------------------
26 # Converts a tree into an xml nodeset
30 my($self, $node) = @_;
32 if((ref($node) eq "ARRAY")) {
33 $node = Fieldmapper::biblio::record_node->new($node);
36 return \@_nodelist unless $node;
38 if(!defined($node->parent_node)) {
42 push( @_nodelist, $node );
44 if( $node->children() ) {
46 for my $child (@{ $node->children() }) {
50 Fieldmapper::biblio::record_node->new($child);
52 if(!defined($child->parent_node)) {
53 $child->parent_node($node->intra_doc_id);
54 $child->ischanged(1); #just to be sure
57 $self->tree2nodeset( $child );
61 $node->children(undef);
65 # ---------------------------------------------------------------------------
66 # Walks a nodeset and checks for insert, update, and delete and makes
67 # appropriate db calls
70 my($self, $nodeset) = @_;
76 for my $index (0..$size) {
78 my $pos = $index + $offset;
79 my $node = $nodeset->[$index];
82 if($node->isdeleted()) {
84 return 0 unless _deletenode($node);
89 $node->intra_doc_id($pos);
90 return 0 unless _addnode($node);
94 if($node->intra_doc_id() != $pos ||
95 $node->ischanged() ) {
97 $node->intra_doc_id($pos);
98 return 0 unless _updatenode($node);
120 # ---------------------------------------------------------------------------
123 sub nodeset_to_mods_nodeset {