Jakub Niedermertl has uploaded a new change for review. Change subject: webadmin: Sync & Async builders ......................................................................
webadmin: Sync & Async builders Till now all Builders run synchronously. This patch does necessary refactoring for VmBase->Unit builders to run asynchronously. * VmModelBehaviorBase#buildModel and overriding methods have signature containing callback. * interface SyncBuilder and class CompositeSyncBuilder were introduced to mark synchronous builders. * static method BuilderList#build can now run only synchronous builders Change-Id: I10a94c3c59f5641a2661781c6dc227f572447468 Signed-off-by: Jakub Niedermertl <jnied...@redhat.com> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/BaseSyncBuilder.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/Builder.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/BuilderExecutor.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/CompositeSyncBuilder.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/SyncBuilder.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CommonUnitToVmBaseBuilder.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/FullUnitToVmBaseBuilder.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/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/VmModelBehaviorBase.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java M frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java 15 files changed, 185 insertions(+), 96 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/67/38067/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/BaseSyncBuilder.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/BaseSyncBuilder.java index aec8a1c..6777cc7 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/BaseSyncBuilder.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/BaseSyncBuilder.java @@ -7,7 +7,7 @@ * <p> * Use this only when the the descendant class does not do any async call. Otherwise implement the {@link Builder} directly */ -public abstract class BaseSyncBuilder<S, D> implements Builder<S, D> { +public abstract class BaseSyncBuilder<S, D> implements SyncBuilder<S, D> { @Override public void build(S source, D destination, BuilderList<S, D> rest) { diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/Builder.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/Builder.java index ece462d..894f5c9 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/Builder.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/Builder.java @@ -14,11 +14,4 @@ public interface Builder<S, D> { void build(S source, D destination, BuilderList<S, D> rest); - - /** - * Use this as a source when all the data are taken from server - */ - public static class VoidSource { - - } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/BuilderExecutor.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/BuilderExecutor.java index be33032..c8da725 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/BuilderExecutor.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/BuilderExecutor.java @@ -25,7 +25,7 @@ * Helper method that constructs the @{link BuilderExecutor} from given builders and immediately utilizes him * to perform build from <code>source</code> to <code>destination</code>. */ - public static <S, D> void build(S source, D destination, Builder<S, D>... builders) { + public static <S, D> void build(S source, D destination, SyncBuilder<S, D>... builders) { new BuilderExecutor<S, D>(builders).build(source, destination); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/CompositeSyncBuilder.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/CompositeSyncBuilder.java new file mode 100644 index 0000000..c0413a2 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/CompositeSyncBuilder.java @@ -0,0 +1,12 @@ +package org.ovirt.engine.ui.uicommonweb.builders; + +/** + * Equivalent of {@link CompositeBuilder} purely for synchronously running builders (i.e. descendants of + * {@link SyncBuilder}). + */ +public class CompositeSyncBuilder<S, D> extends CompositeBuilder<S, D> implements SyncBuilder<S, D> { + + public CompositeSyncBuilder(SyncBuilder<S, D>... builders) { + super(builders); + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/SyncBuilder.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/SyncBuilder.java new file mode 100644 index 0000000..b955f8f --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/SyncBuilder.java @@ -0,0 +1,9 @@ +package org.ovirt.engine.ui.uicommonweb.builders; + +/** + * Dummy interface to mark synchronous {@link Builder}s. + * @param <S> - source + * @param <D> - destination + */ +public interface SyncBuilder<S, D> extends Builder<S, D> { +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CommonUnitToVmBaseBuilder.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CommonUnitToVmBaseBuilder.java index 69e5551..1d658a5 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CommonUnitToVmBaseBuilder.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CommonUnitToVmBaseBuilder.java @@ -1,7 +1,7 @@ package org.ovirt.engine.ui.uicommonweb.builders.vm; import org.ovirt.engine.core.common.businessentities.VmBase; -import org.ovirt.engine.ui.uicommonweb.builders.CompositeBuilder; +import org.ovirt.engine.ui.uicommonweb.builders.CompositeSyncBuilder; import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; /** @@ -11,7 +11,7 @@ * This builder is further subsumed by {@link FullUnitToVmBaseBuilder} * that performs full mapping of VmBase fields. */ -public class CommonUnitToVmBaseBuilder<T extends VmBase> extends CompositeBuilder<UnitVmModel, T> { +public class CommonUnitToVmBaseBuilder<T extends VmBase> extends CompositeSyncBuilder<UnitVmModel, T> { public CommonUnitToVmBaseBuilder() { super( new CoreUnitToVmBaseBuilder(), diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/FullUnitToVmBaseBuilder.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/FullUnitToVmBaseBuilder.java index f89559a..8e7f242 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/FullUnitToVmBaseBuilder.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/FullUnitToVmBaseBuilder.java @@ -1,7 +1,7 @@ package org.ovirt.engine.ui.uicommonweb.builders.vm; import org.ovirt.engine.core.common.businessentities.VmBase; -import org.ovirt.engine.ui.uicommonweb.builders.CompositeBuilder; +import org.ovirt.engine.ui.uicommonweb.builders.CompositeSyncBuilder; import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; /** @@ -13,7 +13,7 @@ * or further yet in {@link CoreUnitToVmBaseBuilder} if this mapping should also apply to pool Vms. * (most fields fall into the "Core" category) */ -public class FullUnitToVmBaseBuilder<T extends VmBase> extends CompositeBuilder<UnitVmModel, T> { +public class FullUnitToVmBaseBuilder<T extends VmBase> extends CompositeSyncBuilder<UnitVmModel, T> { public FullUnitToVmBaseBuilder() { super( new CommonUnitToVmBaseBuilder(), 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 ea6291a..8c2f622 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 @@ -33,7 +33,7 @@ import org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.ExistingVmInstanceTypeManager; import org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.InstanceTypeManager; -public class ExistingVmModelBehavior extends VmModelBehaviorBase +public class ExistingVmModelBehavior extends VmModelBehaviorBase<UnitVmModel> { private InstanceTypeManager instanceTypeManager; @@ -152,7 +152,18 @@ // This method will be called even if a VM created from Blank template. // Update model state according to VM properties. - buildModel(vm.getStaticData()); + buildModel(vm.getStaticData(), new BuilderExecutor.BuilderExecutionFinished<VmBase, UnitVmModel>() { + @Override + public void finished(VmBase source, UnitVmModel destination) { + templateWithVersion_SelectedItemChangedCont(); + } + }); + } + + /** + * Asynchronous continuation of {@link #templateWithVersion_SelectedItemChanged()} + */ + public void templateWithVersion_SelectedItemChangedCont() { getModel().getIsStateless().setIsAvailable(vm.getVmPoolId() == null); @@ -197,11 +208,13 @@ } @Override - protected void buildModel(VmBase vm) { - BuilderExecutor.build(vm, getModel(), + protected void buildModel(VmBase vm, + BuilderExecutor.BuilderExecutionFinished<VmBase, UnitVmModel> callback) { + new BuilderExecutor<>(callback, new NameAndDescriptionVmBaseToUnitBuilder(), new CommentVmBaseToUnitBuilder(), - new CommonVmBaseToUnitBuilder()); + new CommonVmBaseToUnitBuilder()) + .build(vm, getModel()); } private void updateGraphics() { 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 141f6e5..3b4a1d2 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 @@ -297,11 +297,20 @@ { } - private void initTemplate() - { + private void initTemplate() { // Update model state according to VM properties. - buildModel(this.vm.getStaticData()); + buildModel(this.vm.getStaticData(), new BuilderExecutor.BuilderExecutionFinished<VmBase, UnitVmModel>() { + @Override + public void finished(VmBase source, UnitVmModel destination) { + initTemplateCont(); + } + }); + } + /** + * Asynchronous continuation of {@link #initTemplate()} + */ + private void initTemplateCont() { updateSelectedCdImage(this.vm.getStaticData()); updateTimeZone(this.vm.getTimeZone()); updateConsoleDevice(this.vm.getId()); @@ -319,8 +328,11 @@ } @Override - protected void buildModel(VmBase vm) { - BuilderExecutor.build(vm, getModel(), new CommonVmBaseToUnitBuilder()); + protected void buildModel(VmBase vmBase, + BuilderExecutor.BuilderExecutionFinished<VmBase, UnitVmModel> callback) { + new BuilderExecutor<>(callback, + new CommonVmBaseToUnitBuilder()) + .build(vmBase, getModel()); } @Override 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 23a75f7..1b6a63a 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 @@ -91,10 +91,20 @@ } } - private void selectedTemplateChanged(VmTemplate template) { + private void selectedTemplateChanged(final VmTemplate template) { // Copy VM parameters from template. - buildModel(template); + buildModel(template, new BuilderExecutor.BuilderExecutionFinished<VmBase, UnitVmModel>() { + @Override + public void finished(VmBase source, UnitVmModel destination) { + selectedTemplateChangedCont(template); + } + }); + } + /** + * Asynchronous continuation of {@link #selectedTemplateChanged(VmTemplate)}. + */ + private void selectedTemplateChangedCont(VmTemplate template) { setSelectedOSType(template, getModel().getSelectedCluster().getArchitecture()); doChangeDefautlHost(template.getDedicatedVmForVds()); @@ -154,8 +164,10 @@ } @Override - protected void buildModel(VmBase template) { - BuilderExecutor.build(template, getModel(), new CoreVmBaseToUnitBuilder()); + protected void buildModel(VmBase template, BuilderExecutor.BuilderExecutionFinished callback) { + new BuilderExecutor<>(callback, + new CoreVmBaseToUnitBuilder()) + .build(template, getModel()); } @Override 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 11f6282..d9b0291 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 @@ -104,68 +104,79 @@ protected abstract List<VDSGroup> filterClusters(List<VDSGroup> clusters); - protected void setupWindowModelFrom(VmBase vmBase) { + protected void setupWindowModelFrom(final VmBase vmBase) { if (vmBase != null) { updateQuotaByCluster(vmBase.getQuotaId(), vmBase.getQuotaName()); // Copy VM parameters from template. - buildModel(vmBase); + buildModel(vmBase, new BuilderExecutor.BuilderExecutionFinished<VmBase, UnitVmModel>() { + @Override + public void finished(VmBase source, UnitVmModel destination) { + setupWindowModelFromCont(vmBase); + } + }); + } + } - setSelectedOSType(vmBase, getModel().getSelectedCluster().getArchitecture()); - getModel().getVmType().setSelectedItem(vmBase.getVmType()); - getModel().getIsRunAndPause().setEntity(false); + /** + * Asynchronous continuation of {@link #setupWindowModelFrom(VmBase)} + */ + protected void setupWindowModelFromCont(VmBase vmBase) { + setSelectedOSType(vmBase, getModel().getSelectedCluster().getArchitecture()); + getModel().getVmType().setSelectedItem(vmBase.getVmType()); + getModel().getIsRunAndPause().setEntity(false); - boolean hasCd = !StringHelper.isNullOrEmpty(vmBase.getIsoPath()); + boolean hasCd = !StringHelper.isNullOrEmpty(vmBase.getIsoPath()); - getModel().getCdImage().setIsChangable(hasCd); - getModel().getCdAttached().setEntity(hasCd); - if (hasCd) { - getModel().getCdImage().setSelectedItem(vmBase.getIsoPath()); - } + getModel().getCdImage().setIsChangable(hasCd); + getModel().getCdAttached().setEntity(hasCd); + if (hasCd) { + getModel().getCdImage().setSelectedItem(vmBase.getIsoPath()); + } - updateTimeZone(vmBase.getTimeZone()); + updateTimeZone(vmBase.getTimeZone()); - if (!vmBase.getId().equals(Guid.Empty)) - { - getModel().getStorageDomain().setIsChangable(true); + if (!vmBase.getId().equals(Guid.Empty)) + { + getModel().getStorageDomain().setIsChangable(true); - initDisks(); - } - else - { - getModel().getStorageDomain().setIsChangable(false); + initDisks(); + } + else + { + getModel().getStorageDomain().setIsChangable(false); - getModel().setIsDisksAvailable(false); - getModel().setDisks(null); - } + getModel().setIsDisksAvailable(false); + getModel().setDisks(null); + } - getModel().getProvisioning().setEntity(false); + getModel().getProvisioning().setEntity(false); - initStorageDomains(); + initStorageDomains(); - InstanceType selectedInstanceType = getModel().getInstanceTypes().getSelectedItem(); - int instanceTypeMinAllocatedMemory = selectedInstanceType != null ? selectedInstanceType.getMinAllocatedMem() : 0; + InstanceType selectedInstanceType = getModel().getInstanceTypes().getSelectedItem(); + int instanceTypeMinAllocatedMemory = selectedInstanceType != null ? selectedInstanceType.getMinAllocatedMem() : 0; - // do not update if specified on template or instance type - if (vmBase.getMinAllocatedMem() == 0 && instanceTypeMinAllocatedMemory == 0) { - updateMinAllocatedMemory(); - } + // do not update if specified on template or instance type + if (vmBase.getMinAllocatedMem() == 0 && instanceTypeMinAllocatedMemory == 0) { + updateMinAllocatedMemory(); + } - getModel().getAllowConsoleReconnect().setEntity(vmBase.isAllowConsoleReconnect()); + getModel().getAllowConsoleReconnect().setEntity(vmBase.isAllowConsoleReconnect()); - getModel().getVmInitModel().init(vmBase); - getModel().getVmInitEnabled().setEntity(vmBase.getVmInit() != null); + getModel().getVmInitModel().init(vmBase); + getModel().getVmInitEnabled().setEntity(vmBase.getVmInit() != null); - if (getModel().getSelectedCluster() != null) { - updateCpuProfile(getModel().getSelectedCluster().getId(), - getClusterCompatibilityVersion(), vmBase.getCpuProfileId()); - } + if (getModel().getSelectedCluster() != null) { + updateCpuProfile(getModel().getSelectedCluster().getId(), + getClusterCompatibilityVersion(), vmBase.getCpuProfileId()); } } @Override - protected void buildModel(VmBase vmBase) { - BuilderExecutor.build(vmBase, getModel(), new CoreVmBaseToUnitBuilder()); + protected void buildModel(VmBase vmBase, BuilderExecutor.BuilderExecutionFinished<VmBase, UnitVmModel> callback) { + new BuilderExecutor<>(callback, new CoreVmBaseToUnitBuilder()) + .build(vmBase, getModel()); } @Override 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 c96c2ba..0918dc1 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 @@ -23,7 +23,7 @@ import java.util.Collections; import java.util.List; -public class TemplateVmModelBehavior extends VmModelBehaviorBase +public class TemplateVmModelBehavior extends VmModelBehaviorBase<UnitVmModel> { private VmTemplate template; @@ -181,18 +181,28 @@ doChangeDefautlHost(template.getDedicatedVmForVds()); } - public void buildModel(VmBase vm) { - BuilderExecutor.build(vm, getModel(), - new NameAndDescriptionVmBaseToUnitBuilder(), - new CommentVmBaseToUnitBuilder(), - new CommonVmBaseToUnitBuilder()); + public void buildModel(VmBase vmBase, BuilderExecutor.BuilderExecutionFinished<VmBase, UnitVmModel> callback) { + new BuilderExecutor<>(callback, + new NameAndDescriptionVmBaseToUnitBuilder(), + new CommentVmBaseToUnitBuilder(), + new CommonVmBaseToUnitBuilder()) + .build(vmBase, getModel()); } - private void initTemplate() - { + private void initTemplate() { // Update model state according to VM properties. - buildModel(template); + buildModel(template, new BuilderExecutor.BuilderExecutionFinished<VmBase, UnitVmModel>() { + @Override + public void finished(VmBase source, UnitVmModel destination) { + initTemplateCont(); + } + }); + } + /** + * Asynchronous continuation of {@link #initTemplateWithVersion(List)} + */ + private void initTemplateCont() { getModel().getMinAllocatedMemory().setIsChangable(false); updateTimeZone(template.getTimeZone()); 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 f3a94de..e2b6323 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 @@ -44,6 +44,7 @@ import org.ovirt.engine.ui.frontend.AsyncQuery; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.frontend.INewAsyncCallback; +import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor; import org.ovirt.engine.ui.uicommonweb.models.templates.LatestVmTemplate; import org.ovirt.engine.ui.uicommonweb.Linq; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; @@ -173,7 +174,8 @@ getModel().getDefaultHost().setIsChangable(!isLocalSD); } - protected void buildModel(VmBase vmBase) { + protected void buildModel(VmBase vmBase, + BuilderExecutor.BuilderExecutionFinished<VmBase, UnitVmModel> callback) { } public void templateWithVersion_SelectedItemChanged() {} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java index 3c9611c..c727ee2 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java @@ -49,28 +49,38 @@ getModel().getIsSoundcardEnabled().setIsChangable(true); Frontend.getInstance().runQuery(VdcQueryType.GetGraphicsDevices, new IdQueryParameters(instanceType.getId()), new AsyncQuery( - this, - new INewAsyncCallback() { - @Override - public void onSuccess(Object model, Object returnValue) { - List<GraphicsDevice> graphicsDevices = ((VdcQueryReturnValue) returnValue).getReturnValue(); - Collection<GraphicsType> graphicsTypesCollection = new HashSet<GraphicsType>(); + this, + new INewAsyncCallback() { + @Override + public void onSuccess(Object model, Object returnValue) { + List<GraphicsDevice> graphicsDevices = ((VdcQueryReturnValue) returnValue).getReturnValue(); + Collection<GraphicsType> graphicsTypesCollection = new HashSet<GraphicsType>(); - for (GraphicsDevice graphicsDevice : graphicsDevices) { - graphicsTypesCollection.add(graphicsDevice.getGraphicsType()); + for (GraphicsDevice graphicsDevice : graphicsDevices) { + graphicsTypesCollection.add(graphicsDevice.getGraphicsType()); + } + + initDisplayTypes(instanceType.getDefaultDisplayType(), UnitVmModel.GraphicsTypes.fromGraphicsTypes(graphicsTypesCollection)); } - - initDisplayTypes(instanceType.getDefaultDisplayType(), UnitVmModel.GraphicsTypes.fromGraphicsTypes(graphicsTypesCollection)); } - } )); initSoundCard(instanceType.getId()); updateConsoleDevice(instanceType.getId()); initPriority(instanceType.getPriority()); - buildModel((VmBase) instanceType); + buildModel((VmBase) instanceType, new BuilderExecutor.BuilderExecutionFinished<VmBase, UnitVmModel>() { + @Override + public void finished(VmBase source, UnitVmModel destination) { + initializeCont(); + } + }); + } + /** + * Asynchronous continuation of {@link #initialize(SystemTreeItemModel} + */ + public void initializeCont() { Frontend.getInstance().runQuery(VdcQueryType.IsBalloonEnabled, new IdQueryParameters(instanceType.getId()), new AsyncQuery(this, new INewAsyncCallback() { @Override @@ -142,10 +152,11 @@ } @Override - protected void buildModel(VmBase vm) { - BuilderExecutor.build(vm, getModel(), + protected void buildModel(VmBase vmBase, BuilderExecutor.BuilderExecutionFinished<VmBase, UnitVmModel> callback) { + new BuilderExecutor<>(callback, new NameAndDescriptionVmBaseToUnitBuilder(), - new HwOnlyVmBaseToUnitBuilder()); + new HwOnlyVmBaseToUnitBuilder()) + .build(vmBase, getModel()); } protected void initSoundCard(Guid id) { diff --git a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java index bfeded4..7935556 100644 --- a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java +++ b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java @@ -10,6 +10,7 @@ import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VmBase; import org.ovirt.engine.core.compat.Version; +import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; public abstract class BaseVmModelBehaviorTest extends BaseVmTest { @@ -55,10 +56,13 @@ @Test public void testBuildModel() { VmModelBehaviorBase behavior = getBehavior(); - UnitVmModel model = createModel(behavior); - behavior.buildModel(getVm()); - - verifyBuiltModel(model); + final UnitVmModel model = createModel(behavior); + behavior.buildModel(getVm(), new BuilderExecutor.BuilderExecutionFinished<VmBase, UnitVmModel>() { + @Override + public void finished(VmBase source, UnitVmModel destination) { + verifyBuiltModel(model); + } + }); } protected abstract VmBase getVm(); -- To view, visit http://gerrit.ovirt.org/38067 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I10a94c3c59f5641a2661781c6dc227f572447468 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Jakub Niedermertl <jnied...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches