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

Comparing COMP/SCRAM/src/URL/URLhandler.pm (file contents):
Revision 1.2 by williamc, Mon Aug 23 15:54:10 1999 UTC vs.
Revision 1.7 by williamc, Thu Nov 4 10:08:33 1999 UTC

# Line 1 | Line 1
1   # url handler -> returns the location of the file
2 #
2   # Interface
3   # ---------
4 < # new() :
5 < # new(cachedir)       : A new urlhandler with a defined default cahce directory
6 < # get(url)            : download from the specified url to the default cache
7 < # get(url,location)   : download to the specified directory
8 < # setbase(type,@args) : set the url defaults for a specific url type
10 < #                       arguments are dependent on type
11 < #                       http:
12 < #                       file:
13 < #                       cvs: servername,servertype [ ,user,passkey ]
14 < #                       label:
4 > # new(cache)       : A new urlhandler with a defined default cahce directory
5 > # get(url)         : download from the specified url to the default cache
6 > # getto(url,dirlocation): download to the specified directory - no cache registry
7 > # setbase(type,variablehash) : set the url defaults for a specific url type
8 > #                              arguments are dependent on type
9   # unsetbase(type)  : deactivate a previously set base
10   #
11   # ----------------------------------------------------------------------
# Line 19 | Line 13
13   # can pass a file name for the item to be stored as
14   # if not then stores in a default cache.
15  
16 < package URLhandler;
16 > package URL::URLhandler;
17   require 5.004;
18   use Utilities::AddDir;
19 + use URL::URLUtilities;
20 + use URL::URL_base;
21   use Carp;
22  
23   sub new {
# Line 34 | Line 30 | sub new {
30   }
31  
32   sub init {
33 +        use URL::URLcache;
34          use Utilities::AddDir;
35          my $self=shift;
36          my $cache=shift;
40        if (! defined $cache  ) { $cache="/tmp/SCRAMcache" }; # default cache
41        AddDir::adddir($cache);
37          $self->{cache}=$cache;
38 +        $self->{cachestore}=$self->{cache}->filestore();
39          use URL::URL_cvs;
40 +        use URL::URL_cvsfile;
41          use URL::URL_file;
42 +        use URL::URL_filed;
43          $self->{urlmodules}={
44 <                        'cvs' => 'URL_cvs',
45 <                        'file' => 'URL_file'
44 >                        'cvsfile' => 'URL::URL_cvsfile',
45 >                        'cvs' => 'URL::URL_cvs',
46 >                        'file' => 'URL::URL_file',
47 >                        'filed' => 'URL::URL_filed'
48                  };
49          $self->{filebase}="";
50          $self->setbase("file", {}); # Base file as default
51 +        $self->setbase("filed", {}); # Base file as default
52 + }
53 +
54 + #
55 + sub get {
56 +        my $self=shift;
57 +        my $url=shift;
58 +
59 +
60 +        my ($urlstring, $type, $urltypehandler, $base, $version)
61 +                       =$self->_parseurl($url); # get a unique url string
62 +        my $rv="";
63 +        $rv=$self->getto($url,$self->{cache}->filename($urlstring));
64 +        
65 +        # now register it in the cache if successful
66 +        if ( $rv ne "" ) {
67 +          print "Storing ".$urlstring.",".$rv."\n";
68 +          $self->{cache}->store($urlstring, $rv);
69 +        }
70 +        return $rv;
71   }
72  
73 < sub get ($@) {
73 > sub getto ($@) {
74          my $self=shift;
75          my $origurl=shift;
76 <        my $filename=shift;
76 >        my $dirname=shift;
77 >
78          my $rest;
79          my $type;
59        my $url;
80          my $version;
81 +        my $rv="";
82  
83 <        if ( ! defined $filename ) {
84 <          $filename=$self->{cache};
85 <        }
86 <        chomp $origurl;
87 <        # get our version info from the url (after last ??)
88 <        ( $url, $version) = split /\?\?/, $origurl;
89 <        if ( $url=~/:/ ) {
69 <          ($type,$rest) = split /:/, $url;
70 <        }
71 <        else {
72 <           $type='label';
73 <           $rest=$url.":".$version;
83 >        # Process the URL string
84 >        my ($urlstring, $type, $urltypehandler, $base, $version)
85 >                                        =$self->_parseurl($origurl);
86 >
87 >        if ( defined $urltypehandler ) {
88 >             # Call the download module
89 >             $rv=eval{$urltypehandler->get($base.(($version ne "")?"\?".$version:""), $dirname); };
90          }
91 <        if ( ! ( exists $self->{'urlmodules'}{$type}) ) {
92 <           print "URLhandler: Unsupported type $type\n";
93 <           carp;
94 <        }
95 <        else {
96 <           eval{${$self->{urlostack}{$type}}[$#{$self->{urlostack}{$type}}]}->
81 <                                get($rest, $filename);
91 >
92 >        # Check the return type
93 >        if ( defined $rv ) {
94 >        #  if ( $rv!~/^\// ) {
95 >        #       $rv=$dirname."/".$rv;
96 >        #  }
97          }
98 +        return $rv;
99   }
100  
101   sub setbase {
# Line 125 | Line 141 | sub unsetbase {
141          }
142   }
143  
144 < # ------------------------ General Support Routines ----------------------------
144 > # -------------------- Support Routines (private Methods) -------------
145  
146 < sub cachefilename {
147 <         my $self=shift;
148 <             use File::Basename;
149 <             use Utilities::AddDir;
150 <             my $filebase=dirname($rest);
151 <             $cache="/tmp/williamc/urlhandler$$";
152 <             adddir($cache);
153 <             $filename=$cache."/".$filebase;
154 < }
146 > #
147 > # Process the URL string into its component parts
148 > #
149 > sub _parseurl {
150 >        my $self=shift;
151 >        my $origurl=shift;
152 >        chomp $origurl;
153 >
154 >        my ($type,$rest,$cmdstring)=URLUtilities::parseURL($origurl);
155 >        my $urlstring="";
156 >        my $url;
157 >        
158 >        $base="";
159  
160 +        # check type are supported
161 +        if ( ! ( exists $self->{'urlmodules'}{$type}) ) {
162 +           print "URLhandler: Unsupported type $type\n";
163 +           die;
164 +        }
165 +        else {
166 +           if ( $#{$self->{urlostack}{$type}} < 0 ) {
167 +             print "URLhandler : base not set for type $type \n";
168 +             die;
169 +           }
170 +           else {
171 +             # ---- type is supported
172 +             $urltypehandler=
173 +                ${$self->{urlostack}{$type}}[$#{$self->{urlostack}{$type}}];
174 +             $base=$urltypehandler->baseurl();
175 +           }
176 +        }
177 +
178 +        my $urlbase=($base ne ""?$base."/":"").$rest;
179 +        $urlstring=$type.":".$urlbase.($cmdstring ne ""?"?".$cmdstring:"");
180 +        return $urlstring, $type, $urltypehandler, $urlbase, $cmdstring;
181 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines