/** * Project  : AMDA-NG * Name : InteropModule.js * @class amdaDesktop.InteropModule * @extends amdaDesktop.AmdaModule * @brief Interop Module controller definition * @extends amdaDesktop.InteractiveModule * @brief Interop Module controller definition * @author Benjamin RENARD * $Id: InteropModule.js 1870 2013-11-22 13:43:34Z elena $ ***************************************************************************** * FT Id : Date : Name - Description ******************************************************************************* * 23/04/2012: BRE - file creation */ Ext.define('amdaDesktop.InteropModule', { extend: 'amdaDesktop.AmdaModule', requires: [ 'amdaUI.InteropUI', 'amdaDesktop.SampModule', 'amdaDesktop.EpnTapModule' ], contentId: 'interopUI', /** * @cfg {String} window definitions * @required */ height: 650, width: 1050, uiType : 'panelInterop', helpTitle :'Help on Interop Module', samp: null, sampclientsStore: new Ext.data.SimpleStore({ idProperty: 'id', fields: [ {name: 'id'}, {name: 'name'}, {name: 'descriptionText'}, {name: 'iconUrl'}, {name: 'acceptVOTable', type: 'boolean'}, {name: 'acceptFITS', type: 'boolean'} ] }), init: function() { this.launcher = { text: this.title, iconCls: this.icon, handler: this.createWindow, scope: this }; }, loadEpnTap: function(icon_id) { if(!this.epntap) { this.epntap = Ext.create('amdaDesktop.EpnTapModule'); } var icons_dic = { 'icon-mercury': ['mercury', 'ts'], 'icon-venus': ['venus', 'ts'], 'icon-earth': ['earth', 'ts'], 'icon-mars': ['mars', 'ts'], 'icon-jupiter': ['jupiter', 'ts'], 'icon-saturn': ['saturn', 'ts'], 'icon-comet': ['comet', 'ts'], 'icon-sw': ['all', 'ts'], 'icon-solarsystem': ['all', 'ts'] } this.epntap.loadTarget(icon_id ? icons_dic[icon_id]: false); }, initSampConnector: function(successfn) { var me = this; if(!this.samp) { this.samp = Ext.create('amdaDesktop.SampModule', { listeners: { connected: function(o,success) { if(!success) { Ext.Msg.show( { title: 'SAMP', msg: 'Cannot connect AMDA to a hub', modal: false, icon: Ext.Msg.ERROR, buttons: Ext.Msg.OK }); } me.updateStatus(); me.updateClients(); }, disconnected: function(o,success) { me.updateStatus(); me.sampclientsStore.removeAll(); me.updateClients(); }, clientregister: function(o,id) { me.updateClients(); }, clientunregister: function(o,id) { var record = me.sampclientsStore.getById(id); if(record) { me.sampclientsStore.remove(record); me.updateClients(); } }, clientmetachange: function(o,id,data,subs) { var record = me.sampclientsStore.getById(id); if(!record) { me.sampclientsStore.add({id: id}); record = me.sampclientsStore.getById(id); } if(record) { record.set('descriptionText',data['samp.description.text']); record.set('iconUrl',data['samp.icon.url']); record.set('name',data['samp.name']); if(subs) { record.set('acceptVOTable', me.samp.isSubscribed(subs,"table.load.votable")); record.set('acceptFITS', me.samp.isSubscribed(subs,"image.load.fits")); } } me.updateClients(); }, clientsubs: function(o,id,data) { var record = me.sampclientsStore.getById(id); if(!record) { return; } else { record.set('acceptVOTable', me.samp.isSubscribed(data,"table.load.votable")); record.set('acceptFITS', me.samp.isSubscribed(data,"image.load.fits")); } me.updateClients(); }, uploadfile: function(o,clientName,url,format) { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.upload.id, true, function (module) { module.uploadNotification(url,format); }); } } }); this.samp.loadScript(function (s) { if(successfn) successfn.call(me.samp); }); } else { this.samp.loadScript(function(s) { if(successfn) successfn.call(me.samp); }); } }, updateStatus: function() { if(this.app && this.samp) { var desktop = this.app.getDesktop(); var isConnected = this.samp.isConnected(); if(desktop) { var win = desktop.getWindow(this.id); if(win && win.isVisible) win.items.items[0].updateStatus(isConnected); var taskbar = desktop.taskbar; if(taskbar) { var samptb = taskbar.getComponent('samptb'); if(samptb) samptb.updateStatus(isConnected); } } } }, updateClients: function() { if(this.app && this.samp) { var desktop = this.app.getDesktop(); var isConnected = this.samp.isConnected(); if(desktop) { var win = desktop.getWindow(this.id); var taskbar = desktop.taskbar; if(taskbar) { var samptb = taskbar.getComponent('samptb'); if(samptb) samptb.updateClients(this.sampclientsStore); } } } }, sampConnected: function() { if(!this.samp) return false; return this.samp.isConnected(); }, sendVOTable: function(file,clientId) { if(!this.samp) return false; var href = window.location.href; var baseurl = href.replace('desktop.php',''); this.samp.sendVOTable(baseurl+file,clientId); }, sendAladinScript: function(script) { if(!this.samp) return false; this.samp.sendAladinScript(script); }, sendFITS: function(url,name) { if(!this.samp) return false; this.samp.sendFITS(url,name); }, generateAladinScript: function(urlList, scriptType) { /*var script="reset;"; //reset all views & all planes // first get files var scriptHead=''; //var script="#AJS;\n"; //scriptHead+="trace 3;"; // for( var i=0; i < urlList.length; i++) { var url = urlList[i].url; var name = urlList[i].name; scriptHead += 'get File(' + url +','+name+');'; scriptHead += 'sync;'; }*/ //scriptHead += 'sync;'; /*for( var i=0; i < urlList.length; i++) { //then modify some fits values var name = urlList[i].name; scriptHead += 'set '+name+' FITS:CRVAL1=0;'; scriptHead += 'set '+name+' FITS:CRVAL2=0;'; }*/ //scriptHead += 'sync;'; // add som method specific lines /*switch( scriptType ) { case( 'mosaic' ): // first insert the modeview script += "mview 16;"; // then download the files script += scriptHead; //for( var i=0; i < urlList.length; i++){ // // we also shall position each image in the grid // var gridCols = ["A", "B", "C", "D"]; // var colIndex = i%4; // var lineIndex = 1+Math.floor(i/4); // script += "cview "+i+" "+gridCols[colIndex]+lineIndex+";\n"; //} break; case( 'movie' ): // download first script += scriptHead; script += 'blink '; for( var i=1; i < urlList.length; i++){ script += urlList[i].name+" "; } script += ';'; break; case( 'diff' ): // download first script += scriptHead; for( var i=1; i < urlList.length; i++){ var diffName = 'diff' + i; var currRawName = urlList[i].name; var prevRawNum = i-1; var prevRawName = urlList[prevRawNum].name; script += diffName + ' = ' + currRawName + ' - ' + prevRawName + ';\n'; } script += 'sync;'; script += 'diff_movie = blink '; for( var i=1; i < urlList.length; i++){ script += 'diff'+i+' '; } script += ';'; break; } //script += 'sync;';*/ var script = 'reset;'; for( var i=0; i < urlList.length; i++) { var url = urlList[i].url; var name = urlList[i].name; script += 'get File(' + url +','+name+');'; } script += 'sync;'; /*for( var i=0; i < urlList.length; i++) { //then modify some fits values var name = urlList[i].name; script += 'set '+name+' FITS:CRPIX1=100;'; script += 'set '+name+' FITS:CRPIX2=0;'; }*/ switch( scriptType ) { case('mosaic'): { script += 'sync;mview 16'; } break; case('movie'): { script += 'blink '; for( var i=1; i < urlList.length; i++) { script += urlList[i].name+" "; } script += ';'; } break; } return script; }, switchSampConnect: function() { var me = this; //loadMask.show(); this.initSampConnector(function(s) { if(me.samp.isConnected()) { me.samp.disconnect(); } else { me.samp.connect(); // loadMask.hide(); } }); }, forceSampDisconnect: function() { if(!this.samp) return; if(!this.samp.isConnected()) return; this.samp.disconnect(); }, getVOTableClients: function() { //return list of all clients that can receive a VOTable if(!this.samp) return []; var result = new Array(); this.sampclientsStore.each(function (client){ if(client.get('acceptVOTable')) result.push({id: client.get('id'), name: client.get('name'), icon: client.get('iconUrl')}); }, this); return result; }, getFITSClients: function() { //return list of all clients that can receive a FITS image if(!this.samp) return []; var result = new Array(); this.sampclientsStore.each(function (client){ if(client.get('acceptFITS')) result.push({id: client.get('id'), name: client.get('name'), icon: client.get('iconUrl')}); }, this); return result; }, // arguments from launcher: CONFIG (OBJECT!!!) createWindow: function(config) { var me = this; var baseId = null; if(!Ext.isObject(config)) { baseId = config; } var desktop = this.app.getDesktop(); var win = desktop.getWindow(this.id); var activeTab = (config && 'activeTab' in config) ? config['activeTab']: 1; if(!win) { win = desktop.createWindow({ id: this.id, title: this.title, layout: 'anchor', width: 800, height: 600, minWidth: 650, modal: true, minimizable: false, iconCls: this.icon, animCollapse: false, constrainHeader: true, bodyPadding: 5, stateful: true, stateId: this.id, stateEvents: ['move','show','resize'], items: [{ xtype: 'panelInterop', clientsStore: this.sampclientsStore, activeTab: activeTab, baseId: baseId, loadTab: function(tab) { if(tab['id'] === 'epntapTab') { me.loadEpnTap(config && 'epntapTarget' in config ? config['epntapTarget']: false); } }, onSwitchConnect: function() { me.switchSampConnect(); } }] }); } if(me.samp && me.samp.ready) this.updateStatus(); win.show(); return win; } });