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

# 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 $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 }
87
88 sub fullfile {
89 my $self=shift;
90 return $self->{server}
91 }
92
93 sub base {
94 my $self=shift;
95 my $base="";
96 if ( $self->{server}=~/\// ) {
97 ($base=$self->{server})=~s/(.*)\/.*/$1/;
98 }
99 return $base;
100 }
101
102 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 $self->{vars}{$param};
120 }
121
122 #
123 # --- Support Routines
124 #
125
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 sub _vartostring {
141 my $self=shift;
142
143 my $string="";
144 foreach $key ( sort(keys %{$self->{vars}}) ) {
145 $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 }