ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/URL/URLclass.pm
Revision: 1.7
Committed: Fri Nov 12 18:09:20 1999 UTC (25 years, 6 months ago) by williamc
Content type: text/plain
Branch: MAIN
Changes since 1.6: +6 -0 lines
Log Message:
Added fullfile method to save adding base and ifle

File Contents

# User Rev Content
1 williamc 1.1 #
2     # URLclass.pm
3     #
4     # Originally Written by Christopher Williams
5     #
6     # Description
7     #
8     # Interface
9     # ---------
10     # new(url) : A new URLclass object
11     # origurl() : retunr the original url without any expansion
12     # url() : return the full url name with all expansion
13     # expandurl(URLbase) : expand the url to include the given base
14     # file() : return the filename from the end of the path
15 williamc 1.4 # base() : return the basename of the path
16 williamc 1.7 # fullfile() : return base/file
17 williamc 1.1 # param(var) : return the value of a url parameter
18     #
19     # -- specialised use methods
20     # type() : get/set the url type
21     # vars() : get/set the vars hash
22 williamc 1.4 # base(base) : push a base into the url path if it dosnt already match
23 williamc 1.1 # transfervars(varhash) : transfer any variables from varhash into vars
24     # only if they do not already exist
25    
26     package URL::URLclass;
27     require 5.004;
28    
29     sub new {
30     my $class=shift;
31     $self={};
32     bless $self, $class;
33     $self->{vars}={};
34     $self->{origurl}=shift;
35     $self->_url($self->{origurl});
36     return $self;
37     }
38    
39     sub origurl {
40     my $self=shift;
41     return $self->{origurl};
42     }
43    
44    
45     sub type {
46     my $self=shift;
47     @_?$self->{type}=shift
48     :$self->{type};
49     }
50    
51     sub vars {
52     my $self=shift;
53     @_?$self->{vars}=shift
54     :$self->{vars};
55     }
56    
57     sub expandurl {
58     my $self=shift;
59     my $base=shift;
60    
61     $self->{vars}={};
62     $self->_url($self->{origurl}); # reset the current url;
63     $self->transfervars($base->cmds());
64 williamc 1.4 $self->_base($base->base());
65 williamc 1.1 }
66    
67    
68     sub url {
69     my $self=shift;
70    
71     my $vars=$self->_vartostring();
72     my $fullurl=$self->type()."://".$self->{server}.
73     (($vars ne "")?"\?".$vars:"");
74     return $fullurl;
75     }
76    
77     sub transfervars {
78     my $self=shift;
79     my $basevars=shift;
80    
81     foreach $key ( keys %$basevars ) {
82     if ( ! exists $self->{vars}{$key} ) {
83     $self->{vars}{$key}=$$basevars{$key};
84     }
85     }
86 williamc 1.7 }
87    
88     sub fullfile {
89     my $self=shift;
90     return $self->{server}
91 williamc 1.1 }
92    
93 williamc 1.4 sub base {
94     my $self=shift;
95 williamc 1.5 my $base="";
96     if ( $self->{server}=~/\// ) {
97 williamc 1.6 ($base=$self->{server})=~s/(.*)\/.*/$1/;
98 williamc 1.5 }
99 williamc 1.4 return $base;
100     }
101    
102 williamc 1.1 sub file {
103     my $self=shift;
104     my $file;
105    
106     if ( $self->{server}=~/\// ) {
107     ($file=$self->{server})=~s/.*\///g;
108     }
109     else {
110     $file=$self->{server};
111     }
112     return $file;
113     }
114    
115     sub param {
116     my $self=shift;
117     my $param=shift;
118    
119 williamc 1.3 $self->{vars}{$param};
120 williamc 1.1 }
121    
122     #
123     # --- Support Routines
124     #
125 williamc 1.4
126     # push a base name into the url string
127     sub _base {
128     my $self=shift;
129     if ( @_ ) {
130     my $server=shift;
131     if ( ($server ne "") && ($self->{server}!~/\/\//) &&
132     ($self->{server}!~/$server/) ) {
133     # only set if not already in there
134     $self->{server}=$server."/".$self->{server};
135     }
136     }
137     return $self->{server};
138     }
139    
140 williamc 1.1 sub _vartostring {
141     my $self=shift;
142    
143     my $string="";
144 williamc 1.2 foreach $key ( sort(keys %{$self->{vars}}) ) {
145 williamc 1.1 $string=$string.(($string eq "")?"":"\&").$key."=".$self->{vars}{$key};
146     }
147     return $string;
148     }
149    
150     sub _splitvarstring {
151     my $self=shift;
152     my $varstring=shift;
153    
154     my @pairs=split /\&/, $varstring;
155     foreach $pair ( @pairs ) {
156     my ($var,$val)= split /=/, $pair;
157     $self->{vars}{$var}=$val;
158     }
159     }
160    
161     sub _url {
162     my $self=shift;
163     my $url=shift;
164     my @rest;
165    
166     ($self->{type}, @rest)= split ":", $url;
167     my $tmp=join ':' ,@rest;
168     ($self->{server}, @varsarray)=split /\?/, $tmp;
169     my $varstring=join '?' ,@varsarray;
170     $self->{server}=~s/^\/\///;
171     if ( $varstring ) { $self->_splitvarstring($varstring);}
172     }