Unverified Commit 57f537d8 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

xml2json: handle duplicated station names

parent 5eb48edb
Loading
Loading
Loading
Loading
+43 −14
Original line number Diff line number Diff line
@@ -25,11 +25,12 @@ for my $station ( @{$stations} ) {

my %station_by_name;
for my $station ( @{$stations} ) {
	$station_by_name{ $station->{name} } = $station;
	push( @{ $station_by_name{ $station->{name} } }, $station );
}

my %xml_by_name;
my %xml_by_ds100;
my %xml_by_eva;
my %xml_by_name;

my $xml_str = read_file('stations.xml');
my $tree    = XML::LibXML->load_xml( string => $xml_str );
@@ -55,8 +56,22 @@ for my $station ( $tree->findnodes('//station') ) {
		ds100 => $ds100,
		is_db => $is_db,
	};
	$xml_by_name{$name} = $xml_station;
	$xml_by_eva{$eva}   = $xml_station;
	$xml_by_ds100{$ds100} = $xml_station;
	$xml_by_eva{$eva}     = $xml_station;

	if ( exists $xml_by_eva{$name} ) {
		push( @{ $xml_by_name{$name}{extra} }, $xml_station );
	}
	else {
		$xml_by_name{$name} = $xml_station;
	}
}

for my $station ( $tree->findnodes('//station') ) {
	my $name  = $station->getAttribute('name');
	my $eva   = $station->getAttribute('eva');
	my $ds100 = $station->getAttribute('ds100');
	my $is_db = $station->getAttribute('db') eq 'true';

	my $found = 0;

@@ -80,20 +95,34 @@ for my $station ( $tree->findnodes('//station') ) {
		);
	}
	elsif ( $station_by_name{$name}
		and $station_by_name{$name}{ds100} ne $ds100
		and $is_db
		and $ds100 !~ m{ ^ PQ }x )
		and not any { $_->{ds100} eq $ds100 } @{ $station_by_name{$name} }
		and $is_db )
	{
		printf( "%30s has been recoded: %8s -> %8s\n",
			$name, $station_by_name{$name}{ds100}, $ds100 );
		printf( "%30s has a new DS100 alias: %8s\n", $name, $ds100 );
		my $station = {
			name  => $name,
			ds100 => $ds100,
			eva   => $eva,
		};
		push( @{$stations}, $station );
		$station_by_eva{$eva}     = $station;
		$station_by_ds100{$ds100} = $station;
		push( @{ $station_by_name{$name} }, $station );
	}
	elsif ( $station_by_name{$name}
		and $station_by_name{$name}{eva} ne $eva
		and $is_db
		and $ds100 !~ m{ ^ PQ }x )
		and not any { $_->{eva} eq $eva } @{ $station_by_name{$name} }
		and $is_db )
	{
		printf( "%30s has been recoded: %d -> %d\n",
			$name, $station_by_name{$name}{eva}, $eva );
		printf( "%30s has a new EVA alias: %d\n", $name, $eva );
		my $station = {
			name  => $name,
			ds100 => $ds100,
			eva   => $eva,
		};
		push( @{$stations}, $station );
		$station_by_eva{$eva}     = $station;
		$station_by_ds100{$ds100} = $station;
		push( @{ $station_by_name{$name} }, $station );
	}

	if ( not $found