package org.ovirt.engine.ui.webadmin.uicommon.model;
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.ui.uicommonweb.models.CommonModel;
import org.ovirt.engine.ui.uicommonweb.models.LoginModel;
import org.ovirt.engine.ui.webadmin.auth.CurrentUser;
import com.google.gwt.event.shared.EventBus;
/**
* Manages the {@link CommonModel} instance shared by all model providers.
* <p>
* Triggers following events upon certain actions:
* <ul>
* <li>{@link CommonModelChangeEvent} when a new CommonModel instance is created
* </ul>
*/
public class CommonModelManager {
private static CommonModel commonModel;
/**
* Creates new {@link CommonModel} instance and sets up necessary event listeners.
* <p>
* Should be called right after successful user authentication, before redirecting the user to the main section.
*/
public static void init(final EventBus eventBus, final CurrentUser user, final LoginModel loginModel) {
commonModel = new CommonModel();
commonModel.getSelectedItemChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
MainModelSelectionChangeEvent.fire(eventBus, commonModel.getSelectedItem());
}
});
commonModel.getSignedOutEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
// Clear CommonModel reference after the user signs out
commonModel = null;
loginModel.getUserName().setEntity(null);
loginModel.getPassword().setEntity(null);
loginModel.getPassword().setIsChangable(true);
loginModel.getUserName().setIsChangable(true);
loginModel.getDomain().setIsChangable(true);
loginModel.getLoginCommand().setIsExecutionAllowed(true);
user.onUserLogout();
}
});
// Let others know that the CommonModel reference has changed
CommonModelChangeEvent.fire(eventBus, commonModel);
}
/**
* Returns the {@link CommonModel} instance if the user is currently logged in, {@code null} otherwise.
*/
public static CommonModel instance() {
return commonModel;
}
}