ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/Scram/ScramProjectDB.pm
Revision: 1.1.2.2
Committed: Thu May 4 07:53:18 2000 UTC (25 years ago) by williamc
Content type: text/plain
Branch: V0_9branch
CVS Tags: V0_12_6, V0_12_5, V0_12_4, V0_12_3
Changes since 1.1.2.1: +9 -0 lines
Log Message:
new initialaisations

File Contents

# User Rev Content
1 williamc 1.1.2.1 #
2     # ScramProjectDB.pm - Keep a track of available projects
3     #
4     # Originally Written by Christopher Williams
5     #
6     # Description
7     # -----------
8     # Stores project area information
9     #
10     # Interface
11     # ---------
12     # new(dbfile) : A new dbobject object
13     # file() : return the db file
14     # getarea(name,version) : return the object matching the name version
15     # addarea(ConfigArea) : add a project
16 williamc 1.1.2.2 # list() : list areas (retunns $name,$version pairs)
17 williamc 1.1.2.1 # removearea(name,version) : remove the named project
18     # link(dblocation) : link with specified db
19     # unlink(dblocation) : remove link with a specified db
20    
21     package Scram::ScramProjectDB;
22     use Utilities::Verbose;
23     require 5.004;
24     @ISA=qw(Utilities::Verbose);
25    
26     sub new {
27     my $class=shift;
28     my $self={};
29     bless $self, $class;
30     $self->{dbfile}=shift;
31     $self->_readdbfile($self->{dbfile});
32     return $self;
33     }
34    
35     sub file {
36     my $self=shift;
37     return $self->{dbfile};
38     }
39    
40     sub getarea {
41     my $self=shift;
42     my $name=shift;
43     my $version=shift;
44    
45     my $area;
46     my $index=$self->_findlocal($name,$version);
47     if ( $index != -1 ) {
48     my $location=$self->{projects}[$index][3];
49     $area=Configuration::ConfigArea->new();
50     $self->verbose("Attempt to ressurect $name $version from $location");
51     if ( $area->bootstrapfromlocation($location) == 1 ) {
52     undef $area;
53     $self->verbose("attempt unsuccessful");
54     }
55     else {
56     $self->verbose("area found");
57     }
58     }
59 williamc 1.1.2.2 else {
60     $self->verbose("Area $name $version not found");
61     }
62 williamc 1.1.2.1 return $area;
63     }
64    
65     sub addarea {
66     my $self=shift;
67     my $area=shift;
68    
69     my $name=$area->name();
70     my $version=$area->version();
71     my $type="_location";
72     my $url=$area->location();
73     push @{$self->{projects}}, [ ($name,$version,$type,$url) ];
74     $self->_save();
75 williamc 1.1.2.2 }
76    
77     sub list {
78     my $self=shift;
79     return @{$self->{projects}};
80 williamc 1.1.2.1 }
81    
82     sub removearea {
83     my $self=shift;
84     my $name=shift;
85     my $version=shift;
86    
87     print "Not yet implemented\n";
88     }
89    
90     sub link {
91     my $self=shift;
92     my $dbfile=shift;
93    
94     my $newdb=Scram::ScramProjectDB->new($dbfile);
95     push @{$self->{linkeddbs}},$newdb;
96     $self->_save();
97     }
98    
99     # -- Support Routines
100    
101     #
102     # Search through the project list until we get a match
103     sub _findlocal {
104     my $self=shift;
105     my $name=shift;
106     my $version=shift;
107    
108     my $found=-1;
109     for (my $i=0; $i<=$#{$self->{projects}}; $i++ ) {
110     if ( ( $self->{projects}[$i][0] eq $name) &&
111     ( $self->{projects}[$i][1] eq $version) ) {
112     $found=$i;
113     last;
114     }
115     }
116     return $found;
117     }
118    
119     sub _save {
120     my $self=shift;
121    
122     use FileHandle;
123     my $fh=FileHandle->new();
124     my $filename=$self->{dbfile}."_tmp";
125     open ( $fh, ">$filename" );
126     # print current links
127     foreach $db ( @{$self->{linkeddbs}} ) {
128     print $fh "\!DB ".$db->file()."\n";
129     }
130     # save project info
131     my $temp;
132     foreach $elem ( @{$self->{projects}} ) {
133     $temp=join ":", @{$elem};
134     print $fh $temp;
135     }
136     undef $fh;
137     }
138    
139     sub _readdbfile {
140     my $self=shift;
141     my $file=shift;
142    
143     use FileHandle;
144     my $fh=FileHandle->new();
145     open ( $fh, "<$file" );
146    
147     my @vars;
148     while ( $map=<$fh> ) {
149     chomp $map;
150     if ( $map=~/^\!DB (.*)/ ) { # Check for other DB files
151     my $db=$1;
152     if ( -f $db ) {
153     $newdb=Scram::ScramProjectDB->new($db);
154     push @{$self->{linkeddbs}},$newdb;
155     }
156     next;
157     }
158     @vars = split ":", $map;
159     push @{$self->{projects}}, [ @vars ];
160     }
161     undef $fh;
162     }