This is an automated email from the ASF dual-hosted git repository.

fabricio pushed a commit to branch fix-preset-variable-injection
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit a0ffad20935d05aa1c2ea722f2abd9b970782c03
Author: Fabricio Duarte <[email protected]>
AuthorDate: Sun Jan 25 18:17:30 2026 -0300

    Fix injection of preset variables into the JS interpreter
---
 .../apache/cloudstack/quota/QuotaManagerImpl.java  |  12 +-
 .../activationrule/presetvariables/Account.java    |   1 -
 .../presetvariables/BackupOffering.java            |   1 -
 .../presetvariables/ComputeOffering.java           |   1 -
 .../activationrule/presetvariables/Domain.java     |   1 -
 .../presetvariables/GenericPresetVariable.java     |  18 +--
 .../quota/activationrule/presetvariables/Host.java |   2 -
 .../presetvariables/PresetVariableHelper.java      |  10 +-
 .../quota/activationrule/presetvariables/Role.java |   9 +-
 .../activationrule/presetvariables/Storage.java    |  11 +-
 .../activationrule/presetvariables/Tariff.java     |   1 -
 .../activationrule/presetvariables/Value.java      |  40 ++---
 .../cloudstack/quota/QuotaManagerImplTest.java     |  24 +--
 .../presetvariables/AccountTest.java               |  34 ----
 .../presetvariables/BackupOfferingTest.java        |  36 -----
 .../presetvariables/ComputeOfferingTest.java       |  35 -----
 .../presetvariables/ComputingResourcesTest.java    |  40 -----
 .../activationrule/presetvariables/DomainTest.java |  35 -----
 .../presetvariables/GenericPresetVariableTest.java |  73 ---------
 .../activationrule/presetvariables/HostTest.java   |  34 ----
 .../presetvariables/PresetVariableHelperTest.java  |  68 ++------
 .../presetvariables/ResourceTest.java              |  40 -----
 .../activationrule/presetvariables/RoleTest.java   |  34 ----
 .../presetvariables/StorageTest.java               |  41 -----
 .../activationrule/presetvariables/ValueTest.java  | 175 ---------------------
 .../storage/heuristics/HeuristicRuleHelper.java    |  20 +--
 .../heuristics/presetvariables/Account.java        |   2 -
 .../storage/heuristics/presetvariables/Domain.java |   1 -
 .../GenericHeuristicPresetVariable.java            |  17 +-
 .../presetvariables/SecondaryStorage.java          |   4 -
 .../heuristics/presetvariables/Snapshot.java       |  10 +-
 .../heuristics/presetvariables/Template.java       |  24 ++-
 .../storage/heuristics/presetvariables/Volume.java |  10 +-
 .../heuristics/presetvariables/AccountTest.java    |  46 ------
 .../heuristics/presetvariables/DomainTest.java     |  41 -----
 .../GenericHeuristicPresetVariableTest.java        |  40 -----
 .../presetvariables/SecondaryStorageTest.java      |  45 ------
 .../heuristics/presetvariables/SnapshotTest.java   |  44 ------
 .../heuristics/presetvariables/TemplateTest.java   |  46 ------
 .../heuristics/presetvariables/VolumeTest.java     |  44 ------
 .../utils/jsinterpreter/JsInterpreter.java         |  31 ++--
 .../utils/jsinterpreter/TagAsRuleHelper.java       |  21 ++-
 .../utils/jsinterpreter/JsInterpreterTest.java     |  18 ---
 43 files changed, 105 insertions(+), 1135 deletions(-)

diff --git 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManagerImpl.java
 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManagerImpl.java
index 99181f80c29..7c3eaead63f 100644
--- 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManagerImpl.java
+++ 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/QuotaManagerImpl.java
@@ -428,7 +428,7 @@ public class QuotaManagerImpl extends ManagerBase 
implements QuotaManager {
         }
 
         injectPresetVariablesIntoJsInterpreter(jsInterpreter, presetVariables);
-        jsInterpreter.injectVariable("lastTariffs", 
lastAppliedTariffsList.toString());
+        jsInterpreter.injectVariable("lastTariffs", lastAppliedTariffsList);
 
         String scriptResult = 
jsInterpreter.executeScript(activationRule).toString();
 
