/** * Project  : AMDA-NG * Name : InteropModule.js * @class amdaDesktop.InteropModule * @extends amdaDesktop.AmdaModule * @brief Interop Module controller definition * @author Benjamin RENARD * $Id: InteropModule.js 1870 2013-11-22 13:43:34Z elena $ */ 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', helpFile: 'interopHelp.html', 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 }; }, 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; if (record){ 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); }, loadFile: function(url,onLoad,onError) { if (!this.samp) return null; this.samp.loadFile(url,onLoad,onError); }, loadEpnTap: function(filter) { if(!this.epntap) { this.epntap = Ext.create('amdaDesktop.EpnTapModule'); } this.epntap.loadTarget(filter); }, generateAladinScript : function(urlList, scriptType) { 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;'; 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 activeTab = 1; } else { var activeTab = 'activeTab' in config ? config['activeTab'] : 1; } var desktop = this.app.getDesktop(); var win = desktop.getWindow(this.id); if(!win) { win = desktop.createWindow({ id: this.id, title:this.title, layout: 'fit', minWidth: 650, minHeight: 350, minimizable: false, iconCls: this.icon, animCollapse:false, constrainHeader:true, bodyPadding : 5, stateful : true, stateId : this.id, stateEvents: ['move','show','resize'], tools: [{ type:'help', qtip: this.helpTitle, scope:this, handler: function(event, toolEl, panel) { myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.info.id, true, function(module) { module.createWindow(me.helpFile, me.helpTitle); }); } }], items : [ { xtype: 'panelInterop', clientsStore : this.sampclientsStore, activeTab : activeTab, baseId : baseId, loadTab: function(tab) { if(tab['id'] === 'epntapTab') { me.loadEpnTap(Ext.isObject(config) && 'epntapFilter' in config ? config['epntapFilter']: false); } }, onSwitchConnect : function () { me.switchSampConnect(); } }] }); } else if(activeTab == 2) { me.loadEpnTap(Ext.isObject(config) && 'epntapFilter' in config ? config['epntapFilter']: false); } if (me.samp && me.samp.ready) this.updateStatus(); win.show(); return win; } });