ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/URL/URLclass.pm
Revision: 1.2
Committed: Fri Nov 12 16:26:35 1999 UTC (25 years, 6 months ago) by williamc
Content type: text/plain
Branch: MAIN
Changes since 1.1: +1 -1 lines
Log Message:
sort vars in alphabetical order for full filenames

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 # param(var) : return the value of a url parameter
16 #
17 # -- specialised use methods
18 # type() : get/set the url type
19 # vars() : get/set the vars hash
20 # base(base) : push a base into the url path if it dosnt already mactch
21 # transfervars(varhash) : transfer any variables from varhash into vars
22 # only if they do not already exist
23
24 package URL::URLclass;
25 require 5.004;
26
27 sub new {
28 my $class=shift;
29 $self={};
30 bless $self, $class;
31 $self->{vars}={};
32 $self->{origurl}=shift;
33 $self->_url($self->{origurl});
34 return $self;
35 }
36
37 sub origurl {
38 my $self=shift;
39 return $self->{origurl};
40 }
41
42
43 sub type {
44 my $self=shift;
45 @_?$self->{type}=shift
46 :$self->{type};
47 }
48
49 sub vars {
50 my $self=shift;
51 @_?$self->{vars}=shift
52 :$self->{vars};
53 }
54
55 sub expandurl {
56 my $self=shift;
57 my $base=shift;
58
59 $self->{vars}={};
60 $self->_url($self->{origurl}); # reset the current url;
61 $self->transfervars($base->cmds());
62 $self->base($base->base());
63 }
64
65 sub base {
66 my $self=shift;
67 if ( @_ ) {
68 my $server=shift;
69 if ( ($server ne "") && ($self->{server}!~/\/\//) &&
70 ($self->{server}!~/$server/) ) {
71 # only set if not already in there
72 $self->{server}=$server."/".$self->{server};
73 }
74 }
75 return $self->{server};
76 }
77
78 sub url {
79 my $self=shift;
80
81 my $vars=$self->_vartostring();
82 my $fullurl=$self->type()."://".$self->{server}.
83 (($vars ne "")?"\?".$vars:"");
84 return $fullurl;
85 }
86
87 sub transfervars {
88 my $self=shift;
89 my $basevars=shift;
90
91 foreach $key ( keys %$basevars ) {
92 if ( ! exists $self->{vars}{$key} ) {
93 $self->{vars}{$key}=$$basevars{$key};
94 }
95 }
96 }
97
98 sub file {
99 my $self=shift;
100 my $file;
101
102 if ( $self->{server}=~/\// ) {
103 ($file=$self->{server})=~s/.*\///g;
104 }
105 else {
106 $file=$self->{server};
107 }
108 return $file;
109 }
110
111 sub param {
112 my $self=shift;
113 my $param=shift;
114
115 $self->{vars}{'param'};
116 }
117
118 #
119 # --- Support Routines
120 #
121 sub _vartostring {
122 my $self=shift;
123
124 my $string="";
125 foreach $key ( sort(keys %{$self->{vars}}) ) {
126 $string=$string.(($string eq "")?"":"\&").$key."=".$self->{vars}{$key};
127 }
128 return $string;
129 }
130
131 sub _splitvarstring {
132 my $self=shift;
133 my $varstring=shift;
134
135 my @pairs=split /\&/, $varstring;
136 foreach $pair ( @pairs ) {
137 my ($var,$val)= split /=/, $pair;
138 $self->{vars}{$var}=$val;
139 }
140 }
141
142 sub _url {
143 my $self=shift;
144 my $url=shift;
145 my @rest;
146
147 ($self->{type}, @rest)= split ":", $url;
148 my $tmp=join ':' ,@rest;
149 ($self->{server}, @varsarray)=split /\?/, $tmp;
150 my $varstring=join '?' ,@varsarray;
151 $self->{server}=~s/^\/\///;
152 if ( $varstring ) { $self->_splitvarstring($varstring);}
153 }