ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/Configuration/ConfigArea.pm
Revision: 1.4
Committed: Fri Jan 21 11:56:38 2000 UTC (25 years, 3 months ago) by williamc
Content type: text/plain
Branch: MAIN
Changes since 1.3: +29 -15 lines
Log Message:
last helsini ci

File Contents

# User Rev Content
1 williamc 1.1 #
2     # ConfigArea.pm
3     #
4     # Originally Written by Christopher Williams
5     #
6     # Description
7     #
8     # Interface
9     # ---------
10     # new(ActiveConfig) : A new ConfigArea object
11     # setup() : setup the configuration area
12     # location([dir]) : set/return the location of the area
13     # version([version]) : set/return the version of the area
14     # name([name]) : set/return the name of the area
15     # store(location) : store data in file location
16     # restore(location) : restore data from file location
17     # meta() : return a description string of the area
18     # addconfigitem(url) : add a new item to the area
19     # configitem(@keys) : return a list of fig items that match
20     # the keys - all if left blank
21 williamc 1.4 # parentstore() : set/return the parent ObjectStore
22 williamc 1.1
23     package Configuration::ConfigArea;
24     use ActiveDoc::ActiveDoc;
25     require 5.004;
26     use Utilities::AddDir;
27     use ObjectUtilities::ObjectStore;
28     @ISA=qw(ActiveDoc::ActiveDoc ObjectUtilities::StorableObject);
29    
30     sub init {
31     my $self=shift;
32     $self->newparse("init");
33     $self->newparse("download");
34     $self->newparse("setup");
35     $self->addtag("init","project",\&Project_Start,$self,
36     \&Project_text,$self,"", $self );
37     $self->addurltags("download");
38     $self->addtag("download","use",\&Use_download_Start,$self,
39     "", $self, "",$self);
40     $self->addurltags("setup");
41     $self->addtag("setup","use",\&Use_Start,$self, "", $self, "",$self);
42     }
43    
44     sub setup {
45     my $self=shift;
46    
47     # --- find out the location
48     my $location=$self->requestoption("area_location",
49     "Please Enter the location of the directory");
50    
51     # --- find area directory name , default name projectname_version
52     my $name=$self->option("area_name");
53     my $vers=$self->version;
54     if ( ! defined $name ) {
55     $name=$self->name();
56     $vers=~s/^$name_//;
57     $name=$name."_".$vers;
58     }
59     $self->location($location."/".$name);
60    
61     # make a new store handler
62 williamc 1.4 $self->_setupstore();
63 williamc 1.1
64     # --- download everything first
65     # FIX-ME --- cacheing is broken
66 williamc 1.2 $self->parse("download");
67 williamc 1.1
68     # --- and parse the setup file
69     $self->parse("setup");
70 williamc 1.3
71     # --- store self in original database
72 williamc 1.4 $self->parentconfig()->store($self,"ConfigArea",$self->name(),
73 williamc 1.3 $self->version());
74     }
75    
76     sub _setupstore {
77     my $self=shift;
78    
79     # --- make a new ActiveStore at the location and add it to the db list
80     my $ad=ActiveDoc::ActiveConfig->new($self->location()."/\.SCRAM");
81    
82 williamc 1.4 $self->parentconfig($self->config());
83     # $self->config(Configuration::ConfigureStore->new());
84     # $self->config()->db("local",$ad);
85     # $self->config()->db("parent",$self->parentconfig());
86     # $self->config()->policy("cache","local");
87     $self->config($ad);
88     $self->config()->basedoc($self->parentconfig()->basedoc());
89     }
90    
91     sub parentconfig {
92     my $self=shift;
93     @_?$self->{parentconfig}=shift
94     :$self->{parentconfig};
95 williamc 1.1 }
96    
97     sub store {
98     my $self=shift;
99     my $location=shift;
100    
101     my $fh=$self->openfile(">".$location);
102 williamc 1.4 $self->savevar($fh,"location", $self->location());
103     $self->savevar($fh,"url", $self->url());
104     $self->savevar($fh,"name", $self->name());
105     $self->savevar($fh,"version", $self->version());
106 williamc 1.1 $fh->close();
107     }
108    
109     sub restore {
110     my $self=shift;
111 williamc 1.4 my $location=shift;
112 williamc 1.1
113     my $fh=$self->openfile("<".$location);
114 williamc 1.4 my $varhash={};
115     $self->restorevars($fh,$varhash);
116     $self->location($$varhash{"location"});
117     $self->_setupstore();
118     $self->url($$varhash{"url"});
119     $self->name($$varhash{"name"});
120     $self->version($$varhash{"version"});
121 williamc 1.1 $fh->close();
122     }
123    
124     sub name {
125     my $self=shift;
126    
127     @_?$self->{name}=shift
128     :$self->{name};
129     }
130    
131     sub version {
132     my $self=shift;
133    
134     @_?$self->{version}=shift
135     :$self->{version};
136     }
137    
138     sub location {
139     my $self=shift;
140    
141     @_?$self->{location}=shift
142     :$self->{location};
143     }
144    
145     sub meta {
146     my $self=shift;
147    
148     my $string=$self->name()." ".$self->version()." located at :\n ".
149     $self->location;
150     }
151    
152     sub configitem {
153     my $self=shift;
154     my $location=shift;
155    
156     $self->config()->find("ConfigItem",@_);
157     }
158    
159     sub addconfigitem {
160     my $self=shift;
161     my $url=shift;
162    
163     my $docref=$self->activatedoc($url);
164     # Set up the document
165     $docref->setup();
166 williamc 1.4 # $self->config()->storepolicy("local");
167 williamc 1.1 $docref->save();
168     }
169    
170     # -------------- Tags ---------------------------------
171     # -- init parse
172     sub Project_Start {
173     my $self=shift;
174     my $name=shift;
175     my $hashref=shift;
176    
177     $self->checktag($name,$hashref,'name');
178     $self->checktag($name,$hashref,'version');
179    
180     $self->name($$hashref{'name'});
181     $self->version($$hashref{'version'});
182     }
183    
184    
185     sub Project_text {
186     my $self=shift;
187     my $name=shift;
188     my $string=shift;
189    
190     print $string;
191     }
192    
193     # ---- download parse
194    
195     sub Use_download_Start {
196     my $self=shift;
197     my $name=shift;
198     my $hashref=shift;
199    
200     $self->checktag($name,$hashref,'url');
201     print "Downloading .... ".$$hashref{'url'}."\n";
202     $self->getfile($$hashref{'url'});
203     }
204    
205     # --- setup parse
206    
207     sub Use_Start {
208     my $self=shift;
209     my $name=shift;
210     my $hashref=shift;
211    
212     $self->checktag($name,$hashref,'url');
213     $self->addconfigitem($$hashref{'url'});
214     }
215