xref: /AOO41X/main/solenv/bin/modules/installer/patch/MsiRow.pm (revision 9f91b7e30577a5efd4c1ce7f0c95f4b60745abda)
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