modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionEnumeration.java | 16
modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java | 20
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java | 54 +
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateConfigurationSubsystemTest.java | 321 ++++------
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateSubsytemTestBase.java | 4
5 files changed, 222 insertions(+), 193 deletions(-)
New commits:
commit e782aced9325fee8159672fb037eb96c3da74050
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Tue Apr 27 11:09:57 2010 -0400
Additional check for proper prop def merging
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
index 238c3c6..e4c608c 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
@@ -445,13 +445,20 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
* @param newProperty the new prop that should replace the existing prop
*/
private void replaceListPropertyMemberDefinition(PropertyDefinitionList exList, PropertyDefinitionList newList) {
- PropertyDefinition doomedMember = exList.getMemberDefinition();
+ PropertyDefinition doomedMember = null;
+
+ // only remove the existing member if it is a different entity
+ if (exList.getMemberDefinition().getId() != newList.getMemberDefinition().getId()) {
+ doomedMember = exList.getMemberDefinition();
+ }
exList.setMemberDefinition(newList.getMemberDefinition());
exList.setMax(newList.getMax());
exList.setMin(newList.getMin());
- entityManager.remove(doomedMember);
+ if (null != doomedMember) {
+ entityManager.remove(doomedMember);
+ }
entityManager.merge(exList);
entityManager.flush();
}
commit 36b1e605cad08f003af34fb8d51733142637534e
Merge: 229a6c4... cc8f2db...
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Tue Apr 27 10:34:00 2010 -0400
Merge branch 'master' into master-jay
commit 229a6c47e809481ea9011698dc46a58ca574875f
Merge: d3fa4b8... d3cc735...
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Tue Apr 27 09:45:34 2010 -0400
Merge branch 'master' into master-jay
commit d3fa4b8aceb726dc8eda7c6164e4693cb415512c
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Tue Apr 27 09:43:59 2010 -0400
Test failure showed some bad behavior with respect to the handling
of PropDefEnumerations, their cleanup and their order indexing. To
resolve I've basically moved ordering logic from the PDE to the
PropDefSimple, which uses the enumerated values. In more detail:
- remove the PrePersist/PreUpdate orderIndex setting from PDE. this
didn't always work, and was the source of the test failure, it relied
on the encompassing PDS being fully formed, which it may not be.
- Add logic to PDS to assign sane orderIndexes at the time the enumerations
are set/added/removed.
- update the config metadata update logic analogously, and improve
cleanup of obsolete config defs.
- updated and reenabled the previously failing tests
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionEnumeration.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionEnumeration.java
index 3781d13..fbcabb4 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionEnumeration.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionEnumeration.java
@@ -31,8 +31,6 @@ import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
-import javax.persistence.PrePersist;
-import javax.persistence.PreUpdate;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlAccessType;
@@ -63,7 +61,7 @@ public class PropertyDefinitionEnumeration implements Serializable {
private String value;
@Column(name = "ORDER_INDEX", nullable = false)
- private int orderIndex;
+ private int orderIndex = -1;
@Column(name = "IS_DEFAULT")
private boolean isDefault;
@@ -87,11 +85,13 @@ public class PropertyDefinitionEnumeration implements Serializable {
this.isDefault = isDefault;
}
- @PrePersist
- @PreUpdate
- public void updateOrder() {
- this.orderIndex = this.propertyDefinitionSimple.getEnumeratedValues().indexOf(this);
- }
+ // @PrePersist
+ // @PreUpdate
+ // public void updateOrder() {
+ // if (this.orderIndex < 0) {
+ // this.orderIndex = this.propertyDefinitionSimple.getEnumeratedValues().indexOf(this);
+ // }
+ // }
public PropertyDefinitionSimple getPropertyDefinitionSimple() {
return propertyDefinitionSimple;
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
index 3a7be2c..a27b677 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
@@ -157,12 +157,30 @@ public class PropertyDefinitionSimple extends PropertyDefinition {
public void setEnumeratedValues(List<PropertyDefinitionEnumeration> enumeratedValues, boolean allowCustomEnumValue) {
this.enumeratedValues = enumeratedValues;
this.allowCustomEnumeratedValue = allowCustomEnumValue;
+ ensureOrdering();
}
public void addEnumeratedValues(PropertyDefinitionEnumeration... enumerations) {
for (PropertyDefinitionEnumeration enumeration : enumerations) {
- getEnumeratedValues().add(enumeration);
enumeration.setPropertyDefinitionSimple(this);
+ getEnumeratedValues().add(enumeration);
+ }
+ ensureOrdering();
+ }
+
+ public void removeEnumeratedValues(PropertyDefinitionEnumeration... enumerations) {
+ for (PropertyDefinitionEnumeration enumeration : enumerations) {
+ getEnumeratedValues().remove(enumeration);
+ }
+ ensureOrdering();
+ }
+
+ private void ensureOrdering() {
+ if (null == this.enumeratedValues) {
+ return;
+ }
+ for (int i = 0, size = getEnumeratedValues().size(); (i < size); ++i) {
+ getEnumeratedValues().get(i).setOrderIndex(i);
}
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
index 4abf76f..238c3c6 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
@@ -30,6 +30,7 @@ import javax.persistence.PersistenceContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.Property;
import org.rhq.core.domain.configuration.PropertySimple;
@@ -274,8 +275,7 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
* @param existingProperties list of existing properties to inspect for potential removal
*/
private void removeNoLongerUsedProperties(ConfigurationDefinition newConfigDef,
- ConfigurationDefinition existingConfigDef,
- List<PropertyDefinition> existingProperties) {
+ ConfigurationDefinition existingConfigDef, List<PropertyDefinition> existingProperties) {
List<PropertyDefinition> propDefsToDelete = new ArrayList<PropertyDefinition>();
for (PropertyDefinition existingPropDef : existingProperties) {
PropertyDefinition newPropDef = newConfigDef.get(existingPropDef.getName());
@@ -350,14 +350,8 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
PropertyDefinitionList exList = (PropertyDefinitionList) existingProperty;
if (newProperty instanceof PropertyDefinitionList) {
PropertyDefinitionList newList = (PropertyDefinitionList) newProperty;
- exList.setMemberDefinition(newList.getMemberDefinition());
- exList.setMax(newList.getMax());
- exList.setMin(newList.getMax());
- // what about parentPropertyListDefinition ?
-
- // TODO recursively update the member ?
- } else // simple property or map-property
- {
+ replaceListPropertyMemberDefinition(exList, newList);
+ } else { // simple property or map-property
replaceProperty(existingProperty, newProperty);
}
} else if (existingProperty instanceof PropertyDefinitionSimple) {
@@ -374,12 +368,11 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
List<PropertyDefinitionEnumeration> toDelete = missingInFirstList(newOptions, existingOptions);
List<PropertyDefinitionEnumeration> changed = intersection(existingOptions, newOptions);
- // TODO GH: This still doesn't properly reorder options, but at least it doesn't leave any nulls
- // and therefore doesn't blow up the renderer
- // delete old ones (first so we don't leave index holes later)
+ // sync the enumerated values and then merge the changes into the PDS, I think this
+ // solves previous issues with orderIndex values.
+ // First remove obsolete values
for (PropertyDefinitionEnumeration pde : toDelete) {
- existingOptions.remove(pde);
- entityManager.remove(pde);
+ existingPDS.removeEnumeratedValues(pde);
}
// save new ones
@@ -388,16 +381,16 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
entityManager.persist(pde);
}
+ // update others
for (PropertyDefinitionEnumeration pde : changed) {
for (PropertyDefinitionEnumeration nPde : newOptions) {
if (nPde.equals(pde)) {
pde.setDefault(nPde.isDefault());
- pde.setOrderIndex(nPde.getOrderIndex());
pde.setValue(nPde.getValue());
- entityManager.merge(pde);
}
}
}
+ entityManager.merge(existingPDS);
// handle <constraint> [0..*]
@@ -444,6 +437,26 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
}
/**
+ * This replaces the member property for the list. If it is a nested structure the whole thing
+ * is replaced from the top. The previous member property is removed. cascading should remove a nested
+ * structure.
+ *
+ * @param existingProperty the existing prop
+ * @param newProperty the new prop that should replace the existing prop
+ */
+ private void replaceListPropertyMemberDefinition(PropertyDefinitionList exList, PropertyDefinitionList newList) {
+ PropertyDefinition doomedMember = exList.getMemberDefinition();
+
+ exList.setMemberDefinition(newList.getMemberDefinition());
+ exList.setMax(newList.getMax());
+ exList.setMin(newList.getMin());
+
+ entityManager.remove(doomedMember);
+ entityManager.merge(exList);
+ entityManager.flush();
+ }
+
+ /**
* Return a list containing those element that are in reference, but not in first. Both input lists are not modified
*
* @param first
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateConfigurationSubsystemTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateConfigurationSubsystemTest.java
index 0dc958a..4a07bb7 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateConfigurationSubsystemTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateConfigurationSubsystemTest.java
@@ -581,187 +581,176 @@ public class UpdateConfigurationSubsystemTest extends UpdateSubsytemTestBase {
}
}
- // TODO (jshaughn) For some reason this test is creating a ConfigDef that Hibernate chokes on. Need
- // to come back and figure out why. Perhaps it's oracle specific... Also, if activated update
- // cleanup routine in TestBase to delete myPlatform6.
- @Test(enabled = false)
- public void testListProperty() throws Exception {
- // Note, plugins are registered in new transactions. for tests, this means
- // you can't do everything in a trans and roll back at the end. You must clean up
- // manually.
+ @Test(enabled = ENABLED)
+ public void testListOfLists() throws Exception {
try {
- { // extra block for variable scoping purposes
- registerPlugin("propertyList-v1.xml");
- ResourceType platform = getResourceType("myPlatform6");
- getTransactionManager().begin();
- EntityManager em = getEntityManager();
- platform = em.find(ResourceType.class, platform.getId());
-
- ConfigurationDefinition cd = platform.getResourceConfigurationDefinition();
- Map<String, PropertyDefinition> propDefs = cd.getPropertyDefinitions();
- assert propDefs.size() == 4 : "Expected to see 4 <list-property>s in v1, but got " + propDefs.size();
- for (PropertyDefinition def : propDefs.values()) {
- assert def instanceof PropertyDefinitionList : "PropertyDefinition " + def.getName()
- + " is no list-property in v1";
- PropertyDefinitionList pdl = (PropertyDefinitionList) def;
- PropertyDefinition member = pdl.getMemberDefinition();
-
- if (pdl.getName().equals("myList1")) {
- assert pdl.getDescription().equals("Just a simple list");
- assert member instanceof PropertyDefinitionSimple : "Expected the member of myList1 to be a simple property in v1";
- PropertyDefinitionSimple pds = (PropertyDefinitionSimple) member;
- assert pds.getName().equals("foo");
- } else if (pdl.getName().equals("myList2")) {
- assert member instanceof PropertyDefinitionList : "Expected the member of myList2 to be a list property in v1";
- } else if (pdl.getName().equals("myList3")) {
- assert member instanceof PropertyDefinitionSimple : "Expected the member of myList3 to be a simple property in v1";
- PropertyDefinitionSimple pds = (PropertyDefinitionSimple) member;
- assert pds.getName().equals("baz");
- } else if (pdl.getName().equals("rec1")) {
- assert member instanceof PropertyDefinitionList : "Expected the member of rc1 to be a list property in v1";
- PropertyDefinitionList pdl2 = (PropertyDefinitionList) member;
-
- // TODO check min/max for the lists on the way. Commented out. See JBNADM-1595
- assert pdl2.getName().equals("rec2");
-
- // assert pdl2.getMin()==2 : "Expected rec2:min to be 2, but it was " + pdl2.getMin();
- // assert pdl2.getMax()==20;
- pdl2 = (PropertyDefinitionList) pdl2.getMemberDefinition();
- assert pdl2.getName().equals("rec3");
-
- // assert pdl2.getMin()==3;
- // assert pdl2.getMax()==30;
- pdl2 = (PropertyDefinitionList) pdl2.getMemberDefinition();
- assert pdl2.getName().equals("rec4");
-
- // assert pdl2.getMin()==4;
- // assert pdl2.getMax()==40;
- assert pdl2.getMemberDefinition() instanceof PropertyDefinitionSimple;
- PropertyDefinitionSimple pds = (PropertyDefinitionSimple) pdl2.getMemberDefinition();
- assert pds.getName().equals("rec5");
- assert pds.getDescription().equals("Deeply nested");
- List<PropertyDefinitionEnumeration> options = pds.getEnumeratedValues();
- assert options.size() == 4;
- int found = 0;
- String[] optionVals = new String[] { "a", "b", "c", "d" };
- for (PropertyDefinitionEnumeration option : options) {
- if (containedIn(option.getValue(), optionVals)) {
- found++;
- }
+ // extra block for variable scoping purposes
+ registerPlugin("propertyList-v1.xml");
+ ResourceType platform = getResourceType("myPlatform6");
+ getTransactionManager().begin();
+ EntityManager em = getEntityManager();
+ platform = em.find(ResourceType.class, platform.getId());
+ ConfigurationDefinition cd = platform.getResourceConfigurationDefinition();
+ Map<String, PropertyDefinition> propDefs = cd.getPropertyDefinitions();
+ assert propDefs.size() == 4 : "Expected to see 4 <list-property>s in v1, but got " + propDefs.size();
+ for (PropertyDefinition def : propDefs.values()) {
+ assert def instanceof PropertyDefinitionList : "PropertyDefinition " + def.getName()
+ + " is no list-property in v1";
+ PropertyDefinitionList pdl = (PropertyDefinitionList) def;
+ PropertyDefinition member = pdl.getMemberDefinition();
+
+ if (pdl.getName().equals("myList1")) {
+ assert pdl.getDescription().equals("Just a simple list");
+ assert member instanceof PropertyDefinitionSimple : "Expected the member of myList1 to be a simple property in v1";
+ PropertyDefinitionSimple pds = (PropertyDefinitionSimple) member;
+ assert pds.getName().equals("foo");
+ } else if (pdl.getName().equals("myList2")) {
+ assert member instanceof PropertyDefinitionList : "Expected the member of myList2 to be a list property in v1";
+ } else if (pdl.getName().equals("myList3")) {
+ assert member instanceof PropertyDefinitionSimple : "Expected the member of myList3 to be a simple property in v1";
+ PropertyDefinitionSimple pds = (PropertyDefinitionSimple) member;
+ assert pds.getName().equals("baz");
+ } else if (pdl.getName().equals("rec1")) {
+ assert member instanceof PropertyDefinitionList : "Expected the member of rc1 to be a list property in v1";
+ PropertyDefinitionList pdl2 = (PropertyDefinitionList) member;
+
+ // TODO check min/max for the lists on the way. Commented out. See JBNADM-1595
+ assert pdl2.getName().equals("rec2");
+
+ // assert pdl2.getMin()==2 : "Expected rec2:min to be 2, but it was " + pdl2.getMin();
+ // assert pdl2.getMax()==20;
+ pdl2 = (PropertyDefinitionList) pdl2.getMemberDefinition();
+ assert pdl2.getName().equals("rec3");
+
+ // assert pdl2.getMin()==3;
+ // assert pdl2.getMax()==30;
+ pdl2 = (PropertyDefinitionList) pdl2.getMemberDefinition();
+ assert pdl2.getName().equals("rec4");
+
+ // assert pdl2.getMin()==4;
+ // assert pdl2.getMax()==40;
+ assert pdl2.getMemberDefinition() instanceof PropertyDefinitionSimple;
+ PropertyDefinitionSimple pds = (PropertyDefinitionSimple) pdl2.getMemberDefinition();
+ assert pds.getName().equals("rec5");
+ assert pds.getDescription().equals("Deeply nested");
+ List<PropertyDefinitionEnumeration> options = pds.getEnumeratedValues();
+ assert options.size() == 4;
+ int found = 0;
+ String[] optionVals = new String[] { "a", "b", "c", "d" };
+ for (PropertyDefinitionEnumeration option : options) {
+ if (containedIn(option.getValue(), optionVals)) {
+ found++;
}
-
- assert found == 4;
- Set<Constraint> constraints = pds.getConstraints();
- assert constraints.size() == 1;
- } else {
- assert true == false : "Unknown list-definition in v1: " + pdl.getName();
}
+
+ assert found == 4;
+ Set<Constraint> constraints = pds.getConstraints();
+ assert constraints.size() == 1;
+ } else {
+ assert true == false : "Unknown list-definition in v1: " + pdl.getName();
}
- getTransactionManager().rollback();
}
+ getTransactionManager().rollback();
/*
* Deploy v2 of the plugin
*/
- { // extra block for variable scoping purposes
- registerPlugin("propertyList-v2.xml");
- ResourceType platform = getResourceType("myPlatform6");
- getTransactionManager().begin();
- EntityManager em = getEntityManager();
- platform = em.find(ResourceType.class, platform.getId());
-
- ConfigurationDefinition cd = platform.getResourceConfigurationDefinition();
- Map<String, PropertyDefinition> propDefs = cd.getPropertyDefinitions();
- assert propDefs.size() == 4 : "Expected to see 4 <list-property>s in v2, but got " + propDefs.size();
- for (PropertyDefinition def : propDefs.values()) {
- assert def instanceof PropertyDefinitionList : "PropertyDefinition " + def.getName()
- + " is no list-property in v2";
- PropertyDefinitionList pdl = (PropertyDefinitionList) def;
- PropertyDefinition member = pdl.getMemberDefinition();
-
- if (pdl.getName().equals("myList2")) {
- assert member instanceof PropertyDefinitionList : "Expected the member of myList2 to be a list property in v2";
- } else if (pdl.getName().equals("myList3")) {
- assert member instanceof PropertyDefinitionList : "Expected the member of myList3 to be a list property in v2";
- PropertyDefinitionList pds = (PropertyDefinitionList) member;
- assert pds.getName().equals("baz");
- assert pds.getDescription().equals("myList3:baz");
- assert pds.getMemberDefinition() instanceof PropertyDefinitionSimple : "Expected the member of list3:baz to be a simple property in v2";
- } else if (pdl.getName().equals("myList4")) {
- assert pdl.getDescription().equals("Just a simple list");
- assert member instanceof PropertyDefinitionSimple : "Expected the member of myList4 to be a simple property in v2";
- PropertyDefinitionSimple pds = (PropertyDefinitionSimple) member;
- assert pds.getName().equals("foo");
- } else if (pdl.getName().equals("rec1")) {
- assert member instanceof PropertyDefinitionList : "Expected the member of rec1 to be a list property in v2";
- PropertyDefinitionList pdl2 = (PropertyDefinitionList) member;
- assert pdl2.getName().equals("rec2");
-
- /*
- * PropertyDefinitionList.getMin()/getMax() are commented out. See JBNADM1595
- */
+ registerPlugin("propertyList-v2.xml");
+ platform = getResourceType("myPlatform6");
+ getTransactionManager().begin();
+ em = getEntityManager();
+ platform = em.find(ResourceType.class, platform.getId());
- // assert pdl2.getMin()==12 : "Expected rec2:min to be 12, but it was " + pdl2.getMin();
- // assert pdl2.getMax()==200;
- pdl2 = (PropertyDefinitionList) pdl2.getMemberDefinition();
- assert pdl2.getName().equals("rec3+");
-
- // assert pdl2.getMin()==13;
- // assert pdl2.getMax()==300;
- pdl2 = (PropertyDefinitionList) pdl2.getMemberDefinition();
- assert pdl2.getName().equals("rec4");
-
- // assert pdl2.getMin()==14;
- // assert pdl2.getMax()==400;
- assert pdl2.getMemberDefinition() instanceof PropertyDefinitionSimple;
- PropertyDefinitionSimple pds = (PropertyDefinitionSimple) pdl2.getMemberDefinition();
- assert pds.getName().equals("rec5");
- assert pds.getDescription().equals("Nested deeply");
- List<PropertyDefinitionEnumeration> options = pds.getEnumeratedValues();
- assert options.size() == 5;
- int found = 0;
- String[] optionVals = new String[] { "b", "c", "d", "x", "z" };
- for (PropertyDefinitionEnumeration option : options) {
- if (containedIn(option.getValue(), optionVals)) {
- found++;
- }
+ cd = platform.getResourceConfigurationDefinition();
+ propDefs = cd.getPropertyDefinitions();
+ assert propDefs.size() == 4 : "Expected to see 4 <list-property>s in v2, but got " + propDefs.size();
+ for (PropertyDefinition def : propDefs.values()) {
+ assert def instanceof PropertyDefinitionList : "PropertyDefinition " + def.getName()
+ + " is no list-property in v2";
+ PropertyDefinitionList pdl = (PropertyDefinitionList) def;
+ PropertyDefinition member = pdl.getMemberDefinition();
+
+ if (pdl.getName().equals("myList2")) {
+ assert member instanceof PropertyDefinitionList : "Expected the member of myList2 to be a list property in v2";
+ } else if (pdl.getName().equals("myList3")) {
+ assert member instanceof PropertyDefinitionList : "Expected the member of myList3 to be a list property in v2";
+ PropertyDefinitionList pds = (PropertyDefinitionList) member;
+ assert pds.getName().equals("baz");
+ assert pds.getDescription().equals("myList3:baz");
+ assert pds.getMemberDefinition() instanceof PropertyDefinitionSimple : "Expected the member of list3:baz to be a simple property in v2";
+ } else if (pdl.getName().equals("myList4")) {
+ assert pdl.getDescription().equals("Just a simple list");
+ assert member instanceof PropertyDefinitionSimple : "Expected the member of myList4 to be a simple property in v2";
+ PropertyDefinitionSimple pds = (PropertyDefinitionSimple) member;
+ assert pds.getName().equals("foo");
+ } else if (pdl.getName().equals("rec1")) {
+ assert member instanceof PropertyDefinitionList : "Expected the member of rec1 to be a list property in v2";
+ PropertyDefinitionList pdl2 = (PropertyDefinitionList) member;
+ assert pdl2.getName().equals("rec2");
+
+ /*
+ * PropertyDefinitionList.getMin()/getMax() are commented out. See JBNADM1595
+ */
+
+ // assert pdl2.getMin()==12 : "Expected rec2:min to be 12, but it was " + pdl2.getMin();
+ // assert pdl2.getMax()==200;
+ pdl2 = (PropertyDefinitionList) pdl2.getMemberDefinition();
+ assert pdl2.getName().equals("rec3+");
+
+ // assert pdl2.getMin()==13;
+ // assert pdl2.getMax()==300;
+ pdl2 = (PropertyDefinitionList) pdl2.getMemberDefinition();
+ assert pdl2.getName().equals("rec4");
+
+ // assert pdl2.getMin()==14;
+ // assert pdl2.getMax()==400;
+ assert pdl2.getMemberDefinition() instanceof PropertyDefinitionSimple;
+ PropertyDefinitionSimple pds = (PropertyDefinitionSimple) pdl2.getMemberDefinition();
+ assert pds.getName().equals("rec5");
+ assert pds.getDescription().equals("Nested deeply");
+ List<PropertyDefinitionEnumeration> options = pds.getEnumeratedValues();
+ assert options.size() == 5;
+ int found = 0;
+ String[] optionVals = new String[] { "b", "c", "d", "x", "z" };
+ for (PropertyDefinitionEnumeration option : options) {
+ if (containedIn(option.getValue(), optionVals)) {
+ found++;
}
+ }
- assert found == optionVals.length;
- Set<Constraint> constraints = pds.getConstraints();
- assert constraints.size() == 2;
- for (Constraint constraint : constraints) {
- if (constraint instanceof IntegerRangeConstraint) {
- IntegerRangeConstraint irc = (IntegerRangeConstraint) constraint;
- assert irc != null : "Integer-constraint was null, but should not be";
- // See JBNADM-1596/97
- assert irc.getDetails().equals("-2#10");
- // TODO (ips, 3/31/10): The below is a workaround for IntegerRangeConstraint.onLoad() not being called by Hibernate.
- irc.setDetails(irc.getDetails());
- assert irc.getMaximum() == 10;
- assert irc.getMinimum() == -2;
- } else if (constraint instanceof FloatRangeConstraint) {
- FloatRangeConstraint frc = (FloatRangeConstraint) constraint;
- assert frc != null : "Float-constraint was null, but should not be";
- // See JBNADM-1596/97
- assert frc.getDetails().equals("10.0#5.0");
- // TODO (ips, 3/31/10): The below is a workaround for FloatRangeConstraint.onLoad() not being called by Hibernate.
- frc.setDetails(frc.getDetails());
- assert frc.getMinimum() == 10; // TODO change when JBNADM-1597 is being worked on
- assert frc.getMaximum() == 5;
-
- } else {
- assert true == false : "Unknown constraint type encountered";
- }
+ assert found == optionVals.length;
+ Set<Constraint> constraints = pds.getConstraints();
+ assert constraints.size() == 2;
+ for (Constraint constraint : constraints) {
+ if (constraint instanceof IntegerRangeConstraint) {
+ IntegerRangeConstraint irc = (IntegerRangeConstraint) constraint;
+ assert irc != null : "Integer-constraint was null, but should not be";
+ // See JBNADM-1596/97
+ assert irc.getDetails().equals("-2#10");
+ // TODO (ips, 3/31/10): The below is a workaround for IntegerRangeConstraint.onLoad() not being called by Hibernate.
+ irc.setDetails(irc.getDetails());
+ assert irc.getMaximum() == 10;
+ assert irc.getMinimum() == -2;
+ } else if (constraint instanceof FloatRangeConstraint) {
+ FloatRangeConstraint frc = (FloatRangeConstraint) constraint;
+ assert frc != null : "Float-constraint was null, but should not be";
+ // See JBNADM-1596/97
+ assert frc.getDetails().equals("10.0#5.0");
+ // TODO (ips, 3/31/10): The below is a workaround for FloatRangeConstraint.onLoad() not being called by Hibernate.
+ frc.setDetails(frc.getDetails());
+ assert frc.getMinimum() == 10; // TODO change when JBNADM-1597 is being worked on
+ assert frc.getMaximum() == 5;
+
+ } else {
+ assert true == false : "Unknown constraint type encountered";
}
- } else {
- assert true == false : "Unknown list-definition in v2: " + pdl.getName();
}
- getTransactionManager().rollback();
+ } else {
+ assert true == false : "Unknown list-definition in v2: " + pdl.getName();
}
-
- // done with v2
}
+ getTransactionManager().rollback();
+
} finally {
if (Status.STATUS_NO_TRANSACTION != getTransactionManager().getStatus()) {
getTransactionManager().rollback();
@@ -771,7 +760,7 @@ public class UpdateConfigurationSubsystemTest extends UpdateSubsytemTestBase {
try {
cleanupTest();
} catch (Exception e) {
- System.out.println("CANNNOT CLEAN UP TEST: " + this.getClass().getSimpleName() + ".testListProperty");
+ System.out.println("CANNNOT CLEAN UP TEST: " + this.getClass().getSimpleName() + ".testListOfLists");
}
}
}
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateSubsytemTestBase.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateSubsytemTestBase.java
index cb3f029..6b5c627 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateSubsytemTestBase.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/metadata/test/UpdateSubsytemTestBase.java
@@ -125,6 +125,7 @@ public class UpdateSubsytemTestBase extends AbstractEJB3Test {
Subject overlord = LookupUtil.getSubjectManager().getOverlord();
ResourceTypeCriteria resourceTypeCriteria = new ResourceTypeCriteria();
+ resourceTypeCriteria.setStrict(true);
resourceTypeCriteria.addFilterName(typeName);
resourceTypeCriteria.addFilterPluginName(pluginName);
@@ -274,7 +275,7 @@ public class UpdateSubsytemTestBase extends AbstractEJB3Test {
cleanupResourceType("myPlatform3");
cleanupResourceType("myPlatform4");
cleanupResourceType("myPlatform5");
- //cleanupResourceType("myPlatform6");
+ cleanupResourceType("myPlatform6");
cleanupResourceType("myPlatform7");
cleanupResourceType("ops");
cleanupResourceType("testApp1");
@@ -323,6 +324,7 @@ public class UpdateSubsytemTestBase extends AbstractEJB3Test {
// delete any resources first
ResourceCriteria c = new ResourceCriteria();
+ c.setStrict(true);
c.addFilterResourceTypeId(rt.getId());
c.addFilterInventoryStatus(InventoryStatus.NEW);
List<Resource> doomedResources = resourceManager.findResourcesByCriteria(overlord, c);