ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/URL/URLclass.pm
Revision: 1.9
Committed: Tue Nov 16 17:46:20 1999 UTC (25 years, 5 months ago) by williamc
Content type: text/plain
Branch: MAIN
Changes since 1.8: +0 -1 lines
Log Message:
Change base and file to break on last //

File Contents

# Content
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 # base() : return the basename of the path
16 # fullfile() : return base/file
17 # 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 # base(base) : push a base into the url path if it dosnt already match
23 # 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 $self->_base($base->base());
65 }
66
67
68 sub url {
69 my $self=shift;
70
71 my $vars=$self->_vartostring();
72 my $base=$self->base();
73 my $fullurl=$self->type()."://".(($base ne "")?$base."/":"").
74 $self->file().(($vars ne "")?"\?".$vars:"");
75 return $fullurl;
76 }
77
78 sub transfervars {
79 my $self=shift;
80 my $basevars=shift;
81
82 foreach $key ( keys %$basevars ) {
83 if ( ! exists $self->{vars}{$key} ) {
84 $self->{vars}{$key}=$$basevars{$key};
85 }
86 }
87 }
88
89 sub fullfile {
90 my $self=shift;
91 return $self->{server}
92 }
93
94 sub base {
95 my $self=shift;
96 my $base="";
97 if ( $self->{server}=~/\/\// ) {
98 ($base=$self->{server})=~s/(.*)\/\/.*/$1/;
99 }
100 elsif ( $self->{server}=~/\// ) {
101 ($base=$self->{server})=~s/(.*)\/.*/$1/;
102 }
103 return $base;
104 }
105
106 sub file {
107 my $self=shift;
108 my $file;
109
110 if ( $self->{server}=~/\/\// ) {
111 ($file=$self->{server})=~s/.*\/\/(.*)/$1/;
112 }
113 elsif ( $self->{server}=~/\// ) {
114 ($file=$self->{server})=~s/.*\///g;
115 }
116 else {
117 $file=$self->{server};
118 }
119 return $file;
120 }
121
122 sub param {
123 my $self=shift;
124 my $param=shift;
125
126 $self->{vars}{$param};
127 }
128
129 #
130 # --- Support Routines
131 #
132
133 # push a base name into the url string
134 sub _base {
135 my $self=shift;
136 if ( @_ ) {
137 my $server=shift;
138 if ( ($server ne "") && ($self->{server}!~/\/\//) &&
139 ($self->{server}!~/$server/) ) {
140 # only set if not already in there
141 $self->{server}=$server."\/\/".$self->{server};
142 }
143 }
144 return $self->{server};
145 }
146
147 sub _vartostring {
148 my $self=shift;
149
150 my $string="";
151 foreach $key ( sort(keys %{$self->{vars}}) ) {
152 $string=$string.(($string eq "")?"":"\&").$key."=".$self->{vars}{$key};
153 }
154 return $string;
155 }
156
157 sub _splitvarstring {
158 my $self=shift;
159 my $varstring=shift;
160
161 my @pairs=split /\&/, $varstring;
162 foreach $pair ( @pairs ) {
163 my ($var,$val)= split /=/, $pair;
164 $self->{vars}{$var}=$val;
165 }
166 }
167
168 sub _url {
169 my $self=shift;
170 my $url=shift;
171 my @rest;
172
173 ($self->{type}, @rest)= split ":", $url;
174 my $tmp=join ':' ,@rest;
175 ($self->{server}, @varsarray)=split /\?/, $tmp;
176 my $varstring=join '?' ,@varsarray;
177 $self->{server}=~s/^\/\///;
178 if ( $varstring ) { $self->_splitvarstring($varstring);}
179 }