Martin Betak has uploaded a new change for review. Change subject: engine: Refactoring of VmTemplateHandler editable fields ......................................................................
engine: Refactoring of VmTemplateHandler editable fields Introducing annotations EditableOnVm and EditableOnTemplate as a replacement for hard-coded list of field names in VmTemplateHandler, which was error-prone and difficult to maintain. New annotation behavior: @EditableField: describes that this VmBase field will be editable for both VMs and VmTemplates. @EditableOnVm: describes that this VmBase field will be editable for VMs. @EditableOnTemplate: describes that this VmBase field will be editable for VmTemplates. On the derived entities (VmStatic, VmTemplate) you can continue using plain @EditableField; these annotations were just added for disambiguation of those VmBase fields that are editable only for template of for specific VM status and template. Implementation: VmHandler includes into permitted fields those annotated with EditableField, EditableOnVm and EditableOnVmStatusField (see note). VmTemplateHandler includes into permitted fields those annotated with EditableField and EditableOnTemplate. note: EditableOnVmStatus behavior remains unchanged, so if you have for example field which is editable only when the VM status is down and for template use the following: @EditableOnVmStatusField @EditableOnTemplate private String timeZone; Change-Id: I2bd933e14310cf8f58280448a580ed761169f777 Signed-off-by: Martin Betak <mbe...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EditableOnTemplate.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EditableOnVm.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmTemplate.java 6 files changed, 62 insertions(+), 11 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/10/19410/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java index faa06e4..40962ad 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java @@ -19,6 +19,7 @@ import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DisplayType; import org.ovirt.engine.core.common.businessentities.EditableField; +import org.ovirt.engine.core.common.businessentities.EditableOnVm; import org.ovirt.engine.core.common.businessentities.EditableOnVmStatusField; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; @@ -90,6 +91,10 @@ mUpdateVmsStatic.AddPermittedFields(pair.getSecond()); } + for (Pair<EditableOnVm, String> pair : BaseHandler.extractAnnotatedFields(EditableOnVm.class, inspectedClassNames)) { + mUpdateVmsStatic.AddPermittedFields(pair.getSecond()); + } + for (Pair<EditableOnVmStatusField, String> pair : BaseHandler.extractAnnotatedFields(EditableOnVmStatusField.class, inspectedClassNames)) { mUpdateVmsStatic.AddField(Arrays.asList(pair.getFirst().statuses()), pair.getSecond()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java index 6e35ff8..5387c52 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateHandler.java @@ -3,10 +3,19 @@ import java.util.List; import org.ovirt.engine.core.bll.context.CompensationContext; +import org.ovirt.engine.core.common.backendinterfaces.BaseHandler; import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.EditableField; +import org.ovirt.engine.core.common.businessentities.EditableOnTemplate; +import org.ovirt.engine.core.common.businessentities.EditableOnVm; +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.VmBase; +import org.ovirt.engine.core.common.businessentities.VmDynamic; +import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.VmTemplateStatus; +import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.utils.ObjectIdentityChecker; @@ -27,17 +36,18 @@ * @see Backend#InitHandlers */ public static void Init() { + final Class<?>[] inspectedClassNames = new Class<?>[] { VmBase.class, VmTemplate.class }; mUpdateVmTemplate = new ObjectIdentityChecker(VmTemplateHandler.class); BlankVmTemplateId = new Guid("00000000-0000-0000-0000-000000000000"); - mUpdateVmTemplate.AddPermittedFields(new String[] { "name", "description", "comment", "domain", "osId", - "interfaces", "memSizeMb", "numOfSockets", "cpuPerSocket", - "vdsGroupId", "numOfMonitors", "allowConsoleReconnect", "usbPolicy", "timeZone", "diskMap", - "defaultBootSequence", "disabled", - "isoPath", "diskImageMap", "defaultDisplayType", "priority", "autoStartup", "stateless", - "initrdUrl", "kernelUrl", "kernelParams", "images", "interfaces", "quotaId", "quotaName", - "quotaEnforcementType", "migrationSupport", "dedicatedVmForVds", "smartcardEnabled","dbGeneration", "deleteProtected", - "quotaDefault", "tunnelMigration", "vncKeyboardLayout", "runAndPause", "singleQxlPci", "cpuShares", "vmType" - }); + + for (Pair<EditableField, String> pair : BaseHandler.extractAnnotatedFields(EditableField.class, + (inspectedClassNames))) { + mUpdateVmTemplate.AddPermittedFields(pair.getSecond()); + } + + for (Pair<EditableOnTemplate, String> pair : BaseHandler.extractAnnotatedFields(EditableOnTemplate.class, inspectedClassNames)) { + mUpdateVmTemplate.AddPermittedFields(pair.getSecond()); + } } public static boolean isUpdateValid(VmTemplate source, VmTemplate destination) { diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EditableOnTemplate.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EditableOnTemplate.java new file mode 100644 index 0000000..bdaf74b --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EditableOnTemplate.java @@ -0,0 +1,11 @@ +package org.ovirt.engine.core.common.businessentities; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface EditableOnTemplate { +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EditableOnVm.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EditableOnVm.java new file mode 100644 index 0000000..eb2c667 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/EditableOnVm.java @@ -0,0 +1,11 @@ +package org.ovirt.engine.core.common.businessentities; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface EditableOnVm { +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java index c1ca8cb..d93d9b6 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmBase.java @@ -44,12 +44,13 @@ private Guid id; @EditableOnVmStatusField + @EditableOnTemplate private Guid vdsGroupId; @EditableField private int osId; - @EditableField + @EditableOnVm private Date creationDate; @EditableField @@ -62,20 +63,25 @@ private String comment; @EditableOnVmStatusField + @EditableOnTemplate private int memSizeMb; @EditableOnVmStatusField + @EditableOnTemplate private int numOfSockets; @EditableOnVmStatusField + @EditableOnTemplate private int cpuPerSocket; @EditableOnVmStatusField + @EditableOnTemplate @IntegerContainedInConfigValueList(configValue = ConfigValues.ValidNumOfMonitors, message = "VALIDATION.VM.NUM_OF_MONITORS.EXCEEDED") private int numOfMonitors; @EditableOnVmStatusField + @EditableOnTemplate private boolean singleQxlPci; @EditableField @@ -83,6 +89,7 @@ private String domain; @EditableOnVmStatusField + @EditableOnTemplate @Size(max = BusinessEntitiesDefinitions.GENERAL_TIME_ZONE_SIZE) private String timeZone; @@ -90,6 +97,7 @@ private VmType vmType; @EditableOnVmStatusField + @EditableOnTemplate private UsbPolicy usbPolicy; private boolean failBack; @@ -101,6 +109,7 @@ private int niceLevel; @EditableOnVmStatusField + @EditableOnTemplate private int cpuShares; @EditableField @@ -122,6 +131,7 @@ private boolean smartcardEnabled; @EditableOnVmStatusField + @EditableOnTemplate @Size(max = BusinessEntitiesDefinitions.GENERAL_MAX_SIZE) private String isoPath; @@ -210,15 +220,17 @@ private Guid dedicatedVmForVds; @EditableOnVmStatusField + @EditableOnTemplate protected DisplayType defaultDisplayType; @EditableOnVmStatusField + @EditableOnTemplate @NullOrStringContainedInConfigValueList(configValue = ConfigValues.VncKeyboardLayoutValidValues, groups = { CreateEntity.class, UpdateEntity.class }, message = "VALIDATION.VM.INVALID_KEYBOARD_LAYOUT") private String vncKeyboardLayout; - @EditableField + @EditableOnVm private int minAllocatedMem; @EditableField diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmTemplate.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmTemplate.java index 2fcf93b..ea8a982 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmTemplate.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmTemplate.java @@ -31,6 +31,7 @@ private String storagePoolName; + @EditableField private HashMap<Guid, DiskImage> diskImageMap; private HashMap<Guid, DiskImage> diskTemplateMap; @@ -47,6 +48,7 @@ diskImageMap = new HashMap<Guid, DiskImage>(); } + @EditableField private boolean disabled; public VmTemplate(int childCount, Date creationDate, String description, int memSizeMb, String name, -- To view, visit http://gerrit.ovirt.org/19410 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I2bd933e14310cf8f58280448a580ed761169f777 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Martin Betak <mbe...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches