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

Reply via email to