Commit 8a2ebb6973f060b0bdead08d80cab8badcb70d11
Exists in
master
and in
110 other branches
Merge branch 'upload_cdf_upgrade' into 'master'
Upload cdf upgrade See merge request !20
Showing
18 changed files
with
2152 additions
and
1646 deletions
Show diff stats
js/app/controllers/UploadModule.js
@@ -20,8 +20,8 @@ Ext.define('amdaDesktop.UploadModule', { | @@ -20,8 +20,8 @@ Ext.define('amdaDesktop.UploadModule', { | ||
20 | * @cfg {String} window definitions | 20 | * @cfg {String} window definitions |
21 | * @required | 21 | * @required |
22 | */ | 22 | */ |
23 | - width: 320, | ||
24 | - height: 510, | 23 | + width: 330, |
24 | + height: 520, | ||
25 | uiType : 'panelTabUpload', | 25 | uiType : 'panelTabUpload', |
26 | helpTitle : 'Help on Upload Module', | 26 | helpTitle : 'Help on Upload Module', |
27 | helpFile : 'uploadHelp', | 27 | helpFile : 'uploadHelp', |
js/app/models/InteractiveNode.js
@@ -200,22 +200,11 @@ Ext.define('amdaModel.InteractiveNode', { | @@ -200,22 +200,11 @@ Ext.define('amdaModel.InteractiveNode', { | ||
200 | 200 | ||
201 | if (res.info) { | 201 | if (res.info) { |
202 | this.set('info',res.info); | 202 | this.set('info',res.info); |
203 | - } | ||
204 | - | ||
205 | - if (this.get('nodeType') == 'myDataParam') { | ||
206 | - if (res.isSpectra) { | ||
207 | - this.set('iconCls', 'icon-spectra'); | ||
208 | - } | ||
209 | - else { | ||
210 | - if (res.size > 1) this.set('iconCls', 'icon-unknowntype'); | ||
211 | - } | ||
212 | } | 203 | } |
213 | 204 | ||
214 | - // update my data on possibble mask change | ||
215 | - if (res.updateMyData) { | ||
216 | - this.updateMyData(); | ||
217 | - this.updateMask(res.mask); | ||
218 | - } | 205 | + // myDataParam special update |
206 | + this.specialUpdate(res, false); | ||
207 | + | ||
219 | // reload object into the view of corresponding Module | 208 | // reload object into the view of corresponding Module |
220 | var me = this; | 209 | var me = this; |
221 | myDesktopApp.getLoadedModule(this.get('moduleId'), true, function (module) { | 210 | myDesktopApp.getLoadedModule(this.get('moduleId'), true, function (module) { |
@@ -282,30 +271,10 @@ Ext.define('amdaModel.InteractiveNode', { | @@ -282,30 +271,10 @@ Ext.define('amdaModel.InteractiveNode', { | ||
282 | if (res.info){ | 271 | if (res.info){ |
283 | // set the tooltip | 272 | // set the tooltip |
284 | this.set('info',res.info); | 273 | this.set('info',res.info); |
285 | - //set globalStart & global Stop to be used for time selection | ||
286 | - if (this.get('nodeType') == 'myDataParam') | ||
287 | - { | ||
288 | - var startStop = res.info.split("<br/>"); | ||
289 | - var globalStart = startStop[1].substr(0,19); | ||
290 | - var globalStop = startStop[1].substr(20); | ||
291 | - | ||
292 | - this.set('globalStart', globalStart); | ||
293 | - this.set('globalStop', globalStop); | ||
294 | - | ||
295 | - if (res.mask) | ||
296 | - this.set('linkedMask', res.mask); | ||
297 | - if (res.size) | ||
298 | - this.set('size', res.size); | ||
299 | - | ||
300 | - if (res.isSpectra) { | ||
301 | - this.set('iconCls', 'icon-spectra'); | ||
302 | - } | ||
303 | - else { | ||
304 | - if (res.size > 1) | ||
305 | - this.set('iconCls', 'icon-unknowntype'); | ||
306 | - } | ||
307 | - } | ||
308 | - } | 274 | + } |
275 | + //set globalStart & global Stop to be used for time selection | ||
276 | + this.specialUpdate(res, true); | ||
277 | + | ||
309 | //TODO do we need this commission ??? | 278 | //TODO do we need this commission ??? |
310 | // fix the modifications for object | 279 | // fix the modifications for object |
311 | this.get('object').commit(); | 280 | this.get('object').commit(); |
@@ -333,14 +302,6 @@ Ext.define('amdaModel.InteractiveNode', { | @@ -333,14 +302,6 @@ Ext.define('amdaModel.InteractiveNode', { | ||
333 | opt.callback.call(scope,'create'); | 302 | opt.callback.call(scope,'create'); |
334 | } | 303 | } |
335 | }, this); | 304 | }, this); |
336 | - | ||
337 | - // myDataParamNode - update MyData subtree | ||
338 | - //TODO put this in mydataparamnode | ||
339 | - if (res.updateMyData) { | ||
340 | - this.updateMyData(); | ||
341 | - this.updateMask(res.mask); | ||
342 | - } | ||
343 | - | ||
344 | } | 305 | } |
345 | // error code from server; but e.status==true | 306 | // error code from server; but e.status==true |
346 | else { | 307 | else { |
@@ -359,6 +320,7 @@ Ext.define('amdaModel.InteractiveNode', { | @@ -359,6 +320,7 @@ Ext.define('amdaModel.InteractiveNode', { | ||
359 | },this); | 320 | },this); |
360 | }, | 321 | }, |
361 | 322 | ||
323 | + specialUpdate : function() {}, | ||
362 | /** | 324 | /** |
363 | * Generic part of Context Menu | 325 | * Generic part of Context Menu |
364 | * | 326 | * |
js/app/models/MyDataNode.js
@@ -188,9 +188,9 @@ Ext.define('amdaModel.MyDataNode', { | @@ -188,9 +188,9 @@ Ext.define('amdaModel.MyDataNode', { | ||
188 | if (myParamRootNode.isExpanded) { | 188 | if (myParamRootNode.isExpanded) { |
189 | Ext.Array.each(myParamRootNode.childNodes, function(node) { | 189 | Ext.Array.each(myParamRootNode.childNodes, function(node) { |
190 | if (node.get('linkedMask') && node.get('linkedMask') == mask) { | 190 | if (node.get('linkedMask') && node.get('linkedMask') == mask) { |
191 | - var globalStart = maskDesc.substr(0,16); | ||
192 | - var globalStop = maskDesc.substr(17,16); | ||
193 | - | 191 | + var globalStart = maskDesc.substr(0,19); |
192 | + var globalStop = maskDesc.substr(20); | ||
193 | + | ||
194 | node.set('globalStart', globalStart); | 194 | node.set('globalStart', globalStart); |
195 | node.set('globalStop', globalStop); | 195 | node.set('globalStop', globalStop); |
196 | if (node.get('info')) { | 196 | if (node.get('info')) { |
js/app/models/MyDataParamNode.js
@@ -31,12 +31,13 @@ Ext.define('amdaModel.MyDataParamNode', { | @@ -31,12 +31,13 @@ Ext.define('amdaModel.MyDataParamNode', { | ||
31 | this.set('objectDataModel','amdaModel.FileParamObject'); | 31 | this.set('objectDataModel','amdaModel.FileParamObject'); |
32 | if (this.get('isParameter')) { | 32 | if (this.get('isParameter')) { |
33 | if (this.get('size') == 1) | 33 | if (this.get('size') == 1) |
34 | - this.set('iconCls', 'icon-scalar'); | ||
35 | - else if (this.get('size') == 3) | 34 | + this.set('iconCls', 'icon-scalar'); |
35 | + else if(this.get('size') == 3) | ||
36 | this.set('iconCls', 'icon-vector'); | 36 | this.set('iconCls', 'icon-vector'); |
37 | else | 37 | else |
38 | this.set('iconCls', 'icon-unknowntype'); | 38 | this.set('iconCls', 'icon-unknowntype'); |
39 | } | 39 | } |
40 | + | ||
40 | if (this.get('isSpectra')) this.set('iconCls', 'icon-spectra'); | 41 | if (this.get('isSpectra')) this.set('iconCls', 'icon-spectra'); |
41 | }, | 42 | }, |
42 | 43 | ||
@@ -76,7 +77,7 @@ Ext.define('amdaModel.MyDataParamNode', { | @@ -76,7 +77,7 @@ Ext.define('amdaModel.MyDataParamNode', { | ||
76 | }, | 77 | }, |
77 | 78 | ||
78 | getAllContextMenuItems: function() | 79 | getAllContextMenuItems: function() |
79 | - { | 80 | + { |
80 | var menuItems = this.allMenuItems('Parameter'); | 81 | var menuItems = this.allMenuItems('Parameter'); |
81 | var locMenuItems = this.localMenuItems(); | 82 | var locMenuItems = this.localMenuItems(); |
82 | 83 | ||
@@ -87,52 +88,53 @@ Ext.define('amdaModel.MyDataParamNode', { | @@ -87,52 +88,53 @@ Ext.define('amdaModel.MyDataParamNode', { | ||
87 | { | 88 | { |
88 | var fnId = Ext.util.Format.substr(item.fnId, 5, item.fnId.length); | 89 | var fnId = Ext.util.Format.substr(item.fnId, 5, item.fnId.length); |
89 | 90 | ||
90 | - switch (fnId) { | 91 | + switch (fnId) |
92 | + { | ||
91 | case 'deleteNode': | 93 | case 'deleteNode': |
92 | this.deleteNode(); | 94 | this.deleteNode(); |
93 | break; | 95 | break; |
94 | 96 | ||
95 | case 'createDir': | 97 | case 'createDir': |
96 | this.createDir(); | 98 | this.createDir(); |
97 | - break; | 99 | + break; |
98 | 100 | ||
99 | case 'createLeaf': | 101 | case 'createLeaf': |
100 | - this.createLeaf(this); | ||
101 | - break; | 102 | + this.createLeaf(this); |
103 | + break; | ||
102 | 104 | ||
103 | case 'renameNode': | 105 | case 'renameNode': |
104 | - this.renameNode(); | ||
105 | - break; | 106 | + this.renameNode(); |
107 | + break; | ||
106 | 108 | ||
107 | case 'editLeaf': | 109 | case 'editLeaf': |
108 | - this.editLeaf(); | ||
109 | - break; | 110 | + this.editLeaf(); |
111 | + break; | ||
110 | 112 | ||
111 | case 'upload': | 113 | case 'upload': |
112 | - this.uploadFile(); | ||
113 | - break; | ||
114 | - | 114 | + this.uploadFile(); |
115 | + break; | ||
116 | + | ||
115 | case 'plotParam': | 117 | case 'plotParam': |
116 | - this.createPlot(this); | ||
117 | - break; | ||
118 | - | 118 | + this.createPlot(this); |
119 | + break; | ||
120 | + | ||
119 | case 'downParam': | 121 | case 'downParam': |
120 | - this.createDownload(this); | ||
121 | - break; | ||
122 | - | 122 | + this.createDownload(this); |
123 | + break; | ||
124 | + | ||
123 | default: | 125 | default: |
124 | - break; | ||
125 | - } // switch end | ||
126 | - | ||
127 | - }, | 126 | + break; |
127 | + } // switch end | ||
128 | + }, | ||
128 | 129 | ||
129 | uploadFile: function() { | 130 | uploadFile: function() { |
130 | myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.upload.id, true, function (module) { | 131 | myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.upload.id, true, function (module) { |
131 | module.createWindow(); | 132 | module.createWindow(); |
132 | }); | 133 | }); |
133 | }, | 134 | }, |
134 | - | ||
135 | - editLeaf: function() { | 135 | + |
136 | + editLeaf: function() | ||
137 | + { | ||
136 | // load the rootNode and recursively all its child nodes | 138 | // load the rootNode and recursively all its child nodes |
137 | // to know all names of DerivedParameters | 139 | // to know all names of DerivedParameters |
138 | var me = this; | 140 | var me = this; |
@@ -161,20 +163,20 @@ Ext.define('amdaModel.MyDataParamNode', { | @@ -161,20 +163,20 @@ Ext.define('amdaModel.MyDataParamNode', { | ||
161 | var t = remoteEvent.getTransaction(); | 163 | var t = remoteEvent.getTransaction(); |
162 | if (result) { | 164 | if (result) { |
163 | if (result.id) { | 165 | if (result.id) { |
164 | - var paramObj = Ext.create(this.get('objectDataModel'), result); | ||
165 | - // set parameter into node | ||
166 | - this.set('object',paramObj); | ||
167 | - | ||
168 | - paramObj.set('tableDef', result['tableDef']); | ||
169 | - | ||
170 | - if (paramObj.get('mask')) var file = paramObj.get('mask'); | ||
171 | - else var file = paramObj.get('file'); | ||
172 | - | ||
173 | - AmdaAction.getObject(file, amdaModel.MyDataNode.nodeType, | ||
174 | - this.getFileObjectCallback, this); | 166 | + var paramObj = Ext.create(this.get('objectDataModel'), result); |
167 | + // set parameter into node | ||
168 | + this.set('object',paramObj); | ||
169 | + | ||
170 | + paramObj.set('tableDef', result['tableDef']); | ||
171 | + | ||
172 | + if (paramObj.get('mask')) var file = paramObj.get('mask'); | ||
173 | + else var file = paramObj.get('file'); | ||
174 | + | ||
175 | + AmdaAction.getObject(file, amdaModel.MyDataNode.nodeType, | ||
176 | + this.getFileObjectCallback, this); | ||
175 | } | 177 | } |
176 | else { | 178 | else { |
177 | - myDesktopApp.errorMsg(result.error); | 179 | + myDesktopApp.errorMsg(result.error); |
178 | } | 180 | } |
179 | } | 181 | } |
180 | else { | 182 | else { |
@@ -226,24 +228,59 @@ Ext.define('amdaModel.MyDataParamNode', { | @@ -226,24 +228,59 @@ Ext.define('amdaModel.MyDataParamNode', { | ||
226 | }, | 228 | }, |
227 | 229 | ||
228 | updateMyData : function(){ | 230 | updateMyData : function(){ |
229 | - // reload myFiles Tree in explorer | ||
230 | - var explorerTree = Ext.getCmp(amdaUI.ExplorerUI.RESRC_TAB.TREE_ID); | ||
231 | - if (explorerTree) { | ||
232 | - var explorerTreeStore = explorerTree.getStore(); | ||
233 | - var explorerRoot = explorerTreeStore.getRootNode().findChild('text','My Files'); | ||
234 | - | ||
235 | - var explorerPath = '/root/myData-treeRootNode/'; | ||
236 | - | ||
237 | - explorerTreeStore.reload({node : explorerRoot, | ||
238 | - params : { nodeType: 'myData'}, | ||
239 | - callback : function(){ | ||
240 | - explorerTree.selectPath(explorerPath); | ||
241 | - } | ||
242 | - }); | ||
243 | - } | 231 | + // reload myFiles Tree in explorer |
232 | + var explorerTree = Ext.getCmp(amdaUI.ExplorerUI.RESRC_TAB.TREE_ID); | ||
233 | + if (explorerTree) { | ||
234 | + var explorerTreeStore = explorerTree.getStore(); | ||
235 | + var explorerRoot = explorerTreeStore.getRootNode().findChild('text','My Files'); | ||
236 | + | ||
237 | + var explorerPath = '/root/myData-treeRootNode/'; | ||
238 | + | ||
239 | + explorerTreeStore.reload({node : explorerRoot, | ||
240 | + params : { nodeType: 'myData'}, | ||
241 | + callback : function(){ | ||
242 | + explorerTree.selectPath(explorerPath); | ||
243 | + } | ||
244 | + }); | ||
245 | + } | ||
244 | }, | 246 | }, |
245 | 247 | ||
246 | isParameter : function(){ | 248 | isParameter : function(){ |
247 | return this.get('isParameter'); | 249 | return this.get('isParameter'); |
248 | - } | 250 | + }, |
251 | + | ||
252 | + specialUpdate : function(res, timeUpdate) | ||
253 | + { | ||
254 | + if (timeUpdate && res.info) | ||
255 | + { | ||
256 | + var startStop = res.info.split("<br/>"); | ||
257 | + var globalStart = startStop[1].substr(0,19); | ||
258 | + var globalStop = startStop[1].substr(20); | ||
259 | + | ||
260 | + this.set('globalStart', globalStart); | ||
261 | + this.set('globalStop', globalStop); | ||
262 | + | ||
263 | + if (res.mask) | ||
264 | + this.set('linkedMask', res.mask); | ||
265 | + if (res.size) | ||
266 | + this.set('size', res.size); | ||
267 | + } | ||
268 | + | ||
269 | + if (res.isSpectra) { | ||
270 | + this.set('iconCls', 'icon-spectra'); | ||
271 | + } | ||
272 | + else if (res.size == 3) { | ||
273 | + this.set('iconCls', 'icon-vector'); | ||
274 | + } | ||
275 | + else if (res.size > 1) { | ||
276 | + this.set('iconCls', 'icon-unknowntype'); | ||
277 | + } | ||
278 | + | ||
279 | + // update my data on possible mask change | ||
280 | + if (res.updateMyData) { | ||
281 | + this.updateMyData(); | ||
282 | + this.updateMask(res.mask); | ||
283 | + } | ||
284 | + } | ||
285 | + | ||
249 | }); | 286 | }); |
js/app/views/ExplorerUI.js
@@ -266,10 +266,12 @@ Ext.define('amdaUI.ExplorerUI', { | @@ -266,10 +266,12 @@ Ext.define('amdaUI.ExplorerUI', { | ||
266 | model: 'amdaModel.AmdaNode', | 266 | model: 'amdaModel.AmdaNode', |
267 | sorters:[{ direction: 'ASC' , | 267 | sorters:[{ direction: 'ASC' , |
268 | sorterFn: function(o1, o2){ | 268 | sorterFn: function(o1, o2){ |
269 | - if (o1.get('nodeType') !== 'localParam') | ||
270 | - return; | ||
271 | - | ||
272 | - return o1.get('text').toUpperCase() < o2.get('text').toUpperCase() ? -1 : 1; | 269 | + |
270 | + if (o1.get('nodeType') == 'localParam' || o1.get('nodeType') == 'myData') { | ||
271 | + return o1.get('text').toUpperCase() < o2.get('text').toUpperCase() ? -1 : 1; | ||
272 | + } | ||
273 | + | ||
274 | + return; | ||
273 | } | 275 | } |
274 | }], | 276 | }], |
275 | listeners: { | 277 | listeners: { |
js/app/views/MyDataUI.js
@@ -10,474 +10,495 @@ | @@ -10,474 +10,495 @@ | ||
10 | 10 | ||
11 | 11 | ||
12 | Ext.define('amdaUI.MyDataUI', { | 12 | Ext.define('amdaUI.MyDataUI', { |
13 | - extend: 'Ext.container.Container', | ||
14 | - alias: 'widget.panelMyData', | ||
15 | - | ||
16 | - requires: [ | ||
17 | - 'amdaUI.TableDefPlugUI' | ||
18 | - ], | 13 | + extend: 'Ext.container.Container', |
14 | + alias: 'widget.panelMyData', | ||
15 | + | ||
16 | + requires: [ | ||
17 | + 'amdaUI.TableDefPlugUI' | ||
18 | + ], | ||
19 | 19 | ||
20 | - object : null, | ||
21 | - fileObject : null, | ||
22 | - | ||
23 | - module : null, | ||
24 | - | ||
25 | - fields : [], | ||
26 | - columns : [], | ||
27 | - | ||
28 | - constructor: function(config) { | ||
29 | - this.module = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.my_data.id); | ||
30 | - this.init(config); | ||
31 | - this.callParent(arguments); | ||
32 | - this.setObject(this.module.linkedNode.get('object')); | ||
33 | - }, | ||
34 | - | ||
35 | - /* | ||
36 | - * linked node should be MyDataParamNode | ||
37 | - */ | ||
38 | - resetLinkedNode: function() | ||
39 | - { | ||
40 | - this.linkedNode = null; | ||
41 | - this.module.createLinkedNode(); | ||
42 | - this.module.createObject(); | ||
43 | - this.module.linkedNode.set('fileObject',this.fileObject); | ||
44 | - }, | 20 | + object : null, |
21 | + fileObject : null, | ||
45 | 22 | ||
46 | - getObjectCallback: function(result,remoteEvent) | ||
47 | - { | ||
48 | - var t = remoteEvent.getTransaction(); | ||
49 | - if (result && !result.error) { | ||
50 | - //this.tmpNode.set('contextNode',mask!!! if exists | ||
51 | - this.fileObject = Ext.create('amdaModel.FileObject', result); | ||
52 | - var panelConfig = this.initPanel(); | ||
53 | - } | ||
54 | - else { | ||
55 | - // EXCEPTION : parameter not found ! | ||
56 | - myDesktopApp.errorMsg(t.action + "." + t.method + " : No parameter '" | ||
57 | - +this.tmpNode.get('text')+"' found!"); | ||
58 | - } | ||
59 | - }, | ||
60 | - | ||
61 | - /* | ||
62 | - * Update info in the form on another parameter selection (cdf, cef formats); | ||
63 | - */ | ||
64 | - updateInfo : function(res, e) | ||
65 | - { | ||
66 | - if (res.success){ | ||
67 | - // info panel | ||
68 | - this.items.getAt(1).update(res.info.name+': '+res.info.type+' '+res.info.size+' '+res.info.n_records); | ||
69 | - var form = this.items.getAt(0).getForm(); | ||
70 | - | ||
71 | - //keep old name and mask if they exist | ||
72 | - if (this.object.get('format') == 'vot') | ||
73 | - { | ||
74 | - if ((res.info.id === this.object.get('realvar'))) { | ||
75 | - if (this.object.get('realvar') != this.object.get('name')) { | ||
76 | - res.info.name = this.object.get('name'); | ||
77 | - } | ||
78 | - if (res.info.mask != this.object.get('mask')) { | ||
79 | - res.info.mask = this.object.get('mask'); | ||
80 | - } | ||
81 | - } | ||
82 | - } | ||
83 | - else | ||
84 | - { | ||
85 | - if ((res.info.name === this.object.get('realvar'))) { | ||
86 | - if (this.object.get('realvar') != this.object.get('name')) { | ||
87 | - res.info.name = this.object.get('name'); | ||
88 | - } | ||
89 | - if (res.info.mask != this.object.get('mask')) { | ||
90 | - res.info.mask = this.object.get('mask'); | ||
91 | - } | ||
92 | - } | ||
93 | - } | 23 | + module : null, |
24 | + | ||
25 | + fields : [], | ||
26 | + columns : [], | ||
27 | + | ||
28 | + constructor: function(config) { | ||
29 | + this.module = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.my_data.id); | ||
30 | + this.init(config); | ||
31 | + this.callParent(arguments); | ||
32 | + this.setObject(this.module.linkedNode.get('object')); | ||
33 | + }, | ||
94 | 34 | ||
95 | - form.setValues(res.info); | ||
96 | - } | ||
97 | - else { | ||
98 | - myDesktopApp.errorMsg("System Error <br/> Error at AMDA Server"); | ||
99 | - } | ||
100 | - }, | ||
101 | - | ||
102 | - /* | ||
103 | - * Check if changes were made before closing window | ||
104 | - * @return false | ||
105 | - */ | ||
106 | - fclose : function() { | ||
107 | - return false; | ||
108 | - }, | 35 | + /* |
36 | + * linked node should be MyDataParamNode | ||
37 | + */ | ||
38 | + resetLinkedNode: function() | ||
39 | + { | ||
40 | + this.linkedNode = null; | ||
41 | + this.module.createLinkedNode(); | ||
42 | + this.module.createObject(); | ||
43 | + this.module.linkedNode.set('fileObject',this.fileObject); | ||
44 | + }, | ||
109 | 45 | ||
110 | - /** | ||
111 | - * set object into form | ||
112 | - */ | ||
113 | - setObject : function (object) | ||
114 | - { | ||
115 | - // edit in module from FileUpload Module and ExplorerModule (edit param) | ||
116 | - if (this.module.linkedNode) { | ||
117 | - if (this.module.linkedNode.get('fileObject')) { | ||
118 | - this.fileObject = this.module.linkedNode.get('fileObject'); | ||
119 | - } | ||
120 | - // edit in module from Explorer Module (edit file) | ||
121 | - else if (this.module.linkedNode.get('object')) { | ||
122 | - this.fileObject = this.module.linkedNode.get('object'); | ||
123 | - this.resetLinkedNode(); | ||
124 | - } | ||
125 | - else { | ||
126 | - myDesktopApp.errorMsg("System Error <br/> No FileObject and Object"); | ||
127 | - } | ||
128 | - } | ||
129 | - else { | ||
130 | - myDesktopApp.errorMsg("System Error <br/> No Linked Node"); | ||
131 | - } | ||
132 | - | ||
133 | - var form = this.down('form'); | ||
134 | - form.getForm().reset(); | ||
135 | - // remove and DESTROY right panel if it exists | ||
136 | - if (form.items.length == 2) | ||
137 | - form.remove(form.items.getAt(1),true); | ||
138 | - // create right panel depending on file | ||
139 | - var rightPanel = this.initPanel(); | ||
140 | - form.add(rightPanel); | ||
141 | - this.object = this.module.linkedNode.get('object'); | 46 | + getObjectCallback: function(result,remoteEvent) |
47 | + { | ||
48 | + var t = remoteEvent.getTransaction(); | ||
49 | + if (result && !result.error) { | ||
50 | + //this.tmpNode.set('contextNode',mask!!! if exists | ||
51 | + this.fileObject = Ext.create('amdaModel.FileObject', result); | ||
52 | + var panelConfig = this.initPanel(); | ||
53 | + } | ||
54 | + else { | ||
55 | + // EXCEPTION : parameter not found ! | ||
56 | + myDesktopApp.errorMsg(t.action + "." + t.method + " : No parameter '" | ||
57 | + +this.tmpNode.get('text')+"' found!"); | ||
58 | + } | ||
59 | + }, | ||
60 | + /* | ||
61 | + * Update info in the form on another parameter selection (cdf, cef formats); | ||
62 | + */ | ||
63 | + updateInfo : function(res, e) | ||
64 | + { | ||
65 | + if (res.success){ | ||
66 | + // info panel | ||
67 | + this.items.getAt(1).update(res.info.name+': '+res.info.type+' '+res.info.size+' '+res.info.n_records); | ||
68 | + var form = this.items.getAt(0).getForm(); | ||
69 | + | ||
70 | + //keep old name and mask if they exist | ||
71 | + if (this.object.get('format') == 'vot') | ||
72 | + { | ||
73 | + res.info.ytitle = res.info.name; | ||
74 | + if ((res.info.id === this.object.get('realvar'))) { | ||
75 | + if (this.object.get('realvar') != this.object.get('name')) { | ||
76 | + res.info.name = this.object.get('name'); | ||
77 | + } | ||
78 | + if (res.info.mask != this.object.get('mask')) { | ||
79 | + res.info.mask = this.object.get('mask'); | ||
80 | + } | ||
81 | + } | ||
82 | + } | ||
83 | + else | ||
84 | + { | ||
85 | + if ((res.info.name === this.object.get('realvar'))) { | ||
86 | + if (this.object.get('realvar') != this.object.get('name')) { | ||
87 | + res.info.name = this.object.get('name'); | ||
88 | + } | ||
89 | + if (res.info.mask != this.object.get('mask')) { | ||
90 | + res.info.mask = this.object.get('mask'); | ||
91 | + } | ||
92 | + } | ||
93 | + res.info.ytitle = res.info.name; | ||
94 | + } | ||
142 | 95 | ||
143 | - // load object into form | ||
144 | - if (object.$className == 'amdaModel.FileObject' || !this.object.get('name')) | ||
145 | - form.getForm().loadRecord(this.fileObject); | ||
146 | - else | ||
147 | - form.getForm().loadRecord(this.object); | 96 | + form.setValues(res.info); |
97 | + } | ||
98 | + else { | ||
99 | + myDesktopApp.errorMsg("System Error <br/> Error at AMDA Server"); | ||
100 | + } | ||
101 | + }, | ||
102 | + /* | ||
103 | + * Check if changes were made before closing window | ||
104 | + * @return false | ||
105 | + */ | ||
106 | + fclose : function() { | ||
107 | + return false; | ||
108 | + }, | ||
109 | + | ||
110 | + /** | ||
111 | + * set object into form | ||
112 | + */ | ||
113 | + setObject : function (object) | ||
114 | + { | ||
115 | + // edit in module from FileUpload Module and ExplorerModule (edit param) | ||
116 | + if (this.module.linkedNode) { | ||
117 | + if (this.module.linkedNode.get('fileObject')) { | ||
118 | + this.fileObject = this.module.linkedNode.get('fileObject'); | ||
119 | + } | ||
120 | + // edit in module from Explorer Module (edit file) | ||
121 | + else if (this.module.linkedNode.get('object')) { | ||
122 | + this.fileObject = this.module.linkedNode.get('object'); | ||
123 | + this.resetLinkedNode(); | ||
124 | + } | ||
125 | + else { | ||
126 | + myDesktopApp.errorMsg("System Error <br/> No FileObject and Object"); | ||
127 | + } | ||
128 | + } | ||
129 | + else { | ||
130 | + myDesktopApp.errorMsg("System Error <br/> No Linked Node"); | ||
131 | + } | ||
132 | + | ||
133 | + var form = this.down('form'); | ||
134 | + form.getForm().reset(); | ||
135 | + // remove and DESTROY right panel if it exists | ||
136 | + if (form.items.length == 2) | ||
137 | + form.remove(form.items.getAt(1),true); | ||
138 | + // create right panel depending on file | ||
139 | + var rightPanel = this.initPanel(); | ||
140 | + form.add(rightPanel); | ||
141 | + this.object = this.module.linkedNode.get('object'); | ||
148 | 142 | ||
149 | - // if it is not newly created empty myParamData node | ||
150 | - if (this.object.get('name')) { | ||
151 | - // file panel work around | ||
152 | - if (this.fileObject.get('format') == 'txt') { | ||
153 | - form.getForm().findField('start').setValue(this.object.get('realvar')); | ||
154 | - } | ||
155 | - else if (this.object.get('format') == 'vot') | ||
156 | - { | ||
157 | - var radio = this.down('radiogroup'); | ||
158 | - radio.setValue({'votvar' : this.object.get('realvar')}); | ||
159 | - } | ||
160 | - else { // cdf, cef, nc | ||
161 | - // select parameter | ||
162 | - var radio = this.down('radiogroup'); | ||
163 | - radio.setValue({'cdfvar' : this.object.get('realvar')}); | ||
164 | - } | ||
165 | - } | ||
166 | - | ||
167 | - //Set table definition | ||
168 | - if (object.get('tableDef')) | ||
169 | - this.getPlugin('tabledef').setTableDefinition(object.get('tableDef')); | ||
170 | - }, | 143 | + // load object into form |
144 | + if (object.$className == 'amdaModel.FileObject' || !this.object.get('name')) { | ||
145 | + form.getForm().loadRecord(this.fileObject); | ||
146 | + if (this.fileObject.get('format') == 'txt') | ||
147 | + this.disablePredefined(false); | ||
148 | + else | ||
149 | + this.disablePredefined(true); | ||
150 | + } | ||
151 | + else | ||
152 | + form.getForm().loadRecord(this.object); | ||
171 | 153 | ||
172 | -/* | ||
173 | - * highlight selected columns in case of param (ASCII) edit | ||
174 | - */ | ||
175 | - updateSelection: function() | ||
176 | - { | ||
177 | - var start = parseInt(this.object.get('realvar')); | ||
178 | - var size = parseInt(this.object.get('size')); | ||
179 | - | ||
180 | - if (start && size) { | ||
181 | - var columns = this.down('gridpanel').columns; | ||
182 | - for (var i = start; i < start+size; i++) { | ||
183 | - var selected = Ext.select(columns[i].getCellSelector(i)); | ||
184 | - selected.addCls('meow'); | ||
185 | - columns[i].selected = true; | ||
186 | - } | ||
187 | - } | ||
188 | - }, | 154 | + // if it is not newly created empty myParamData node |
155 | + if (this.object.get('name')) { | ||
156 | + // file panel work around | ||
157 | + if (this.fileObject.get('format') == 'txt') { | ||
158 | + form.getForm().findField('start').setValue(this.object.get('realvar')); | ||
159 | + this.disablePredefined(false); | ||
160 | + } | ||
161 | + else if (this.object.get('format') == 'vot') | ||
162 | + { | ||
163 | + var radio = this.down('radiogroup'); | ||
164 | + radio.setValue({'votvar' : this.object.get('realvar')}); | ||
165 | + } | ||
166 | + else { // cdf, cef, nc | ||
167 | + // select parameter | ||
168 | + var radio = this.down('radiogroup'); | ||
169 | + radio.suspendEvent('change'); | ||
170 | + radio.setValue({'cdfvar' : this.object.get('realvar')}); | ||
171 | + radio.resumeEvent('change'); | ||
172 | + // disable form fields defined in file | ||
173 | + this.disablePredefined(true); | ||
174 | + } | ||
175 | + } | ||
176 | + | ||
177 | + //Set table definition | ||
178 | + if (object.get('tableDef')) | ||
179 | + this.getPlugin('tabledef').setTableDefinition(object.get('tableDef')); | ||
180 | + }, | ||
189 | 181 | ||
190 | - /* | ||
191 | - * update this.object from form | ||
192 | - */ | ||
193 | - updateObject : function(nameField) | ||
194 | - { | ||
195 | - // get the basic form | ||
196 | - var basicForm = this.down('form').getForm(); | ||
197 | - var updateStatus = true; | ||
198 | - var fieldsWithoutName = basicForm.getFields().items; | ||
199 | - | ||
200 | - Ext.Array.each(fieldsWithoutName, function(item, index,allItems){ | ||
201 | - if(item !== nameField) { | ||
202 | - if (!item.isValid()) { | ||
203 | - // set update isn't allowed | ||
204 | - updateStatus = false; | ||
205 | - } | ||
206 | - } | ||
207 | - }, this); | ||
208 | - | ||
209 | - // if the update is allowed | ||
210 | - if (updateStatus) { | ||
211 | - // real object update | ||
212 | - // updateobject with the content of form | ||
213 | - var values = basicForm.getValues(); | ||
214 | - basicForm.updateRecord(this.object); | ||
215 | - this.object.set('file',this.fileObject.get('fileName')); | ||
216 | - this.object.set('format', this.fileObject.get('format')); | ||
217 | - if (this.object.get('format') == 'cdf' || this.object.get('format') == 'cef' || this.object.get('format') == 'nc') this.object.set('realvar',values.cdfvar); | ||
218 | - if (this.object.get('format') == 'vot') this.object.set('realvar',values.votvar); | ||
219 | - if (this.object.get('format') == 'txt') this.object.set('realvar',values.start); | ||
220 | - this.object.set('tableDef', this.getPlugin('tabledef').getTableDefinitionObject()); | ||
221 | - } | ||
222 | - // return the update status | ||
223 | - return updateStatus; | ||
224 | - }, | 182 | + /* |
183 | + * // disable form fields defined in file ( cdf, nc, cef ) | ||
184 | + */ | ||
185 | + disablePredefined: function(disable) | ||
186 | + { | ||
187 | + var form = this.down('form'); | ||
188 | + form.getForm().findField('start').setDisabled(disable); | ||
189 | + form.getForm().findField('size').setReadOnly(disable); | ||
190 | + this.down('combobox').setReadOnly(disable); | ||
191 | + }, | ||
192 | + | ||
193 | + /* | ||
194 | + * highlight selected columns in case of param (ASCII) edit | ||
195 | + */ | ||
196 | + updateSelection: function() | ||
197 | + { | ||
198 | + var start = parseInt(this.object.get('realvar')); | ||
199 | + var size = parseInt(this.object.get('size')); | ||
200 | + | ||
201 | + if (start && size) { | ||
202 | + var columns = this.down('gridpanel').columns; | ||
203 | + for (var i = start; i < start+size; i++) { | ||
204 | + var selected = Ext.select(columns[i].getCellSelector(i)); | ||
205 | + selected.addCls('meow'); | ||
206 | + columns[i].selected = true; | ||
207 | + } | ||
208 | + } | ||
209 | + }, | ||
210 | + | ||
211 | + /* | ||
212 | + * update this.object from form | ||
213 | + */ | ||
214 | + updateObject : function(nameField) | ||
215 | + { | ||
216 | + // get the basic form | ||
217 | + var basicForm = this.down('form').getForm(); | ||
218 | + var updateStatus = true; | ||
219 | + var fieldsWithoutName = basicForm.getFields().items; | ||
220 | + | ||
221 | + Ext.Array.each(fieldsWithoutName, function(item, index,allItems){ | ||
222 | + if(item !== nameField) { | ||
223 | + if (!item.isValid()) { | ||
224 | + // set update isn't allowed | ||
225 | + updateStatus = false; | ||
226 | + } | ||
227 | + } | ||
228 | + }, this); | ||
229 | + | ||
230 | + // if the update is allowed | ||
231 | + if (updateStatus) { | ||
232 | + // real object update | ||
233 | + // updateobject with the content of form | ||
234 | + var values = basicForm.getValues(); | ||
235 | + basicForm.updateRecord(this.object); | ||
236 | + this.object.set('file',this.fileObject.get('fileName')); | ||
237 | + this.object.set('format', this.fileObject.get('format')); | ||
238 | + if (this.object.get('format') == 'cdf' || this.object.get('format') == 'cef' || this.object.get('format') == 'nc') this.object.set('realvar',values.cdfvar); | ||
239 | + if (this.object.get('format') == 'vot') this.object.set('realvar',values.votvar); | ||
240 | + if (this.object.get('format') == 'txt') this.object.set('realvar',values.start); | ||
241 | + this.object.set('tableDef', this.getPlugin('tabledef').getTableDefinitionObject()); | ||
242 | + } | ||
243 | + // return the update status | ||
244 | + return updateStatus; | ||
245 | + }, | ||
225 | 246 | ||
226 | - /** | ||
227 | - * Check mask - length, existed.... | ||
228 | - * @return true/false | ||
229 | - */ | ||
230 | - validateMask : function(value) | ||
231 | - { | ||
232 | - // length | ||
233 | - if (value.length < 6) return 'mask length is too small (< 6)'; | ||
234 | - | ||
235 | - // first * | ||
236 | - if (value.indexOf('*') === 0) return '"*" could not be the first letter in mask'; | ||
237 | - | ||
238 | - // several * | ||
239 | - if (value.indexOf('*') !== value.lastIndexOf('*')) return 'several "*" are not allowed in mask'; | ||
240 | - | ||
241 | - // less common | ||
242 | - var paramModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.my_data.id); | ||
243 | - var oldmask = paramModule.linkedNode.get('object').get('mask'); | ||
244 | - // no old mask | ||
245 | - if (oldmask.length === 0) return true; | ||
246 | - if (value.length > oldmask.length) return 'new mask is less common than old one'; | ||
247 | - | ||
248 | - return true; | ||
249 | - }, | 247 | + /** |
248 | + * Check mask - length, existed.... | ||
249 | + * @return true/false | ||
250 | + */ | ||
251 | + validateMask : function(value) | ||
252 | + { | ||
253 | + // length | ||
254 | + if (value.length < 6) return 'mask length is too small (< 6)'; | ||
250 | 255 | ||
251 | - /* | ||
252 | - * | ||
253 | - */ | ||
254 | - saveProcess : function(toRename) | ||
255 | - { | ||
256 | - var values = this.down('form').getForm().getValues(); | ||
257 | - // Parameter Module | ||
258 | - var paramModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.my_data.id); | ||
259 | - | ||
260 | - // if the name has been modified this is a creation | ||
261 | - if (this.object.isModified('name')){ | ||
262 | - var contextNode = paramModule.linkedNode.parentNode; | ||
263 | - // if object already has an id : it's a 'rename' of an existing | ||
264 | - if (this.object.get('id')){ | ||
265 | - // get file object of the first node linked this file | ||
266 | - var fileObject = paramModule.linkedNode.get('fileObject'); | ||
267 | - | ||
268 | - paramModule.createLinkedNode(); | ||
269 | - // create a new object linked | ||
270 | - var paramobj = Ext.create(paramModule.linkedNode.get('objectDataModel'), values); | ||
271 | - | ||
272 | - paramobj.set('format', this.fileObject.get('format')); | ||
273 | - if (paramobj.get('format') == 'cdf' || paramobj.get('format') == 'cef' || | ||
274 | - paramobj.get('format') == 'nc') | ||
275 | - paramobj.set('realvar',values.cdfvar); | ||
276 | - if (paramobj.get('format') == 'vot') | ||
277 | - paramobj.set('realvar',values.votvar); | ||
278 | - if (paramobj.get('format') == 'txt') | ||
279 | - paramobj.set('realvar',values.start); | ||
280 | - | ||
281 | - paramobj.set('file', this.fileObject.get('fileName')); | ||
282 | - | ||
283 | - paramobj.set('tableDef', this.getPlugin('tabledef').getTableDefinitionObject()); | ||
284 | - | ||
285 | - paramModule.linkedNode.set('object',paramobj); | ||
286 | - //synchronize objects | ||
287 | - this.object = paramobj; | ||
288 | - | ||
289 | - paramModule.linkedNode.set('fileObject',fileObject); | ||
290 | - | ||
291 | - if (toRename) | ||
292 | - paramModule.linkedNode.toRename = true; | ||
293 | - } | ||
294 | - paramModule.linkedNode.set('contextNode',contextNode); | ||
295 | - paramModule.linkedNode.create(); | ||
296 | - | ||
297 | - paramModule.linkedNode.set('isParameter', true); | ||
298 | - | ||
299 | - if (values.size == 1) { | ||
300 | - paramModule.linkedNode.set('iconCls', 'icon-scalar'); | ||
301 | - paramModule.linkedNode.set('isSpectra', false); | ||
302 | - } | ||
303 | - else { | ||
304 | - if (values.plottype == 'Spectra') { | ||
305 | - paramModule.linkedNode.set('isSpectra', true); | ||
306 | - paramModule.linkedNode.set('iconCls', 'icon-spectra'); | ||
307 | - } | ||
308 | - else { | ||
309 | - paramModule.linkedNode.set('iconCls', 'icon-unknowntype'); | ||
310 | - paramModule.linkedNode.set('isSpectra', false); | ||
311 | - } | ||
312 | - } | ||
313 | - | ||
314 | - } else { | ||
315 | - paramModule.linkedNode.set('contextNode',paramModule.contextNode); | ||
316 | - paramModule.linkedNode.update(); | ||
317 | - } | ||
318 | - }, | 256 | + // first * |
257 | + if (value.indexOf('*') === 0) return '"*" could not be the first letter in mask'; | ||
258 | + | ||
259 | + // several * | ||
260 | + if (value.indexOf('*') !== value.lastIndexOf('*')) return 'several "*" are not allowed in mask'; | ||
261 | + | ||
262 | + // less common | ||
263 | + var paramModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.my_data.id); | ||
264 | + var oldmask = paramModule.linkedNode.get('object').get('mask'); | ||
265 | + // no old mask | ||
266 | + if (oldmask.length === 0) return true; | ||
267 | + if (value.length > oldmask.length) return 'new mask is less common than old one'; | ||
268 | + | ||
269 | + return true; | ||
270 | + }, | ||
271 | + | ||
272 | + /* | ||
273 | + * save parameter | ||
274 | + */ | ||
275 | + saveProcess : function(toRename) | ||
276 | + { | ||
277 | + var values = this.down('form').getForm().getValues(); | ||
278 | + // Parameter Module | ||
279 | + var paramModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.my_data.id); | ||
280 | + | ||
281 | + // if the name has been modified this is a creation | ||
282 | + if (this.object.isModified('name')) | ||
283 | + { | ||
284 | + var contextNode = paramModule.linkedNode.parentNode; | ||
285 | + // if object already has an id : it's a 'rename' of an existing | ||
286 | + if (this.object.get('id')) | ||
287 | + { | ||
288 | + // get file object of the first node linked this file | ||
289 | + var fileObject = paramModule.linkedNode.get('fileObject'); | ||
290 | + | ||
291 | + paramModule.createLinkedNode(); | ||
292 | + // create a new object linked | ||
293 | + var paramobj = Ext.create(paramModule.linkedNode.get('objectDataModel'), values); | ||
294 | + | ||
295 | + paramobj.set('format', this.fileObject.get('format')); | ||
296 | + if (paramobj.get('format') == 'cdf' || paramobj.get('format') == 'cef' || | ||
297 | + paramobj.get('format') == 'nc') | ||
298 | + paramobj.set('realvar',values.cdfvar); | ||
299 | + if (paramobj.get('format') == 'vot') | ||
300 | + paramobj.set('realvar',values.votvar); | ||
301 | + if (paramobj.get('format') == 'txt') | ||
302 | + paramobj.set('realvar',values.start); | ||
303 | + | ||
304 | + paramobj.set('file', this.fileObject.get('fileName')); | ||
305 | + | ||
306 | + paramobj.set('tableDef', this.getPlugin('tabledef').getTableDefinitionObject()); | ||
307 | + | ||
308 | + paramModule.linkedNode.set('object',paramobj); | ||
309 | + //synchronize objects | ||
310 | + this.object = paramobj; | ||
311 | + | ||
312 | + paramModule.linkedNode.set('fileObject',fileObject); | ||
313 | + | ||
314 | + if (toRename) | ||
315 | + paramModule.linkedNode.toRename = true; | ||
316 | + } | ||
317 | + paramModule.linkedNode.set('contextNode',contextNode); | ||
318 | + paramModule.linkedNode.create(); | ||
319 | + | ||
320 | + paramModule.linkedNode.set('isParameter', true); | ||
321 | + | ||
322 | + if (values.size == 1) { | ||
323 | + paramModule.linkedNode.set('iconCls', 'icon-scalar'); | ||
324 | + paramModule.linkedNode.set('isSpectra', false); | ||
325 | + } | ||
326 | + else if (values.size == 3) { | ||
327 | + paramModule.linkedNode.set('iconCls', 'icon-vector'); | ||
328 | + paramModule.linkedNode.set('isSpectra', false); | ||
329 | + } | ||
330 | + else { | ||
331 | + if (values.plottype == 'Spectra') { | ||
332 | + paramModule.linkedNode.set('isSpectra', true); | ||
333 | + paramModule.linkedNode.set('iconCls', 'icon-spectra'); | ||
334 | + } | ||
335 | + else { | ||
336 | + paramModule.linkedNode.set('iconCls', 'icon-unknowntype'); | ||
337 | + paramModule.linkedNode.set('isSpectra', false); | ||
338 | + } | ||
339 | + } | ||
340 | + } else { | ||
341 | + paramModule.linkedNode.set('contextNode',paramModule.contextNode); | ||
342 | + paramModule.linkedNode.update(); | ||
343 | + } | ||
344 | + }, | ||
319 | 345 | ||
320 | - /* | ||
321 | - * overwrite method called by Save button | ||
322 | - */ | ||
323 | - overwriteProcess : function(btn){ | ||
324 | - if (btn == 'cancel') return; | ||
325 | - var basicForm = this.down('form').getForm(); | ||
326 | - basicForm.clearInvalid(); | ||
327 | - this.saveProcess(true); | ||
328 | - }, | ||
329 | - | ||
330 | - updateForm : function() { | ||
331 | - var basicForm = this.down('form').getForm(); | ||
332 | - var columns = this.down('gridpanel').columns; | ||
333 | - | ||
334 | - var start; | ||
335 | - var size = 0; | ||
336 | - Ext.Array.each(columns, function(column,index){ | ||
337 | - if (!start && column.selected) start = index; | ||
338 | - if (column.selected) size += 1; | ||
339 | - }); | ||
340 | - | ||
341 | - basicForm.setValues({start: start, size : size}); | ||
342 | - }, | 346 | + /* |
347 | + * overwrite method called by Save button | ||
348 | + */ | ||
349 | + overwriteProcess : function(btn){ | ||
350 | + if (btn == 'cancel') return; | ||
351 | + var basicForm = this.down('form').getForm(); | ||
352 | + basicForm.clearInvalid(); | ||
353 | + this.saveProcess(true); | ||
354 | + }, | ||
355 | + | ||
356 | + updateForm : function() { | ||
357 | + var basicForm = this.down('form').getForm(); | ||
358 | + var columns = this.down('gridpanel').columns; | ||
359 | + | ||
360 | + var start; | ||
361 | + var size = 0; | ||
362 | + Ext.Array.each(columns, function(column,index){ | ||
363 | + if (!start && column.selected) start = index; | ||
364 | + if (column.selected) size += 1; | ||
365 | + }); | ||
366 | + | ||
367 | + basicForm.setValues({start: start, size : size}); | ||
368 | + }, | ||
343 | 369 | ||
344 | - /* | ||
345 | - * Configurations | ||
346 | - * | ||
347 | - */ | ||
348 | - initPanel : function() | ||
349 | - { | ||
350 | - var format = this.fileObject.get('format'); | ||
351 | - if (format == 'cdf' || format == 'cef' || format == 'nc') return this.cdfPanel(format); | ||
352 | - if (format == 'txt') return this.txtPanel(); | ||
353 | - if (format == 'vot') return this.votPanel(); | ||
354 | - }, | 370 | + /* |
371 | + * Configurations | ||
372 | + * | ||
373 | + */ | ||
374 | + initPanel : function() | ||
375 | + { | ||
376 | + var format = this.fileObject.get('format'); | ||
377 | + if (format == 'cdf' || format == 'cef' || format == 'nc') return this.cdfPanel(format); | ||
378 | + if (format == 'txt') return this.txtPanel(); | ||
379 | + if (format == 'vot') return this.votPanel(); | ||
380 | + }, | ||
381 | + | ||
382 | + txtPanel: function() | ||
383 | + { | ||
384 | + var fileName = this.fileObject.get('fileName'); | ||
355 | 385 | ||
356 | - txtPanel: function() | ||
357 | - { | ||
358 | - var fileName = this.fileObject.get('fileName'); | ||
359 | - | ||
360 | - //FOR INFO | ||
361 | - // Null out built in convert functions for performance *because the raw data is known to be valid* | ||
362 | - // Specifying defaultValue as undefined will also save code. | ||
363 | - // As long as there will always be values in the data, or the app tolerates undefined field values* | ||
364 | - | ||
365 | - // Dynamically created fields and columns | ||
366 | - var n_col = this.fileObject.get('vars'); | ||
367 | - // reset | ||
368 | - this.fields = []; | ||
369 | - this.columns = []; | 386 | + //FOR INFO |
387 | + // Null out built in convert functions for performance *because the raw data is known to be valid* | ||
388 | + // Specifying defaultValue as undefined will also save code. | ||
389 | + // As long as there will always be values in the data, or the app tolerates undefined field values* | ||
390 | + | ||
391 | + // Dynamically created fields and columns | ||
392 | + var n_col = this.fileObject.get('vars'); | ||
393 | + // reset | ||
394 | + this.fields = []; | ||
395 | + this.columns = []; | ||
370 | 396 | ||
371 | - for (var i = 0; i < n_col; i++){ | ||
372 | - var name = i === 0 ? 'Time' : 'n'+i; | ||
373 | - //TODO width dependent on data? | ||
374 | - var width = i === 0 ? 120 : 75; | ||
375 | - | ||
376 | - this.fields[i] = { name: name }; | ||
377 | - this.columns[i] = { text: name, sortable : false, dataIndex: name, width : width, | ||
378 | - menuDisabled: true, selected : false, | ||
379 | - listeners: { | ||
380 | - scope : this, | ||
381 | - headerclick: function(ct, column){ | ||
382 | - if (column.text != 'Time') { | ||
383 | - var selected = Ext.select(column.getCellSelector(1)); | ||
384 | - if (column.selected) { | ||
385 | - selected.removeCls('meow'); | ||
386 | - column.selected = false; | ||
387 | - } | ||
388 | - else { | ||
389 | - selected.addCls('meow'); | ||
390 | - column.selected = true; | ||
391 | - } | ||
392 | - this.updateForm(); | ||
393 | - } | ||
394 | - } | ||
395 | - } | ||
396 | - }; | ||
397 | - } | ||
398 | - | ||
399 | - // Dynamically created model | ||
400 | - Ext.define('myData', { | ||
401 | - extend: 'Ext.data.Model', | ||
402 | - fields: this.fields, | ||
403 | - idProperty: 'Time' | ||
404 | - }); | ||
405 | - | ||
406 | - var store = Ext.create('Ext.data.ArrayStore', { | ||
407 | - model: 'myData', | ||
408 | - autoLoad: true, | ||
409 | - proxy: { | ||
410 | - type: 'direct', | ||
411 | - directFn: AmdaAction.getAsciiFile | ||
412 | - }, | ||
413 | - listeners: { | ||
414 | - scope: this, | ||
415 | - beforeload: function(store){ | ||
416 | - store.proxy.extraParams = { | ||
417 | - fileName: this.fileObject.get('fileName') | ||
418 | - }; | ||
419 | - }, | ||
420 | - load: function(store, records, successful, eOpts) { | ||
421 | - this.updateSelection(); | ||
422 | - } | ||
423 | - } | ||
424 | - }); | 397 | + for (var i = 0; i < n_col; i++) |
398 | + { | ||
399 | + var name = i === 0 ? 'Time' : 'n'+i; | ||
400 | + //TODO width dependent on data? | ||
401 | + var width = i === 0 ? 120 : 75; | ||
402 | + | ||
403 | + this.fields[i] = { name: name }; | ||
404 | + this.columns[i] = { text: name, sortable : false, dataIndex: name, width : width, | ||
405 | + menuDisabled: true, selected : false, | ||
406 | + listeners: | ||
407 | + { | ||
408 | + scope : this, | ||
409 | + headerclick: function(ct, column) | ||
410 | + { | ||
411 | + if (column.text != 'Time') { | ||
412 | + var selected = Ext.select(column.getCellSelector(1)); | ||
413 | + if (column.selected) { | ||
414 | + selected.removeCls('meow'); | ||
415 | + column.selected = false; | ||
416 | + } | ||
417 | + else { | ||
418 | + selected.addCls('meow'); | ||
419 | + column.selected = true; | ||
420 | + } | ||
421 | + this.updateForm(); | ||
422 | + } | ||
423 | + } | ||
424 | + } | ||
425 | + }; | ||
426 | + } | ||
427 | + | ||
428 | + // Dynamically created model | ||
429 | + Ext.define('myData', { | ||
430 | + extend: 'Ext.data.Model', | ||
431 | + fields: this.fields, | ||
432 | + idProperty: 'Time' | ||
433 | + }); | ||
434 | + | ||
435 | + var store = Ext.create('Ext.data.ArrayStore', { | ||
436 | + model: 'myData', | ||
437 | + autoLoad: true, | ||
438 | + proxy: { | ||
439 | + type: 'direct', | ||
440 | + directFn: AmdaAction.getAsciiFile | ||
441 | + }, | ||
442 | + listeners: { | ||
443 | + scope: this, | ||
444 | + beforeload: function(store){ | ||
445 | + store.proxy.extraParams = { | ||
446 | + fileName: this.fileObject.get('fileName') | ||
447 | + }; | ||
448 | + }, | ||
449 | + load: function(store, records, successful, eOpts) { | ||
450 | + this.updateSelection(); | ||
451 | + } | ||
452 | + } | ||
453 | + }); | ||
425 | 454 | ||
426 | - // Dynamically created columns dependent of myData model | ||
427 | - var panelConfig = { | ||
428 | - xtype : 'gridpanel', | ||
429 | - store : store, | ||
430 | - title : fileName, | ||
431 | - height: '100%', | ||
432 | - flex : 2, | ||
433 | - columnLines: true, | ||
434 | - columns: this.columns, | ||
435 | - listeners: { | ||
436 | - scope : this, | ||
437 | - cellclick: function(view,td,cellIndex,record,tr,rowIndex,e){ | ||
438 | - var column = view.getGridColumns()[cellIndex]; | ||
439 | - if (cellIndex > 0) { | ||
440 | - var selected = Ext.select(column.getCellSelector(cellIndex)); | ||
441 | - if (column.selected) { | ||
442 | - selected.removeCls('meow'); | ||
443 | - column.selected = false; | ||
444 | - } | ||
445 | - else { | ||
446 | - selected.addCls('meow'); | ||
447 | - column.selected = true; | ||
448 | - } | ||
449 | - this.updateForm(); | ||
450 | - } | ||
451 | - }, | ||
452 | - select: function(selmodel, record, index, e) { | ||
453 | - selmodel.deselectAll(); | ||
454 | - } | ||
455 | - } | ||
456 | - }; | 455 | + // Dynamically created columns dependent of myData model |
456 | + var panelConfig = { | ||
457 | + xtype : 'gridpanel', | ||
458 | + store : store, | ||
459 | + title : fileName, | ||
460 | + height: '100%', | ||
461 | + flex : 2, | ||
462 | + columnLines: true, | ||
463 | + columns: this.columns, | ||
464 | + listeners: | ||
465 | + { | ||
466 | + scope : this, | ||
467 | + cellclick: function(view,td,cellIndex,record,tr,rowIndex,e) | ||
468 | + { | ||
469 | + var column = view.getGridColumns()[cellIndex]; | ||
470 | + if (cellIndex > 0) { | ||
471 | + var selected = Ext.select(column.getCellSelector(cellIndex)); | ||
472 | + if (column.selected) { | ||
473 | + selected.removeCls('meow'); | ||
474 | + column.selected = false; | ||
475 | + } | ||
476 | + else { | ||
477 | + selected.addCls('meow'); | ||
478 | + column.selected = true; | ||
479 | + } | ||
480 | + this.updateForm(); | ||
481 | + } | ||
482 | + }, | ||
483 | + select: function(selmodel, record, index, e) { | ||
484 | + selmodel.deselectAll(); | ||
485 | + } | ||
486 | + } | ||
487 | + }; | ||
457 | 488 | ||
458 | - return panelConfig; | ||
459 | - }, | 489 | + return panelConfig; |
490 | + }, | ||
460 | 491 | ||
461 | - cdfPanel : function(format) { | ||
462 | - | ||
463 | - var vars = this.fileObject.get('vars'); | ||
464 | - var fileName = this.fileObject.get('fileName'); | ||
465 | - var items = []; | ||
466 | - Ext.Array.each(vars, function(name, index) { | ||
467 | - if (name) { | ||
468 | - items[index] = { boxLabel: name, name: 'cdfvar', inputValue: name, | ||
469 | - listeners: { | ||
470 | - scope: this, | ||
471 | - change: function (cb, nv, ov) { | ||
472 | - if (nv) { | ||
473 | - AmdaAction.getMyParamInfo({format: format, file : fileName, varName : cb.inputValue}, | ||
474 | - this.updateInfo, this); | ||
475 | - } | ||
476 | - } | ||
477 | - } | ||
478 | - } | ||
479 | - } | ||
480 | - }, this); | 492 | + cdfPanel : function(format) |
493 | + { | ||
494 | + var vars = this.fileObject.get('vars'); | ||
495 | + var fileName = this.fileObject.get('fileName'); | ||
496 | + var items = []; | ||
497 | + Ext.Array.each(vars, function(name, index) { | ||
498 | + if (name) { | ||
499 | + items[index] = { boxLabel: name, name: 'cdfvar', inputValue: name } | ||
500 | + } | ||
501 | + }, this); | ||
481 | 502 | ||
482 | var panelConfig = { | 503 | var panelConfig = { |
483 | xtype : 'fieldset', | 504 | xtype : 'fieldset', |
@@ -491,39 +512,49 @@ Ext.define('amdaUI.MyDataUI', { | @@ -491,39 +512,49 @@ Ext.define('amdaUI.MyDataUI', { | ||
491 | cls: 'x-check-group-alt', | 512 | cls: 'x-check-group-alt', |
492 | columns: 2, | 513 | columns: 2, |
493 | vertical: true, | 514 | vertical: true, |
494 | - items: items | 515 | + items: items, |
516 | + listeners : { | ||
517 | + scope: this, | ||
518 | + change: function (cb, nv, ov) { | ||
519 | + if (nv.cdfvar) { | ||
520 | + AmdaAction.getMyParamInfo({format: format, file : fileName, varName : nv.cdfvar}, | ||
521 | + this.updateInfo, this); | ||
522 | + } | ||
523 | + } | ||
524 | + } | ||
495 | }] | 525 | }] |
496 | }; | 526 | }; |
497 | 527 | ||
498 | return panelConfig; | 528 | return panelConfig; |
499 | }, | 529 | }, |
500 | 530 | ||
501 | - votPanel : function() | ||
502 | - { | ||
503 | - var vars = this.fileObject.get('vars'); | ||
504 | - var fileName = this.fileObject.get('fileName'); | ||
505 | - | ||
506 | - var items = []; | ||
507 | - | ||
508 | - if (this.fileObject.get('foundTime')) | ||
509 | - { | ||
510 | - Ext.Array.each(vars, function(obj, index) { | ||
511 | - items[index] = { boxLabel: obj.name, name: 'votvar', inputValue: obj.id, | ||
512 | - listeners: { | ||
513 | - scope: this, | ||
514 | - change: function (cb, nv, ov) { | ||
515 | - if (nv) { | ||
516 | - AmdaAction.getMyParamInfo({format: 'vot', file : fileName, varName : cb.inputValue}, | ||
517 | - this.updateInfo, this); | ||
518 | - } | ||
519 | - } | ||
520 | - } | ||
521 | - }; | ||
522 | - }, this); | ||
523 | - } | ||
524 | - else | ||
525 | - myDesktopApp.errorMsg("Cannot find a valid time field!"); | ||
526 | - | 531 | + votPanel : function() |
532 | + { | ||
533 | + var vars = this.fileObject.get('vars'); | ||
534 | + var fileName = this.fileObject.get('fileName'); | ||
535 | + | ||
536 | + var items = []; | ||
537 | + | ||
538 | + if (this.fileObject.get('foundTime')) | ||
539 | + { | ||
540 | + Ext.Array.each(vars, function(obj, index) { | ||
541 | + items[index] = { boxLabel: obj.name, name: 'votvar', inputValue: obj.id, | ||
542 | + listeners: | ||
543 | + { | ||
544 | + scope: this, | ||
545 | + change: function (cb, nv, ov) { | ||
546 | + if (nv) { | ||
547 | + AmdaAction.getMyParamInfo({format: 'vot', file : fileName, varName : cb.inputValue}, | ||
548 | + this.updateInfo, this); | ||
549 | + } | ||
550 | + } | ||
551 | + } | ||
552 | + }; | ||
553 | + }, this); | ||
554 | + } | ||
555 | + else | ||
556 | + myDesktopApp.errorMsg("Cannot find a valid time field!"); | ||
557 | + | ||
527 | var panelConfig = { | 558 | var panelConfig = { |
528 | xtype : 'fieldset', | 559 | xtype : 'fieldset', |
529 | bodyStyle: { background : '#dfe8f6'}, | 560 | bodyStyle: { background : '#dfe8f6'}, |
@@ -555,305 +586,314 @@ Ext.define('amdaUI.MyDataUI', { | @@ -555,305 +586,314 @@ Ext.define('amdaUI.MyDataUI', { | ||
555 | ] | 586 | ] |
556 | }); | 587 | }); |
557 | 588 | ||
558 | - var combo = { | ||
559 | - xtype: 'combo', | ||
560 | - fieldLabel: 'Parameter Data Type', | ||
561 | - store: store, | ||
562 | - queryMode: 'local', | ||
563 | - displayField: 'name', | ||
564 | - valueField: 'value', | ||
565 | - name: 'type', | ||
566 | - editable: false, | ||
567 | - value: 'FLOAT' | ||
568 | - }; | 589 | + var combo = { |
590 | + xtype: 'combo', | ||
591 | + fieldLabel: 'Parameter Data Type', | ||
592 | + store: store, | ||
593 | + queryMode: 'local', | ||
594 | + displayField: 'name', | ||
595 | + valueField: 'value', | ||
596 | + name: 'type', | ||
597 | + editable: false, | ||
598 | + value: 'FLOAT' | ||
599 | + }; | ||
569 | 600 | ||
570 | - var store1 = Ext.create('Ext.data.Store', { | ||
571 | - fields: ['value', 'name'], | ||
572 | - data : [ | ||
573 | - {"value": "TimeSerie", "name":"Time Serie"}, | ||
574 | - {"value": "Spectra", "name":"Spectra"} | ||
575 | - ] | ||
576 | - }); | 601 | + var store1 = Ext.create('Ext.data.Store', { |
602 | + fields: ['value', 'name'], | ||
603 | + data : [ | ||
604 | + {"value": "TimeSerie", "name":"Time Serie"}, | ||
605 | + {"value": "Spectra", "name":"Spectra"} | ||
606 | + ] | ||
607 | + }); | ||
577 | 608 | ||
578 | - var comboPlotType = { | ||
579 | - xtype: 'combo', | ||
580 | - fieldLabel: 'Display Type', | ||
581 | - store: store1, | ||
582 | - queryMode: 'local', | ||
583 | - displayField: 'name', | ||
584 | - valueField: 'value', | ||
585 | - name: 'plottype', | ||
586 | - editable: false, | ||
587 | - value: 'Time Series' | ||
588 | - }; | ||
589 | - | ||
590 | - var notTxt = false; //this.fileObject.get('format') !== 'txt'; | ||
591 | - // var maxSize = notTxt? 100 : this.columns.length - 1; | ||
592 | - | ||
593 | - // Parameter Form | ||
594 | - var panelLeft = { | ||
595 | - bodyStyle: { background : '#dfe8f6'}, | ||
596 | - flex : 1, | ||
597 | - defaults: { | ||
598 | - xtype:'textfield', | ||
599 | - validateOnChange: false, | ||
600 | - validateOnBlur: false, | ||
601 | - padding : '0 10 0 5', | ||
602 | - inputWidth : 80 | ||
603 | - }, | ||
604 | - items: [ | ||
605 | - { | ||
606 | - id: 'mydataName', | ||
607 | - fieldLabel: 'Parameter Name', | ||
608 | - labelAlign: 'top', | ||
609 | - name: 'name', | ||
610 | - allowBlank : false, | ||
611 | - stripCharsRe: /(^\s+|\s+$)/g, | ||
612 | - validFlag: false, | ||
613 | - validator : function() { | ||
614 | - return this.validFlag; | ||
615 | - }, | ||
616 | - inputWidth : 180 | ||
617 | - }, { | ||
618 | - fieldLabel: 'File Name/Mask <img amda_clicktip="fileMask" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', | ||
619 | - labelAlign: 'top', | ||
620 | - name: 'mask', | ||
621 | - inputWidth : 180, | ||
622 | - validator : this.validateMask | ||
623 | - }, combo, { | ||
624 | - xtype:'numberfield', | ||
625 | - fieldLabel: 'Parameter Start Position', | ||
626 | - name: 'start', | ||
627 | - disabled: notTxt, | ||
628 | - minValue : 1, | ||
629 | - // maxValue : maxSize, | ||
630 | - listeners : { | ||
631 | - scope : this, | ||
632 | - change : function(field, newValue, oldValue){ | ||
633 | - var grid = this.down('gridpanel'); | ||
634 | - if (!grid) return; | ||
635 | - if (newValue && newValue != oldValue) { | ||
636 | - var size = field.prev().value; | ||
637 | - var columns = grid.columns; | ||
638 | - Ext.Array.each(columns, function(column,index){ | ||
639 | - var selected = Ext.select(column.getCellSelector(index)); | ||
640 | - if (index < newValue){ | ||
641 | - if (column.selected) { | ||
642 | - selected.removeCls('meow'); | ||
643 | - column.selected = false; | ||
644 | - } | ||
645 | - } | ||
646 | - else if (index == newValue) { | ||
647 | - if (!column.selected) { | ||
648 | - selected.addCls('meow'); | ||
649 | - column.selected = true; | ||
650 | - } | ||
651 | - } | ||
652 | - else { | ||
653 | - if (column.selected) { | ||
654 | - selected.removeCls('meow'); | ||
655 | - column.selected = false; | ||
656 | - } | ||
657 | - } | ||
658 | - }); | ||
659 | - } | ||
660 | - } | ||
661 | - } | ||
662 | - }, { | ||
663 | - xtype:'numberfield', | ||
664 | - fieldLabel: 'Parameter Size', | ||
665 | - name: 'size', | ||
666 | - minValue: 1, | ||
667 | - // maxValue : maxSize, | ||
668 | - disabled: notTxt, | ||
669 | - listeners : { | ||
670 | - scope : this, | ||
671 | - change : function(field, newValue, oldValue){ | ||
672 | - var grid = this.down('gridpanel'); | ||
673 | - if (!grid) return; | ||
674 | - var start = field.prev().value; | ||
675 | - var columns = grid.columns; | ||
676 | - Ext.Array.each(columns, function(column,index){ | ||
677 | - var selected = Ext.select(column.getCellSelector(index)); | ||
678 | - if (index <= start) {} | ||
679 | - else if (index - start < newValue) { | ||
680 | - if (!column.selected){ | ||
681 | - selected.addCls('meow'); | ||
682 | - column.selected = true; | ||
683 | - } | ||
684 | - } | ||
685 | - else { | ||
686 | - if (column.selected){ | ||
687 | - selected.removeCls('meow'); | ||
688 | - column.selected = false; | ||
689 | - } | ||
690 | - } | ||
691 | - }); | ||
692 | - } | ||
693 | - } | ||
694 | - }, { | ||
695 | - xtype:'numberfield', | ||
696 | - fieldLabel: 'Min Sampling', | ||
697 | - name: 'minsampling'//, | ||
698 | - // disabled: notTxt | ||
699 | - },{ | ||
700 | - xtype:'numberfield', | ||
701 | - fieldLabel: 'Max Sampling', | ||
702 | - name: 'maxsampling'//, | ||
703 | - // disabled: notTxt | ||
704 | - },{ | ||
705 | - fieldLabel: 'Filling Value', | ||
706 | - name: 'fillvalue' | ||
707 | - },{ | ||
708 | - fieldLabel: 'Units', | ||
709 | - name: 'units' | ||
710 | - }, comboPlotType, { | ||
711 | - fieldLabel: 'Y Title', | ||
712 | - name: 'ytitle' | ||
713 | - },{ | ||
714 | - fieldLabel: 'Legend', | ||
715 | - name: 'legend' | ||
716 | - } | ||
717 | - ], | ||
718 | - listeners: { | ||
719 | - click: { | ||
720 | - element: 'el', | ||
721 | - fn: function(e,t) { | ||
722 | - var me = t, | ||
723 | - text = me.getAttribute('amda_clicktip'); | ||
724 | - if (text) { | ||
725 | - e.preventDefault(); | ||
726 | - AmdaAction.getInfo({name : text}, function(res,e) { | ||
727 | - if (res.success) myDesktopApp.infoMsg(res.result); | ||
728 | - }); | ||
729 | - } | ||
730 | - } | ||
731 | - } | ||
732 | - } | ||
733 | - }; | ||
734 | - | ||
735 | - var myConf = { | ||
736 | - layout: 'border', | ||
737 | - items: [ { | ||
738 | - xtype : 'form', | ||
739 | - bodyStyle: { background : '#dfe8f6'}, | ||
740 | - layout: 'hbox', | ||
741 | - region: 'center', | ||
742 | - buttonAlign:'left', | ||
743 | - items : [ | ||
744 | - panelLeft | ||
745 | - ], | ||
746 | - buttons: [ | ||
747 | - { | ||
748 | - scope : this, | ||
749 | - text: 'Show/Hide Table definition', | ||
750 | - handler: function() | ||
751 | - { | ||
752 | - this.getPlugin('tabledef').showHide(); | ||
753 | - } | ||
754 | - }, | ||
755 | - '->', | ||
756 | - { | ||
757 | - scope : this, | ||
758 | - text: 'Save', | ||
759 | - handler: function() | ||
760 | - { | ||
761 | - var form = this.down('form').getForm(); | ||
762 | - // check if variable was selected | ||
763 | - // cdf,... | ||
764 | - var radio = this.down('radiogroup'); | ||
765 | - if (radio && radio.getChecked().length == 0) { | ||
766 | - myDesktopApp.warningMsg('Select variable from the file, please'); | ||
767 | - return; | ||
768 | - } | ||
769 | - // ascii | ||
770 | - if (!radio && this.columns.length > 0) { | ||
771 | - if (!form.findField('start').getValue() || !form.findField('size').getValue()) { | ||
772 | - myDesktopApp.warningMsg('Select column[s] from the file, please'); | ||
773 | - return; | ||
774 | - } | ||
775 | - } | ||
776 | - var nameField = form.findField('mydataName'); | ||
777 | - if (this.updateObject(nameField)) | ||
778 | - { | ||
779 | - var myDataModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.my_data.id); | ||
780 | - if (!myDataModule) | ||
781 | - return; | ||
782 | - var me = this; | ||
783 | - myDataModule.linkedNode.isValidName(nameField.getValue(), function (res) { | ||
784 | - if (!res) | ||
785 | - { | ||
786 | - nameField.validFlag = 'Error during object validation'; | ||
787 | - myDesktopApp.errorMsg(nameField.validFlag); | ||
788 | - nameField.validate(); | ||
789 | - return; | ||
790 | - } | ||
791 | - | ||
792 | - if (!res.valid) | ||
793 | - { | ||
794 | - if (res.error) | ||
795 | - { | ||
796 | - if (res.error.search('subtree') != -1) { | ||
797 | - Ext.MessageBox.show({title:'Warning', | ||
798 | - msg: res.error+'<br/>Do you want to overwrite it?', | ||
799 | - width: 300, | ||
800 | - buttons: Ext.MessageBox.OKCANCEL, | ||
801 | - fn : me.overwriteProcess, | ||
802 | - icon: Ext.MessageBox.WARNING, | ||
803 | - scope : me | ||
804 | - }); | ||
805 | - nameField.validFlag = true; | ||
806 | - } | ||
807 | - else | ||
808 | - nameField.validFlag = res.error; | ||
809 | - } | ||
810 | - else | ||
811 | - { | ||
812 | - nameField.validFlag = 'Invalid object name'; | ||
813 | - myDesktopApp.errorMsg(nameField.validFlag); | ||
814 | - } | ||
815 | - nameField.validate(); | ||
816 | - return; | ||
817 | - } | ||
818 | - | ||
819 | - nameField.validFlag = true; | ||
820 | - nameField.validate(); | ||
821 | - me.saveProcess(); | ||
822 | - }); | ||
823 | - } | ||
824 | - } | ||
825 | - },{ | ||
826 | - scope : this, | ||
827 | - text: 'Reset', | ||
828 | - handler: function(){ | ||
829 | - this.down('form').getForm().reset(); | ||
830 | - } | ||
831 | - }] | ||
832 | - },{ | ||
833 | - xtype: 'panel', | ||
834 | - region: 'south', | ||
835 | - title: 'Information', | ||
836 | - collapsible: true, | ||
837 | - collapseMode: 'header', | ||
838 | - height: 100, | ||
839 | - autoHide: false, | ||
840 | - iconCls: 'icon-information', | ||
841 | - bodyStyle: 'padding:5px', | ||
842 | - loader: { | ||
843 | - autoLoad: true, | ||
844 | - url: helpDir+'myDataHOWTO' | ||
845 | - } | ||
846 | - } | ||
847 | - ], | ||
848 | - plugins: [ {ptype: 'tabledef', pluginId: 'tabledef'} ] | ||
849 | - }; | ||
850 | - | ||
851 | - Ext.apply (this, Ext.apply(arguments, myConf)); | ||
852 | - }, | ||
853 | - | ||
854 | - getParameterSize : function() | ||
855 | - { | ||
856 | - var form = this.down('form').getForm(); | ||
857 | - return form.findField('size').getValue(); | ||
858 | - } | 609 | + var comboPlotType = { |
610 | + xtype: 'combo', | ||
611 | + fieldLabel: 'Display Type', | ||
612 | + store: store1, | ||
613 | + queryMode: 'local', | ||
614 | + displayField: 'name', | ||
615 | + valueField: 'value', | ||
616 | + name: 'plottype', | ||
617 | + editable: false, | ||
618 | + value: 'Time Series' | ||
619 | + }; | ||
620 | + | ||
621 | + // Parameter Form | ||
622 | + var panelLeft = { | ||
623 | + bodyStyle: { background : '#dfe8f6'}, | ||
624 | + flex : 1, | ||
625 | + defaults: { | ||
626 | + xtype:'textfield', | ||
627 | + validateOnChange: false, | ||
628 | + validateOnBlur: false, | ||
629 | + padding : '0 10 0 5', | ||
630 | + inputWidth : 80 | ||
631 | + }, | ||
632 | + items: [ | ||
633 | + { | ||
634 | + id: 'mydataName', | ||
635 | + fieldLabel: 'Parameter Name', | ||
636 | + labelAlign: 'top', | ||
637 | + name: 'name', | ||
638 | + allowBlank : false, | ||
639 | + stripCharsRe: /(^\s+|\s+$)/g, | ||
640 | + validFlag: false, | ||
641 | + validator : function() { | ||
642 | + return this.validFlag; | ||
643 | + }, | ||
644 | + inputWidth : 180 | ||
645 | + }, | ||
646 | + { | ||
647 | + fieldLabel: 'File Name/Mask <img amda_clicktip="fileMask" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', | ||
648 | + labelAlign: 'top', | ||
649 | + name: 'mask', | ||
650 | + inputWidth : 180, | ||
651 | + validator : this.validateMask | ||
652 | + }, | ||
653 | + combo, | ||
654 | + { | ||
655 | + xtype:'numberfield', | ||
656 | + fieldLabel: 'Parameter Start Position', | ||
657 | + name: 'start', | ||
658 | + minValue : 1, | ||
659 | + // maxValue : maxSize, | ||
660 | + listeners : | ||
661 | + { | ||
662 | + scope : this, | ||
663 | + change : function(field, newValue, oldValue){ | ||
664 | + var grid = this.down('gridpanel'); | ||
665 | + if (!grid) return; | ||
666 | + if (newValue && newValue != oldValue) | ||
667 | + { | ||
668 | + var size = field.prev().value; | ||
669 | + var columns = grid.columns; | ||
670 | + Ext.Array.each(columns, function(column,index){ | ||
671 | + var selected = Ext.select(column.getCellSelector(index)); | ||
672 | + if (index < newValue) | ||
673 | + { | ||
674 | + if (column.selected) { | ||
675 | + selected.removeCls('meow'); | ||
676 | + column.selected = false; | ||
677 | + } | ||
678 | + } | ||
679 | + else if (index == newValue) { | ||
680 | + if (!column.selected) { | ||
681 | + selected.addCls('meow'); | ||
682 | + column.selected = true; | ||
683 | + } | ||
684 | + } | ||
685 | + else { | ||
686 | + if (column.selected) { | ||
687 | + selected.removeCls('meow'); | ||
688 | + column.selected = false; | ||
689 | + } | ||
690 | + } | ||
691 | + }); | ||
692 | + } | ||
693 | + } | ||
694 | + } | ||
695 | + }, | ||
696 | + { | ||
697 | + xtype:'numberfield', | ||
698 | + fieldLabel: 'Parameter Size', | ||
699 | + name: 'size', | ||
700 | + minValue: 1, | ||
701 | + // maxValue : maxSize, | ||
702 | + listeners : | ||
703 | + { | ||
704 | + scope : this, | ||
705 | + change : function(field, newValue, oldValue){ | ||
706 | + var grid = this.down('gridpanel'); | ||
707 | + if (!grid) return; | ||
708 | + var start = field.prev().value; | ||
709 | + var columns = grid.columns; | ||
710 | + Ext.Array.each(columns, function(column,index){ | ||
711 | + var selected = Ext.select(column.getCellSelector(index)); | ||
712 | + if (index <= start) {} | ||
713 | + else if (index - start < newValue) { | ||
714 | + if (!column.selected){ | ||
715 | + selected.addCls('meow'); | ||
716 | + column.selected = true; | ||
717 | + } | ||
718 | + } | ||
719 | + else { | ||
720 | + if (column.selected){ | ||
721 | + selected.removeCls('meow'); | ||
722 | + column.selected = false; | ||
723 | + } | ||
724 | + } | ||
725 | + }); | ||
726 | + } | ||
727 | + } | ||
728 | + }, | ||
729 | + { | ||
730 | + xtype:'numberfield', | ||
731 | + fieldLabel: 'Min Sampling', | ||
732 | + name: 'minsampling' | ||
733 | + }, | ||
734 | + { | ||
735 | + xtype:'numberfield', | ||
736 | + fieldLabel: 'Max Sampling', | ||
737 | + name: 'maxsampling' | ||
738 | + }, | ||
739 | + { | ||
740 | + fieldLabel: 'Filling Value', | ||
741 | + name: 'fillvalue' | ||
742 | + }, | ||
743 | + { | ||
744 | + fieldLabel: 'Units', | ||
745 | + name: 'units' | ||
746 | + }, | ||
747 | + comboPlotType, | ||
748 | + { | ||
749 | + fieldLabel: 'Y Title', | ||
750 | + name: 'ytitle' | ||
751 | + }, | ||
752 | + { | ||
753 | + fieldLabel: 'Legend', | ||
754 | + name: 'legend' | ||
755 | + }], | ||
756 | + listeners: | ||
757 | + { | ||
758 | + click: { | ||
759 | + element: 'el', | ||
760 | + fn: function(e,t) { | ||
761 | + var me = t, | ||
762 | + text = me.getAttribute('amda_clicktip'); | ||
763 | + if (text) { | ||
764 | + e.preventDefault(); | ||
765 | + AmdaAction.getInfo({name : text}, function(res,e) { | ||
766 | + if (res.success) myDesktopApp.infoMsg(res.result); | ||
767 | + }); | ||
768 | + } | ||
769 | + } | ||
770 | + } | ||
771 | + } | ||
772 | + }; | ||
773 | + | ||
774 | + var myConf = { | ||
775 | + layout: 'border', | ||
776 | + items: [ | ||
777 | + { | ||
778 | + xtype : 'form', | ||
779 | + bodyStyle: { background : '#dfe8f6'}, | ||
780 | + layout: 'hbox', | ||
781 | + region: 'center', | ||
782 | + buttonAlign:'left', | ||
783 | + items : [ | ||
784 | + panelLeft | ||
785 | + ], | ||
786 | + buttons: [ | ||
787 | + { | ||
788 | + scope : this, | ||
789 | + text: 'Show/Hide Table definition', | ||
790 | + handler: function() | ||
791 | + { | ||
792 | + this.getPlugin('tabledef').showHide(); | ||
793 | + } | ||
794 | + }, | ||
795 | + '->', | ||
796 | + { | ||
797 | + scope : this, | ||
798 | + text: 'Save', | ||
799 | + handler: function() | ||
800 | + { | ||
801 | + var form = this.down('form').getForm(); | ||
802 | + // check if variable was selected | ||
803 | + // cdf,... | ||
804 | + var radio = this.down('radiogroup'); | ||
805 | + if (radio && radio.getChecked().length == 0) { | ||
806 | + myDesktopApp.warningMsg('Select variable from the file, please'); | ||
807 | + return; | ||
808 | + } | ||
809 | + // ascii | ||
810 | + if (!radio && this.columns.length > 0) { | ||
811 | + if (!form.findField('start').getValue() || !form.findField('size').getValue()) { | ||
812 | + myDesktopApp.warningMsg('Select column[s] from the file, please'); | ||
813 | + return; | ||
814 | + } | ||
815 | + } | ||
816 | + var nameField = form.findField('mydataName'); | ||
817 | + if (this.updateObject(nameField)) | ||
818 | + { | ||
819 | + var myDataModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.my_data.id); | ||
820 | + if (!myDataModule) | ||
821 | + return; | ||
822 | + var me = this; | ||
823 | + myDataModule.linkedNode.isValidName(nameField.getValue(), function (res) { | ||
824 | + if (!res) { | ||
825 | + nameField.validFlag = 'Error during object validation'; | ||
826 | + myDesktopApp.errorMsg(nameField.validFlag); | ||
827 | + nameField.validate(); | ||
828 | + return; | ||
829 | + } | ||
830 | + | ||
831 | + if (!res.valid) | ||
832 | + { | ||
833 | + if (res.error) | ||
834 | + { | ||
835 | + if (res.error.search('subtree') != -1) { | ||
836 | + Ext.MessageBox.show({title:'Warning', | ||
837 | + msg: res.error+'<br/>Do you want to overwrite it?', | ||
838 | + width: 300, | ||
839 | + buttons: Ext.MessageBox.OKCANCEL, | ||
840 | + fn : me.overwriteProcess, | ||
841 | + icon: Ext.MessageBox.WARNING, | ||
842 | + scope : me | ||
843 | + }); | ||
844 | + nameField.validFlag = true; | ||
845 | + } | ||
846 | + else | ||
847 | + nameField.validFlag = res.error; | ||
848 | + } | ||
849 | + else | ||
850 | + { | ||
851 | + nameField.validFlag = 'Invalid object name'; | ||
852 | + myDesktopApp.errorMsg(nameField.validFlag); | ||
853 | + } | ||
854 | + nameField.validate(); | ||
855 | + return; | ||
856 | + } | ||
857 | + | ||
858 | + nameField.validFlag = true; | ||
859 | + nameField.validate(); | ||
860 | + me.saveProcess(); | ||
861 | + }); | ||
862 | + } | ||
863 | + } | ||
864 | + }, | ||
865 | + { | ||
866 | + scope : this, | ||
867 | + text: 'Reset', | ||
868 | + handler: function(){ | ||
869 | + this.down('form').getForm().reset(); | ||
870 | + } | ||
871 | + }] | ||
872 | + }, | ||
873 | + { | ||
874 | + xtype: 'panel', | ||
875 | + region: 'south', | ||
876 | + title: 'Information', | ||
877 | + collapsible: true, | ||
878 | + height: 100, | ||
879 | + autoHide: false, | ||
880 | + iconCls: 'icon-information', | ||
881 | + bodyStyle: 'padding:5px', | ||
882 | + loader: { | ||
883 | + autoLoad: true, | ||
884 | + url: helpDir+'myDataHOWTO' | ||
885 | + } | ||
886 | + }], | ||
887 | + | ||
888 | + plugins: [ {ptype: 'tabledef', pluginId: 'tabledef'} ] | ||
889 | + }; | ||
890 | + | ||
891 | + Ext.apply (this, Ext.apply(arguments, myConf)); | ||
892 | + }, | ||
893 | + | ||
894 | + getParameterSize : function() | ||
895 | + { | ||
896 | + var form = this.down('form').getForm(); | ||
897 | + return form.findField('size').getValue(); | ||
898 | + } | ||
859 | }); | 899 | }); |
js/app/views/RemoteSearchPlugin.js
1 | /** | 1 | /** |
2 | * Project : AMDA-NG | 2 | * Project : AMDA-NG |
3 | * Name : RemoteSearchPlug.js | 3 | * Name : RemoteSearchPlug.js |
4 | - * @plugin amdaUI.InteractiveIntervalPlug | ||
5 | - * @extends Ext.AbstractPlugin | ||
6 | - * @ptype interactiveIntervalPlugin | ||
7 | - * @brief Plot interactive session UI (View) | ||
8 | - * @author Myriam | ||
9 | - * @version $Id: RemoteSearchPlugin.js 1130 2012-12-18 16:45:54Z elena $ | ||
10 | - ******************************************************************************** | ||
11 | - * FT Id : Date : Name - Description | ||
12 | - ******************************************************************************* | ||
13 | - * : | 4 | + * @plugin remoteSearchPlugin |
5 | + * @extends Ext.AbstractPlugin | ||
14 | */ | 6 | */ |
15 | 7 | ||
16 | 8 | ||
@@ -22,93 +14,85 @@ Ext.define('amdaUI.RemoteSearchPlugin', { | @@ -22,93 +14,85 @@ Ext.define('amdaUI.RemoteSearchPlugin', { | ||
22 | 14 | ||
23 | win : null, | 15 | win : null, |
24 | 16 | ||
25 | - constructor: function(config) { | ||
26 | - Ext.apply(this, config); | ||
27 | - this.callParent(arguments); | 17 | + constructor: function(config) { |
18 | + Ext.apply(this, config); | ||
19 | + this.callParent(arguments); | ||
28 | }, | 20 | }, |
29 | 21 | ||
30 | 22 | ||
31 | init: function(cmp) { | 23 | init: function(cmp) { |
32 | - this.hostCmp = cmp; | ||
33 | - this.hostCmp.on({ | ||
34 | - open: this.onOpen, | ||
35 | - scope: this}); | 24 | + this.hostCmp = cmp; |
25 | + this.hostCmp.on({ | ||
26 | + open: this.onOpen, | ||
27 | + scope: this}); | ||
36 | }, | 28 | }, |
37 | - | 29 | + |
38 | onDestroy : function() { | 30 | onDestroy : function() { |
39 | - this.win = null; | 31 | + this.win = null; |
40 | }, | 32 | }, |
41 | 33 | ||
42 | onOpen: function(url) { | 34 | onOpen: function(url) { |
43 | - //TODO just reloa dtree | ||
44 | - if (this.win) this.win.destroy(); | 35 | + //TODO just reload tree |
36 | + if (this.win) this.win.destroy(); | ||
45 | 37 | ||
46 | if (!this.win) { | 38 | if (!this.win) { |
47 | - this.win = new Ext.Window({ | ||
48 | - id: 'remoteSearch-win', | ||
49 | - width: 310, | ||
50 | - height: 500, | ||
51 | - title: url, | ||
52 | - layout: 'fit', | ||
53 | - constrain: true, | ||
54 | - ghost: false, | ||
55 | - items: this.getTree(url), | ||
56 | - listeners: { | ||
57 | - scope: this, | ||
58 | - beforeclose: function(){ | ||
59 | - // Ext.PluginManager.unregister(this); | ||
60 | - } | ||
61 | - }, | ||
62 | - getConstrainVector: function(constrainTo){ | 39 | + this.win = new Ext.Window({ |
40 | + id: 'remoteSearch-win', | ||
41 | + width: 310, | ||
42 | + height: 500, | ||
43 | + title: url, | ||
44 | + layout: 'fit', | ||
45 | + constrain: true, | ||
46 | + ghost: false, | ||
47 | + items: this.getTree(url), | ||
48 | + getConstrainVector: function(constrainTo){ | ||
63 | var me = this; | 49 | var me = this; |
64 | - if (me.constrain || me.constrainHeader) { | ||
65 | - constrainTo = constrainTo || (me.floatParent && me.floatParent.getTargetEl()) || me.container || me.el.getScopeParent(); | ||
66 | - return (me.constrainHeader ? me.header.el : me.el).getConstrainVector(constrainTo); | ||
67 | - } | ||
68 | - } | ||
69 | - }); | ||
70 | - this.win.on('destroy', this.onDestroy, this); | ||
71 | - | ||
72 | - // Ext.PluginManager.register(this); | ||
73 | - | ||
74 | - this.win.show(); | ||
75 | - } | 50 | + if (me.constrain || me.constrainHeader) { |
51 | + constrainTo = constrainTo || (me.floatParent && me.floatParent.getTargetEl()) || me.container || me.el.getScopeParent(); | ||
52 | + return (me.constrainHeader ? me.header.el : me.el).getConstrainVector(constrainTo); | ||
53 | + } | ||
54 | + } | ||
55 | + }); | ||
56 | + this.win.on('destroy', this.onDestroy, this); | ||
57 | + | ||
58 | + this.win.show(); | ||
59 | + } | ||
76 | }, | 60 | }, |
77 | 61 | ||
78 | - getTree : function(url) { | ||
79 | - | ||
80 | - var store = Ext.create('Ext.data.TreeStore', { | ||
81 | - model: 'amdaModel.AmdaNode', | ||
82 | - root: { | ||
83 | - text: url, | ||
84 | - nodeType : 'url', | ||
85 | - expanded: true | ||
86 | - } , | ||
87 | - listeners: { | ||
88 | - scope : this, | ||
89 | - beforeload: function(store, operation){ | ||
90 | - store.proxy.extraParams = { | ||
91 | - nodeType: 'url', | ||
92 | - baseId: url | ||
93 | - }} | ||
94 | - } | 62 | + getTree : function(url) |
63 | + { | ||
64 | + var store = Ext.create('Ext.data.TreeStore', { | ||
65 | + model: 'amdaModel.AmdaNode', | ||
66 | + root: { | ||
67 | + text: url, | ||
68 | + nodeType : 'url', | ||
69 | + expanded: true | ||
70 | + } , | ||
71 | + listeners: { | ||
72 | + scope : this, | ||
73 | + beforeload: function(store, operation){ | ||
74 | + store.proxy.extraParams = { | ||
75 | + nodeType: 'url', | ||
76 | + baseId: url | ||
77 | + } | ||
78 | + } | ||
79 | + } | ||
80 | + }); | ||
95 | 81 | ||
96 | - }); | ||
97 | - | ||
98 | - var tree = Ext.create('Ext.tree.Panel', { | ||
99 | - store: store, | ||
100 | - listeners : { | ||
101 | - scope : this, | ||
102 | - itemdblclick: function(view, record, item, index, event){ | ||
103 | - event.stopEvent(); | ||
104 | - var form = this.hostCmp.down('form').next().getForm(); | ||
105 | - form.getFields().getAt(1).setValue(record.internalId); // internalId ?? | ||
106 | - this.win.destroy(); | ||
107 | - } | ||
108 | - } | ||
109 | - }); | 82 | + var tree = Ext.create('Ext.tree.Panel', { |
83 | + store: store, | ||
84 | + listeners : { | ||
85 | + scope : this, | ||
86 | + itemdblclick: function(view, record, item, index, event){ | ||
87 | + event.stopEvent(); | ||
88 | + var form = this.hostCmp.down('form').next().getForm(); | ||
89 | + form.getFields().getAt(1).setValue(record.internalId); // internalId ?? | ||
90 | + this.win.destroy(); | ||
91 | + } | ||
92 | + } | ||
93 | + }); | ||
110 | 94 | ||
111 | - return tree; | 95 | + return tree; |
112 | } | 96 | } |
113 | 97 | ||
114 | }); | 98 | }); |
115 | \ No newline at end of file | 99 | \ No newline at end of file |
js/app/views/UploadPanelUI.js
@@ -15,15 +15,16 @@ Ext.define('amdaUI.UploadPanelUI', { | @@ -15,15 +15,16 @@ Ext.define('amdaUI.UploadPanelUI', { | ||
15 | requires : [ | 15 | requires : [ |
16 | 'amdaUI.RemoteSearchPlugin' | 16 | 'amdaUI.RemoteSearchPlugin' |
17 | ], | 17 | ], |
18 | - | ||
19 | - isFile : true, | ||
20 | - isTimeTable : false, | ||
21 | - tmpNode : null, | ||
22 | 18 | ||
19 | + tmpNode : null, | ||
20 | + specialItems : null, | ||
21 | + formats : null, | ||
22 | + localName : null, | ||
23 | + | ||
23 | constructor: function(config) | 24 | constructor: function(config) |
24 | { | 25 | { |
25 | this.init(config); | 26 | this.init(config); |
26 | - this.callParent(arguments); | 27 | + this.callParent(arguments); |
27 | }, | 28 | }, |
28 | 29 | ||
29 | /* | 30 | /* |
@@ -39,8 +40,7 @@ Ext.define('amdaUI.UploadPanelUI', { | @@ -39,8 +40,7 @@ Ext.define('amdaUI.UploadPanelUI', { | ||
39 | var me = this; | 40 | var me = this; |
40 | myDesktopApp.getLoadedModule(this.tmpNode.get('moduleId'), true, function (module){ | 41 | myDesktopApp.getLoadedModule(this.tmpNode.get('moduleId'), true, function (module){ |
41 | // myData | 42 | // myData |
42 | - if (me.tmpNode.get('nodeType') == amdaModel.MyDataParamNode.nodeType) | ||
43 | - { | 43 | + if (me.tmpNode.get('nodeType') == amdaModel.MyDataParamNode.nodeType) { |
44 | var linkedFile = Ext.create('amdaModel.MyDataNode', {leaf : true, text : me.tmpNode.get('text')}); | 44 | var linkedFile = Ext.create('amdaModel.MyDataNode', {leaf : true, text : me.tmpNode.get('text')}); |
45 | 45 | ||
46 | linkedFile.create(result.mask, result.description, result.maskDesc); | 46 | linkedFile.create(result.mask, result.description, result.maskDesc); |
@@ -53,37 +53,33 @@ Ext.define('amdaUI.UploadPanelUI', { | @@ -53,37 +53,33 @@ Ext.define('amdaUI.UploadPanelUI', { | ||
53 | linkedFile.set('object',paramObj); | 53 | linkedFile.set('object',paramObj); |
54 | me.tmpNode.set('fileObject',paramObj); | 54 | me.tmpNode.set('fileObject',paramObj); |
55 | } | 55 | } |
56 | - else | ||
57 | - { | 56 | + else { |
58 | // Time Table or Catalog | 57 | // Time Table or Catalog |
59 | var paramObj = Ext.create(me.tmpNode.get('objectDataModel'), result); | 58 | var paramObj = Ext.create(me.tmpNode.get('objectDataModel'), result); |
60 | 59 | ||
61 | paramObj.set('fromPlugin',true); | 60 | paramObj.set('fromPlugin',true); |
62 | - if (result.intervals) | ||
63 | - { | 61 | + if (result.intervals) { |
64 | paramObj.set('intervals',result.intervals); | 62 | paramObj.set('intervals',result.intervals); |
65 | paramObj.set('nbIntervals',result.intervals.length); | 63 | paramObj.set('nbIntervals',result.intervals.length); |
66 | } | 64 | } |
67 | me.tmpNode.set('object',paramObj); | 65 | me.tmpNode.set('object',paramObj); |
68 | } | 66 | } |
69 | - if (module) | ||
70 | - { | 67 | + if (module) { |
71 | module.setLinkedNode(me.tmpNode); | 68 | module.setLinkedNode(me.tmpNode); |
72 | module.linkedNode.editInModule(); | 69 | module.linkedNode.editInModule(); |
73 | } | 70 | } |
74 | }); | 71 | }); |
75 | } | 72 | } |
76 | - else | ||
77 | - { | 73 | + else { |
78 | // EXCEPTION : parameter not found ! | 74 | // EXCEPTION : parameter not found ! |
79 | myDesktopApp.errorMsg(t.action + "." + t.method + " : No parameter '"+this.tmpNode.get('text')+"' found!"); | 75 | myDesktopApp.errorMsg(t.action + "." + t.method + " : No parameter '"+this.tmpNode.get('text')+"' found!"); |
80 | } | 76 | } |
77 | + | ||
81 | loadMask.hide(); | 78 | loadMask.hide(); |
82 | }, | 79 | }, |
83 | 80 | ||
84 | /* | 81 | /* |
85 | * form validation | 82 | * form validation |
86 | -* TODO markInvalid()? | ||
87 | */ | 83 | */ |
88 | validate : function() | 84 | validate : function() |
89 | { | 85 | { |
@@ -91,59 +87,43 @@ Ext.define('amdaUI.UploadPanelUI', { | @@ -91,59 +87,43 @@ Ext.define('amdaUI.UploadPanelUI', { | ||
91 | 87 | ||
92 | if (values['filesrc'] == 'LOCAL') | 88 | if (values['filesrc'] == 'LOCAL') |
93 | { | 89 | { |
94 | - if (this.isFile) var locFile = this.getForm().findField('localFileName').getValue(); | ||
95 | - else if (this.isTimeTable) var locFile = this.getForm().findField('localTTName').getValue(); | ||
96 | - else var locFile = this.getForm().findField('localCatName').getValue(); | ||
97 | - | ||
98 | - if (!locFile) | ||
99 | - { | 90 | + var locFile = this.getForm().findField(this.localName).getValue(); |
91 | + | ||
92 | + if (!locFile) { | ||
100 | myDesktopApp.warningMsg("Select File to Upload"); | 93 | myDesktopApp.warningMsg("Select File to Upload"); |
101 | return false; | 94 | return false; |
102 | } | 95 | } |
103 | } | 96 | } |
104 | else | 97 | else |
105 | { | 98 | { |
106 | - if (!values['remoteFile'] && !values['remoteTT'] && !values['remoteCat']) | ||
107 | - { | 99 | + if (!values['remoteFile'] && !values['remoteTT'] && !values['remoteCat']) { |
108 | myDesktopApp.warningMsg("Select File to Upload"); | 100 | myDesktopApp.warningMsg("Select File to Upload"); |
109 | return false; | 101 | return false; |
110 | } | 102 | } |
111 | - } | 103 | + } |
104 | + | ||
112 | return true; | 105 | return true; |
113 | }, | 106 | }, |
114 | 107 | ||
115 | 108 | ||
116 | - //TODO proper parsing | 109 | +/* |
110 | + * Upadte format if user didn't do this himself | ||
111 | + */ | ||
117 | updateFormat: function(value) | 112 | updateFormat: function(value) |
118 | { | 113 | { |
119 | var arrayOfStr = value.split('.'); | 114 | var arrayOfStr = value.split('.'); |
120 | - //TODO use down method? | ||
121 | - if (this.isFile) | ||
122 | - { | ||
123 | - var radios = Ext.getCmp('filefrmt'); | ||
124 | - var user_format_obj = radios.getValue(); | ||
125 | - var user_format = user_format_obj.filefrmt; | ||
126 | - } | ||
127 | - else if (this.isTimeTable) | ||
128 | - { | ||
129 | - var radios = Ext.getCmp('ttfrmt'); | ||
130 | - var user_format_obj = radios.getValue(); | ||
131 | - var user_format = user_format_obj.ttfrmt; | ||
132 | - } | ||
133 | - else | ||
134 | - { | ||
135 | - var radios = Ext.getCmp('catfrmt'); | ||
136 | - var user_format_obj = radios.getValue(); | ||
137 | - var user_format = user_format_obj.catfrmt; | ||
138 | - } | ||
139 | - | ||
140 | - var auto_format = user_format; | 115 | + |
116 | + var radios = Ext.getCmp(this.radioId); | ||
117 | + var user_format_obj = radios.getValue(); | ||
118 | + | ||
119 | + var user_format = user_format_obj[this.radioId]; | ||
141 | 120 | ||
142 | // auto define format in some special cases | 121 | // auto define format in some special cases |
143 | //TODO name without extention => ASCII? | 122 | //TODO name without extention => ASCII? |
144 | - if (arrayOfStr.length == 1) auto_format = 'ASCII'; | ||
145 | - else | ||
146 | - { | 123 | + if (arrayOfStr.length == 1) { |
124 | + auto_format = 'ASCII'; | ||
125 | + } | ||
126 | + else { | ||
147 | var suffix = arrayOfStr[arrayOfStr.length - 1].toLowerCase(); | 127 | var suffix = arrayOfStr[arrayOfStr.length - 1].toLowerCase(); |
148 | if (suffix == 'gz') | 128 | if (suffix == 'gz') |
149 | suffix = arrayOfStr[arrayOfStr.length - 2].toLowerCase() + '.gz'; | 129 | suffix = arrayOfStr[arrayOfStr.length - 2].toLowerCase() + '.gz'; |
@@ -155,35 +135,30 @@ Ext.define('amdaUI.UploadPanelUI', { | @@ -155,35 +135,30 @@ Ext.define('amdaUI.UploadPanelUI', { | ||
155 | case 'cef' : auto_format = 'CEF'; break; | 135 | case 'cef' : auto_format = 'CEF'; break; |
156 | case 'xml' : auto_format = 'VOT'; | 136 | case 'xml' : auto_format = 'VOT'; |
157 | case 'vot' : auto_format = 'VOT'; break; | 137 | case 'vot' : auto_format = 'VOT'; break; |
158 | - case 'nc' : auto_format = 'NC'; break; | 138 | + case 'nc' : auto_format = 'NC'; break; |
159 | case 'asc' : | 139 | case 'asc' : |
160 | case 'txt' : | 140 | case 'txt' : |
161 | default : auto_format = 'ASCII'; | 141 | default : auto_format = 'ASCII'; |
162 | } | 142 | } |
163 | } | 143 | } |
164 | // set auto format : case when format was not set by user before | 144 | // set auto format : case when format was not set by user before |
165 | - if (this.isFile && user_format !== auto_format) { | ||
166 | - user_format_obj.filefrmt = auto_format; | ||
167 | - } else if (this.isTimeTable && user_format !== auto_format) { | ||
168 | - user_format_obj.ttfrmt = auto_format; | ||
169 | - } else if (!this.isFile && !this.isTimeTable && user_format !== auto_format) { | ||
170 | - user_format_obj.catfrmt = auto_format; | ||
171 | - } | ||
172 | - | 145 | + if (user_format !== auto_format) { |
146 | + user_format_obj[this.radioId] = auto_format; | ||
147 | + } | ||
148 | + | ||
173 | radios.setValue(user_format_obj); | 149 | radios.setValue(user_format_obj); |
174 | }, | 150 | }, |
175 | 151 | ||
176 | - /* | ||
177 | - * | ||
178 | - */ | 152 | +/* |
153 | +* | ||
154 | +*/ | ||
179 | forceUpload : function (url,format,onFinish) | 155 | forceUpload : function (url,format,onFinish) |
180 | { | 156 | { |
181 | var me = this; | 157 | var me = this; |
182 | var re = /http:\/\/127.0.0.1:/; | 158 | var re = /http:\/\/127.0.0.1:/; |
183 | var isRemoteUrl = !re.test(url); | 159 | var isRemoteUrl = !re.test(url); |
184 | 160 | ||
185 | - switch (format) | ||
186 | - { | 161 | + switch (format) { |
187 | case 'votable' : | 162 | case 'votable' : |
188 | this.getForm().findField('filefrmt').setValue('VOT'); | 163 | this.getForm().findField('filefrmt').setValue('VOT'); |
189 | break; | 164 | break; |
@@ -230,14 +205,14 @@ Ext.define('amdaUI.UploadPanelUI', { | @@ -230,14 +205,14 @@ Ext.define('amdaUI.UploadPanelUI', { | ||
230 | this.postUpload(onFinish); | 205 | this.postUpload(onFinish); |
231 | }, | 206 | }, |
232 | 207 | ||
233 | - /* | ||
234 | - * | ||
235 | - */ | 208 | +/* |
209 | +* | ||
210 | +*/ | ||
236 | postUpload : function(onFinish) | 211 | postUpload : function(onFinish) |
237 | { | 212 | { |
238 | // 'global' form containing 'partial' forms | 213 | // 'global' form containing 'partial' forms |
239 | var form = this.getForm(); | 214 | var form = this.getForm(); |
240 | - | 215 | + |
241 | // special validation | 216 | // special validation |
242 | if(this.validate()) | 217 | if(this.validate()) |
243 | { | 218 | { |
@@ -246,16 +221,14 @@ Ext.define('amdaUI.UploadPanelUI', { | @@ -246,16 +221,14 @@ Ext.define('amdaUI.UploadPanelUI', { | ||
246 | scope: this, | 221 | scope: this, |
247 | url: 'php/uploadFile.php', | 222 | url: 'php/uploadFile.php', |
248 | waitMsg: 'Uploading your file...', | 223 | waitMsg: 'Uploading your file...', |
249 | - success: function(form, o) | ||
250 | - { | 224 | + success: function(form, o) { |
251 | if (onFinish) | 225 | if (onFinish) |
252 | onFinish(); | 226 | onFinish(); |
253 | this.tmpNode = Ext.create(this.nodeType,{leaf : true, text : o.result.file}); | 227 | this.tmpNode = Ext.create(this.nodeType,{leaf : true, text : o.result.file}); |
254 | AmdaAction.getUploadedObject(o.result.file, o.result.format, this.tmpNode.get('nodeType'), this.getObjectCallback, this); | 228 | AmdaAction.getUploadedObject(o.result.file, o.result.format, this.tmpNode.get('nodeType'), this.getObjectCallback, this); |
255 | loadMask.hide(); | 229 | loadMask.hide(); |
256 | }, | 230 | }, |
257 | - failure: function(form, o) | ||
258 | - { | 231 | + failure: function(form, o) { |
259 | if (onFinish) | 232 | if (onFinish) |
260 | onFinish(); | 233 | onFinish(); |
261 | loadMask.hide(); | 234 | loadMask.hide(); |
@@ -265,25 +238,19 @@ Ext.define('amdaUI.UploadPanelUI', { | @@ -265,25 +238,19 @@ Ext.define('amdaUI.UploadPanelUI', { | ||
265 | } | 238 | } |
266 | }, | 239 | }, |
267 | 240 | ||
268 | - /* | ||
269 | - * panel config | ||
270 | - */ | ||
271 | - init : function(config) | ||
272 | - { | ||
273 | - this.isFile = config.panelType == 'file'? true : false; | ||
274 | - this.isTimeTable = config.panelType == 'timetable'? true : false; | ||
275 | - | ||
276 | - // file / time table / catalog settings | ||
277 | - if (this.isFile) | ||
278 | - { | ||
279 | - var title = 'File'; | ||
280 | - var items = [ | 241 | + initFileUpload : function() |
242 | + { | ||
243 | + this.formats = [ | ||
281 | { boxLabel: 'ASCII', name: 'filefrmt', inputValue: 'ASCII', checked: true, | 244 | { boxLabel: 'ASCII', name: 'filefrmt', inputValue: 'ASCII', checked: true, |
282 | - listeners: | ||
283 | - { | 245 | + listeners: { |
284 | change: function (cb, nv, ov) { | 246 | change: function (cb, nv, ov) { |
285 | - if (nv) Ext.getCmp('tf').show(); | ||
286 | - else Ext.getCmp('tf').hide(); | 247 | + if (nv) { |
248 | + Ext.getCmp('tf').show(); | ||
249 | + } | ||
250 | + else { | ||
251 | + Ext.getCmp('tf').hide(); | ||
252 | + Ext.getCmp('nfs').hide(); | ||
253 | + } | ||
287 | } | 254 | } |
288 | } | 255 | } |
289 | }, | 256 | }, |
@@ -291,143 +258,95 @@ Ext.define('amdaUI.UploadPanelUI', { | @@ -291,143 +258,95 @@ Ext.define('amdaUI.UploadPanelUI', { | ||
291 | { boxLabel: 'CDF <img amda_clicktip="cdfTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', name: 'filefrmt', inputValue: 'CDF' }, | 258 | { boxLabel: 'CDF <img amda_clicktip="cdfTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', name: 'filefrmt', inputValue: 'CDF' }, |
292 | // { boxLabel: 'CEF[GZ]', name: 'filefrmt', inputValue: 'CEF' }, | 259 | // { boxLabel: 'CEF[GZ]', name: 'filefrmt', inputValue: 'CEF' }, |
293 | { boxLabel: 'VOTable', name: 'filefrmt', inputValue: 'VOT' }]; | 260 | { boxLabel: 'VOTable', name: 'filefrmt', inputValue: 'VOT' }]; |
294 | - var timeFormatId = 'tf'; | ||
295 | - this.formatId = 'nsf'; | 261 | + |
296 | this.localUploadId = 'form-uploadfile'; | 262 | this.localUploadId = 'form-uploadfile'; |
297 | - var localUploadName ='localFileName'; | ||
298 | - var remoteUploadName ='remoteFile'; | ||
299 | this.remoteUploadId = 'form-uploadurl'; | 263 | this.remoteUploadId = 'form-uploadurl'; |
300 | - this.nodeType = 'amdaModel.MyDataParamNode'; | ||
301 | - //TODO load XML | ||
302 | - var store = Ext.create('Ext.data.Store', { | 264 | + this.nodeType = 'amdaModel.MyDataParamNode'; |
265 | + this.store = Ext.create('Ext.data.Store', { | ||
303 | fields: ['value', 'name'], | 266 | fields: ['value', 'name'], |
304 | - data : [ | ||
305 | - {"value":"ftp://cdaweb.gsfc.nasa.gov/pub/data/", "name":"CDAWEB/FTP"}/*, | ||
306 | - {"value":"ftp://ftp.ngdc.noaa.gov/STP/SOLAR_DATA/", "name":"Solar Data"}*/] | ||
307 | - }); | ||
308 | - } | ||
309 | - else if (this.isTimeTable) | ||
310 | - { | ||
311 | - var title = 'Time Table'; | ||
312 | - var items = [ | ||
313 | - { boxLabel: 'ASCII <img amda_clicktip="ttTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', name: 'ttfrmt', inputValue: 'ASCII', checked: true}, | ||
314 | - { boxLabel: 'VOTable', name: 'ttfrmt', inputValue: 'VOT'} | ||
315 | - ]; | ||
316 | - var timeFormatId = 'tf_tt'; | ||
317 | - this.formatId = 'nsf_tt'; | ||
318 | - this.localUploadId = 'form-uploadtt'; | ||
319 | - var localUploadName ='localTTName'; | ||
320 | - var remoteUploadName ='remoteTT'; | ||
321 | - this.remoteUploadId = 'form-uploadtturl'; | ||
322 | - this.nodeType = 'amdaModel.TimeTableNode'; | ||
323 | - //TODO load XML | ||
324 | - var store = Ext.create('Ext.data.Store', { | ||
325 | - fields: ['value', 'name'], | ||
326 | - data : [] | 267 | + proxy: { |
268 | + type: 'ajax', | ||
269 | + url : 'generic_data/remote_sites.json', | ||
270 | + reader: { | ||
271 | + type: 'json', | ||
272 | + root: 'remote_sites' | ||
273 | + } | ||
274 | + }, | ||
275 | + autoLoad: true | ||
327 | }); | 276 | }); |
328 | - } | ||
329 | - else | ||
330 | - { | ||
331 | - var title = 'Catalog'; | ||
332 | - var items = [ | ||
333 | - { boxLabel: 'VOTable', name: 'catfrmt', inputValue: 'VOT', checked: true }]; | ||
334 | - | ||
335 | - var timeFormatId = 'tf_cat'; | ||
336 | - this.formatId = 'nsf_cat'; | ||
337 | - this.localUploadId = 'form-uploadcat'; | ||
338 | - var localUploadName ='localCatName'; | ||
339 | - var remoteUploadName ='remoteCat'; | ||
340 | 277 | ||
341 | - this.remoteUploadId = 'form-uploadcaturl'; | ||
342 | - this.nodeType = 'amdaModel.CatalogNode'; | ||
343 | - //TODO load XML | ||
344 | - var store = Ext.create('Ext.data.Store', { | ||
345 | - fields: ['value', 'name'], | ||
346 | - data : [] | ||
347 | - }); | ||
348 | - } | ||
349 | - | ||
350 | - var combo = Ext.create('Ext.form.ComboBox', { | ||
351 | - flex : 4, | ||
352 | - store: store, | ||
353 | - emptyText: 'Enter Remote Site URL (ftp)', | ||
354 | - queryMode: 'local', | ||
355 | - displayField: 'name', | ||
356 | - valueField: 'value' | ||
357 | - }); | ||
358 | - | ||
359 | - var fieldcontainer = | ||
360 | - { | ||
361 | - xtype: 'fieldcontainer', | ||
362 | - fieldLabel: ' ', labelWidth: 0, labelSeparator : '', labelPad : 0, | ||
363 | - layout: 'hbox', | 278 | + this.radioId = 'filefrmt'; |
279 | + | ||
280 | +/* | ||
281 | + * Sampling : TimeFormat Fieldset | ||
282 | + */ | ||
283 | + this.autoSampling = Ext.create('Ext.form.RadioGroup', { | ||
284 | + // fieldLabel : 'Constant or Variable ?', | ||
285 | + // labelWidth: 90, | ||
286 | + defaults : {name : 'timesmpl'}, | ||
364 | items: [ | 287 | items: [ |
365 | - combo, | ||
366 | - { | ||
367 | - xtype : 'button', | ||
368 | - flex : 1, | ||
369 | - text: 'Browse It', | ||
370 | - handler: function() | ||
371 | - { | ||
372 | - var form = this.up('form').getForm(); | ||
373 | - var site = form.getFields().getAt(0).getValue(); | ||
374 | - if (site) | ||
375 | - this.up('form').ownerCt.fireEvent('open', site); | ||
376 | - else | ||
377 | - myDesktopApp.warningMsg("Please Enter Remote Site URL"); | ||
378 | - } | ||
379 | - }] | ||
380 | - }; | ||
381 | - | ||
382 | - if (this.isFile) var radioId = 'filefrmt'; | ||
383 | - else if (this.isTimeTable) var radioId = 'ttfrmt'; | ||
384 | - else var radioId = 'catfrmt'; | 288 | + {boxLabel: 'constant sampling', inputValue: 'constant', checked: true}, |
289 | + {boxLabel: 'variable sampling <img amda_clicktip="variableSampling" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', inputValue: 'variable'} | ||
290 | + ] | ||
291 | + }); | ||
385 | 292 | ||
386 | - var fileFormat = Ext.create('Ext.form.FieldSet', { | ||
387 | - title: 'File Format', | ||
388 | - items : [{ | ||
389 | - xtype: 'radiogroup', | ||
390 | - id : radioId, | ||
391 | - columns: 3, | ||
392 | - cls: 'x-check-group-alt', | ||
393 | - items: items | 293 | + this.manualSampling = Ext.create('Ext.form.FieldContainer', { |
294 | + defaultType: 'numberfield', | ||
295 | + layout: 'anchor', | ||
296 | + defaults: { | ||
297 | + layout: '100%', | ||
298 | + labelWidth : 150, | ||
299 | + minValue : 0.001, | ||
300 | + hideTrigger: true | ||
301 | + }, | ||
302 | + hidden : true, | ||
303 | + items: [ | ||
304 | + { | ||
305 | + fieldLabel : 'min sampling', | ||
306 | + name : 'min_manual_sampling' | ||
307 | + }, | ||
308 | + { | ||
309 | + fieldLabel : 'max sampling', | ||
310 | + name : 'max_manual_sampling' | ||
394 | }] | 311 | }] |
312 | + }); | ||
313 | + | ||
314 | + var Sampling = Ext.create('Ext.form.RadioGroup', { | ||
315 | + fieldLabel: 'Time Sampling', | ||
316 | + labelWidth: 90, | ||
317 | + cls: 'x-check-group-alt', | ||
318 | + defaults : {name : 'smpl'}, | ||
319 | + items: [ | ||
320 | + {boxLabel: 'auto-defined', inputValue: 'auto', checked: true}, | ||
321 | + {boxLabel: 'manual', inputValue: 'manual'} | ||
322 | + ], | ||
323 | + listeners: { | ||
324 | + scope : this, | ||
325 | + change: function (cb, nv, ov) { | ||
326 | + if (nv.smpl == 'manual') { | ||
327 | + this.autoSampling.setVisible(false); | ||
328 | + this.manualSampling.setVisible(true); | ||
329 | + } | ||
330 | + else { | ||
331 | + this.autoSampling.setVisible(true); | ||
332 | + this.manualSampling.setVisible(false); | ||
333 | + } | ||
334 | + } | ||
335 | + } | ||
395 | }); | 336 | }); |
396 | - | ||
397 | - var Sampling = | ||
398 | - { | ||
399 | - xtype: 'radiogroup', | ||
400 | - fieldLabel: 'Time Sampling', | ||
401 | - labelWidth: 90, | ||
402 | - cls: 'x-check-group-alt', | ||
403 | - hidden : !this.isFile, | ||
404 | - defaults : {name : 'timesmpl'}, | ||
405 | - items: [ | ||
406 | - {boxLabel: 'constant', inputValue: 'constant', checked: true}, | ||
407 | - {boxLabel: 'variable <img amda_clicktip="variableSampling" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', inputValue: 'variable'} | ||
408 | - ] | ||
409 | - }; | ||
410 | - | ||
411 | - var dayStart = | ||
412 | - { | ||
413 | - xtype: 'checkbox', | ||
414 | - name : 'doy', | ||
415 | - hidden : true, | ||
416 | - fieldLabel: 'DOY starts from 1', | ||
417 | - inputValue: '1' | ||
418 | - }; | ||
419 | - | ||
420 | - var nonStandardFormat = | ||
421 | - { | 337 | + |
338 | +/* | ||
339 | + * NonStandardFormat : TimeFormat Fieldset | ||
340 | + */ | ||
341 | + var nonStandardFormat = { | ||
422 | xtype: 'fieldcontainer', | 342 | xtype: 'fieldcontainer', |
423 | defaultType: 'textfield', | 343 | defaultType: 'textfield', |
424 | layout: 'anchor', | 344 | layout: 'anchor', |
425 | - defaults: | ||
426 | - { | ||
427 | - layout: '100%', | ||
428 | - labelWidth : 150 | 345 | + defaults: { |
346 | + layout: '100%', | ||
347 | + labelWidth : 150 | ||
429 | }, | 348 | }, |
430 | - id : this.formatId, | 349 | + id : 'nfs', |
431 | hidden : true, | 350 | hidden : true, |
432 | items: [ | 351 | items: [ |
433 | { | 352 | { |
@@ -435,8 +354,7 @@ Ext.define('amdaUI.UploadPanelUI', { | @@ -435,8 +354,7 @@ Ext.define('amdaUI.UploadPanelUI', { | ||
435 | name : 'nonstd', | 354 | name : 'nonstd', |
436 | value: 'Y-m-d H:i:s', | 355 | value: 'Y-m-d H:i:s', |
437 | enableKeyEvents: true, | 356 | enableKeyEvents: true, |
438 | - listeners : | ||
439 | - { | 357 | + listeners : { |
440 | keyUp : function() { | 358 | keyUp : function() { |
441 | if (this.getValue().indexOf('z') > 0) { | 359 | if (this.getValue().indexOf('z') > 0) { |
442 | this.nextSibling().show(); | 360 | this.nextSibling().show(); |
@@ -446,67 +364,165 @@ Ext.define('amdaUI.UploadPanelUI', { | @@ -446,67 +364,165 @@ Ext.define('amdaUI.UploadPanelUI', { | ||
446 | } | 364 | } |
447 | } | 365 | } |
448 | } | 366 | } |
449 | - }, | ||
450 | - dayStart, | ||
451 | - { | ||
452 | - fieldLabel : 'define max time length', | ||
453 | - name : 'timelength', | ||
454 | - value: 'auto' | 367 | + },{ |
368 | + xtype: 'checkbox', | ||
369 | + name : 'doy', | ||
370 | + fieldLabel: 'DOY starts from 1', | ||
371 | + hidden : true, | ||
372 | + inputValue: '1' | ||
373 | + },{ | ||
374 | + fieldLabel : 'define max time length', | ||
375 | + name : 'timelength', | ||
376 | + value: 'auto' | ||
455 | }], | 377 | }], |
456 | - listeners : | ||
457 | - { | 378 | + listeners : { |
458 | hide : function() { | 379 | hide : function() { |
459 | this.items.getAt(1).hide(); | 380 | this.items.getAt(1).hide(); |
381 | + }, | ||
382 | + show : function() { | ||
383 | + if (this.items.getAt(0).getValue().indexOf('z') > 0) | ||
384 | + this.items.getAt(1).show(); | ||
460 | } | 385 | } |
461 | } | 386 | } |
462 | - }; | ||
463 | - | ||
464 | - var timeFormat = Ext.create('Ext.form.FieldSet', { | ||
465 | - id: timeFormatId, | ||
466 | - title: 'Time Settings', | ||
467 | - hidden : !this.isFile, | ||
468 | - items : [ | ||
469 | - { | 387 | + }; |
388 | + | ||
389 | +/* | ||
390 | + * TimeFormat Fieldset : Global form | ||
391 | + */ | ||
392 | + var timeFormat = Ext.create('Ext.form.FieldSet', { | ||
393 | + title: 'Time Settings', | ||
394 | + items : [{ | ||
395 | + id: 'tf', | ||
470 | xtype: 'radiogroup', | 396 | xtype: 'radiogroup', |
471 | fieldLabel: 'Time Format', | 397 | fieldLabel: 'Time Format', |
472 | - labelWidth: 90, | 398 | + labelWidth: 90, |
473 | cls: 'x-check-group-alt', | 399 | cls: 'x-check-group-alt', |
474 | defaults : { name : 'timefrmt'}, | 400 | defaults : { name : 'timefrmt'}, |
475 | - items: [ | ||
476 | - { boxLabel: 'standard <img amda_clicktip="standardTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', inputValue: 'standard', checked: true}, | ||
477 | - { boxLabel: 'no <img amda_clicktip="userTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', inputValue: 'user', | ||
478 | - listeners: | ||
479 | - { | ||
480 | - scope : this, | ||
481 | - change: function (cb, nv, ov) { | ||
482 | - if (nv) | ||
483 | - Ext.getCmp(this.formatId).show(); | ||
484 | - else | ||
485 | - Ext.getCmp(this.formatId).hide(); | ||
486 | - } | ||
487 | - } | ||
488 | - }] | ||
489 | - }, | ||
490 | - nonStandardFormat, | ||
491 | - Sampling ] | 401 | + items: [ |
402 | + { boxLabel: 'standard <img amda_clicktip="standardTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', inputValue: 'standard', checked: true}, | ||
403 | + { boxLabel: 'no <img amda_clicktip="userTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', inputValue: 'user', | ||
404 | + listeners: { | ||
405 | + change: function (cb, nv, ov) { | ||
406 | + if (nv) | ||
407 | + Ext.getCmp('nfs').show(); | ||
408 | + else | ||
409 | + Ext.getCmp('nfs').hide(); | ||
410 | + } | ||
411 | + } | ||
412 | + }] | ||
413 | + }, | ||
414 | + nonStandardFormat, | ||
415 | + Sampling, | ||
416 | + this.autoSampling, | ||
417 | + this.manualSampling | ||
418 | + ] | ||
492 | }); | 419 | }); |
420 | + | ||
421 | + this.specialItems = [ timeFormat, | ||
422 | + { | ||
423 | + xtype: 'hidden', | ||
424 | + name: 'sampData', | ||
425 | + value: null | ||
426 | + }, | ||
427 | + { | ||
428 | + xtype: 'hidden', | ||
429 | + name: 'sampFileName', | ||
430 | + value: null | ||
431 | + }] | ||
432 | + }, | ||
493 | 433 | ||
494 | - var localFile = Ext.create('Ext.form.Panel', { | 434 | + initTTUpload : function(isTT) |
435 | + { | ||
436 | + if (isTT) { | ||
437 | + this.formats = [ | ||
438 | + { boxLabel: 'ASCII <img amda_clicktip="ttTimeFormat" style="vertical-align:bottom" src="js/resources/images/16x16/info_mini.png"', name: 'ttfrmt', inputValue: 'ASCII', checked: true}, | ||
439 | + { boxLabel: 'VOTable', name: 'ttfrmt', inputValue: 'VOT'} | ||
440 | + ]; | ||
441 | + this.localUploadId = 'form-uploadtt'; | ||
442 | + this.remoteUploadId = 'form-uploadtturl'; | ||
443 | + this.nodeType = 'amdaModel.TimeTableNode'; | ||
444 | + | ||
445 | + this.store = Ext.create('Ext.data.Store', { | ||
446 | + fields: ['value', 'name']/*, | ||
447 | + proxy: { | ||
448 | + type: 'ajax', | ||
449 | + url : 'generic_data/remote_sites.json', | ||
450 | + reader: { | ||
451 | + type: 'json', | ||
452 | + root: 'remote_sites' | ||
453 | + } | ||
454 | + }, | ||
455 | + autoLoad: true*/ | ||
456 | + }); | ||
457 | + | ||
458 | + this.radioId = 'ttfrmt'; | ||
459 | + } | ||
460 | + else { | ||
461 | + this.formats = [ | ||
462 | + { boxLabel: 'VOTable', name: 'catfrmt', inputValue: 'VOT', checked: true }]; | ||
463 | + | ||
464 | + this.localUploadId = 'form-uploadcat'; | ||
465 | + this.remoteUploadId = 'form-uploadcaturl'; | ||
466 | + this.nodeType = 'amdaModel.CatalogNode'; | ||
467 | + this.store = Ext.create('Ext.data.Store', { | ||
468 | + fields: ['value', 'name']/*, | ||
469 | + proxy: { | ||
470 | + type: 'ajax', | ||
471 | + url : 'generic_data/remote_sites.json', | ||
472 | + reader: { | ||
473 | + type: 'json', | ||
474 | + root: 'remote_sites' | ||
475 | + } | ||
476 | + }, | ||
477 | + autoLoad: true*/ | ||
478 | + }); | ||
479 | + | ||
480 | + this.radioId = 'catfrmt'; | ||
481 | + } | ||
482 | + }, | ||
483 | +/* | ||
484 | +* panel config | ||
485 | +*/ | ||
486 | + init : function(config) | ||
487 | + { | ||
488 | + | ||
489 | + if ( config.panelType == 'file' ) | ||
490 | + this.initFileUpload(); | ||
491 | + else | ||
492 | + this.initTTUpload(config.panelType == 'timetable'); | ||
493 | + | ||
494 | + this.localName = config.localUploadName; | ||
495 | + /* | ||
496 | + * FileFormat Fieldset | ||
497 | + */ | ||
498 | + var fileFormat = Ext.create('Ext.form.FieldSet', { | ||
499 | + title: 'File Format', | ||
500 | + items : [{ | ||
501 | + xtype: 'radiogroup', | ||
502 | + id : this.radioId, | ||
503 | + columns: 3, | ||
504 | + cls: 'x-check-group-alt', | ||
505 | + items: this.formats | ||
506 | + }] | ||
507 | + }); | ||
508 | + | ||
509 | +/* | ||
510 | + * FileSource Fieldset : Local File Upload | ||
511 | + */ | ||
512 | + var localFile = Ext.create('Ext.form.Panel', { | ||
495 | id: this.localUploadId, | 513 | id: this.localUploadId, |
496 | fileUpload: true, | 514 | fileUpload: true, |
497 | hideLabels: true, | 515 | hideLabels: true, |
498 | frame: true, | 516 | frame: true, |
499 | - items: [ | ||
500 | - { | ||
501 | - xtype: 'fileuploadfield', | 517 | + items: [{ |
518 | + xtype: 'fileuploadfield', | ||
502 | emptyText: 'Select Your File', | 519 | emptyText: 'Select Your File', |
503 | width: 300, | 520 | width: 300, |
504 | - name: localUploadName, | 521 | + name: this.localName, |
505 | buttonText: 'Browse', | 522 | buttonText: 'Browse', |
506 | - listeners: | ||
507 | - { | 523 | + listeners: { |
508 | scope : this, | 524 | scope : this, |
509 | - change: function (field, value, e) { | 525 | + change: function (field, value, e) { |
510 | this.updateFormat(value); | 526 | this.updateFormat(value); |
511 | } | 527 | } |
512 | } | 528 | } |
@@ -517,41 +533,75 @@ Ext.define('amdaUI.UploadPanelUI', { | @@ -517,41 +533,75 @@ Ext.define('amdaUI.UploadPanelUI', { | ||
517 | name: 'MAX_FILE_SIZE', | 533 | name: 'MAX_FILE_SIZE', |
518 | value: myDesktopApp.MAX_UPLOADED_FILE_SIZE // 30MB | 534 | value: myDesktopApp.MAX_UPLOADED_FILE_SIZE // 30MB |
519 | }] | 535 | }] |
520 | - }); | ||
521 | - | ||
522 | - var remoteFile = Ext.create('Ext.form.Panel', { | ||
523 | - id: this.remoteUploadId, | 536 | + }); |
537 | + | ||
538 | +/* | ||
539 | + * FileSource Fieldset : Remote File Upload | ||
540 | + */ | ||
541 | + var combo = Ext.create('Ext.form.ComboBox', { | ||
542 | + flex : 4, | ||
543 | + store: this.store, | ||
544 | + emptyText: 'Enter Remote Site URL (ftp/http[s])', | ||
545 | + queryMode: 'local', | ||
546 | + displayField: 'name', | ||
547 | + valueField: 'value' | ||
548 | + }); | ||
549 | + | ||
550 | + var fieldcontainer = { | ||
551 | + xtype: 'fieldcontainer', | ||
552 | + fieldLabel: ' ', labelWidth: 0, labelSeparator : '', labelPad : 0, | ||
553 | + layout: 'hbox', | ||
554 | + items: [ | ||
555 | + combo, | ||
556 | + { | ||
557 | + xtype : 'button', | ||
558 | + flex : 1, | ||
559 | + text: 'Browse It', | ||
560 | + handler: function() { | ||
561 | + var form = this.up('form').getForm(); | ||
562 | + var site = form.getFields().getAt(0).getValue(); | ||
563 | + if (site) | ||
564 | + this.up('form').ownerCt.fireEvent('open', site); | ||
565 | + else | ||
566 | + myDesktopApp.warningMsg("Please Enter Remote Site URL"); | ||
567 | + } | ||
568 | + }] | ||
569 | + }; | ||
570 | + | ||
571 | + var remoteFile = Ext.create('Ext.form.Panel', { | ||
572 | + id: this.remoteUploadId, | ||
524 | hideLabels: true, | 573 | hideLabels: true, |
525 | - autoHeight: true, | 574 | + autoHeight: true, |
526 | frame: true, | 575 | frame: true, |
527 | hidden : true, | 576 | hidden : true, |
528 | items: [ | 577 | items: [ |
529 | fieldcontainer, | 578 | fieldcontainer, |
530 | { | 579 | { |
531 | xtype : 'textfield', | 580 | xtype : 'textfield', |
532 | - name : remoteUploadName, | ||
533 | - emptyText: 'Enter Remote File URL (http or ftp)', | 581 | + name : config.remoteUploadName, |
582 | + emptyText: 'Enter Remote File URL (ftp/http[s])', | ||
534 | width: 310, | 583 | width: 310, |
535 | listeners: | 584 | listeners: |
536 | { | 585 | { |
537 | scope : this, | 586 | scope : this, |
538 | - change: function (field, value, e) { | ||
539 | - this.updateFormat(value); | 587 | + change: function (field, value, e) { |
588 | + this.updateFormat(value); | ||
540 | } | 589 | } |
541 | } | 590 | } |
542 | }] | 591 | }] |
543 | }); | 592 | }); |
544 | - | ||
545 | - var uploadForm = Ext.create('Ext.form.FieldSet',{ | ||
546 | - title: 'File Source', | ||
547 | - items : [ | ||
548 | - { | ||
549 | - xtype: 'radiogroup', | 593 | + |
594 | + /* | ||
595 | + * FileSource Fieldset : global form | ||
596 | + */ | ||
597 | + var uploadForm = Ext.create('Ext.form.FieldSet',{ | ||
598 | + title: 'File Source', | ||
599 | + items : [{ | ||
600 | + xtype: 'radiogroup', | ||
550 | cls: 'x-check-group-alt', | 601 | cls: 'x-check-group-alt', |
551 | items: [ | 602 | items: [ |
552 | { boxLabel: 'Local', name: 'filesrc', inputValue: 'LOCAL', checked: true, | 603 | { boxLabel: 'Local', name: 'filesrc', inputValue: 'LOCAL', checked: true, |
553 | - listeners: | ||
554 | - { | 604 | + listeners: { |
555 | scope : this, | 605 | scope : this, |
556 | change: function (cb, nv, ov) { | 606 | change: function (cb, nv, ov) { |
557 | if (nv == ov) return; | 607 | if (nv == ov) return; |
@@ -559,67 +609,52 @@ Ext.define('amdaUI.UploadPanelUI', { | @@ -559,67 +609,52 @@ Ext.define('amdaUI.UploadPanelUI', { | ||
559 | var remote = Ext.getCmp(this.remoteUploadId); | 609 | var remote = Ext.getCmp(this.remoteUploadId); |
560 | if (nv) { | 610 | if (nv) { |
561 | remote.hide(); | 611 | remote.hide(); |
562 | - local.show(); | 612 | + local.show(); |
563 | } | 613 | } |
564 | else { | 614 | else { |
565 | local.hide(); | 615 | local.hide(); |
566 | - remote.show(); | 616 | + remote.show(); |
567 | } | 617 | } |
568 | } | 618 | } |
569 | } | 619 | } |
570 | }, | 620 | }, |
571 | - { boxLabel: 'URL', name: 'filesrc', inputValue: 'URL'} ] | 621 | + { boxLabel: 'URL', name: 'filesrc', inputValue: 'URL'}] |
572 | }] | 622 | }] |
573 | }); | 623 | }); |
574 | - | 624 | + |
625 | +/* | ||
626 | + * Panel Config | ||
627 | + */ | ||
575 | var myConf = | 628 | var myConf = |
576 | { | 629 | { |
577 | - title : title, | 630 | + title : config.title, |
578 | layout: {type: 'vbox', align: 'stretch'}, | 631 | layout: {type: 'vbox', align: 'stretch'}, |
632 | + autoScroll : true, | ||
579 | bodyStyle: { background : '#dfe8f6'}, | 633 | bodyStyle: { background : '#dfe8f6'}, |
580 | - items : [ | ||
581 | - uploadForm, | ||
582 | - localFile, | ||
583 | - remoteFile, | ||
584 | - fileFormat, | ||
585 | - timeFormat, | ||
586 | - { | ||
587 | - xtype: 'hidden', | ||
588 | - name: 'sampData', | ||
589 | - value: null | ||
590 | - }, | ||
591 | - { | ||
592 | - xtype: 'hidden', | ||
593 | - name: 'sampFileName', | ||
594 | - value: null, | ||
595 | - } | ||
596 | - ], | ||
597 | - buttons: [ | ||
598 | - { | 634 | + items : Ext.Array.merge( |
635 | + [ uploadForm, localFile, remoteFile, fileFormat ], | ||
636 | + this.specialItems ), | ||
637 | + buttons: [{ | ||
599 | text: 'Upload', | 638 | text: 'Upload', |
600 | - handler: function() | ||
601 | - { | 639 | + handler: function() { |
602 | this.postUpload(); | 640 | this.postUpload(); |
603 | }, | 641 | }, |
604 | scope : this | 642 | scope : this |
605 | }, | 643 | }, |
606 | { | 644 | { |
607 | text: 'Reset', | 645 | text: 'Reset', |
608 | - handler: function(){ | 646 | + handler: function() { |
609 | this.up('form').getForm().reset(); | 647 | this.up('form').getForm().reset(); |
610 | } | 648 | } |
611 | }], | 649 | }], |
612 | plugins: [{ptype: 'remoteSearchPlugin'}], | 650 | plugins: [{ptype: 'remoteSearchPlugin'}], |
613 | - listeners: | ||
614 | - { | ||
615 | - click: | ||
616 | - { | 651 | + listeners:{ |
652 | + click: { | ||
617 | element: 'el', | 653 | element: 'el', |
618 | - fn: function(e,t) { | 654 | + fn: function(e,t) { |
619 | var me = t, | 655 | var me = t, |
620 | text = me.getAttribute('amda_clicktip'); | 656 | text = me.getAttribute('amda_clicktip'); |
621 | - if (text) | ||
622 | - { | 657 | + if (text) { |
623 | e.preventDefault(); | 658 | e.preventDefault(); |
624 | AmdaAction.getInfo({name : text}, function(res,e) { | 659 | AmdaAction.getInfo({name : text}, function(res,e) { |
625 | if (res.success) myDesktopApp.infoMsg(res.result); | 660 | if (res.success) myDesktopApp.infoMsg(res.result); |
js/app/views/UploadUI.js
@@ -33,9 +33,9 @@ Ext.define('amdaUI.UploadUI', { | @@ -33,9 +33,9 @@ Ext.define('amdaUI.UploadUI', { | ||
33 | region: 'center', | 33 | region: 'center', |
34 | activeTab : 0, | 34 | activeTab : 0, |
35 | items : [ | 35 | items : [ |
36 | - { xtype: 'panelUpload', panelType : 'file'}, | ||
37 | - { xtype: 'panelUpload', panelType : 'timetable'}, | ||
38 | - { xtype: 'panelUpload', panelType : 'catalog'}] | 36 | + { xtype: 'panelUpload', panelType : 'file', title : 'File', localUploadName : 'localFileName', remoteUploadName : 'remoteFile'}, |
37 | + { xtype: 'panelUpload', panelType : 'timetable', title : 'Time Table', localUploadName : 'localTTName', remoteUploadName : 'remoteTT'}, | ||
38 | + { xtype: 'panelUpload', panelType : 'catalog', title : 'Catalog', localUploadName : 'localCatName', remoteUploadName :'remoteCat'}] | ||
39 | }, | 39 | }, |
40 | { | 40 | { |
41 | xtype: 'panel', | 41 | xtype: 'panel', |
php/classes/FilesMgr.php
@@ -113,19 +113,28 @@ class FilesMgr extends AmdaObjectMgr | @@ -113,19 +113,28 @@ class FilesMgr extends AmdaObjectMgr | ||
113 | else { | 113 | else { |
114 | $size = 1; | 114 | $size = 1; |
115 | } | 115 | } |
116 | - | ||
117 | - return array('type' => $data_type, 'size' => $size, 'n_records' => $n_recs); | 116 | + |
117 | + $units = exec('cdfvar_attr '.$this->fileName.' '.$cdfVarId.' UNITS'); | ||
118 | + $fillval = exec('cdfvar_attr '.$this->fileName.' '.$cdfVarId.' FILLVAL'); | ||
119 | + | ||
120 | + return array('type' => $data_type, 'size' => $size, 'n_records' => $n_recs, 'units' => $units, 'fillvalue' => $fillval); | ||
118 | } | 121 | } |
119 | 122 | ||
120 | - public function getCdfSampling() | ||
121 | - { | 123 | + public function getCdfSampling() { |
122 | copy($this->fileName, "temp.cdf"); | 124 | copy($this->fileName, "temp.cdf"); |
123 | exec('cdfsamplingfromdata ', $results); | 125 | exec('cdfsamplingfromdata ', $results); |
124 | unlink("temp.cdf"); | 126 | unlink("temp.cdf"); |
125 | 127 | ||
126 | return $results; | 128 | return $results; |
127 | } | 129 | } |
130 | + | ||
131 | + public function getCdfSamplings() { | ||
132 | + copy($this->fileName, "temp.cdf"); | ||
133 | + exec('cdfsamplingsfromdata ', $results); | ||
134 | + unlink("temp.cdf"); | ||
128 | 135 | ||
136 | + return $results; | ||
137 | + } | ||
129 | /* | 138 | /* |
130 | * CEF format processing | 139 | * CEF format processing |
131 | */ | 140 | */ |
@@ -214,7 +223,7 @@ class FilesMgr extends AmdaObjectMgr | @@ -214,7 +223,7 @@ class FilesMgr extends AmdaObjectMgr | ||
214 | { | 223 | { |
215 | exec('ncvarinfo '.$this->fileName.' '.$this->param2dd($varId), $results); | 224 | exec('ncvarinfo '.$this->fileName.' '.$this->param2dd($varId), $results); |
216 | $tempArr = explode(' ', $results[0]); | 225 | $tempArr = explode(' ', $results[0]); |
217 | - // data type | 226 | + // data type |
218 | switch ($tempArr[0]) { | 227 | switch ($tempArr[0]) { |
219 | case "5": $data_type = 'FLOAT'; | 228 | case "5": $data_type = 'FLOAT'; |
220 | break; | 229 | break; |
@@ -238,7 +247,15 @@ class FilesMgr extends AmdaObjectMgr | @@ -238,7 +247,15 @@ class FilesMgr extends AmdaObjectMgr | ||
238 | $size = 1; | 247 | $size = 1; |
239 | } | 248 | } |
240 | 249 | ||
241 | - return array('type' => $data_type, 'size' => $size, 'n_records' => $n_recs); | 250 | + $units = exec('ncvar_attr '.$this->fileName.' '.$this->param2dd($varId).' UNITS'); |
251 | + if (substr($units, 0,5) == 'error') $units = ''; | ||
252 | + | ||
253 | + $fillval = exec('ncvar_attr '.$this->fileName.' '.$this->param2dd($varId).' _Fillvalue'); // _Fillvalue | ||
254 | + if (substr($fillval, 0,5) == 'error') $fillval = exec('ncvar_attr '.$this->fileName.' '.$this->param2dd($varId).' Fillvalue'); | ||
255 | + if (substr($fillval, 0,5) == 'error') $fillval = exec('ncvar_attr '.$this->fileName.' '.$this->param2dd($varId).' Fillval'); | ||
256 | + if (substr($fillval, 0,5) == 'error') $fillval = ''; | ||
257 | + | ||
258 | + return array('type' => $data_type, 'size' => $size, 'n_records' => $n_recs, 'units' => $units, 'fillvalue' => $fillval); | ||
242 | } | 259 | } |
243 | 260 | ||
244 | protected function param2dd($paramID) | 261 | protected function param2dd($paramID) |
@@ -583,22 +600,30 @@ class FilesMgr extends AmdaObjectMgr | @@ -583,22 +600,30 @@ class FilesMgr extends AmdaObjectMgr | ||
583 | } | 600 | } |
584 | 601 | ||
585 | 602 | ||
586 | - protected function createFile($format) | 603 | + protected function createFile($format, $samplingType) |
587 | { | 604 | { |
588 | $newFile = $this->contentDom->createElement('file'); | 605 | $newFile = $this->contentDom->createElement('file'); |
589 | $newFile->setAttribute('xml:id', $this->fileId); | 606 | $newFile->setAttribute('xml:id', $this->fileId); |
590 | $newFile->setAttribute('name', $this->fileId); | 607 | $newFile->setAttribute('name', $this->fileId); |
591 | $newFile->setAttribute('format', $format); | 608 | $newFile->setAttribute('format', $format); |
592 | - | 609 | + |
610 | + $minSamp = $this->sampling; | ||
611 | + $maxSamp = $this->maxSampling; | ||
612 | + | ||
593 | switch ($format) | 613 | switch ($format) |
594 | { | 614 | { |
595 | case "cdf": | 615 | case "cdf": |
596 | $start_stop = explode(" ",$this->getCdfStartStop()); | 616 | $start_stop = explode(" ",$this->getCdfStartStop()); |
597 | - $result = $this->getCdfSampling(); | ||
598 | - //TODO process errors | ||
599 | - $minSamp = $result[count($result)-1]; | ||
600 | - //TODO if min & max | ||
601 | - $maxSamp = $minSamp; | 617 | + if ($minSamp < 0) { |
618 | + if ($samplingType == 'constant') { | ||
619 | + $result = $this->getCdfSampling(); | ||
620 | + //TODO process errors | ||
621 | + $minSamp = $result[count($result)-1]; | ||
622 | + $maxSamp = $minSamp; | ||
623 | + } else { | ||
624 | + // $result = $this->getCdfSamplings(); | ||
625 | + } | ||
626 | + } | ||
602 | break; | 627 | break; |
603 | case "txt": | 628 | case "txt": |
604 | $start_stop = explode(" ",$this->reformatTxt()); | 629 | $start_stop = explode(" ",$this->reformatTxt()); |
@@ -610,16 +635,14 @@ class FilesMgr extends AmdaObjectMgr | @@ -610,16 +635,14 @@ class FilesMgr extends AmdaObjectMgr | ||
610 | // Test if 'standard' meta exist in CEF | 635 | // Test if 'standard' meta exist in CEF |
611 | $cefMetaTest = $this->getCefStartStop(); | 636 | $cefMetaTest = $this->getCefStartStop(); |
612 | 637 | ||
613 | - if ($cefMetaTest != -1) | ||
614 | - { | 638 | + if ($cefMetaTest != -1) { |
615 | $cefStartStop = explode("/",$cefMetaTest); | 639 | $cefStartStop = explode("/",$cefMetaTest); |
616 | $start_stop[] = strtotime($cefStartStop[0]); | 640 | $start_stop[] = strtotime($cefStartStop[0]); |
617 | $start_stop[] = strtotime($cefStartStop[1]); | 641 | $start_stop[] = strtotime($cefStartStop[1]); |
618 | $result = $this->getCefSampling(); | 642 | $result = $this->getCefSampling(); |
619 | $minSamp = $result[count($result)-1]; | 643 | $minSamp = $result[count($result)-1]; |
620 | } | 644 | } |
621 | - else | ||
622 | - { | 645 | + else { |
623 | // no META data - so time processing | 646 | // no META data - so time processing |
624 | $timeInfo = $this->getCefTimeInfo(); | 647 | $timeInfo = $this->getCefTimeInfo(); |
625 | $timeInfoArr = explode(" ", $timeInfo); | 648 | $timeInfoArr = explode(" ", $timeInfo); |
@@ -633,8 +656,10 @@ class FilesMgr extends AmdaObjectMgr | @@ -633,8 +656,10 @@ class FilesMgr extends AmdaObjectMgr | ||
633 | case "vot" : | 656 | case "vot" : |
634 | $start_stop = explode(" ",$this->getVotFileMgr()->getStartStop()); | 657 | $start_stop = explode(" ",$this->getVotFileMgr()->getStartStop()); |
635 | $samplings = $this->getVotFileMgr()->getSamplings(); | 658 | $samplings = $this->getVotFileMgr()->getSamplings(); |
636 | - $minSamp = $samplings["minSampling"]; | ||
637 | - $maxSamp = $samplings["maxSampling"]; | 659 | + if ($minSamp < 0) { |
660 | + $minSamp = $samplings["minSampling"]; | ||
661 | + $maxSamp = $samplings["maxSampling"]; | ||
662 | + } | ||
638 | $desc = $this->getVotFileMgr()->getDescription(); | 663 | $desc = $this->getVotFileMgr()->getDescription(); |
639 | break; | 664 | break; |
640 | case "nc": | 665 | case "nc": |
@@ -644,11 +669,13 @@ class FilesMgr extends AmdaObjectMgr | @@ -644,11 +669,13 @@ class FilesMgr extends AmdaObjectMgr | ||
644 | return $ncInfo; | 669 | return $ncInfo; |
645 | } | 670 | } |
646 | $ncInfoArr = explode("#",$ncInfo); | 671 | $ncInfoArr = explode("#",$ncInfo); |
647 | - $start_stop = explode(":",$ncInfoArr[0]); | ||
648 | - //TODO process errors | ||
649 | - $minSamp = $ncInfoArr[1]; | ||
650 | - //TODO if min & max | ||
651 | - $maxSamp = $minSamp; | 672 | + $start_stop = explode(":",$ncInfoArr[0]); |
673 | + if ($minSamp < 0) { | ||
674 | + //TODO process errors | ||
675 | + $minSamp = $ncInfoArr[1]; | ||
676 | + //TODO if min & max | ||
677 | + $maxSamp = $minSamp; | ||
678 | + } | ||
652 | break; | 679 | break; |
653 | default: | 680 | default: |
654 | } | 681 | } |
@@ -1117,20 +1144,27 @@ class FilesMgr extends AmdaObjectMgr | @@ -1117,20 +1144,27 @@ class FilesMgr extends AmdaObjectMgr | ||
1117 | 1144 | ||
1118 | $format = $this->getFormat(); | 1145 | $format = $this->getFormat(); |
1119 | 1146 | ||
1120 | - if ($format === 'unknown') | ||
1121 | - { | 1147 | + if ($format === 'unknown') { |
1122 | unlink($this->fileName); | 1148 | unlink($this->fileName); |
1123 | return array('success' => false, 'error' => 'Sorry, unknown format of '.$fileName); | 1149 | return array('success' => false, 'error' => 'Sorry, unknown format of '.$fileName); |
1124 | } | 1150 | } |
1125 | 1151 | ||
1152 | + // if sampling is defined by user | ||
1153 | + if ($formats["samplingType"] == "manual") { | ||
1154 | + $this->sampling = $formats["min_sampling"]; | ||
1155 | + if ($formats["max_sampling"]) | ||
1156 | + $this->maxSampling = $formats["max_sampling"]; | ||
1157 | + else | ||
1158 | + $this->maxSampling = $this->sampling; | ||
1159 | + } | ||
1160 | + | ||
1161 | + | ||
1126 | if ($format == 'txt') | 1162 | if ($format == 'txt') |
1127 | { | 1163 | { |
1128 | - if ($formats["timeFormat"] == "user") | ||
1129 | - { | 1164 | + if ($formats["timeFormat"] == "user") { |
1130 | $res = $this->reformatTime($formats["nonStandard"], $formats["timeLength"], $formats["doy"]); | 1165 | $res = $this->reformatTime($formats["nonStandard"], $formats["timeLength"], $formats["doy"]); |
1131 | 1166 | ||
1132 | - if (!$res) | ||
1133 | - { | 1167 | + if (!$res) { |
1134 | unlink($this->fileName); | 1168 | unlink($this->fileName); |
1135 | return array('success' => false, 'error' => 'can\'t reformat time'); | 1169 | return array('success' => false, 'error' => 'can\'t reformat time'); |
1136 | } | 1170 | } |
@@ -1138,60 +1172,54 @@ class FilesMgr extends AmdaObjectMgr | @@ -1138,60 +1172,54 @@ class FilesMgr extends AmdaObjectMgr | ||
1138 | // check if file is not empty | 1172 | // check if file is not empty |
1139 | $vars = $this->getTxtColNumber(false); | 1173 | $vars = $this->getTxtColNumber(false); |
1140 | 1174 | ||
1141 | - if ($vars == -100) | ||
1142 | - { | 1175 | + if ($vars == -100) { |
1143 | return array('success' => false, 'error' => 'no such file'); | 1176 | return array('success' => false, 'error' => 'no such file'); |
1144 | } | 1177 | } |
1145 | 1178 | ||
1146 | - if ($vars == -1) | ||
1147 | - { | 1179 | + if ($vars == -1) { |
1148 | unlink($this->fileName); | 1180 | unlink($this->fileName); |
1149 | return array('success' => false, 'error' => 'while reading file'); | 1181 | return array('success' => false, 'error' => 'while reading file'); |
1150 | } | 1182 | } |
1151 | 1183 | ||
1152 | - if ($vars === 0) | ||
1153 | - { | 1184 | + if ($vars === 0) { |
1154 | unlink($this->fileName); | 1185 | unlink($this->fileName); |
1155 | return array('success' => false, 'error' => 'file contains no data'); | 1186 | return array('success' => false, 'error' => 'file contains no data'); |
1156 | } | 1187 | } |
1188 | + | ||
1189 | + // sampling is to be defined automatically | ||
1190 | + if ($this->sampling < 0) { | ||
1191 | + if ($formats["timeSampling"] == "constant") { | ||
1192 | + $this->sampling = $this->getTxtSampling(); | ||
1193 | + $this->maxSampling = $this->sampling; | ||
1194 | + } | ||
1195 | + else { | ||
1196 | + $samplings = $this->getTxtSamplings(); | ||
1197 | + $this->sampling = $samplings[0]; | ||
1198 | + $this->maxSampling = $samplings[1]; | ||
1199 | + } | ||
1157 | 1200 | ||
1158 | - if ($formats["timeSampling"] == "constant") | ||
1159 | - { | ||
1160 | - $this->sampling = $this->getTxtSampling(); | ||
1161 | - $this->maxSampling = $this->sampling; | ||
1162 | - } | ||
1163 | - else | ||
1164 | - { | ||
1165 | - $samplings = $this->getTxtSamplings(); | ||
1166 | - $this->sampling = $samplings[0]; | ||
1167 | - $this->maxSampling = $samplings[1]; | 1201 | + if ($this->sampling <= 0) { |
1202 | + unlink($this->fileName); | ||
1203 | + if ($this->sampling == -10) { | ||
1204 | + return array('success' => false, 'error' => 'Sorry, can\'t process'.$fileName.PHP_EOL.'. Check if there are non numeric chars in the data'); | ||
1205 | + } | ||
1206 | + return array('success' => false, 'error' => 'Sorry, can\'t process Time for '.$fileName.PHP_EOL.'. Check time format, start time (> 1970-01-01) or sampling time (>= 1s)'); | ||
1207 | + } | ||
1168 | } | 1208 | } |
1169 | - | ||
1170 | - if ($this->sampling <= 0) | ||
1171 | - { | ||
1172 | - unlink($this->fileName); | ||
1173 | - if ($this->sampling == -10) | ||
1174 | - { | ||
1175 | - return array('success' => false, 'error' => 'Sorry, can\'t process'.$fileName.PHP_EOL.'. Check if there are non numeric chars in the data'); | ||
1176 | - } | ||
1177 | - return array('success' => false, 'error' => 'Sorry, can\'t process Time for '.$fileName.PHP_EOL.'. Check time format, start time (> 1970-01-01) or sampling time (>= 1s)'); | ||
1178 | - } | ||
1179 | } | 1209 | } |
1180 | 1210 | ||
1181 | if ($format == 'nc') | 1211 | if ($format == 'nc') |
1182 | { | 1212 | { |
1183 | $status = $this->reformatNcTime(); | 1213 | $status = $this->reformatNcTime(); |
1184 | - if ($status <= 0) | ||
1185 | - { | 1214 | + if ($status <= 0) { |
1186 | unlink($this->fileName); | 1215 | unlink($this->fileName); |
1187 | return array('success' => false, 'error' => 'error '.$timeFormat.PHP_EOL.'Time Format problem'); | 1216 | return array('success' => false, 'error' => 'error '.$timeFormat.PHP_EOL.'Time Format problem'); |
1188 | } | 1217 | } |
1189 | } | 1218 | } |
1190 | 1219 | ||
1191 | //create new file tag with all attributes and add it to the content DOM | 1220 | //create new file tag with all attributes and add it to the content DOM |
1192 | - $newFile = $this->createFile($format); | ||
1193 | - if (is_int($newFile) && ($newFile < 0)) | ||
1194 | - { | 1221 | + $newFile = $this->createFile($format, $formats["timeSampling"]); |
1222 | + if (is_int($newFile) && ($newFile < 0)) { | ||
1195 | unlink($this->fileName); | 1223 | unlink($this->fileName); |
1196 | return array( 'success' => false, 'file' => $fileName); | 1224 | return array( 'success' => false, 'file' => $fileName); |
1197 | } | 1225 | } |
@@ -1207,8 +1235,8 @@ class FilesMgr extends AmdaObjectMgr | @@ -1207,8 +1235,8 @@ class FilesMgr extends AmdaObjectMgr | ||
1207 | $mask->appendChild($newFile); | 1235 | $mask->appendChild($newFile); |
1208 | 1236 | ||
1209 | $files = $mask->getElementsByTagName("file"); | 1237 | $files = $mask->getElementsByTagName("file"); |
1210 | - foreach ($files as $file) | ||
1211 | - { | 1238 | + |
1239 | + foreach ($files as $file) { | ||
1212 | $starts[] = $file->getAttribute("start"); | 1240 | $starts[] = $file->getAttribute("start"); |
1213 | $stops[] = $file->getAttribute("stop"); | 1241 | $stops[] = $file->getAttribute("stop"); |
1214 | } | 1242 | } |
@@ -1219,8 +1247,7 @@ class FilesMgr extends AmdaObjectMgr | @@ -1219,8 +1247,7 @@ class FilesMgr extends AmdaObjectMgr | ||
1219 | } | 1247 | } |
1220 | } | 1248 | } |
1221 | // no corresponding masks => add to fileList | 1249 | // no corresponding masks => add to fileList |
1222 | - if (!$isMask) | ||
1223 | - { | 1250 | + if (!$isMask) { |
1224 | $filesList = $this->contentDom->getElementById($this->contentRootId); | 1251 | $filesList = $this->contentDom->getElementById($this->contentRootId); |
1225 | $filesList->appendChild($newFile); | 1252 | $filesList->appendChild($newFile); |
1226 | } | 1253 | } |
@@ -1230,8 +1257,7 @@ class FilesMgr extends AmdaObjectMgr | @@ -1230,8 +1257,7 @@ class FilesMgr extends AmdaObjectMgr | ||
1230 | //if mask exists - add to data base | 1257 | //if mask exists - add to data base |
1231 | $myBaseManager = new BaseManager(); | 1258 | $myBaseManager = new BaseManager(); |
1232 | $mask = $myBaseManager->addFile($fileName); | 1259 | $mask = $myBaseManager->addFile($fileName); |
1233 | - if ($mask != null) | ||
1234 | - { | 1260 | + if ($mask != null) { |
1235 | $startstop = $myBaseManager->getStartStop($myBaseManager->getVi($mask)); | 1261 | $startstop = $myBaseManager->getStartStop($myBaseManager->getVi($mask)); |
1236 | $myParamMgr = new DerivedParamMgr('myDataParam'); | 1262 | $myParamMgr = new DerivedParamMgr('myDataParam'); |
1237 | $myParamMgr->updateMydata($mask,$startstop); | 1263 | $myParamMgr->updateMydata($mask,$startstop); |
php/src/Makefile
@@ -4,8 +4,8 @@ CFLAGS = -ggdb -DLINUX -m64 -march=core2 -fPIC -Dlinux -D_REENTRANT -malign-doub | @@ -4,8 +4,8 @@ CFLAGS = -ggdb -DLINUX -m64 -march=core2 -fPIC -Dlinux -D_REENTRANT -malign-doub | ||
4 | CC = gcc | 4 | CC = gcc |
5 | 5 | ||
6 | EXE = nctimestring2double nctimeinfo getncvars ncvarinfo \ | 6 | EXE = nctimestring2double nctimeinfo getncvars ncvarinfo \ |
7 | - ncinfo_remote \ | ||
8 | - cdfinfo cdfvarinfo cdfstartstopfromdata cdfsamplingfromdata \ | 7 | + ncinfo_remote ncvar_attr \ |
8 | + cdfinfo cdfvarinfo cdfstartstopfromdata cdfsamplingfromdata cdfvar_attr \ | ||
9 | AddVI | 9 | AddVI |
10 | 10 | ||
11 | lib: ${EXE} | 11 | lib: ${EXE} |
@@ -14,8 +14,11 @@ AddVI: AddVI.c | @@ -14,8 +14,11 @@ AddVI: AddVI.c | ||
14 | ${CC} ${CFLAGS} -o AddVI AddVI.c ${INC} ${LIB} -lDDClientLibC | 14 | ${CC} ${CFLAGS} -o AddVI AddVI.c ${INC} ${LIB} -lDDClientLibC |
15 | 15 | ||
16 | ncinfo_remote: ncinfo_remote.c | 16 | ncinfo_remote: ncinfo_remote.c |
17 | - ${CC} ${CFLAGS} -o ncinfo_remote ncinfo_remote.c ${INC} ${LIB} -lnetcdf | ||
18 | - | 17 | + ${CC} ${CFLAGS} -o ncinfo_remote ncinfo_remote.c ${INC} ${LIB} -lnetcdf |
18 | + | ||
19 | +ncvar_attr: ncvar_attr.c | ||
20 | + ${CC} ${CFLAGS} -o ncvar_attr ncvar_attr.c ${INC} ${LIB} -lnetcdf | ||
21 | + | ||
19 | nctimestring2double: nctimestring2double.c | 22 | nctimestring2double: nctimestring2double.c |
20 | ${CC} ${CFLAGS} -o nctimestring2double nctimestring2double.c ${INC} ${LIB} -lDDClientLibC -lnetcdf | 23 | ${CC} ${CFLAGS} -o nctimestring2double nctimestring2double.c ${INC} ${LIB} -lDDClientLibC -lnetcdf |
21 | 24 | ||
@@ -48,7 +51,10 @@ cdfinfo: cdfinfo.c | @@ -48,7 +51,10 @@ cdfinfo: cdfinfo.c | ||
48 | 51 | ||
49 | cdfvarinfo: cdfvarinfo.c | 52 | cdfvarinfo: cdfvarinfo.c |
50 | ${CC} ${CFLAGS} -o cdfvarinfo cdfvarinfo.c ${INC} ${LIB} -lcdf | 53 | ${CC} ${CFLAGS} -o cdfvarinfo cdfvarinfo.c ${INC} ${LIB} -lcdf |
51 | - | 54 | + |
55 | +cdfvar_attr: cdfvar_attr.c | ||
56 | + ${CC} ${CFLAGS} -o cdfvar_attr cdfvar_attr.c ${INC} ${LIB} -lcdf | ||
57 | + | ||
52 | cdfstartstopfromdata: cdfstartstopfromdata.c | 58 | cdfstartstopfromdata: cdfstartstopfromdata.c |
53 | ${CC} ${CFLAGS} -o cdfstartstopfromdata cdfstartstopfromdata.c ${INC} ${LIB} -lcdf | 59 | ${CC} ${CFLAGS} -o cdfstartstopfromdata cdfstartstopfromdata.c ${INC} ${LIB} -lcdf |
54 | 60 |
php/src/cdfsamplingfromdata.c
1 | -/* $Id: timeResFromData.c,v 1.1 2010/08/31 10:32:55 budnik Exp $ */ | 1 | +/* $Id: cdf constant samplig from data $ */ |
2 | 2 | ||
3 | -/** @file timeResFromData.c | ||
4 | -* @brief Function to get CDAWEB dataset sampling times from data files | ||
5 | -*/ | ||
6 | #include <stdio.h> | 3 | #include <stdio.h> |
7 | #include <stdlib.h> | 4 | #include <stdlib.h> |
8 | #include <cdf.h> | 5 | #include <cdf.h> |
@@ -46,48 +43,18 @@ void cdf_handle_error(CDFstatus status) | @@ -46,48 +43,18 @@ void cdf_handle_error(CDFstatus status) | ||
46 | exit(1); | 43 | exit(1); |
47 | } | 44 | } |
48 | 45 | ||
49 | -void find_min(int* delta, int nRecs, int minFalse, int* minVal) | ||
50 | -{ | ||
51 | - int i, n, min; | ||
52 | - | ||
53 | - n = 1; | ||
54 | - i = 0; | ||
55 | - while (abs(delta[i]) <= minFalse) i++; | ||
56 | - if (i < nRecs) { | ||
57 | - min = abs(delta[i]); | ||
58 | - // printf(" first MIN %d \n", min); | ||
59 | - for (i = 1; i < nRecs; i++) { | ||
60 | - // printf(" delta %d \n", delta[i]); | ||
61 | - if (delta[i] == min) n++; | ||
62 | - if (delta[i] < min && delta[i] > minFalse) { | ||
63 | - min = delta[i]; | ||
64 | - n = 1; | ||
65 | - } | ||
66 | - } | ||
67 | - } else { | ||
68 | - min = -10; | ||
69 | - n = nRecs; | ||
70 | - } | ||
71 | - | ||
72 | - minVal[0] = min; | ||
73 | - minVal[1] = n; | ||
74 | - printf(" MIN %d %d\n", min, n); | ||
75 | -} | ||
76 | - | ||
77 | int main(int argc, char *argv[]) | 46 | int main(int argc, char *argv[]) |
78 | { | 47 | { |
79 | - long RecStart = 0, RecCount, RecInt = 1; | 48 | + long RecStart = 0, RecCount = 2, RecInt = 1; |
80 | long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1}; | 49 | long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1}; |
81 | long varN = -1; | 50 | long varN = -1; |
82 | long datatype = 0, attrN, maxEntry; | 51 | long datatype = 0, attrN, maxEntry; |
83 | CDFstatus cstatus; // CDF status code | 52 | CDFstatus cstatus; // CDF status code |
84 | CDFid id; | 53 | CDFid id; |
85 | double *value; | 54 | double *value; |
86 | - int *delta; | ||
87 | int i, minFalse = 0, numEnough; | 55 | int i, minFalse = 0, numEnough; |
88 | - int min[2] = {0, 0}; | ||
89 | char attrValue[300]; | 56 | char attrValue[300]; |
90 | - float Sampling; | 57 | + int sampling; |
91 | double epoch16[2], dbl_value, dbl_value_; | 58 | double epoch16[2], dbl_value, dbl_value_; |
92 | long year, month, day, hour, minute, sec, msec, mksec, nsec, psec; | 59 | long year, month, day, hour, minute, sec, msec, mksec, nsec, psec; |
93 | long long *int_value; | 60 | long long *int_value; |
@@ -106,26 +73,27 @@ int main(int argc, char *argv[]) | @@ -106,26 +73,27 @@ int main(int argc, char *argv[]) | ||
106 | if ((cstatus = CDFlib(SELECT_, zVAR_, varN, | 73 | if ((cstatus = CDFlib(SELECT_, zVAR_, varN, |
107 | GET_, zVAR_DATATYPE_, &datatype, NULL_)) != CDF_OK) | 74 | GET_, zVAR_DATATYPE_, &datatype, NULL_)) != CDF_OK) |
108 | cdf_handle_error (cstatus); | 75 | cdf_handle_error (cstatus); |
109 | - // if (datatype == CDF_EPOCH16) break; | ||
110 | } | 76 | } |
77 | + | ||
111 | fprintf(stdout,"DATATYPE %d %d\n", varN, datatype); | 78 | fprintf(stdout,"DATATYPE %d %d\n", varN, datatype); |
112 | if ((cstatus = CDFlib(SELECT_, zVAR_, varN, | 79 | if ((cstatus = CDFlib(SELECT_, zVAR_, varN, |
113 | GET_, zVAR_MAXREC_, &CDFmaxRec, NULL_)) != CDF_OK) | 80 | GET_, zVAR_MAXREC_, &CDFmaxRec, NULL_)) != CDF_OK) |
114 | cdf_handle_error (cstatus); | 81 | cdf_handle_error (cstatus); |
115 | 82 | ||
116 | fprintf(stdout,"Max Recs %d\n", CDFmaxRec+1); | 83 | fprintf(stdout,"Max Recs %d\n", CDFmaxRec+1); |
117 | - if (CDFmaxRec < 10) { | 84 | + |
85 | + if (CDFmaxRec < 3) { | ||
118 | fprintf(stdout," %d\n", badFile); | 86 | fprintf(stdout," %d\n", badFile); |
119 | exit (0); | 87 | exit (0); |
120 | } | 88 | } |
121 | 89 | ||
122 | if ( datatype == CDF_TIME_TT2000 ) { | 90 | if ( datatype == CDF_TIME_TT2000 ) { |
123 | - int_value = (long long *) malloc (sizeof(long long) * (CDFmaxRec+1)); | 91 | + int_value = (long long *) malloc (sizeof(long long) * (RecCount+1)); |
124 | /******************* Get Epoch *************************/ | 92 | /******************* Get Epoch *************************/ |
125 | if ((cstatus = CDFlib (SELECT_, | 93 | if ((cstatus = CDFlib (SELECT_, |
126 | zVAR_, varN, | 94 | zVAR_, varN, |
127 | zVAR_RECNUMBER_, RecStart, | 95 | zVAR_RECNUMBER_, RecStart, |
128 | - zVAR_RECCOUNT_, CDFmaxRec+1, | 96 | + zVAR_RECCOUNT_, RecCount + 1, |
129 | zVAR_RECINTERVAL_, RecInt, | 97 | zVAR_RECINTERVAL_, RecInt, |
130 | zVAR_DIMINDICES_, indices, | 98 | zVAR_DIMINDICES_, indices, |
131 | zVAR_DIMCOUNTS_, counts, | 99 | zVAR_DIMCOUNTS_, counts, |
@@ -134,12 +102,12 @@ int main(int argc, char *argv[]) | @@ -134,12 +102,12 @@ int main(int argc, char *argv[]) | ||
134 | cdf_handle_error (cstatus); | 102 | cdf_handle_error (cstatus); |
135 | } | 103 | } |
136 | else { | 104 | else { |
137 | - value = (double *)malloc(sizeof(double)* (CDFmaxRec+1)*((datatype == CDF_EPOCH16)+1)); | 105 | + value = (double *)malloc(sizeof(double)* (RecCount + 1)*((datatype == CDF_EPOCH16)+1)); |
138 | /******************* Get Epoch *************************/ | 106 | /******************* Get Epoch *************************/ |
139 | if ((cstatus = CDFlib (SELECT_, | 107 | if ((cstatus = CDFlib (SELECT_, |
140 | zVAR_, varN, | 108 | zVAR_, varN, |
141 | zVAR_RECNUMBER_, RecStart, | 109 | zVAR_RECNUMBER_, RecStart, |
142 | - zVAR_RECCOUNT_, CDFmaxRec+1, | 110 | + zVAR_RECCOUNT_, RecCount + 1, |
143 | zVAR_RECINTERVAL_, RecInt, | 111 | zVAR_RECINTERVAL_, RecInt, |
144 | zVAR_DIMINDICES_, indices, | 112 | zVAR_DIMINDICES_, indices, |
145 | zVAR_DIMCOUNTS_, counts, | 113 | zVAR_DIMCOUNTS_, counts, |
@@ -147,46 +115,35 @@ int main(int argc, char *argv[]) | @@ -147,46 +115,35 @@ int main(int argc, char *argv[]) | ||
147 | GET_, zVAR_HYPERDATA_, value, NULL_)) != CDF_OK) | 115 | GET_, zVAR_HYPERDATA_, value, NULL_)) != CDF_OK) |
148 | cdf_handle_error (cstatus); | 116 | cdf_handle_error (cstatus); |
149 | } | 117 | } |
150 | - | ||
151 | 118 | ||
152 | - | ||
153 | - delta = (int *)malloc(sizeof(int)* CDFmaxRec); | ||
154 | - for (i = 1; i < CDFmaxRec+1; i++) | ||
155 | - { | 119 | + |
156 | if (datatype == CDF_TIME_TT2000) { | 120 | if (datatype == CDF_TIME_TT2000) { |
157 | - dbl_value_ = CDF_TT2000_to_UTC_EPOCH(int_value[i-1]); | ||
158 | - dbl_value = CDF_TT2000_to_UTC_EPOCH(int_value[i]); | ||
159 | - delta[i-1] = (int)(dbl_value - dbl_value_ + 50)/100; | 121 | + dbl_value_ = CDF_TT2000_to_UTC_EPOCH(int_value[0]); |
122 | + dbl_value = CDF_TT2000_to_UTC_EPOCH(int_value[1]); | ||
123 | + sampling = (int)(dbl_value - dbl_value_ + 50)/100; | ||
160 | } | 124 | } |
161 | else { | 125 | else { |
162 | if (datatype == CDF_EPOCH16) { | 126 | if (datatype == CDF_EPOCH16) { |
163 | - epoch16[0] = value[2*(i-1)]; | ||
164 | - epoch16[1] = value[2*(i-1)+1]; | 127 | + epoch16[0] = value[0]; |
128 | + epoch16[1] = value[1]; | ||
165 | EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &minute, &sec, &msec, &mksec, &nsec, &psec); | 129 | EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &minute, &sec, &msec, &mksec, &nsec, &psec); |
166 | - value[i-1] = computeEPOCH(year, month, day, hour, minute, sec, msec); | ||
167 | - epoch16[0] = value[2*i]; | ||
168 | - epoch16[1] = value[2*i+1]; | 130 | + value[0] = computeEPOCH(year, month, day, hour, minute, sec, msec); |
131 | + epoch16[0] = value[2]; | ||
132 | + epoch16[1] = value[3]; | ||
169 | EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &minute, &sec, &msec, &mksec, &nsec, &psec); | 133 | EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &minute, &sec, &msec, &mksec, &nsec, &psec); |
170 | - value[i] = computeEPOCH(year, month, day, hour, minute, sec, msec); | 134 | + value[1] = computeEPOCH(year, month, day, hour, minute, sec, msec); |
171 | } | 135 | } |
172 | - delta[i-1] = (int)(value[i] - value[i-1] + 50)/100; | 136 | + sampling = (int)(value[1] - value[0] + 50)/100; |
173 | } | 137 | } |
174 | - } | 138 | + |
175 | // fprintf(stdout,"value %f\n", value[11]-value[10]); | 139 | // fprintf(stdout,"value %f\n", value[11]-value[10]); |
176 | if (datatype == CDF_TIME_TT2000) free(int_value); | 140 | if (datatype == CDF_TIME_TT2000) free(int_value); |
177 | else free(value); | 141 | else free(value); |
178 | - // fprintf(stdout,"delta %d\n", delta[0]); | ||
179 | - numEnough = CDFmaxRec/10; | ||
180 | - while (min[1] < numEnough) { | ||
181 | - fprintf(stdout,"minFalse %d\n", minFalse); | ||
182 | - find_min(delta, CDFmaxRec, minFalse, min); | ||
183 | - minFalse = min[0]; | ||
184 | - } | 142 | + |
185 | 143 | ||
186 | - free(delta); | ||
187 | if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK) | 144 | if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK) |
188 | cdf_handle_error (cstatus); | 145 | cdf_handle_error (cstatus); |
189 | 146 | ||
190 | // fprintf(stdout,"%d %f\n",min[1], (float)min[0]/100.0); | 147 | // fprintf(stdout,"%d %f\n",min[1], (float)min[0]/100.0); |
191 | - fprintf(stdout,"%f\n",(float)min[0]/10.0); | 148 | + fprintf(stdout,"%f\n",(float)sampling/10.0); |
192 | } | 149 | } |
@@ -0,0 +1,192 @@ | @@ -0,0 +1,192 @@ | ||
1 | +/* $Id: timeResFromData.c,v 1.1 2010/08/31 10:32:55 budnik Exp $ */ | ||
2 | + | ||
3 | +/** @file timeResFromData.c | ||
4 | +* @brief Function to get CDAWEB dataset sampling times from data files | ||
5 | +*/ | ||
6 | +#include <stdio.h> | ||
7 | +#include <stdlib.h> | ||
8 | +#include <cdf.h> | ||
9 | +#include <string.h> | ||
10 | +#include <time.h> | ||
11 | +#include <math.h> | ||
12 | + | ||
13 | +#define fileName "temp.cdf" | ||
14 | +#define badFile -100 | ||
15 | + | ||
16 | +/************************************* | ||
17 | + Global variables and structures | ||
18 | +**************************************/ | ||
19 | +long CDFDims, // Number of dimensions in a CDF file | ||
20 | + CDFVars, // Number of variables in a CDF file | ||
21 | + CDFDimSizes[CDF_MAX_DIMS], // Dimension Sizes in a CDF file | ||
22 | + CDFencoding, // Data encoding | ||
23 | + CDFmajority, // Variable majority | ||
24 | + CDFmaxRec, // max Record number | ||
25 | + CDFAttrs; // number of CDF Attributes | ||
26 | +// CDFdatatype; | ||
27 | + | ||
28 | +struct cdfvar { // CDF variable structure | ||
29 | + char name[CDF_VAR_NAME_LEN+1]; | ||
30 | + long num; //variable number | ||
31 | + long datatype; | ||
32 | + long numElem; // variable dimensionality | ||
33 | + long recVariance; // variable rec Variance | ||
34 | + long dimVariances[CDF_MAX_DIMS]; // # of data values in dimSizes | ||
35 | +} cdfVar; | ||
36 | + | ||
37 | +/*-------------------------------------------------------------------------- | ||
38 | + * Handles a CDF error. | ||
39 | + *--------------------------------------------------------------------------*/ | ||
40 | +void cdf_handle_error(CDFstatus status) | ||
41 | +{ | ||
42 | + char message[CDF_STATUSTEXT_LEN+1]; | ||
43 | + | ||
44 | + CDFerror (status, message); /* Get the appropriate message */ | ||
45 | + fprintf (stderr, "%s\n", message); | ||
46 | + exit(1); | ||
47 | +} | ||
48 | + | ||
49 | +void find_min(int* delta, int nRecs, int minFalse, int* minVal) | ||
50 | +{ | ||
51 | + int i, n, min; | ||
52 | + | ||
53 | + n = 1; | ||
54 | + i = 0; | ||
55 | + while (abs(delta[i]) <= minFalse) i++; | ||
56 | + if (i < nRecs) { | ||
57 | + min = abs(delta[i]); | ||
58 | + // printf(" first MIN %d \n", min); | ||
59 | + for (i = 1; i < nRecs; i++) { | ||
60 | + // printf(" delta %d \n", delta[i]); | ||
61 | + if (delta[i] == min) n++; | ||
62 | + if (delta[i] < min && delta[i] > minFalse) { | ||
63 | + min = delta[i]; | ||
64 | + n = 1; | ||
65 | + } | ||
66 | + } | ||
67 | + } else { | ||
68 | + min = -10; | ||
69 | + n = nRecs; | ||
70 | + } | ||
71 | + | ||
72 | + minVal[0] = min; | ||
73 | + minVal[1] = n; | ||
74 | + printf(" MIN %d %d\n", min, n); | ||
75 | +} | ||
76 | + | ||
77 | +int main(int argc, char *argv[]) | ||
78 | +{ | ||
79 | + long RecStart = 0, RecCount, RecInt = 1; | ||
80 | + long indices[1] = {0}, intervals[1] = {1}, counts[1] = {1}; | ||
81 | + long varN = -1; | ||
82 | + long datatype = 0, attrN, maxEntry; | ||
83 | + CDFstatus cstatus; // CDF status code | ||
84 | + CDFid id; | ||
85 | + double *value; | ||
86 | + int *delta; | ||
87 | + int i, minFalse = 0, numEnough; | ||
88 | + int min[2] = {0, 0}; | ||
89 | + char attrValue[300]; | ||
90 | + float Sampling; | ||
91 | + double epoch16[2], dbl_value, dbl_value_; | ||
92 | + long year, month, day, hour, minute, sec, msec, mksec, nsec, psec; | ||
93 | + long long *int_value; | ||
94 | + | ||
95 | +/*********************** Open CDF file *****************************/ | ||
96 | + if ((cstatus = CDFopen(fileName, &id)) != CDF_OK) | ||
97 | + cdf_handle_error(cstatus); | ||
98 | + | ||
99 | +/*********** treat all vars as zVars with eliminated false dimensionality and get Nrecs **********/ | ||
100 | + | ||
101 | + if ((cstatus = CDFlib(SELECT_, CDF_zMODE_, zMODEon2, NULL_)) != CDF_OK) | ||
102 | + cdf_handle_error (cstatus); | ||
103 | + | ||
104 | + while (datatype != CDF_EPOCH && datatype != CDF_EPOCH16 && datatype != CDF_TIME_TT2000){ | ||
105 | + varN++; | ||
106 | + if ((cstatus = CDFlib(SELECT_, zVAR_, varN, | ||
107 | + GET_, zVAR_DATATYPE_, &datatype, NULL_)) != CDF_OK) | ||
108 | + cdf_handle_error (cstatus); | ||
109 | + // if (datatype == CDF_EPOCH16) break; | ||
110 | + } | ||
111 | + fprintf(stdout,"DATATYPE %d %d\n", varN, datatype); | ||
112 | + if ((cstatus = CDFlib(SELECT_, zVAR_, varN, | ||
113 | + GET_, zVAR_MAXREC_, &CDFmaxRec, NULL_)) != CDF_OK) | ||
114 | + cdf_handle_error (cstatus); | ||
115 | + | ||
116 | + fprintf(stdout,"Max Recs %d\n", CDFmaxRec+1); | ||
117 | + if (CDFmaxRec < 10) { | ||
118 | + fprintf(stdout," %d\n", badFile); | ||
119 | + exit (0); | ||
120 | + } | ||
121 | + | ||
122 | + if ( datatype == CDF_TIME_TT2000 ) { | ||
123 | + int_value = (long long *) malloc (sizeof(long long) * (CDFmaxRec+1)); | ||
124 | + /******************* Get Epoch *************************/ | ||
125 | + if ((cstatus = CDFlib (SELECT_, | ||
126 | + zVAR_, varN, | ||
127 | + zVAR_RECNUMBER_, RecStart, | ||
128 | + zVAR_RECCOUNT_, CDFmaxRec+1, | ||
129 | + zVAR_RECINTERVAL_, RecInt, | ||
130 | + zVAR_DIMINDICES_, indices, | ||
131 | + zVAR_DIMCOUNTS_, counts, | ||
132 | + zVAR_DIMINTERVALS_, intervals, | ||
133 | + GET_, zVAR_HYPERDATA_, int_value, NULL_)) != CDF_OK) | ||
134 | + cdf_handle_error (cstatus); | ||
135 | + } | ||
136 | + else { | ||
137 | + value = (double *)malloc(sizeof(double)* (CDFmaxRec+1)*((datatype == CDF_EPOCH16)+1)); | ||
138 | + /******************* Get Epoch *************************/ | ||
139 | + if ((cstatus = CDFlib (SELECT_, | ||
140 | + zVAR_, varN, | ||
141 | + zVAR_RECNUMBER_, RecStart, | ||
142 | + zVAR_RECCOUNT_, CDFmaxRec+1, | ||
143 | + zVAR_RECINTERVAL_, RecInt, | ||
144 | + zVAR_DIMINDICES_, indices, | ||
145 | + zVAR_DIMCOUNTS_, counts, | ||
146 | + zVAR_DIMINTERVALS_, intervals, | ||
147 | + GET_, zVAR_HYPERDATA_, value, NULL_)) != CDF_OK) | ||
148 | + cdf_handle_error (cstatus); | ||
149 | + } | ||
150 | + | ||
151 | + | ||
152 | + | ||
153 | + delta = (int *)malloc(sizeof(int)* CDFmaxRec); | ||
154 | + for (i = 1; i < CDFmaxRec+1; i++) | ||
155 | + { | ||
156 | + if (datatype == CDF_TIME_TT2000) { | ||
157 | + dbl_value_ = CDF_TT2000_to_UTC_EPOCH(int_value[i-1]); | ||
158 | + dbl_value = CDF_TT2000_to_UTC_EPOCH(int_value[i]); | ||
159 | + delta[i-1] = (int)(dbl_value - dbl_value_ + 50)/100; | ||
160 | + } | ||
161 | + else { | ||
162 | + if (datatype == CDF_EPOCH16) { | ||
163 | + epoch16[0] = value[2*(i-1)]; | ||
164 | + epoch16[1] = value[2*(i-1)+1]; | ||
165 | + EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &minute, &sec, &msec, &mksec, &nsec, &psec); | ||
166 | + value[i-1] = computeEPOCH(year, month, day, hour, minute, sec, msec); | ||
167 | + epoch16[0] = value[2*i]; | ||
168 | + epoch16[1] = value[2*i+1]; | ||
169 | + EPOCH16breakdown(epoch16, &year, &month, &day, &hour, &minute, &sec, &msec, &mksec, &nsec, &psec); | ||
170 | + value[i] = computeEPOCH(year, month, day, hour, minute, sec, msec); | ||
171 | + } | ||
172 | + delta[i-1] = (int)(value[i] - value[i-1] + 50)/100; | ||
173 | + } | ||
174 | + } | ||
175 | + // fprintf(stdout,"value %f\n", value[11]-value[10]); | ||
176 | + if (datatype == CDF_TIME_TT2000) free(int_value); | ||
177 | + else free(value); | ||
178 | + // fprintf(stdout,"delta %d\n", delta[0]); | ||
179 | + numEnough = CDFmaxRec/10; | ||
180 | + while (min[1] < numEnough) { | ||
181 | + fprintf(stdout,"minFalse %d\n", minFalse); | ||
182 | + find_min(delta, CDFmaxRec, minFalse, min); | ||
183 | + minFalse = min[0]; | ||
184 | + } | ||
185 | + | ||
186 | + free(delta); | ||
187 | + if ((cstatus = CDFlib(CLOSE_, CDF_, NULL_)) != CDF_OK) | ||
188 | + cdf_handle_error (cstatus); | ||
189 | + | ||
190 | + // fprintf(stdout,"%d %f\n",min[1], (float)min[0]/100.0); | ||
191 | + fprintf(stdout,"%f\n",(float)min[0]/10.0); | ||
192 | +} |
@@ -0,0 +1,292 @@ | @@ -0,0 +1,292 @@ | ||
1 | +/** | ||
2 | +* @file cdfvarinfo.c | ||
3 | +* @version $Id: cdfvarinfo.c,v 1.1 2010/08/31 10:32:55 budnik Exp $ | ||
4 | +* @brief | ||
5 | +*/ | ||
6 | + | ||
7 | + | ||
8 | +#include <stdio.h> | ||
9 | +#include <stdlib.h> | ||
10 | +#include <cdf.h> | ||
11 | +#include <string.h> | ||
12 | + | ||
13 | +#define MAX_FILE_NAME_LEN 120 | ||
14 | + | ||
15 | +void cdf_status_handler (CDFstatus, char *); | ||
16 | +char * cdf_str_datatype (long); | ||
17 | + | ||
18 | +typedef struct cdfvar { /* CDF variable structure */ | ||
19 | + char name[CDF_VAR_NAME_LEN+1]; | ||
20 | + long datatype; | ||
21 | + long numElements; /* string length for CDF_CHAR, 1 otherwise */ | ||
22 | + long dimensionality; /* variable dimensionality */ | ||
23 | + long dimSizes[CDF_MAX_DIMS]; /* variable dimension sizes */ | ||
24 | + long recVariance; /* record variance */ | ||
25 | + long numRecs; /* # of records this variable contains */ | ||
26 | +} CDFvar; | ||
27 | + | ||
28 | +int main(int argc, char *argv[]) | ||
29 | +{ | ||
30 | + | ||
31 | + CDFvar var; | ||
32 | + CDFid id; /* CDF file ID */ | ||
33 | + CDFstatus status; /* CDF status code */ | ||
34 | + | ||
35 | + long nZvars, nAttrs, attrId, attrScope, varId, datatype, numElements; | ||
36 | + char attrName[CDF_ATTR_NAME_LEN+1]; | ||
37 | + char fileName[MAX_FILE_NAME_LEN], varName[CDF_VAR_NAME_LEN+1], attName[CDF_ATTR_NAME_LEN+1]; | ||
38 | + char msg[100]; | ||
39 | + int dummy, i; | ||
40 | + char *cPtr; | ||
41 | + signed char *scPtr; | ||
42 | + short *sPtr; | ||
43 | + int *iPtr; | ||
44 | + float *fPtr; | ||
45 | + double *dPtr; | ||
46 | + | ||
47 | + | ||
48 | + if (argc <= 3) | ||
49 | + exit(0); /* CDF input file name not specified */ | ||
50 | + else { | ||
51 | + strcpy(fileName, argv[1]); /* Get the input file name */ | ||
52 | + strcpy(varName, argv[2]); | ||
53 | + strcpy(attName, argv[3]); | ||
54 | + } | ||
55 | + | ||
56 | + status = CDFlib (OPEN_, CDF_, fileName, &id, NULL_); | ||
57 | + | ||
58 | + if (status != CDF_OK) { | ||
59 | + strcpy(msg, "OPEN_, CDF_, "); | ||
60 | + strcat(msg, fileName); | ||
61 | + cdf_status_handler (status, msg); | ||
62 | + } | ||
63 | + | ||
64 | + /*--------------------------------------------------------------------------- | ||
65 | + * This routine retrievs the following information: | ||
66 | + * | ||
67 | + * nAttr - number of attributes (including global and variable) | ||
68 | + * nZvars - number of zVariables | ||
69 | + * | ||
70 | + * CDF file can have both rVariables (old style) and zVariables (new style) | ||
71 | + * simultaneously. zVariable is a superset of rVariable, and it is a lot | ||
72 | + * more efficient and offers all the functionality a rVariable offers and | ||
73 | + * more. Treat all CDF variables as zVariables. | ||
74 | + *--------------------------------------------------------------------------*/ | ||
75 | + | ||
76 | + status = CDFlib (SELECT_, CDF_zMODE_, zMODEon2, | ||
77 | + GET_, CDF_NUMATTRS_, &nAttrs, | ||
78 | + CDF_NUMzVARS_, &nZvars, | ||
79 | + NULL_); | ||
80 | + if (status != CDF_OK) cdf_status_handler(status, "GET_, CDF_FILEINFO_"); | ||
81 | + | ||
82 | + // printf(" nAttrs %d Zvars %d\n",nAttrs, nZvars); | ||
83 | + // printf ("Attributes:\n"); | ||
84 | + | ||
85 | + for (attrId = 0; attrId < nAttrs; attrId++) { | ||
86 | + status = CDFlib (SELECT_, ATTR_, attrId, | ||
87 | + GET_, ATTR_NAME_, attrName, ATTR_SCOPE_, &attrScope, | ||
88 | + NULL_); | ||
89 | + | ||
90 | + if (status != CDF_OK) cdf_status_handler (status, "SELECT_, ATTR_"); | ||
91 | + // printf("Attr %d %s %d\n", attrId, attrName, attrScope); | ||
92 | + } | ||
93 | + | ||
94 | + // printf ("Variables:\n"); | ||
95 | + for (varId=0; varId < nZvars; varId++) | ||
96 | + { | ||
97 | + status = CDFlib (SELECT_,zVAR_, varId, | ||
98 | + GET_, zVAR_NAME_, var.name, | ||
99 | + zVAR_DATATYPE_, &var.datatype, | ||
100 | + zVAR_NUMELEMS_, &var.numElements, | ||
101 | + zVAR_NUMDIMS_, &var.dimensionality, | ||
102 | + zVAR_DIMSIZES_, var.dimSizes, | ||
103 | + zVAR_NUMRECS_, &var.numRecs, | ||
104 | + zVAR_RECVARY_, &var.recVariance, | ||
105 | + NULL_); | ||
106 | + if (status != CDF_OK) cdf_status_handler (status, "GET_, zVARS_"); | ||
107 | + | ||
108 | + if (strcmp(var.name, varName) == 0) | ||
109 | + { | ||
110 | + for (attrId = 0; attrId < nAttrs; attrId++) { | ||
111 | + status = CDFlib (SELECT_, ATTR_, attrId, | ||
112 | + GET_, ATTR_NAME_, attrName, ATTR_SCOPE_, &attrScope, | ||
113 | + NULL_); | ||
114 | + | ||
115 | + if (status != CDF_OK) cdf_status_handler (status, "SELECT_, ATTR_"); | ||
116 | + if (attrScope == GLOBAL_SCOPE) continue; | ||
117 | + if (strcasecmp(attrName, attName) != 0) continue; | ||
118 | + | ||
119 | + // printf("%d %s ", attrId, attrName); | ||
120 | + | ||
121 | + status = CDFlib (SELECT_, zENTRY_, varId, | ||
122 | + GET_, zENTRY_DATATYPE_, &datatype, | ||
123 | + zENTRY_NUMELEMS_, &numElements, | ||
124 | + NULL_); | ||
125 | + //printf("%d %s", numElements,cdf_str_datatype(datatype)); | ||
126 | + if (status == NO_SUCH_ENTRY) continue; | ||
127 | + | ||
128 | + if (status != CDF_OK) cdf_status_handler (status,"GET_ATTR_INFO_"); | ||
129 | + | ||
130 | + switch (datatype) | ||
131 | + { | ||
132 | + case CDF_CHAR: | ||
133 | + cPtr = (char *) malloc(numElements * sizeof(char) + 1); | ||
134 | + | ||
135 | + status = CDFlib (GET_, zENTRY_DATA_, cPtr, NULL_); | ||
136 | + if (status != CDF_OK) cdf_status_handler (status, msg); | ||
137 | + strcpy(&cPtr[numElements],"\0"); | ||
138 | + printf("%s\n", cPtr); | ||
139 | + free(cPtr); | ||
140 | + break; | ||
141 | + | ||
142 | + case CDF_BYTE: | ||
143 | + case CDF_INT1: | ||
144 | + scPtr = (signed char *) malloc (sizeof(signed char) * numElements); | ||
145 | + status = CDFlib (GET_, zENTRY_DATA_, scPtr, NULL_); | ||
146 | + if (status != CDF_OK) cdf_status_handler (status, msg); | ||
147 | + free (scPtr); | ||
148 | + break; | ||
149 | + | ||
150 | + case CDF_INT2: | ||
151 | + case CDF_UCHAR: | ||
152 | + case CDF_UINT1: | ||
153 | + sPtr = (short *) malloc (sizeof(short) * numElements); | ||
154 | + status = CDFlib (GET_, zENTRY_DATA_, sPtr, NULL_); | ||
155 | + if (status != CDF_OK) cdf_status_handler (status, msg); | ||
156 | + free (sPtr); | ||
157 | + break; | ||
158 | + | ||
159 | + case CDF_INT4: | ||
160 | + case CDF_UINT2: | ||
161 | + iPtr = (int *) malloc (sizeof(int) * numElements); | ||
162 | + status = CDFlib (GET_, zENTRY_DATA_, iPtr, NULL_); | ||
163 | + if (status != CDF_OK) cdf_status_handler (status, msg); | ||
164 | + printf("%d\n", *iPtr); | ||
165 | + free (iPtr); | ||
166 | + break; | ||
167 | + | ||
168 | + case CDF_FLOAT: | ||
169 | + case CDF_REAL4: | ||
170 | + fPtr = (float *) malloc (sizeof(float) * numElements); | ||
171 | + status = CDFlib (GET_, zENTRY_DATA_, fPtr, NULL_); | ||
172 | + if (status != CDF_OK) cdf_status_handler (status, msg); | ||
173 | + printf("%8.1e\n", *fPtr); | ||
174 | + free (fPtr); | ||
175 | + break; | ||
176 | + | ||
177 | + case CDF_DOUBLE: | ||
178 | + case CDF_REAL8: | ||
179 | + case CDF_UINT4: | ||
180 | + dPtr = (double *) malloc (sizeof(double) * numElements); | ||
181 | + | ||
182 | + status = CDFlib (GET_, zENTRY_DATA_, dPtr, NULL_); | ||
183 | + if (status != CDF_OK) cdf_status_handler (status, msg); | ||
184 | + printf("%8.1e\n", *dPtr); | ||
185 | + free (dPtr); | ||
186 | + break; | ||
187 | + | ||
188 | + case CDF_EPOCH: /* 8-byte real number */ | ||
189 | + dPtr = (double *) malloc (sizeof(double) * numElements); | ||
190 | + | ||
191 | + status = CDFlib (GET_, zENTRY_DATA_, dPtr, NULL_); | ||
192 | + if (status != CDF_OK) cdf_status_handler (status, msg); | ||
193 | + | ||
194 | + free (dPtr); | ||
195 | + break; | ||
196 | + | ||
197 | + case CDF_EPOCH16: /* 16-byte real number */ | ||
198 | + dPtr = (double *) malloc (sizeof(double) * numElements * 2); | ||
199 | + status = CDFlib (GET_, zENTRY_DATA_, dPtr, NULL_); | ||
200 | + if (status != CDF_OK) cdf_status_handler (status, msg); | ||
201 | + free (dPtr); | ||
202 | + break; | ||
203 | + | ||
204 | + default: | ||
205 | + printf ("** Error in get_cdf_attribute: bad data type"); | ||
206 | + } | ||
207 | + } | ||
208 | + break; | ||
209 | + } | ||
210 | + } | ||
211 | + | ||
212 | + /* Close the CDF file */ | ||
213 | + status = CDFlib (CLOSE_, CDF_, NULL_); | ||
214 | + | ||
215 | +} | ||
216 | + | ||
217 | + | ||
218 | +void cdf_status_handler (CDFstatus status, char *source) | ||
219 | +{ | ||
220 | + char message[CDF_STATUSTEXT_LEN+1]; | ||
221 | + | ||
222 | + CDFerror (status, message); /* Get the appropriate message */ | ||
223 | + | ||
224 | + if (status < CDF_WARN) { | ||
225 | + printf ("An error has occurred, halting...\n"); | ||
226 | + printf ("%s\n", message); | ||
227 | + printf ("** Error source: %s\n", source); | ||
228 | + exit (status); | ||
229 | + } | ||
230 | + else if (status < CDF_OK) { | ||
231 | + printf ("Warning, function may not have compeleted as expected...\n"); | ||
232 | + printf ("%s\n", message); | ||
233 | + } | ||
234 | + else if (status > CDF_OK) { | ||
235 | + printf ("Function compeleted successfully, but be advised that...\n"); | ||
236 | + printf ("%s\n", message); | ||
237 | + } | ||
238 | +} | ||
239 | + | ||
240 | +/*-------------------------------------------------------------------------- | ||
241 | + * This routine returns the string representation of the given CDF | ||
242 | + * datatype. | ||
243 | + *--------------------------------------------------------------------------*/ | ||
244 | +char * cdf_str_datatype (long type) | ||
245 | +{ | ||
246 | + switch (type) { | ||
247 | + case CDF_BYTE: | ||
248 | + return "CDF_BYTE"; | ||
249 | + | ||
250 | + case CDF_INT1: | ||
251 | + return "CDF_INT1"; | ||
252 | + | ||
253 | + case CDF_CHAR: | ||
254 | + return "CDF_CHAR"; | ||
255 | + | ||
256 | + case CDF_INT2: | ||
257 | + return "CDF_INT2"; | ||
258 | + | ||
259 | + case CDF_UCHAR: | ||
260 | + return "CDF_UCHAR"; | ||
261 | + | ||
262 | + case CDF_UINT1: | ||
263 | + return "CDF_UINT1"; | ||
264 | + | ||
265 | + case CDF_INT4: | ||
266 | + return "CDF_INT4"; | ||
267 | + | ||
268 | + case CDF_UINT2: | ||
269 | + return "CDF_UINT2"; | ||
270 | + | ||
271 | + case CDF_FLOAT: | ||
272 | + return "CDF_FLOAT"; | ||
273 | + | ||
274 | + case CDF_REAL4: | ||
275 | + return "CDF_REAL4"; | ||
276 | + | ||
277 | + case CDF_DOUBLE: | ||
278 | + return "CDF_DOUBLE"; | ||
279 | + | ||
280 | + case CDF_REAL8: | ||
281 | + return "CDF_REAL8"; | ||
282 | + | ||
283 | + case CDF_UINT4: | ||
284 | + return "CDF_UINT4"; | ||
285 | + | ||
286 | + case CDF_EPOCH: | ||
287 | + return "CDF_EPOCH"; | ||
288 | + | ||
289 | + case CDF_EPOCH16: | ||
290 | + return "CDF_EPOCH16"; | ||
291 | + } | ||
292 | +} |
php/src/cdfvarinfo.c
@@ -16,49 +16,42 @@ void cdf_status_handler (CDFstatus, char *); | @@ -16,49 +16,42 @@ void cdf_status_handler (CDFstatus, char *); | ||
16 | char * cdf_str_datatype (long); | 16 | char * cdf_str_datatype (long); |
17 | 17 | ||
18 | typedef struct cdfvar { /* CDF variable structure */ | 18 | typedef struct cdfvar { /* CDF variable structure */ |
19 | - char name[CDF_VAR_NAME_LEN+1]; | ||
20 | - long datatype; | ||
21 | - long numElements; /* string length for CDF_CHAR, 1 otherwise */ | ||
22 | - long dimensionality; /* variable dimensionality */ | ||
23 | - long dimSizes[CDF_MAX_DIMS]; /* variable dimension sizes */ | ||
24 | - long recVariance; /* record variance */ | ||
25 | - long numRecs; /* # of records this variable contains */ | 19 | + char name[CDF_VAR_NAME_LEN+1]; |
20 | + long datatype; | ||
21 | + long numElements; /* string length for CDF_CHAR, 1 otherwise */ | ||
22 | + long dimensionality; /* variable dimensionality */ | ||
23 | + long dimSizes[CDF_MAX_DIMS]; /* variable dimension sizes */ | ||
24 | + long recVariance; /* record variance */ | ||
25 | + long numRecs; /* # of records this variable contains */ | ||
26 | } CDFvar; | 26 | } CDFvar; |
27 | 27 | ||
28 | int main(int argc, char *argv[]) | 28 | int main(int argc, char *argv[]) |
29 | -{ | ||
30 | - | ||
31 | - CDFvar var; | ||
32 | - CDFid id; /* CDF file ID */ | ||
33 | - CDFstatus status; /* CDF status code */ | ||
34 | - | ||
35 | - long nZvars, nAttrs, attrId, attrScope, varId, datatype, numElements; | ||
36 | - char attrName[CDF_ATTR_NAME_LEN+1]; | ||
37 | - char fileName[MAX_FILE_NAME_LEN], varName[CDF_VAR_NAME_LEN+1]; | ||
38 | - char msg[100]; | ||
39 | - int dummy, i; | ||
40 | - char *cPtr; | ||
41 | - signed char *scPtr; | ||
42 | - short *sPtr; | ||
43 | - int *iPtr; | ||
44 | - float *fPtr; | ||
45 | - double *dPtr; | 29 | +{ |
30 | + CDFvar var; | ||
31 | + CDFid id; /* CDF file ID */ | ||
32 | + CDFstatus status; /* CDF status code */ | ||
33 | + | ||
34 | + long nZvars, nAttrs, attrId, attrScope, varId, datatype, numElements; | ||
35 | + char attrName[CDF_ATTR_NAME_LEN+1]; | ||
36 | + char fileName[MAX_FILE_NAME_LEN], varName[CDF_VAR_NAME_LEN+1]; | ||
37 | + char msg[100]; | ||
38 | + int dummy, i; | ||
46 | 39 | ||
47 | 40 | ||
48 | - if (argc <= 2) | ||
49 | - exit(0); /* CDF input file name not specified */ | ||
50 | - else { | ||
51 | - strcpy(fileName, argv[1]); /* Get the input file name */ | ||
52 | - strcpy(varName, argv[2]); | ||
53 | - } | 41 | + if (argc <= 2) |
42 | + exit(0); /* CDF input file name not specified */ | ||
43 | + else { | ||
44 | + strcpy(fileName, argv[1]); /* Get the input file name */ | ||
45 | + strcpy(varName, argv[2]); | ||
46 | + } | ||
54 | 47 | ||
55 | - status = CDFlib (OPEN_, CDF_, fileName, &id, NULL_); | 48 | + status = CDFlib (OPEN_, CDF_, fileName, &id, NULL_); |
56 | 49 | ||
57 | - if (status != CDF_OK) { | ||
58 | - strcpy(msg, "OPEN_, CDF_, "); | ||
59 | - strcat(msg, fileName); | ||
60 | - cdf_status_handler (status, msg); | ||
61 | - } | 50 | + if (status != CDF_OK) { |
51 | + strcpy(msg, "OPEN_, CDF_, "); | ||
52 | + strcat(msg, fileName); | ||
53 | + cdf_status_handler (status, msg); | ||
54 | + } | ||
62 | 55 | ||
63 | /*--------------------------------------------------------------------------- | 56 | /*--------------------------------------------------------------------------- |
64 | * This routine retrievs the following information: | 57 | * This routine retrievs the following information: |
@@ -72,225 +65,114 @@ int main(int argc, char *argv[]) | @@ -72,225 +65,114 @@ int main(int argc, char *argv[]) | ||
72 | * more. Treat all CDF variables as zVariables. | 65 | * more. Treat all CDF variables as zVariables. |
73 | *--------------------------------------------------------------------------*/ | 66 | *--------------------------------------------------------------------------*/ |
74 | 67 | ||
75 | - status = CDFlib (SELECT_, CDF_zMODE_, zMODEon2, | ||
76 | - GET_, CDF_NUMATTRS_, &nAttrs, | ||
77 | - CDF_NUMzVARS_, &nZvars, | ||
78 | - NULL_); | ||
79 | - if (status != CDF_OK) cdf_status_handler(status, "GET_, CDF_FILEINFO_"); | ||
80 | - | ||
81 | - // printf(" nAttrs %d Zvars %d\n",nAttrs, nZvars); | ||
82 | - | ||
83 | -// printf ("Attributes:\n"); | ||
84 | - | ||
85 | - for (attrId = 0; attrId < nAttrs; attrId++) { | ||
86 | - status = CDFlib (SELECT_, ATTR_, attrId, | ||
87 | - GET_, ATTR_NAME_, attrName, ATTR_SCOPE_, &attrScope, | ||
88 | - NULL_); | ||
89 | - if (status != CDF_OK) cdf_status_handler (status, "SELECT_, ATTR_"); | ||
90 | - | ||
91 | - | ||
92 | - // printf("Attr %d %s %d\n", attrId, attrName, attrScope); | ||
93 | - } | ||
94 | - | ||
95 | - // printf ("Variables:\n"); | ||
96 | - for (varId=0; varId < nZvars; varId++) { | ||
97 | - | ||
98 | - status = CDFlib (SELECT_,zVAR_, varId, | ||
99 | - GET_, zVAR_NAME_, var.name, | ||
100 | - zVAR_DATATYPE_, &var.datatype, | ||
101 | - zVAR_NUMELEMS_, &var.numElements, | ||
102 | - zVAR_NUMDIMS_, &var.dimensionality, | ||
103 | - zVAR_DIMSIZES_, var.dimSizes, | ||
104 | - zVAR_NUMRECS_, &var.numRecs, | ||
105 | - zVAR_RECVARY_, &var.recVariance, | ||
106 | - NULL_); | ||
107 | - if (status != CDF_OK) cdf_status_handler (status, "GET_, zVARS_"); | 68 | + status = CDFlib (SELECT_, CDF_zMODE_, zMODEon2, |
69 | + GET_, CDF_NUMATTRS_, &nAttrs, | ||
70 | + CDF_NUMzVARS_, &nZvars, | ||
71 | + NULL_); | ||
72 | + | ||
73 | + if (status != CDF_OK) cdf_status_handler(status, "GET_, CDF_FILEINFO_"); | ||
74 | + | ||
75 | + for (varId=0; varId < nZvars; varId++) | ||
76 | + { | ||
77 | + status = CDFlib (SELECT_,zVAR_, varId, | ||
78 | + GET_, zVAR_NAME_, var.name, | ||
79 | + zVAR_DATATYPE_, &var.datatype, | ||
80 | + zVAR_NUMELEMS_, &var.numElements, | ||
81 | + zVAR_NUMDIMS_, &var.dimensionality, | ||
82 | + zVAR_DIMSIZES_, var.dimSizes, | ||
83 | + zVAR_NUMRECS_, &var.numRecs, | ||
84 | + zVAR_RECVARY_, &var.recVariance, | ||
85 | + NULL_); | ||
86 | + | ||
87 | + if (status != CDF_OK) cdf_status_handler (status, "GET_, zVARS_"); | ||
108 | 88 | ||
109 | - if (strcmp(var.name, varName) == 0) { | ||
110 | - | ||
111 | - printf("%s %d %d ", cdf_str_datatype(var.datatype), var.dimensionality, var.numRecs); | ||
112 | - for (i = 0; i < var.dimensionality; i++) printf("%d ",var.dimSizes[i]); | ||
113 | - printf("\n"); | ||
114 | - | ||
115 | - for (attrId = 0; attrId < nAttrs; attrId++) { | ||
116 | - status = CDFlib (SELECT_, ATTR_, attrId, | ||
117 | - GET_, ATTR_NAME_, attrName, | ||
118 | - ATTR_SCOPE_, &attrScope, | ||
119 | - NULL_); | ||
120 | - | ||
121 | - if (status != CDF_OK) cdf_status_handler (status, "SELECT_, ATTR_"); | ||
122 | - if (attrScope == GLOBAL_SCOPE) continue; | ||
123 | -//printf("\n%d %s ", attrId, attrName); | ||
124 | - status = CDFlib (SELECT_, zENTRY_, varId, | ||
125 | - GET_, zENTRY_DATATYPE_, &datatype, | ||
126 | - zENTRY_NUMELEMS_, &numElements, | ||
127 | - NULL_); | ||
128 | -//printf("%d %s", numElements,cdf_str_datatype(datatype)); | ||
129 | - if (status == NO_SUCH_ENTRY) continue; | ||
130 | - | ||
131 | - if (status != CDF_OK) cdf_status_handler (status,"GET_ATTR_INFO_"); | ||
132 | - | ||
133 | - switch (datatype) { | ||
134 | - case CDF_CHAR: | ||
135 | - cPtr = (char *) malloc(numElements * sizeof(char) + 1); | ||
136 | - status = CDFlib (GET_, zENTRY_DATA_, cPtr, NULL_); | ||
137 | - if (status != CDF_OK) cdf_status_handler (status, msg); | ||
138 | -// printf(" %s", cPtr); | ||
139 | - free(cPtr); | ||
140 | - break; | ||
141 | - | ||
142 | - case CDF_BYTE: | ||
143 | - case CDF_INT1: | ||
144 | - scPtr = (signed char *) malloc (sizeof(signed char) * numElements); | ||
145 | - status = CDFlib (GET_, zENTRY_DATA_, scPtr, NULL_); | ||
146 | - if (status != CDF_OK) cdf_status_handler (status, msg); | ||
147 | - free (scPtr); | ||
148 | - break; | ||
149 | - | ||
150 | - case CDF_INT2: | ||
151 | - case CDF_UCHAR: | ||
152 | - case CDF_UINT1: | ||
153 | - sPtr = (short *) malloc (sizeof(short) * numElements); | ||
154 | - status = CDFlib (GET_, zENTRY_DATA_, sPtr, NULL_); | ||
155 | - if (status != CDF_OK) cdf_status_handler (status, msg); | ||
156 | - free (sPtr); | ||
157 | - break; | ||
158 | - | ||
159 | - case CDF_INT4: | ||
160 | - case CDF_UINT2: | ||
161 | - iPtr = (int *) malloc (sizeof(int) * numElements); | ||
162 | - status = CDFlib (GET_, zENTRY_DATA_, iPtr, NULL_); | ||
163 | - if (status != CDF_OK) cdf_status_handler (status, msg); | ||
164 | - free (iPtr); | ||
165 | - break; | ||
166 | - | ||
167 | - case CDF_FLOAT: | ||
168 | - case CDF_REAL4: | ||
169 | - fPtr = (float *) malloc (sizeof(float) * numElements); | ||
170 | - status = CDFlib (GET_, zENTRY_DATA_, fPtr, NULL_); | ||
171 | - if (status != CDF_OK) cdf_status_handler (status, msg); | ||
172 | - free (fPtr); | ||
173 | - break; | ||
174 | - | ||
175 | - case CDF_DOUBLE: | ||
176 | - case CDF_REAL8: | ||
177 | - case CDF_UINT4: | ||
178 | - dPtr = (double *) malloc (sizeof(double) * numElements); | ||
179 | - | ||
180 | - status = CDFlib (GET_, zENTRY_DATA_, dPtr, NULL_); | ||
181 | - if (status != CDF_OK) cdf_status_handler (status, msg); | ||
182 | - | ||
183 | - free (dPtr); | ||
184 | - break; | ||
185 | - | ||
186 | - case CDF_EPOCH: /* 8-byte real number */ | ||
187 | - dPtr = (double *) malloc (sizeof(double) * numElements); | ||
188 | - | ||
189 | - status = CDFlib (GET_, zENTRY_DATA_, dPtr, NULL_); | ||
190 | - if (status != CDF_OK) cdf_status_handler (status, msg); | ||
191 | - | ||
192 | - free (dPtr); | ||
193 | - break; | ||
194 | - | ||
195 | - case CDF_EPOCH16: /* 16-byte real number */ | ||
196 | - dPtr = (double *) malloc (sizeof(double) * numElements * 2); | ||
197 | - status = CDFlib (GET_, zENTRY_DATA_, dPtr, NULL_); | ||
198 | - if (status != CDF_OK) cdf_status_handler (status, msg); | ||
199 | - free (dPtr); | ||
200 | - break; | ||
201 | - | ||
202 | - default: | ||
203 | - printf ("** Error in get_cdf_attribute: bad data type"); | ||
204 | - } | ||
205 | - | ||
206 | - } | ||
207 | - break; | 89 | + if (strcmp(var.name, varName) == 0) |
90 | + { | ||
91 | + printf("%s %d %d ", cdf_str_datatype(var.datatype), var.dimensionality, var.numRecs); | ||
92 | + for (i = 0; i < var.dimensionality; i++) printf("%d ",var.dimSizes[i]); | ||
93 | + | ||
94 | + printf("\n"); | ||
95 | + break; | ||
96 | + } | ||
208 | } | 97 | } |
209 | - } | ||
210 | - | ||
211 | - | ||
212 | - | ||
213 | - /* Close the CDF file */ | ||
214 | - status = CDFlib (CLOSE_, CDF_, NULL_); | ||
215 | - | 98 | + |
99 | + /* Close the CDF file */ | ||
100 | + status = CDFlib (CLOSE_, CDF_, NULL_); | ||
216 | } | 101 | } |
217 | 102 | ||
218 | 103 | ||
219 | - | ||
220 | - | ||
221 | void cdf_status_handler (CDFstatus status, char *source) | 104 | void cdf_status_handler (CDFstatus status, char *source) |
222 | { | 105 | { |
223 | - char message[CDF_STATUSTEXT_LEN+1]; | 106 | + char message[CDF_STATUSTEXT_LEN+1]; |
224 | 107 | ||
225 | - CDFerror (status, message); /* Get the appropriate message */ | 108 | + CDFerror (status, message); /* Get the appropriate message */ |
226 | 109 | ||
227 | - if (status < CDF_WARN) { | ||
228 | - printf ("An error has occurred, halting...\n"); | ||
229 | - printf ("%s\n", message); | ||
230 | - printf ("** Error source: %s\n", source); | ||
231 | - exit (status); | ||
232 | - } | ||
233 | - else if (status < CDF_OK) { | ||
234 | - printf ("Warning, function may not have compeleted as expected...\n"); | ||
235 | - printf ("%s\n", message); | ||
236 | - } | ||
237 | - else if (status > CDF_OK) { | ||
238 | - printf ("Function compeleted successfully, but be advised that...\n"); | ||
239 | - printf ("%s\n", message); | ||
240 | - } | ||
241 | - | ||
242 | - | 110 | + if (status < CDF_WARN) { |
111 | + printf ("An error has occurred, halting...\n"); | ||
112 | + printf ("%s\n", message); | ||
113 | + printf ("** Error source: %s\n", source); | ||
114 | + exit (status); | ||
115 | + } | ||
116 | + else if (status < CDF_OK) { | ||
117 | + printf ("Warning, function may not have compeleted as expected...\n"); | ||
118 | + printf ("%s\n", message); | ||
119 | + } | ||
120 | + else if (status > CDF_OK) { | ||
121 | + printf ("Function compeleted successfully, but be advised that...\n"); | ||
122 | + printf ("%s\n", message); | ||
123 | + } | ||
243 | } | 124 | } |
125 | + | ||
244 | /*-------------------------------------------------------------------------- | 126 | /*-------------------------------------------------------------------------- |
245 | * This routine returns the string representation of the given CDF | 127 | * This routine returns the string representation of the given CDF |
246 | * datatype. | 128 | * datatype. |
247 | *--------------------------------------------------------------------------*/ | 129 | *--------------------------------------------------------------------------*/ |
248 | char * cdf_str_datatype (long type) | 130 | char * cdf_str_datatype (long type) |
249 | { | 131 | { |
250 | - switch (type) { | ||
251 | - case CDF_BYTE: | ||
252 | - return "CDF_BYTE"; | 132 | + switch (type) { |
133 | + case CDF_BYTE: | ||
134 | + return "CDF_BYTE"; | ||
253 | 135 | ||
254 | - case CDF_INT1: | ||
255 | - return "CDF_INT1"; | 136 | + case CDF_INT1: |
137 | + return "CDF_INT1"; | ||
256 | 138 | ||
257 | - case CDF_CHAR: | ||
258 | - return "CDF_CHAR"; | 139 | + case CDF_CHAR: |
140 | + return "CDF_CHAR"; | ||
259 | 141 | ||
260 | - case CDF_INT2: | ||
261 | - return "CDF_INT2"; | 142 | + case CDF_INT2: |
143 | + return "CDF_INT2"; | ||
262 | 144 | ||
263 | - case CDF_UCHAR: | ||
264 | - return "CDF_UCHAR"; | 145 | + case CDF_UCHAR: |
146 | + return "CDF_UCHAR"; | ||
265 | 147 | ||
266 | - case CDF_UINT1: | ||
267 | - return "CDF_UINT1"; | 148 | + case CDF_UINT1: |
149 | + return "CDF_UINT1"; | ||
268 | 150 | ||
269 | - case CDF_INT4: | ||
270 | - return "CDF_INT4"; | 151 | + case CDF_INT4: |
152 | + return "CDF_INT4"; | ||
271 | 153 | ||
272 | - case CDF_UINT2: | ||
273 | - return "CDF_UINT2"; | 154 | + case CDF_UINT2: |
155 | + return "CDF_UINT2"; | ||
274 | 156 | ||
275 | - case CDF_FLOAT: | ||
276 | - return "CDF_FLOAT"; | 157 | + case CDF_FLOAT: |
158 | + return "CDF_FLOAT"; | ||
277 | 159 | ||
278 | - case CDF_REAL4: | ||
279 | - return "CDF_REAL4"; | 160 | + case CDF_REAL4: |
161 | + return "CDF_REAL4"; | ||
280 | 162 | ||
281 | - case CDF_DOUBLE: | ||
282 | - return "CDF_DOUBLE"; | 163 | + case CDF_DOUBLE: |
164 | + return "CDF_DOUBLE"; | ||
283 | 165 | ||
284 | - case CDF_REAL8: | ||
285 | - return "CDF_REAL8"; | 166 | + case CDF_REAL8: |
167 | + return "CDF_REAL8"; | ||
286 | 168 | ||
287 | - case CDF_UINT4: | ||
288 | - return "CDF_UINT4"; | 169 | + case CDF_UINT4: |
170 | + return "CDF_UINT4"; | ||
289 | 171 | ||
290 | - case CDF_EPOCH: | ||
291 | - return "CDF_EPOCH"; | 172 | + case CDF_EPOCH: |
173 | + return "CDF_EPOCH"; | ||
292 | 174 | ||
293 | - case CDF_EPOCH16: | ||
294 | - return "CDF_EPOCH16"; | ||
295 | - } | ||
296 | -} | 175 | + case CDF_EPOCH16: |
176 | + return "CDF_EPOCH16"; | ||
177 | + } | ||
178 | +} | ||
297 | \ No newline at end of file | 179 | \ No newline at end of file |
@@ -0,0 +1,76 @@ | @@ -0,0 +1,76 @@ | ||
1 | +/* | ||
2 | + * get parameter info from nc file | ||
3 | + * args : ncfile varId infoId | ||
4 | + * infoId : | ||
5 | + * UNITS | ||
6 | + * FILLVALUE | ||
7 | + */ | ||
8 | + | ||
9 | +#include <stdio.h> | ||
10 | +#include <stdlib.h> | ||
11 | +#include <string.h> | ||
12 | +#include <netcdf.h> | ||
13 | + | ||
14 | +void check(int stat) | ||
15 | +{ | ||
16 | + if (stat != NC_NOERR) | ||
17 | + { | ||
18 | + printf("error: %s\n", nc_strerror(stat)); | ||
19 | + exit(1); | ||
20 | + } | ||
21 | +} | ||
22 | + | ||
23 | +main(int argc, char **argv) | ||
24 | +{ | ||
25 | + int ncID, varID; | ||
26 | + size_t i, k; | ||
27 | +// char varname[NC_MAX_NAME]; | ||
28 | + int stat = 0; | ||
29 | + nc_type xtype; | ||
30 | + char name_in[NC_MAX_NAME]; | ||
31 | + float number_attr; | ||
32 | + int nattsp; | ||
33 | + | ||
34 | + if (argc <= 3) { | ||
35 | + printf("Incorrect number of arguments\n"); | ||
36 | + exit(1); | ||
37 | + } | ||
38 | + | ||
39 | + check(nc_open(argv[1],NC_WRITE|NC_SHARE,&ncID)); | ||
40 | + | ||
41 | + check(nc_inq_varid(ncID, argv[2], &varID)); | ||
42 | + check(nc_inq_varnatts(ncID, varID, &nattsp)); | ||
43 | + // fprintf(stdout, "%d\n", nattsp); | ||
44 | + | ||
45 | + for (i = 0; i < nattsp; i++) { | ||
46 | + check(nc_inq_attname(ncID, varID, i, name_in)); | ||
47 | + | ||
48 | + if (strcasecmp(name_in, argv[3]) == 0) { | ||
49 | + | ||
50 | + check(nc_inq_atttype(ncID, varID, name_in, &xtype)); | ||
51 | + | ||
52 | + if (xtype == NC_CHAR) { | ||
53 | + size_t attlen = 0; | ||
54 | + check(nc_inq_attlen(ncID, varID, name_in, &attlen)); | ||
55 | + unsigned char *string_attr = (unsigned char *)malloc(attlen * sizeof(char*) + 1); | ||
56 | + | ||
57 | + check(nc_get_att(ncID, varID, name_in, string_attr)); | ||
58 | + strcpy(&string_attr[attlen],"\0"); | ||
59 | + fprintf(stdout, "%s\n", string_attr); | ||
60 | + free(string_attr); | ||
61 | + } | ||
62 | + else { | ||
63 | + check(nc_get_att(ncID, varID, name_in, &number_attr)); | ||
64 | + fprintf(stdout, "%e\n", number_attr); | ||
65 | + } | ||
66 | + | ||
67 | + exit(0); | ||
68 | + } | ||
69 | + } | ||
70 | + | ||
71 | + stat = nc_close(ncID); | ||
72 | + fprintf(stdout, "undefined\n"); | ||
73 | + exit(0); | ||
74 | +} | ||
75 | + | ||
76 | + |
php/uploadFile.php
@@ -112,11 +112,23 @@ | @@ -112,11 +112,23 @@ | ||
112 | $nonStd = $_POST['nonstd'] ? $_POST['nonstd'] : null; | 112 | $nonStd = $_POST['nonstd'] ? $_POST['nonstd'] : null; |
113 | $timeLength = $_POST['timelength'] ? $_POST['timelength'] : null; | 113 | $timeLength = $_POST['timelength'] ? $_POST['timelength'] : null; |
114 | $doy = isset($_POST['doy']) ? $_POST['doy'] : null; | 114 | $doy = isset($_POST['doy']) ? $_POST['doy'] : null; |
115 | + $sampling = isset($_POST['smpl']) ? $_POST['smpl'] : null; | ||
116 | + $min_sampling = isset($_POST['min_manual_sampling']) ? $_POST['min_manual_sampling'] : null; | ||
117 | + $max_sampling = isset($_POST['max_manual_sampling']) ? $_POST['max_manual_sampling'] : null; | ||
118 | + | ||
119 | + if ($sampling == "auto" && $timeSmplg == "variable" | ||
120 | + && (strtolower($fileFrmt) == "cdf" || strtolower($fileFrmt) == "nc")) { | ||
121 | + $response = array('success' => false, 'error' => " : Auto-definition of variable sampling for $fileFrmt isn't implemented yet. | ||
122 | + Use manual sampling definition"); | ||
123 | + die(json_encode($response)); | ||
124 | + } | ||
125 | + | ||
115 | $sampData = isset($_POST['sampData']) ? $_POST['sampData'] : null; | 126 | $sampData = isset($_POST['sampData']) ? $_POST['sampData'] : null; |
116 | $sampFileName = isset($_POST['sampFileName']) ? $_POST['sampFileName'] : null; | 127 | $sampFileName = isset($_POST['sampFileName']) ? $_POST['sampFileName'] : null; |
117 | 128 | ||
118 | $allFormats = array('fileFormat' => $fileFrmt, 'timeFormat' => $timeFrmt, 'doy' => $doy, | 129 | $allFormats = array('fileFormat' => $fileFrmt, 'timeFormat' => $timeFrmt, 'doy' => $doy, |
119 | - 'timeSampling' => $timeSmplg, 'nonStandard' => $nonStd, 'timeLength' => $timeLength); | 130 | + 'timeSampling' => $timeSmplg, 'nonStandard' => $nonStd, 'timeLength' => $timeLength, |
131 | + 'samplingType' => $sampling, 'min_sampling' => $min_sampling, 'max_sampling' => $max_sampling); | ||
120 | 132 | ||
121 | if ($_POST['filesrc'] == 'URL') $fromURL = true; | 133 | if ($_POST['filesrc'] == 'URL') $fromURL = true; |
122 | else $fromURL = false; | 134 | else $fromURL = false; |