1*cdf0e10cSrcweir#*************************************************************************
2*cdf0e10cSrcweir#
3*cdf0e10cSrcweir# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir#
5*cdf0e10cSrcweir# Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir#
7*cdf0e10cSrcweir# OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir#
9*cdf0e10cSrcweir# This file is part of OpenOffice.org.
10*cdf0e10cSrcweir#
11*cdf0e10cSrcweir# OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir# it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir# only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir#
15*cdf0e10cSrcweir# OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir# but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir# GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir# (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir#
21*cdf0e10cSrcweir# You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir# version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir# <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir# for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir#
26*cdf0e10cSrcweir#*************************************************************************
27*cdf0e10cSrcweir
28*cdf0e10cSrcweirpackage installer::windows::removefile;
29*cdf0e10cSrcweir
30*cdf0e10cSrcweiruse installer::files;
31*cdf0e10cSrcweiruse installer::globals;
32*cdf0e10cSrcweiruse installer::windows::idtglobal;
33*cdf0e10cSrcweir
34*cdf0e10cSrcweir########################################################################
35*cdf0e10cSrcweir# Returning the FileKey for a folderitem for removefile table.
36*cdf0e10cSrcweir########################################################################
37*cdf0e10cSrcweir
38*cdf0e10cSrcweirsub get_removefile_filekey
39*cdf0e10cSrcweir{
40*cdf0e10cSrcweir	my ($folderitem) = @_;
41*cdf0e10cSrcweir
42*cdf0e10cSrcweir	# returning the unique identifier
43*cdf0e10cSrcweir
44*cdf0e10cSrcweir	my $identifier = "remove_" . $folderitem->{'directory'};
45*cdf0e10cSrcweir
46*cdf0e10cSrcweir	$identifier = lc($identifier);
47*cdf0e10cSrcweir
48*cdf0e10cSrcweir	return $identifier;
49*cdf0e10cSrcweir}
50*cdf0e10cSrcweir
51*cdf0e10cSrcweir########################################################################
52*cdf0e10cSrcweir# Returning the Component for a folderitem for removefile table.
53*cdf0e10cSrcweir########################################################################
54*cdf0e10cSrcweir
55*cdf0e10cSrcweirsub get_removefile_component
56*cdf0e10cSrcweir{
57*cdf0e10cSrcweir	my ($folderitem) = @_;
58*cdf0e10cSrcweir
59*cdf0e10cSrcweir	return $folderitem->{'component'};
60*cdf0e10cSrcweir}
61*cdf0e10cSrcweir
62*cdf0e10cSrcweir########################################################################
63*cdf0e10cSrcweir# Returning the FileName for a folderitem for removefile table.
64*cdf0e10cSrcweir########################################################################
65*cdf0e10cSrcweir
66*cdf0e10cSrcweirsub get_removefile_filename
67*cdf0e10cSrcweir{
68*cdf0e10cSrcweir	my ($folderitem) = @_;
69*cdf0e10cSrcweir
70*cdf0e10cSrcweir	 # return nothing: The assigned directory will be removed
71*cdf0e10cSrcweir
72*cdf0e10cSrcweir	return "";
73*cdf0e10cSrcweir}
74*cdf0e10cSrcweir
75*cdf0e10cSrcweir########################################################################
76*cdf0e10cSrcweir# Returning the DirProperty for a folderitem for removefile table.
77*cdf0e10cSrcweir########################################################################
78*cdf0e10cSrcweir
79*cdf0e10cSrcweirsub get_removefile_dirproperty
80*cdf0e10cSrcweir{
81*cdf0e10cSrcweir	my ($folderitem) = @_;
82*cdf0e10cSrcweir
83*cdf0e10cSrcweir	return $folderitem->{'directory'};
84*cdf0e10cSrcweir}
85*cdf0e10cSrcweir
86*cdf0e10cSrcweir########################################################################
87*cdf0e10cSrcweir# Returning the InstallMode for a folderitem for removefile table.
88*cdf0e10cSrcweir########################################################################
89*cdf0e10cSrcweir
90*cdf0e10cSrcweirsub get_removefile_installmode
91*cdf0e10cSrcweir{
92*cdf0e10cSrcweir	my ($folderitem) = @_;
93*cdf0e10cSrcweir
94*cdf0e10cSrcweir	# always returning "2": The file is only removed, if the assigned
95*cdf0e10cSrcweir	# component is removed. Name: msidbRemoveFileInstallModeOnRemove
96*cdf0e10cSrcweir
97*cdf0e10cSrcweir	return 2;
98*cdf0e10cSrcweir}
99*cdf0e10cSrcweir
100*cdf0e10cSrcweir###########################################################################################################
101*cdf0e10cSrcweir# Creating the file RemoveFi.idt dynamically
102*cdf0e10cSrcweir# Content:
103*cdf0e10cSrcweir# FileKey Component_ FileName DirProperty InstallMode
104*cdf0e10cSrcweir###########################################################################################################
105*cdf0e10cSrcweir
106*cdf0e10cSrcweirsub create_removefile_table
107*cdf0e10cSrcweir{
108*cdf0e10cSrcweir	my ($folderitemsref, $basedir) = @_;
109*cdf0e10cSrcweir
110*cdf0e10cSrcweir	my @removefiletable = ();
111*cdf0e10cSrcweir
112*cdf0e10cSrcweir	installer::windows::idtglobal::write_idt_header(\@removefiletable, "removefile");
113*cdf0e10cSrcweir
114*cdf0e10cSrcweir	# Only the directories created for the FolderItems have to be deleted
115*cdf0e10cSrcweir	# with the information in the table RemoveFile
116*cdf0e10cSrcweir
117*cdf0e10cSrcweir	my @directorycollector = ();
118*cdf0e10cSrcweir
119*cdf0e10cSrcweir	for ( my $i = 0; $i <= $#{$folderitemsref}; $i++ )
120*cdf0e10cSrcweir	{
121*cdf0e10cSrcweir		my $onelink = ${$folderitemsref}[$i];
122*cdf0e10cSrcweir
123*cdf0e10cSrcweir		if ( $onelink->{'used'} == 0 ) { next; }
124*cdf0e10cSrcweir
125*cdf0e10cSrcweir		if ( installer::existence::exists_in_array($onelink->{'directory'}, \@directorycollector)) { next; }
126*cdf0e10cSrcweir
127*cdf0e10cSrcweir		push(@directorycollector, $onelink->{'directory'});
128*cdf0e10cSrcweir
129*cdf0e10cSrcweir		my %removefile = ();
130*cdf0e10cSrcweir
131*cdf0e10cSrcweir		$removefile{'FileKey'} = get_removefile_filekey($onelink);
132*cdf0e10cSrcweir		$removefile{'Component_'} = get_removefile_component($onelink);
133*cdf0e10cSrcweir		$removefile{'FileName'} = get_removefile_filename($onelink);
134*cdf0e10cSrcweir		$removefile{'DirProperty'} = get_removefile_dirproperty($onelink);
135*cdf0e10cSrcweir		$removefile{'InstallMode'} = get_removefile_installmode($onelink);
136*cdf0e10cSrcweir
137*cdf0e10cSrcweir		my $oneline = $removefile{'FileKey'} . "\t" . $removefile{'Component_'} . "\t" . $removefile{'FileName'} . "\t"
138*cdf0e10cSrcweir					. $removefile{'DirProperty'} . "\t" . $removefile{'InstallMode'} . "\n";
139*cdf0e10cSrcweir
140*cdf0e10cSrcweir		push(@removefiletable, $oneline);
141*cdf0e10cSrcweir	}
142*cdf0e10cSrcweir
143*cdf0e10cSrcweir	# Saving the file
144*cdf0e10cSrcweir
145*cdf0e10cSrcweir	my $removefiletablename = $basedir . $installer::globals::separator . "RemoveFi.idt";
146*cdf0e10cSrcweir	installer::files::save_file($removefiletablename ,\@removefiletable);
147*cdf0e10cSrcweir	my $infoline = "Created idt file: $removefiletablename\n";
148*cdf0e10cSrcweir	push(@installer::globals::logfileinfo, $infoline);
149*cdf0e10cSrcweir
150*cdf0e10cSrcweir}
151*cdf0e10cSrcweir
152*cdf0e10cSrcweir1;