diff options
Diffstat (limited to 'solenv/bin/modules/par2script/undefine.pm')
-rw-r--r-- | solenv/bin/modules/par2script/undefine.pm | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/solenv/bin/modules/par2script/undefine.pm b/solenv/bin/modules/par2script/undefine.pm new file mode 100644 index 000000000000..5fc1d18ebd3d --- /dev/null +++ b/solenv/bin/modules/par2script/undefine.pm @@ -0,0 +1,144 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + +package par2script::undefine; + +use par2script::globals; + +########################################################## +# Removing in the script all the gids, that are listed +# in undefine scp files +########################################################## + +sub undefine_gids +{ + my ($parfilecontent) = @_; + + my $item; + foreach $item ( @par2script::globals::allitems ) + { + my $unitem = "Un$item"; + + for ( my $i = 0; $i <= $#{$parfilecontent}; $i++ ) + { + if ( ${$parfilecontent}[$i] =~ /^\s*$unitem\s*(\w+?)\s*$/ ) + { + my $gid = $1; + delete($par2script::globals::definitions{$item}->{$gid}); + } + } + } +} + +########################################################## +# Collecting all subdirectories of a specified directory +########################################################## + +sub collect_children_dirs +{ + my ($gid, $collector) = @_; + + my $diritem = "Directory"; + my $parentkey = "ParentID"; + + if ( exists($par2script::globals::definitions{$diritem}) ) + { + my $onedefinition; + + foreach $onedefinition (keys %{$par2script::globals::definitions{$diritem}}) + { + if ( $par2script::globals::definitions{$diritem}->{$onedefinition}->{$parentkey} eq $gid ) + { + push(@{$collector}, $onedefinition); + collect_children_dirs($onedefinition, $collector); + } + } + } +} + +########################################################## +# Removing in the script complete profiles. +# This includes the Profile and its ProfileItems. +########################################################## + +sub remove_complete_item +{ + my ($item, $parfilecontent) = @_; + + my $removeitem = "Remove$item"; + my $dependentkey = ""; + my $collect_children = 0; + my @gidcollector = (); + my @dependentitems = (); + + if ( $item eq "Profile" ) + { + @dependentitems = ("ProfileItem"); + $dependentkey = "ProfileID"; + } + elsif ( $item eq "Directory" ) + { + @dependentitems = ("File", "Shortcut", "Unixlink"); + $dependentkey = "Dir"; + $collect_children = 1; + } + + for ( my $i = 0; $i <= $#{$parfilecontent}; $i++ ) + { + if ( ${$parfilecontent}[$i] =~ /^\s*$removeitem\s*(\w+?)\s*$/ ) + { + my $onegid = $1; + push(@gidcollector, $onegid); + if ( $collect_children ) { collect_children_dirs($onegid, \@gidcollector); } + + my $gid; + foreach $gid (@gidcollector) + { + delete($par2script::globals::definitions{$item}->{$gid}); + + # also deleting all dependent items, for example "ProfileItems" whose "ProfileID" is this "Profile" + my $depitem; + foreach $depitem ( @dependentitems ) + { + if ( exists($par2script::globals::definitions{$depitem}) ) + { + my $onedefinition; + foreach $onedefinition (keys %{$par2script::globals::definitions{$depitem}}) + { + if ( $par2script::globals::definitions{$depitem}->{$onedefinition}->{$dependentkey} eq $gid ) + { + delete($par2script::globals::definitions{$depitem}->{$onedefinition}); + } + } + } + } + } + } + } +} + +1; |