Hello Arik Hadas,
I'd like you to do a code review. Please visit
http://gerrit.ovirt.org/23613
to review the following change.
Change subject: frontend: template versions in popup dialogs
......................................................................
frontend: template versions in popup dialogs
This patch adds template versions (base template + version instead of
just template) to all VM, pool and template dialogs
Change-Id: I26f3ddba7833dd257bc8a069a772ad192352d1a2
Signed-off-by: Arik Hadas <[email protected]>
---
M
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
M
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
M
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
M
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmMakeTemplatePopupWidget.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/CloneVmFromSnapshotModelBehavior.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingPoolModelBehavior.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.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/UserPortalNewVmModelBehavior.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
M
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
M
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
19 files changed, 292 insertions(+), 166 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/13/23613/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 5598ea8..57d7ebb 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
@@ -60,11 +60,20 @@
String createAsSubTemplate();
@DefaultStringValue("Root Template")
- String baseTemplate();
+ String rootTemplate();
@DefaultStringValue("Sub Version Name")
String templateVersionName();
+ @DefaultStringValue("Template Sub Version")
+ String templateSubVersion();
+
+ @DefaultStringValue("latest")
+ String latest();
+
+ @DefaultStringValue("base template")
+ String baseTemplate();
+
@DefaultStringValue("Disk ")
String diskNamePrefix();
diff --git
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
index 91765fa..015d7c9 100644
---
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
+++
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java
@@ -22,6 +22,7 @@
import org.ovirt.engine.core.common.businessentities.VmTemplate;
import org.ovirt.engine.core.common.businessentities.VmType;
import org.ovirt.engine.core.common.queries.ConfigurationValues;
+import org.ovirt.engine.core.compat.StringFormat;
import org.ovirt.engine.core.compat.StringHelper;
import org.ovirt.engine.ui.common.CommonApplicationConstants;
import org.ovirt.engine.ui.common.CommonApplicationMessages;
@@ -66,6 +67,7 @@
import org.ovirt.engine.ui.uicommonweb.models.vms.TimeZoneModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
import org.ovirt.engine.ui.uicommonweb.models.vms.key_value.KeyValueModel;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
import org.ovirt.engine.ui.uicompat.EnumTranslator;
import org.ovirt.engine.ui.uicompat.Event;
import org.ovirt.engine.ui.uicompat.EventArgs;
@@ -168,6 +170,11 @@
@Path(value = "comment.entity")
@WithElementId("comment")
public StringEntityModelTextBoxEditor commentEditor;
+
+ @UiField(provided = true)
+ @Path(value = "baseTemplate.selectedItem")
+ @WithElementId("baseTemplate")
+ public ListModelTypeAheadListBoxEditor<VmTemplate> baseTemplateEditor;
@UiField(provided = true)
@Path(value = "template.selectedItem")
@@ -840,7 +847,7 @@
},
new ModeSwitchingVisibilityRenderer());
- templateEditor = new ListModelTypeAheadListBoxEditor<VmTemplate>(
+ baseTemplateEditor = new ListModelTypeAheadListBoxEditor<VmTemplate>(
new
ListModelTypeAheadListBoxEditor.NullSafeSuggestBoxRenderer<VmTemplate>() {
@Override
@@ -858,6 +865,36 @@
},
new ModeSwitchingVisibilityRenderer());
+ templateEditor = new ListModelTypeAheadListBoxEditor<VmTemplate>(
+ new
ListModelTypeAheadListBoxEditor.NullSafeSuggestBoxRenderer<VmTemplate>() {
+
+ @Override
+ public String getReplacementStringNullSafe(VmTemplate
data) {
+ return getDisplayableTemplateVersionName(data);
+ }
+
+ @Override
+ public String getDisplayStringNullSafe(VmTemplate data) {
+ return typeAheadNameDescriptionTemplateNullSafe(
+ getDisplayableTemplateVersionName(data),
+ data.getDescription()
+ );
+ }
+
+ private String
getDisplayableTemplateVersionName(VmTemplate template) {
+ String versionName = template.getTemplateVersionName();
+ if
(ConstantsManager.getInstance().getConstants().latestTemplateVersionName().equals(versionName))
{
+ return constants.latest();
+ }
+
+ versionName =
template.getId().equals(template.getBaseTemplateId()) ?
+ constants.baseTemplate() :
template.getTemplateVersionName();
+
+ return (versionName == null ? "" : versionName)
//$NON-NLS-1$
+ + StringFormat.format(" (%d)",
template.getTemplateVersionNumber()); //$NON-NLS-1$
+ }
+ },
+ new ModeSwitchingVisibilityRenderer());
oSTypeEditor = new ListModelListBoxEditor<Integer>(new
AbstractRenderer<Integer>() {
@Override
@@ -985,7 +1022,8 @@
nameLabel.setText(constants.nameVmPopup());
descriptionEditor.setLabel(constants.descriptionVmPopup());
commentEditor.setLabel(constants.commentLabel());
- templateEditor.setLabel(constants.basedOnTemplateVmPopup());
+ baseTemplateEditor.setLabel(constants.basedOnTemplateVmPopup());
+ templateEditor.setLabel(constants.templateSubVersion());
oSTypeEditor.setLabel(constants.osVmPopup());
vmTypeEditor.setLabel(constants.optimizedFor());
@@ -1392,6 +1430,7 @@
nextTabIndex = generalTab.setTabIndexes(nextTabIndex);
quotaEditor.setTabIndex(nextTabIndex++);
oSTypeEditor.setTabIndex(nextTabIndex++);
+ baseTemplateEditor.setTabIndex(nextTabIndex++);
templateEditor.setTabIndex(nextTabIndex++);
nameEditor.setTabIndex(nextTabIndex++);
@@ -1565,6 +1604,7 @@
quotaEditor.setEnabled(false);
dataCenterWithClusterEditor.setEnabled(false);
templateEditor.setEnabled(false);
+ baseTemplateEditor.setEnabled(false);
vmTypeEditor.setEnabled(false);
}
diff --git
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
index c636bc9..81ef20f 100644
---
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
+++
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml
@@ -318,7 +318,8 @@
<g:FlowPanel addStyleNames="{style.headerPanel}">
<e:ListModelTypeAheadListBoxEditor
ui:field="dataCenterWithClusterEditor" />
<e:ListModelTypeAheadListBoxEditor
ui:field="quotaEditor" />
- <e:ListModelTypeAheadListBoxEditor
ui:field="templateEditor"/>
+ <e:ListModelTypeAheadListBoxEditor
ui:field="baseTemplateEditor"/>
+ <e:ListModelTypeAheadListBoxEditor
ui:field="templateEditor" />
<e:ListModelListBoxEditor
ui:field="oSTypeEditor" />
<e:ListModelListBoxEditor
ui:field="vmTypeEditor" />
</g:FlowPanel>
diff --git
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmMakeTemplatePopupWidget.java
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmMakeTemplatePopupWidget.java
index 214fe0a..48501a6 100644
---
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmMakeTemplatePopupWidget.java
+++
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmMakeTemplatePopupWidget.java
@@ -214,7 +214,7 @@
copyVmPermissions.setLabel(constants.copyVmPermissions());
disksAllocationLabel.setText(constants.disksAllocation());
isSubTemplateEditor.setLabel(constants.createAsSubTemplate());
- baseTemplateEditor.setLabel(constants.baseTemplate());
+ baseTemplateEditor.setLabel(constants.rootTemplate());
templateVersionNameEditor.setLabel(constants.templateVersionName());
}
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java
index c91c92a..f4c96e4 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java
@@ -51,9 +51,11 @@
import org.ovirt.engine.ui.uicompat.IFrontendMultipleActionAsyncCallback;
import org.ovirt.engine.ui.uicompat.ObservableCollection;
import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
+import org.ovirt.engine.ui.uicompat.UIConstants;
public class PoolListModel extends ListWithDetailsModel implements
ISupportSystemTreeContext
{
+ private final UIConstants constants =
ConstantsManager.getInstance().getConstants();
private UICommand privateNewCommand;
@@ -505,6 +507,8 @@
vm.setVmType(model.getVmType().getSelectedItem());
vm.setAllowConsoleReconnect(model.getAllowConsoleReconnect().getEntity());
+
vm.setUseLatestVersion(constants.latestTemplateVersionName().equals(model.getTemplate().getSelectedItem().getTemplateVersionName()));
+
AddVmPoolWithVmsParameters param =
new AddVmPoolWithVmsParameters(pool, vm,
model.getNumOfDesktops().getEntity(), 0);
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
index 19e7e44..956bcb1 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java
@@ -6,6 +6,7 @@
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
+
import org.ovirt.engine.core.common.VdcActionUtils;
import org.ovirt.engine.core.common.action.AddVmFromScratchParameters;
import org.ovirt.engine.core.common.action.AddVmFromTemplateParameters;
@@ -82,9 +83,11 @@
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 UserPortalListModel extends AbstractUserPortalListModel {
+ private final UIConstants constants =
ConstantsManager.getInstance().getConstants();
public static final EventDefinition searchCompletedEventDefinition;
private Event privateSearchCompletedEvent;
@@ -1114,7 +1117,10 @@
UserPortalListModel userPortalListModel1 =
(UserPortalListModel) model;
final UnitVmModel unitVmModel = (UnitVmModel)
userPortalListModel1.getWindow();
- AddVmFromTemplateParameters param = new
AddVmFromTemplateParameters(gettempVm(),
+ VM vm = gettempVm();
+
vm.setUseLatestVersion(constants.latestTemplateVersionName().equals(unitVmModel.getTemplate().getSelectedItem().getTemplateVersionName()));
+
+ AddVmFromTemplateParameters param = new
AddVmFromTemplateParameters(vm,
unitVmModel.getDisksAllocationModel().getImageToDestinationDomainMap(),
Guid.Empty);
param.setMakeCreatorExplicitOwner(true);
@@ -1129,7 +1135,10 @@
}
else
{
- VmManagementParametersBase param = new
VmManagementParametersBase(gettempVm());
+ VM vm = gettempVm();
+
vm.setUseLatestVersion(constants.latestTemplateVersionName().equals(model.getTemplate().getSelectedItem().getTemplateVersionName()));
+
+ VmManagementParametersBase param = new
VmManagementParametersBase(vm);
param.setDiskInfoDestinationMap(model.getDisksAllocationModel().getImageToDestinationDomainMap());
param.setMakeCreatorExplicitOwner(true);
param.setCopyTemplatePermissions(model.getCopyPermissions().getEntity());
@@ -1150,20 +1159,27 @@
new IFrontendActionAsyncCallback() {
@Override
public void executed(FrontendActionAsyncResult
result) {
- VmManagementParametersBase param = new
VmManagementParametersBase(gettempVm());
+ VM vm = gettempVm();
+
vm.setUseLatestVersion(constants.latestTemplateVersionName().equals(model.getTemplate().getSelectedItem().getTemplateVersionName()));
+
+ VmManagementParametersBase param = new
VmManagementParametersBase(vm);
param.setSoundDeviceEnabled(model.getIsSoundcardEnabled().getEntity());
param.setConsoleEnabled(model.getIsConsoleDeviceEnabled().getEntity());
-
Frontend.getInstance().runAction(VdcActionType.UpdateVm, param, new
UnitVmModelNetworkAsyncCallback(model, defaultNetworkCreatingManager,
gettempVm().getId()), this);
+
Frontend.getInstance().runAction(VdcActionType.UpdateVm, param, new
UnitVmModelNetworkAsyncCallback(model, defaultNetworkCreatingManager,
vm.getId()), this);
}
}, this);
}
else
{
- VmManagementParametersBase param = new
VmManagementParametersBase(gettempVm());
+ VM vm = gettempVm();
+
vm.setUseLatestVersion(constants.latestTemplateVersionName().equals(model.getTemplate().getSelectedItem().getTemplateVersionName()));
+
+ VmManagementParametersBase param = new
VmManagementParametersBase(vm);
param.setSoundDeviceEnabled(model.getIsSoundcardEnabled().getEntity());
param.setConsoleEnabled(model.getIsConsoleDeviceEnabled().getEntity());
- Frontend.getInstance().runAction(VdcActionType.UpdateVm,
param, new UnitVmModelNetworkAsyncCallback(model,
defaultNetworkCreatingManager, gettempVm().getId()), this);
+
+ Frontend.getInstance().runAction(VdcActionType.UpdateVm,
param, new UnitVmModelNetworkAsyncCallback(model,
defaultNetworkCreatingManager, vm.getId()), this);
}
}
}
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/CloneVmFromSnapshotModelBehavior.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/CloneVmFromSnapshotModelBehavior.java
index c072f11..4c3a336 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/CloneVmFromSnapshotModelBehavior.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/CloneVmFromSnapshotModelBehavior.java
@@ -1,46 +1,15 @@
package org.ovirt.engine.ui.uicommonweb.models.vms;
import java.util.ArrayList;
-import java.util.Arrays;
import org.ovirt.engine.core.common.businessentities.DiskImage;
-import org.ovirt.engine.core.common.businessentities.VmTemplate;
-import org.ovirt.engine.ui.frontend.AsyncQuery;
-import org.ovirt.engine.ui.frontend.INewAsyncCallback;
import org.ovirt.engine.ui.uicommonweb.Linq;
-import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
-import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
@SuppressWarnings("unused")
public class CloneVmFromSnapshotModelBehavior extends ExistingVmModelBehavior
{
public CloneVmFromSnapshotModelBehavior() {
super(null);
- }
-
- @Override
- public void initialize(SystemTreeItemModel systemTreeSelectedItem)
- {
- super.initialize(systemTreeSelectedItem);
- }
-
- public void initTemplate()
- {
- AsyncDataProvider.getTemplateById(new AsyncQuery(getModel(),
- new INewAsyncCallback() {
- @Override
- public void onSuccess(Object target, Object returnValue) {
-
- UnitVmModel model = (UnitVmModel) target;
- VmTemplate template = (VmTemplate) returnValue;
- model.getTemplate()
- .setItems(new
ArrayList<VmTemplate>(Arrays.asList(new VmTemplate[] { template })));
- model.getTemplate().setSelectedItem(template);
- model.getTemplate().setIsChangable(false);
- }
- },
- getModel().getHash()),
- vm.getVmtGuid());
}
@Override
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingPoolModelBehavior.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingPoolModelBehavior.java
index 1feaffa..52dc405 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingPoolModelBehavior.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingPoolModelBehavior.java
@@ -12,14 +12,12 @@
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VmBase;
import org.ovirt.engine.core.common.businessentities.VmStatic;
-import org.ovirt.engine.core.common.businessentities.VmTemplate;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.compat.StringHelper;
import org.ovirt.engine.ui.frontend.AsyncQuery;
import org.ovirt.engine.ui.frontend.INewAsyncCallback;
import org.ovirt.engine.ui.uicommonweb.Linq;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
-import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
import org.ovirt.engine.ui.uicommonweb.models.storage.DisksAllocationModel;
import
org.ovirt.engine.ui.uicommonweb.validation.ExistingPoolNameLengthValidation;
@@ -35,6 +33,7 @@
@Override
public void initialize(SystemTreeItemModel systemTreeSelectedItem) {
+ initTemplate();
super.initialize(systemTreeSelectedItem);
if (!StringHelper.isNullOrEmpty(pool.getVmPoolSpiceProxy())) {
@@ -52,18 +51,9 @@
}
@Override
- protected void setupSelectedTemplate(ListModel model, List<VmTemplate>
templates) {
- setupTemplate(pool, model);
- }
+ public void postDataCenterWithClusterSelectedItemChanged() {
+ super.postDataCenterWithClusterSelectedItemChanged();
- @Override
- public void template_SelectedItemChanged() {
- getModel().setIsDisksAvailable(true);
- updateHostPinning(pool.getMigrationSupport());
- }
-
- @Override
- protected void postInitTemplate() {
setupWindowModelFrom(pool.getStaticData());
getModel().setIsDisksAvailable(true);
@@ -75,6 +65,21 @@
getModel().getDataCenterWithClustersList()
.setSelectedItem((selectDataCenterWithCluster != null) ?
selectDataCenterWithCluster
: Linq.firstOrDefault(dataCenterWithClusters));
+
+ }
+
+ public void initTemplate() {
+ setupTemplate(pool.getVmtGuid(), pool.isUseLatestVersion());
+ }
+
+ @Override
+ public void template_SelectedItemChanged() {
+ getModel().setIsDisksAvailable(true);
+ updateHostPinning(pool.getMigrationSupport());
+ }
+
+ @Override
+ protected void baseTemplateSelectedItemChanged() {
}
@Override
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
index ea081fe..4b8fb20 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
@@ -145,6 +145,10 @@
}
@Override
+ protected void baseTemplateSelectedItemChanged() {
+ }
+
+ @Override
public void template_SelectedItemChanged()
{
// This method will be called even if a VM created from Blank template.
@@ -324,9 +328,9 @@
}
}
- public void initTemplate()
+ protected void initTemplate()
{
- setupTemplate(vm, getModel().getTemplate());
+ setupTemplate(vm.getVmtGuid(), vm.isUseLatestVersion());
}
public void initCdImage()
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java
index fc1d930..89daaf5 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewPoolModelBehavior.java
@@ -9,9 +9,7 @@
import org.ovirt.engine.core.common.businessentities.VmTemplate;
import org.ovirt.engine.ui.frontend.AsyncQuery;
import org.ovirt.engine.ui.frontend.INewAsyncCallback;
-import org.ovirt.engine.ui.uicommonweb.Linq;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
-import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
import org.ovirt.engine.ui.uicommonweb.validation.NewPoolNameLengthValidation;
@@ -38,8 +36,30 @@
}
@Override
- protected void setupSelectedTemplate(ListModel model, List<VmTemplate>
templates) {
- getModel().getTemplate().setSelectedItem(Linq.<VmTemplate>
firstOrDefault(templates));
+ public void postDataCenterWithClusterSelectedItemChanged() {
+ super.postDataCenterWithClusterSelectedItemChanged();
+
+ final DataCenterWithCluster dataCenterWithCluster =
+ (DataCenterWithCluster)
getModel().getDataCenterWithClustersList().getSelectedItem();
+ StoragePool dataCenter = getModel().getSelectedDataCenter();
+ if (dataCenter == null) {
+ return;
+ }
+
+ AsyncDataProvider.getTemplateListByDataCenter(new AsyncQuery(this, new
INewAsyncCallback() {
+ @Override
+ public void onSuccess(Object target1, Object returnValue1) {
+
+ List<VmTemplate> baseTemplates =
+ filterNotBaseTemplates((List<VmTemplate>)
returnValue1);
+
+ List<VmTemplate> filteredTemplates =
+
AsyncDataProvider.filterTemplatesByArchitecture(baseTemplates,
+
dataCenterWithCluster.getCluster().getArchitecture());
+
+ getModel().getBaseTemplate().setItems(filteredTemplates);
+ }
+ }), dataCenter.getId());
}
@Override
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
index 8cdd6b1..ea76481 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
@@ -441,4 +441,8 @@
getModel().getOSType().setSelectedItem(vm.getOs());
}
}
+
+ @Override
+ protected void baseTemplateSelectedItemChanged() {
+ }
}
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
index 1d5f39c..ddd5fe0 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
@@ -353,14 +353,16 @@
}
}
- private void postInitTemplate(ArrayList<VmTemplate> templates)
+ private void postInitTemplate(List<VmTemplate> templates)
{
+ List<VmTemplate> rootTemplates = filterNotBaseTemplates(templates);
+
// If there was some template selected before, try select it again.
- VmTemplate oldTemplate = getModel().getTemplate().getSelectedItem();
+ VmTemplate oldTemplate =
getModel().getBaseTemplate().getSelectedItem();
- getModel().getTemplate().setItems(templates);
+ getModel().getBaseTemplate().setItems(rootTemplates);
- getModel().getTemplate().setSelectedItem(Linq.firstOrDefault(templates,
+
getModel().getBaseTemplate().setSelectedItem(Linq.firstOrDefault(rootTemplates,
oldTemplate != null ? new
Linq.TemplatePredicate(oldTemplate.getId())
: new Linq.TemplatePredicate(Guid.Empty)));
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
index bd6ed5b..320211f 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
@@ -13,10 +13,8 @@
import org.ovirt.engine.core.compat.StringHelper;
import org.ovirt.engine.ui.frontend.AsyncQuery;
import org.ovirt.engine.ui.frontend.INewAsyncCallback;
-import org.ovirt.engine.ui.uicommonweb.Linq;
import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
-import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
import org.ovirt.engine.ui.uicommonweb.models.pools.PoolModel;
import
org.ovirt.engine.ui.uicommonweb.validation.HostWithProtocolAndPortAddressValidation;
@@ -221,7 +219,6 @@
updateMemoryBalloon();
updateCpuSharesAvailability();
updateVirtioScsiAvailability();
- updateTemplate();
}
@Override
@@ -247,52 +244,6 @@
double overCommitFactor = 100.0 /
cluster.getmax_vds_memory_over_commit();
getModel().getMinAllocatedMemory()
.setEntity((int) (getModel().getMemSize().getEntity() *
overCommitFactor));
- }
-
- private void updateTemplate()
- {
- final DataCenterWithCluster dataCenterWithCluster =
- (DataCenterWithCluster)
getModel().getDataCenterWithClustersList().getSelectedItem();
- StoragePool dataCenter = getModel().getSelectedDataCenter();
- if (dataCenter == null) {
- return;
- }
-
- AsyncDataProvider.getTemplateListByDataCenter(new AsyncQuery(this, new
INewAsyncCallback() {
- @Override
- public void onSuccess(Object target1, Object returnValue1) {
-
- ArrayList<VmTemplate> loadedTemplates =
(ArrayList<VmTemplate>) returnValue1;
-
- ArrayList<VmTemplate> templates = new ArrayList<VmTemplate>();
- for (VmTemplate template : loadedTemplates) {
- if (!template.getId().equals(Guid.Empty)) {
- templates.add(template);
- }
- }
-
- ArrayList<VmTemplate> filteredTemplates =
AsyncDataProvider.filterTemplatesByArchitecture(templates,
-
dataCenterWithCluster.getCluster().getArchitecture());
-
- getModel().getTemplate().setItems(filteredTemplates);
- setupSelectedTemplate(getModel().getTemplate(),
filteredTemplates);
- }
- }), dataCenter.getId());
-
- }
-
- protected abstract void setupSelectedTemplate(ListModel model,
List<VmTemplate> templates);
-
- private void postInitTemplate(ArrayList<VmTemplate> templates)
- {
- // If there was some template selected before, try select it again.
- VmTemplate oldTemplate = getModel().getTemplate().getSelectedItem();
-
- getModel().getTemplate().setItems(templates);
-
- getModel().getTemplate().setSelectedItem(Linq.firstOrDefault(templates,
- oldTemplate != null ? new
Linq.TemplatePredicate(oldTemplate.getId())
- : new Linq.TemplatePredicate(Guid.Empty)));
}
public void initCdImage()
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
index 03491e8..7dce70f 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
@@ -32,6 +32,7 @@
{
super.initialize(systemTreeSelectedItem);
getModel().getTemplate().setIsChangable(false);
+ getModel().getBaseTemplate().setIsChangable(false);
getModel().getProvisioning().setIsChangable(false);
getModel().getStorageDomain().setIsChangable(false);
getModel().getIsSoundcardEnabled().setIsChangable(true);
@@ -102,7 +103,14 @@
}
}
}), template.getId());
+
getModel().getMigrationMode().setSelectedItem(template.getMigrationSupport());
+
+ setupBaseTemplate(template.getBaseTemplateId());
+ }
+
+ @Override
+ protected void baseTemplateSelectedItemChanged() {
}
@Override
@@ -150,33 +158,32 @@
private void initTemplate()
{
// Update model state according to VM properties.
- getModel().getName().setEntity(this.template.getName());
- getModel().getDescription().setEntity(this.template.getDescription());
- getModel().getComment().setEntity(this.template.getComment());
-
getModel().getMinAllocatedMemory().setEntity(this.template.getMinAllocatedMem());
+ getModel().getName().setEntity(template.getName());
+ getModel().getDescription().setEntity(template.getDescription());
+ getModel().getComment().setEntity(template.getComment());
+
getModel().getMinAllocatedMemory().setEntity(template.getMinAllocatedMem());
getModel().getMinAllocatedMemory().setIsChangable(false);
- getModel().getMemSize().setEntity(this.template.getMemSizeMb());
- getModel().getOSType().setSelectedItem(this.template.getOsId());
- getModel().getDomain().setSelectedItem(this.template.getDomain());
-
getModel().getUsbPolicy().setSelectedItem(this.template.getUsbPolicy());
-
getModel().getNumOfMonitors().setSelectedItem(this.template.getNumOfMonitors());
-
getModel().getAllowConsoleReconnect().setEntity(this.template.isAllowConsoleReconnect());
- getModel().setBootSequence(this.template.getDefaultBootSequence());
-
getModel().getIsHighlyAvailable().setEntity(this.template.isAutoStartup());
-
getModel().getTotalCPUCores().setEntity(Integer.toString(this.template.getNumOfCpus()));
-
getModel().getNumOfSockets().setSelectedItem(this.template.getNumOfSockets());
- getModel().getIsStateless().setEntity(this.template.isStateless());
- getModel().getIsRunAndPause().setEntity(this.template.isRunAndPause());
-
getModel().getIsDeleteProtected().setEntity(this.template.isDeleteProtected());
- getModel().selectSsoMethod(this.template.getSsoMethod());
-
getModel().getIsSmartcardEnabled().setEntity(this.template.isSmartcardEnabled());
-
getModel().getVncKeyboardLayout().setSelectedItem(this.template.getVncKeyboardLayout());
+ getModel().getMemSize().setEntity(template.getMemSizeMb());
+ getModel().getOSType().setSelectedItem(template.getOsId());
+ getModel().getUsbPolicy().setSelectedItem(template.getUsbPolicy());
+
getModel().getNumOfMonitors().setSelectedItem(template.getNumOfMonitors());
+
getModel().getAllowConsoleReconnect().setEntity(template.isAllowConsoleReconnect());
+ getModel().setBootSequence(template.getDefaultBootSequence());
+ getModel().getIsHighlyAvailable().setEntity(template.isAutoStartup());
+
getModel().getTotalCPUCores().setEntity(Integer.toString(template.getNumOfCpus()));
+
getModel().getNumOfSockets().setSelectedItem(template.getNumOfSockets());
+ getModel().getIsStateless().setEntity(template.isStateless());
+ getModel().getIsRunAndPause().setEntity(template.isRunAndPause());
+
getModel().getIsDeleteProtected().setEntity(template.isDeleteProtected());
+ getModel().selectSsoMethod(template.getSsoMethod());
+
getModel().getIsSmartcardEnabled().setEntity(template.isSmartcardEnabled());
+
getModel().getVncKeyboardLayout().setSelectedItem(template.getVncKeyboardLayout());
-
getModel().getKernel_parameters().setEntity(this.template.getKernelParams());
- getModel().getKernel_path().setEntity(this.template.getKernelUrl());
- getModel().getInitrd_path().setEntity(this.template.getInitrdUrl());
+
getModel().getKernel_parameters().setEntity(template.getKernelParams());
+ getModel().getKernel_path().setEntity(template.getKernelUrl());
+ getModel().getInitrd_path().setEntity(template.getInitrdUrl());
-
getModel().getIsSingleQxlEnabled().setEntity(this.template.getSingleQxlPci());
+
getModel().getIsSingleQxlEnabled().setEntity(template.getSingleQxlPci());
updateTimeZone(template.getTimeZone());
@@ -192,7 +199,7 @@
{
DisplayType displayType = model.getEntity();
- if (displayType == this.template.getDefaultDisplayType())
+ if (displayType == template.getDefaultDisplayType())
{
getModel().getDisplayProtocol().setSelectedItem(model);
break;
@@ -201,7 +208,7 @@
updateConsoleDevice(template.getId());
- initPriority(this.template.getPriority());
+ initPriority(template.getPriority());
}
private void initCdImage()
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 3758656..1d77018 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
@@ -161,6 +161,7 @@
getPrestartedVms().setIsChangable(false);
getMaxAssignedVmsPerUser().setIsChangable(false);
+ getBaseTemplate().setIsChangable(false);
getTemplate().setIsChangable(false);
getMemSize().setIsChangable(false);
getTotalCPUCores().setIsChangable(false);
@@ -1252,6 +1253,7 @@
setIsSubTemplate(new
NotChangableForVmInPoolEntityModel<Boolean>(false));
setTemplateVersionName(new
NotChangableForVmInPoolEntityModel<String>());
setBaseTemplate(new NotChangableForVmInPoolListModel<VmTemplate>());
+ getBaseTemplate().getSelectedItemChangedEvent().addListener(this);
setCdAttached(new NotChangableForVmInPoolEntityModel<Boolean>());
getCdAttached().getEntityChangedEvent().addListener(new
IEventListener() {
@@ -1508,6 +1510,9 @@
{
behavior.updateCpuSharesAmountChangeability();
}
+ else if (sender == getBaseTemplate()) {
+ behavior.baseTemplateSelectedItemChanged();
+ }
}
else if
(ev.matchesDefinition(EntityModel.entityChangedEventDefinition))
{
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UserPortalNewVmModelBehavior.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UserPortalNewVmModelBehavior.java
index ea61691..21b89f9 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UserPortalNewVmModelBehavior.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UserPortalNewVmModelBehavior.java
@@ -112,8 +112,10 @@
initCdImage();
}
- private void initTemplates(ArrayList<VmTemplate> templates)
+ private void initTemplates(List<VmTemplate> templates)
{
+ List<VmTemplate> rootTemplates = filterNotBaseTemplates(templates);
+
// Filter templates list (include only templates that belong to the
selected datacenter)
ArrayList<VmTemplate> templatesList = new ArrayList<VmTemplate>();
VmTemplate blankTemplate = null;
@@ -124,7 +126,7 @@
return;
}
- for (VmTemplate template : templates)
+ for (VmTemplate template : rootTemplates)
{
Guid datacenterId =
template.getStoragePoolId() == null ? Guid.Empty :
template.getStoragePoolId();
@@ -145,22 +147,21 @@
// Sort list and position "Blank" template as first
Collections.sort(templatesList, new NameableComparator());
- if (blankTemplate != null && templates.contains(blankTemplate))
+ if (blankTemplate != null && rootTemplates.contains(blankTemplate))
{
templatesList.add(0, blankTemplate);
}
- ArrayList<VmTemplate> filteredTemplates =
AsyncDataProvider.filterTemplatesByArchitecture(templatesList,
+ List<VmTemplate> filteredTemplates =
AsyncDataProvider.filterTemplatesByArchitecture(templatesList,
dataCenterWithCluster.getCluster().getArchitecture());
// If there was some template selected before, try select it again.
- VmTemplate oldTemplate = getModel().getTemplate().getSelectedItem();
+ VmTemplate prevBaseTemplate =
getModel().getBaseTemplate().getSelectedItem();
- getModel().getTemplate().setItems(filteredTemplates);
+ getModel().getBaseTemplate().setItems(filteredTemplates);
-
getModel().getTemplate().setSelectedItem(Linq.firstOrDefault(filteredTemplates,
- oldTemplate != null ? new
Linq.TemplatePredicate(oldTemplate.getId())
- : new Linq.TemplatePredicate(Guid.Empty)));
+
getModel().getBaseTemplate().setSelectedItem(Linq.firstOrDefault(filteredTemplates,
+ new Linq.TemplatePredicate(prevBaseTemplate != null ?
prevBaseTemplate.getId() : Guid.Empty)));
updateIsDisksAvailable();
}
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 cae17b1..e3fab96 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
@@ -91,6 +91,7 @@
public class VmListModel extends VmBaseListModel<VM> implements
ISupportSystemTreeContext {
+ private final UIConstants constants =
ConstantsManager.getInstance().getConstants();
public static final Version BALLOON_DEVICE_MIN_VERSION = Version.v3_2;
private UICommand newVMCommand;
@@ -2008,8 +2009,10 @@
VmListModel vmListModel = (VmListModel) model1;
UnitVmModel unitVmModel = (UnitVmModel)
vmListModel.getWindow();
- AddVmFromTemplateParameters param = new
AddVmFromTemplateParameters(
- vmListModel.getcurrentVm(),
+ VM vm = vmListModel.getcurrentVm();
+
vm.setUseLatestVersion(constants.latestTemplateVersionName().equals(unitVmModel.getTemplate().getSelectedItem().getTemplateVersionName()));
+
+ AddVmFromTemplateParameters param = new
AddVmFromTemplateParameters(vm,
unitVmModel.getDisksAllocationModel().getImageToDestinationDomainMap(),
Guid.Empty);
param.setSoundDeviceEnabled(model.getIsSoundcardEnabled().getEntity());
@@ -2032,7 +2035,10 @@
model.startProgress(null);
- VmManagementParametersBase params = new
VmManagementParametersBase(getcurrentVm());
+ VM vm = getcurrentVm();
+
vm.setUseLatestVersion(constants.latestTemplateVersionName().equals(model.getTemplate().getSelectedItem().getTemplateVersionName()));
+
+ VmManagementParametersBase params = new
VmManagementParametersBase(vm);
params.setDiskInfoDestinationMap(model.getDisksAllocationModel().getImageToDestinationDomainMap());
params.setConsoleEnabled(model.getIsConsoleDeviceEnabled().getEntity());
params.setBalloonEnabled(balloonEnabled(model));
@@ -2077,8 +2083,10 @@
VdcReturnValueBase returnValueBase =
result.getReturnValue();
if (returnValueBase != null &&
returnValueBase.getSucceeded())
{
- VmManagementParametersBase updateVmParams =
- new
VmManagementParametersBase(vmListModel.getcurrentVm());
+ VM vm = vmListModel.getcurrentVm();
+
vm.setUseLatestVersion(constants.latestTemplateVersionName().equals(model.getTemplate().getSelectedItem().getTemplateVersionName()));
+
+ VmManagementParametersBase updateVmParams
= new VmManagementParametersBase(vm);
setVmWatchdogToParams(model,
updateVmParams);
updateVmParams.setSoundDeviceEnabled(model.getIsSoundcardEnabled()
.getEntity());
@@ -2086,7 +2094,7 @@
updateVmParams.setVirtioScsiEnabled(model.getIsVirtioScsiEnabled().getEntity());
Frontend.getInstance().runAction(VdcActionType.UpdateVm,
- updateVmParams, new
UnitVmModelNetworkAsyncCallback(model, defaultNetworkCreatingManager,
vmListModel.getcurrentVm().getId()), vmListModel);
+ updateVmParams, new
UnitVmModelNetworkAsyncCallback(model, defaultNetworkCreatingManager,
vm.getId()), vmListModel);
}
else
{
@@ -2105,13 +2113,18 @@
}
model.startProgress(null);
- VmManagementParametersBase updateVmParams = new
VmManagementParametersBase(getcurrentVm());
+
+ VM vm = getcurrentVm();
+
vm.setUseLatestVersion(constants.latestTemplateVersionName().equals(model.getTemplate().getSelectedItem().getTemplateVersionName()));
+
+ VmManagementParametersBase updateVmParams = new
VmManagementParametersBase(vm);
setVmWatchdogToParams(model, updateVmParams);
updateVmParams.setSoundDeviceEnabled(model.getIsSoundcardEnabled().getEntity());
updateVmParams.setConsoleEnabled(model.getIsConsoleDeviceEnabled().getEntity());
updateVmParams.setBalloonEnabled(balloonEnabled(model));
updateVmParams.setVirtioScsiEnabled(model.getIsVirtioScsiEnabled().getEntity());
+
Frontend.getInstance().runAction(VdcActionType.UpdateVm,
updateVmParams, new UnitVmModelNetworkAsyncCallback(model,
defaultNetworkCreatingManager, getcurrentVm().getId()), this);
}
}
diff --git
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
index 5e1c98b..356e83d 100644
---
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
+++
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
@@ -2,7 +2,10 @@
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
import java.util.List;
import org.ovirt.engine.core.common.TimeZoneType;
@@ -18,7 +21,6 @@
import org.ovirt.engine.core.common.businessentities.StoragePool;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VDSGroup;
-import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VmBase;
import org.ovirt.engine.core.common.businessentities.VmTemplate;
import org.ovirt.engine.core.common.businessentities.VmType;
@@ -50,6 +52,7 @@
private final UIConstants constants =
ConstantsManager.getInstance().getConstants();
private TModel privateModel;
+ private HashMap<Guid, List<VmTemplate>> templateToSubVersions = new
HashMap<Guid, List<VmTemplate>>();
public TModel getModel() {
return privateModel;
@@ -123,19 +126,62 @@
}
- protected void postInitTemplate() {
-
- }
-
protected List<VmTemplate> filterNotBaseTemplates(List<VmTemplate>
templates) {
List<VmTemplate> baseTemplates = new ArrayList<VmTemplate>();
for (VmTemplate template : templates) {
if (template.getId().equals(template.getBaseTemplateId())) {
baseTemplates.add(template);
+ templateToSubVersions.put(template.getId(),
+ new ArrayList<VmTemplate>());
}
}
+ for (VmTemplate template : templates) {
+ Guid baseTemplateId = template.getBaseTemplateId();
+ if (templateToSubVersions.containsKey(baseTemplateId)) {
+ templateToSubVersions.get(baseTemplateId).add(template);
+ }
+ }
+
+ for (List<VmTemplate> subversions : (Collection<List<VmTemplate>>)
templateToSubVersions.values()) {
+ Collections.sort(subversions, new Comparator<VmTemplate>() {
+ @Override
+ public int compare(VmTemplate o1, VmTemplate o2) {
+ return o2.getTemplateVersionNumber() -
o1.getTemplateVersionNumber();
+ }
+ });
+ }
+
+ for (List<VmTemplate> subversions : templateToSubVersions.values()) {
+ subversions.add(0, createLatestTemplate(subversions.get(0)));
+ }
+
return baseTemplates;
+ }
+
+ /**
+ *
+ * @param template - the template that the latest template should be based
on
+ * @return template representing the latest template
+ */
+ private VmTemplate createLatestTemplate(VmTemplate template) {
+ VmTemplate latestTemplate = new VmTemplate(template);
+
latestTemplate.setTemplateVersionName(constants.latestTemplateVersionName());
+
latestTemplate.setDescription(constants.latestTemplateVersionDescription());
+
+ return latestTemplate;
+ }
+
+ protected void baseTemplateSelectedItemChanged() {
+ VmTemplate baseTemplate =
getModel().getBaseTemplate().getSelectedItem();
+ if (baseTemplate != null) {
+ List<VmTemplate> subVersions =
templateToSubVersions.get(baseTemplate.getId());
+ getModel().getTemplate().setItems(new
ArrayList<VmTemplate>(subVersions));
+
+ // it's safe because in index 0 there's the latest version and
+ // in index 1 the base version or the last custom version
+ getModel().getTemplate().setSelectedItem(subVersions.get(1));
+ }
}
public boolean validate()
@@ -739,7 +785,7 @@
getModel().getIsVirtioScsiEnabled().setIsAvailable(isVirtioScsiEnabled);
}
- protected void setupTemplate(VM vm, ListModel model) {
+ protected void setupTemplate(Guid templateId, final boolean useLatest) {
AsyncDataProvider.getTemplateById(new AsyncQuery(getModel(),
new INewAsyncCallback() {
@Override
@@ -747,15 +793,38 @@
UnitVmModel model = (UnitVmModel) target;
VmTemplate template = (VmTemplate) returnValue;
- model.getTemplate()
- .setItems(new
ArrayList<VmTemplate>(Arrays.asList(new VmTemplate[] { template })));
+
+ if (useLatest) {
+ template = createLatestTemplate(template);
+ }
+
+ setupBaseTemplate(template.getBaseTemplateId());
+
+
model.getTemplate().setItems(Collections.singletonList(template));
model.getTemplate().setSelectedItem(template);
model.getTemplate().setIsChangable(false);
- postInitTemplate();
}
},
getModel().getHash()),
- vm.getVmtGuid());
+ templateId);
+ }
+
+ protected void setupBaseTemplate(Guid baseTemplateId) {
+ AsyncDataProvider.getTemplateById(new AsyncQuery(getModel(),
+ new INewAsyncCallback() {
+ @Override
+ public void onSuccess(Object target, Object returnValue) {
+
+ UnitVmModel model = (UnitVmModel) target;
+ VmTemplate template = (VmTemplate) returnValue;
+
+
model.getBaseTemplate().setItems(Collections.singletonList(template));
+ model.getBaseTemplate().setSelectedItem(template);
+ model.getBaseTemplate().setIsChangable(false);
+ }
+ },
+ getModel().getHash()),
+ baseTemplateId);
}
protected void updateCpuPinningVisibility() {
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 2d101c5..66e6e58 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
@@ -2161,5 +2161,11 @@
@DefaultStringValue("No networks selected")
String noNetworksSelected();
+
+ @DefaultStringValue("<latest>")
+ String latestTemplateVersionName();
+
+ @DefaultStringValue("In case the vm is stateless, vm will be re-created
with the LATEST template version")
+ String latestTemplateVersionDescription();
}
--
To view, visit http://gerrit.ovirt.org/23613
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I26f3ddba7833dd257bc8a069a772ad192352d1a2
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.4
Gerrit-Owner: Omer Frenkel <[email protected]>
Gerrit-Reviewer: Arik Hadas <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches