1#*************************************************************************
2#
3# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4#
5# Copyright 2000, 2010 Oracle and/or its affiliates.
6#
7# OpenOffice.org - a multi-platform office productivity suite
8#
9# This file is part of OpenOffice.org.
10#
11# OpenOffice.org is free software: you can redistribute it and/or modify
12# it under the terms of the GNU Lesser General Public License version 3
13# only, as published by the Free Software Foundation.
14#
15# OpenOffice.org is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18# GNU Lesser General Public License version 3 for more details
19# (a copy is included in the LICENSE file that accompanied this code).
20#
21# You should have received a copy of the GNU Lesser General Public License
22# version 3 along with OpenOffice.org.  If not, see
23# <http://www.openoffice.org/license.html>
24# for a copy of the LGPLv3 License.
25#
26#*************************************************************************
27
28package installer::converter;
29
30use installer::globals;
31
32#############################
33# Converter
34#############################
35
36sub convert_array_to_hash
37{
38	my ($arrayref) = @_;
39
40	my %newhash = ();
41
42	for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
43	{
44		my $line = ${$arrayref}[$i];
45
46		if ( $line =~ /^\s*([\w-]+?)\s+(.*?)\s*$/ )
47		{
48			my $key = $1;
49			my $value = $2;
50			$newhash{$key} = $value;
51		}
52	}
53
54	return \%newhash;
55}
56
57sub convert_hash_into_array
58{
59	my ($hashref) = @_;
60
61	my @array = ();
62	my $key;
63
64	foreach $key (keys %{$hashref})
65	{
66		my $value = $hashref->{$key};
67		my $input = "$key = $value\n";
68		push(@array ,$input);
69	}
70
71	return \@array
72}
73
74#############################################################################
75# Converting a string list with separator $listseparator
76# into an array
77#############################################################################
78
79sub convert_stringlist_into_array_without_linebreak_and_quotes
80{
81	my ( $includestringref, $listseparator ) = @_;
82
83	my @newarray = ();
84	my $first;
85	my $last = ${$includestringref};
86
87	while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/)	# "$" for minimal matching
88	{
89		$first = $1;
90		$last = $2;
91		$first =~ s/\"//g;
92		push(@newarray, $first);
93	}
94
95	$last =~ s/\"//g;
96	push(@newarray, $last);
97
98	return \@newarray;
99}
100
101#############################################################################
102# Converting a string list with separator $listseparator
103# into an array
104#############################################################################
105
106sub convert_stringlist_into_array
107{
108	my ( $includestringref, $listseparator ) = @_;
109
110	my @newarray = ();
111	my $first;
112	my $last = ${$includestringref};
113
114	while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/)	# "$" for minimal matching
115	{
116		$first = $1;
117		$last = $2;
118		# Problem with two directly following listseparators. For example a path with two ";;" directly behind each other
119		$first =~ s/^$listseparator//;
120		push(@newarray, "$first\n");
121	}
122
123	push(@newarray, "$last\n");
124
125	return \@newarray;
126}
127
128#############################################################################
129# Converting a string list with separator $listseparator
130# into an array
131#############################################################################
132
133sub convert_stringlist_into_array_without_newline
134{
135	my ( $includestringref, $listseparator ) = @_;
136
137	my @newarray = ();
138	my $first;
139	my $last = ${$includestringref};
140
141	while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/)	# "$" for minimal matching
142	{
143		$first = $1;
144		$last = $2;
145		push(@newarray, "$first");
146	}
147
148	push(@newarray, "$last");
149
150	return \@newarray;
151}
152
153#############################################################################
154# Converting a string list with separator $listseparator
155# into a hash with values 1.
156#############################################################################
157
158sub convert_stringlist_into_hash
159{
160	my ( $includestringref, $listseparator ) = @_;
161
162	my %newhash = ();
163	my $first;
164	my $last = ${$includestringref};
165
166	while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/)	# "$" for minimal matching
167	{
168		$first = $1;
169		$last = $2;
170		$newhash{$first} = 1;
171	}
172
173	$newhash{$last} = 1;
174
175	return \%newhash;
176}
177
178#############################################################################
179# Converting a string list with separator $listseparator
180# into an array
181#############################################################################
182
183sub convert_whitespace_stringlist_into_array
184{
185	my ( $includestringref ) = @_;
186
187	my @newarray = ();
188	my $first;
189	my $last = ${$includestringref};
190
191	while ( $last =~ /^\s*(\S+?)\s+(\S+)\s*$/)	# "$" for minimal matching
192	{
193		$first = $1;
194		$last = $2;
195		push(@newarray, "$first\n");
196	}
197
198	push(@newarray, "$last\n");
199
200	return \@newarray;
201}
202
203#############################################################################
204# Converting an array into a comma separated string
205#############################################################################
206
207sub convert_array_to_comma_separated_string
208{
209	my ( $arrayref ) = @_;
210
211	my $newstring = "";
212
213	for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
214	{
215		my $arrayentry = ${$arrayref}[$i];
216		$arrayentry =~ s/\s*$//;
217		$newstring = $newstring . $arrayentry . ",";
218	}
219
220	$newstring =~ s/\,\s*$//;
221
222	return $newstring;
223}
224
225#############################################################################
226# Converting an array into a space separated string
227#############################################################################
228
229sub convert_array_to_space_separated_string
230{
231	my ( $arrayref ) = @_;
232
233	my $newstring = "";
234
235	for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
236	{
237		my $arrayentry = ${$arrayref}[$i];
238		$arrayentry =~ s/\s*$//;
239		$newstring = $newstring . $arrayentry . " ";
240	}
241
242	$newstring =~ s/\s*$//;
243
244	return $newstring;
245}
246
247#############################################################################
248# The file name contains for some files "/". If this programs runs on
249# a windows platform, this has to be converted to "\".
250#############################################################################
251
252sub convert_slash_to_backslash
253{
254	my ($filesarrayref) = @_;
255
256	for ( my $i = 0; $i <= $#{$filesarrayref}; $i++ )
257	{
258		my $onefile = ${$filesarrayref}[$i];
259		if ( $onefile->{'Name'} ) { $onefile->{'Name'} =~ s/\//\\/g; }
260	}
261}
262
263############################################################################
264# Creating a copy of an existing file object
265# No converter
266############################################################################
267
268sub copy_item_object
269{
270	my ($olditemhashref, $newitemhashref) = @_;
271
272	foreach $key (keys %{$olditemhashref})
273	{
274		my $value = $olditemhashref->{$key};
275		$newitemhashref->{$key} = $value;
276	}
277}
278
279#################################################################
280# Windows pathes must not contain the following structure:
281# c:\dirA\dirB\..\dirC
282# This has to be exchanged to
283# c:\dirA\dirC
284#################################################################
285
286sub make_path_conform
287{
288	my ( $path ) = @_;
289
290	my $oldpath = $path;
291
292	while ( $path =~ /(^.*)(\Q$installer::globals::separator\E.*?[^\.])(\Q$installer::globals::separator\E\.\.)(\Q$installer::globals::separator\E.*$)/ )
293	{
294		my $part1 = $1;
295		my $part2 = $4;
296
297		# $2 must not end with a "." ! Problem with "..\.."
298
299		$path = $part1 . $part2;
300	}
301
302	return $path;
303}
304
305#################################################################
306# Copying an item collector
307# A reference to an array consisting of references to hashes.
308#################################################################
309
310sub copy_collector
311{
312	my ( $oldcollector ) = @_;
313
314	my @newcollector = ();
315
316	for ( my $i = 0; $i <= $#{$oldcollector}; $i++ )
317	{
318		my %newhash = ();
319		my $key;
320
321		foreach $key (keys %{${$oldcollector}[$i]})
322		{
323			$newhash{$key} = ${$oldcollector}[$i]->{$key};
324		}
325
326		push(@newcollector, \%newhash);
327	}
328
329	return \@newcollector;
330}
331
332#################################################################
333# Copying an array
334#################################################################
335
336sub copy_array_from_references
337{
338	my ( $arrayref ) = @_;
339
340	my @newarray = ();
341
342	for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
343	{
344		push(@newarray, ${$arrayref}[$i]);
345	}
346
347	return \@newarray;
348}
349
350###########################################################
351# Copying a hash
352###########################################################
353
354sub copy_hash_from_references
355{
356	my ($hashref) = @_;
357
358	my %newhash = ();
359	my $key;
360
361	foreach $key (keys %{$hashref})
362	{
363		$newhash{$key} = $hashref->{$key};
364	}
365
366	return \%newhash;
367}
368
369#################################################################
370# Combining two arrays, first wins
371#################################################################
372
373sub combine_arrays_from_references_first_win
374{
375	my ( $arrayref1, $arrayref2 ) = @_;
376
377	my $hashref1 = convert_array_to_hash($arrayref1);
378	my $hashref2 = convert_array_to_hash($arrayref2);
379	my %commonhash = ();
380	my @newarray = ();
381
382	# starting with second hash
383	foreach my $key ( keys %{$hashref2} ) { $commonhash{$key} = $hashref2->{$key}; }
384	# overwriting with first hash
385	foreach my $key ( keys %{$hashref1} ) { $commonhash{$key} = $hashref1->{$key}; }
386
387	# Creating the new array
388	foreach my $key ( keys %commonhash ) { push(@newarray, "$key $commonhash{$key}\n"); }
389
390	return \@newarray;
391}
392
393#################################################################
394# Combining two arrays
395#################################################################
396
397sub combine_arrays_from_references
398{
399	my ( $arrayref1, $arrayref2 ) = @_;
400
401	my @newarray = ();
402
403	for ( my $i = 0; $i <= $#{$arrayref1}; $i++ )
404	{
405		push(@newarray, ${$arrayref1}[$i]);
406	}
407
408	for ( my $i = 0; $i <= $#{$arrayref2}; $i++ )
409	{
410		push(@newarray, ${$arrayref2}[$i]);
411	}
412
413	return \@newarray;
414}
415
416#################################################################
417# Returning the current ending number of a directory
418#################################################################
419
420sub get_number_from_directory
421{
422	my ( $directory ) = @_;
423
424	my $number = 0;
425
426	if ( $directory =~ /\_(\d+)\s*$/ )
427	{
428		$number = $1;
429	}
430
431	return $number;
432}
433
434#################################################################
435# Replacing separators, that are included into quotes
436#################################################################
437
438sub replace_masked_separator
439{
440	my ($string, $separator, $replacementstring) = @_;
441
442	$string =~ s/\\\Q$separator\E/$replacementstring/g;
443
444	return $string;
445}
446
447#################################################################
448# Resolving separators, that were replaced
449# in function mask_separator_in_quotes
450#################################################################
451
452sub resolve_masked_separator
453{
454	my ($arrayref, $separator, $replacementstring) = @_;
455
456	for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
457	{
458		${$arrayref}[$i] =~ s/$replacementstring/$separator/g
459	}
460}
461
4621;
463