== Channel Addressing == There is two ways of addressing channels [wiki:adeiAddressing ...] == The READER Interface == The [wiki:adeiClassREADER READER] class provides an abstract interface to the historical and control data of the data source. The minimal READER should provide 3 methods * ''!GetGroupInfo'' - returns annotated list of all logging groups. * ''!GetItemList'' - returns list of all channels in the specified logging group. * ''!GetRawData'' - returns Iterator object with requested data. == The SEARCH Subsystem == ADEI has a modular search subsystem. The search capabilities are provided by the search engines which providing one-or-more search modules. Besides the search term, the search string may specify the search modules to perform search. The module parameters could be specified along with the modules. [wiki:adeiSEARCH Read more... ] == Providing additional data using ADEI Web Interface == Examples of additional data are: * The alarms registered during the data collection by control systems * The system operator messages * The information about events registered by DAQ subsystem * Anything else... This section describes how the additional data could be provided using ADEI Web Interface. The simplest approach is to provide a service generating an XML data, and XSLT stylesheet which would convert it to HTML. Of course it is possible to generate directly XHTML, but with XML+XSLT approach it is easier to alter presentation form and establish some automation (the XML service could be used by 3rd party client applications). After the service is ready, the new ADEI module (an extra page in the upper menu) should be created and registered in configuration. So, the following steps should be taken to setup extra ADEI page: * Create a service and put it in the ''services/'' subdirectory (see description [wiki:adeiNewService here]) * Create a module and put it in the ''modules/'' directory (see description [wiki:adeiNewModule here]) * Create a XSLT stylesheet which accepts produced XML and generates HTML to be displayed and put it in the ''xslt/'' folder. * Optionally, if additional parameters, like ''target'' for multi-task services, should be passed to the service, special update service should be created in ''services/update/'' directory ([wiki:adeiNewModule see details]) * The module should be registered in ''$MODULES'' variable in the configuration file ''config.php''. Be careful, some of the global configuration options specified in the config.php located in the root folder of ADEI installation may be overriden in setups by setup-specific configuration file. == Providing Additional Control Tab == This section describes how to extend left sidebar with additional control tabs. * As with additional pages, the new control tab should be created in the modules directory following the [wiki:adeiNewModule guidelines]. It should define ''module_title'' variable and ''moduleJS'', ''modulePage'' functions (the name of tab should be used instead of ''module'' prefix). * The ''modulePage'' should provide HTML markup and ''moduleJS'' attach JavaScript handlers to set ADEI variables and, hence, control ADEI engine. The global variable ''adei'' should be used to access ADEI functionality. * In certain cases the care on resizing should be taken. The following function registering callbacks can be useful: ''adei.popup.RegisterOnCallback'', ''adei.popup.RegisterOffCallback'', ''adei.popup.RegisterReHeightCallback'', ''adei.popup.RegisterReWidthCallback'', ''control_modules''.RegisterCallback'', and some others. For examples, take a look on ''virtual.php'' and ''source.php'' in the modules folder. * Finally, the module should be enabled. Just add the control name into the $CONTROLS variable in the configuration. The '''false''' value in array will enforce starting of a new line of controls. == Short Introduction to JavaScript API == '''ADEI API''': * ''adei.SetCustomProperties'' will adjust ADEI variables * ''adei.OpenControl'' will open specified control in the sidebar * ''adei.SwitchPopup'' will open/close the specified popup * ''adei.OpenModule'' will open the specified page * ''adei.SetStatus'' will set an informational message in the ADEI statusbar * ''adei.ReportError'' will set error message in the ADEI statusbar * ''adei.SetSuccessStatus'' will set short living confirmation message in the ADEI status bar * ''adei.ProposeStatus'' will set an informational message in the ADEI statusbar if nothing important is currently on display * ''adei.SetExtraStatus'' will extend the current statusbar message * ''adei.UpdateDIV'' will update content of the specified DIV using supplied service * ''adei.Search'' will perform search and open results in the searchtab '''Implementing context dependent controls''': It is possible to track if your control is currently on display using mentioned before functions: 'adei.popup.RegisterOnCallback'', ''adei.popup.RegisterOffCallback'', ''control_modules''.RegisterCallback''. Example is available in ''source.php''. The ''adei.config.GetModule()'' function will return currently opened page. The page change notification callback can be requested using ''adei.module.RegisterCallback'' function. For better compatibility with crappy browsers like IE, it is better to alter the context of control only when it is displayed. The following JavaScript classes and functions could be useful: * The ''SELECT'' class provides useful interface to generate cascading select controls. * Like with pages, the [wiki:adeiNewModule XML Module] can be used to fill the control context. * The simplest way to make part of control appear depending on the current page, is to define the css class for considered elements and, then, show/hide it using 'cssShowClass', 'cssHideClass' functions. Unfortunately, not all HTML objects can be easily hidden in all browsers (yes, again mainly IE is the problem). It is safer to hide div's if possible. * '' * The complete removal of controls is not supported in current version of ADEI.