Arik Hadas has uploaded a new change for review. Change subject: webadmin: preview snapshot with memory popup ......................................................................
webadmin: preview snapshot with memory popup New popup is now shown when the user choose to preview snapshot that has memory. the user can select not to use the saved memory when previewing the snapshot from this popup. Change-Id: I18c99b22b33256e6bcf1cb9b1151e908e27ded8d Bug-Url: https://bugzilla.redhat.com/960931 Signed-off-by: Arik Hadas <aha...@redhat.com> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmSnapshotPreviewPopupWidget.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmSnapshotPreviewPopupWidget.ui.xml M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/vm/VmSnapshotPreviewPopupPresenterWidget.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmSnapshotPreviewPopupView.java 10 files changed, 235 insertions(+), 11 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/86/15686/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java index 3d60a87..ac8281a 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java @@ -157,6 +157,9 @@ @DefaultStringValue("Save Memory") String virtualMachineSnapshotCreatePopupMemoryLabel(); + @DefaultStringValue("Restore Memory") + String virtualMachineSnapshotPreviewPopupMemoryLabel(); + @DefaultStringValue("Loading...") String loadingLabel(); @@ -349,6 +352,9 @@ @DefaultStringValue("Delete protection") String deleteProtectionPopup(); + @DefaultStringValue("Restore saved memory") + String restoreMemoryPopup(); + @DefaultStringValue("Smartcard enabled") String smartcardVmPopup(); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmSnapshotPreviewPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmSnapshotPreviewPopupWidget.java new file mode 100644 index 0000000..cd368f4 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmSnapshotPreviewPopupWidget.java @@ -0,0 +1,70 @@ +package org.ovirt.engine.ui.common.widget.uicommon.popup.vm; + +import org.ovirt.engine.ui.common.CommonApplicationConstants; +import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; +import org.ovirt.engine.ui.common.idhandler.WithElementId; +import org.ovirt.engine.ui.common.widget.Align; +import org.ovirt.engine.ui.common.widget.editor.EntityModelCheckBoxEditor; +import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractModelBoundPopupWidget; +import org.ovirt.engine.ui.uicommonweb.models.vms.SnapshotModel; +import org.ovirt.engine.ui.uicompat.ConstantsManager; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.editor.client.SimpleBeanEditorDriver; +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; + +public class VmSnapshotPreviewPopupWidget extends AbstractModelBoundPopupWidget<SnapshotModel> { + + interface Driver extends SimpleBeanEditorDriver<SnapshotModel, VmSnapshotPreviewPopupWidget> { + } + + interface ViewUiBinder extends UiBinder<FlowPanel, VmSnapshotPreviewPopupWidget> { + ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); + } + + interface ViewIdHandler extends ElementIdHandler<VmSnapshotPreviewPopupWidget> { + ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); + } + + @UiField + @Ignore + Label messageLabel; + + @UiField(provided = true) + @Path(value = "memory.entity") + @WithElementId("memory") + public EntityModelCheckBoxEditor memoryEditor; + + private final Driver driver = GWT.create(Driver.class); + + public VmSnapshotPreviewPopupWidget(CommonApplicationConstants constants) { + memoryEditor = new EntityModelCheckBoxEditor(Align.RIGHT); + initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); + localize(constants); + ViewIdHandler.idHandler.generateAndSetIds(this); + driver.initialize(this); + } + + void localize(CommonApplicationConstants constants) { + memoryEditor.setLabel(constants.virtualMachineSnapshotPreviewPopupMemoryLabel()); + messageLabel.setText(ConstantsManager.getInstance().getMessages().snapshotContainsMemory()); + } + + @Override + public void edit(final SnapshotModel model) { + driver.edit(model); + } + + @Override + public SnapshotModel flush() { + return driver.flush(); + } + + @Override + public void focusInput() { + memoryEditor.setFocus(true); + } +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmSnapshotPreviewPopupWidget.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmSnapshotPreviewPopupWidget.ui.xml new file mode 100644 index 0000000..bb0fd79 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmSnapshotPreviewPopupWidget.ui.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> +<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui" + xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor"> + + <ui:style> + + .memoryEditor { + width: 100%; + } + + .messageLabel { + padding-top: 15px; + padding-left: 10px; + padding-right: 5px; + height: 40%; + } + </ui:style> + + <g:FlowPanel> + <g:Label ui:field="messageLabel" addStyleNames="{style.messageLabel}" /> + <e:EntityModelCheckBoxEditor ui:field="memoryEditor" addStyleNames="{style.memoryEditor}" /> + </g:FlowPanel> + +</ui:UiBinder> \ No newline at end of file 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 6bb2b37..13e9c47 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 @@ -28,6 +28,7 @@ import org.ovirt.engine.core.common.businessentities.VmOsType; 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; import org.ovirt.engine.core.compat.Guid; @@ -279,6 +280,7 @@ super.setEntity(value); updateIsCloneVmSupported(); + updateIsMemorySnapshotSupported(); } @Override @@ -406,26 +408,65 @@ private void preview() { VM vm = (VM) getEntity(); - if (vm != null) - { - Snapshot snapshot = (Snapshot) getSelectedItem(); + if (vm == null) { + return; + } + Snapshot snapshot = (Snapshot) getSelectedItem(); + // if snapshot doesn't have memory, just trigger preview without showing popup + if (!memorySnapshotSupported || snapshot.getMemoryVolume().isEmpty()) { Frontend.RunAction(VdcActionType.TryBackToAllSnapshotsOfVm, new TryBackToAllSnapshotsOfVmParameters(vm.getId(), snapshot.getId()), - null, null); } + // otherwise, show a popup asking whether to use the memory or not + else { + SnapshotModel model = new SnapshotModel(); + setWindow(model); + + model.setTitle(ConstantsManager.getInstance().getConstants().previewSnapshotTitle()); + model.setHashName("preview_snapshot"); //$NON-NLS-1$ + + model.getCommands().add(new UICommand("OnPreview", this) //$NON-NLS-1$ + .setTitle(ConstantsManager.getInstance().getConstants().ok()) + .setIsDefault(true)); + model.getCommands().add(new UICommand("Cancel", this) //$NON-NLS-1$ + .setTitle(ConstantsManager.getInstance().getConstants().cancel()) + .setIsCancel(true)); + } + } + + private void OnPreview() { + Snapshot snapshot = (Snapshot) getSelectedItem(); + + if (snapshot == null) + { + cancel(); + return; + } + + VM vm = (VM) getEntity(); + final SnapshotModel model = (SnapshotModel) getWindow(); + + model.startProgress(null); + + Frontend.RunAction(VdcActionType.TryBackToAllSnapshotsOfVm, + new TryBackToAllSnapshotsOfVmParameters(vm.getId(), snapshot.getId(), + (Boolean) model.getMemory().getEntity()), + new IFrontendActionAsyncCallback() { + + @Override + public void executed(FrontendActionAsyncResult result) { + model.stopProgress(); + cancel(); + } + }); } private void newEntity() { VM vm = (VM) getEntity(); - if (vm == null) - { - return; - } - - if (getWindow() != null) + if (vm == null || getWindow() != null) { return; } @@ -759,6 +800,23 @@ }), vm.getStoragePoolId().getValue()); } + private boolean memorySnapshotSupported; + + protected void updateIsMemorySnapshotSupported() + { + if (getEntity() == null) + { + return; + } + + VM vm = (VM) getEntity(); + + memorySnapshotSupported = + (Boolean) AsyncDataProvider.getConfigValuePreConverted( + ConfigurationValues.MemorySnapshotSupported, + vm.getVdsGroupCompatibilityVersion().toString()); + } + @Override public void executeCommand(UICommand command) { @@ -800,6 +858,10 @@ { onCloneVM(); } + else if (StringHelper.stringsEqual(command.getName(), "OnPreview")) //$NON-NLS-1$ + { + OnPreview(); + } } @Override diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java index b962b90..8f5db5c 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java @@ -529,6 +529,9 @@ @DefaultStringValue("Create Snapshot") String createSnapshotTitle(); + @DefaultStringValue("Preview Snapshot") + String previewSnapshotTitle(); + @DefaultStringValue("Applications") String applicationsTitle(); diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java index 3623c4f..86ef773 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIMessages.java @@ -138,6 +138,9 @@ @DefaultMessage("Are you sure you want to delete snapshot from {0} with description ''{1}''?") String areYouSureYouWantToDeleteSanpshot(Date from, Object description); + @DefaultMessage("The selected snapshot to be previewed contains memory") + String snapshotContainsMemory(); + @DefaultMessage("Edit Bond Interface {0}") String editBondInterfaceTitle(String name); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java index 015068d..b6a7275 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java @@ -87,6 +87,7 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmRunOncePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmServerNewPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmSnapshotCreatePopupPresenterWidget; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmSnapshotPreviewPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VncInfoPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabClusterPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.MainTabDataCenterPresenter; @@ -279,6 +280,7 @@ import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmRunOncePopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmServerNewPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmSnapshotCreatePopupView; +import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmSnapshotPreviewPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VncInfoPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.MainTabClusterView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.MainTabDataCenterView; @@ -1048,6 +1050,11 @@ VmSnapshotCreatePopupPresenterWidget.ViewDef.class, VmSnapshotCreatePopupView.class); + // VM Snapshot Preview + bindPresenterWidget(VmSnapshotPreviewPopupPresenterWidget.class, + VmSnapshotPreviewPopupPresenterWidget.ViewDef.class, + VmSnapshotPreviewPopupView.class); + // VM Clone from Snapshot bindPresenterWidget(VmClonePopupPresenterWidget.class, VmClonePopupPresenterWidget.ViewDef.class, diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java index 479f123..69d8532 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VirtualMachineModule.java @@ -52,6 +52,7 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmRunOncePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmServerNewPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmSnapshotCreatePopupPresenterWidget; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmSnapshotPreviewPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VncInfoPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmRemovePopupPresenterWidget; @@ -304,7 +305,8 @@ @Singleton public SearchableDetailModelProvider<Snapshot, VmListModel, VmSnapshotListModel> getVmSnapshotListProvider(ClientGinjector ginjector, final Provider<VmSnapshotCreatePopupPresenterWidget> createPopupProvider, - final Provider<VmClonePopupPresenterWidget> cloneVmPopupProvider) { + final Provider<VmClonePopupPresenterWidget> cloneVmPopupProvider, + final Provider<VmSnapshotPreviewPopupPresenterWidget> previewPopupProvider) { return new SearchableDetailTabModelProvider<Snapshot, VmListModel, VmSnapshotListModel>(ginjector, VmListModel.class, VmSnapshotListModel.class) { @Override @@ -315,6 +317,8 @@ } else if (lastExecutedCommand == getModel().getCloneVmCommand()) { getModel().setSystemTreeSelectedItem(this.getMainModel().getSystemTreeSelectedItem()); return cloneVmPopupProvider.get(); + } else if (lastExecutedCommand == getModel().getPreviewCommand()) { + return previewPopupProvider.get(); } else { return super.getModelPopup(source, lastExecutedCommand, windowModel); } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/vm/VmSnapshotPreviewPopupPresenterWidget.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/vm/VmSnapshotPreviewPopupPresenterWidget.java new file mode 100644 index 0000000..dedcf77 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/vm/VmSnapshotPreviewPopupPresenterWidget.java @@ -0,0 +1,18 @@ +package org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm; + +import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget; +import org.ovirt.engine.ui.uicommonweb.models.vms.SnapshotModel; + +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; + +public class VmSnapshotPreviewPopupPresenterWidget extends AbstractModelBoundPopupPresenterWidget<SnapshotModel, VmSnapshotPreviewPopupPresenterWidget.ViewDef> { + + public interface ViewDef extends AbstractModelBoundPopupPresenterWidget.ViewDef<SnapshotModel> { + } + + @Inject + public VmSnapshotPreviewPopupPresenterWidget(EventBus eventBus, ViewDef view) { + super(eventBus, view); + } +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmSnapshotPreviewPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmSnapshotPreviewPopupView.java new file mode 100644 index 0000000..1d9b305 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmSnapshotPreviewPopupView.java @@ -0,0 +1,26 @@ +package org.ovirt.engine.ui.webadmin.section.main.view.popup.vm; + +import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; +import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundWidgetPopupView; +import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.VmSnapshotPreviewPopupWidget; +import org.ovirt.engine.ui.uicommonweb.models.vms.SnapshotModel; +import org.ovirt.engine.ui.webadmin.ApplicationConstants; +import org.ovirt.engine.ui.webadmin.ApplicationResources; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmSnapshotPreviewPopupPresenterWidget; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; + +public class VmSnapshotPreviewPopupView extends AbstractModelBoundWidgetPopupView<SnapshotModel> implements VmSnapshotPreviewPopupPresenterWidget.ViewDef { + + interface ViewIdHandler extends ElementIdHandler<VmSnapshotPreviewPopupView> { + ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); + } + + @Inject + public VmSnapshotPreviewPopupView(EventBus eventBus, ApplicationResources resources, ApplicationConstants constants) { + super(eventBus, resources, new VmSnapshotPreviewPopupWidget(constants), "410px", "200px"); //$NON-NLS-1$ //$NON-NLS-2$ + ViewIdHandler.idHandler.generateAndSetIds(this); + } +} -- To view, visit http://gerrit.ovirt.org/15686 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I18c99b22b33256e6bcf1cb9b1151e908e27ded8d Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Arik Hadas <aha...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches