Tomas Jelinek has uploaded a new change for review. Change subject: webadmin: new vm dialog ......................................................................
webadmin: new vm dialog Change-Id: Ib0a52c83c445706c5ad6fe2ee6ab62ba40d52e83 Signed-off-by: Tomas Jelinek <[email protected]> --- A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopup.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.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/Constants.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.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/VmPopupPresenterWidget.java A frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmPopupView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java 11 files changed, 482 insertions(+), 44 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/39/12439/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopup.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopup.java new file mode 100644 index 0000000..94a3742 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopup.java @@ -0,0 +1,5 @@ +package org.ovirt.engine.ui.common.widget.uicommon.popup.vm; + +public interface VmPopup { + void switchMode(boolean advanced); +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java new file mode 100644 index 0000000..ff1eacc --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmPopupWidget.java @@ -0,0 +1,79 @@ +package org.ovirt.engine.ui.common.widget.uicommon.popup.vm; + +import static org.ovirt.engine.ui.common.widget.uicommon.popup.vm.VmPopupWidgetConfig.simpleField; + +import org.ovirt.engine.ui.common.CommonApplicationConstants; +import org.ovirt.engine.ui.common.CommonApplicationMessages; +import org.ovirt.engine.ui.common.CommonApplicationResources; +import org.ovirt.engine.ui.common.CommonApplicationTemplates; +import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractVmPopupWidget; + +public class VmPopupWidget extends AbstractVmPopupWidget { + + public VmPopupWidget(CommonApplicationConstants constants, + CommonApplicationResources resources, + CommonApplicationMessages messages, + CommonApplicationTemplates templates) { + super(constants, resources, messages, templates); + } + + protected VmPopupWidgetConfigMap createWidgetConfiguration() { + VmPopupWidgetConfigMap config = new VmPopupWidgetConfigMap(); + + config.put(memSizeEditor, simpleField().visibleInAdvancedModeOnly().withSpecialMark()); + config.put(oSTypeEditor, simpleField().visibleInAdvancedModeOnly()); + config.put(numOfMonitorsEditor, simpleField().visibleInAdvancedModeOnly().visibleForAdminOnly()); + + // CPU + config.put(numOfSocketsEditor, simpleField().visibleInAdvancedModeOnly().withSpecialMark()); + config.put(corePerSocketEditor, simpleField().visibleInAdvancedModeOnly().withSpecialMark()); + config.put(totalvCPUsEditor, simpleField().visibleInAdvancedModeOnly().withSpecialMark()); + config.put(generalAdvancedParameterExpander, simpleField().visibleInAdvancedModeOnly()); + + config.put(usbSupportEditor, simpleField().visibleInAdvancedModeOnly().visibleForAdminOnly()); + config.put(timeZoneEditor, simpleField().visibleInAdvancedModeOnly().withSpecialMark()); + config.put(displayProtocolEditor, simpleField().visibleForAdminOnly()); + config.put(priorityEditor, simpleField().visibleInAdvancedModeOnly().withSpecialMark()); + + // userdefined_properties + config.put(customPropertiesTab, simpleField().visibleInAdvancedModeOnly().visibleForAdminOnly()); + config.put(minAllocatedMemoryEditor, simpleField().visibleInAdvancedModeOnly() + .visibleForAdminOnly() + .withSpecialMark()); + config.put(quotaEditor, simpleField()); + config.put(allowConsoleReconnectEditor, simpleField().visibleInAdvancedModeOnly().visibleForAdminOnly()); + + config.put(isDeleteProtectedEditor, simpleField().visibleInAdvancedModeOnly()); + + // thin/clone + config.put(provisioningThinEditor, simpleField().visibleInAdvancedModeOnly().withSpecialMark()); + config.put(provisioningCloneEditor, simpleField().visibleInAdvancedModeOnly().withSpecialMark()); + + // migration_support + config.put(runVMOnSpecificHostEditor, simpleField().withSpecialMark()); + config.put(dontMigrateVMEditor, simpleField().visibleInAdvancedModeOnly().withSpecialMark()); + + config.put(initialRunTab, simpleField().visibleInAdvancedModeOnly()); + config.put(consoleTab, simpleField().visibleInAdvancedModeOnly()); + config.put(hostTab, simpleField().visibleInAdvancedModeOnly()); + config.put(consoleTab, simpleField().visibleInAdvancedModeOnly()); + config.put(highAvailabilityTab, simpleField().visibleInAdvancedModeOnly()); + config.put(resourceAllocationTab, simpleField().visibleInAdvancedModeOnly()); + config.put(bootOptionsTab, simpleField().visibleInAdvancedModeOnly()); + return config; + } + + @Override + protected void generateIds() { + } + + // vm_type (server/desktop) -> TBD on FE + // image_type_id // TBD on FE + // nice_level -> WTF? Only on API? + // storage domain // not in GUI + // sysprep // not in GUI + // soundcard // not in GUI + // Balloon // not in GUI + // host_cpu_flags // not in GUI + +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java index f54d00e..a8be1b4 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java @@ -60,6 +60,16 @@ public static final int VM_TEMPLATE_NAME_MAX_LIMIT = 40; public static final int DESCRIPTION_MAX_LIMIT = 255; + private EntityModel advancedMode; + + public EntityModel getAdvancedMode() { + return advancedMode; + } + + public void setAdvancedMode(EntityModel advancedMode) { + this.advancedMode = advancedMode; + } + private boolean privateIsNew; public boolean getIsNew() @@ -79,9 +89,8 @@ } /** - * Note: We assume that this method is called only once, on the creation stage - * of the model. if this assumption is changed (i.e the VM can attached/detached - * from a pool after the model is created), this method should be modified + * Note: We assume that this method is called only once, on the creation stage of the model. if this assumption is + * changed (i.e the VM can attached/detached from a pool after the model is created), this method should be modified */ public void setVmAttachedToPool(boolean value) { if (value) { @@ -1054,6 +1063,8 @@ this.behavior = behavior; this.behavior.setModel(this); + setAdvancedMode(new EntityModel(false)); + setStorageDomain(new NotChangableForVmInPoolListModel()); setName(new NotChangableForVmInPoolEntityModel()); setNumOfMonitors(new NotChangableForVmInPoolListModel()); @@ -1706,7 +1717,7 @@ private void DontMigrateVM_EntityChanged(Object sender, EventArgs args) { - if((Boolean) getDontMigrateVM().getEntity() == true ) { + if ((Boolean) getDontMigrateVM().getEntity() == true) { clearAndDisable(getRunVMOnSpecificHost()); getHostCpu().setIsChangable(true); } 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 32e158f..2566870 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 @@ -64,8 +64,11 @@ import org.ovirt.engine.ui.uicommonweb.Linq; import org.ovirt.engine.ui.uicommonweb.TagsEqualityComparer; import org.ovirt.engine.ui.uicommonweb.UICommand; +import org.ovirt.engine.ui.uicommonweb.builders.Builder.VoidSource; import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor; import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor.BuilderExecutionFinished; +import org.ovirt.engine.ui.uicommonweb.builders.BuilderList; +import org.ovirt.engine.ui.uicommonweb.builders.customproperties.CustomPropertiesBuilder; import org.ovirt.engine.ui.uicommonweb.builders.disk.DiskInfoDestinationMapBuilder; import org.ovirt.engine.ui.uicommonweb.builders.vm.CommonUnitToVmBuilder; import org.ovirt.engine.ui.uicommonweb.builders.vm.HaVmToVmBuilder; @@ -102,6 +105,19 @@ public class VmListModel extends VmBaseListModel<VM> implements ISupportSystemTreeContext { + + private UICommand advanedButton = new UICommand("OnAdvanced", this); //$NON-NLS-1$ + + private UICommand newVMCommand; + + public UICommand getNewVmCommand() { + return newVMCommand; + } + + private void setNewVmCommand(UICommand newVMCommand) { + this.newVMCommand = newVMCommand; + } + private UICommand privateNewServerCommand; public UICommand getNewServerCommand() @@ -436,16 +452,6 @@ private final HashMap<Guid, ArrayList<ConsoleModel>> cachedConsoleModels; - private HashMap<Version, ArrayList<String>> privateCustomPropertiesKeysList; - - private HashMap<Version, ArrayList<String>> getCustomPropertiesKeysList() { - return privateCustomPropertiesKeysList; - } - - private void setCustomPropertiesKeysList(HashMap<Version, ArrayList<String>> value) { - privateCustomPropertiesKeysList = value; - } - public VmListModel() { setTitle(ConstantsManager.getInstance().getConstants().virtualMachinesTitle()); @@ -458,6 +464,7 @@ cachedConsoleModels = new HashMap<Guid, ArrayList<ConsoleModel>>(); + setNewVmCommand(new UICommand("NewVM", this)); //$NON-NLS-1$ setNewServerCommand(new UICommand("NewServer", this)); //$NON-NLS-1$ setNewDesktopCommand(new UICommand("NewDesktop", this)); //$NON-NLS-1$ setEditCommand(new UICommand("Edit", this)); //$NON-NLS-1$ @@ -488,28 +495,10 @@ getSearchNextPageCommand().setIsAvailable(true); getSearchPreviousPageCommand().setIsAvailable(true); if (getCustomPropertiesKeysList() == null) { - AsyncDataProvider.GetCustomPropertiesList(new AsyncQuery(this, - new INewAsyncCallback() { - @Override - public void OnSuccess(Object target, Object returnValue) { - - VmListModel model = (VmListModel) target; - if (returnValue != null) - { - model.setCustomPropertiesKeysList(new HashMap<Version, ArrayList<String>>()); - HashMap<Version, String> dictionary = (HashMap<Version, String>) returnValue; - for (Map.Entry<Version, String> keyValuePair : dictionary.entrySet()) - { - model.getCustomPropertiesKeysList().put(keyValuePair.getKey(), - new ArrayList<String>()); - for (String s : keyValuePair.getValue().split("[;]", -1)) //$NON-NLS-1$ - { - model.getCustomPropertiesKeysList().get(keyValuePair.getKey()).add(s); - } - } - } - } - })); + setCustomPropertiesKeysList(new HashMap<Version, ArrayList<String>>()); + new CustomPropertiesBuilder().build(new VoidSource(), + getCustomPropertiesKeysList(), + new BuilderList<VoidSource, HashMap<Version, ArrayList<String>>>()); } // Call 'IsCommandCompatible' for precaching @@ -795,6 +784,53 @@ } return null; + } + + private void newVm() { + UnitVmModel model = new UnitVmModel(new NewVmModelBehavior()); + model.setIsNew(true); + model.setCustomPropertiesKeysList(getCustomPropertiesKeysList()); + + setWindow(model); + + model.Initialize(null); + + advanedButton.setTitle(determineAdvancedOptionsButtonLabel()); + advanedButton.setIsDefault(false); + model.getCommands().add(advanedButton); + + UICommand saveButton = new UICommand("onVmSave", this); //$NON-NLS-1$ + saveButton.setTitle(ConstantsManager.getInstance().getConstants().ok()); + saveButton.setIsDefault(true); + model.getCommands().add(saveButton); + + UICommand cancelButton = new UICommand("Cancel", this); //$NON-NLS-1$ + cancelButton.setTitle(ConstantsManager.getInstance().getConstants().cancel()); + cancelButton.setIsCancel(true); + model.getCommands().add(cancelButton); + + } + + private String determineAdvancedOptionsButtonLabel() { + if (isAdvancedMode()) { + return ConstantsManager.getInstance().getConstants().hideAdvancedOptions(); + } else { + return ConstantsManager.getInstance().getConstants().showAdvancedOptions(); + } + } + + private void onAdvanced() { + boolean advancedModeEnabled = isAdvancedMode(); + setAdvancedMode(!advancedModeEnabled); + advanedButton.setTitle(determineAdvancedOptionsButtonLabel()); + } + + private boolean isAdvancedMode() { + return (Boolean) ((UnitVmModel) getWindow()).getAdvancedMode().getEntity(); + } + + private void setAdvancedMode(boolean advanced) { + ((UnitVmModel) getWindow()).getAdvancedMode().setEntity(advanced); } private void NewDesktop() @@ -2428,6 +2464,7 @@ }, new DiskInfoDestinationMapBuilder()).build(model, new HashMap<Guid, DiskImage>()); + } else { @@ -2540,8 +2577,7 @@ protected void addVmFromTemplate(final UnitVmModel model, HashMap<Guid, DiskImage> dict) { AddVmFromTemplateParameters param = - new AddVmFromTemplateParameters(getcurrentVm(), - dict, Guid.Empty); + new AddVmFromTemplateParameters(getcurrentVm(), dict, Guid.Empty); ArrayList<VdcActionParametersBase> parameters = new ArrayList<VdcActionParametersBase>(); parameters.add(param); @@ -2663,6 +2699,188 @@ } } + @SuppressWarnings("unchecked") + private void onVmSave() { + final UnitVmModel model = (UnitVmModel) getWindow(); + setcurrentVm(model.getIsNew() ? new VM() : (VM) Cloner.clone(selectedItem)); + + new BuilderExecutor<UnitVmModel, VM>( + new CommonUnitToVmBuilder(), + new VmSpecificUnitToVmBuilder(), + new MigrationSupportVmToUnitBuilder(), + new KernelParamsUnitToVmBuilder(), + new UsbPolicyUntiToVmBuilder(), + new QuotaUnitToVmBuilder()).build(model, getcurrentVm()); + + if (model.getIsNew()) { + addVm(model); + } else { + editVm(model); + } + } + + protected void editVm(final UnitVmModel model) { + if (model.getProgress() != null) { + return; + } + + Guid newClusterID = ((VDSGroup) model.getCluster().getSelectedItem()).getId(); + Guid oldClusterID = ((VM) getSelectedItem()).getVdsGroupId(); + if (!oldClusterID.equals(newClusterID)) { + ChangeVMClusterParameters parameters = + new ChangeVMClusterParameters(newClusterID, getcurrentVm().getId()); + + changeClusterAndUpdateVm(model, parameters); + } else { + if (model.getProgress() != null) { + return; + } + + updateVm(model); + } + } + + protected void updateVm(final UnitVmModel model) { + model.StartProgress(null); + + Frontend.RunAction(VdcActionType.UpdateVm, new VmManagementParametersBase(getcurrentVm()), + new IFrontendActionAsyncCallback() { + @Override + public void Executed(FrontendActionAsyncResult result) { + + VmListModel vmListModel = (VmListModel) result.getState(); + vmListModel.getWindow().StopProgress(); + VdcReturnValueBase returnValueBase = result.getReturnValue(); + if (returnValueBase != null && returnValueBase.getSucceeded()) { + vmListModel.Cancel(); + } + + } + }, this); + } + + protected void changeClusterAndUpdateVm(final UnitVmModel model, ChangeVMClusterParameters parameters) { + model.StartProgress(null); + + Frontend.RunAction(VdcActionType.ChangeVMCluster, parameters, + new IFrontendActionAsyncCallback() { + @Override + public void Executed(FrontendActionAsyncResult result) { + + VmListModel vmListModel = (VmListModel) result.getState(); + VdcReturnValueBase returnValueBase = result.getReturnValue(); + if (returnValueBase != null && returnValueBase.getSucceeded()) { + Frontend.RunAction(VdcActionType.UpdateVm, + new VmManagementParametersBase(vmListModel.getcurrentVm()), + new IFrontendActionAsyncCallback() { + @Override + public void Executed(FrontendActionAsyncResult result1) { + + VmListModel vmListModel1 = (VmListModel) result1.getState(); + vmListModel1.getWindow().StopProgress(); + VdcReturnValueBase retVal = result1.getReturnValue(); + boolean isSucceeded = retVal.getSucceeded(); + if (retVal != null && isSucceeded) { + vmListModel1.Cancel(); + } + + } + }, + vmListModel); + } + else { + vmListModel.getWindow().StopProgress(); + } + + } + }, this); + } + + protected void addVm(final UnitVmModel model) { + if (getcurrentVm().getVmtGuid().equals(NGuid.Empty)) { + if (model.getProgress() != null) { + return; + } + + addVmFromScratch(model); + } else { + if (model.getProgress() != null) { + return; + } + + if ((Boolean) model.getProvisioning().getEntity()) { + addVmFromTemplateWithProvisioning(model); + } else { + if (model.getProgress() != null) { + return; + } + + addVmFromTemplateWithoutProvisioning(model); + } + } + } + + protected void addVmFromTemplateWithoutProvisioning(final UnitVmModel model) { + model.StartProgress(null); + + VmManagementParametersBase params = new VmManagementParametersBase(getcurrentVm()); + params.setDiskInfoDestinationMap( + model.getDisksAllocationModel().getImageToDestinationDomainMap()); + + ArrayList<VdcActionParametersBase> parameters = new ArrayList<VdcActionParametersBase>(); + parameters.add(params); + + Frontend.RunMultipleAction(VdcActionType.AddVm, parameters, + new IFrontendMultipleActionAsyncCallback() { + @Override + public void Executed(FrontendMultipleActionAsyncResult result) { + VmListModel vmListModel1 = (VmListModel) result.getState(); + vmListModel1.getWindow().StopProgress(); + vmListModel1.Cancel(); + } + }, + this); + } + + protected void addVmFromTemplateWithProvisioning(final UnitVmModel model) { + model.StartProgress(null); + new BuilderExecutor<UnitVmModel, HashMap<Guid, DiskImage>>( + new BuilderExecutionFinished<UnitVmModel, HashMap<Guid, DiskImage>>() { + + @Override + public void finished(UnitVmModel frontendModel, HashMap<Guid, DiskImage> dict) { + addVmFromTemplate(model, dict); + } + + }, + new DiskInfoDestinationMapBuilder()).build(model, new HashMap<Guid, DiskImage>()); + } + + protected void addVmFromScratch(final UnitVmModel model) { + model.StartProgress(null); + + Frontend.RunAction(VdcActionType.AddVmFromScratch, new AddVmFromScratchParameters(getcurrentVm(), + new ArrayList<DiskImage>(), + NGuid.Empty), + new IFrontendActionAsyncCallback() { + @Override + public void Executed(FrontendActionAsyncResult result) { + + VmListModel vmListModel = (VmListModel) result.getState(); + vmListModel.getWindow().StopProgress(); + VdcReturnValueBase returnValueBase = result.getReturnValue(); + if (returnValueBase != null && returnValueBase.getSucceeded()) + { + vmListModel.Cancel(); + vmListModel.setGuideContext(returnValueBase.getActionReturnValue()); + vmListModel.UpdateActionAvailability(); + vmListModel.getGuideCommand().Execute(); + } + + } + }, this); + } + private void UpdateActionAvailability() { List items = @@ -2732,8 +2950,9 @@ public void ExecuteCommand(UICommand command) { super.ExecuteCommand(command); - - if (command == getNewServerCommand()) + if (command == getNewVmCommand()) { + newVm(); + } else if (command == getNewServerCommand()) { NewServer(); } @@ -2804,6 +3023,8 @@ else if (command == getAssignTagsCommand()) { AssignTags(); + } else if (StringHelper.stringsEqual(command.getName(), "onVmSave")) { //$NON-NLS-1$ + onVmSave(); } else if (StringHelper.stringsEqual(command.getName(), "OnAssignTags")) //$NON-NLS-1$ { @@ -2863,6 +3084,8 @@ } else if (command.getName().equals("closeVncInfo")) { //$NON-NLS-1$ setWindow(null); + } else if (StringHelper.stringsEqual(command.getName(), "OnAdvanced")) { //$NON-NLS-1$ + onAdvanced(); } } 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 2d36349..48dac8e 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 @@ -1754,4 +1754,10 @@ @DefaultStringValue("Alerts") String alertsTitle(); + + @DefaultStringValue("Show Advanced Options") + String showAdvancedOptions(); + + @DefaultStringValue("Hide Advanced Options") + String hideAdvancedOptions(); } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java index 28b3586..8a75d72 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java @@ -1297,6 +1297,9 @@ @DefaultStringValue("New Server") String newServerVm(); + @DefaultStringValue("New VM") + String newVm(); + @DefaultStringValue("New Desktop") String newDesktopVm(); 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 6ddd849..a9b9281 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 @@ -70,6 +70,8 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.template.TemplateInterfacePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.template.TemplateNewPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.user.ManageEventsPopupPresenterWidget; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.InstanceTypePopupPresenterWidget; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.TemplatePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmChangeCDPopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmClonePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmDesktopNewPopupPresenterWidget; @@ -79,6 +81,7 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmInterfacePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmMakeTemplatePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmMigratePopupPresenterWidget; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmPopupPresenterWidget; 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; @@ -125,9 +128,9 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.SubTabVolumePermissionPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.VolumeSubTabPanelPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.HostSubTabPanelPresenter; -import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostHardwarePresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostEventPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostGeneralPresenter; +import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostHardwarePresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostHookPresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostInterfacePresenter; import org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostPermissionPresenter; @@ -251,6 +254,8 @@ import org.ovirt.engine.ui.webadmin.section.main.view.popup.template.TemplateInterfacePopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.template.TemplateNewPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.user.ManageEventsPopupView; +import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.InstanceTypePopupView; +import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.TemplatePopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmChangeCDPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmClonePopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmDesktopNewPopupView; @@ -260,6 +265,7 @@ import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmInterfacePopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmMakeTemplatePopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmMigratePopupView; +import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmPopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmRemovePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmRemovePopupView; import org.ovirt.engine.ui.webadmin.section.main.view.popup.vm.VmRunOncePopupView; @@ -308,9 +314,9 @@ import org.ovirt.engine.ui.webadmin.section.main.view.tab.gluster.SubTabVolumePermissionView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.gluster.VolumeSubTabPanelView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.host.HostSubTabPanelView; -import org.ovirt.engine.ui.webadmin.section.main.view.tab.host.SubTabHostHardwareView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.host.SubTabHostEventView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.host.SubTabHostGeneralView; +import org.ovirt.engine.ui.webadmin.section.main.view.tab.host.SubTabHostHardwareView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.host.SubTabHostHookView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.host.SubTabHostInterfaceView; import org.ovirt.engine.ui.webadmin.section.main.view.tab.host.SubTabHostPermissionView; @@ -841,7 +847,6 @@ SubTabNetworkPermissionView.class, SubTabNetworkPermissionPresenter.ProxyDef.class); - // Main section: popups // Permissions @@ -997,6 +1002,11 @@ VmServerNewPopupPresenterWidget.ViewDef.class, VmServerNewPopupView.class); + // new VM + bindPresenterWidget(VmPopupPresenterWidget.class, + VmPopupPresenterWidget.ViewDef.class, + VmPopupView.class); + // VM Snapshot Create bindPresenterWidget(VmSnapshotCreatePopupPresenterWidget.class, VmSnapshotCreatePopupPresenterWidget.ViewDef.class, @@ -1067,6 +1077,16 @@ TemplateNewPresenterWidget.ViewDef.class, TemplateNewPopupView.class); + // New Template + bindPresenterWidget(TemplatePopupPresenterWidget.class, + TemplatePopupPresenterWidget.ViewDef.class, + TemplatePopupView.class); + + // Edit Instance Type + bindPresenterWidget(InstanceTypePopupPresenterWidget.class, + InstanceTypePopupPresenterWidget.ViewDef.class, + InstanceTypePopupView.class); + // Add/Edit Template's NIC bindPresenterWidget(TemplateInterfacePopupPresenterWidget.class, TemplateInterfacePopupPresenterWidget.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 b5eb8ea..e97e16d 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 @@ -48,6 +48,7 @@ import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmInterfacePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmMakeTemplatePopupPresenterWidget; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmMigratePopupPresenterWidget; +import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm.VmPopupPresenterWidget; 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; @@ -80,7 +81,8 @@ final Provider<RemoveConfirmationPopupPresenterWidget> removeConfirmPopupProvider, final Provider<VmRemovePopupPresenterWidget> vmRemoveConfirmPopupProvider, final Provider<ReportPresenterWidget> reportWindowProvider, - final Provider<VncInfoPopupPresenterWidget> vncWindoProvider) { + final Provider<VncInfoPopupPresenterWidget> vncWindoProvider, + final Provider<VmPopupPresenterWidget> newVmPopupProvider) { return new MainTabModelProvider<VM, VmListModel>(ginjector, VmListModel.class) { @Override public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> getModelPopup(VmListModel source, @@ -105,6 +107,8 @@ return newDesktopVmPopupProvider.get(); } else if (lastExecutedCommand == getModel().getNewServerCommand()) { return newServerVmPopupProvider.get(); + } else if (lastExecutedCommand == getModel().getNewVmCommand()) { + return newVmPopupProvider.get(); } else if (lastExecutedCommand == getModel().getEditCommand()) { UnitVmModel vm = (UnitVmModel) getModel().getWindow(); if (vm.getVmType().equals(VmType.Desktop)) { diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/vm/VmPopupPresenterWidget.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/vm/VmPopupPresenterWidget.java new file mode 100644 index 0000000..9bf86c7 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/vm/VmPopupPresenterWidget.java @@ -0,0 +1,45 @@ +package org.ovirt.engine.ui.webadmin.section.main.presenter.popup.vm; + +import org.ovirt.engine.ui.uicompat.Event; +import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; +import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget; +import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.VmPopup; +import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; + +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; + +public class VmPopupPresenterWidget extends AbstractModelBoundPopupPresenterWidget<UnitVmModel, VmPopupPresenterWidget.ViewDef> { + + public interface ViewDef extends AbstractModelBoundPopupPresenterWidget.ViewDef<UnitVmModel> { + VmPopup getPopup(); + } + + @Inject + public VmPopupPresenterWidget(EventBus eventBus, ViewDef view) { + super(eventBus, view); + } + + @Override + public void init(UnitVmModel model) { + super.init(model); + + initListeners(model); + swithAccordingToMode(model); + } + + private void initListeners(final UnitVmModel model) { + model.getAdvancedMode().getPropertyChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + swithAccordingToMode(model); + } + + }); + } + + private void swithAccordingToMode(final UnitVmModel model) { + getView().getPopup().switchMode((Boolean) model.getAdvancedMode().getEntity()); + } +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmPopupView.java new file mode 100644 index 0000000..ce843d6 --- /dev/null +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/vm/VmPopupView.java @@ -0,0 +1,36 @@ +package org.ovirt.engine.ui.webadmin.section.main.view.popup.vm; + +import org.ovirt.engine.ui.common.CommonApplicationMessages; +import org.ovirt.engine.ui.common.CommonApplicationTemplates; +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.VmPopup; +import org.ovirt.engine.ui.common.widget.uicommon.popup.vm.VmPopupWidget; +import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; +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.VmPopupPresenterWidget; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.shared.EventBus; +import com.google.inject.Inject; + + +public class VmPopupView extends AbstractModelBoundWidgetPopupView<UnitVmModel> implements VmPopupPresenterWidget.ViewDef { + + interface ViewIdHandler extends ElementIdHandler<VmPopupView> { + ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); + } + + @Inject + public VmPopupView(EventBus eventBus, ApplicationResources resources, ApplicationConstants constants, CommonApplicationMessages messages, CommonApplicationTemplates templates) { + super(eventBus, resources, new VmPopupWidget(constants, resources, messages, templates), "670px", "610px"); //$NON-NLS-1$ //$NON-NLS-2$ + ViewIdHandler.idHandler.generateAndSetIds(this); + } + + @Override + public VmPopup getPopup() { + return (VmPopup) getContentWidget(); + } + +} 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 699eff4..e08c9cc 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 @@ -149,6 +149,12 @@ }; getTable().addColumn(uptimeColumn, constants.uptimeVm(), "80px"); //$NON-NLS-1$ + getTable().addActionButton(new WebAdminButtonDefinition<VM>(constants.newVm()) { + @Override + protected UICommand resolveCommand() { + return getMainModel().getNewVmCommand(); + } + }); getTable().addActionButton(new WebAdminButtonDefinition<VM>(constants.newServerVm()) { @Override protected UICommand resolveCommand() { -- To view, visit http://gerrit.ovirt.org/12439 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib0a52c83c445706c5ad6fe2ee6ab62ba40d52e83 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Tomas Jelinek <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