@@ -458,18 +458,18 @@ public class QuotaManagerImpl extends ManagerBase 
implements QuotaManager {
     protected void injectPresetVariablesIntoJsInterpreter(JsInterpreter 
jsInterpreter, PresetVariables presetVariables) {
         jsInterpreter.discardCurrentVariables();
 
-        jsInterpreter.injectVariable("account", 
presetVariables.getAccount().toString());
-        jsInterpreter.injectVariable("domain", 
presetVariables.getDomain().toString());
+        jsInterpreter.injectVariable("account", presetVariables.getAccount());
+        jsInterpreter.injectVariable("domain", presetVariables.getDomain());
 
         GenericPresetVariable project = presetVariables.getProject();
         if (project != null) {
-            jsInterpreter.injectVariable("project", project.toString());
+            jsInterpreter.injectVariable("project", project);
 
         }
 
         jsInterpreter.injectVariable("resourceType", 
presetVariables.getResourceType());
-        jsInterpreter.injectVariable("value", 
presetVariables.getValue().toString());
-        jsInterpreter.injectVariable("zone", 
presetVariables.getZone().toString());
+        jsInterpreter.injectVariable("value", presetVariables.getValue());
+        jsInterpreter.injectVariable("zone", presetVariables.getZone());
     }
 
     /**
diff --git 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Account.java
 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Account.java
index 37c90ab0bcd..289958fe447 100644
--- 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Account.java
+++ 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Account.java
@@ -28,7 +28,6 @@ public class Account extends GenericPresetVariable {
 
     public void setRole(Role role) {
         this.role = role;
-        fieldNamesToIncludeInToString.add("role");
     }
 
 }
diff --git 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/BackupOffering.java
 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/BackupOffering.java
index d8457d294ec..e3927d967f7 100644
--- 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/BackupOffering.java
+++ 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/BackupOffering.java
@@ -29,6 +29,5 @@ public class BackupOffering extends GenericPresetVariable {
 
     public void setExternalId(String externalId) {
         this.externalId = externalId;
-        fieldNamesToIncludeInToString.add("externalId");
     }
 }
diff --git 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/ComputeOffering.java
 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/ComputeOffering.java
index 1d294276d47..9f9575052d3 100644
--- 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/ComputeOffering.java
+++ 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/ComputeOffering.java
@@ -27,7 +27,6 @@ public class ComputeOffering extends GenericPresetVariable {
 
     public void setCustomized(boolean customized) {
         this.customized = customized;
-        fieldNamesToIncludeInToString.add("customized");
     }
 
 }
diff --git 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Domain.java
 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Domain.java
index 6d83da4cd8f..cbdfa3e4bb4 100644
--- 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Domain.java
+++ 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Domain.java
@@ -27,7 +27,6 @@ public class Domain extends GenericPresetVariable {
 
     public void setPath(String path) {
         this.path = path;
-        fieldNamesToIncludeInToString.add("path");
     }
 
 }
diff --git 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/GenericPresetVariable.java
 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/GenericPresetVariable.java
index 7073d2760d7..4db099ca479 100644
--- 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/GenericPresetVariable.java
+++ 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/GenericPresetVariable.java
@@ -17,10 +17,8 @@
 
 package org.apache.cloudstack.quota.activationrule.presetvariables;
 
-import java.util.HashSet;
-import java.util.Set;
-
-import 
org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
 
 public class GenericPresetVariable {
     @PresetVariableDefinition(description = "ID of the resource.")
@@ -29,15 +27,12 @@ public class GenericPresetVariable {
     @PresetVariableDefinition(description = "Name of the resource.")
     private String name;
 
-    protected transient Set<String> fieldNamesToIncludeInToString = new 
HashSet<>();
-
     public String getId() {
         return id;
     }
 
     public void setId(String id) {
         this.id = id;
-        fieldNamesToIncludeInToString.add("id");
     }
 
     public String getName() {
@@ -46,15 +41,10 @@ public class GenericPresetVariable {
 
     public void setName(String name) {
         this.name = name;
-        fieldNamesToIncludeInToString.add("name");
     }
 
-    /***
-     * Converts the preset variable into a valid JSON object that will be 
injected into the JS interpreter.
-     * This method should not be overridden or changed.
-     */
     @Override
-    public final String toString() {
-        return ReflectionToStringBuilderUtils.reflectOnlySelectedFields(this, 
fieldNamesToIncludeInToString.toArray(new String[0]));
+    public String toString() {
+        return ToStringBuilder.reflectionToString(this, 
ToStringStyle.JSON_STYLE);
     }
 }
diff --git 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Host.java
 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Host.java
index 4a0fd2f5a07..6d54a143834 100644
--- 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Host.java
+++ 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Host.java
@@ -32,7 +32,6 @@ public class Host extends GenericPresetVariable {
 
     public void setTags(List<String> tags) {
         this.tags = tags;
-        fieldNamesToIncludeInToString.add("tags");
     }
 
     public Boolean getIsTagARule() {
@@ -41,6 +40,5 @@ public class Host extends GenericPresetVariable {
 
     public void setIsTagARule(Boolean isTagARule) {
         this.isTagARule = isTagARule;
-        fieldNamesToIncludeInToString.add("isTagARule");
     }
 }
diff --git 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/PresetVariableHelper.java
 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/PresetVariableHelper.java
index d5df3ae8a91..918cf78b4e6 100644
--- 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/PresetVariableHelper.java
+++ 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/PresetVariableHelper.java
@@ -243,7 +243,7 @@ public class PresetVariableHelper {
         Role role = new Role();
         role.setId(roleVo.getUuid());
         role.setName(roleVo.getName());
-        role.setType(roleVo.getRoleType());
+        role.setType(roleVo.getRoleType().toString());
 
         return role;
     }
@@ -490,7 +490,7 @@ public class PresetVariableHelper {
         
value.setDiskOffering(getPresetVariableValueDiskOffering(volumeVo.getDiskOfferingId()));
         value.setId(volumeVo.getUuid());
         value.setName(volumeVo.getName());
-        value.setProvisioningType(volumeVo.getProvisioningType());
+        value.setProvisioningType(volumeVo.getProvisioningType().toString());
 
         Long poolId = volumeVo.getPoolId();
         if (poolId == null) {
@@ -533,7 +533,7 @@ public class PresetVariableHelper {
         storage = new Storage();
         storage.setId(storagePoolVo.getUuid());
         storage.setName(storagePoolVo.getName());
-        storage.setScope(storagePoolVo.getScope());
+        storage.setScope(storagePoolVo.getScope().toString());
         List<StoragePoolTagVO> storagePoolTagVOList = 
storagePoolTagsDao.findStoragePoolTags(storageId);
         List<String> storageTags = new ArrayList<>();
         boolean isTagARule = false;
@@ -602,7 +602,7 @@ public class PresetVariableHelper {
         value.setId(snapshotVo.getUuid());
         value.setName(snapshotVo.getName());
         value.setSize(ByteScaleUtils.bytesToMebibytes(snapshotVo.getSize()));
-        
value.setSnapshotType(Snapshot.Type.values()[snapshotVo.getSnapshotType()]);
+        
value.setSnapshotType(Snapshot.Type.values()[snapshotVo.getSnapshotType()].toString());
         
value.setStorage(getPresetVariableValueStorage(getSnapshotDataStoreId(snapshotId,
 usageRecord.getZoneId()), usageType));
         value.setTags(getPresetVariableValueResourceTags(snapshotId, 
ResourceObjectType.Snapshot));
         Hypervisor.HypervisorType hypervisorType = 
snapshotVo.getHypervisorType();
@@ -671,7 +671,7 @@ public class PresetVariableHelper {
         value.setId(vmSnapshotVo.getUuid());
         value.setName(vmSnapshotVo.getName());
         value.setTags(getPresetVariableValueResourceTags(vmSnapshotId, 
ResourceObjectType.VMSnapshot));
-        value.setVmSnapshotType(vmSnapshotVo.getType());
+        value.setVmSnapshotType(vmSnapshotVo.getType().toString());
 
         VMInstanceVO vmVo = 
vmInstanceDao.findByIdIncludingRemoved(vmSnapshotVo.getVmId());
         if (vmVo != null && vmVo.getHypervisorType() != null) {
diff --git 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Role.java
 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Role.java
index 3f953b3a4ff..3c61786cb0a 100644
--- 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Role.java
+++ 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Role.java
@@ -17,19 +17,16 @@
 
 package org.apache.cloudstack.quota.activationrule.presetvariables;
 
-import org.apache.cloudstack.acl.RoleType;
-
 public class Role extends GenericPresetVariable {
     @PresetVariableDefinition(description = "Role type of the resource's 
owner.")
-    private RoleType type;
+    private String type;
 
-    public RoleType getType() {
+    public String getType() {
         return type;
     }
 
-    public void setType(RoleType type) {
+    public void setType(String type) {
         this.type = type;
-        fieldNamesToIncludeInToString.add("type");
     }
 
 }
diff --git 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Storage.java
 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Storage.java
index 9b6cfb31092..8ddae82f383 100644
--- 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Storage.java
+++ 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Storage.java
@@ -19,8 +19,6 @@ package 
org.apache.cloudstack.quota.activationrule.presetvariables;
 
 import java.util.List;
 
-import com.cloud.storage.ScopeType;
-
 public class Storage extends GenericPresetVariable {
     @PresetVariableDefinition(description = "List of string representing the 
tags of the storage where the volume is (i.e.: [\"a\", \"b\"]).")
     private List<String> tags;
@@ -29,7 +27,7 @@ public class Storage extends GenericPresetVariable {
     private Boolean isTagARule;
 
     @PresetVariableDefinition(description = "Scope of the storage where the 
volume is. Values can be: ZONE, CLUSTER or HOST. Applicable only for primary 
storages.")
-    private ScopeType scope;
+    private String scope;
 
     public List<String> getTags() {
         return tags;
@@ -37,7 +35,6 @@ public class Storage extends GenericPresetVariable {
 
     public void setTags(List<String> tags) {
         this.tags = tags;
-        fieldNamesToIncludeInToString.add("tags");
     }
 
     public Boolean getIsTagARule() {
@@ -46,16 +43,14 @@ public class Storage extends GenericPresetVariable {
 
     public void setIsTagARule(Boolean isTagARule) {
         this.isTagARule = isTagARule;
-        fieldNamesToIncludeInToString.add("isTagARule");
     }
 
-    public ScopeType getScope() {
+    public String getScope() {
         return scope;
     }
 
-    public void setScope(ScopeType scope) {
+    public void setScope(String scope) {
         this.scope = scope;
-        fieldNamesToIncludeInToString.add("scope");
     }
 
 }
diff --git 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Tariff.java
 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Tariff.java
index 3703820a1a4..9414908b3a2 100644
--- 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Tariff.java
+++ 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Tariff.java
@@ -28,6 +28,5 @@ public class Tariff extends GenericPresetVariable {
 
     public void setValue(BigDecimal value) {
         this.value = value;
-        fieldNamesToIncludeInToString.add("value");
     }
 }
diff --git 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Value.java
 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Value.java
index d87146d8798..98f9c2678a8 100644
--- 
a/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Value.java
+++ 
b/framework/quota/src/main/java/org/apache/cloudstack/quota/activationrule/presetvariables/Value.java
@@ -20,9 +20,6 @@ package 
org.apache.cloudstack.quota.activationrule.presetvariables;
 import java.util.List;
 import java.util.Map;
 
-import com.cloud.storage.Snapshot;
-import com.cloud.storage.Storage.ProvisioningType;
-import com.cloud.vm.snapshot.VMSnapshot;
 import org.apache.cloudstack.quota.constant.QuotaTypes;
 
 public class Value extends GenericPresetVariable {
@@ -60,13 +57,13 @@ public class Value extends GenericPresetVariable {
     private Long virtualSize;
 
     @PresetVariableDefinition(description = "Provisioning type of the 
resource. Values can be: thin, sparse or fat.", supportedTypes = 
{QuotaTypes.VOLUME})
-    private ProvisioningType provisioningType;
+    private String provisioningType;
 
     @PresetVariableDefinition(description = "Type of the snapshot. Values can 
be: MANUAL, RECURRING, HOURLY, DAILY, WEEKLY and MONTHLY.", supportedTypes = 
{QuotaTypes.SNAPSHOT})
-    private Snapshot.Type snapshotType;
+    private String snapshotType;
 
     @PresetVariableDefinition(description = "Type of the VM snapshot. Values 
can be: Disk or DiskAndMemory.", supportedTypes = {QuotaTypes.VM_SNAPSHOT})
-    private VMSnapshot.Type vmSnapshotType;
+    private String vmSnapshotType;
 
     @PresetVariableDefinition(description = "Computing offering of the VM.", 
supportedTypes = {QuotaTypes.RUNNING_VM, QuotaTypes.ALLOCATED_VM})
     private ComputeOffering computeOffering;
@@ -101,7 +98,6 @@ public class Value extends GenericPresetVariable {
 
     public void setHost(Host host) {
         this.host = host;
-        fieldNamesToIncludeInToString.add("host");
     }
 
     public String getOsName() {
@@ -110,7 +106,6 @@ public class Value extends GenericPresetVariable {
 
     public void setOsName(String osName) {
         this.osName = osName;
-        fieldNamesToIncludeInToString.add("osName");
     }
 
     public List<Resource> getAccountResources() {
@@ -119,7 +114,6 @@ public class Value extends GenericPresetVariable {
 
     public void setAccountResources(List<Resource> accountResources) {
         this.accountResources = accountResources;
-        fieldNamesToIncludeInToString.add("accountResources");
     }
 
     public Map<String, String> getTags() {
@@ -128,7 +122,6 @@ public class Value extends GenericPresetVariable {
 
     public void setTags(Map<String, String> tags) {
         this.tags = tags;
-        fieldNamesToIncludeInToString.add("tags");
     }
 
     public String getTag() {
@@ -137,7 +130,6 @@ public class Value extends GenericPresetVariable {
 
     public void setTag(String tag) {
         this.tag = tag;
-        fieldNamesToIncludeInToString.add("tag");
     }
 
     public Long getSize() {
@@ -146,34 +138,30 @@ public class Value extends GenericPresetVariable {
 
     public void setSize(Long size) {
         this.size = size;
-        fieldNamesToIncludeInToString.add("size");
     }
 
-    public ProvisioningType getProvisioningType() {
+    public String getProvisioningType() {
         return provisioningType;
     }
 
-    public void setProvisioningType(ProvisioningType provisioningType) {
+    public void setProvisioningType(String provisioningType) {
         this.provisioningType = provisioningType;
-        fieldNamesToIncludeInToString.add("provisioningType");
     }
 
-    public Snapshot.Type getSnapshotType() {
+    public String getSnapshotType() {
         return snapshotType;
     }
 
-    public void setSnapshotType(Snapshot.Type snapshotType) {
+    public void setSnapshotType(String snapshotType) {
         this.snapshotType = snapshotType;
-        fieldNamesToIncludeInToString.add("snapshotType");
     }
 
-    public VMSnapshot.Type getVmSnapshotType() {
+    public String getVmSnapshotType() {
         return vmSnapshotType;
     }
 
-    public void setVmSnapshotType(VMSnapshot.Type vmSnapshotType) {
+    public void setVmSnapshotType(String vmSnapshotType) {
         this.vmSnapshotType = vmSnapshotType;
-        fieldNamesToIncludeInToString.add("vmSnapshotType");
     }
 
     public ComputeOffering getComputeOffering() {
@@ -182,7 +170,6 @@ public class Value extends GenericPresetVariable {
 
     public void setComputeOffering(ComputeOffering computeOffering) {
         this.computeOffering = computeOffering;
-        fieldNamesToIncludeInToString.add("computeOffering");
     }
 
     public GenericPresetVariable getTemplate() {
@@ -191,7 +178,6 @@ public class Value extends GenericPresetVariable {
 
     public void setTemplate(GenericPresetVariable template) {
         this.template = template;
-        fieldNamesToIncludeInToString.add("template");
     }
 
     public GenericPresetVariable getDiskOffering() {
@@ -200,7 +186,6 @@ public class Value extends GenericPresetVariable {
 
     public void setDiskOffering(GenericPresetVariable diskOffering) {
         this.diskOffering = diskOffering;
-        fieldNamesToIncludeInToString.add("diskOffering");
     }
 
     public Storage getStorage() {
@@ -209,7 +194,6 @@ public class Value extends GenericPresetVariable {
 
     public void setStorage(Storage storage) {
         this.storage = storage;
-        fieldNamesToIncludeInToString.add("storage");
     }
 
     public ComputingResources getComputingResources() {
@@ -218,7 +202,6 @@ public class Value extends GenericPresetVariable {
 
     public void setComputingResources(ComputingResources computingResources) {
         this.computingResources = computingResources;
-        fieldNamesToIncludeInToString.add("computingResources");
     }
 
     public Long getVirtualSize() {
@@ -227,7 +210,6 @@ public class Value extends GenericPresetVariable {
 
     public void setVirtualSize(Long virtualSize) {
         this.virtualSize = virtualSize;
-        fieldNamesToIncludeInToString.add("virtualSize");
     }
 
     public BackupOffering getBackupOffering() {
@@ -236,12 +218,10 @@ public class Value extends GenericPresetVariable {
 
     public void setBackupOffering(BackupOffering backupOffering) {
         this.backupOffering = backupOffering;
-        fieldNamesToIncludeInToString.add("backupOffering");
     }
 
     public void setHypervisorType(String hypervisorType) {
         this.hypervisorType = hypervisorType;
-        fieldNamesToIncludeInToString.add("hypervisorType");
     }
 
     public String getHypervisorType() {
@@ -250,7 +230,6 @@ public class Value extends GenericPresetVariable {
 
     public void setVolumeFormat(String volumeFormat) {
         this.volumeFormat = volumeFormat;
-        fieldNamesToIncludeInToString.add("volumeFormat");
     }
 
     public String getVolumeFormat() {
@@ -263,6 +242,5 @@ public class Value extends GenericPresetVariable {
 
     public void setState(String state) {
         this.state = state;
-        fieldNamesToIncludeInToString.add("state");
     }
 }
diff --git 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/QuotaManagerImplTest.java
 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/QuotaManagerImplTest.java
index 3b2ea54e86d..a33faa054de 100644
--- 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/QuotaManagerImplTest.java
+++ 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/QuotaManagerImplTest.java
@@ -267,12 +267,12 @@ public class QuotaManagerImplTest {
 
         
quotaManagerImplSpy.injectPresetVariablesIntoJsInterpreter(jsInterpreterMock, 
presetVariablesMock);
 
-        
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("account"), 
Mockito.anyString());
-        Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("domain"), 
Mockito.anyString());
-        Mockito.verify(jsInterpreterMock, 
Mockito.never()).injectVariable(Mockito.eq("project"), Mockito.anyString());
-        
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("resourceType"), 
Mockito.anyString());
-        Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("value"), 
Mockito.anyString());
-        Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("zone"), 
Mockito.anyString());
+        
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("account"), 
Mockito.any());
+        Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("domain"), 
Mockito.any());
+        Mockito.verify(jsInterpreterMock, 
Mockito.never()).injectVariable(Mockito.eq("project"), Mockito.any());
+        
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("resourceType"), 
Mockito.any());
+        Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("value"), 
Mockito.any());
+        Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("zone"), 
Mockito.any());
     }
 
     @Test
@@ -288,12 +288,12 @@ public class QuotaManagerImplTest {
 
         
quotaManagerImplSpy.injectPresetVariablesIntoJsInterpreter(jsInterpreterMock, 
presetVariablesMock);
 
-        
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("account"), 
Mockito.anyString());
-        Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("domain"), 
Mockito.anyString());
-        
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("project"), 
Mockito.anyString());
-        
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("resourceType"), 
Mockito.anyString());
-        Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("value"), 
Mockito.anyString());
-        Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("zone"), 
Mockito.anyString());
+        
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("account"), 
Mockito.any());
+        Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("domain"), 
Mockito.any());
+        
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("project"), 
Mockito.any());
+        
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("resourceType"), 
Mockito.any());
+        Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("value"), 
Mockito.any());
+        Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("zone"), 
Mockito.any());
     }
 
     @Test
diff --git 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/AccountTest.java
 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/AccountTest.java
deleted file mode 100644
index 1e62235e71c..00000000000
--- 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/AccountTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.quota.activationrule.presetvariables;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class AccountTest {
-
-    @Test
-    public void setRoleTestAddFieldRoleToCollection() {
-        Account variable = new Account();
-        variable.setRole(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("role"));
-    }
-}
diff --git 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/BackupOfferingTest.java
 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/BackupOfferingTest.java
deleted file mode 100644
index 57c18f936f2..00000000000
--- 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/BackupOfferingTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.cloudstack.quota.activationrule.presetvariables;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class BackupOfferingTest {
-    @Test
-    public void setExternalIdTestAddFieldExternalIdToCollection() {
-        BackupOffering backupOffering = new BackupOffering();
-        backupOffering.setExternalId("any-external-id");
-        
Assert.assertTrue(backupOffering.fieldNamesToIncludeInToString.contains("externalId"));
-    }
-
-}
diff --git 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/ComputeOfferingTest.java
 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/ComputeOfferingTest.java
deleted file mode 100644
index 5fbcbe76476..00000000000
--- 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/ComputeOfferingTest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.quota.activationrule.presetvariables;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class ComputeOfferingTest {
-
-    @Test
-    public void setCustomizedTestAddFieldCustomizedToCollection() {
-        ComputeOffering variable = new ComputeOffering();
-        variable.setCustomized(true);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("customized"));
-    }
-
-}
diff --git 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/ComputingResourcesTest.java
 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/ComputingResourcesTest.java
deleted file mode 100644
index f7978f16e04..00000000000
--- 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/ComputingResourcesTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.quota.activationrule.presetvariables;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class ComputingResourcesTest {
-
-    @Test
-    public void toStringTestReturnAJson() {
-        ComputingResources variable = new ComputingResources();
-
-        String expected = ToStringBuilder.reflectionToString(variable, 
ToStringStyle.JSON_STYLE);
-        String result = variable.toString();
-
-        Assert.assertEquals(expected, result);
-    }
-
-}
diff --git 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/DomainTest.java
 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/DomainTest.java
deleted file mode 100644
index f245b4637e6..00000000000
--- 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/DomainTest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.quota.activationrule.presetvariables;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class DomainTest {
-
-    @Test
-    public void setPathTestAddFieldPathToCollection() {
-        Domain variable = new Domain();
-        variable.setPath("test path");
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("path"));
-    }
-
-}
diff --git 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/GenericPresetVariableTest.java
 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/GenericPresetVariableTest.java
deleted file mode 100644
index 4f594ee5d00..00000000000
--- 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/GenericPresetVariableTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.quota.activationrule.presetvariables;
-
-import 
org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class GenericPresetVariableTest {
-
-    @Test
-    public void setIdTestAddFieldIdToCollection() {
-        GenericPresetVariable variable = new GenericPresetVariable();
-        variable.setId("test");
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("id"));
-    }
-
-    @Test
-    public void setNameTestAddFieldNameToCollection() {
-        GenericPresetVariable variable = new GenericPresetVariable();
-        variable.setName("test");
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("name"));
-    }
-
-    @Test
-    public void toStringTestSetAllFieldsAndReturnAJson() {
-        GenericPresetVariable variable = new GenericPresetVariable();
-        variable.setId("test id");
-        variable.setName("test name");
-
-        String expected = 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(variable, "id", 
"name");
-        String result = variable.toString();
-
-        Assert.assertEquals(expected, result);
-    }
-
-    @Test
-    public void toStringTestSetSomeFieldsAndReturnAJson() {
-        GenericPresetVariable variable = new GenericPresetVariable();
-        variable.setId("test id");
-
-        String expected = 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(variable, "id");
-        String result = variable.toString();
-
-        Assert.assertEquals(expected, result);
-
-        variable = new GenericPresetVariable();
-        variable.setName("test name");
-
-        expected = 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(variable, "name");
-        result = variable.toString();
-
-        Assert.assertEquals(expected, result);
-    }
-}
diff --git 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/HostTest.java
 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/HostTest.java
deleted file mode 100644
index 87aae7788e2..00000000000
--- 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/HostTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.quota.activationrule.presetvariables;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class HostTest {
-
-    @Test
-    public void setTagsTestAddFieldTagsToCollection() {
-        Host variable = new Host();
-        variable.setTags(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("tags"));
-    }
-}
diff --git 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/PresetVariableHelperTest.java
 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/PresetVariableHelperTest.java
index 45af4b8a29a..095ab422ee7 100644
--- 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/PresetVariableHelperTest.java
+++ 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/PresetVariableHelperTest.java
@@ -209,12 +209,12 @@ public class PresetVariableHelperTest {
         value.setTags(Collections.singletonMap("tag1", "value1"));
         value.setTemplate(getGenericPresetVariableForTests());
         value.setDiskOffering(getGenericPresetVariableForTests());
-        value.setProvisioningType(ProvisioningType.THIN);
+        value.setProvisioningType(ProvisioningType.THIN.toString());
         value.setStorage(getStorageForTests());
         value.setSize(ByteScaleUtils.GiB);
-        value.setSnapshotType(Snapshot.Type.HOURLY);
+        value.setSnapshotType(Snapshot.Type.HOURLY.toString());
         value.setTag("tag_test");
-        value.setVmSnapshotType(VMSnapshot.Type.Disk);
+        value.setVmSnapshotType(VMSnapshot.Type.Disk.toString());
         value.setComputingResources(getComputingResourcesForTests());
         return value;
     }
@@ -256,7 +256,7 @@ public class PresetVariableHelperTest {
         storage.setId("storage_id");
         storage.setName("storage_name");
         storage.setTags(Arrays.asList("tag1", "tag2"));
-        storage.setScope(ScopeType.ZONE);
+        storage.setScope(ScopeType.ZONE.toString());
         return storage;
     }
 
@@ -293,13 +293,6 @@ public class PresetVariableHelperTest {
         Assert.assertEquals(expected.getName(), result.getName());
     }
 
-    private void validateFieldNamesToIncludeInToString(List<String> expected, 
GenericPresetVariable resultObject) {
-        List<String> result = new 
ArrayList<>(resultObject.fieldNamesToIncludeInToString);
-        Collections.sort(expected);
-        Collections.sort(result);
-        Assert.assertEquals(expected, result);
-    }
-
     private BackupOffering getBackupOfferingForTests() {
         BackupOffering backupOffering = new BackupOffering();
         backupOffering.setId("backup_offering_id");
@@ -362,7 +355,6 @@ public class PresetVariableHelperTest {
 
         Assert.assertNotNull(result.getProject());
         assertPresetVariableIdAndName(account, result.getProject());
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", "name"), 
result.getProject());
     }
 
     @Test
@@ -379,7 +371,6 @@ public class PresetVariableHelperTest {
         Account result = presetVariableHelperSpy.getPresetVariableAccount(1l);
 
         assertPresetVariableIdAndName(account, result);
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", "name"), 
result);
     }
 
     @Test
@@ -409,18 +400,16 @@ public class PresetVariableHelperTest {
             Role role = new Role();
             role.setId("test_id");
             role.setName("test_name");
-            role.setType(roleType);
+            role.setType(roleType.toString());
 
             Mockito.doReturn(role.getId()).when(roleVoMock).getUuid();
             Mockito.doReturn(role.getName()).when(roleVoMock).getName();
-            Mockito.doReturn(role.getType()).when(roleVoMock).getRoleType();
+            
Mockito.doReturn(RoleType.fromString(role.getType())).when(roleVoMock).getRoleType();
 
             Role result = presetVariableHelperSpy.getPresetVariableRole(1l);
 
             assertPresetVariableIdAndName(role, result);
             Assert.assertEquals(role.getType(), result.getType());
-
-            validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", 
"type"), result);
         });
     }
 
@@ -439,8 +428,6 @@ public class PresetVariableHelperTest {
 
         assertPresetVariableIdAndName(domain, result);
         Assert.assertEquals(domain.getPath(), result.getPath());
-
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", 
"path"), result);
     }
 
     @Test
@@ -456,7 +443,6 @@ public class PresetVariableHelperTest {
         GenericPresetVariable result = 
presetVariableHelperSpy.getPresetVariableZone(1l);
 
         assertPresetVariableIdAndName(expected, result);
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", "name"), 
result);
     }
 
     @Test
@@ -477,7 +463,6 @@ public class PresetVariableHelperTest {
         Value result = 
presetVariableHelperSpy.getPresetVariableValue(usageVoMock);
 
         Assert.assertEquals(resources, result.getAccountResources());
-        
validateFieldNamesToIncludeInToString(Arrays.asList("accountResources"), 
result);
     }
 
     @Test
@@ -536,8 +521,6 @@ public class PresetVariableHelperTest {
                 Assert.assertEquals(expected.getTags(), result.getTags());
                 Assert.assertEquals(expected.getTemplate(), 
result.getTemplate());
                 Assert.assertEquals(hypervisorType.name(), 
result.getHypervisorType());
-
-                validateFieldNamesToIncludeInToString(Arrays.asList("id", 
"name", "osName", "tags", "template", "hypervisorType"), result);
             });
         }
 
@@ -569,7 +552,6 @@ public class PresetVariableHelperTest {
 
         assertPresetVariableIdAndName(expectedHost, result.getHost());
         Assert.assertEquals(expectedHost.getTags(), 
result.getHost().getTags());
-        validateFieldNamesToIncludeInToString(Arrays.asList("host"), result);
     }
 
     @Test
@@ -588,7 +570,6 @@ public class PresetVariableHelperTest {
 
         assertPresetVariableIdAndName(expected, result);
         Assert.assertEquals(expected.getTags(), result.getTags());
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", 
"isTagARule", "name", "tags"), result);
     }
 
     @Test
@@ -608,7 +589,6 @@ public class PresetVariableHelperTest {
         assertPresetVariableIdAndName(expected, result);
         Assert.assertEquals(new ArrayList<>(), result.getTags());
         Assert.assertTrue(result.getIsTagARule());
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", 
"isTagARule", "name", "tags"), result);
     }
 
     @Test
@@ -636,7 +616,6 @@ public class PresetVariableHelperTest {
 
         assertPresetVariableIdAndName(expected, result);
         Assert.assertEquals(expected.isCustomized(), result.isCustomized());
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", 
"customized"), result);
     }
 
     @Test
@@ -652,7 +631,6 @@ public class PresetVariableHelperTest {
         GenericPresetVariable result = 
presetVariableHelperSpy.getPresetVariableValueTemplate(1l);
 
         assertPresetVariableIdAndName(expected, result);
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", "name"), 
result);
     }
 
     @Test
@@ -696,7 +674,7 @@ public class PresetVariableHelperTest {
             Mockito.doReturn(expected.getId()).when(volumeVoMock).getUuid();
             Mockito.doReturn(expected.getName()).when(volumeVoMock).getName();
             
Mockito.doReturn(expected.getDiskOffering()).when(presetVariableHelperSpy).getPresetVariableValueDiskOffering(Mockito.anyLong());
-            
Mockito.doReturn(expected.getProvisioningType()).when(volumeVoMock).getProvisioningType();
+            
Mockito.doReturn(ProvisioningType.getProvisioningType(expected.getProvisioningType())).when(volumeVoMock).getProvisioningType();
             
Mockito.doReturn(expected.getStorage()).when(presetVariableHelperSpy).getPresetVariableValueStorage(Mockito.anyLong(),
 Mockito.anyInt());
             
Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(),
 Mockito.any(ResourceObjectType.class));
             Mockito.doReturn(expected.getSize()).when(volumeVoMock).getSize();
@@ -716,8 +694,6 @@ public class PresetVariableHelperTest {
             Assert.assertEquals(expected.getTags(), result.getTags());
             Assert.assertEquals(expectedSize, result.getSize());
             Assert.assertEquals(imageFormat.name(), result.getVolumeFormat());
-
-            validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", 
"diskOffering", "provisioningType", "storage", "tags", "size", "volumeFormat"), 
result);
         }
 
         Mockito.verify(presetVariableHelperSpy, 
Mockito.times(ImageFormat.values().length)).getPresetVariableValueResourceTags(Mockito.anyLong(),
@@ -738,7 +714,7 @@ public class PresetVariableHelperTest {
             Mockito.doReturn(expected.getId()).when(volumeVoMock).getUuid();
             Mockito.doReturn(expected.getName()).when(volumeVoMock).getName();
             
Mockito.doReturn(expected.getDiskOffering()).when(presetVariableHelperSpy).getPresetVariableValueDiskOffering(Mockito.anyLong());
-            
Mockito.doReturn(expected.getProvisioningType()).when(volumeVoMock).getProvisioningType();
+            
Mockito.doReturn(ProvisioningType.getProvisioningType(expected.getProvisioningType())).when(volumeVoMock).getProvisioningType();
             
Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(),
 Mockito.any(ResourceObjectType.class));
             Mockito.doReturn(expected.getSize()).when(volumeVoMock).getSize();
             Mockito.doReturn(imageFormat).when(volumeVoMock).getFormat();
@@ -757,8 +733,6 @@ public class PresetVariableHelperTest {
             Assert.assertEquals(expected.getTags(), result.getTags());
             Assert.assertEquals(expectedSize, result.getSize());
             Assert.assertEquals(imageFormat.name(), result.getVolumeFormat());
-
-            validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", 
"diskOffering", "provisioningType", "tags", "size", "volumeFormat"), result);
         }
 
         Mockito.verify(presetVariableHelperSpy, 
Mockito.times(ImageFormat.values().length)).getPresetVariableValueResourceTags(Mockito.anyLong(),
@@ -778,7 +752,6 @@ public class PresetVariableHelperTest {
         GenericPresetVariable result = 
presetVariableHelperSpy.getPresetVariableValueDiskOffering(1l);
 
         assertPresetVariableIdAndName(expected, result);
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", "name"), 
result);
     }
 
     @Test
@@ -804,7 +777,7 @@ public class PresetVariableHelperTest {
 
         Mockito.doReturn(expected.getId()).when(storagePoolVoMock).getUuid();
         Mockito.doReturn(expected.getName()).when(storagePoolVoMock).getName();
-        
Mockito.doReturn(expected.getScope()).when(storagePoolVoMock).getScope();
+        
Mockito.doReturn(ScopeType.validateAndGetScopeType(expected.getScope())).when(storagePoolVoMock).getScope();
         
Mockito.doReturn(storageTagVOListMock).when(storagePoolTagsDaoMock).findStoragePoolTags(Mockito.anyLong());
 
         Storage result = 
presetVariableHelperSpy.getPresetVariableValueStorage(1l, 2);
@@ -812,8 +785,6 @@ public class PresetVariableHelperTest {
         assertPresetVariableIdAndName(expected, result);
         Assert.assertEquals(expected.getScope(), result.getScope());
         Assert.assertEquals(expected.getTags(), result.getTags());
-
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", 
"isTagARule",  "name", "scope", "tags"), result);
     }
 
     @Test
@@ -828,7 +799,7 @@ public class PresetVariableHelperTest {
 
         Mockito.doReturn(expected.getId()).when(storagePoolVoMock).getUuid();
         Mockito.doReturn(expected.getName()).when(storagePoolVoMock).getName();
-        
Mockito.doReturn(expected.getScope()).when(storagePoolVoMock).getScope();
+        
Mockito.doReturn(ScopeType.validateAndGetScopeType(expected.getScope())).when(storagePoolVoMock).getScope();
         
Mockito.doReturn(storageTagVOListMock).when(storagePoolTagsDaoMock).findStoragePoolTags(Mockito.anyLong());
 
         Storage result = 
presetVariableHelperSpy.getPresetVariableValueStorage(1l, 2);
@@ -837,8 +808,6 @@ public class PresetVariableHelperTest {
         Assert.assertEquals(expected.getScope(), result.getScope());
         Assert.assertEquals(new ArrayList<>(), result.getTags());
         Assert.assertTrue(result.getIsTagARule());
-
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", 
"isTagARule",  "name", "scope", "tags"), result);
     }
 
     @Test
@@ -874,7 +843,6 @@ public class PresetVariableHelperTest {
         Storage result = 
presetVariableHelperSpy.getSecondaryStorageForSnapshot(1l, UsageTypes.SNAPSHOT);
 
         assertPresetVariableIdAndName(expected, result);
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", "name"), 
result);
     }
 
     @Test
@@ -915,8 +883,6 @@ public class PresetVariableHelperTest {
             Assert.assertEquals(expected.getOsName(), result.getOsName());
             Assert.assertEquals(expected.getTags(), result.getTags());
             Assert.assertEquals(expectedSize, result.getSize());
-
-            validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", 
"osName", "tags", "size"), result);
         });
 
         
Mockito.verify(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(),
 Mockito.eq(ResourceObjectType.Template));
@@ -967,8 +933,6 @@ public class PresetVariableHelperTest {
             Assert.assertEquals(expected.getTags(), result.getTags());
             Assert.assertEquals(expectedSize, result.getSize());
             Assert.assertEquals(hypervisorType.name(), 
result.getHypervisorType());
-
-            validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", 
"snapshotType", "storage", "tags", "size", "hypervisorType"), result);
         }
 
         Mockito.verify(presetVariableHelperSpy, 
Mockito.times(Hypervisor.HypervisorType.values().length)).getPresetVariableValueResourceTags(Mockito.anyLong(),
@@ -1053,8 +1017,6 @@ public class PresetVariableHelperTest {
 
         assertPresetVariableIdAndName(expected, result);
         Assert.assertEquals(expected.getTag(), result.getTag());
-
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", 
"tag"), result);
     }
 
     @Test
@@ -1079,7 +1041,7 @@ public class PresetVariableHelperTest {
         Mockito.doReturn(expected.getId()).when(vmSnapshotVoMock).getUuid();
         Mockito.doReturn(expected.getName()).when(vmSnapshotVoMock).getName();
         
Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(),
 Mockito.any(ResourceObjectType.class));
-        
Mockito.doReturn(expected.getVmSnapshotType()).when(vmSnapshotVoMock).getType();
+        
Mockito.doReturn(VMSnapshot.Type.valueOf(expected.getVmSnapshotType())).when(vmSnapshotVoMock).getType();
 
         
Mockito.doReturn(UsageTypes.VM_SNAPSHOT).when(usageVoMock).getUsageType();
 
@@ -1090,8 +1052,6 @@ public class PresetVariableHelperTest {
         Assert.assertEquals(expected.getTags(), result.getTags());
         Assert.assertEquals(expected.getVmSnapshotType(), 
result.getVmSnapshotType());
 
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", 
"tags", "vmSnapshotType"), result);
-
         
Mockito.verify(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(),
 Mockito.eq(ResourceObjectType.VMSnapshot));
     }
 
@@ -1124,9 +1084,6 @@ public class PresetVariableHelperTest {
 
             if (typeInt == UsageTypes.RUNNING_VM) {
                 Assert.assertEquals(expected.getComputingResources(), 
result.getComputingResources());
-                
validateFieldNamesToIncludeInToString(Arrays.asList("computeOffering", 
"computingResources"), result);
-            } else {
-                
validateFieldNamesToIncludeInToString(Arrays.asList("computeOffering"), result);
             }
         });
     }
