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