package org.rhq.coregui.client.components.configuration; import java.util.List; import com.smartgwt.client.widgets.grid.ListGridRecord; import org.rhq.core.domain.configuration.AbstractPropertyMap; import org.rhq.core.domain.configuration.PropertySimple; import org.rhq.core.domain.configuration.definition.PropertyDefinition; import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple; /** * A ListGridRecord representation of an RHQ PropertyMap. * * @author Ian Springer */ public class PropertyMapListGridRecord extends ListGridRecord { private AbstractPropertyMap propertyMap; private int index; private List<PropertyDefinition> memberPropertyDefinitions; public PropertyMapListGridRecord(AbstractPropertyMap propertyMap, int index, List<PropertyDefinition> memberPropertyDefinitions) { this.propertyMap = propertyMap; this.index = index; this.memberPropertyDefinitions = memberPropertyDefinitions; refresh(); } public AbstractPropertyMap getPropertyMap() { return propertyMap; } public int getIndex() { return index; } public void refresh() { for (PropertyDefinition subDef : memberPropertyDefinitions) { PropertyDefinitionSimple subDefSimple = (PropertyDefinitionSimple) subDef; String propertyName = subDefSimple.getName(); PropertySimple propertySimple = propertyMap.getSimple(propertyName); if ((propertySimple != null) && (propertySimple.getStringValue() != null)) { try { switch (((PropertyDefinitionSimple) subDef).getType()) { case BOOLEAN: setAttribute(propertyName, propertySimple.getBooleanValue()); break; case INTEGER: setAttribute(propertyName, propertySimple.getIntegerValue()); break; case LONG: setAttribute(propertyName, propertySimple.getLongValue()); break; case FLOAT: setAttribute(propertyName, propertySimple.getFloatValue()); break; case DOUBLE: setAttribute(propertyName, propertySimple.getDoubleValue()); break; default: setAttribute(propertyName, propertySimple.getStringValue()); break; } } catch (Exception e) { // value is not valid according to the type specified by the prop def; validation code in // ConfigurationEditor should catch this later on - for now, set the value as a string. setAttribute(propertyName, propertySimple.getStringValue()); } } else { setAttribute(propertyName, (String) null); } } } }