modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ResourceTypeFingerprint.java
| 51 +++++++++-
1 file changed, 46 insertions(+), 5 deletions(-)
New commits:
commit 1d6c859d2b8aeffec2e2a35ab29ed578f5e671cb
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Fri Jun 8 12:51:28 2012 +0200
[BZ 829944] - make the resource type fingerprint robust against ordering
of different kinds of definitions in the resource type.
(cherry picked from commit a48f5cda6610222c37b42fb80d29fa589a864ab5)
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ResourceTypeFingerprint.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ResourceTypeFingerprint.java
index 14ccabf..eaaba89 100644
---
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ResourceTypeFingerprint.java
+++
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/util/ResourceTypeFingerprint.java
@@ -19,7 +19,11 @@
package org.rhq.bindings.util;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
import java.util.Map;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
@@ -43,6 +47,36 @@ public class ResourceTypeFingerprint {
private String digest;
+ private static final Comparator<MeasurementDefinition>
MEASUREMENT_DEFINITION_COMPARATOR = new Comparator<MeasurementDefinition>() {
+ @Override
+ public int compare(MeasurementDefinition o1, MeasurementDefinition o2) {
+ return o1.getName().compareTo(o2.getName());
+ }
+ };
+
+ private static final Comparator<OperationDefinition>
OPERATION_DEFINITION_COMPARATOR = new Comparator<OperationDefinition>() {
+ @Override
+ public int compare(OperationDefinition o1, OperationDefinition o2) {
+ return o1.getName().compareTo(o2.getName());
+ }
+ };
+
+ private static final Comparator<PackageType> PACKAGE_TYPE_COMPARATOR = new
Comparator<PackageType>() {
+ @Override
+ public int compare(PackageType o1, PackageType o2) {
+ return o1.getName().compareTo(o2.getName());
+ }
+ };
+
+ private static final Comparator<PropertyDefinition>
PROPERTY_DEFINITION_COMPARATOR = new Comparator<PropertyDefinition>() {
+
+ @Override
+ public int compare(PropertyDefinition o1, PropertyDefinition o2) {
+ return o1.getName().compareTo(o2.getName());
+ }
+
+ };
+
public ResourceTypeFingerprint(ResourceType rt,
Collection<MeasurementDefinition> measurements,
Collection<OperationDefinition> operations, Collection<PackageType>
packageTypes,
ConfigurationDefinition pluginConfigurationDefinition, ConfigurationDefinition
resourceConfigurationDefinition) {
@@ -101,7 +135,9 @@ public class ResourceTypeFingerprint {
if (defs == null) {
bld.append("null");
} else {
- for (MeasurementDefinition d : defs) {
+ List<MeasurementDefinition> adefs = new
ArrayList<MeasurementDefinition>(defs);
+ Collections.sort(adefs, MEASUREMENT_DEFINITION_COMPARATOR);
+ for (MeasurementDefinition d : adefs) {
addRepresentation(d, bld);
}
}
@@ -111,7 +147,9 @@ public class ResourceTypeFingerprint {
if (defs == null) {
bld.append("null");
} else {
- for (OperationDefinition d : defs) {
+ List<OperationDefinition> odefs = new
ArrayList<OperationDefinition>(defs);
+ Collections.sort(odefs, OPERATION_DEFINITION_COMPARATOR);
+ for (OperationDefinition d : odefs) {
addRepresentation(d, bld);
}
}
@@ -121,7 +159,9 @@ public class ResourceTypeFingerprint {
if (defs == null) {
bld.append("null");
} else {
- for (PackageType d : defs) {
+ List<PackageType> pdefs = new ArrayList<PackageType>(defs);
+ Collections.sort(pdefs, PACKAGE_TYPE_COMPARATOR);
+ for (PackageType d : pdefs) {
addRepresentation(d, bld);
}
}
@@ -150,8 +190,9 @@ public class ResourceTypeFingerprint {
}
private static void addRepresentation(Map<String, PropertyDefinition> defs,
StringBuilder bld) {
- for (Map.Entry<String, PropertyDefinition> entry : defs.entrySet()) {
- PropertyDefinition def = entry.getValue();
+ List<PropertyDefinition> pdefs = new
ArrayList<PropertyDefinition>(defs.values());
+ Collections.sort(pdefs, PROPERTY_DEFINITION_COMPARATOR);
+ for (PropertyDefinition def : pdefs) {
addRepresentation(def, bld);
}
}
Show replies by date