blob: ef6fb3ff2bd5a762a6d443ee512b24f36849825b [file] [log] [blame]
#**************************************************************
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
#**************************************************************
package installer::converter;
use installer::globals;
#############################
# Converter
#############################
sub convert_array_to_hash
{
my ($arrayref) = @_;
my %newhash = ();
for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
{
my $line = ${$arrayref}[$i];
if ( $line =~ /^\s*([\w-]+?)\s+(.*?)\s*$/ )
{
my $key = $1;
my $value = $2;
$newhash{$key} = $value;
}
}
return \%newhash;
}
sub convert_hash_into_array
{
my ($hashref) = @_;
my @array = ();
my $key;
foreach $key (keys %{$hashref})
{
my $value = $hashref->{$key};
my $input = "$key = $value\n";
push(@array ,$input);
}
return \@array
}
#############################################################################
# Converting a string list with separator $listseparator
# into an array
#############################################################################
sub convert_stringlist_into_array_without_linebreak_and_quotes
{
my ( $includestringref, $listseparator ) = @_;
my @newarray = ();
my $first;
my $last = ${$includestringref};
while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/) # "$" for minimal matching
{
$first = $1;
$last = $2;
$first =~ s/\"//g;
push(@newarray, $first);
}
$last =~ s/\"//g;
push(@newarray, $last);
return \@newarray;
}
#############################################################################
# Converting a string list with separator $listseparator
# into an array
#############################################################################
sub convert_stringlist_into_array
{
my ( $includestringref, $listseparator ) = @_;
my @newarray = ();
my $first;
my $last = ${$includestringref};
while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/) # "$" for minimal matching
{
$first = $1;
$last = $2;
# Problem with two directly following listseparators. For example a path with two ";;" directly behind each other
$first =~ s/^$listseparator//;
push(@newarray, "$first\n");
}
push(@newarray, "$last\n");
return \@newarray;
}
#############################################################################
# Converting a string list with separator $listseparator
# into an array
#############################################################################
sub convert_stringlist_into_array_without_newline
{
my ( $includestringref, $listseparator ) = @_;
my @newarray = ();
my $first;
my $last = ${$includestringref};
while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/) # "$" for minimal matching
{
$first = $1;
$last = $2;
push(@newarray, "$first");
}
push(@newarray, "$last");
return \@newarray;
}
#############################################################################
# Converting a string list with separator $listseparator
# into a hash with values 1.
#############################################################################
sub convert_stringlist_into_hash
{
my ( $includestringref, $listseparator ) = @_;
my %newhash = ();
my $first;
my $last = ${$includestringref};
while ( $last =~ /^\s*(.+?)\Q$listseparator\E(.+)\s*$/) # "$" for minimal matching
{
$first = $1;
$last = $2;
$newhash{$first} = 1;
}
$newhash{$last} = 1;
return \%newhash;
}
#############################################################################
# Converting a string list with separator $listseparator
# into an array
#############################################################################
sub convert_whitespace_stringlist_into_array
{
my ( $includestringref ) = @_;
my @newarray = ();
my $first;
my $last = ${$includestringref};
while ( $last =~ /^\s*(\S+?)\s+(\S+)\s*$/) # "$" for minimal matching
{
$first = $1;
$last = $2;
push(@newarray, "$first\n");
}
push(@newarray, "$last\n");
return \@newarray;
}
#############################################################################
# Converting an array into a comma separated string
#############################################################################
sub convert_array_to_comma_separated_string
{
my ( $arrayref ) = @_;
my $newstring = "";
for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
{
my $arrayentry = ${$arrayref}[$i];
$arrayentry =~ s/\s*$//;
$newstring = $newstring . $arrayentry . ",";
}
$newstring =~ s/\,\s*$//;
return $newstring;
}
#############################################################################
# Converting an array into a space separated string
#############################################################################
sub convert_array_to_space_separated_string
{
my ( $arrayref ) = @_;
my $newstring = "";
for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
{
my $arrayentry = ${$arrayref}[$i];
$arrayentry =~ s/\s*$//;
$newstring = $newstring . $arrayentry . " ";
}
$newstring =~ s/\s*$//;
return $newstring;
}
#############################################################################
# The file name contains for some files "/". If this programs runs on
# a windows platform, this has to be converted to "\".
#############################################################################
sub convert_slash_to_backslash
{
my ($filesarrayref) = @_;
for ( my $i = 0; $i <= $#{$filesarrayref}; $i++ )
{
my $onefile = ${$filesarrayref}[$i];
if ( $onefile->{'Name'} ) { $onefile->{'Name'} =~ s/\//\\/g; }
}
}
############################################################################
# Creating a copy of an existing file object
# No converter
############################################################################
sub copy_item_object
{
my ($olditemhashref, $newitemhashref) = @_;
foreach $key (keys %{$olditemhashref})
{
my $value = $olditemhashref->{$key};
$newitemhashref->{$key} = $value;
}
}
#################################################################
# Windows pathes must not contain the following structure:
# c:\dirA\dirB\..\dirC
# This has to be exchanged to
# c:\dirA\dirC
#################################################################
sub make_path_conform
{
my ( $path ) = @_;
my $oldpath = $path;
while ( $path =~ /(^.*)(\Q$installer::globals::separator\E.*?[^\.])(\Q$installer::globals::separator\E\.\.)(\Q$installer::globals::separator\E.*$)/ )
{
my $part1 = $1;
my $part2 = $4;
# $2 must not end with a "." ! Problem with "..\.."
$path = $part1 . $part2;
}
return $path;
}
#################################################################
# Copying an item collector
# A reference to an array consisting of references to hashes.
#################################################################
sub copy_collector
{
my ( $oldcollector ) = @_;
my @newcollector = ();
foreach my $oldhash (@$oldcollector)
{
my %newhash = ();
while (my ($key, $value) = each %$oldhash)
{
$newhash{$key} = $value;
}
push(@newcollector, \%newhash);
}
return \@newcollector;
}
#################################################################
# Copying an array
#################################################################
sub copy_array_from_references
{
my ( $arrayref ) = @_;
my @newarray = ();
for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
{
push(@newarray, ${$arrayref}[$i]);
}
return \@newarray;
}
###########################################################
# Copying a hash
###########################################################
sub copy_hash_from_references
{
my ($hashref) = @_;
my %newhash = ();
my $key;
foreach $key (keys %{$hashref})
{
$newhash{$key} = $hashref->{$key};
}
return \%newhash;
}
#################################################################
# Combining two arrays, first wins
#################################################################
sub combine_arrays_from_references_first_win
{
my ( $arrayref1, $arrayref2 ) = @_;
my $hashref1 = convert_array_to_hash($arrayref1);
my $hashref2 = convert_array_to_hash($arrayref2);
my %commonhash = ();
my @newarray = ();
# starting with second hash
foreach my $key ( keys %{$hashref2} ) { $commonhash{$key} = $hashref2->{$key}; }
# overwriting with first hash
foreach my $key ( keys %{$hashref1} ) { $commonhash{$key} = $hashref1->{$key}; }
# Creating the new array
foreach my $key ( keys %commonhash ) { push(@newarray, "$key $commonhash{$key}\n"); }
return \@newarray;
}
#################################################################
# Combining two arrays
#################################################################
sub combine_arrays_from_references
{
my ( $arrayref1, $arrayref2 ) = @_;
my @newarray = ();
for ( my $i = 0; $i <= $#{$arrayref1}; $i++ )
{
push(@newarray, ${$arrayref1}[$i]);
}
for ( my $i = 0; $i <= $#{$arrayref2}; $i++ )
{
push(@newarray, ${$arrayref2}[$i]);
}
return \@newarray;
}
#################################################################
# Returning the current ending number of a directory
#################################################################
sub get_number_from_directory
{
my ( $directory ) = @_;
my $number = 0;
if ( $directory =~ /\_(\d+)\s*$/ )
{
$number = $1;
}
return $number;
}
#################################################################
# Replacing separators, that are included into quotes
#################################################################
sub replace_masked_separator
{
my ($string, $separator, $replacementstring) = @_;
$string =~ s/\\\Q$separator\E/$replacementstring/g;
return $string;
}
#################################################################
# Resolving separators, that were replaced
# in function mask_separator_in_quotes
#################################################################
sub resolve_masked_separator
{
my ($arrayref, $separator, $replacementstring) = @_;
for ( my $i = 0; $i <= $#{$arrayref}; $i++ )
{
${$arrayref}[$i] =~ s/$replacementstring/$separator/g
}
}
1;