private static void populateManagedPropertyFromProperty( Property property, PropertyDefinition propertyDefinition, @NotNull ManagedProperty managedProperty, @Nullable PropertySimple customProperty) { // See if there is a custom adapter defined for this property. PropertyAdapter propertyAdapter = PropertyAdapterFactory.getCustomPropertyAdapter(customProperty); MetaValue metaValue = managedProperty.getValue(); if (metaValue != null) { LOG.trace( "Populating existing MetaValue of type " + metaValue.getMetaType() + " from RHQ property " + property + " with definition " + propertyDefinition + "..."); if (propertyAdapter == null) { propertyAdapter = PropertyAdapterFactory.getPropertyAdapter(metaValue); } propertyAdapter.populateMetaValueFromProperty(property, metaValue, propertyDefinition); } else { MetaType metaType = managedProperty.getMetaType(); if (propertyAdapter == null) { propertyAdapter = PropertyAdapterFactory.getPropertyAdapter(metaType); } LOG.trace( "Converting property " + property + " with definition " + propertyDefinition + " to MetaValue of type " + metaType + "..."); metaValue = propertyAdapter.convertToMetaValue(property, propertyDefinition, metaType); managedProperty.setValue(metaValue); } }
public static Configuration convertManagedObjectToConfiguration( Map<String, ManagedProperty> managedProperties, Map<String, PropertySimple> customProps, ResourceType resourceType) { Configuration config = new Configuration(); ConfigurationDefinition configDef = resourceType.getResourceConfigurationDefinition(); Map<String, PropertyDefinition> propDefs = configDef.getPropertyDefinitions(); Set<String> propNames = managedProperties.keySet(); for (String propName : propNames) { PropertyDefinition propertyDefinition = propDefs.get(propName); ManagedProperty managedProperty = managedProperties.get(propName); if (propertyDefinition == null) { if (!managedProperty.hasViewUse(ViewUse.STATISTIC)) LOG.debug( resourceType + " does not define a property corresponding to ManagedProperty '" + propName + "'."); continue; } if (managedProperty == null) { // This should never happen, but don't let it blow us up. LOG.error( "ManagedProperty '" + propName + "' has a null value in the ManagedProperties Map."); continue; } MetaValue metaValue = managedProperty.getValue(); if (managedProperty.isRemoved() || metaValue == null) { // Don't even add a Property to the Configuration if the ManagedProperty is flagged as // removed or has a // null value. continue; } PropertySimple customProp = customProps.get(propName); PropertyAdapter propertyAdapter = PropertyAdapterFactory.getCustomPropertyAdapter(customProp); if (propertyAdapter == null) { propertyAdapter = PropertyAdapterFactory.getPropertyAdapter(metaValue); } if (propertyAdapter == null) { LOG.error( "Unable to find a PropertyAdapter for ManagedProperty '" + propName + "' with MetaType [" + metaValue.getMetaType() + "] for ResourceType '" + resourceType.getName() + "'."); continue; } Property property; try { property = propertyAdapter.convertToProperty(metaValue, propertyDefinition); } catch (RuntimeException e) { throw new RuntimeException( "Failed to convert managed property " + managedProperty + " to RHQ property of type " + propertyDefinition + ".", e); } config.put(property); } return config; }