ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/ActiveDoc/Query.pm
(Generate patch)

Comparing COMP/SCRAM/src/ActiveDoc/Query.pm (file contents):
Revision 1.1 by williamc, Wed Dec 15 16:28:01 1999 UTC vs.
Revision 1.5 by williamc, Fri Jan 14 18:54:09 2000 UTC

# Line 18 | Line 18
18   #                       query
19   # queryprompt(name)  : return/set the prompt string for the query
20   # queryoptions(name) : return/set the query option list for the named query
21 + # querycheck(name)   : return/set the query checker object
22   # currentvalue(name) : return the current value of the query list exapnded
23   #                       in the context of the other query values - affected
24   #                        by lodgevalue.
25   # getparam(name) : return the absolute value of the param (non expanded) - not
26   #                  affected by lodgevalue until OK called.
27   # setparam(name,value) : set the value of a given query to list
28 < # expand(@string)        : expand given strings
28 > # setifundef(name,value) : set the value of a given query to list
29 > # expand(string)         : expand given string
30   # lodgevalue(name,val)   : set a value of a given query variable to the list
31   #                          current value will be expanded in terms of these
32 + #                          return (pass/fail,messageobject,new_vals_in_options)
33   # OK()                   : set all query values to the values of the lodged
34   #                          variables
35   # cancel()               : clear the values of any lodged variables
36   # setparam(name,value)   : hard set
37   # params                 : return list of all parameters
38 + # runchecker(name,value) : run a query checker to analyse a value, any
39 + #                          return values are added to the option list
40  
41   package ActiveDoc::Query;
42   require 5.004;
# Line 58 | Line 63 | sub intro {
63   sub querytype {
64          my $self=shift;
65          my $name=shift;
66 +        my $rv;
67  
68 <        @_?$self->{querytype}{$name}=shift
69 <          :$self->{querytype}{$name};
68 >        if ( @_) {
69 >             $rv=shift;
70 >             if ( ! exists $self->{querytype}{$name} ) {
71 >                # store the order in which definitions are made
72 >                push @{$self->{queryorder}}, $name;
73 >             }
74 >             $self->{querytype}{$name}=$rv;
75 >        }
76 >        else {
77 >          $rv=$self->{querytype}{$name};
78 >        }
79 >        return $rv;
80 >        
81 > }
82 >
83 > sub querycheck {
84 >        my $self=shift;
85 >        my $name=shift;
86 >
87 >        @_?$self->{querycheck}{$name}=shift
88 >          :$self->{querycheck}{$name};
89   }
90  
91   sub querymessage {
# Line 78 | Line 103 | sub queryprompt {
103          my $rv=undef;
104          if ( @_ ) {
105            $self->{queryprompt}{$name}=shift;
106 <          $rv=$self->{queryprompt}{$name};
107 <        } elsif ( defined $self->{queryprompt}{$name} ) {
83 <          $rv=$self->expand($self->{queryprompt}{$name});
106 >        } elsif ( ! defined $self->{queryprompt}{$name} ) {
107 >          $self->{queryprompt}{$name}="";
108          }
109 +        $rv=$self->expand($self->{queryprompt}{$name});
110          return $rv;            
111   }
112  
# Line 104 | Line 129 | sub expand {
129          my $self=shift;
130          my $string=shift;
131  
132 +        return "" , if ( ! defined $string );
133          $string=~s{
134                  \$\((\w+)\)
135          }{
# Line 142 | Line 168 | sub getparam {
168   sub lodgevalue {
169          my $self=shift;
170          my $name=shift;
171 +        my $value=shift;
172  
173 <        $self->{lodgehash}{$name}=shift;
173 >        # pass this parameter to the checker
174 >        my ($ret,$message,@vals)=$self->runchecker($name,$value);
175 >        # only lodge the value if its valid
176 >        if ( $ret eq 0 ) {
177 >          $self->{lodgehash}{$name}=$value;
178 >        }
179 >        return ($ret,$message,@vals);
180 > }
181 >
182 > sub runchecker {
183 >        my $self=shift;
184 >        my $name=shift;
185 >        my $value=shift;
186 >        my $ret=0;
187 >        my $message;
188 >        my @vals=();
189 >
190 >        if (defined $self->querycheck($name)) {
191 >          ($ret,$message,@vals)=$self->querycheck($name)->consider($value);
192 >          # add any analysis options to the option list
193 >          if ( $#vals >= 0 ) {
194 >           $self->queryoptions($name,@vals);
195 >          }
196 >        }
197 >        return ($ret,$message,@vals);
198   }
199  
200   sub OK {
# Line 156 | Line 207 | sub OK {
207  
208   sub querylist {
209          my $self=shift;
210 <        return ( keys %{$self->{querytype}});
210 >        return @{$self->{queryorder}};
211   }
212  
213   sub cancel {
# Line 167 | Line 218 | sub cancel {
218          }
219   }
220  
221 + sub setifundef {
222 +        my $self=shift;
223 +        my $name=shift;
224 +        my $value=shift;
225 +
226 +        if ( ! defined $self->{params}{$name} ) {
227 +          $self->setparam($name,$value);
228 +        }
229 + }
230 +
231   sub setparam {
232          my $self=shift;
233          my $name=shift;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines