package org.ovirt.engine.ui.webadmin.section.main.view.tab.virtualMachine; import javax.inject.Inject; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; import org.ovirt.engine.ui.common.idhandler.WithElementId; import org.ovirt.engine.ui.common.uicommon.model.DetailModelProvider; import org.ovirt.engine.ui.common.view.AbstractSubTabFormView; import org.ovirt.engine.ui.common.widget.uicommon.vm.VmGeneralModelForm; import org.ovirt.engine.ui.uicommonweb.models.vms.VmGeneralModel; import org.ovirt.engine.ui.uicommonweb.models.vms.VmListModel; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.virtualMachine.SubTabVirtualMachineGeneralPresenter; import com.google.gwt.core.client.GWT; import com.google.gwt.editor.client.Editor; 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.HTMLPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Widget; public class SubTabVirtualMachineGeneralView extends AbstractSubTabFormView<VM, VmListModel<Void>, VmGeneralModel> implements SubTabVirtualMachineGeneralPresenter.ViewDef, Editor<VmGeneralModel> { interface ViewUiBinder extends UiBinder<Widget, SubTabVirtualMachineGeneralView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } interface ViewIdHandler extends ElementIdHandler<SubTabVirtualMachineGeneralView> { ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); } private static final ApplicationResources resources = AssetProvider.getResources(); @UiField(provided = true) @WithElementId VmGeneralModelForm form; // This is the panel containing the alerts label and the // potential alert, this way we can hide the panel // completely (including the label) if there is no alert // to present: @UiField HTMLPanel alertsPanel; // This is the list of action items inside the panel, so that we // can clear and add elements inside without affecting the panel: @UiField FlowPanel alertsList; @Inject public SubTabVirtualMachineGeneralView(DetailModelProvider<VmListModel<Void>, VmGeneralModel> modelProvider) { super(modelProvider); this.form = new VmGeneralModelForm(modelProvider); initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); clearAlerts(); generateIds(); form.initialize(); } @Override protected void generateIds() { ViewIdHandler.idHandler.generateAndSetIds(this); } @Override public void setMainTabSelectedItem(VM selectedItem) { form.update(); } @Override public void clearAlerts() { // Remove all the alert widgets and make the panel invisible: alertsList.clear(); alertsPanel.setVisible(false); } @Override public void addAlert(Widget alertWidget) { // Create a composite panel that contains the alert icon and the widget provided // by the caller, both rendered horizontally: FlowPanel alertPanel = new FlowPanel(); Image alertIcon = new Image(resources.alertImage()); alertIcon.getElement().getStyle().setProperty("display", "inline"); //$NON-NLS-1$ //$NON-NLS-2$ alertWidget.getElement().getStyle().setProperty("display", "inline"); //$NON-NLS-1$ //$NON-NLS-2$ alertPanel.add(alertIcon); alertPanel.add(alertWidget); // Add the composite panel to the alerts panel: alertsList.add(alertPanel); // Make the panel visible if it wasn't: if (!alertsPanel.isVisible()) { alertsPanel.setVisible(true); } } }