1 package OpenILS::Application::Cat::Utils;
2 use strict; use warnings;
3 use OpenILS::Utils::Fieldmapper;
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;
17 # Converts an XML nodeset into a tree
19 my($class, $nodeset) = @_;
22 for my $index (0..$size) {
24 my $child = $nodeset->[$index];
27 if( defined($child->parent_node) ) {
28 my $parent = Fieldmapper::biblio::record_node->new($nodeset->[$child->parent_node]);
29 $parent->children( [ $parent->children(), $child ]);
38 my($self, $node) = @_;
40 if((ref($node) eq "ARRAY")) {
41 $node = Fieldmapper::biblio::record_node->new($node);
44 return \@_nodelist unless $node;
46 if(!defined($node->parent_node)) {
50 push( @_nodelist, $node );
52 if( $node->children() ) {
54 for my $child (@{ $node->children() }) {
58 Fieldmapper::biblio::record_node->new($child);
60 if(!defined($child->parent_node)) {
61 $child->parent_node($node->intra_doc_id);
62 $child->ischanged(1); #just to be sure
65 $self->tree2nodeset( $child );
69 $node->children(undef);
74 my($self, $nodeset) = @_;
80 for my $index (0..$size) {
82 my $pos = $index + $offset;
83 my $node = $nodeset->[$index];
86 if($node->isdeleted()) {
88 return 0 unless _deletenode($node);
93 $node->intra_doc_id($pos);
94 return 0 unless _addnode($node);
98 if($node->intra_doc_id() != $pos ||
99 $node->ischanged() ) {
101 $node->intra_doc_id($pos);
102 return 0 unless _updatenode($node);