Blame view

src/Request/ParamInfoRequestClass.php 4.92 KB
966bd5f8   Benjamin Renard   Add request to ge...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php 
/**
 * @class ParamInfoRequestClass
 * @brief Implementation of a ParamInfoRequestClass for a param info request
 * @details
 */
class ParamInfoRequestClass extends RequestAbstractClass
{
	/*
	 * @brief Init a param info request
	*/
	public function init()
	{
		if (!isset($this->requestData))
			return false;
		
ffc5cb81   Elena.Budnik   temporary commit
17
18
		if ($this->requestData->getType() == ParamInfoTypeEnumClass::PLOTINIT
			|| $this->requestData->getType() == ParamInfoTypeEnumClass::IMPEXPLOTINIT) {
f28f7c0e   Benjamin Renard   Add param info re...
19
20
21
22
			//Force load of node files to init the NodeFactory
			foreach (glob(dirname(__FILE__)."/ParamsRequestImpl/Nodes/Requests/*NodeClass.php") as $filename) {
				require_once $filename;
			}
966bd5f8   Benjamin Renard   Add request to ge...
23
24
25
26
27
28
29
30
31
32
		}
		
		return TRUE;
	}
	
	/*
	 * @brief Run a param info request
	 */
	public function run()
	{
ffc5cb81   Elena.Budnik   temporary commit
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
	
		if ($this->requestData->getType() == ParamInfoTypeEnumClass::IMPEXINFO)
		{
		   $this->requestData->setSuccess(true);
		   
		   $result = array();
		   $result['dimensions'] = array(
				'dim1' => 1,
				'dim2' => 1
			);
			
		   $this->requestData->setResult($result);
		   return $this->requestData->getSuccess();
		}
		
966bd5f8   Benjamin Renard   Add request to ge...
48
49
50
		$dom = new DOMDocument("1.0","UTF-8");
		$dom->preserveWhiteSpace = false;
		$dom->formatOutput = true;
966bd5f8   Benjamin Renard   Add request to ge...
51
		
8ade06fe   Benjamin Renard   Improve config load
52
		$res = @$dom->load($this->requestData->getFilePath());
cc3bdb0e   Elena.Budnik   RequestManager sp...
53
 		
966bd5f8   Benjamin Renard   Add request to ge...
54
		$this->requestData->setSuccess(false);
f28f7c0e   Benjamin Renard   Add param info re...
55
			
966bd5f8   Benjamin Renard   Add request to ge...
56
		if (!$res) {
cc3bdb0e   Elena.Budnik   RequestManager sp...
57
			$this->requestData->setLastErrorMessage("Cannot load file".$this->requestData->getFilePath());
966bd5f8   Benjamin Renard   Add request to ge...
58
59
			return false;
		}
ffc5cb81   Elena.Budnik   temporary commit
60

f28f7c0e   Benjamin Renard   Add param info re...
61
		switch ($this->requestData->getType()) {
ffc5cb81   Elena.Budnik   temporary commit
62
63
			case ParamInfoTypeEnumClass::IMPEXPLOTINIT :
			case ParamInfoTypeEnumClass::PLOTINIT :	
f28f7c0e   Benjamin Renard   Add param info re...
64
				$this->runFromParamFile($dom);
ffc5cb81   Elena.Budnik   temporary commit
65
				break;			
f28f7c0e   Benjamin Renard   Add param info re...
66
67
68
69
			case ParamInfoTypeEnumClass::PARAMINFO :
				$this->runFromParamInfoFile($dom);
				break;
			default :
ffc5cb81   Elena.Budnik   temporary commit
70
				$this->requestData->setLastErrorMessage("Unknown ParamInfo type ");
f28f7c0e   Benjamin Renard   Add param info re...
71
72
73
74
		}
		
		return $this->requestData->getSuccess();
	}
ffc5cb81   Elena.Budnik   temporary commit
75

f28f7c0e   Benjamin Renard   Add param info re...
76
77
	
