1 /**
  2  * @namespace
  3  */
  4 var Ozone = Ozone ? Ozone : {};
  5 
  6 /**
  7  * @ignore
  8  * @namespace
  9  */
 10 Ozone.launcher = Ozone.launcher ? Ozone.launcher : {};
 11 
 12 (function() {
 13 
 14     var launchChannelName = "_WIDGET_LAUNCHER_CHANNEL";
 15 
 16     /**
 17      *  @deprecated Since OWF 3.7.0  You should use <a href="#.getInstance">Ozone.launcher.WidgetLauncher.getInstance</a>
 18      *  @constructor  widgetEventingController - Ozone.eventing.Widget object
 19      *  @param  {Ozone.eventing.Widget} [widgetEventingController] - widget eventing object which handles eventing for the widget
 20      *  @description This object is used launch other widgets.  To do so it requires a widgetEventingController
 21      *
 22      */
 23     Ozone.launcher.WidgetLauncher = function() {
 24         if (Ozone.launcher.WidgetLauncher.instance == null) {
 25             this.version = Ozone.version.owfversion + Ozone.version.widgetLauncher
 26 
 27             Ozone.launcher.WidgetLauncher.instance = this;
 28         }
 29 
 30         return Ozone.launcher.WidgetLauncher.instance;
 31     };
 32 
 33     Ozone.launcher.WidgetLauncher.prototype = {
 34 
 35       /**
 36        * @description launches a Widget based on the config
 37        * @param {Object} config object see example for structure
 38        * @param {Function} callback a function to be called once after the launchWidget is executed
 39        *
 40        * @example
 41        *
 42        * //Example for launching a widget
 43        * var widgetEventingController = Ozone.eventing.Widget.getInstance();
 44        * var widgetLauncher = Ozone.launcher.WidgetLauncher.getInstance(this.widgetEventingController);
 45        * var data = {
 46        *   channel: channel,
 47        *   message: message
 48        * };
 49        * var dataString = Ozone.util.toString(data);
 50        * widgetLauncher.launchWidget({
 51        *     universalName: <universal name of widget to launch>,  //universalName or guid maybe identify the widget to be launched
 52        *     guid: <guid of widget to launch>,
 53        *     launchOnlyIfClosed: true, //if true will only launch the widget if it is not already opened.
 54        *                               //if it is opened then the widget will be restored
 55        *     data: dataString  //initial launch config data to be passed to a widget only if the widget is opened.  this must be a string
 56        * });
 57        *
 58        */
 59         launchWidget: function(config,callback) {
 60             //send message to launch a widget
 61             var jsonString = gadgets.json.stringify(config);
 62             gadgets.rpc.call('..', launchChannelName, callback, OWF.getIframeId(), jsonString);
 63         }
 64     };
 65 
 66     /**
 67      *  @constructor none
 68      *  @description Utility functions for a widget that has been launched
 69      *
 70      */
 71     Ozone.launcher.WidgetLauncherUtils = {
 72       /**
 73        * @description gets initial launch config data for this widget if it was just launched
 74        * @returns {Object} data object which contains initial information for the widget 
 75        * @example
 76        *
 77        * var launchConfig = Ozone.launcher.WidgetLauncherUtils.getLaunchConfigData();
 78        * if (launchConfig != null) {
 79        *   var data = Ozone.util.parseJson(launchConfig);  //in this example the data object has two fields: channel and message
 80        *   if (data != null) {
 81        *       //do something with the data
 82        *       scope.subscribeToChannel(data.channel);
 83        *       scope.addToGrid(null,data.message,data.channel);
 84        *   }
 85        * }
 86        *
 87        */
 88         getLaunchConfigData: function() {
 89             var launchConfig = null;
 90 
 91             //check for data in window.name
 92             var configParams = Ozone.util.parseWindowNameData();
 93             if (configParams != null) {
 94 
 95                 //get launchConfig
 96                 launchConfig = configParams.data;
 97             }
 98 
 99             return launchConfig;
100         }
101     };
102 
103     /**
104      *  @description Retrieves Ozone.eventing.Widget Singleton instance. This object is used launch other widgets.
105      *  @example
106      *  this.widgetLauncher = Ozone.launcher.WidgetLauncher.getInstance(this.widgetEventingController);
107      */
108     Ozone.launcher.WidgetLauncher.getInstance = function() {
109         if (Ozone.launcher.WidgetLauncher.instance == null) {
110             Ozone.launcher.WidgetLauncher.instance = new Ozone.launcher.WidgetLauncher();
111         }
112         return Ozone.launcher.WidgetLauncher.instance;
113     };
114 
115 }());
116