Blame view

update_amda/makeTree.php 3.16 KB
4c77b9b1   Elena.Budnik   final update
1
2
3
4
<?php
 
 /*
 *  make local data tree from list of missions 
329f027c   Elena.Budnik   updateAmda error-...
5
 */ 
4c77b9b1   Elena.Budnik   final update
6
 
329f027c   Elena.Budnik   updateAmda error-...
7
   error_reporting(E_ERROR);
4c77b9b1   Elena.Budnik   final update
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
   define("AMDA_SPASE_INTERFACE", getenv("AMDA_SPASE_INTERFACE")); 
	
	if ( AMDA_SPASE_INTERFACE == "" ) 
		require_once("./config.php");
	else
		require_once(AMDA_SPASE_INTERFACE."/config.php");
		
	$AMDAINSTALLATION = getenv("AMDAINSTALLATION");
	
	define("DATAPATH", "$AMDAINSTALLATION/AMDA_IHM/generic_data/");

	if (file_exists(DATAPATH.'rank.json')) 
		$cmpArr = json_decode(file_get_contents(DATAPATH.'rank.json'), true);
	else 
		$cmpArr = null;
                               
	$ddMission = new DomDocument("1.0");
	
	$localDom  = new DomDocument("1.0");
	$localDom->formatOutput = true;

	$BASE = $localDom->createElement('dataRoot'); 
	$BASE->setAttribute('xml:id', 'DATAROOT');
	$Amda = $localDom->createElement('dataCenter');
	$Amda->setAttribute('name', 'AMDA');
	$Amda->setAttribute('desc', 'AMDA_Internal_Data_Base');          
	$Amda->setAttribute('xml:id', 'myLocalData-treeRootNode');

	foreach ( glob(AMDATREEDIR.'DD_*.xml') as $xml ) 
	{              													
		$ddMission->load($xml);
		$missions = $ddMission->getElementsByTagName("mission");
		foreach ($missions as $mission) 
		{
			if ($mission->getAttribute('xml:id') == '') continue;
			$nodeNew = $localDom->importNode($mission,true);
                     
			if (is_array($cmpArr)) 
			{
				$targetMis = $mission->getAttribute('target');
				$index = $cmpArr[$targetMis];
				if ($index)  
						$nodeNew->setAttribute('rank',$index);
				else $nodeNew->setAttribute('rank', 999);
				
				$observatories = $nodeNew->getElementsByTagName('observatory');
				if ($observatories->length > 0)
				{
					foreach ($observatories as $obs)
					{
						if ($obs->hasAttribute('target'))
						{
							$target = $obs->getAttribute('target');
							$index = $cmpArr[$target];
							if ($index  &&  $target != $targetMis)
									$obs->setAttribute('rank',$index);											
						}
					}
				}
			}
			//TODO set propre restriction 
//                 $available =  $nodeNew->hasAttribute('restriction');
//                 $nodeNew->setAttribute('available', !$available);
			$Amda->appendChild($nodeNew); 
		} 
	}                  
                                    
	if ($Amda->hasChildNodes()) $BASE->appendChild($Amda);             
	$localDom->appendChild($BASE);

	// check ID duplication                        
	$allIds = array();
	foreach($localDom->getElementsByTagName('*') as $element)
	{                                                                          
		$allIds[] = $element->getAttribute('xml:id');
	}
	$arr = array_count_values($allIds);

	print_r('DUPLICATED IDs : '.PHP_EOL);
	foreach ($arr as $key => $value) 
		if ($value > 1) print_r($key.'=>'.$value.PHP_EOL);
                    
	// set 'TBD' attribute - if the parameter is not checked yet
	if (is_dir(TBD)) 
	{
		$params = $localDom->getElementsByTagName('parameter');
		$nToCheck = 0;       
		foreach ($params as $param) {
			$id = $param->getAttribute("xml:id");
			if (file_exists(TBD."$id.xml")) {
					$param->setAttribute('tbd', true);	
					$nToCheck ++;
			}
		}
		echo "TOCHECK ".$nToCheck.PHP_EOL; 		
	}
             
	$localDom->save('LocalParams.xml');  
?>