	private function runFromParamFile($dom) {
966bd5f8   Benjamin Renard   Add request to ge...
78
79
80
81
82
83
84
85
86
87
		$paramNode = new ParamNodeClass();
		
		try {
			$paramNode->loadFromNode($dom->documentElement);
		} catch (Exception $e) {
			$this->requestData->setLastErrorMessage("Error to parse parameter file : Exception detected : ".$e->getMessage());
			return false;
		}
		
		switch ($this->requestData->getType()) {
ffc5cb81   Elena.Budnik   temporary commit
88
			case ParamInfoTypeEnumClass::IMPEXPLOTINIT :
966bd5f8   Benjamin Renard   Add request to ge...
89
90
91
92
93
			case ParamInfoTypeEnumClass::PLOTINIT :
				$outputNode = $paramNode->getOutput();
				if (!isset($outputNode)) {
					$this->requestData->setLastErrorMessage("Cannot parse output node");
					return false;
ffc5cb81   Elena.Budnik   temporary commit
94
				}			 
966bd5f8   Benjamin Renard   Add request to ge...
95
96
97
98
				$plotNode = $outputNode->getChildInstanceByName("plot");
				if (!isset($plotNode)) {
					$this->requestData->setLastErrorMessage("Cannot parse plot node");
					return false;
ffc5cb81   Elena.Budnik   temporary commit
99
				}				
f28f7c0e   Benjamin Renard   Add param info re...
100
				$this->requestData->setResult($plotNode);
966bd5f8   Benjamin Renard   Add request to ge...
101
				$this->requestData->setSuccess(true);
f28f7c0e   Benjamin Renard   Add param info re...
102
				return true;
966bd5f8   Benjamin Renard   Add request to ge...
103
104
105
106
			default :
				$this->requestData->setLastErrorMessage("Unknown param info request");
		}
		
f28f7c0e   Benjamin Renard   Add param info re...
107
108
109
110
111
112
113
114
115
116
117
		return false;
	}
	
	private function runFromParamInfoFile($dom) {
		$result = array();
		
		// Dimensions
		$dimsNodes = $dom->getElementsByTagName("dimensions");
		if ($dimsNodes->length > 0) {
			$dimsNode = $dimsNodes->item(0);
			$result['dimensions'] = array(
4b616b6d   Benjamin Renard   Fix table / dim a...
118
119
				'dim1' => $dimsNode->getAttribute("dim_1"),
				'dim2' => $dimsNode->getAttribute("dim_2")
f28f7c0e   Benjamin Renard   Add param info re...
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
			);
		}
		
		// Components
		$compNodes = $dom->getElementsByTagName("components");
		if ($compNodes->length > 0) {
			$compNode = $compNodes->item(0);
			$result['components'] = array();
			foreach ($compNode->getElementsByTagName("component") as $componentNode) {
				$result['components'][] = array(
					'index_1' => $componentNode->getAttribute("index_1"),
					'index_2' => $componentNode->getAttribute("index_2"),
					'name' => $componentNode->getAttribute("name")
				);
			} 
		}
		
		// Tables
		$tablesNodes = $dom->getElementsByTagName("tables");
		if ($tablesNodes->length > 0) {
			$tablesNode = $tablesNodes->item(0);
			$result['tables'] = array();
			foreach ($tablesNode->getElementsByTagName("table") as $tableNode) {
				$tableResult = array(
4b616b6d   Benjamin Renard   Fix table / dim a...
144
						'relatedDim' => ($tableNode->getAttribute("relatedDim") == "dim_1" ? "dim1" : "dim2"),
f28f7c0e   Benjamin Renard   Add param info re...
145
146
						'name' => $tableNode->getAttribute("name"),
						'units' => $tableNode->getAttribute("units"),
f25e55ba   Benjamin Renard   Add sum in table ...
147
						'variable' => ($tableNode->getAttribute("variable") === "true"),
34a30a7e   Elena.Budnik   auto fill of min/...
148
149
						'channels' => array(),
						'minmax' => array()
f28f7c0e   Benjamin Renard   Add param info re...
150
151
				);
				
f25e55ba   Benjamin Renard   Add sum in table ...
152
153
154
155
156
157
158
159
				if (!$tableResult['variable']) {
					$channelNodes = $tableNode->getElementsByTagName("channel");
					foreach ($channelNodes as $channelNode) {
						$tableResult['channels'][] = array(
							'min' => $channelNode->getAttribute("min"),
							'max' => $channelNode->getAttribute("max")
						);
					}
f28f7c0e   Benjamin Renard   Add param info re...
160
				}
34a30a7e   Elena.Budnik   auto fill of min/...
161
162
163
164
165
166
167
168
				else {
					if ($tableNode->hasAttribute("minValue")) {
						$tableResult['minmax'] = array(
							'min' => $tableNode->getAttribute("minValue"),
							'max' => $tableNode->getAttribute("maxValue")
						);
					}
				}
f28f7c0e   Benjamin Renard   Add param info re...
169
170
171
172
173
174
175
176
177
				
				$result['tables'][] = $tableResult;
			}
		}
		
		$this->requestData->setResult($result);
		$this->requestData->setSuccess(true);
		
		return true;
966bd5f8   Benjamin Renard   Add request to ge...
178
179
	}
}
8ade06fe   Benjamin Renard   Improve config load
180
?>