Hi guys, 

the latest revisi on of UI Plugins proof-of-c on cept patch is now available 
for you to experiment with. I've split revision 7 changes apart from revision 6 
to make it easier to review new features that were added into revision 7. 

You can download and apply UI Plugins patches from oVirt Gerrit code review 
system: 

    1. revision 6 - http://gerrit.ovirt.org/#/c/8120/ 
    2. revision 7 - http://gerrit.ovirt.org/#/c/9250/ 

Please read on to learn what's new in this revisi on . If you have any 
comments, questi on s or ideas, please let me know! 



Engine REST API integration 

UiInit is not the only event handler function anymore! :) 

UI plugin infrastructure now integrates with Engine REST API by acquiring new 
REST API session [1] upon successful user authentication. 

REST API session ID is provided to plugins via RestApiSessionAcquired event 
handler function. For example: 

api.register({ 
RestApiSessionAcquired: function(sessionId) { 
// Do something with newly acquired session ID 
} 
}); 

Note that UiInit function is still the first function to be invoked on the 
given plugin. Plugins can therefore expect RestApiSessionAcquired function to 
be called shortly after UiInit function. 

For now, UI plugin infrastructure guarantees that acquired Engine REST API 
session will be valid while the user stays authenticated in WebAdmin. This is 
done by keeping REST API session alive via periodic heartbeats (HTTP requests) 
in the background. This also means that it's safe to store and use REST API 
session ID until RestApiSessionAcquired function is called again with new 
value. In future, we might consider dropping this kind of guarantee to avoid 
the keep-alive heartbeat, and use some kind of "is session valid" query to 
determine if the REST API session is still valid. 

After the user signs out of WebAdmin, Engine REST API session will be closed, 
as per [1]. After signing in again, the process of acquiring new REST API 
session and calling RestApiSessionAcquired function repeats with new session ID 
value. 

Engine REST API integration also works seamlessly with auto login - if the user 
is already logged in on the backend, running WebAdmin in new window (tab) will 
take him directly to the main (authenticated) section of the application. In 
this case, UI plugin infrastructure remembers the currently valid REST API 
session ID using HTML5 local storage (or cookie if the browser doesn't support 
it). 



New API function: showDialog 

It's now possible to open custom dialogs using showDialog function. For 
example: 

api.register({ 
UiInit: function() { 
api.addMainTabActionButton('Host', 'Show Test Dialog', { 
onClick: function() { 
api.showDialog('Test Dialog', 'http://www.ovirt.org/', 600, 400); 
} 
}); 
} 
}); 

The signature of showDialog function is following: 


showDialog (title, contentUrl, width, height) 

For now, dialogs are shown using window.open API (non-modal browser popups ). 
This will be changed in future, providing close integration with GWTP / 
WebAdmin dialog infrastructure. 



New API function: setMainTabContentUrl 

It's now possible to update content URL of the given custom main tab using 
setMainTabContentUrl function. For example: 

api.register({ 
UiInit: function() { 
// Use 'about:blank' URL to display empty content 
api.addMainTab('Custom Tab', 'custom-tab', 'about:blank'); 
}, 
RestApiSessionAcquired: function(sessionId) { 
var url = 'http://www.ovirt.org/?s=' + encodeURIComponent(sessionId); 
api.setMainTabContentUrl('custom-tab', url); 
} 
}); 

In the above example, we first add an empty custom main tab. We do this in 
UiInit event handler function because we know that it's the best place for 
one-time UI initialization :) As soon as we receive REST API session ID, we 
update the URL of the custom main tab. This is just an example how REST API 
session ID can be sent over to your server as part of main tab content URL. 

The signature of setMainTabContentUrl function is following: 


setMainTabContentUrl(historyToken, contentUrl) 

Note that historyToken essentially identifies the custom main tab. 



That's it for now, let me know what you think! 

Regards, 
Vojtech 


[1] http://wiki.ovirt.org/wiki/Features/RESTSessionManagement 

_______________________________________________
Engine-devel mailing list
Engine-devel@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-devel

Reply via email to