ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/ActiveDoc/ActiveDoc.pm
Revision: 1.25.2.1.2.8
Committed: Mon Aug 28 07:23:36 2000 UTC (24 years, 8 months ago) by williamc
Content type: text/plain
Branch: HPWbranch
CVS Tags: BuildSystemProto1, V0_18_0, V0_18_0model, V0_17_1, V0_18_0alpha, V0_17_0, V0_16_4, V0_16_3, V0_16_2, V0_16_1, V0_16_0, V0_15_1, V0_15_0, V0_15_0beta
Branch point for: V0_17branch, V0_16branch, V0_15branch
Changes since 1.25.2.1.2.7: +2 -2 lines
Log Message:
Adapt for new activatedoc interface

File Contents

# User Rev Content
1 williamc 1.1 #
2 williamc 1.6 # ActiveDoc.pm
3     #
4     # Originally Written by Christopher Williams
5     #
6     # Description
7 williamc 1.1 #
8     # Interface
9     # ---------
10 williamc 1.25.2.1.2.7 # new(ActiveStore) : A new ActiveDoc object
11 williamc 1.6 # url() : Return/set the docs url - essential
12     # file() : Return the local filename of document
13 williamc 1.21 # ProcessFile() : Return the filename of PreProcessed document
14 williamc 1.6 #
15 williamc 1.21 # parent() : return the object ref of the calling parent
16 williamc 1.6 # getfile(url) : get a processedfile object given a url
17 williamc 1.9 # activatedoc(url) : Return the object ref for a doc described by the given url
18 williamc 1.6 #
19     # -- error methods --
20     # error(string) : Report an general error to the user
21     # parseerror(string) : Report an error during parsing a file
22 williamc 1.25.2.1.2.2 # line([linenumber]) : Return the line number of the document
23     # and the ProcessedFileObj it is in corresponding to the
24     # supplied number of the expanded document
25     # If no number supplied - the currentparse number will be # used
26 williamc 1.2
27     package ActiveDoc::ActiveDoc;
28 williamc 1.6 require 5.004;
29 williamc 1.25.2.1.2.1 use ActiveDoc::SimpleURLDoc;
30 williamc 1.25.2.1.2.2 use ActiveDoc::PreProcessedFile;
31 williamc 1.25.2.1.2.1 use Utilities::Verbose;
32 williamc 1.6
33 williamc 1.25.2.1.2.3 @ISA = qw(ActiveDoc::SimpleURLDoc Utilities::Verbose);
34 williamc 1.2
35 williamc 1.25.2.1.2.1 sub new {
36     my $class=shift;
37     my $self={};
38     bless $self, $class;
39 williamc 1.25.2.1.2.7 $self->{Ostore}=shift;
40     $self->cache($self->{Ostore}->cache());
41     $self->{dbstore}=$self->{Ostore};
42 williamc 1.25.2.1.2.4 $self->_initdoc("doc",@_);
43 williamc 1.25.2.1.2.2 # $self->{switch}=ActiveDoc::SimpleURLDoc->new($self->{cache});
44 williamc 1.25.2.1.2.1 return $self;
45 williamc 1.1 }
46    
47 williamc 1.6 sub url {
48 williamc 1.2 my $self=shift;
49 williamc 1.8 # get file & preprocess
50 williamc 1.21 if ( @_ ) {
51 williamc 1.25.2.1.2.5 $self->{origurl}=shift;
52     $self->{File}=$self->getfile($self->{origurl});
53     $self->filetoparse($self->{File}->ProcessedFile());
54     $self->verbose("url downloaded to ".$self->{File}->ProcessedFile());
55 williamc 1.21 }
56 williamc 1.25 if ( defined $self->{File} ) {
57     return $self->{File}->url();
58     }
59     else { return "undefined"; }
60 williamc 1.2 }
61    
62 williamc 1.22 sub getfile {
63 williamc 1.3 my $self=shift;
64 williamc 1.6 my $origurl=shift;
65    
66     my $fileref;
67 williamc 1.20 my ($url, $file);
68 williamc 1.25.2.1.2.1 if ( 0 ) {
69 williamc 1.21 $self->verbose("Forced download of $origurl");
70 williamc 1.25.2.1.2.2 ($url, $file)=$self->urldownload($origurl);
71 williamc 1.20 }
72     else {
73 williamc 1.21 $self->verbose("Attempting to get $origurl");
74 williamc 1.25.2.1.2.2 ($url, $file)=$self->urlget($origurl);
75 williamc 1.20 }
76 williamc 1.6 # do we already have an appropriate object?
77 williamc 1.25.2.1.2.1 ($fileref)=$self->{dbstore}->find($url);
78 williamc 1.6 if ( defined $fileref ) {
79 williamc 1.20 $self->verbose("Found $url in database");
80 williamc 1.6 $fileref->update();
81     }
82     else {
83     if ( $file eq "" ) {
84     $self->parseerror("Unable to get $origurl");
85     }
86 williamc 1.25.2.1.2.1 # -- set up a new preprocess file
87 williamc 1.21 $self->verbose("Making a new preprocessed file $url");
88 williamc 1.25.2.1.2.7 $fileref=ActiveDoc::PreProcessedFile->new($self->{Ostore});
89     #$fileref->cache($self->{cache});
90 williamc 1.6 $fileref->url($url);
91     $fileref->update();
92     }
93     return $fileref;
94 williamc 1.3 }
95    
96 williamc 1.9 sub activatedoc {
97     my $self=shift;
98     my $url=shift;
99    
100     # first get a preprocessed copy of the file
101 williamc 1.25.2.1.2.2 my $fileobj=$self->getfile($url);
102 williamc 1.9
103 williamc 1.25.2.1.2.1 # now parse it for the <Doc> tag
104     my $tempdoc=ActiveDoc::SimpleURLDoc->new($self->{cache});
105 williamc 1.25.2.1.2.2 $tempdoc->filetoparse($fileobj->ProcessFile());
106 williamc 1.25.2.1.2.1 my ($doctype,$docversion)=$tempdoc->doctype();
107     undef $tempdoc;
108    
109     if ( ! defined $doctype ) {
110     $self->parseerror("No <Doc type=> Specified in ".$url);
111 williamc 1.9 }
112 williamc 1.25.2.1.2.2 $self->verbose("doctype required is $doctype $docversion");
113 williamc 1.25.2.1.2.1
114 williamc 1.9 # Set up a new object of the specified type
115 williamc 1.25.2.1.2.1 eval "require $doctype";
116 williamc 1.14 die $@ if $@;
117 williamc 1.25.2.1.2.8 my $newobj=$doctype->new($self->{Ostore}, $url);
118 williamc 1.10 $newobj->url($url);
119 williamc 1.25.2.1.2.8 #$newobj->parent($self);
120 williamc 1.9 return $newobj;
121     }
122    
123 williamc 1.21 sub parent {
124     my $self=shift;
125    
126     @_?$self->{parent}=shift
127     :$self->{parent};
128     }
129    
130 williamc 1.6 # -------- Error Handling and Error services --------------
131    
132     sub parseerror {
133     my $self=shift;
134     my $string=shift;
135    
136 williamc 1.20 if ( $self->currentparsename() eq "" ) {
137 williamc 1.18 $self->error($string);
138     }
139 williamc 1.25.2.1.2.5 elsif ( ! defined $self->{File} ) {
140     print "Parse Error in ".$self->filenameref()." line "
141     .$self->{currentparser}->line()."\n";
142     print $string."\n";
143     }
144 williamc 1.18 else {
145     ($line, $file)=$self->line();
146     print "Parse Error in ".$file->url().", line ".
147 williamc 1.6 $line."\n";
148 williamc 1.18 print $string."\n";
149     }
150 williamc 1.25.2.1.2.5 exit;
151 williamc 1.6 }
152    
153     sub line {
154 williamc 1.7 my $self=shift;
155 williamc 1.25.2.1.2.2 my $parseline;
156    
157     if ( @_ ) {
158     $parseline=shift;
159     }
160     else {
161     $parseline=$self->{currentparser}->line();
162     }
163 williamc 1.9
164 williamc 1.6 my ($line, $fileobj)=
165 williamc 1.25.2.1.2.2 $self->{File}->realline($parseline);
166 williamc 1.6 return ($line, $fileobj);
167 williamc 1.7 }
168    
169     sub tagstartline {
170     my $self=shift;
171 williamc 1.8 my ($line, $fileobj)=$self->{File}->line(
172 williamc 1.7 $self->{currentparser}->tagstartline());
173     return ($line, $fileobj);
174 williamc 1.3 }
175 williamc 1.6
176     sub file {
177 williamc 1.2 my $self=shift;
178    
179 williamc 1.8 $self->{File}->file();
180 williamc 1.21 }
181    
182     sub ProcessFile {
183     my $self=shift;
184    
185     return $self->{File}->ProcessedFile();
186 williamc 1.2 }
187    
188 williamc 1.1 #
189 williamc 1.25.2.1.2.1 # Delegate all else to the switch
190 williamc 1.1 #
191 williamc 1.25.2.1.2.2 #sub AUTOLOAD {
192     # my $self=shift;
193 williamc 1.2
194 williamc 1.25.2.1.2.1 # dont propogate destroy methods
195 williamc 1.25.2.1.2.2 # return if $AUTOLOAD=~/::DESTROY/;
196 williamc 1.1
197 williamc 1.25.2.1.2.1 # remove this package name
198 williamc 1.25.2.1.2.2 # ($name=$AUTOLOAD)=~s/ActiveDoc::ActiveDoc:://;
199 williamc 1.1
200 williamc 1.25.2.1.2.1 # pass the message to SimpleDoc
201 williamc 1.25.2.1.2.2 # $self->{switch}->$name(@_);
202     #}
203 williamc 1.9
204 williamc 1.25.2.1.2.1
205     # ------------------- Tag Routines -----------------------------------
206 williamc 1.9 sub Doc_Start {
207     my $self=shift;
208     my $name=shift;
209     my $hashref=shift;
210    
211     $self->checktag($name, $hashref, "type");
212 williamc 1.10 $self->{doctypefound}++;
213     if ( $self->{doctypefound} == 1 ) { # only take first doctype
214     $self->{docobject}=$$hashref{'type'};
215     }
216 williamc 1.1 }