| #************************************************************** |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| #************************************************************** |
| |
| package installer::patch::MsiRow; |
| |
| =head1 NAME |
| |
| package installer::patch::MsiRow - Class that represents a single row of an Msi table. |
| |
| =cut |
| |
| |
| =head2 new ($class, $table, @data) |
| |
| Create a new MsiRow object for the given table row data. Each row |
| stores a reference to its $table so that it can access global |
| values like column names. |
| |
| =cut |
| sub new ($$@) |
| { |
| my ($class, $table, @data) = @_; |
| |
| my $self = { |
| 'table' => $table, |
| 'values' => [@data] |
| }; |
| bless($self, $class); |
| |
| my $column_count = $table->GetColumnCount(); |
| while (scalar @{$self->{'values'}} < $column_count) |
| { |
| push @{$self->{'values'}}, ""; |
| } |
| |
| return $self; |
| } |
| |
| |
| |
| =head2 GetValue($self, $column) |
| |
| Return the value in the column specified by $column, which can be |
| either the column name or the index of the column. |
| |
| =cut |
| sub GetValue ($$) |
| { |
| my ($self, $column) = @_; |
| |
| if ($column =~ /^\d+$/) |
| { |
| return $self->{'values'}->[$column]; |
| } |
| else |
| { |
| my $column_index = $self->{'table'}->GetColumnIndex($column); |
| return $self->{'values'}->[$column_index]; |
| } |
| } |
| |
| |
| |
| |
| sub SetValue ($$$) |
| { |
| my ($self, $column, $value) = @_; |
| |
| if ($column =~ /^\d+$/) |
| { |
| $self->{'values'}->[$column] = $value; |
| } |
| else |
| { |
| my $column_index = $self->{'table'}->GetColumnIndex($column); |
| $self->{'values'}->[$column_index] = $value; |
| } |
| $self->{'table'}->MarkAsModified(); |
| } |
| |
| |
| |
| |
| sub GetAllValues ($) |
| { |
| my ($self) = @_; |
| return @{$self->{'values'}}; |
| } |
| |
| |
| |
| |
| sub Format ($$) |
| { |
| my $self = shift; |
| my $concatenation = shift; |
| |
| my $result = ""; |
| my $first = 1; |
| my $index = 0; |
| my $column_count = $self->{'table'}->GetColumnCount(); |
| foreach my $item (@{$self->{'values'}}) |
| { |
| ++$index; |
| |
| if ( ! $first) |
| { |
| $result .= $concatenation; |
| } |
| else |
| { |
| $first = 0; |
| } |
| $result .= $item; |
| } |
| return $result; |
| } |
| |
| |
| |
| |
| sub Clone ($$) |
| { |
| my ($self, $new_table) = @_; |
| |
| my $clone = { %$self }; |
| $clone->{'values'} = [ @{$self->{'values'}} ]; |
| $clone->{'table'} = $new_table; |
| bless($clone, "MsiRow"); |
| |
| return $clone; |
| } |
| |
| |
| |
| |
| sub SetTable ($$) |
| { |
| my ($self, $new_table) = @_; |
| |
| if (defined $self->{'table'} && $self->{'table'} != $new_table) |
| { |
| MsiTools::Die("can not reset table of row"); |
| } |
| else |
| { |
| $self->{'table'} = $new_table; |
| } |
| } |
| |
| 1; |