ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/ActiveDoc/UserQuery.pm
Revision: 1.6
Committed: Fri Dec 17 08:36:23 1999 UTC (25 years, 5 months ago) by williamc
Content type: text/plain
Branch: MAIN
CVS Tags: ProtoEnd
Changes since 1.5: +14 -1 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #
2 # UserQuery
3 #
4 # Set up and record Queries requested from the user
5 #
6 # Interface
7 # ---------
8 # new(UserInterface) : A new query object with a specific interface
9 # dump(fh,expr) : dump out parameters that match expr to filehandle
10 # store(fh) : dump every param to fh
11 # restore(fh) : restore from filehandle
12 # params() : return list of all params
13 # setparam(name,value) : set a parameter
14 # setifundef(name,value) : only set param to value if undefined
15 # getparam(name) : return value of named parameter
16 # getexpandedparam(name) : return the value of the parameter with any
17 # variables expanded in the context of the UserQuery
18 # variables
19 # clearquery() : remove all queries to be asked
20 # setquery($type,$parameter,$string,@args) : register a query of type for
21 # $parameter
22 # querycheck(name, checkobject) : Set a checksum to be made on each query
23 # addquerymessage(name,string) : Add an extra message to the query for name
24 # askuser() : Ask user registered queries
25 # formatquery(args) : apply formatting information for display
26 # of the query . args dependent on implemtation
27 # query type etc.
28 # interface() : Return the interface object for the query
29
30 package ActiveDoc::UserQuery;
31 require 5.001;
32
33 sub new {
34 my $class=shift;
35 my $interface=shift;
36 $self={};
37 bless $self, $class;
38 $self->{params}={};
39 $self->{UserInterface}=$interface;
40 return $self;
41 }
42
43 sub dump {
44 my $self=shift;
45 my $fh=shift;
46 my $string=shift;
47
48 foreach $key ( keys %{$self->{params}} ) {
49 if ( $key=~/$string/ ) {
50 print $fh "k:".$key."\n";
51 print $fh "v:".$self->{params}{$key}."\n";
52 }
53 }
54 print $fh "#End\n";
55 }
56
57 sub store {
58 my $self=shift;
59 my $fh=shift;
60
61 my $key;
62 foreach $key ( keys %{$self->{params}} ) {
63 print $fh "k:".$key."\n";
64 print $fh "v:".$self->{params}{$key}."\n";
65 }
66 print $fh "#End\n";
67 }
68
69 sub restore {
70 my $self=shift;
71 my $fh=shift;
72
73 my $check="k:";
74 my $key="";
75 while ( $line=<$fh> ) {
76 chomp $line;
77 last if ( $line eq "\#End" );
78 if ( $line!~/^$check/ ) {
79 die "Data Corruption Error when restoring $self\n";
80 }
81 if ( $check eq "k:" ) {
82 $check="v:";
83 ($key=$line)=~s/k://;
84 }
85 else {
86 $check="k:";
87 ($value=$line)=~s/v://;
88 $self->setparam($key,$value);
89 }
90 } #end while
91 }
92
93 sub setparam {
94 my $self=shift;
95 my $name=shift;
96 my $value=shift;
97
98 print "Setting $name = $value\n";
99 $self->{params}{$name}=$value;
100 }
101
102 sub params {
103 my $self=shift;
104 return ( keys %{$self->{params}} );
105 }
106
107 sub setifundef {
108 my $self=shift;
109 my $name=shift;
110 my $value=shift;
111
112 if ( ! defined $self->getparam($name) ) {
113 $self->setparam($name, $value);
114 }
115 }
116
117 sub getparam {
118 my $self=shift;
119 my $name=shift;
120 return $self->{params}{$name};
121 }
122
123 sub getexpandedparam {
124 my $self=shift;
125 my $name=shift;
126
127 my $string=$self->getparam($name);
128 $string=~s/\$\((.*?)\)/$self->{paramhash}{$1}/g;
129 $string=~s/\$(.*?)( |\/|\Z)/$self->{paramhash}{$1}$2/g;
130
131 return $string;
132 }
133
134 sub clearquery {
135 my $self=shift;
136 undef %self->{querytype};
137 undef %self->{queryvars};
138 undef @{$self->{queries}};
139 undef %{$self->{queryformat}};
140 }
141
142 sub setquery {
143 my $self=shift;
144 my $type=shift;
145 my $name=shift;
146 my $string=shift;
147 my @vars=@_;
148
149 push @{$self->{queries}},$name;
150 $self->{querytype}{$name}=$type;
151 $self->{querystring}{$name}=$string;
152 for ( $i=0; $i<=$#vars; $i++ ) {
153 $self->{queryvars}{$name}[$i]=$vars[$i];
154 }
155 }
156
157 sub querycheck {
158 my $self=shift;
159 my $name=shift;
160 my $check=shift;
161
162 $self->{querycheck}{$name}=$check;
163 }
164
165 sub addquerymessage {
166 my $self=shift;
167 my $name=shift;
168 my $string=shift;
169 $self->{querystring}{$name}=$self->{querystring}{$name}.$string;
170 }
171
172 sub formatquery {
173 my $self=shift;
174
175 my $name=$self->{queries}[$#$self->{queries}];
176 $self->{queryformat}{$name}= @_;
177 }
178
179 sub askuser {
180 my $self=shift;
181 my $string=shift;
182
183 $self->{UserInterface}->startform($string);
184 foreach $query ( @{$self->{queries}} ) {
185 my @rqargs=($self->{querytype}{$query}, $query,
186 $self->{querystring}{$query},
187 $self->{queryvars}{$query}, $self->{queryformat}{$query});
188 if ( exists $self->{querycheck}{$query} ) {
189 $self->{UserInterface}->runcheckedquery(
190 $self->{querycheck}{$query}, @rqargs);
191 }
192 else {
193 $self->{UserInterface}->runquery(@rqargs);
194 }
195 }
196 $self->{UserInterface}->endform($self);
197 }
198
199 sub interface {
200 my $self=shift;
201 return $self->{UserInterface};
202 }