package org.ovirt.engine.ui.userportal.section.main.view.tab.basic; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.ui.common.editor.UiCommonEditorDriver; import org.ovirt.engine.ui.common.utils.ElementIdUtils; import org.ovirt.engine.ui.common.view.AbstractView; import org.ovirt.engine.ui.uicommonweb.ErrorPopupManager; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.userportal.UserPortalItemModel; import org.ovirt.engine.ui.userportal.ApplicationConstants; import org.ovirt.engine.ui.userportal.ApplicationResources; import org.ovirt.engine.ui.userportal.gin.AssetProvider; import org.ovirt.engine.ui.userportal.section.main.presenter.tab.basic.MainTabBasicListItemPresenterWidget; import org.ovirt.engine.ui.userportal.widget.basic.IconImage; import org.ovirt.engine.ui.userportal.widget.basic.MainTabBasicListItemActionButton; import org.ovirt.engine.ui.userportal.widget.basic.MainTabBasicListItemMessagesTranslator; import org.ovirt.engine.ui.userportal.widget.basic.VmPausedImage; import org.ovirt.engine.ui.userportal.widget.basic.VmUpMaskImage; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.DoubleClickEvent; import com.google.gwt.event.dom.client.DoubleClickHandler; import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.event.dom.client.MouseOutEvent; import com.google.gwt.event.dom.client.MouseOutHandler; import com.google.gwt.event.dom.client.MouseOverEvent; import com.google.gwt.event.dom.client.MouseOverHandler; import com.google.gwt.event.shared.GwtEvent; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.resources.client.CssResource; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.text.shared.AbstractRenderer; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.LayoutPanel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.ValueLabel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; public class MainTabBasicListItemView extends AbstractView implements MainTabBasicListItemPresenterWidget.ViewDef { interface ViewUiBinder extends UiBinder<Widget, MainTabBasicListItemView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } interface Driver extends UiCommonEditorDriver<UserPortalItemModel, MainTabBasicListItemView> { } public interface Style extends CssResource { String itemOverStyle(); String itemNotRunningOrConsoleTakenStyle(); String itemRunningStyle(); String machineStatusSelectedStyle(); String machineStatusStyle(); String itemSelectedStyle(); String handCursor(); String defaultCursor(); String runButtonAdditionalStyle(); String shutdownButtonAdditionalStyle(); String suspendButtonAdditionalStyle(); String rebootButtonAdditionalStyle(); } private final Driver driver = GWT.create(Driver.class); @UiField @Path("largeIconId") IconImage largeIconImage; @UiField @Path("isVmUp") VmUpMaskImage vmUpImage; @UiField @Path("status") VmPausedImage vmPausedImage; @UiField(provided = true) @Path("statusWithConsoleState") ValueLabel<Pair<VMStatus, Boolean>> vmStatus; @UiField @Path("name") Label vmName; @UiField @Ignore FlowPanel buttonsPanel; @UiField @Ignore SimplePanel consoleBaner; @UiField @Ignore LayoutPanel mainContainer; @UiField Style style; private final ErrorPopupManager errorPopupManager; private MainTabBasicListItemActionButton runButton; private MainTabBasicListItemActionButton shutdownButton; private MainTabBasicListItemActionButton suspendButton; private MainTabBasicListItemActionButton rebootButton; private static final ApplicationResources resources = AssetProvider.getResources(); private static final ApplicationConstants constants = AssetProvider.getConstants(); @Inject public MainTabBasicListItemView(ErrorPopupManager errorPopupManager, final MainTabBasicListItemMessagesTranslator translator) { this.errorPopupManager = errorPopupManager; final String consoleInUse = constants.consoleInUse(); vmStatus = new ValueLabel<>(new AbstractRenderer<Pair<VMStatus, Boolean>> () { @Override public String render(Pair<VMStatus, Boolean> object) { if (object.getSecond()) { return consoleInUse; } return translator.translate(object.getFirst().name()); } }); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); consoleBaner.setVisible(false); driver.initialize(this); } @Override public HasClickHandlers addRunButton() { MainTabBasicListItemActionButton button = new MainTabBasicListItemActionButton( null, resources.playIcon(), resources.playDisabledIcon(), style.runButtonAdditionalStyle()); this.runButton = button; addButtonToPanel(button); return button; } @Override public void updateRunButton(UICommand command, boolean isPool) { String tooltip = isPool ? constants.takeVm() : constants.runVm(); runButton.setTooltip(SafeHtmlUtils.fromSafeConstant(tooltip)); updateButton(runButton, command); } @Override public HasClickHandlers addShutdownButton() { MainTabBasicListItemActionButton button = new MainTabBasicListItemActionButton( SafeHtmlUtils.fromSafeConstant(constants.shutdownVm()), resources.stopIcon(), resources.stopDisabledIcon(), style.shutdownButtonAdditionalStyle()); this.shutdownButton = button; addButtonToPanel(button); return button; } @Override public void updateShutdownButton(UICommand command) { updateButton(shutdownButton, command); } @Override public HasClickHandlers addSuspendButton() { MainTabBasicListItemActionButton button = new MainTabBasicListItemActionButton( SafeHtmlUtils.fromSafeConstant(constants.suspendVm()), resources.suspendIcon(), resources.suspendDisabledIcon(), style.suspendButtonAdditionalStyle()); this.suspendButton = button; addButtonToPanel(button); return button; } @Override public void updateSuspendButton(UICommand command) { updateButton(suspendButton, command); } @Override public HasClickHandlers addRebootButton() { MainTabBasicListItemActionButton button = new MainTabBasicListItemActionButton( SafeHtmlUtils.fromSafeConstant(constants.rebootVm()), resources.rebootIcon(), resources.rebootDisabledIcon(), style.rebootButtonAdditionalStyle()); this.rebootButton = button; addButtonToPanel(button); return button; } @Override public void updateRebootButton(UICommand command) { updateButton(rebootButton, command); } void addButtonToPanel(MainTabBasicListItemActionButton button) { buttonsPanel.add(button); } void updateButton(MainTabBasicListItemActionButton button, UICommand command) { button.setEnabled(command != null ? command.getIsExecutionAllowed() : false); } @Override public void edit(UserPortalItemModel model) { driver.edit(model); } @Override public UserPortalItemModel flush() { return driver.flush(); } @Override public void cleanup() { driver.cleanup(); } @Override public void fireEvent(GwtEvent<?> event) { // No-op, the handlers are on the widget itself } @Override public HandlerRegistration addMouseOverHandler(MouseOverHandler handler) { return asWidget().addDomHandler(handler, MouseOverEvent.getType()); } @Override public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) { return asWidget().addDomHandler(handler, MouseOutEvent.getType()); } @Override public HandlerRegistration addClickHandler(ClickHandler handler) { return asWidget().addDomHandler(handler, ClickEvent.getType()); } @Override public void showDoubleClickBanner() { consoleBaner.setVisible(true); mainContainer.addStyleName(style.handCursor()); } @Override public void hideDoubleClickBanner() { consoleBaner.setVisible(false); mainContainer.addStyleName(style.defaultCursor()); } @Override public void setItemSelectedStyle() { vmStatus.setStyleName(style.machineStatusSelectedStyle()); mainContainer.setStyleName(style.itemSelectedStyle()); } @Override public void setVmStatusUnselectedStyle() { vmStatus.setStyleName(style.machineStatusStyle()); } @Override public void setItemMouseOverStyle() { mainContainer.setStyleName(style.itemOverStyle()); } @Override public void setItemRunningStyle() { mainContainer.setStyleName(style.itemRunningStyle()); } @Override public void setItemNotRunningOrConsoleTakenStyle() { mainContainer.setStyleName(style.itemNotRunningOrConsoleTakenStyle()); } @Override public HandlerRegistration addDoubleClickHandler(DoubleClickHandler handler) { return mainContainer.addDomHandler(handler, DoubleClickEvent.getType()); } @Override public void showErrorDialog(String message) { errorPopupManager.show(message); } @Override public void setElementId(String elementId) { vmName.getElement().setId( ElementIdUtils.createElementId(elementId, "name")); //$NON-NLS-1$ vmStatus.getElement().setId( ElementIdUtils.createElementId(elementId, "status")); //$NON-NLS-1$ runButton.setElementId( ElementIdUtils.createElementId(elementId, "runButton")); //$NON-NLS-1$ shutdownButton.setElementId( ElementIdUtils.createElementId(elementId, "shutdownButton")); //$NON-NLS-1$ suspendButton.setElementId( ElementIdUtils.createElementId(elementId, "suspendButton")); //$NON-NLS-1$ rebootButton.setElementId( ElementIdUtils.createElementId(elementId, "rebootButton")); //$NON-NLS-1$ } }