ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/Utilities/Message.pm
Revision: 1.3
Committed: Wed Aug 10 17:27:32 2005 UTC (19 years, 9 months ago) by sashby
Content type: text/plain
Branch: MAIN
Changes since 1.2: +58 -22 lines
Log Message:
Starting to add POD documentation.

File Contents

# User Rev Content
1 sashby 1.3 =head1 NAME
2    
3     Utilities::Message - Hold a multi level message that can be reconstructed to any level.
4    
5     =head1 SYNOPSIS
6    
7     my $obj = Utilities::Message->new();
8    
9     =head1 DESCRIPTION
10    
11     Hold a multi level message that can be reconstructed to any level.
12    
13     =head1 METHODS
14    
15     =over
16    
17     =cut
18    
19     =item C<new()>
20    
21     A new Message object.
22    
23     =item C<setlevel([level_number])>
24    
25     Set the current level to which messages can be assigned.
26    
27     =item C<message(string)>
28    
29     Set a new message at the current level.
30    
31     =item C<read([level])>
32    
33     Return list of all messages up to level n (or current assignment level).
34    
35     =item C<readlevel(level)>
36    
37     Read only those messages assigned to the given level.
38    
39     =item C<copy(Message)>
40    
41     Copy the messages from one object to the current,
42     starting at the current active level.
43    
44     =item C<levels()>
45    
46     Return the number of assignment levels.
47    
48     =back
49    
50     =head1 AUTHOR
51    
52     Originally Written by Christopher Williams.
53    
54     =head1 MAINTAINER
55    
56     Shaun ASHBY L<mailTo:Shaun.Ashby@cern.ch>
57    
58     =cut
59 williamc 1.1
60     package Utilities::Message;
61     require 5.004;
62    
63     sub new {
64     my $class=shift;
65     $self={};
66     bless $self, $class;
67 williamc 1.2 $self->{max}=0;
68 williamc 1.1 $self->setlevel(0);
69     $self->{messages}=();
70     return $self;
71     }
72    
73     sub setlevel {
74     my $self=shift;
75    
76 williamc 1.2 if ( @_ ) {
77     $self->{aslevel}=shift
78     }
79     else {
80     $self->{aslevel}++;
81     }
82 williamc 1.1 if ( $self->{aslevel} > $self->{max} ) { $self->{max}++ }
83     }
84    
85     sub levels {
86     my $self=shift;
87     return $self->{max};
88     }
89    
90     sub message {
91     my $self=shift;
92     my $message=shift;
93    
94     push @{$self->{messages}}, $message;
95     push @{$self->{messagelevel}}, $self->{aslevel};
96     }
97    
98     sub read {
99     my $self=shift;
100    
101     my $lev;
102     if (@_) { $lev=shift }
103     else { $lev=$self->{aslevel} }
104     my @messages=();
105     for ( my $i=0; $i<=$#{$self->{messages}}; $i++) {
106     if ( $self->{messagelevel}[$i] <= $lev ) {
107     push @messages, $self->{messages}[$i];
108     }
109     }
110     return @messages;
111     }
112    
113     sub readlevel {
114     my $self=shift;
115    
116     my @messages=();
117     my $lev;
118     if (@_) { $lev=shift }
119     else { $lev=$self->{aslevel} }
120    
121     for ( my $i=0; $i<=$#{$self->{messages}}; $i++) {
122     if ( $self->{messagelevel}[$i] eq $lev ) {
123     push @messages, $self->{messages}[$i];
124     }
125     }
126     return @messages;
127     }
128    
129     sub copy {
130     my $self=shift;
131     my $obj=shift;
132    
133     my $currentlev=$self->{aslevel};
134     for ( my $i=0; $i<=$obj->levels(); $i++) {
135     foreach $mes ( $obj->readlevel($i) ) {
136     $self->message($mes);
137     }
138     $self->setlevel();
139     }
140     $self->setlevel($currentlev);
141     }
142