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

Reply via email to