| #************************************************************** |
| # |
| # 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; |