ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/URL/URLclass.pm
Revision: 1.8
Committed: Tue Nov 16 17:46:03 1999 UTC (25 years, 5 months ago) by williamc
Content type: text/plain
Branch: MAIN
Changes since 1.7: +13 -5 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 print "base= $base\n";
74 my $fullurl=$self->type()."://".(($base ne "")?$base."/":"").
75 $self->file().(($vars ne "")?"\?".$vars:"");
76 return $fullurl;
77 }
78
79 sub transfervars {
80 my $self=shift;
81 my $basevars=shift;
82
83 foreach $key ( keys %$basevars ) {
84 if ( ! exists $self->{vars}{$key} ) {
85 $self->{vars}{$key}=$$basevars{$key};
86 }
87 }
88 }
89
90 sub fullfile {
91 my $self=shift;
92 return $self->{server}
93 }
94
95 sub base {
96 my $self=shift;
97 my $base="";
98 if ( $self->{server}=~/\/\// ) {
99 ($base=$self->{server})=~s/(.*)\/\/.*/$1/;
100 }
101 elsif ( $self->{server}=~/\// ) {
102 ($base=$self->{server})=~s/(.*)\/.*/$1/;
103 }
104 return $base;
105 }
106
107 sub file {
108 my $self=shift;
109 my $file;
110
111 if ( $self->{server}=~/\/\// ) {
112 ($file=$self->{server})=~s/.*\/\/(.*)/$1/;
113 }
114 elsif ( $self->{server}=~/\// ) {
115 ($file=$self->{server})=~s/.*\///g;
116 }
117 else {
118 $file=$self->{server};
119 }
120 return $file;
121 }
122
123 sub param {
124 my $self=shift;
125 my $param=shift;
126
127 $self->{vars}{$param};
128 }
129
130 #
131 # --- Support Routines
132 #
133
134 # push a base name into the url string
135 sub _base {
136 my $self=shift;
137 if ( @_ ) {
138 my $server=shift;
139 if ( ($server ne "") && ($self->{server}!~/\/\//) &&
140 ($self->{server}!~/$server/) ) {
141 # only set if not already in there
142 $self->{server}=$server."\/\/".$self->{server};
143 }
144 }
145 return $self->{server};
146 }
147
148 sub _vartostring {
149 my $self=shift;
150
151 my $string="";
152 foreach $key ( sort(keys %{$self->{vars}}) ) {
153 $string=$string.(($string eq "")?"":"\&").$key."=".$self->{vars}{$key};
154 }
155 return $string;
156 }
157
158 sub _splitvarstring {
159 my $self=shift;
160 my $varstring=shift;
161
162 my @pairs=split /\&/, $varstring;
163 foreach $pair ( @pairs ) {
164 my ($var,$val)= split /=/, $pair;
165 $self->{vars}{$var}=$val;
166 }
167 }
168
169 sub _url {
170 my $self=shift;
171 my $url=shift;
172 my @rest;
173
174 ($self->{type}, @rest)= split ":", $url;
175 my $tmp=join ':' ,@rest;
176 ($self->{server}, @varsarray)=split /\?/, $tmp;
177 my $varstring=join '?' ,@varsarray;
178 $self->{server}=~s/^\/\///;
179 if ( $varstring ) { $self->_splitvarstring($varstring);}
180 }