www.pudn.com > filecollector.rar > FC_GetMeasure.pm


package FC_GetMeasure;

###############################################################################
#
#  @(#) Perl Module: FC_GetMeasure
#
#  Author(s): JIA XL
#  
#  Copyright(C) 2002-2004 BOCO Inter-Telecom DC Team, All Rights Reserved
#
#  Creation Date:  2002/12/16
#
#  Last update  Date: 2003/02/21
#
#  Description: This module get MeaSure info from df_configfile
#
#
##############################################################################

use XML::Simple;
use Data::Dumper;

#######################################################################
#
# Function: New
#
# Input:
#
# Output:
#
# Description:
#
#######################################################################

sub new {
	my ($type,$config_file,$table_name,$measure)=@_;
    	my $self={};
	$self->{'table'} = $table_name;
	$self->{'measure'} = $measure;
	$self->{'config_file'} = $config_file;
    	bless $self,$type;
}

#######################################################################
#
# Function: GetMeasure
#
# Input:
#
# Output:
#
# Description:
#
#######################################################################

sub GetMeasure {
	my ($self) = @_;
	my $table = $self->{'table'};
	my $measure = $self->{'measure'};
	my $df_cfg_file = $self->{'config_file'};
	my $config_ref = &prepare($df_cfg_file);
	if (!(exists $config_ref->{'Prime_col_inf'}{'Assistant_Var'})) {
                print "Notice: the Assistant_Var is not defined in config_file!\n\n";
		return(1);
        }
	my $Assistant_Var = $config_ref->{'Prime_col_inf'}{'Assistant_Var'};
	my $tbl_v2c;
	if ($table) {
		my @tbl_list = split /,/,$table;
		my $measure_part = $Assistant_Var->{'Measure_Var'}{'Measure'};
		foreach my $id (keys %$measure_part) {
			my $cfg_table_str = $measure_part->{$id}{'tbl_name'};
			my @cfg_table = split /,/,$cfg_table_str;
			foreach my $tbl_name (@tbl_list) {
				for (@cfg_table) {
					my $tab = $_;
					if ($tbl_name =~ /$tab/i) {
						my $v_body = $measure_part->{$id}{'body'};
						$tbl_v2c->{$v_body} = $tbl_name;
					}
				}
			}
		}
	}
	elsif ($measure){
		my @mea_list = split /,/,$measure;
		my $measure_part = $Assistant_Var->{'Measure_Var'}{'Measure'};
		foreach my $id (keys %$measure_part) {
			foreach my $measure_name (@mea_list) {
				if (lc($measure_name) eq lc($measure_part->{$id}{'body'})) {
					$tbl_v2c->{$measure_name} = $measure_part->{$id}{'tbl_name'};
				}
			}
		}
	}
	else {
		my $measure_part = $Assistant_Var->{'Measure_Var'}{'Measure'};
		foreach my $id (keys %$measure_part) {
			my $tbl_name = $measure_part->{$id}{'tbl_name'};
			my $tbl_body = $measure_part->{$id}{'body'};
			$tbl_v2c->{$tbl_body} = $tbl_name;
		}
	}
	delete $Assistant_Var->{'Measure_Var'}{'Measure'};
	$Assistant_Var->{'Measure_Var'}{'Measure'} = $tbl_v2c;

	return ($Assistant_Var);
}

#######################################################################
#
# Function: Prepare
#
# Input: null
#
# Output: 1. singal
#         2. message
#
# Description:
#
#######################################################################

sub prepare{
	my ($config_file) = @_;
    	my $config_ref = eval{XMLin($config_file)};
    	if ($@){
		print "Read file $config_file failed.\n $@";
		return (-1);
    	}
	$config_ref = &simple_TransformHash($config_ref,'id');
    	return ($config_ref);
}

########################################################################
#
#   Function :simple_TransformHash
#
#   Input:  $ddd_ref:ref to hash_struct
#           $key: the key when transforming
#
#   Return: ref to hash_struct which is transformed
#
#
#######################################################################

sub simple_TransformHash{
	my ($ddd_ref,$key)=@_;
    	foreach $hash_key(keys %$ddd_ref){
        	if (exists($ddd_ref->{$hash_key}->{$key})){
       	  		my $tmp_hash=$ddd_ref->{$hash_key};
         		my $tmp_id=$ddd_ref->{$hash_key}->{$key};
         		delete $$tmp_hash{$key};
         		my %add_hash=($tmp_id=>$tmp_hash);
         		$ddd_ref->{$hash_key}=\%add_hash;
         	}
	}
    	foreach $hash_value(values %$ddd_ref){
         	&simple_TransformHash($hash_value,$key);
    	}
    	return $ddd_ref;
}

sub close {
	my ($pkg) = @_;

	undef($pkg);
	return($pkg);
}

1;