From 7e3b38c5a84f0b98e098fc65b4dffdf7c4a9699f Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 6 Jun 2011 18:02:08 +0100 Subject: [PATCH] CBNL CORE: Add properties flag to control category merging strategy This patch introduces a new property to control the way the import provisioning daemon deals with categories. org.opennms.provisiond.import.categories=[overwrite|merge] The code previously seemed to attempt both by first merging new categories into the object. However later in the call chain it simply overwrites the categories when they are different. --- .../src/main/filtered/etc/opennms.properties | 5 ++ .../java/org/opennms/netmgt/model/OnmsNode.java | 47 ++++++++++--------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/opennms-base-assembly/src/main/filtered/etc/opennms.properties b/opennms-base-assembly/src/main/filtered/etc/opennms.properties index 8683830..172a738 100644 --- a/opennms-base-assembly/src/main/filtered/etc/opennms.properties +++ b/opennms-base-assembly/src/main/filtered/etc/opennms.properties @@ -340,6 +340,11 @@ smslib.serial.polling=true # setting is false (See org.opennms.netmgt.provision.service.ProvisionService) #org.opennms.provisiond.enableDiscovery=false +# This property controls the approach taken the provisiond importer with categories. +# overwrite - accept the importer as the ultimate source of truth +# merge - merge new categories with existing categories +#org.opennms.provisiond.import.categories=overwrite + ###### MAPPING AND GEOCODING ###### # the map implementation to use diff --git a/opennms-model/src/main/java/org/opennms/netmgt/model/OnmsNode.java b/opennms-model/src/main/java/org/opennms/netmgt/model/OnmsNode.java index 2acfdab..ab5d49c 100644 --- a/opennms-model/src/main/java/org/opennms/netmgt/model/OnmsNode.java +++ b/opennms-model/src/main/java/org/opennms/netmgt/model/OnmsNode.java @@ -1017,18 +1017,8 @@ public class OnmsNode extends OnmsEntity implements Serializable, } mergeAgentAttributes(scannedNode); - - mergeAdditionalCategories(scannedNode); } - /** - *

mergeAdditionalCategories

- * - * @param scannedNode a {@link org.opennms.netmgt.model.OnmsNode} object. - */ - public void mergeAdditionalCategories(OnmsNode scannedNode) { - getCategories().addAll(scannedNode.getCategories()); - } /** *

mergeSnmpInterfaces

@@ -1152,16 +1142,6 @@ public class OnmsNode extends OnmsEntity implements Serializable, } /** - *

mergeCategorySet

- * - * @param scannedNode a {@link org.opennms.netmgt.model.OnmsNode} object. - */ - public void mergeCategorySet(OnmsNode scannedNode) { - if (!getCategories().equals(scannedNode.getCategories())) { - setCategories(scannedNode.getCategories()); - } - } - /** * Truly merges the node's geolocaion @@ -1219,12 +1199,35 @@ public class OnmsNode extends OnmsEntity implements Serializable, mergeSnmpInterfaces(scannedNode, deleteMissing); mergeIpInterfaces(scannedNode, eventForwarder, deleteMissing); + + mergeCategories(scannedNode); - mergeCategorySet(scannedNode); - mergeAssets(scannedNode); mergeGeolocation(scannedNode); } + /** + * mergeCategories + * + * @param scannedNode + * + * This function can take one of two approaches, treat the imported node as + * the ultimate truth or attempt to merge new categories into the data model + */ + private void mergeCategories(OnmsNode scannedNode) { + String strategy = System.getProperty("org.opennms.provisiond.import.categories", "overwrite"); + + if (strategy.startsWith("overwrite")) + { + if (!getCategories().equals(scannedNode.getCategories())) { + log().debug("mergeCategories, overwriting with "+scannedNode.getCategories()); + setCategories(scannedNode.getCategories()); + } + } else { + log().debug("mergeCategories, adding "+scannedNode.getCategories()); + getCategories().addAll(scannedNode.getCategories()); + } + } + } -- 1.7.5.4