@@ -1219,8 +1176,6 @@ public class PresetVariableHelperTest {
         Assert.assertEquals(expected.getVirtualSize(), 
result.getVirtualSize());
         Assert.assertEquals(expected.getBackupOffering(), 
result.getBackupOffering());
 
-        validateFieldNamesToIncludeInToString(Arrays.asList("size", 
"virtualSize", "backupOffering"), result);
-
         
Mockito.verify(presetVariableHelperSpy).getPresetVariableValueBackupOffering(Mockito.anyLong());
     }
 
@@ -1239,7 +1194,6 @@ public class PresetVariableHelperTest {
 
         assertPresetVariableIdAndName(expected, result);
         Assert.assertEquals(expected.getExternalId(), result.getExternalId());
-        validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", 
"externalId"), result);
     }
 
     @Test
diff --git 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/ResourceTest.java
 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/ResourceTest.java
deleted file mode 100644
index cdcfc87cd4e..00000000000
--- 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/ResourceTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.quota.activationrule.presetvariables;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class ResourceTest {
-
-    @Test
-    public void toStringTestReturnAJson() {
-        Resource variable = new Resource();
-
-        String expected = ToStringBuilder.reflectionToString(variable, 
ToStringStyle.JSON_STYLE);
-        String result = variable.toString();
-
-        Assert.assertEquals(expected, result);
-    }
-
-}
diff --git 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/RoleTest.java
 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/RoleTest.java
