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