RemoteDataCenterClass.php
3.56 KB
1
2
3
4
5
6
7
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?php
/**
* @class RemoteDataCenterClass
* @brief Server
* @details
*/
abstract class RemoteDataCenterClass
{
protected $url = null, $WSDL = null, $treeXML = null;
protected $needsArgs = false;
protected $hasAccessUrl = false;
public $domAmda = null, $dataCenter = null;
public $domAmdaName = "base.xml";
public $additionalArgs = null;
public $baseID = null;
public $location;
public $tree = null;
protected $DDserverDir;
public static $MAX_NAME_LENGTH = 31;
public static $MAX_VI_NAME_LENGTH = 16;
/*
* @brief Constructor
*/
function __construct()
{
$this->baseID = get_class($this);
$this->location = RemoteData."/bases/".$this->baseID;
}
/* Function to change External Bases stuff in case of existing AMDA aliases.
Uses file DICTIONARY_DIR.mapBaseID.xml */
protected function alias($Dictionary, $name) {
$xmldoc = new DomDocument("1.0");
$xmldoc->load($DictionaryFile);
$item = $xmldoc->getElementById(strtoupper($name));
if (!$item) return $name;
$alias = $item->nodeValue;
return $alias;
}
public function param2dd($paramID)
{
$pairs = array(" " => "_","-" => "_","/" => "_","%" => "_","\\" => "_","$" => "_",":" => "_","+" =>"_","#" => "_",
"@" => "_","." => "_", ">" => "_", "<" => "_", "," => "_", ")" => "", "(" => "_");
return strtr($paramID,$pairs);
}
public function saveProxy()
{
$this->domAmda->save($this->location."/".$this->domAmdaName);
}
abstract public function init();
abstract protected function getRemoteTree();
abstract protected function setDataCenterAttributes();
abstract protected function makeArgumentsList();
// abstract public function getDatasetInfo($ds);
// abstract public function getData($ds, $start, $stop);
// abstract protected function convert2nc();
// abstract protected function createDatasetNodes();
// abstract protected function createParameterNodes();
// abstract protected function createDatasetGroupNodes($data);
public function initProxy()
{
if (!is_dir($this->location))
mkdir($this->location, 0755, true);
$this->DDserverDir = RemoteData."/DDServer/".$this->baseID;
if (!is_dir($this->DDserverDir))
mkdir($this->DDserverDir, 0755, true);
$this->init();
$this->getRemoteTree();
}
public function makeProxy()
{
$this->domAmda = new DOMDocument('1.0', 'utf-8');
$this->domAmda->formatOutput = TRUE;
$this->domAmda->preserveWhiteSpace = FALSE;
$dataRoot = $this->domAmda->createElement('dataRoot');
$dataRoot->setAttribute('xml:id', 'myRemoteData-treeRootNode');
$this->domAmda->appendChild($dataRoot);
$this->dataCenter=$this->domAmda->createElement('dataCenter');
$this->dataCenter->setAttribute('xml:id', $this->baseID);
$this->dataCenter->setAttribute('name', $this->baseID);
$dataRoot->appendChild($this->dataCenter);
$this->setDataCenterAttributes();
$missionNodes = $this->createMissionNodes();
foreach ($missionNodes as $missionNode)
$this->dataCenter->appendChild($missionNode);
}
protected function getIdFromSpase($spaseId)
{
$temp = explode('/',$spaseId);
return $temp[count($temp)-1];
}
public function monitor()
{
$ch = curl_init($this->url."/".$this->WSDL);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($httpcode >= 200 && $httpcode < 300)
{
return true;
} else
{
return false;
}
}
}
?>