package org.ovirt.engine.ui.webadmin.widget.tab; import org.ovirt.engine.core.compat.Event; import org.ovirt.engine.core.compat.EventArgs; import org.ovirt.engine.core.compat.IEventListener; import org.ovirt.engine.core.compat.PropertyChangedEventArgs; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.webadmin.gin.ClientGinjectorProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.CommonModelChangeEvent; import org.ovirt.engine.ui.webadmin.uicommon.model.CommonModelChangeEvent.CommonModelChangeHandler; import org.ovirt.engine.ui.webadmin.uicommon.model.ModelProvider; public class ModelBoundTab extends SimpleTab { public ModelBoundTab(final ModelBoundTabData tabData, AbstractTabPanel tabPanel) { super(tabData, tabPanel); setAlign(tabData.getAlign()); // Update tab accessibility setAccessible(tabData.getModelProvider().getModel().getIsAvailable()); // Tab widgets are created as part of the corresponding TabView, // at this point CommonModelChangeEvent has already been fired registerModelEventListeners(tabData.getModelProvider()); // Add CommonModel change handler to be notified when the CommonModel instance changes ClientGinjectorProvider.instance().getEventBus() .addHandler(CommonModelChangeEvent.getType(), new CommonModelChangeHandler() { @Override public void onCommonModelChange(CommonModelChangeEvent event) { setAccessible(tabData.getModelProvider().getModel().getIsAvailable()); registerModelEventListeners(tabData.getModelProvider()); } }); } void registerModelEventListeners(final ModelProvider<? extends EntityModel> modelProvider) { modelProvider.getModel().getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { PropertyChangedEventArgs pcArgs = (PropertyChangedEventArgs) args; // Update tab accessibility when 'IsAvailable' property changes if ("IsAvailable".equals(pcArgs.PropertyName)) { boolean isAvailable = modelProvider.getModel().getIsAvailable(); setAccessible(isAvailable); } } }); } }