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) {
25 Fieldmapper::biblio::record_node->new($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 if(!$node) { return \@_nodelist; }
46 if(!defined($node->parent_node)) {
50 push( @_nodelist, $node );
52 if( $node->children() ) {
54 for my $child (@{ $node->children() }) {
57 Fieldmapper::biblio::record_node->new($child);
59 if(!defined($child->parent_node)) {
60 $child->parent_node($node->intra_doc_id);
61 $child->ischanged(1); #just to be sure
64 $self->tree2nodeset( $child );
68 $node->children(undef);
73 my($self, $nodeset) = @_;
79 for my $index (0..$size) {
81 my $pos = $index + $offset;
82 my $node = $nodeset->[$index];
84 $node = Fieldmapper::biblio::record_node->new($node);
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);