still working on the perl locale stuff
[OpenSRF.git] / src / perlmods / OpenSRF / Transport / SlimJabber / MessageWrapper.pm
1 package OpenSRF::Transport::SlimJabber::MessageWrapper;
2 use XML::LibXML;
3 use OpenSRF::EX qw/:try/;
4 use OpenSRF::Utils::Logger qw/$logger/;
5
6 sub new {
7         my $class = shift;
8         $class = ref($class) || $class;
9
10         my $xml = shift;
11
12         my ($doc, $msg);
13         if ($xml) {
14                 my $err;
15
16                 try {
17                         $doc = XML::LibXML->new->parse_string($xml);
18                 } catch Error with {
19                         $err = shift; 
20                         warn "MessageWrapper received bad XML : error = $err\nXML = $xml\n";
21                         $logger->error("MessageWrapper received bad XML : error = $err : XML = $xml");
22                 };
23                 throw $err if $err;
24
25                 $msg = $doc->documentElement;
26         } else {
27                 $doc = XML::LibXML::Document->createDocument;
28                 $msg = $doc->createElement( 'message' );
29                 $doc->setDocumentElement( $msg );
30         }
31
32         
33         my $self = { msg_node => $msg };
34
35         return bless $self => $class;
36 }
37
38 sub toString {
39         my $self = shift;
40         if( $self->{msg_node} ) {
41                 return $self->{msg_node}->toString(@_);
42         }
43         return "";
44 }
45
46 sub get_body {
47         my $self = shift;
48         my ($t_body) = grep {$_->nodeName eq 'body'} $self->{msg_node}->childNodes;
49         if( $t_body ) {
50                 my $body = $t_body->textContent;
51                 return $body;
52         }
53         return "";
54 }
55
56 sub get_sess_id {
57         my $self = shift;
58         my ($t_node) = grep {$_->nodeName eq 'thread'} $self->{msg_node}->childNodes;
59         if( $t_node ) {
60                 return $t_node->textContent;
61         }
62         return "";
63 }
64
65 sub get_msg_type {
66         my $self = shift;
67         $self->{msg_node}->getAttribute( 'type' );
68 }
69
70 sub get_remote_id {
71         my $self = shift;
72
73         #
74         my $rid = $self->{msg_node}->getAttribute( 'router_from' );
75         return $rid if $rid;
76
77         return $self->{msg_node}->getAttribute( 'from' );
78 }
79
80 sub setType {
81         my $self = shift;
82         $self->{msg_node}->setAttribute( type => shift );
83 }
84
85 sub setTo {
86         my $self = shift;
87         $self->{msg_node}->setAttribute( to => shift );
88 }
89
90 sub setThread {
91         my $self = shift;
92         $self->{msg_node}->appendTextChild( thread => shift );
93 }
94
95 sub setBody {
96         my $self = shift;
97         my $body = shift;
98         $self->{msg_node}->appendTextChild( body => $body );
99 }
100
101 sub set_router_command {
102         my( $self, $router_command ) = @_;
103         if( $router_command ) {
104                 $self->{msg_node}->setAttribute( router_command => $router_command );
105         }
106 }
107 sub set_router_class {
108         my( $self, $router_class ) = @_;
109         if( $router_class ) {
110                 $self->{msg_node}->setAttribute( router_class => $router_class );
111         }
112 }
113
114 sub set_osrf_xid {
115    my( $self, $xid ) = @_;
116    $self->{msg_node}->setAttribute( osrf_xid => $xid );
117 }
118
119
120 sub get_osrf_xid {
121    my $self = shift;
122    $self->{msg_node}->getAttribute('osrf_xid');
123 }
124
125 1;