xref: /AOO41X/main/solenv/bin/modules/par2script/undefine.pm (revision 9780544fa6b4c85f7d9b48452f58c7da854fc9a5)
1#**************************************************************
2#
3#  Licensed to the Apache Software Foundation (ASF) under one
4#  or more contributor license agreements.  See the NOTICE file
5#  distributed with this work for additional information
6#  regarding copyright ownership.  The ASF licenses this file
7#  to you under the Apache License, Version 2.0 (the
8#  "License"); you may not use this file except in compliance
9#  with the License.  You may obtain a copy of the License at
10#
11#    http://www.apache.org/licenses/LICENSE-2.0
12#
13#  Unless required by applicable law or agreed to in writing,
14#  software distributed under the License is distributed on an
15#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16#  KIND, either express or implied.  See the License for the
17#  specific language governing permissions and limitations
18#  under the License.
19#
20#**************************************************************
21
22
23
24package par2script::undefine;
25
26use par2script::globals;
27
28##########################################################
29# Removing in the script all the gids, that are listed
30# in undefine scp files
31##########################################################
32
33sub undefine_gids
34{
35    my ($parfilecontent) = @_;
36
37    my $item;
38    foreach $item ( @par2script::globals::allitems )
39    {
40        my $unitem = "Un$item";
41
42        for ( my $i = 0; $i <= $#{$parfilecontent}; $i++ )
43        {
44            if ( ${$parfilecontent}[$i] =~ /^\s*$unitem\s*(\w+?)\s*$/ )
45            {
46                my $gid = $1;
47                delete($par2script::globals::definitions{$item}->{$gid});
48            }
49        }
50    }
51}
52
53##########################################################
54# Collecting all subdirectories of a specified directory
55##########################################################
56
57sub collect_children_dirs
58{
59    my ($gid, $collector) = @_;
60
61    my $diritem = "Directory";
62    my $parentkey = "ParentID";
63
64    if ( exists($par2script::globals::definitions{$diritem}) )
65    {
66        my $onedefinition;
67
68        foreach $onedefinition (keys %{$par2script::globals::definitions{$diritem}})
69        {
70            if ( $par2script::globals::definitions{$diritem}->{$onedefinition}->{$parentkey} eq $gid )
71            {
72                push(@{$collector}, $onedefinition);
73                collect_children_dirs($onedefinition, $collector);
74            }
75        }
76    }
77}
78
79##########################################################
80# Removing in the script complete profiles.
81# This includes the Profile and its ProfileItems.
82##########################################################
83
84sub remove_complete_item
85{
86    my ($item, $parfilecontent) = @_;
87
88    my $removeitem = "Remove$item";
89    my $dependentkey = "";
90    my $collect_children = 0;
91    my @gidcollector = ();
92    my @dependentitems = ();
93
94    if ( $item eq "Profile" )
95    {
96        @dependentitems = ("ProfileItem");
97        $dependentkey = "ProfileID";
98    }
99    elsif ( $item eq "Directory" )
100    {
101        @dependentitems = ("File", "Shortcut", "Unixlink");
102        $dependentkey = "Dir";
103        $collect_children = 1;
104    }
105
106    for ( my $i = 0; $i <= $#{$parfilecontent}; $i++ )
107    {
108        if ( ${$parfilecontent}[$i] =~ /^\s*$removeitem\s*(\w+?)\s*$/ )
109        {
110            my $onegid = $1;
111            push(@gidcollector, $onegid);
112            if ( $collect_children ) { collect_children_dirs($onegid, \@gidcollector); }
113
114            my $gid;
115            foreach $gid (@gidcollector)
116            {
117                delete($par2script::globals::definitions{$item}->{$gid});
118
119                # also deleting all dependent items, for example "ProfileItems" whose "ProfileID" is this "Profile"
120                my $depitem;
121                foreach $depitem ( @dependentitems )
122                {
123                    if ( exists($par2script::globals::definitions{$depitem}) )
124                    {
125                        my $onedefinition;
126                        foreach $onedefinition (keys %{$par2script::globals::definitions{$depitem}})
127                        {
128                            if ( $par2script::globals::definitions{$depitem}->{$onedefinition}->{$dependentkey} eq $gid )
129                            {
130                                delete($par2script::globals::definitions{$depitem}->{$onedefinition});
131                            }
132                        }
133                    }
134                }
135            }
136        }
137    }
138}
139
1401;
141