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

Comparing COMP/SCRAM/src/ActiveDoc/SimpleXMLURLDoc.pm (file contents):
Revision 1.1 by sashby, Tue Jul 26 15:13:59 2005 UTC vs.
Revision 1.2 by sashby, Thu Dec 15 16:38:10 2005 UTC

# Line 1 | Line 1
1 + #____________________________________________________________________
2 + # File: ActiveDoc::SimpleXMLURLDoc.pm
3 + #____________________________________________________________________
4 + #  
5 + # Author: Shaun Ashby <Shaun.Ashby@cern.ch>
6 + # Update: 2005-12-02 17:44:08+0100
7 + # Revision: $Id$
8   #
9 < # Added XML support: SFA 26/07/05
9 > # Copyright: 2005 (C) Shaun Ashby
10   #
11 < # SimpleXMLURLDoc.pm. - Extends SimpleDoc with URL download functionality
12 < #
13 < # Originally Written by Christopher Williams
14 < #
15 < # Description
16 < # -----------
17 < #
18 < # Interface
19 < # ---------
20 < # new(URLcache[,DocVersionTag]  : A new SimpleXMLURLDoc object. You can also
21 < #                                 specify an alternative doc version tag
22 < # addbasetags(parse)    : Add Base Tags to the given parse
23 < # urlget(urlstring[,location]) : get the given url - using the cache.
24 < #                                Returns (url, filename)
25 < # urldownload(urlstring[,location]) : get the given url ignoring any cached
26 < #                                       version. Returns (url, filename)
27 < # expandurl(urlstring)  : return a URLclass object of the given url expanded
28 < #                         according to the base settings
29 < # cache([cache])        : get/set the current URL cache
30 < # doctype()             : return the (type,version) of the document
31 < #                         as specified by the DocVersionTag
11 > #--------------------------------------------------------------------
12 >
13 > =head1 NAME
14 >
15 > ActiveDoc::SimpleXMLURLDoc - Base class for URL-based SCRAM documents.
16 >
17 > =head1 SYNOPSIS
18 >
19 >        my $obj = ActiveDoc::SimpleXMLURLDoc->new();
20 >
21 > =head1 DESCRIPTION
22 >
23 > Any document class inheriting from ActiveDoc::SimpleXMLURLDoc will have access to
24 > URL handling.
25 >  
26 > =head1 METHODS
27 >
28 > =over
29 >
30 > =cut
31 >
32   package ActiveDoc::SimpleXMLURLDoc;
33   use ActiveDoc::SimpleXMLDoc;
34   use URL::URLhandler;
35 < require 5.001;
36 < @ISA=qw(ActiveDoc::SimpleXMLDoc);
35 > require 5.004;
36 > use Exporter;
37 > use vars qw(@ISA);
38  
39 < sub new {
40 <        my $class=shift;
33 <        my $self={};
34 <        bless $self, $class;
35 <        $self->cache(shift);
36 <        $self->_initdoc("doc",@_);
37 <        return $self;
38 < }
39 > @ISA=qw(Exporter ActiveDoc::SimpleXMLDoc);
40 > @EXPORT_OK=qw( );
41  
42 < sub addbasetags
42 > sub new()
43     {
44 <   my $self=shift;
45 <   my $parse=shift;
44 >   ###############################################################
45 >   # new                                                         #
46 >   ###############################################################
47 >   # modified : Fri Dec  2 17:44:11 2005 / SFA                   #
48 >   # params   :                                                  #
49 >   #          :                                                  #
50 >   # function :                                                  #
51 >   #          :                                                  #
52 >   ###############################################################
53 >   my $proto=shift;
54 >   my $class=ref($proto) || $proto;
55 >   my ($urlcache,$context,@defhandlers)=@_;
56 >   my $self= bless($proto->SUPER::new($context,@defhandlers),$class);
57 >   $self->{CONTEXT}=$context;
58 >   # Register supported tags for this doc class, and specify which
59 >   # attributes should be checked for:
60 >   my $nested = 1;
61 >   my $unnested = 0;
62 >   my %recognised_tags = ('base' => [ { 'url' => 'REQUIRED' }, $nested ],
63 >                          'download' => [ { 'url' => 'REQUIRED', 'name' => 'OPTION' }, $unnested ]);
64    
65 <   $self->registerTag($parse, "base",
66 <                      \&basetaghandler,
67 <                      [ "url" ],
48 <                      1);
49 <   }
65 >   # Register these recognised tags to the base class (which registers them
66 >   # to the container class):
67 >   $self->register_handlers_(\%recognised_tags);
68  
69 < sub cache {
70 <        my $self=shift;
53 <        if ( @_ ) {
54 <          $self->{cache}=shift;
55 <          $self->{urlhandler}=URL::URLhandler->new($self->{cache});
56 <        }
57 <        return $self->{cache};
58 < }
59 <
60 < sub expandurl {
61 <        my $self=shift;
62 <        my $urlstring=shift;
63 <
64 <        return $self->{urlhandler}->expandurl($urlstring);
65 < }
66 <
67 < sub urldownload {
68 <        my $self=shift;
69 <        my $urlstring=shift;
70 <
71 <        ($fullurl,$filename)=$self->{urlhandler}->download($urlstring, @_);
72 <        if ( ( ! defined $filename ) || ( $filename eq "" ) ) {
73 <          $self->parseerror("Failed to get $fullurl");
74 <        }
75 <        return ($fullurl,$filename);
76 < }
77 <
78 < sub urlget {
79 <        my $self=shift;
80 <        my $urlstring=shift;
81 <
82 <        ($fullurl,$filename)=$self->{urlhandler}->get($urlstring, @_);
83 <        
84 <        if ( ( ! defined $filename ) || ( $filename eq "" ) ) {
85 <          $self->parseerror("Failed to get $fullurl");
86 <        }
87 <        return ($fullurl,$filename);
88 < }
69 >   # Set up a URL cache:
70 >   $self->cache($urlcache);
71  
72 < # ------------------------ Support Routines ---------------------------
72 >   return $self;
73 >   }
74  
75 < # ------------------------ Tag Routines -------------------------------
93 < sub basetaghandler()
75 > sub cache
76     {
77 <   my ($name, $hashref, $nesting)=@_;
96 <   # No action for Char handler:
97 <   return if ($nesting == 2);
77 >   my $self=shift;
78  
79 <   # Closing tag:
100 <   if ($nesting == 1)
101 <      {
102 <      # Probably not needed as error handling (tags not closed etc.) is
103 <      # handled by the XML parser anyway:
104 <      if ( $#{$self->{basestack}} >= 0 )
105 <         {
106 <         my $type=pop @{$self->{basestack}};
107 <         $self->{urlhandler}->unsetbase($type);
108 <         }            
109 <      }
110 <   else
79 >   if ( @_ )
80        {
81 <      my $url=$self->{urlhandler}->setbase($$hashref{'url'});
82 <      # Add store for url of the file currently being parsed. This info can
114 <      # then be extracted in Requirements objects
115 <      $self->{configurl}=$url;
116 <      push @{$self->{basestack}}, $url->type();      
81 >      $self->{cache}=shift;
82 > #      $self->{urlhandler}=URL::URLhandler->new($self->{cache});
83        }
84 +
85 +   return $self->{cache};
86     }
87 +
88 + # sub expandurl
89 + #    {
90 + #    my $self=shift;
91 + #    my $urlstring=shift;
92 +  
93 + #    return $self->{urlhandler}->expandurl($urlstring);
94 + #    }
95 +
96 + # sub urldownload
97 + #    {
98 + #    my $self=shift;
99 + #    my $urlstring=shift;
100 +  
101 + #    ($fullurl,$filename)=$self->{urlhandler}->download($urlstring, @_);
102 + #    if ( ( ! defined $filename ) || ( $filename eq "" ) )
103 + #       {
104 + #       $self->parseerror("Failed to get $fullurl");
105 + #       }
106 + #    return ($fullurl,$filename);
107 + #    }
108 +
109 + # sub urlget
110 + #    {
111 + #    my $self=shift;
112 + #    my $urlstring=shift;
113 +  
114 + #    ($fullurl,$filename)=$self->{urlhandler}->get($urlstring, @_);
115 +  
116 + #    if ( ( ! defined $filename ) || ( $filename eq "" ) )
117 + #       {
118 + #       $self->parseerror("Failed to get $fullurl");
119 + #       }
120 + #    return ($fullurl,$filename);
121 + #    }
122 +
123 + 1;
124 +
125 + =back
126 +
127 + =head1 AUTHOR/MAINTAINER
128 +
129 + Shaun ASHBY
130 +
131 + =cut

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines