Daniel Erez has uploaded a new change for review. Change subject: webadmin: snapshots sub-tab - info on active vm ......................................................................
webadmin: snapshots sub-tab - info on active vm VMs -> Snapshots sub-tab: As GetVmConfigurationBySnapshot query already supports retrieving information for active snapshot, update snapshot info tab when selecting 'Active VM' snapshot. Change-Id: I1327b8787cc1f07227247ded8b6d3a32baf8ef7a Signed-off-by: Daniel Erez <[email protected]> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmSnapshotInfoPanel.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmSnapshotListModelTable.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SnapshotModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java 4 files changed, 57 insertions(+), 118 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/83/21583/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmSnapshotInfoPanel.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmSnapshotInfoPanel.java index e979dd4..59fd544 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmSnapshotInfoPanel.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmSnapshotInfoPanel.java @@ -1,17 +1,15 @@ package org.ovirt.engine.ui.common.widget.uicommon.vm; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; - +import com.google.gwt.dom.client.Style.Position; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.user.client.ui.ScrollPanel; +import com.google.gwt.user.client.ui.TabLayoutPanel; +import com.google.gwt.view.client.NoSelectionModel; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.ImageStatus; -import org.ovirt.engine.core.common.businessentities.Snapshot; import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.common.businessentities.network.VmInterfaceType; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; -import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.CommonApplicationMessages; import org.ovirt.engine.ui.common.CommonApplicationTemplates; @@ -23,19 +21,14 @@ import org.ovirt.engine.ui.common.widget.table.column.RxTxRateColumn; import org.ovirt.engine.ui.common.widget.table.column.SumUpColumn; import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip; +import org.ovirt.engine.ui.frontend.INewAsyncCallback; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.vms.SnapshotModel; -import org.ovirt.engine.ui.uicommonweb.models.vms.VmSnapshotListModel; -import org.ovirt.engine.ui.uicompat.Event; -import org.ovirt.engine.ui.uicompat.EventArgs; -import org.ovirt.engine.ui.uicompat.IEventListener; -import com.google.gwt.dom.client.Style.Position; -import com.google.gwt.dom.client.Style.Unit; -import com.google.gwt.user.client.ui.ScrollPanel; -import com.google.gwt.user.client.ui.TabLayoutPanel; -import com.google.gwt.view.client.NoSelectionModel; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; public class VmSnapshotInfoPanel extends TabLayoutPanel { @@ -43,20 +36,16 @@ private final CommonApplicationMessages messages; private final CommonApplicationTemplates templates; - private VmSnapshotListModel vmSnapshotListModel; - private VmSnapshotInfoGeneral generalForm; private EntityModelCellTable<ListModel> disksTable; private EntityModelCellTable<ListModel> nicsTable; private EntityModelCellTable<ListModel> appsTable; - public VmSnapshotInfoPanel(VmSnapshotListModel vmSnapshotListModel, - CommonApplicationConstants constants, + public VmSnapshotInfoPanel(CommonApplicationConstants constants, CommonApplicationMessages messages, CommonApplicationTemplates templates) { super(20, Unit.PX); - this.vmSnapshotListModel = vmSnapshotListModel; this.constants = constants; this.messages = messages; this.templates = templates; @@ -80,21 +69,13 @@ add(new ScrollPanel(appsTable), constants.applicationsLabel()); } - public void updatePanel(Snapshot snapshot) { - HashMap<Guid, SnapshotModel> snapshotsMap = vmSnapshotListModel.getSnapshotsMap(); - Guid snapshotId = snapshot != null ? snapshot.getId() : null; - final SnapshotModel snapshotModel = snapshotsMap.get(snapshotId); - - updateTabsData(snapshotModel); - - if (!(Boolean) snapshotModel.getIsPropertiesUpdated().getEntity()) { - snapshotModel.getIsPropertiesUpdated().getEntityChangedEvent().addListener(new IEventListener() { - @Override - public void eventRaised(Event ev, Object sender, EventArgs args) { - updateTabsData(snapshotModel); - } - }); - } + public void updatePanel(final SnapshotModel snapshotModel) { + snapshotModel.updateVmConfiguration(new INewAsyncCallback() { + @Override + public void onSuccess(Object model, Object returnValue) { + updateTabsData(snapshotModel); + } + }); } private void addStyle() { diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmSnapshotListModelTable.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmSnapshotListModelTable.java index 3ce4bf7..c452fe3 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmSnapshotListModelTable.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/VmSnapshotListModelTable.java @@ -1,38 +1,36 @@ package org.ovirt.engine.ui.common.widget.uicommon.vm; +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.event.shared.EventBus; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.user.client.ui.Widget; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.businessentities.Snapshot; -import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.queries.CommandVersionsInfo; import org.ovirt.engine.core.common.queries.ConfigurationValues; +import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.CommonApplicationMessages; import org.ovirt.engine.ui.common.CommonApplicationTemplates; import org.ovirt.engine.ui.common.system.ClientStorage; import org.ovirt.engine.ui.common.uicommon.model.DataBoundTabModelProvider; import org.ovirt.engine.ui.common.widget.action.UiCommandButtonDefinition; -import org.ovirt.engine.ui.common.widget.table.OrderedMultiSelectionModel; import org.ovirt.engine.ui.common.widget.table.SimpleActionTable; import org.ovirt.engine.ui.common.widget.uicommon.AbstractModelBoundTableWidget; import org.ovirt.engine.ui.common.widget.uicommon.snapshot.SnapshotsViewColumns; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; +import org.ovirt.engine.ui.uicommonweb.models.vms.SnapshotModel; import org.ovirt.engine.ui.uicommonweb.models.vms.VmSnapshotListModel; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventArgs; import org.ovirt.engine.ui.uicompat.IEventListener; -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.shared.EventBus; -import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.uibinder.client.UiField; -import com.google.gwt.user.client.ui.SimplePanel; -import com.google.gwt.user.client.ui.Widget; -import com.google.gwt.view.client.CellPreviewEvent; -import com.google.gwt.view.client.DefaultSelectionEventManager; -import com.google.gwt.view.client.DefaultSelectionEventManager.EventTranslator; -import com.google.gwt.view.client.DefaultSelectionEventManager.SelectAction; +import java.util.HashMap; public class VmSnapshotListModelTable<L extends VmSnapshotListModel> extends AbstractModelBoundTableWidget<Snapshot, L> { @@ -66,7 +64,7 @@ snapshotsTableContainer.add(table); // Create Snapshot information tab panel - vmSnapshotInfoPanel = new VmSnapshotInfoPanel(getModel(), constants, messages, templates); + vmSnapshotInfoPanel = new VmSnapshotInfoPanel(constants, messages, templates); snapshotInfoContainer.add(vmSnapshotInfoPanel); } @@ -78,9 +76,9 @@ @Override public void initTable(final CommonApplicationConstants constants) { getTable().enableColumnResizing(); + getTable().setMultiSelectionDisabled(true); initActionButtons(constants); - disableActiveSnapshotRow(); getModel().getEntityChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { @@ -92,13 +90,30 @@ getModel().getSelectedItemChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { - Snapshot snapshot = (Snapshot) getModel().getSelectedItem(); - if (snapshot != null && !getTable().getSelectionModel().isSelected(snapshot)) { - getTable().getSelectionModel().setSelected(snapshot, true); - } - vmSnapshotInfoPanel.updatePanel(snapshot); + updateSnapshotInfo(); } }); + } + + private void updateSnapshotInfo() { + final Snapshot snapshot = (Snapshot) getModel().getSelectedItem(); + if (snapshot == null) { + return; + } + + HashMap<Guid, SnapshotModel> snapshotsMap = getModel().getSnapshotsMap(); + SnapshotModel snapshotModel = snapshotsMap.get(snapshot.getId()); + vmSnapshotInfoPanel.updatePanel(snapshotModel != null ? snapshotModel : new SnapshotModel()); + + if (!getTable().getSelectionModel().isSelected(snapshot)) { + // first let list of items get updated, only then select item + Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { + @Override + public void execute() { + getTable().getSelectionModel().setSelected(snapshot, true); + } + }); + } } private void updateMemoryColumnVisibility() { @@ -175,32 +190,6 @@ } } }); - } - - private void disableActiveSnapshotRow() { - // Create a selection event manager (to disable 'current' snapshot selection) - DefaultSelectionEventManager<Snapshot> selectionEventManager = - DefaultSelectionEventManager.createCustomManager(new EventTranslator<Snapshot>() { - @Override - public boolean clearCurrentSelection(CellPreviewEvent<Snapshot> event) { - return true; - } - - @Override - public SelectAction translateSelectionEvent(CellPreviewEvent<Snapshot> event) { - if (event.getValue().getType() == SnapshotType.ACTIVE) { - return SelectAction.IGNORE; - } - - return SelectAction.DEFAULT; - } - }); - - // Set selection mode, disable multiselection and first row ('current' snapshot) - OrderedMultiSelectionModel<Snapshot> selectionModel = getTable().getSelectionModel(); - selectionModel.setDisabledRows(0); - getTable().setTableSelectionModel(selectionModel, selectionEventManager); - getTable().setMultiSelectionDisabled(true); } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SnapshotModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SnapshotModel.java index ef78c0f..97e724d 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SnapshotModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SnapshotModel.java @@ -121,18 +121,6 @@ memory = value; } - private EntityModel isPropertiesUpdated; - - public EntityModel getIsPropertiesUpdated() - { - return isPropertiesUpdated; - } - - public void setIsPropertiesUpdated(EntityModel value) - { - isPropertiesUpdated = value; - } - private boolean validateByVmSnapshots; public boolean isValidateByVmSnapshots() { @@ -171,9 +159,6 @@ setDisks(new ArrayList<DiskImage>()); setNics(new ArrayList<VmNetworkInterface>()); setApps(new ArrayList<String>()); - - setIsPropertiesUpdated(new EntityModel()); - getIsPropertiesUpdated().setEntity(false); } @Override @@ -227,7 +212,7 @@ }), vm.getId()); } - public void updateVmConfiguration() + public void updateVmConfiguration(final INewAsyncCallback onUpdateAsyncCallback) { Snapshot snapshot = ((Snapshot) getEntity()); @@ -244,9 +229,9 @@ snapshotModel.setNics(vm.getInterfaces()); snapshotModel.setApps(Arrays.asList(snapshot.getAppList() != null ? snapshot.getAppList().split(",") : new String[] {})); //$NON-NLS-1$ - - snapshotModel.getIsPropertiesUpdated().setEntity(true); } + + onUpdateAsyncCallback.onSuccess(snapshotModel, null); } }), snapshot.getId()); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java index e03905a..4c23c4e 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java @@ -21,7 +21,6 @@ import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.VmTemplate; -import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.common.queries.ConfigurationValues; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; @@ -197,8 +196,6 @@ } } - private boolean isEntityChanged; - public VmSnapshotListModel() { setTitle(ConstantsManager.getInstance().getConstants().snapshotsTitle()); @@ -215,7 +212,6 @@ getCanSelectSnapshot().setEntity(true); setSnapshotsMap(new HashMap<Guid, SnapshotModel>()); - getSnapshotsMap().put(null, new SnapshotModel()); if (getCustomPropertiesKeysList() == null) { AsyncDataProvider.getCustomPropertiesList(new AsyncQuery(this, @@ -259,10 +255,10 @@ super.setItems(sortedSnapshots); - if (isEntityChanged && sortedSnapshots.size() > 1) { - setSelectedItem(sortedSnapshots.get(1)); + // Try to select the last created snapshot (fallback to active snapshot) + if (getSelectedItem() == null) { + setSelectedItem(sortedSnapshots.size() > 1 ? sortedSnapshots.get(1) : sortedSnapshots.get(0)); } - isEntityChanged = false; updateActionAvailability(); } @@ -282,7 +278,6 @@ if (getEntity() != null) { - isEntityChanged = true; getSearchCommand().execute(); } } @@ -304,11 +299,6 @@ { super.onSelectedItemChanged(); updateActionAvailability(); - - if (getSelectedItem() != null) { - Snapshot snapshot = ((Snapshot) getSelectedItem()); - updateVmConfigurationBySnapshot(snapshot.getId()); - } } @Override @@ -742,12 +732,6 @@ } } return null; - } - - public void updateVmConfigurationBySnapshot(Guid snapshotId) - { - SnapshotModel snapshotModel = snapshotsMap.get(snapshotId); - snapshotModel.updateVmConfiguration(); } protected void updateIsCloneVmSupported() -- To view, visit http://gerrit.ovirt.org/21583 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I1327b8787cc1f07227247ded8b6d3a32baf8ef7a Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
