private static void addRepresentation(PropertyDefinitionMap pm, StringBuilder bld) { bld.append(pm.getName()); addRepresentation(pm.getMap(), bld); }
protected PropertyMap createPropertyMap(PropertyDefinitionMap propDefMap, Augeas augeas, AugeasNode node) { PropertyMap propMap = new PropertyMap(propDefMap.getName()); populatePropertyMap(propDefMap, propMap, augeas, node); return propMap; }
public void updateMap(PropertyDefinitionMap propDefMap, Property prop, AugeasNode mapNode, int seq) throws AugeasRhqException { PropertyMap map = null; if (prop instanceof PropertyList) { PropertyList lst = (PropertyList) prop; List<Property> props = lst.getList(); map = (PropertyMap) props.get(seq - 1); } if (prop instanceof PropertyMap) { PropertyMap mp = (PropertyMap) prop; map = (PropertyMap) mp.get(propDefMap.getName()); } List<AugeasNode> nodes = tree.matchRelative(mapNode, propDefMap.getName()); AugeasNode node; int i; if (nodes.isEmpty() || nodes.size() < seq) { node = tree.createNode(mapNode, propDefMap.getName(), null, seq); nodes.add(node); i = ((seq == 0) ? 0 : seq - 1); } else if (seq == 0) { node = nodes.get(0); i = 0; } else { node = nodes.get(seq - 1); i = seq - 1; } for (PropertyDefinition mapEntryPropDef : propDefMap.getOrderedPropertyDefinitions()) { updateProperty(mapEntryPropDef, map, nodes.get(i), 0); } }
private static void validatePropertyMap(AbstractPropertyMap propertyMap, AbstractPropertyMap currentPropertyMap, PropertyDefinitionMap propertyDefinitionMap, List<String> errorMessages) { // if the entire map is read-only then the new map must match the current map if the current map is non-empty if (propertyDefinitionMap.isReadOnly() && null != currentPropertyMap && !currentPropertyMap.getMap().isEmpty()) { if (!propertyMap.getMap().equals(currentPropertyMap.getMap())) { errorMessages.add("ReadOnly property '" + propertyDefinitionMap.getName() + "' has a value " + propertyMap.getMap() + " different than the current value " + currentPropertyMap.getMap() + "]. It is not allowed to change."); return; } } Map<String, PropertyDefinition> childPropertyDefinitions = propertyDefinitionMap.getMap(); for (PropertyDefinition childPropertyDefinition : childPropertyDefinitions.values()) { validateProperty(childPropertyDefinition, propertyMap, currentPropertyMap, errorMessages); } }
public PropertyMap createPropertyMap(PropertyDefinitionMap propDefMap, AugeasNode node) throws AugeasRhqException { PropertyMap propMap = new PropertyMap(propDefMap.getName()); for (PropertyDefinition mapEntryPropDef : propDefMap.getOrderedPropertyDefinitions()) { propMap.put(loadProperty(mapEntryPropDef, node)); } return propMap; }
private static void adaptPropertyMap(AbstractPropertyMap source, AbstractPropertyMap target, PropertyDefinitionMap definition, Object parent, boolean adaptReadonlyProperties) { if ((adaptReadonlyProperties || !definition.isReadOnly()) && target == null) { target = new PropertyMap(definition.getName()); add(parent, (PropertyMap) target); } for (Map.Entry<String, PropertyDefinition> e : definition.getPropertyDefinitions().entrySet()) { String name = e.getKey(); PropertyDefinition def = e.getValue(); Property sourceChild = source.get(name); // only bother if we have something to adapt from if (sourceChild != null) { Property targetChild = target.get(name); adaptProperty(sourceChild, targetChild, def, target, adaptReadonlyProperties); } } }
return null; String propDefName = propDefMap.getName(); PropertyMap propertyMap = new PropertyMap(propDefName); String specialNameProp = null;
String mapName = definitionMap.getName();
protected void setNode(PropertyDefinition propDef, AbstractPropertyMap parentPropMap, Augeas augeas, AugeasNode parentNode) { String propName = getAugeasPathRelativeToParent(propDef, parentNode, augeas); AugeasNode node = (propName.equals(".")) ? parentNode : new AugeasNode(parentNode, propName); if (isPropertyDefined(propDef, parentPropMap)) { // The property *is* defined, which means we either need to add or update the corresponding node in the // Augeas tree. if (propDef instanceof PropertyDefinitionSimple) { PropertyDefinitionSimple propDefSimple = (PropertyDefinitionSimple) propDef; PropertySimple propSimple = parentPropMap.getSimple(propDefSimple.getName()); setNodeFromPropertySimple(augeas, node, propDefSimple, propSimple); } else if (propDef instanceof PropertyDefinitionMap) { PropertyDefinitionMap propDefMap = (PropertyDefinitionMap) propDef; PropertyMap propMap = parentPropMap.getMap(propDefMap.getName()); setNodeFromPropertyMap(propDefMap, propMap, augeas, node); } else if (propDef instanceof PropertyDefinitionList) { PropertyDefinitionList propDefList = (PropertyDefinitionList) propDef; PropertyList propList = parentPropMap.getList(propDefList.getName()); setNodeFromPropertyList(propDefList, propList, augeas, node); } else { throw new IllegalStateException("Unsupported PropertyDefinition subclass: " + propDef.getClass().getName()); } } else { // The property *is not* defined - remove the corresponding node from the Augeas tree if it exists. removeNodeIfItExists(augeas, node); } }
private void addMapProperty(UIComponent parent, PropertyDefinitionMap propertyDefinitionMap, String rowStyleClass) { if (!this.topLevel) { throw new IllegalStateException( "Maps are only supported at the top level of a Configuration or within a top-level List."); } validateMapDefinition(propertyDefinitionMap); FacesComponentUtility.addVerbatimText(parent, "\n\n<tr class='" + rowStyleClass + "'>"); FacesComponentUtility.addVerbatimText(parent, "<td class='" + LIST_PROPERTY_DISPLAY_NAME_CELL_STYLE_CLASS + "'>"); PropertyRenderingUtility.addPropertyDisplayName(parent, propertyDefinitionMap, this.propertyMap .get(propertyDefinitionMap.getName()), this.config.isReadOnly()); FacesComponentUtility.addVerbatimText(parent, "</td>"); FacesComponentUtility.addVerbatimText(parent, "<td class='" + LIST_PROPERTY_ENABLED_CELL_STYLE_CLASS + "' />"); FacesComponentUtility.addVerbatimText(parent, "<td class='" + LIST_PROPERTY_VALUE_CELL_STYLE_CLASS + "' />"); FacesComponentUtility .addVerbatimText(parent, "<td class='" + LIST_PROPERTY_DESCRIPTION_CELL_STYLE_CLASS + "'>"); PropertyRenderingUtility.addPropertyDescription(parent, propertyDefinitionMap); FacesComponentUtility.addVerbatimText(parent, "</td>"); FacesComponentUtility.addVerbatimText(parent, "</tr>"); addMapMemberProperties(parent, propertyDefinitionMap.getName(), rowStyleClass); }
private int addNewMap(AbstractConfigurationComponent config) { String listName = config.getListName(); PropertyDefinitionMap mapDefinition = (PropertyDefinitionMap) config.getConfigurationDefinition() .getPropertyDefinitionList(listName).getMemberDefinition(); String mapName = mapDefinition.getName(); PropertyMap newMap = new PropertyMap(mapName); for (PropertyDefinition mapMemberDefinition : mapDefinition.getOrderedPropertyDefinitions()) { PropertyDefinitionSimple simpleDefinition = (PropertyDefinitionSimple) mapMemberDefinition; newMap.put(new PropertySimple(simpleDefinition.getName(), (simpleDefinition.isRequired()) ? "" : null)); } PropertyList list = config.getConfiguration().getList(listName); list.add(newMap); return list.getList().size() - 1; }
private void addNewOpenMapMemberPropertyRow(UIComponent parent, PropertyDefinitionMap propertyDefinitionMap) { if (!isReadOnly(propertyDefinitionMap)) { FacesComponentUtility.addVerbatimText(parent, "\n\n<tr><td colspan='3' class='" + PROPERTY_MAP_SUMMARY_BUTTON_FOOTER_STYLE_CLASS + "'>"); // add-new button HtmlCommandLink addNewLink = FacesComponentUtility.addCommandLink(parent, this.config); addNewLink.setTitle(ADD_NEW_MAP_BUTTON_TITLE); //addNewLink.setImmediate(true); // skip validation (we only want to validate upon Save) MethodExpression actionExpression = FacesExpressionUtility.createMethodExpression( "#{ConfigHelperUIBean.addNewOpenMapMemberProperty}", String.class, new Class[0]); addNewLink.setActionExpression(actionExpression); FacesComponentUtility.addParameter(addNewLink, this.config, RequestParameterNameConstants.MAP_NAME_PARAM, propertyDefinitionMap.getName()); FacesComponentUtility.addButton(addNewLink, ADD_NEW_MAP_BUTTON_LABEL, CssStyleClasses.BUTTON_SMALL); FacesComponentUtility.addVerbatimText(parent, "</td></tr>"); } }
private static PropertyDefinitionMap parseMapProperty(MapProperty mapProperty, AbstractPropertyMap defaultConfigurationParentMap) throws InvalidPluginDescriptorException { String description = parseMultiValue(mapProperty.getDescription(), mapProperty.getLongDescription()); PropertyDefinitionMap propDefMap = new PropertyDefinitionMap(mapProperty.getName().intern(), description, mapProperty.isRequired()); String displayName = (mapProperty.getDisplayName() != null) ? mapProperty.getDisplayName() : StringUtils .deCamelCase(mapProperty.getName()); if (displayName!=null) { propDefMap.setDisplayName(displayName.intern()); } propDefMap.setReadOnly(mapProperty.isReadOnly()); propDefMap.setSummary(mapProperty.isSummary()); // Add an instance of the map to the default config, if appropriate. PropertyMap propMap; if (defaultConfigurationParentMap != null) { propMap = new PropertyMap(propDefMap.getName()); defaultConfigurationParentMap.put(propMap); } else { propMap = null; } // Process the map's nested properties. List<JAXBElement<? extends ConfigurationProperty>> nestedProperties = mapProperty.getConfigurationProperty(); int propertyOrderIndex = 0; for (JAXBElement<? extends ConfigurationProperty> jaxbProperty : nestedProperties) { ConfigurationProperty uncastedProperty = jaxbProperty.getValue(); PropertyDefinition propertyDefinition = parseProperty(uncastedProperty, propertyOrderIndex++, propMap); propDefMap.put(propertyDefinition); } return propDefMap; }
protected Property createPropertyList(PropertyDefinitionList propDefList, Augeas augeas, AugeasNode node) { PropertyDefinition listMemberPropDef = propDefList.getMemberDefinition(); if (!(listMemberPropDef instanceof PropertyDefinitionMap)) { throw new IllegalArgumentException( "Invalid Resource ConfigurationDefinition - only lists of maps are supported."); } PropertyDefinitionMap listMemberPropDefMap = (PropertyDefinitionMap) listMemberPropDef; PropertyList propList = new PropertyList(propDefList.getName()); String mapKey = getListMemberMapKey(propDefList); String mapPath = getAugeasPathRelativeToParent(listMemberPropDefMap, node, augeas); String listMemberPathsExpression = node.getPath() + AugeasNode.SEPARATOR_CHAR + mapPath; List<String> listMemberPaths = augeas.match(listMemberPathsExpression); for (String listMemberPath : listMemberPaths) { AugeasNode listMemberNode = new AugeasNode(listMemberPath); PropertyMap listMemberPropMap = new PropertyMap(listMemberPropDefMap.getName()); propList.add(listMemberPropMap); // Add the "key" prop, if defined, to the map. if (mapKey != null) { PropertySimple keyProp = new PropertySimple(mapKey, listMemberNode.getName()); listMemberPropMap.put(keyProp); } // Populate the rest of the map child properties. populatePropertyMap(listMemberPropDefMap, listMemberPropMap, augeas, listMemberNode); } return propList; }
PropertyMap listMap = new PropertyMap(listMemberDefinitionMap.getName()); createDefaultProperty(listMemberDefinitionMap, listMap); ((PropertyList) property).add(listMap);