Martin Betak has uploaded a new change for review. Change subject: webadmin: Add Reboot VM action button ......................................................................
webadmin: Add Reboot VM action button Added new button for Reboot VM to webadmin and userportal. This command should be enabled only when the GuestAgent is present because that is currently the only supported means of reboot in VDSM. Change-Id: I4a30dad6f2d3b909457e39ac15510f0468c2b1a1 Signed-off-by: Martin Betak <[email protected]> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalItemModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/VmItemBehavior.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationConstants.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationResources.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicListItemPresenterWidget.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/basic/MainTabBasicListItemView.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/basic/MainTabBasicListItemView.ui.xml M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedVirtualMachineView.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/BorderedCompositeCell.java A frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/images/actions/Reboot-24X24.png A frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/images/actions/Reboot-disabled-24X24.png M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationResources.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java A frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/webadmin/images/Reboot-13X13.png A frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/webadmin/images/Reboot-disabled-13X13.png 19 files changed, 264 insertions(+), 124 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/42/23342/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 114c5f7..b1bb781 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 @@ -351,6 +351,9 @@ @DefaultStringValue("Shutdown") String shutDownVm(); + @DefaultStringValue("Reboot") + String rebootVm(); + @DefaultStringValue("Name") String nameVm(); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java index 395bb5f..d96e200 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java @@ -19,6 +19,7 @@ import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.EventNotificationEntity; import org.ovirt.engine.core.common.TimeZoneType; +import org.ovirt.engine.core.common.VdcActionUtils; import org.ovirt.engine.core.common.VdcEventNotificationUtils; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.VdcActionType; @@ -3633,4 +3634,20 @@ public static Integer getDefaultOs (ArchitectureType architectureType) { return defaultOSes.get(architectureType); } + + public static boolean isRebootCommandExecutionAllowed(List<VM> vms) { + if (vms.isEmpty() || !VdcActionUtils.canExecute(vms, VM.class, VdcActionType.RebootVm)) { + return false; + } + + for (VM vm : vms) { + Version version = vm.getVdsGroupCompatibilityVersion(); + Version anyDcVersion = new Version(); + // currently on VDSM side reboot is supported only when the guest agent is present and responsive so we need to check for that + if (!isCommandCompatible(VdcActionType.RebootVm, version, anyDcVersion) || StringHelper.isNullOrEmpty(vm.getVmIp())) { + return false; + } + } + return true; + } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalItemModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalItemModel.java index 59b275a..4cbe298 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalItemModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalItemModel.java @@ -105,6 +105,18 @@ returnVmCommand = value; } + private UICommand rebootCommand; + + public UICommand getRebootCommand() { + return rebootCommand; + } + + public void setRebootCommand(UICommand value) { + getCommands().remove(rebootCommand); + getCommands().add(value); + rebootCommand = value; + } + private String name; public String getName() @@ -255,6 +267,7 @@ setShutdownCommand(new UICommand("Shutdown", this)); //$NON-NLS-1$ setTakeVmCommand(new UICommand("TakeVm", this)); //$NON-NLS-1$ setReturnVmCommand(new UICommand("ReturnVm", this)); //$NON-NLS-1$ + setRebootCommand(new UICommand("RebootVm", this)); //$NON-NLS-1$ ChangeCDModel tempVar = new ChangeCDModel(); tempVar.setTitle(ConstantsManager.getInstance().getConstants().retrievingCDsTitle()); @@ -307,6 +320,8 @@ stopCommand = null; takeVmCommand.setTarget(null); takeVmCommand = null; + rebootCommand.setTarget(null); + rebootCommand = null; setCommands(null); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/VmItemBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/VmItemBehavior.java index 9b29955..a5c061f 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/VmItemBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/VmItemBehavior.java @@ -69,6 +69,10 @@ { returnVm(); } + else if (command == getItem().getRebootCommand()) + { + reboot(); + } } @Override @@ -108,6 +112,11 @@ { VM entity = (VM) getItem().getEntity(); Frontend.getInstance().runAction(VdcActionType.ShutdownVm, new ShutdownVmParameters(entity.getId(), true)); + } + + private void reboot() { + VM entity = (VM) getItem().getEntity(); + Frontend.getInstance().runAction(VdcActionType.RebootVm, new VmOperationParameterBase(entity.getId())); } private void stop() { @@ -158,6 +167,7 @@ getItem().getStopCommand().setIsExecutionAllowed(VdcActionUtils.canExecute(entities, VM.class, VdcActionType.StopVm)); + getItem().getRebootCommand().setIsExecutionAllowed(AsyncDataProvider.isRebootCommandExecutionAllowed(entities)); // Check whether a VM is from the manual pool. if (entity.getVmPoolId() != null) diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java index ec6d5ca..4ac6063 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java @@ -87,6 +87,7 @@ import org.ovirt.engine.ui.uicompat.IFrontendMultipleQueryAsyncCallback; import org.ovirt.engine.ui.uicompat.ObservableCollection; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; +import org.ovirt.engine.ui.uicompat.UIConstants; public class VmListModel extends VmBaseListModel<VM> implements ISupportSystemTreeContext { @@ -172,6 +173,16 @@ private void setShutdownCommand(UICommand value) { privateShutdownCommand = value; + } + + private UICommand privateRebootCommand; + + public UICommand getRebootCommand() { + return privateRebootCommand; + } + + public void setRebootCommand(UICommand value) { + privateRebootCommand = value; } private UICommand privateCancelMigrateCommand; @@ -387,6 +398,7 @@ setPauseCommand(new UICommand("Pause", this)); //$NON-NLS-1$ setStopCommand(new UICommand("Stop", this)); //$NON-NLS-1$ setShutdownCommand(new UICommand("Shutdown", this)); //$NON-NLS-1$ + setRebootCommand(new UICommand("Reboot", this)); //$NON-NLS-1$ setEditConsoleCommand(new UICommand("EditConsoleCommand", this)); //$NON-NLS-1$ setConsoleConnectCommand(new UICommand("ConsoleConnectCommand", this)); //$NON-NLS-1$ setMigrateCommand(new UICommand("Migrate", this)); //$NON-NLS-1$ @@ -1109,14 +1121,14 @@ model.startProgress(null); Frontend.getInstance().runMultipleAction(VdcActionType.ExportVm, parameters, - new IFrontendMultipleActionAsyncCallback() { - @Override - public void executed(FrontendMultipleActionAsyncResult result) { - ExportVmModel localModel = (ExportVmModel) result.getState(); - localModel.stopProgress(); - cancel(); - } - }, model); + new IFrontendMultipleActionAsyncCallback() { + @Override + public void executed(FrontendMultipleActionAsyncResult result) { + ExportVmModel localModel = (ExportVmModel) result.getState(); + localModel.stopProgress(); + cancel(); + } + }, model); } } @@ -1158,34 +1170,34 @@ model.startProgress(null); Frontend.getInstance().runMultipleAction(VdcActionType.ExportVm, list, - new IFrontendMultipleActionAsyncCallback() { - @Override - public void executed(FrontendMultipleActionAsyncResult result) { + new IFrontendMultipleActionAsyncCallback() { + @Override + public void executed(FrontendMultipleActionAsyncResult result) { - ExportVmModel localModel = (ExportVmModel) result.getState(); - localModel.stopProgress(); - cancel(); + ExportVmModel localModel = (ExportVmModel) result.getState(); + localModel.stopProgress(); + cancel(); - } - }, model); + } + }, model); } @Override protected void sendWarningForNonExportableDisks(VM entity) { // load VM disks and check if there is one which doesn't allow snapshot AsyncDataProvider.getVmDiskList(new AsyncQuery(getWindow(), - new INewAsyncCallback() { - @Override - public void onSuccess(Object target, Object returnValue) { - final ExportVmModel model = (ExportVmModel) target; - @SuppressWarnings("unchecked") - final ArrayList<Disk> vmDisks = (ArrayList<Disk>) returnValue; - VmModelHelper.sendWarningForNonExportableDisks(model, - vmDisks, - VmModelHelper.WarningType.VM_EXPORT); - } - }), - entity.getId()); + new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + final ExportVmModel model = (ExportVmModel) target; + @SuppressWarnings("unchecked") + final ArrayList<Disk> vmDisks = (ArrayList<Disk>) returnValue; + VmModelHelper.sendWarningForNonExportableDisks(model, + vmDisks, + VmModelHelper.WarningType.VM_EXPORT); + } + }), + entity.getId()); } private void runOnce() @@ -1405,12 +1417,12 @@ } Frontend.getInstance().runMultipleAction(VdcActionType.CancelMigrateVm, list, - new IFrontendMultipleActionAsyncCallback() { - @Override - public void executed( - FrontendMultipleActionAsyncResult result) { - } - }, null); + new IFrontendMultipleActionAsyncCallback() { + @Override + public void executed( + FrontendMultipleActionAsyncResult result) { + } + }, null); } private void postMigrateGetUpHosts(ArrayList<VDS> hosts) @@ -1530,28 +1542,25 @@ } Frontend.getInstance().runMultipleAction(VdcActionType.MigrateVmToServer, list, - new IFrontendMultipleActionAsyncCallback() { - @Override - public void executed(FrontendMultipleActionAsyncResult result) { + new IFrontendMultipleActionAsyncCallback() { + @Override + public void executed(FrontendMultipleActionAsyncResult result) { - MigrateModel localModel = (MigrateModel) result.getState(); - localModel.stopProgress(); - cancel(); + MigrateModel localModel = (MigrateModel) result.getState(); + localModel.stopProgress(); + cancel(); - } - }, model); + } + }, model); } } - private void shutdown() - { + private void powerAction(String actionName, String title, String message) { ConfirmationModel model = new ConfirmationModel(); setWindow(model); - model.setTitle(ConstantsManager.getInstance().getConstants().shutdownVirtualMachinesTitle()); - model.setHashName("shut_down_virtual_machine"); //$NON-NLS-1$ - model.setMessage(ConstantsManager.getInstance() - .getConstants() - .areYouSureYouWantToShutDownTheFollowingVirtualMachinesMsg()); + model.setTitle(title); + model.setHashName(actionName + "_virtual_machine"); //$NON-NLS-1$ + model.setMessage(message); // model.Items = SelectedItems.Cast<VM>().Select(a => a.vm_name); ArrayList<String> items = new ArrayList<String>(); for (Object item : getSelectedItems()) @@ -1561,7 +1570,7 @@ } model.setItems(items); - UICommand tempVar = new UICommand("OnShutdown", this); //$NON-NLS-1$ + UICommand tempVar = new UICommand("On" + actionName, this); //$NON-NLS-1$ tempVar.setTitle(ConstantsManager.getInstance().getConstants().ok()); tempVar.setIsDefault(true); model.getCommands().add(tempVar); @@ -1571,94 +1580,86 @@ model.getCommands().add(tempVar2); } - private void onShutdown() - { + private interface PowerActionParametersFactory<P extends VdcActionParametersBase> { + P createActionParameters(VM vm); + } + + private void onPowerAction(VdcActionType actionType, PowerActionParametersFactory<?> parametersFactory) { ConfirmationModel model = (ConfirmationModel) getWindow(); - if (model.getProgress() != null) - { + if (model.getProgress() != null) { return; } + ArrayList<VdcActionParametersBase> list = new ArrayList<VdcActionParametersBase>(); - for (Object item : getSelectedItems()) - { - VM a = (VM) item; - list.add(new ShutdownVmParameters(a.getId(), true)); + for (Object item : getSelectedItems()) { + VM vm = (VM) item; + list.add(parametersFactory.createActionParameters(vm)); } model.startProgress(null); - Frontend.getInstance().runMultipleAction(VdcActionType.ShutdownVm, list, - new IFrontendMultipleActionAsyncCallback() { - @Override - public void executed(FrontendMultipleActionAsyncResult result) { + Frontend.getInstance().runMultipleAction(actionType, list, + new IFrontendMultipleActionAsyncCallback() { + @Override + public void executed(FrontendMultipleActionAsyncResult result) { - ConfirmationModel localModel = (ConfirmationModel) result.getState(); - localModel.stopProgress(); - cancel(); + ConfirmationModel localModel = (ConfirmationModel) result.getState(); + localModel.stopProgress(); + cancel(); - } - }, model); + } + }, model); + } - private void stop() - { - ConfirmationModel model = new ConfirmationModel(); - setWindow(model); - model.setTitle(ConstantsManager.getInstance().getConstants().stopVirtualMachinesTitle()); - model.setHashName("stop_virtual_machine"); //$NON-NLS-1$ - model.setMessage(ConstantsManager.getInstance() - .getConstants() - .areYouSureYouWantToStopTheFollowingVirtualMachinesMsg()); - // model.Items = SelectedItems.Cast<VM>().Select(a => a.vm_name); - ArrayList<String> items = new ArrayList<String>(); - for (Object item : getSelectedItems()) - { - VM a = (VM) item; - items.add(a.getName()); - } - model.setItems(items); - - UICommand tempVar = new UICommand("OnStop", this); //$NON-NLS-1$ - tempVar.setTitle(ConstantsManager.getInstance().getConstants().ok()); - tempVar.setIsDefault(true); - model.getCommands().add(tempVar); - UICommand tempVar2 = new UICommand("Cancel", this); //$NON-NLS-1$ - tempVar2.setTitle(ConstantsManager.getInstance().getConstants().cancel()); - tempVar2.setIsCancel(true); - model.getCommands().add(tempVar2); + private void shutdown() { + UIConstants constants = ConstantsManager.getInstance().getConstants(); + powerAction("Shutdown", //$NON-NLS-1$ + constants.shutdownVirtualMachinesTitle(), + constants.areYouSureYouWantToShutDownTheFollowingVirtualMachinesMsg()); } - private void onStop() - { - ConfirmationModel model = (ConfirmationModel) getWindow(); + private void onShutdown() { + onPowerAction(VdcActionType.ShutdownVm, new PowerActionParametersFactory<VdcActionParametersBase>() { + @Override + public VdcActionParametersBase createActionParameters(VM vm) { + return new ShutdownVmParameters(vm.getId(), true); + } + }); + } - if (model.getProgress() != null) - { - return; - } + private void stop() { + UIConstants constants = ConstantsManager.getInstance().getConstants(); + powerAction("Stop", //$NON-NLS-1$ + constants.stopVirtualMachinesTitle(), + constants.areYouSureYouWantToStopTheFollowingVirtualMachinesMsg()); + } - ArrayList<VdcActionParametersBase> list = new ArrayList<VdcActionParametersBase>(); - for (Object item : getSelectedItems()) - { - VM a = (VM) item; - list.add(new StopVmParameters(a.getId(), StopVmTypeEnum.NORMAL)); - } + private void onStop() { + onPowerAction(VdcActionType.StopVm, new PowerActionParametersFactory<VdcActionParametersBase>() { + @Override + public VdcActionParametersBase createActionParameters(VM vm) { + return new StopVmParameters(vm.getId(), StopVmTypeEnum.NORMAL); + } + }); + } - model.startProgress(null); + private void reboot() { + UIConstants constants = ConstantsManager.getInstance().getConstants(); + powerAction("Reboot", //$NON-NLS-1$ + constants.rebootVirtualMachinesTitle(), + constants.areYouSureYouWantToRebootTheFollowingVirtualMachinesMsg()); + } - Frontend.getInstance().runMultipleAction(VdcActionType.StopVm, list, - new IFrontendMultipleActionAsyncCallback() { - @Override - public void executed(FrontendMultipleActionAsyncResult result) { - - ConfirmationModel localModel = (ConfirmationModel) result.getState(); - localModel.stopProgress(); - cancel(); - - } - }, model); + private void onReboot() { + onPowerAction(VdcActionType.RebootVm, new PowerActionParametersFactory<VdcActionParametersBase>() { + @Override + public VdcActionParametersBase createActionParameters(VM vm) { + return new VmOperationParameterBase(vm.getId()); + } + }); } private void pause() @@ -2241,6 +2242,7 @@ && VdcActionUtils.canExecute(items, VM.class, VdcActionType.ShutdownVm)); getStopCommand().setIsExecutionAllowed(items.size() > 0 && VdcActionUtils.canExecute(items, VM.class, VdcActionType.StopVm)); + getRebootCommand().setIsExecutionAllowed(AsyncDataProvider.isRebootCommandExecutionAllowed(items)); getMigrateCommand().setIsExecutionAllowed(items.size() > 0 && VdcActionUtils.canExecute(items, VM.class, VdcActionType.MigrateVm)); getCancelMigrateCommand().setIsExecutionAllowed(items.size() > 0 @@ -2351,6 +2353,9 @@ { shutdown(); } + else if (command == getRebootCommand()) { + reboot(); + } else if (command == getMigrateCommand()) { migrate(); @@ -2439,6 +2444,10 @@ { onStop(); } + else if (StringHelper.stringsEqual(command.getName(), "OnReboot")) //$NON-NLS-1$ + { + onReboot(); + } else if (StringHelper.stringsEqual(command.getName(), "OnChangeCD")) //$NON-NLS-1$ { onChangeCD(); @@ -2507,5 +2516,4 @@ protected Guid extractStoragePoolIdNullSafe(VM entity) { return entity.getStoragePoolId(); } - } 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 83df9e2..b81fc85 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 @@ -651,6 +651,9 @@ @DefaultStringValue("Power Off Virtual Machine(s)") String stopVirtualMachinesTitle(); + @DefaultStringValue("Reboot Virtual Machine(s)") + String rebootVirtualMachinesTitle(); + @DefaultStringValue("Change CD") String changeCDTitle(); @@ -830,6 +833,9 @@ @DefaultStringValue("Are you sure you want to Power Off the following Virtual Machines?") String areYouSureYouWantToStopTheFollowingVirtualMachinesMsg(); + @DefaultStringValue("Are you sure you want to Reboot the following Virtual Machines?") + String areYouSureYouWantToRebootTheFollowingVirtualMachinesMsg(); + @DefaultStringValue("This field must contain an IP address in format xxx.xxx.xxx.xxx") String thisFieldMustContainIPaddressInFormatMsg(); diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationConstants.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationConstants.java index f761744..74e1264 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationConstants.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationConstants.java @@ -314,6 +314,9 @@ @DefaultStringValue("Run VM") String runVm(); + @DefaultStringValue("Reboot VM") + String rebootVm(); + @DefaultStringValue("Double Click for Console") String doubleClickForConsole(); diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationResources.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationResources.java index ac41b21..fb254b9 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationResources.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/ApplicationResources.java @@ -54,6 +54,13 @@ @Source("images/actions/power_Disabled.png") ImageResource powerDisabledIcon(); + @Source("images/actions/Reboot-24X24.png") + ImageResource rebootIcon(); + + @Source("images/actions/Reboot-disabled-24X24.png") + ImageResource rebootDisabledIcon(); + + // status images @Source("images/status/suspendedOverlay.png") ImageResource suspendedIcon(); diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicListItemPresenterWidget.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicListItemPresenterWidget.java index 0cbaf0e..ee282ee 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicListItemPresenterWidget.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/presenter/tab/basic/MainTabBasicListItemPresenterWidget.java @@ -64,6 +64,10 @@ void updateSuspendButton(UICommand command); + HasClickHandlers addRebootButton(); + + void updateRebootButton(UICommand command); + } private final UserPortalBasicListProvider listModelProvider; @@ -148,6 +152,12 @@ executeCommand(getSuspendCommand()); } })); + registerHandler(getView().addRebootButton().addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent clickEvent) { + executeCommand(getRebootCommand()); + } + })); } @Override @@ -174,6 +184,10 @@ return model.getPauseCommand(); } + UICommand getRebootCommand() { + return model.getRebootCommand(); + } + /** * Updates the item presenter widget with new data. */ @@ -185,6 +199,7 @@ getView().updateRunButton(getRunCommand(), model.isPool()); getView().updateShutdownButton(getShutdownCommand()); getView().updateSuspendButton(getSuspendCommand()); + getView().updateRebootButton(getRebootCommand()); getView().edit(model); diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/basic/MainTabBasicListItemView.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/basic/MainTabBasicListItemView.java index 0d401ae..596f3b4 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/basic/MainTabBasicListItemView.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/basic/MainTabBasicListItemView.java @@ -73,6 +73,7 @@ String suspendButtonAdditionalStyle(); + String rebootButtonAdditionalStyle(); } private final Driver driver = GWT.create(Driver.class); @@ -119,6 +120,7 @@ private MainTabBasicListItemActionButton runButton; private MainTabBasicListItemActionButton shutdownButton; private MainTabBasicListItemActionButton suspendButton; + private MainTabBasicListItemActionButton rebootButton; @Inject public MainTabBasicListItemView( @@ -188,6 +190,23 @@ @Override public void updateSuspendButton(UICommand command) { updateButton(suspendButton, command); + } + + @Override + public HasClickHandlers addRebootButton() { + MainTabBasicListItemActionButton button = new MainTabBasicListItemActionButton( + 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) { @@ -294,6 +313,8 @@ 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$ } } diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/basic/MainTabBasicListItemView.ui.xml b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/basic/MainTabBasicListItemView.ui.xml index c923890..22856ae 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/basic/MainTabBasicListItemView.ui.xml +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/basic/MainTabBasicListItemView.ui.xml @@ -108,8 +108,8 @@ } .buttonsPanel { - margin-left: 40px; - width: 78px; + margin-left: 29px; + width: 104px; height: 30px; float: left; } @@ -125,6 +125,10 @@ .suspendButtonAdditionalStyle { float: right; } + + .rebootButtonAdditionalStyle { + float: right; + } </ui:style> diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedVirtualMachineView.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedVirtualMachineView.java index 1413df4..93bff7a 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedVirtualMachineView.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedVirtualMachineView.java @@ -175,7 +175,7 @@ public UserPortalItemModel getValue(UserPortalItemModel object) { return object; } - }, constants.empty(), "130px"); //$NON-NLS-1$ + }, constants.empty(), "154px"); //$NON-NLS-1$ ConsoleButtonCell openConsoleCell = new ConsoleButtonCell( applicationResources.sideTabExtendedVmStyle().enabledConsoleButton(), @@ -354,12 +354,30 @@ }; stopCell.setElementIdPrefix(elementIdPrefix); stopCell.setColumnId("stopButton"); //$NON-NLS-1$ + + ImageButtonCell<UserPortalItemModel> rebootCell = new VmButtonsImageButtonCell( + applicationResources.rebootIcon(), applicationResources.rebootDisabledIcon()) { + + @Override + protected String getTitle(UserPortalItemModel value) { + return constants.rebootVm(); + } + + @Override + protected UICommand resolveCommand(UserPortalItemModel value) { + return value.getRebootCommand(); + } + }; + rebootCell.setElementIdPrefix(elementIdPrefix); + rebootCell.setColumnId("rebootColumn"); //$NON-NLS-1$ + CompositeCell<UserPortalItemModel> compositeCell = new BorderedCompositeCell<UserPortalItemModel>( new ArrayList<HasCell<UserPortalItemModel, ?>>(Arrays.asList( new UserPortalItemSimpleColumn(runCell), new UserPortalItemSimpleColumn(shutdownCell), new UserPortalItemSimpleColumn(suspendCell), - new UserPortalItemSimpleColumn(stopCell)))); + new UserPortalItemSimpleColumn(stopCell), + new UserPortalItemSimpleColumn(rebootCell)))); return compositeCell; } diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/BorderedCompositeCell.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/BorderedCompositeCell.java index c9e8ed5..93423d7 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/BorderedCompositeCell.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/extended/vm/BorderedCompositeCell.java @@ -24,7 +24,7 @@ @Override public void render(Context context, T value, SafeHtmlBuilder sb) { - sb.appendHtmlConstant("<div style=\"border-radius: 7px; border: 1px solid #c6c6c6; width: 100px; padding-top: 3px; padding-left: 3px\">"); //$NON-NLS-1$ + sb.appendHtmlConstant("<div style=\"border-radius: 7px; border: 1px solid #c6c6c6; width: 124px; padding-top: 3px; padding-left: 3px\">"); //$NON-NLS-1$ for (HasCell<T, ?> hasCell : hasCells) { render(context, value, sb, hasCell); } diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/images/actions/Reboot-24X24.png b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/images/actions/Reboot-24X24.png new file mode 100644 index 0000000..3116a7d --- /dev/null +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/images/actions/Reboot-24X24.png Binary files differ diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/images/actions/Reboot-disabled-24X24.png b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/images/actions/Reboot-disabled-24X24.png new file mode 100644 index 0000000..48e9ab3 --- /dev/null +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/images/actions/Reboot-disabled-24X24.png Binary files differ diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationResources.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationResources.java index ffd5da1..d765243 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationResources.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationResources.java @@ -169,6 +169,12 @@ @Source("images/icn_stop.png") ImageResource stopVmImage(); + @Source("images/Reboot-13X13.png") + ImageResource rebootImage(); + + @Source("images/Reboot-disabled-13X13.png") + ImageResource rebootDisabledImage(); + @Source("images/storages.png") ImageResource storagesImage(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java index e0da652..08c11c5 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java @@ -225,6 +225,13 @@ return getMainModel().getStopCommand(); } }); + getTable().addActionButton(new WebAdminImageButtonDefinition<VM>(constants.rebootVm(), + resources.rebootImage(), resources.rebootDisabledImage()) { + @Override + protected UICommand resolveCommand() { + return getMainModel().getRebootCommand(); + } + }); // TODO: separator getTable().addActionButton(new WebAdminImageButtonDefinition<VM>(constants.consoleVm(), resources.consoleImage(), resources.consoleDisabledImage()) { diff --git a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/webadmin/images/Reboot-13X13.png b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/webadmin/images/Reboot-13X13.png new file mode 100644 index 0000000..09b9a94 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/webadmin/images/Reboot-13X13.png Binary files differ diff --git a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/webadmin/images/Reboot-disabled-13X13.png b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/webadmin/images/Reboot-disabled-13X13.png new file mode 100644 index 0000000..7129dc1 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/webadmin/images/Reboot-disabled-13X13.png Binary files differ -- To view, visit http://gerrit.ovirt.org/23342 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4a30dad6f2d3b909457e39ac15510f0468c2b1a1 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Martin Betak <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
