ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/ActiveDoc/Query.pm
Revision: 1.10
Committed: Thu Dec 8 15:43:43 2005 UTC (19 years, 5 months ago) by sashby
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.9: +0 -0 lines
State: FILE REMOVED
Log Message:
Obsolete packages removed.

File Contents

# Content
1 BEGIN
2 {
3 print " ActiveDoc::Query: I AM used!!","\n";
4 };
5
6
7 #
8 # Query.pm
9 #
10 # Originally Written by Christopher Williams
11 #
12 # Description
13 # -----------
14 # Hold information request data
15 #
16 # Interface
17 # ---------
18 # new() : A new Query object
19 # querylist() : return ordered list of query names
20 # title() : return/set the title text
21 # intro() : return/set the intro text
22 # querytype(name) : return/set the input type of the named query
23 # querymessage(name) : return/set the message text associated with the named
24 # query
25 # queryprompt(name) : return/set the prompt string for the query
26 # queryoptions(name) : return/set the query option list for the named query
27 # querycheck(name) : return/set the query checker object
28 # currentvalue(name) : return the current value of the query list exapnded
29 # in the context of the other query values - affected
30 # by lodgevalue.
31 # getparam(name) : return the absolute value of the param (non expanded) - not
32 # affected by lodgevalue until OK called.
33 # setparam(name,value) : set the value of a given query to list
34 # setifundef(name,value) : set the value of a given query to list
35 # expand(string) : expand given string
36 # lodgevalue(name,val) : set a value of a given query variable to the list
37 # current value will be expanded in terms of these
38 # return (pass/fail,messageobject,new_vals_in_options)
39 # OK() : set all query values to the values of the lodged
40 # variables
41 # cancel() : clear the values of any lodged variables
42 # setparam(name,value) : hard set
43 # params : return list of all parameters
44 # runchecker(name,value) : run a query checker to analyse a value, any
45 # return values are added to the option list
46
47 package ActiveDoc::Query;
48 require 5.004;
49
50 sub new {
51 my $class=shift;
52 $self={};
53 bless $self, $class;
54 return $self;
55 }
56
57 sub title {
58 my $self=shift;
59 @_?$self->{title}=shift
60 :((defined $self->{title})?$self->{title}:"");
61 }
62
63 sub intro {
64 my $self=shift;
65 @_?$self->{intro}=shift
66 :((defined $self->{intro})?$self->{intro}:"");
67 }
68
69 sub querytype {
70 my $self=shift;
71 my $name=shift;
72 my $rv;
73
74 if ( @_) {
75 $rv=shift;
76 if ( ! exists $self->{querytype}{$name} ) {
77 # store the order in which definitions are made
78 push @{$self->{queryorder}}, $name;
79 }
80 $self->{querytype}{$name}=$rv;
81 }
82 else {
83 $rv=$self->{querytype}{$name};
84 }
85 return $rv;
86
87 }
88
89 sub querycheck {
90 my $self=shift;
91 my $name=shift;
92
93 @_?$self->{querycheck}{$name}=shift
94 :$self->{querycheck}{$name};
95 }
96
97 sub querymessage {
98 my $self=shift;
99 my $name=shift;
100
101 if ( @_ ) {
102 $self->{querymessage}{$name}=shift;
103 }
104 return $self->expand($self->{querymessage}{$name});
105 }
106
107 sub queryprompt {
108 my $self=shift;
109 my $name=shift;
110
111 my $rv=undef;
112 if ( @_ ) {
113 $self->{queryprompt}{$name}=shift;
114 } elsif ( ! defined $self->{queryprompt}{$name} ) {
115 $self->{queryprompt}{$name}="";
116 }
117 $rv=$self->expand($self->{queryprompt}{$name});
118 return $rv;
119 }
120
121 sub queryoptions {
122 my $self=shift;
123 my $name=shift;
124 my @out=();
125
126 if ( @_ ) {
127 push @{$self->{queryoptions}{$name}},@_;
128 }
129 foreach $option ( @{$self->{queryoptions}{$name}} ) {
130 push @out, $self->expand($option);
131 }
132
133 return @out;
134 }
135
136 sub expand {
137 my $self=shift;
138 my $string=shift;
139
140 return "" , if ( ! defined $string );
141 $string=~s{
142 \$\((\w+)\)
143 }{
144 if (defined $self->{lodgehash}{$1}) {
145 $self->expand($self->{lodgehash}{$1});
146 } else {
147 "\$$1";
148 }
149 }egx;
150 $string=~s{
151 \$(\w+)
152 }{
153 if (defined $self->{lodgehash}{$1}) {
154 $self->expand($self->{lodgehash}{$1});
155 } else {
156 "\$$1";
157 }
158 }egx;
159 return $string;
160 }
161
162 sub currentvalue {
163 my $self=shift;
164 my $name=shift;
165
166 $self->expand(
167 ((defined $self->{lodgehash}{$name})?$self->{lodgehash}{$name}:""));
168 }
169
170 sub getparam {
171 my $self=shift;
172 my $name=shift;
173 return $self->{params}{$name};
174 }
175
176 sub lodgevalue {
177 my $self=shift;
178 my $name=shift;
179 my $value=shift;
180
181 # pass this parameter to the checker
182 my ($ret,$message,@vals)=$self->runchecker($name,$value);
183 # only lodge the value if its valid
184 if ( $ret eq 0 ) {
185 $self->_lodgevalue($name,$value);
186 }
187 return ($ret,$message,@vals);
188 }
189
190 sub _lodgevalue {
191 my $self=shift;
192 my $name=shift;
193 my $value=shift;
194
195 $self->{lodgehash}{$name}=$value;
196 }
197
198 sub runchecker {
199 my $self=shift;
200 my $name=shift;
201 my $value=shift;
202 my $ret=0;
203 my $message;
204 my @vals=();
205
206 if (defined $self->querycheck($name)) {
207 ($ret,$message,@vals)=$self->querycheck($name)->consider($value);
208 # add any analysis options to the option list
209 if ( $#vals >= 0 ) {
210 $self->queryoptions($name,@vals);
211 }
212 }
213 return ($ret,$message,@vals);
214 }
215
216 sub OK {
217 my $self=shift;
218
219 foreach $name ( $self->querylist() ) {
220 $self->setparam($name, $self->{lodgehash}{$name});
221 }
222 }
223
224 sub querylist {
225 my $self=shift;
226 return @{$self->{queryorder}};
227 }
228
229 sub cancel {
230 my $self=shift;
231
232 foreach $name ( keys %{$self->{lodgehash}} ) {
233 $self->{lodgehash}{$name}=$self->{params}{$name};
234 }
235 }
236
237 sub setifundef {
238 my $self=shift;
239 my $name=shift;
240 my $value=shift;
241
242 if ( ! defined $self->{params}{$name} ) {
243 $self->setparam($name,$value);
244 }
245 }
246
247 sub setparam {
248 my $self=shift;
249 my $name=shift;
250 my $value=shift;
251
252 $self->{params}{$name}=$value;
253 $self->_lodgevalue($name,$value);
254 }
255
256 sub params {
257 my $self=shift;
258
259 return ( keys %{$self->{params}} );
260 }