+ $class->updateVobInfo;
+
+ return $class;
+} # new
+
+sub tag() {
+ my ($self) = @_;
+
+=pod
+
+=head2 tag
+
+Returns the VOB tag
+
+Parameters:
+
+=for html <blockquote>
+
+=over
+
+=item none
+
+=back
+
+=for html </blockquote>
+
+Returns:
+
+=for html <blockquote>
+
+=over
+
+=item VOB's tag
+
+=back
+
+=for html </blockquote>
+
+=cut
+
+ return $self->{tag};
+} # tag
+
+sub gpath() {
+ my ($self) = @_;
+
+=pod
+
+=head2 gpath
+
+Returns the VOB global path
+
+Parameters:
+
+=for html <blockquote>
+
+=over
+
+=item none
+
+=back
+
+=for html </blockquote>
+
+Returns:
+
+=for html <blockquote>
+
+=over
+
+=item VOB's gpath
+
+=back
+
+=for html </blockquote>
+
+=cut
+
+ return $self->{gpath};
+} # gpath
+
+sub shost() {
+ my ($self) = @_;
+
+=pod
+
+=head2 shost
+
+Returns the VOB server host
+
+Parameters:
+
+=for html <blockquote>
+
+=over
+
+=item none
+
+=back
+
+=for html </blockquote>
+
+Returns:
+
+=for html <blockquote>
+
+=over
+
+=item VOB's server host
+
+=back
+
+=for html </blockquote>
+
+=cut
+
+ return $self->{shost};
+} # shost
+
+# Alias name to tag
+sub name() {
+ goto &tag;
+} # name
+
+sub access() {
+ my ($self) = @_;
+
+=pod
+
+=head2 access
+
+Returns the type of VOB access
+
+Parameters:
+
+=for html <blockquote>
+
+=over
+
+=item none
+
+=back
+
+=for html </blockquote>
+
+Returns:
+
+=for html <blockquote>
+
+=over
+
+=item access
+
+Returns either public for public VOBs or private for private VOBs
+
+=back
+
+=for html </blockquote>
+
+=cut
+
+ return $self->{access};
+} # access
+
+sub mopts() {
+ my ($self) = @_;
+
+=pod
+
+=head2 mopts
+
+Returns the mount options
+
+Parameters:
+
+=for html <blockquote>
+
+=over
+
+=item none
+
+=back
+
+=for html </blockquote>
+
+Returns:
+
+=for html <blockquote>
+
+=over
+
+=item VOB's mount options
+
+=back
+
+=for html </blockquote>
+
+=cut
+
+ return $self->{mopts};
+} # mopts
+
+sub region() {
+ my ($self) = @_;
+
+=pod
+
+=head3 region
+
+Returns the region for this VOB tag
+
+Parameters:
+
+=for html <blockquote>
+
+=over
+
+=item none
+
+=back
+
+=for html </blockquote>
+
+Returns:
+
+=for html <blockquote>
+
+=over
+
+=item region
+
+=back
+
+=for html </blockquote>
+
+=cut
+
+ return $self->{region};
+} # region
+
+sub active() {
+ my ($self) = @_;
+
+=pod
+
+=head2 active
+
+Returns that active status (whether or not the vob is currently mounted) of the
+VOB
+
+Parameters:
+
+=for html <blockquote>
+
+=over
+
+=item none
+
+=back
+
+=for html </blockquote>
+
+Returns:
+
+=for html <blockquote>
+
+=over
+
+=item Returns YES for an active VOB or NO for an inactive one
+
+=back
+
+=for html </blockquote>
+
+=cut
+
+ return $self->{active};
+} # active
+
+sub replica_uuid() {
+ my ($self) = @_;
+
+=pod
+
+=head2 replica_uuid
+
+Returns the VOB replica_uuid
+
+Parameters:
+
+=for html <blockquote>
+
+=over
+
+=item none
+
+=back
+
+=for html </blockquote>
+
+Returns:
+
+=for html <blockquote>
+
+=over
+
+=item VOB replica_uuid
+
+=back
+
+=for html </blockquote>
+
+=cut
+
+ return $self->{replica_uuid};
+} # replica_uuid
+
+sub host() {
+ my ($self) = @_;
+
+=pod
+
+=head2 host
+
+Returns the VOB host
+
+Parameters:
+
+=for html <blockquote>
+
+=over
+
+=item none
+
+=back
+
+=for html </blockquote>
+
+Returns:
+
+=for html <blockquote>
+
+=over
+
+=item VOB's host
+
+=back
+
+=for html </blockquote>
+
+=cut
+
+ return $self->{host};
+} # host
+
+sub access_path() {
+ my ($self) = @_;
+
+=pod
+
+=head2 access_path
+
+Returns the VOB access path
+
+Parameters:
+
+=for html <blockquote>
+
+=over
+
+=item none
+
+=back
+
+=for html </blockquote>
+
+Returns:
+
+=for html <blockquote>
+
+=over
+
+=item VOB access path
+
+This is the path relative to the VOB's host
+
+=back
+
+=for html </blockquote>
+
+=cut
+
+ return $self->{access_path};
+} # access_path
+
+sub family_uuid() {
+ my ($self) = @_;
+
+=pod
+
+=head2 family_uuid
+
+Returns the VOB family UUID
+
+Parameters:
+
+=for html <blockquote>
+
+=over
+
+=item none
+
+=back
+
+=for html </blockquote>
+
+Returns:
+
+=for html <blockquote>
+
+=over
+
+=item VOB family UUID
+
+=back
+
+=for html </blockquote>
+
+=cut
+
+ return $self->{family_uuid};
+} # family_uuid
+
+sub vob_registry_attributes() {
+ my ($self) = @_;
+
+=pod
+
+=head2 vob_registry_attributes
+
+Returns the VOB Registry Attributes
+
+Parameters:
+
+=for html <blockquote>
+
+=over
+
+=item none
+
+=back
+
+=for html </blockquote>
+
+Returns:
+
+=for html <blockquote>
+
+=over
+
+=item VOB Registry Attributes
+
+=back
+
+=for html </blockquote>
+
+=cut
+
+ return $self->{vob_registry_attributes};
+} # vob_registry_attributes
+
+sub expand_space() {
+ my ($self) = @_;
+
+ my ($status, @output) = $Clearcase::CC->execute ("space -vob $self->{tag}");
+
+ # Initialize fields in case of command failure
+ $self->{dbsize} = 0;
+ $self->{admsize} = 0;
+ $self->{ctsize} = 0;
+ $self->{dosize} = 0;
+ $self->{srcsize} = 0;
+ $self->{size} = 0;
+
+ for (@output) {
+ if (/(\d*\.\d).*VOB database(.*)/) {
+ $self->{dbsize} = $1;
+ } elsif (/(\d*\.\d).*administration data(.*)/) {
+ $self->{admsize} = $1;
+ } elsif (/(\d*\.\d).*cleartext pool(.*)/) {
+ $self->{ctsize} = $1;
+ } elsif (/(\d*\.\d).*derived object pool(.*)/) {
+ $self->{dosize} = $1;
+ } elsif (/(\d*\.\d).*source pool(.*)/) {
+ $self->{srcsize} = $1;
+ } elsif (/(\d*\.\d).*Subtotal(.*)/) {
+ $self->{size} = $1;
+ } # if
+ } # for
+
+ return;
+} # expand_space
+
+sub expand_description() {
+ my ($self) = @_;
+
+ my ($status, @output) = $Clearcase::CC->execute("describe -long vob:$self->{tag}");
+
+ for (my $i = 0; $i < @output; $i++) {
+ if ($output[$i] =~ /created (\S+) by (.+) \((\S+)\)/) {
+ $self->{created} = $1;
+ $self->{ownername} = $2;
+ $self->{owner} = $3;
+ } elsif ($output[$i] =~ /^\s+\"(.+)\"/) {
+ $self->{comment} = $1;
+ } elsif ($output[$i] =~ /master replica: (.+)/) {
+ $self->{masterReplica} = $1;
+ } elsif ($output[$i] =~ /replica name: (.+)/) {
+ $self->{replicaName} = $1;
+ } elsif ($output[$i] =~ /VOB family featch level: (\d+)/) {
+ $self->{featureLevel} = $1;
+ } elsif ($output[$i] =~ /database schema version: (\d+)/) {
+ $self->{schemaVersion} = $1;
+ } elsif ($output[$i] =~ /modification by remote privileged user: (.+)/) {
+ $self->{remotePrivilege} = $1;
+ } elsif ($output[$i] =~ /atomic checkin: (.+)/) {
+ $self->{atomicCheckin} = $1;
+ } elsif ($output[$i] =~ /VOB ownership:/) {
+ while ($output[$i] !~ /Additional groups:/) {
+ $i++;
+
+ if ($output[$i++] =~ /owner (.+)/) {
+ $self->{owner} = $1;
+ } # if
+
+ if ($output[$i++] =~ /group (.+)/) {
+ $self->{group} = $1;
+ } # if
+ } # while
+
+ my @groups;
+
+ while ($output[$i] !~ /ACLs enabled/) {
+ if ($output[$i++] =~ /group (.+)/) {
+ push @groups, $1;
+ } # if
+ } # while
+
+ $self->{groups} = \@groups;
+
+ if ($output[$i++] =~ /ACLs enabled: (.+)/) {
+ $self->{aclsEnabled} = $1;
+ } # if
+
+ my %attributes;
+
+ while ($i < @output and $output[$i] !~ /Hyperlinks:/) {
+ if ($output[$i] !~ /Attributes:/) {
+ my ($key, $value) = split / = /, $output[$i];
+
+ # Trim leading spaces
+ $key =~ s/^\s*(\S+)/$1/;
+
+ # Remove unnecessary '"'s
+ $value =~ s/\"(.*)\"/$1/;
+
+ $attributes{$key} = $value;
+ } # if
+
+ $i++;
+ } # while
+
+ $self->{attributes} = \%attributes;
+
+ $i++;
+
+ my %hyperlinks;
+
+ while ($i < @output and $output[$i]) {
+ my ($key, $value) = split " -> ", $output[$i++];
+
+ # Trim leading spaces
+ $key =~ s/^\s*(\S+)/$1/;
+
+ $hyperlinks{$key} = $value;
+ } # while
+
+ $self->{hyperlinks} = \%hyperlinks;
+ } # if
+ } # for
+
+ return;
+} # expand_space
+
+sub masterReplica() {
+
+=pod
+
+=head2 masterReplica