deleted file mode 100644
index 88265ee4e55..00000000000
--- 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/RoleTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.quota.activationrule.presetvariables;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class RoleTest {
-
-    @Test
-    public void setTagsTestAddFieldTagsToCollection() {
-        Role variable = new Role();
-        variable.setType(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("type"));
-    }
-}
diff --git 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/StorageTest.java
 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/StorageTest.java
deleted file mode 100644
index f36d5c49581..00000000000
--- 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/StorageTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.quota.activationrule.presetvariables;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class StorageTest {
-
-    @Test
-    public void setTagsTestAddFieldTagsToCollection() {
-        Storage variable = new Storage();
-        variable.setTags(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("tags"));
-    }
-
-    @Test
-    public void setScopeTestAddFieldScopeToCollection() {
-        Storage variable = new Storage();
-        variable.setScope(null);;
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("scope"));
-    }
-}
diff --git 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/ValueTest.java
 
b/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/ValueTest.java
deleted file mode 100644
index bad33da8836..00000000000
--- 
a/framework/quota/src/test/java/org/apache/cloudstack/quota/activationrule/presetvariables/ValueTest.java
+++ /dev/null
@@ -1,175 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.quota.activationrule.presetvariables;
-
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class ValueTest {
-
-    @Test
-    public void setIdTestAddFieldIdToCollection() {
-        Value variable = new Value();
-        variable.setId(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("id"));
-    }
-
-    @Test
-    public void setNameTestAddFieldNameToCollection() {
-        Value variable = new Value();
-        variable.setName(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("name"));
-    }
-
-    @Test
-    public void setHostTestAddFieldHostToCollection() {
-        Value variable = new Value();
-        variable.setHost(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("host"));
-    }
-
-    @Test
-    public void setOsNameTestAddFieldOsNameToCollection() {
-        Value variable = new Value();
-        variable.setOsName(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("osName"));
-    }
-
-    @Test
-    public void setAccountResourcesTestAddFieldAccountResourcesToCollection() {
-        Value variable = new Value();
-        variable.setAccountResources(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("accountResources"));
-    }
-
-    @Test
-    public void setTagsTestAddFieldTagsToCollection() {
-        Value variable = new Value();
-        variable.setTags(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("tags"));
-    }
-
-    @Test
-    public void setTagTestAddFieldTagToCollection() {
-        Value variable = new Value();
-        variable.setTag(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("tag"));
-    }
-
-    @Test
-    public void setSizeTestAddFieldSizeToCollection() {
-        Value variable = new Value();
-        variable.setSize(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("size"));
-    }
-
-    @Test
-    public void setProvisioningTypeTestAddFieldProvisioningTypeToCollection() {
-        Value variable = new Value();
-        variable.setProvisioningType(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("provisioningType"));
-    }
-
-    @Test
-    public void setSnapshotTypeTestAddFieldSnapshotTypeToCollection() {
-        Value variable = new Value();
-        variable.setSnapshotType(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("snapshotType"));
-    }
-
-    @Test
-    public void setVmSnapshotTypeTestAddFieldVmSnapshotTypeToCollection() {
-        Value variable = new Value();
-        variable.setVmSnapshotType(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("vmSnapshotType"));
-    }
-
-    @Test
-    public void setComputeOfferingTestAddFieldComputeOfferingToCollection() {
-        Value variable = new Value();
-        variable.setComputeOffering(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("computeOffering"));
-    }
-
-    @Test
-    public void setTemplateTestAddFieldTemplateToCollection() {
-        Value variable = new Value();
-        variable.setTemplate(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("template"));
-    }
-
-    @Test
-    public void setDiskOfferingTestAddFieldDiskOfferingToCollection() {
-        Value variable = new Value();
-        variable.setDiskOffering(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("diskOffering"));
-    }
-
-    @Test
-    public void setStorageTestAddFieldStorageToCollection() {
-        Value variable = new Value();
-        variable.setStorage(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("storage"));
-    }
-
-    @Test
-    public void 
setComputingResourcesTestAddFieldComputingResourcesToCollection() {
-        Value variable = new Value();
-        variable.setComputingResources(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("computingResources"));
-    }
-
-    @Test
-    public void setVirtualSizeTestAddFieldVirtualSizeToCollection() {
-        Value variable = new Value();
-        variable.setVirtualSize(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("virtualSize"));
-    }
-
-    @Test
-    public void setBackupOfferingTestAddFieldBackupOfferingToCollection() {
-        Value variable = new Value();
-        variable.setBackupOffering(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("backupOffering"));
-    }
-
-    @Test
-    public void setHypervisorTypeTestAddFieldHypervisorTypeToCollection() {
-        Value variable = new Value();
-        variable.setHypervisorType(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("hypervisorType"));
-    }
-
-    @Test
-    public void setVolumeFormatTestAddFieldVolumeFormatToCollection() {
-        Value variable = new Value();
-        variable.setVolumeFormat(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("volumeFormat"));
-    }
-
-    @Test
-    public void setStateTestAddFieldStateToCollection() {
-        Value variable = new Value();
-        variable.setState(null);
-        
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("state"));
-    }
-
-}
diff --git 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/HeuristicRuleHelper.java
 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/HeuristicRuleHelper.java
