package org.ovirt.engine.ui.userportal.client.views.extended.maingrid; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.compat.EventArgs; import org.ovirt.engine.core.compat.PropertyChangedEventArgs; import org.ovirt.engine.ui.uicommon.models.userportal.UserPortalItemModel; import org.ovirt.engine.ui.uicommon.models.userportal.UserPortalListModel; import org.ovirt.engine.core.compat.Event; import org.ovirt.engine.core.compat.IEventListener; import org.ovirt.engine.ui.userportal.client.Masthead; import org.ovirt.engine.ui.userportal.client.UserPortal; import org.ovirt.engine.ui.userportal.client.binders.ObjectNameResolver; import org.ovirt.engine.ui.userportal.client.common.UserPortalMode; import org.ovirt.engine.ui.userportal.client.components.GridController; import org.ovirt.engine.ui.userportal.client.components.RefreshPanel; import org.ovirt.engine.ui.userportal.client.modalpanels.ChangeCdModalPanel; import org.ovirt.engine.ui.userportal.client.modalpanels.ItemRemoveModalPanel; import org.ovirt.engine.ui.userportal.client.modalpanels.NewTemplateModalPanel; import org.ovirt.engine.ui.userportal.client.modalpanels.NewVmModalPanel; import org.ovirt.engine.ui.userportal.client.modalpanels.RunOnceModalPanel; import org.ovirt.engine.ui.userportal.client.components.GridRefreshManager; import org.ovirt.engine.ui.userportal.client.util.messages.Message; import org.ovirt.engine.ui.userportal.client.views.extended.maingrid.components.MainGridItemSubTabs; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.util.EventHandler; import com.smartgwt.client.widgets.Window; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.events.KeyDownEvent; import com.smartgwt.client.widgets.events.KeyDownHandler; import com.smartgwt.client.widgets.layout.LayoutSpacer; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.menu.Menu; import com.smartgwt.client.widgets.menu.MenuItem; import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent; import com.smartgwt.client.widgets.toolbar.ToolStrip; import com.smartgwt.client.widgets.toolbar.ToolStripButton; import com.smartgwt.client.widgets.toolbar.ToolStripMenuButton; import com.smartgwt.client.widgets.toolbar.ToolStripSeparator; public class MainGrid extends VLayout { UserPortalItemsGrid upItemsGrid; MainGridItemSubTabs upItemTabs; static private ToolStripButton runOnceButton; static private ToolStripButton newDesktopButton; static private ToolStripButton newServerButton; static private ToolStripButton editVmButton; static private ToolStripButton removeVmButton; static private ToolStripButton changeCdButton; static private ToolStripButton newTemplateButton; public UserPortalListModel uplm = new UserPortalListModel(); private MainGrid instance = this; public MainGrid() { upItemsGrid = new UserPortalItemsGrid(this); upItemsGrid.setModel(uplm); //upItemTabs = new UserPortalItemDetailTabPane(this); upItemTabs = new MainGridItemSubTabs(uplm, upItemsGrid); setOverflow(Overflow.HIDDEN); setWidth100(); setHeight100(); // Add view's members addMember(getToolbar()); addMember(upItemsGrid.getLayout()); addMember(upItemTabs); // At the initial item selection in UserPortalListModel, the detail models are initialized // and the detail tab section should become visible and the resize bar should be visible in the items grid uplm.getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { PropertyChangedEventArgs pcea = (PropertyChangedEventArgs)args; if (pcea.PropertyName.equals("DetailModels")) { //upItemTabs.initDetailsPane(); initItemSelected(); } } }); upItemsGrid.getSelectionStatusChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { if (args == GridController.ITEM_SELECTED_EVENT_ARGS) { upItemsGrid.getLayout().setShowResizeBar(true); upItemTabs.show(); } else { upItemsGrid.getLayout().setShowResizeBar(false); upItemTabs.hide(); } } }); upItemsGrid.getItemsChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { if (Masthead.getUserPortalMode() == UserPortalMode.EXTENDED && UserPortal.getSessionConnectAutomatically() && uplm.getCanConnectAutomatically()) { UserPortalItemModel userPortalItemModel = uplm.GetStatusUpVms(uplm.getItems()).get(0); if (userPortalItemModel != null) { userPortalItemModel.getDefaultConsole().getConnectCommand().Execute(); UserPortal.setSessionConnectAutomatically(false); } } upItemsGrid.getItemsChangedEvent().removeListener(this); } }); addKeyDownHandler(new KeyDownHandler() { @Override public void onKeyDown(KeyDownEvent event) { upItemsGrid.keyPressed(EventHandler.getKey()); } }); setButtonsAvailabilityListeners(); } public ToolStrip getToolbar() { ToolStrip toolBar = new ToolStrip(); toolBar.setWidth100(); toolBar.setBackgroundColor("#FFFFFF"); toolBar.setStyleName("mainGrid-Toolbar"); newDesktopButton = new ToolStripButton("New Desktop"); newDesktopButton.setAutoFit(true); newDesktopButton.addClickHandler(newDesktopButtonClickHandler); newDesktopButton.setHeight(19); newServerButton = new ToolStripButton("New Server"); newServerButton.setAutoFit(true); newServerButton.addClickHandler(newServerButtonClickHandler); newServerButton.setHeight(19); editVmButton = new ToolStripButton("Edit"); editVmButton.setAutoFit(true); editVmButton.addClickHandler(editVmButtonClickHandler); editVmButton.setDisabled(true); editVmButton.setHeight(19); removeVmButton = new ToolStripButton("Remove"); removeVmButton.setAutoFit(true); removeVmButton.addClickHandler(removeVmButtonClickHandler); removeVmButton.setDisabled(true); removeVmButton.setHeight(19); runOnceButton = new ToolStripButton("Run Once"); runOnceButton.setAutoFit(true); runOnceButton.addClickHandler(runOnceButtonClickHandler); runOnceButton.setDisabled(true); runOnceButton.setHeight(19); changeCdButton = new ToolStripButton("Change CD"); changeCdButton.setAutoFit(true); changeCdButton.addClickHandler(changeCdButtonClickHandler); changeCdButton.setDisabled(true); changeCdButton.setHeight(19); newTemplateButton = new ToolStripButton("Make Template"); newTemplateButton.setAutoFit(true); newTemplateButton.addClickHandler(newTemplateButtonClickHandler); newTemplateButton.setDisabled(true); newTemplateButton.setHeight(19); toolBar.setMembers(newServerButton, new ToolStripSeparator(), newDesktopButton, new ToolStripSeparator(), editVmButton, new ToolStripSeparator(), removeVmButton, new ToolStripSeparator(), runOnceButton, new ToolStripSeparator(), changeCdButton, new ToolStripSeparator(), newTemplateButton, new LayoutSpacer(), new RefreshPanel(upItemsGrid)); return toolBar; } private ToolStripMenuButton getDebugMenuButton() { Menu menu = new Menu(); menu.setShowShadow(true); menu.setShadowDepth(3); MenuItem infoMsgItem = new MenuItem("Send info msg", "msg/msg_info.png"); infoMsgItem .addClickHandler(new com.smartgwt.client.widgets.menu.events.ClickHandler() { @Override public void onClick(MenuItemClickEvent event) { UserPortal.getMessageCenter().notify( new Message("Added info msg!", Message.Severity.Info)); } }); MenuItem warnMsgItem = new MenuItem("Send warn msg", "msg/msg_warn.png"); warnMsgItem .addClickHandler(new com.smartgwt.client.widgets.menu.events.ClickHandler() { @Override public void onClick(MenuItemClickEvent event) { UserPortal.getMessageCenter().notify( new Message("Added info msg!", Message.Severity.Warning)); } }); MenuItem errorMsgItem = new MenuItem("Handle error", "msg/msg_error.png"); errorMsgItem .addClickHandler(new com.smartgwt.client.widgets.menu.events.ClickHandler() { @Override public void onClick(MenuItemClickEvent event) { UserPortal.getErrorHandler().handleError( "An unexpected exception!", new Exception("Detailed exception")); } }); menu.setItems(infoMsgItem, warnMsgItem, errorMsgItem); ToolStripMenuButton menuButton = new ToolStripMenuButton("Debug", menu); menuButton.setWidth(100); return menuButton; } ClickHandler newDesktopButtonClickHandler = new ClickHandler() { @Override public void onClick(ClickEvent event) { uplm.getNewDesktopCommand().Execute(); Window newVmModalPanel = new NewVmModalPanel(upItemsGrid, uplm.getVmModel(), uplm); newVmModalPanel.draw(); } }; ClickHandler newServerButtonClickHandler = new ClickHandler() { @Override public void onClick(ClickEvent event) { uplm.getNewServerCommand().Execute(); Window newVmModalPanel = new NewVmModalPanel(upItemsGrid, uplm.getVmModel(), uplm); newVmModalPanel.draw(); } }; ClickHandler editVmButtonClickHandler = new ClickHandler() { @Override public void onClick(ClickEvent event) { uplm.getEditCommand().Execute(); Window newVmModalPanel = new NewVmModalPanel(upItemsGrid, uplm.getVmModel(), uplm); newVmModalPanel.draw(); } }; ClickHandler removeVmButtonClickHandler = new ClickHandler() { @Override public void onClick(ClickEvent event) { uplm.getRemoveCommand().Execute(); Window removeVmModalPanel = new ItemRemoveModalPanel("Remove Virtual Machine(s)", "Virtual Machine(s)", uplm, new ObjectNameResolver() { @Override public String getItemName(Object o) { return ((VM)((UserPortalItemModel)o).getEntity()).getvm_name(); } }, upItemsGrid); removeVmModalPanel.draw(); } }; ClickHandler runOnceButtonClickHandler = new ClickHandler() { @Override public void onClick(ClickEvent event) { uplm.getRunOnceCommand().Execute(); Window runOnceModalPanel = new RunOnceModalPanel(instance); runOnceModalPanel.draw(); } }; ClickHandler changeCdButtonClickHandler = new ClickHandler() { @Override public void onClick(ClickEvent event) { uplm.getChangeCdCommand().Execute(); Window attachCDModalPanel = new ChangeCdModalPanel(uplm.getAttachCdModel().getTitle(), instance); attachCDModalPanel.draw(); } }; ClickHandler newTemplateButtonClickHandler = new ClickHandler() { @Override public void onClick(ClickEvent event) { uplm.getNewTemplateCommand().Execute(); Window newTemplateModalPanel = new NewTemplateModalPanel(uplm.getVmModel().getTitle(), instance); newTemplateModalPanel.draw(); } }; public void setButtonsAvailabilityListeners() { uplm.getNewDesktopCommand().getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { PropertyChangedEventArgs evArgs = (PropertyChangedEventArgs)args; if (evArgs.PropertyName.equals("IsExecutionAllowed")) { newDesktopButton.setDisabled(!uplm.getNewDesktopCommand().getIsExecutionAllowed()); } } }); uplm.getNewServerCommand().getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { PropertyChangedEventArgs evArgs = (PropertyChangedEventArgs)args; if (evArgs.PropertyName.equals("IsExecutionAllowed")) { newServerButton.setDisabled(!uplm.getNewServerCommand().getIsExecutionAllowed()); } } }); uplm.getRemoveCommand().getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { PropertyChangedEventArgs evArgs = (PropertyChangedEventArgs)args; if (evArgs.PropertyName.equals("IsExecutionAllowed")) { removeVmButton.setDisabled(!uplm.getRemoveCommand().getIsExecutionAllowed()); } } }); uplm.getEditCommand().getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { PropertyChangedEventArgs evArgs = (PropertyChangedEventArgs)args; if (evArgs.PropertyName.equals("IsExecutionAllowed")) { editVmButton.setDisabled(!uplm.getEditCommand().getIsExecutionAllowed()); } } }); uplm.getRunOnceCommand().getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { PropertyChangedEventArgs evArgs = (PropertyChangedEventArgs)args; if (evArgs.PropertyName.equals("IsExecutionAllowed")) { runOnceButton.setDisabled(!uplm.getRunOnceCommand().getIsExecutionAllowed()); } } }); uplm.getChangeCdCommand().getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { PropertyChangedEventArgs evArgs = (PropertyChangedEventArgs)args; if (evArgs.PropertyName.equals("IsExecutionAllowed")) { changeCdButton.setDisabled(!uplm.getChangeCdCommand().getIsExecutionAllowed()); } } }); uplm.getNewTemplateCommand().getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { PropertyChangedEventArgs evArgs = (PropertyChangedEventArgs)args; if (evArgs.PropertyName.equals("IsExecutionAllowed")) { newTemplateButton.setDisabled(!uplm.getNewTemplateCommand().getIsExecutionAllowed()); } } }); } public void initItemSelected() { removeVmButton.setDisabled(!uplm.getRemoveCommand().getIsExecutionAllowed()); editVmButton.setDisabled(!uplm.getEditCommand().getIsExecutionAllowed()); runOnceButton.setDisabled(!uplm.getRunOnceCommand().getIsExecutionAllowed()); changeCdButton.setDisabled(!uplm.getChangeCdCommand().getIsExecutionAllowed()); newTemplateButton.setDisabled(!uplm.getChangeCdCommand().getIsExecutionAllowed()); } @Override public void show() { super.show(); GridRefreshManager.getInstance().subscribe(upItemsGrid); } @Override public void hide() { super.hide(); GridRefreshManager.getInstance().unsubscribe(upItemsGrid); } // Should be called whenever an action is performed on the grid which requires a refresh or a series of refreshes public void gridActionPerformed() { upItemsGrid.gridChangePerformed(); } }