1c9b362f6SAndre Fischer#************************************************************** 2c9b362f6SAndre Fischer# 3c9b362f6SAndre Fischer# Licensed to the Apache Software Foundation (ASF) under one 4c9b362f6SAndre Fischer# or more contributor license agreements. See the NOTICE file 5c9b362f6SAndre Fischer# distributed with this work for additional information 6c9b362f6SAndre Fischer# regarding copyright ownership. The ASF licenses this file 7c9b362f6SAndre Fischer# to you under the Apache License, Version 2.0 (the 8c9b362f6SAndre Fischer# "License"); you may not use this file except in compliance 9c9b362f6SAndre Fischer# with the License. You may obtain a copy of the License at 10c9b362f6SAndre Fischer# 11c9b362f6SAndre Fischer# http://www.apache.org/licenses/LICENSE-2.0 12c9b362f6SAndre Fischer# 13c9b362f6SAndre Fischer# Unless required by applicable law or agreed to in writing, 14c9b362f6SAndre Fischer# software distributed under the License is distributed on an 15c9b362f6SAndre Fischer# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16c9b362f6SAndre Fischer# KIND, either express or implied. See the License for the 17c9b362f6SAndre Fischer# specific language governing permissions and limitations 18c9b362f6SAndre Fischer# under the License. 19c9b362f6SAndre Fischer# 20c9b362f6SAndre Fischer#************************************************************** 21c9b362f6SAndre Fischer 22c9b362f6SAndre Fischerpackage installer::patch::MsiRow; 23c9b362f6SAndre Fischer 24c9b362f6SAndre Fischer=head1 NAME 25c9b362f6SAndre Fischer 26c9b362f6SAndre Fischer package installer::patch::MsiRow - Class that represents a single row of an Msi table. 27c9b362f6SAndre Fischer 28c9b362f6SAndre Fischer=cut 29c9b362f6SAndre Fischer 30c9b362f6SAndre Fischer 31c9b362f6SAndre Fischer=head2 new ($class, $table, @data) 32c9b362f6SAndre Fischer 33c9b362f6SAndre Fischer Create a new MsiRow object for the given table row data. Each row 34c9b362f6SAndre Fischer stores a reference to its $table so that it can access global 35c9b362f6SAndre Fischer values like column names. 36c9b362f6SAndre Fischer 37c9b362f6SAndre Fischer=cut 38c9b362f6SAndre Fischersub new ($$@) 39c9b362f6SAndre Fischer{ 40c9b362f6SAndre Fischer my ($class, $table, @data) = @_; 41c9b362f6SAndre Fischer 42c9b362f6SAndre Fischer my $self = { 43c9b362f6SAndre Fischer 'table' => $table, 44c9b362f6SAndre Fischer 'values' => [@data] 45c9b362f6SAndre Fischer }; 46c9b362f6SAndre Fischer bless($self, $class); 47c9b362f6SAndre Fischer 48c9b362f6SAndre Fischer my $column_count = $table->GetColumnCount(); 49c9b362f6SAndre Fischer while (scalar @{$self->{'values'}} < $column_count) 50c9b362f6SAndre Fischer { 51c9b362f6SAndre Fischer push @{$self->{'values'}}, ""; 52c9b362f6SAndre Fischer } 53c9b362f6SAndre Fischer 54c9b362f6SAndre Fischer return $self; 55c9b362f6SAndre Fischer} 56c9b362f6SAndre Fischer 57c9b362f6SAndre Fischer 58c9b362f6SAndre Fischer 59c9b362f6SAndre Fischer=head2 GetValue($self, $column) 60c9b362f6SAndre Fischer 61c9b362f6SAndre Fischer Return the value in the column specified by $column, which can be 62c9b362f6SAndre Fischer either the column name or the index of the column. 63c9b362f6SAndre Fischer 64c9b362f6SAndre Fischer=cut 65c9b362f6SAndre Fischersub GetValue ($$) 66c9b362f6SAndre Fischer{ 67c9b362f6SAndre Fischer my ($self, $column) = @_; 68c9b362f6SAndre Fischer 69c9b362f6SAndre Fischer if ($column =~ /^\d+$/) 70c9b362f6SAndre Fischer { 71c9b362f6SAndre Fischer return $self->{'values'}->[$column]; 72c9b362f6SAndre Fischer } 73c9b362f6SAndre Fischer else 74c9b362f6SAndre Fischer { 75c9b362f6SAndre Fischer my $column_index = $self->{'table'}->GetColumnIndex($column); 76c9b362f6SAndre Fischer return $self->{'values'}->[$column_index]; 77c9b362f6SAndre Fischer } 78c9b362f6SAndre Fischer} 79c9b362f6SAndre Fischer 80c9b362f6SAndre Fischer 81c9b362f6SAndre Fischer 82c9b362f6SAndre Fischer 83c9b362f6SAndre Fischersub SetValue ($$$) 84c9b362f6SAndre Fischer{ 85c9b362f6SAndre Fischer my ($self, $column, $value) = @_; 86c9b362f6SAndre Fischer 87c9b362f6SAndre Fischer if ($column =~ /^\d+$/) 88c9b362f6SAndre Fischer { 89c9b362f6SAndre Fischer $self->{'values'}->[$column] = $value; 90c9b362f6SAndre Fischer } 91c9b362f6SAndre Fischer else 92c9b362f6SAndre Fischer { 93c9b362f6SAndre Fischer my $column_index = $self->{'table'}->GetColumnIndex($column); 94c9b362f6SAndre Fischer $self->{'values'}->[$column_index] = $value; 95c9b362f6SAndre Fischer } 96c9b362f6SAndre Fischer $self->{'table'}->MarkAsModified(); 97c9b362f6SAndre Fischer} 98c9b362f6SAndre Fischer 99c9b362f6SAndre Fischer 100c9b362f6SAndre Fischer 101c9b362f6SAndre Fischer 102*9f91b7e3SAndre Fischersub GetAllValues ($) 103*9f91b7e3SAndre Fischer{ 104*9f91b7e3SAndre Fischer my ($self) = @_; 105*9f91b7e3SAndre Fischer return @{$self->{'values'}}; 106*9f91b7e3SAndre Fischer} 107*9f91b7e3SAndre Fischer 108*9f91b7e3SAndre Fischer 109*9f91b7e3SAndre Fischer 110*9f91b7e3SAndre Fischer 111c9b362f6SAndre Fischersub Format ($$) 112c9b362f6SAndre Fischer{ 113c9b362f6SAndre Fischer my $self = shift; 114c9b362f6SAndre Fischer my $concatenation = shift; 115c9b362f6SAndre Fischer 116c9b362f6SAndre Fischer my $result = ""; 117c9b362f6SAndre Fischer my $first = 1; 118c9b362f6SAndre Fischer my $index = 0; 119c9b362f6SAndre Fischer my $column_count = $self->{'table'}->GetColumnCount(); 120c9b362f6SAndre Fischer foreach my $item (@{$self->{'values'}}) 121c9b362f6SAndre Fischer { 122c9b362f6SAndre Fischer ++$index; 123c9b362f6SAndre Fischer 124c9b362f6SAndre Fischer if ( ! $first) 125c9b362f6SAndre Fischer { 126c9b362f6SAndre Fischer $result .= $concatenation; 127c9b362f6SAndre Fischer } 128c9b362f6SAndre Fischer else 129c9b362f6SAndre Fischer { 130c9b362f6SAndre Fischer $first = 0; 131c9b362f6SAndre Fischer } 132c9b362f6SAndre Fischer $result .= $item; 133c9b362f6SAndre Fischer } 134c9b362f6SAndre Fischer return $result; 135c9b362f6SAndre Fischer} 136c9b362f6SAndre Fischer 137c9b362f6SAndre Fischer 138c9b362f6SAndre Fischer 139c9b362f6SAndre Fischer 140c9b362f6SAndre Fischersub Clone ($$) 141c9b362f6SAndre Fischer{ 142c9b362f6SAndre Fischer my ($self, $new_table) = @_; 143c9b362f6SAndre Fischer 144c9b362f6SAndre Fischer my $clone = { %$self }; 145c9b362f6SAndre Fischer $clone->{'values'} = [ @{$self->{'values'}} ]; 146c9b362f6SAndre Fischer $clone->{'table'} = $new_table; 147c9b362f6SAndre Fischer bless($clone, "MsiRow"); 148c9b362f6SAndre Fischer 149c9b362f6SAndre Fischer return $clone; 150c9b362f6SAndre Fischer} 151c9b362f6SAndre Fischer 152c9b362f6SAndre Fischer 153c9b362f6SAndre Fischer 154c9b362f6SAndre Fischer 155c9b362f6SAndre Fischersub SetTable ($$) 156c9b362f6SAndre Fischer{ 157c9b362f6SAndre Fischer my ($self, $new_table) = @_; 158c9b362f6SAndre Fischer 159c9b362f6SAndre Fischer if (defined $self->{'table'} && $self->{'table'} != $new_table) 160c9b362f6SAndre Fischer { 161c9b362f6SAndre Fischer MsiTools::Die("can not reset table of row"); 162c9b362f6SAndre Fischer } 163c9b362f6SAndre Fischer else 164c9b362f6SAndre Fischer { 165c9b362f6SAndre Fischer $self->{'table'} = $new_table; 166c9b362f6SAndre Fischer } 167c9b362f6SAndre Fischer} 168c9b362f6SAndre Fischer 169c9b362f6SAndre Fischer1; 170