comparison Lib/IMPL/DOM/Navigator.pm @ 13:bb8d67f811ea

merge heads
author Sergey
date Wed, 02 Sep 2009 23:11:14 +0400
parents 955b2324c1bf 75980091813b
children 818c74b038ae
comparison
equal deleted inserted replaced
12:955b2324c1bf 13:bb8d67f811ea
1 package IMPL::DOM::Navigator; 1 package IMPL::DOM::Navigator;
2 use strict; 2 use strict;
3 use warnings; 3 use warnings;
4 4
5 use base qw(IMPL::Object); 5 use base qw(IMPL::Object);
6 use IMPL::Class::Property;
7 use IMPL::Class::Property::Direct;
8 BEGIN {
9 public _direct property Path => prop_get | owner_set;
10 public _direct property Current => prop_get | owner_set;
11 }
6 12
13 sub CTOR {
14 my ($this,$CurrentNode) = @_;
15
16 $this->{$Current} = $CurrentNode or die IMPL::InvalidArgumentException("A starting node is a required paramater");
17 }
7 18
19 sub Navigate {
20 my ($this,$query) = @_;
21
22 if ( my ($newNode) = $this->{$Current}->selectNodes($query) ) {
23 push @{$this->{$Path}}, $this->{$Current};
24 return $this->{$Current} = $newNode;
25 } else {
26 return undef;
27 }
28 }
29
30 sub Back {
31 my ($this) = @_;
32
33 if ( my $newNode = $this->{$Path} ? pop @{$this->{$Path}} : undef ) {
34 return $this->{$Current} = $newNode;
35 } else {
36 return undef;
37 }
38 }
39
40 sub PathToString {
41 my $this = shift;
42
43 join('/',map $_->nodeName, $this->{$Path} ? (@{$this->{$Path}}, $this->{$Current}) : $this->{$Current});
44 }
8 45
9 1; 46 1;
47
48 __END__
49 =pod
50
51 =head1 DESCRIPTION
52
53 Объект для хождения по дереву DOM объектов.
54
55 =head1 METHODS
56
57 =over
58
59 =item C<$obj->new($nodeStart)>
60
61 Создает объект навигатора с указанной начальной позицией.
62
63 =item C<$obj->Navigate($query)>
64
65 Перейти в новый узел используя запрос C<$query>. На данный момент запросом может
66 быть только имя узла и будет взят только первый узел. Если по запросу ничего не
67 найдено, переход не будет осуществлен.
68
69 Возвращает либо новый узел в который перешли, либо C<undef>.
70
71 =item C<$obj->Back()>
72
73 Возвращается в предыдущий узел, если таковой есть.
74
75 Возвращает либо узел в который перешли, либо C<undef>.
76
77 =back
78
79 =cut