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