Arik Hadas has uploaded a new change for review. Change subject: webadmin: [WIP] preview snapshot with memory popup ......................................................................
webadmin: [WIP] 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: I48fc8f501286d898d54a9c7357ccf0934c9ed1d8 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/Constants.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Messages.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, 213 insertions(+), 16 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/68/14868/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 4431f37..967d090 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..41ec4a1 --- /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.Label; +import com.google.gwt.user.client.ui.VerticalPanel; + +public class VmSnapshotPreviewPopupWidget extends AbstractModelBoundPopupWidget<SnapshotModel> { + + interface Driver extends SimpleBeanEditorDriver<SnapshotModel, VmSnapshotPreviewPopupWidget> { + } + + interface ViewUiBinder extends UiBinder<VerticalPanel, 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..3d561ff --- /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> + .content { + } + + .memoryEditor { + width: 100%; + } + + .messageLabel { + margin-left: 5px; + margin-right: 5px; + } + </ui:style> + + <g:VerticalPanel verticalAlignment="ALIGN_MIDDLE" addStyleNames="{style.content}"> + <g:Label ui:field="messageLabel" addStyleNames="{style.messageLabel}" /> + <e:EntityModelCheckBoxEditor ui:field="memoryEditor" addStyleNames="{style.memoryEditor}" /> + </g:VerticalPanel> + +</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 1781a81..dcab79d 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 @@ -20,6 +20,7 @@ import org.ovirt.engine.core.common.businessentities.Snapshot; import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotStatus; import org.ovirt.engine.core.common.businessentities.Snapshot.SnapshotType; +import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.UsbPolicy; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSGroup; @@ -28,7 +29,6 @@ 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.businessentities.StoragePool; import org.ovirt.engine.core.common.queries.GetAllVmSnapshotsByVmIdParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; @@ -407,26 +407,57 @@ private void preview() { VM vm = (VM) getEntity(); - if (vm != null) - { - Snapshot snapshot = (Snapshot) getSelectedItem(); - - Frontend.RunAction(VdcActionType.TryBackToAllSnapshotsOfVm, - new TryBackToAllSnapshotsOfVmParameters(vm.getId(), snapshot.getId()), - null, - null); + if (vm == null) { + return; } + + Snapshot snapshot = (Snapshot) getSelectedItem(); + // if snapshot doesn't have memory, just preview + if (snapshot.getMemoryVolume().isEmpty()) { + runTryBackToAllSnapshotsOfVmCommand(vm.getId(), snapshot.getId(), false); + } + // 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(); + SnapshotModel model = (SnapshotModel) getWindow(); + + runTryBackToAllSnapshotsOfVmCommand(vm.getId(), snapshot.getId(), (Boolean) model.getMemory().getEntity()); + } + + private void runTryBackToAllSnapshotsOfVmCommand(Guid vmId, Guid snapshotId, boolean restoreMemory) { + Frontend.RunAction(VdcActionType.TryBackToAllSnapshotsOfVm, + new TryBackToAllSnapshotsOfVmParameters(vmId, snapshotId, restoreMemory), + null, + null); } private void newEntity() { VM vm = (VM) getEntity(); - if (vm == null) - { - return; - } - - if (getWindow() != null) + if (vm == null || getWindow() != null) { return; } @@ -803,6 +834,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/Constants.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java index f13f98a..a2bc329 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java @@ -523,6 +523,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/Messages.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Messages.java index 4438ee5..d65ab09 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Messages.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Messages.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 3be5d98..193203b 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 @@ -84,6 +84,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; @@ -270,6 +271,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; @@ -1015,6 +1017,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/14868 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I48fc8f501286d898d54a9c7357ccf0934c9ed1d8 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