index 21a34de0d23..8305bdc1eb9 100644
--- 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/HeuristicRuleHelper.java
+++ 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/HeuristicRuleHelper.java
@@ -139,23 +139,23 @@ public class HeuristicRuleHelper {
      * @param presetVariables used for injecting in the JS interpreter.
      */
     protected void injectPresetVariables(JsInterpreter jsInterpreter, 
PresetVariables presetVariables) {
-        jsInterpreter.injectVariable("secondaryStorages", 
presetVariables.getSecondaryStorages().toString());
+        jsInterpreter.injectVariable("secondaryStorages", 
presetVariables.getSecondaryStorages());
 
         if (presetVariables.getTemplate() != null) {
-            jsInterpreter.injectVariable("template", 
presetVariables.getTemplate().toString());
-            jsInterpreter.injectVariable("iso", 
presetVariables.getTemplate().toString());
+            jsInterpreter.injectVariable("template", 
presetVariables.getTemplate());
+            jsInterpreter.injectVariable("iso", presetVariables.getTemplate());
         }
 
         if (presetVariables.getSnapshot() != null) {
-            jsInterpreter.injectVariable("snapshot", 
presetVariables.getSnapshot().toString());
+            jsInterpreter.injectVariable("snapshot", 
presetVariables.getSnapshot());
         }
 
         if (presetVariables.getVolume() != null) {
-            jsInterpreter.injectVariable("volume", 
presetVariables.getVolume().toString());
+            jsInterpreter.injectVariable("volume", 
presetVariables.getVolume());
         }
 
         if (presetVariables.getAccount() != null) {
-            jsInterpreter.injectVariable("account", 
presetVariables.getAccount().toString());
+            jsInterpreter.injectVariable("account", 
presetVariables.getAccount());
         }
     }
 
@@ -185,8 +185,8 @@ public class HeuristicRuleHelper {
         Template template = new Template();
 
         template.setName(templateVO.getName());
-        template.setFormat(templateVO.getFormat());
-        template.setHypervisorType(templateVO.getHypervisorType());
+        template.setFormat(templateVO.getFormat().toString());
+        template.setHypervisorType(templateVO.getHypervisorType().toString());
 
         return template;
     }
@@ -195,7 +195,7 @@ public class HeuristicRuleHelper {
         Volume volume = new Volume();
 
         volume.setName(volumeVO.getName());
-        volume.setFormat(volumeVO.getFormat());
+        volume.setFormat(volumeVO.getFormat().toString());
         volume.setSize(volumeVO.getSize());
 
         return volume;
@@ -206,7 +206,7 @@ public class HeuristicRuleHelper {
 
         snapshot.setName(snapshotInfo.getName());
         snapshot.setSize(snapshotInfo.getSize());
-        snapshot.setHypervisorType(snapshotInfo.getHypervisorType());
+        
snapshot.setHypervisorType(snapshotInfo.getHypervisorType().toString());
 
         return snapshot;
     }
diff --git 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Account.java
 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Account.java
index 67750e8ec5c..f4652d87e7b 100644
--- 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Account.java
+++ 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Account.java
@@ -27,7 +27,6 @@ public class Account extends GenericHeuristicPresetVariable {
 
     public void setId(String id) {
         this.id = id;
-        fieldNamesToIncludeInToString.add("id");
     }
 
     public Domain getDomain() {
@@ -36,6 +35,5 @@ public class Account extends GenericHeuristicPresetVariable {
 
     public void setDomain(Domain domain) {
         this.domain = domain;
-        fieldNamesToIncludeInToString.add("domain");
     }
 }
diff --git 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Domain.java
 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Domain.java
index 704cbf4373e..0b01604e673 100644
--- 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Domain.java
+++ 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Domain.java
@@ -25,6 +25,5 @@ public class Domain extends GenericHeuristicPresetVariable {
 
     public void setId(String id) {
         this.id = id;
-        fieldNamesToIncludeInToString.add("id");
     }
 }
diff --git 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/GenericHeuristicPresetVariable.java
 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/GenericHeuristicPresetVariable.java
index b85b7763eee..56c7d48e68a 100644
--- 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/GenericHeuristicPresetVariable.java
+++ 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/GenericHeuristicPresetVariable.java
@@ -16,15 +16,11 @@
 // under the License.
 package org.apache.cloudstack.storage.heuristics.presetvariables;
 
-import 
org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
-
-import java.util.HashSet;
-import java.util.Set;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
 
 public class GenericHeuristicPresetVariable {
 
-    protected transient Set<String> fieldNamesToIncludeInToString = new 
HashSet<>();
-
     private String name;
 
     public String getName() {
@@ -33,15 +29,10 @@ public class GenericHeuristicPresetVariable {
 
     public void setName(String name) {
         this.name = name;
-        fieldNamesToIncludeInToString.add("name");
     }
 
-    /***
-     * Converts the preset variable into a valid JSON object that will be 
injected into the JS interpreter.
-     * This method should not be overridden or changed.
-     */
     @Override
-    public final String toString() {
-        return ReflectionToStringBuilderUtils.reflectOnlySelectedFields(this, 
fieldNamesToIncludeInToString.toArray(new String[0]));
+    public String toString() {
+        return ToStringBuilder.reflectionToString(this, 
ToStringStyle.JSON_STYLE);
     }
 }
diff --git 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/SecondaryStorage.java
 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/SecondaryStorage.java
index ad7058d8336..e3a8dac43c6 100644
--- 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/SecondaryStorage.java
+++ 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/SecondaryStorage.java
@@ -32,7 +32,6 @@ public class SecondaryStorage extends 
GenericHeuristicPresetVariable {
 
     public void setId(String id) {
         this.id = id;
-        fieldNamesToIncludeInToString.add("id");
     }
 
     public Long getUsedDiskSize() {
@@ -41,7 +40,6 @@ public class SecondaryStorage extends 
GenericHeuristicPresetVariable {
 
     public void setUsedDiskSize(Long usedDiskSize) {
         this.usedDiskSize = usedDiskSize;
-        fieldNamesToIncludeInToString.add("usedDiskSize");
     }
 
     public Long getTotalDiskSize() {
@@ -50,7 +48,6 @@ public class SecondaryStorage extends 
GenericHeuristicPresetVariable {
 
     public void setTotalDiskSize(Long totalDiskSize) {
         this.totalDiskSize = totalDiskSize;
-        fieldNamesToIncludeInToString.add("totalDiskSize");
     }
 
     public String getProtocol() {
@@ -59,6 +56,5 @@ public class SecondaryStorage extends 
GenericHeuristicPresetVariable {
 
     public void setProtocol(String protocol) {
         this.protocol = protocol;
-        fieldNamesToIncludeInToString.add("protocol");
     }
 }
diff --git 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Snapshot.java
 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Snapshot.java
index 34acd394dbe..404db3cdebc 100644
--- 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Snapshot.java
+++ 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Snapshot.java
@@ -16,13 +16,11 @@
 // under the License.
 package org.apache.cloudstack.storage.heuristics.presetvariables;
 
-import com.cloud.hypervisor.Hypervisor;
-
 public class Snapshot extends GenericHeuristicPresetVariable {
 
     private Long size;
 
-    private Hypervisor.HypervisorType hypervisorType;
+    private String hypervisorType;
 
     public Long getSize() {
         return size;
@@ -30,15 +28,13 @@ public class Snapshot extends 
GenericHeuristicPresetVariable {
 
     public void setSize(Long size) {
         this.size = size;
-        fieldNamesToIncludeInToString.add("size");
     }
 
-    public Hypervisor.HypervisorType getHypervisorType() {
+    public String getHypervisorType() {
         return hypervisorType;
     }
 
-    public void setHypervisorType(Hypervisor.HypervisorType hypervisorType) {
+    public void setHypervisorType(String hypervisorType) {
         this.hypervisorType = hypervisorType;
-        fieldNamesToIncludeInToString.add("hypervisorType");
     }
 }
diff --git 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Template.java
 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Template.java
index 297c95fad9a..c6df349010f 100644
--- 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Template.java
+++ 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Template.java
@@ -16,41 +16,35 @@
 // under the License.
 package org.apache.cloudstack.storage.heuristics.presetvariables;
 
-import com.cloud.hypervisor.Hypervisor;
-import com.cloud.storage.Storage;
-
 public class Template extends GenericHeuristicPresetVariable {
 
-    private Hypervisor.HypervisorType hypervisorType;
+    private String hypervisorType;
 
-    private Storage.ImageFormat format;
+    private String format;
 
-    private Storage.TemplateType templateType;
+    private String templateType;
 
-    public Hypervisor.HypervisorType getHypervisorType() {
+    public String getHypervisorType() {
         return hypervisorType;
     }
 
-    public void setHypervisorType(Hypervisor.HypervisorType hypervisorType) {
+    public void setHypervisorType(String hypervisorType) {
         this.hypervisorType = hypervisorType;
-        fieldNamesToIncludeInToString.add("hypervisorType");
     }
 
-    public Storage.ImageFormat getFormat() {
+    public String getFormat() {
         return format;
     }
 
-    public void setFormat(Storage.ImageFormat format) {
+    public void setFormat(String format) {
         this.format = format;
-        fieldNamesToIncludeInToString.add("format");
     }
 
-    public Storage.TemplateType getTemplateType() {
+    public String getTemplateType() {
         return templateType;
     }
 
-    public void setTemplateType(Storage.TemplateType templateType) {
+    public void setTemplateType(String templateType) {
         this.templateType = templateType;
-        fieldNamesToIncludeInToString.add("templateType");
     }
 }
diff --git 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Volume.java
 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Volume.java
index 4e5e81b117f..8f571a57209 100644
--- 
a/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Volume.java
+++ 
b/server/src/main/java/org/apache/cloudstack/storage/heuristics/presetvariables/Volume.java
@@ -16,13 +16,11 @@
 // under the License.
 package org.apache.cloudstack.storage.heuristics.presetvariables;
 
-import com.cloud.storage.Storage;
-
 public class Volume extends GenericHeuristicPresetVariable {
 
     private Long size;
 
-    private Storage.ImageFormat format;
+    private String format;
 
     public Long getSize() {
         return size;
@@ -30,15 +28,13 @@ public class Volume extends GenericHeuristicPresetVariable {
 
     public void setSize(Long size) {
         this.size = size;
-        fieldNamesToIncludeInToString.add("size");
     }
 
-    public Storage.ImageFormat getFormat() {
+    public String getFormat() {
         return format;
     }
 
-    public void setFormat(Storage.ImageFormat format) {
+    public void setFormat(String format) {
         this.format = format;
-        fieldNamesToIncludeInToString.add("format");
     }
 }
diff --git 
a/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/AccountTest.java
 
b/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/AccountTest.java
deleted file mode 100644
index f7610438b78..00000000000
--- 
a/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/AccountTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.storage.heuristics.presetvariables;
-
-import 
org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class AccountTest {
-
-    @Test
-    public void toStringTestReturnsValidJson() {
-        Account variable = new Account();
-        variable.setName("test name");
-        variable.setId("test id");
-
-        Domain domainVariable = new Domain();
-        domainVariable.setId("domain id");
-        domainVariable.setName("domain name");
-        variable.setDomain(domainVariable);
-
-        String expected = 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(variable, "name", 
"id", "domain");
-        String result = variable.toString();
-
-        Assert.assertEquals(expected, result);
-    }
-
-}
diff --git 
a/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/DomainTest.java
 
b/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/DomainTest.java
deleted file mode 100644
index a1ec6854ecc..00000000000
--- 
a/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/DomainTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.storage.heuristics.presetvariables;
-
-import 
org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class DomainTest {
-
-    @Test
-    public void toStringTestReturnsValidJson() {
-        Domain variable = new Domain();
-        variable.setName("test name");
-        variable.setId("test id");
-
-        String expected = 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(variable, "name", 
"id");
-        String result = variable.toString();
-
-        Assert.assertEquals(expected, result);
-    }
-
-}
diff --git 
a/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/GenericHeuristicPresetVariableTest.java
 
b/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/GenericHeuristicPresetVariableTest.java
deleted file mode 100644
index cd295e92caf..00000000000
--- 
a/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/GenericHeuristicPresetVariableTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.storage.heuristics.presetvariables;
-
-import 
org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class GenericHeuristicPresetVariableTest {
-
-    @Test
-    public void toStringTestReturnsValidJson() {
-        GenericHeuristicPresetVariable variable = new 
GenericHeuristicPresetVariable();
-        variable.setName("test name");
-
-        String expected = 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(variable, "name");
-        String result = variable.toString();
-
-        Assert.assertEquals(expected, result);
-    }
-
-}
diff --git 
a/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/SecondaryStorageTest.java
 
b/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/SecondaryStorageTest.java
deleted file mode 100644
index a09386789cf..00000000000
--- 
a/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/SecondaryStorageTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.storage.heuristics.presetvariables;
-
-import 
org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class SecondaryStorageTest {
-
-    @Test
-    public void toStringTestReturnsValidJson() {
-        SecondaryStorage variable = new SecondaryStorage();
-        variable.setName("test name");
-        variable.setId("test id");
-        variable.setProtocol("test protocol");
-        variable.setUsedDiskSize(1L);
-        variable.setTotalDiskSize(2L);
-
-        String expected = 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(variable, "name", "id",
-                "protocol", "usedDiskSize", "totalDiskSize");
-        String result = variable.toString();
-
-        Assert.assertEquals(expected, result);
-    }
-
-}
diff --git 
a/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/SnapshotTest.java
 
b/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/SnapshotTest.java
deleted file mode 100644
index b8476cd8e46..00000000000
--- 
a/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/SnapshotTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.storage.heuristics.presetvariables;
-
-import com.cloud.hypervisor.Hypervisor;
-import 
org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class SnapshotTest {
-
-    @Test
-    public void toStringTestReturnsValidJson() {
-        Snapshot variable = new Snapshot();
-        variable.setName("test name");
-        variable.setSize(1L);
-        variable.setHypervisorType(Hypervisor.HypervisorType.KVM);
-
-        String expected = 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(variable, "name", 
"size",
-                "hypervisorType");
-        String result = variable.toString();
-
-        Assert.assertEquals(expected, result);
-    }
-
-}
diff --git 
a/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/TemplateTest.java
 
b/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/TemplateTest.java
deleted file mode 100644
index 2c1582befb2..00000000000
--- 
a/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/TemplateTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.storage.heuristics.presetvariables;
-
-import com.cloud.hypervisor.Hypervisor;
-import com.cloud.storage.Storage;
-import 
org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class TemplateTest {
-
-    @Test
-    public void toStringTestReturnsValidJson() {
-        Template variable = new Template();
-        variable.setName("test name");
-        variable.setTemplateType(Storage.TemplateType.USER);
-        variable.setHypervisorType(Hypervisor.HypervisorType.KVM);
-        variable.setFormat(Storage.ImageFormat.QCOW2);
-
-        String expected = 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(variable, "name", 
"templateType",
-                "hypervisorType", "format");
-        String result = variable.toString();
-
-        Assert.assertEquals(expected, result);
-    }
-
-}
diff --git 
a/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/VolumeTest.java
 
b/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/VolumeTest.java
deleted file mode 100644
index e74ddc93ec5..00000000000
--- 
a/server/src/test/java/org/apache/cloudstack/storage/heuristics/presetvariables/VolumeTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.cloudstack.storage.heuristics.presetvariables;
-
-import com.cloud.storage.Storage;
-import 
org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-@RunWith(MockitoJUnitRunner.class)
-public class VolumeTest {
-
-    @Test
-    public void toStringTestReturnsValidJson() {
-        Volume variable = new Volume();
-        variable.setName("test name");
-        variable.setFormat(Storage.ImageFormat.QCOW2);
-        variable.setSize(1L);
-
-        String expected = 
ReflectionToStringBuilderUtils.reflectOnlySelectedFields(variable, "name", 
"format",
-                "size");
-        String result = variable.toString();
-
-        Assert.assertEquals(expected, result);
-    }
-
-}
diff --git 
a/utils/src/main/java/org/apache/cloudstack/utils/jsinterpreter/JsInterpreter.java
 
b/utils/src/main/java/org/apache/cloudstack/utils/jsinterpreter/JsInterpreter.java
index 3126da50bca..5f4d6282359 100644
--- 
a/utils/src/main/java/org/apache/cloudstack/utils/jsinterpreter/JsInterpreter.java
+++ 
b/utils/src/main/java/org/apache/cloudstack/utils/jsinterpreter/JsInterpreter.java
@@ -24,7 +24,6 @@ import java.util.Arrays;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
@@ -44,6 +43,7 @@ import javax.script.SimpleBindings;
 import javax.script.SimpleScriptContext;
 
 import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.openjdk.nashorn.api.scripting.ClassFilter;
@@ -107,7 +107,7 @@ public class JsInterpreter implements Closeable {
 
         NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
         this.interpreterName = factory.getEngineName();
-        logger.trace(String.format("Initiating JS interpreter: %s.", 
interpreterName));
+        logger.trace("Initiating JS interpreter: {}.", interpreterName);
 
         setScriptEngineDisablingJavaLanguage(factory);
     }
@@ -136,36 +136,25 @@ public class JsInterpreter implements Closeable {
      */
     public void injectVariable(String key, Object value) {
         if (key == null) return;
-        logger.trace(String.format(injectingLogMessage, key, 
String.valueOf(value)));
+        logger.trace(injectingLogMessage, key, value);
         variables.put(key, value);
     }
 
-    /**
-     * @deprecated Not needed when using Bindings; kept for source 
compatibility.
-     *             Prefer {@link #injectVariable(String, Object)}.
-     */
-    @Deprecated
-    public void injectStringVariable(String key, String value) {
-        if (value == null) {
-            logger.trace(String.format("Not injecting [%s] because its value 
is null.", key));
-            return;
-        }
-        injectVariable(key, value);
-    }
-
     /**
      * Injects the variables via Bindings and executes the script with a fresh 
context.
      * @param script Code to be executed.
      * @return The result of the executed script.
      */
     public Object executeScript(String script) {
-        Objects.requireNonNull(script, "script");
+        if (script == null) {
+            throw new CloudRuntimeException("Script injected into the 
JavaScript interpreter must not be null.");
+        }
 
-        logger.debug(String.format("Executing script [%s].", script));
+        logger.debug("Executing script [{}].", script);
 
         Object result = executeScriptInThread(script);
 
-        logger.debug(String.format("The script [%s] had the following result: 
[%s].", script, result));
+        logger.debug("The script [{}] had the following result: [{}].", 
script, result);
         return result;
     }
 
@@ -193,7 +182,7 @@ public class JsInterpreter implements Closeable {
                 }
                 return result;
             } catch (ScriptException se) {
-                String msg = se.getMessage() == null ? "Script error" : 
se.getMessage();
+                String msg = ObjectUtils.defaultIfNull(se.getMessage(), 
"Script error");
                 throw new ScriptException("Script error: " + msg, 
se.getFileName(), se.getLineNumber(), se.getColumnNumber());
             }
         };
@@ -213,7 +202,7 @@ public class JsInterpreter implements Closeable {
             logger.error(message, e);
             throw new CloudRuntimeException(message, e);
         } catch (ExecutionException e) {
-            Throwable cause = e.getCause() == null ? e : e.getCause();
+            Throwable cause = ObjectUtils.defaultIfNull(e.getCause(), e);
             String message = String.format("Unable to execute script [%s] due 
to [%s]", script, cause.getMessage());
             logger.error(message, cause);
             throw new CloudRuntimeException(message, cause);
diff --git 
a/utils/src/main/java/org/apache/cloudstack/utils/jsinterpreter/TagAsRuleHelper.java
 
b/utils/src/main/java/org/apache/cloudstack/utils/jsinterpreter/TagAsRuleHelper.java
index da3da612a22..b3013567352 100644
--- 
a/utils/src/main/java/org/apache/cloudstack/utils/jsinterpreter/TagAsRuleHelper.java
+++ 
b/utils/src/main/java/org/apache/cloudstack/utils/jsinterpreter/TagAsRuleHelper.java
@@ -17,7 +17,11 @@
 package org.apache.cloudstack.utils.jsinterpreter;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
+import com.cloud.utils.StringUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -27,24 +31,25 @@ public class TagAsRuleHelper {
 
     protected static Logger LOGGER = 
LogManager.getLogger(TagAsRuleHelper.class);
 
-    private static final String PARSE_TAGS = "tags = tags ? tags.split(',') : 
[];";
-
-
     public static boolean interpretTagAsRule(String rule, String tags, long 
timeout) {
-        String script = PARSE_TAGS + rule;
+        List<String> tagsPresetVariable = new ArrayList<>();
+        if (!StringUtils.isEmpty(tags)) {
+            tagsPresetVariable.addAll(Arrays.asList(tags.split(",")));
+        }
+
         try (JsInterpreter jsInterpreter = new JsInterpreter(timeout)) {
-            jsInterpreter.injectVariable("tags", tags);
-            Object scriptReturn = jsInterpreter.executeScript(script);
+            jsInterpreter.injectVariable("tags", tagsPresetVariable);
+            Object scriptReturn = jsInterpreter.executeScript(rule);
             if (scriptReturn instanceof Boolean) {
                 return (Boolean)scriptReturn;
             }
         } catch (IOException ex) {
-            String message = String.format("Error while executing script 
[%s].", script);
+            String message = String.format("Error while executing script 
[%s].", rule);
             LOGGER.error(message, ex);
             throw new CloudRuntimeException(message, ex);
         }
 
-        LOGGER.debug(String.format("Result of tag rule [%s] was not a boolean, 
returning false.", script));
+        LOGGER.debug("Result of tag rule [{}] was not a boolean, returning 
false.", rule);
         return false;
     }
 
diff --git 
a/utils/src/test/java/org/apache/cloudstack/utils/jsinterpreter/JsInterpreterTest.java
 
b/utils/src/test/java/org/apache/cloudstack/utils/jsinterpreter/JsInterpreterTest.java
index a78ee7b908e..e6ef43f2fc1 100644
--- 
a/utils/src/test/java/org/apache/cloudstack/utils/jsinterpreter/JsInterpreterTest.java
+++ 
b/utils/src/test/java/org/apache/cloudstack/utils/jsinterpreter/JsInterpreterTest.java
@@ -159,24 +159,6 @@ public class JsInterpreterTest {
                 Mockito.any(ClassLoader.class), 
Mockito.any(ClassFilter.class));
     }
 
-    @Test
-    public void injectStringVariableTestNullValueDoNothing() {
-        jsInterpreterSpy.variables = new LinkedHashMap<>();
-
-        jsInterpreterSpy.injectStringVariable("a", null);
-
-        Assert.assertTrue(jsInterpreterSpy.variables.isEmpty());
-    }
-
-    @Test
-    public void injectStringVariableTestNotNullValueSurroundWithDoubleQuotes() 
{
-        jsInterpreterSpy.variables = new LinkedHashMap<>();
-
-        jsInterpreterSpy.injectStringVariable("a", "b");
-
-        Assert.assertEquals(jsInterpreterSpy.variables.get("a"), "b");
-    }
-
     @Test
     public void executeScriptTestValidScriptShouldPassWithMixedVariables() {
         try (JsInterpreter jsInterpreter = new JsInterpreter(1000)) {

Reply via email to