private BiMap<String, String> getAttributeNameToResourceName(ServiceSchema schema) { HashBiMap<String, String> result = HashBiMap.create(); for (String attributeName : (Set<String>) schema.getAttributeSchemaNames()) { final String resourceName = schema.getAttributeSchema(attributeName).getResourceName(); if (resourceName != null) { result.put(attributeName, resourceName); } } return result; }
private boolean shouldBeIgnored(String attributeName) { final AttributeSchema attributeSchema = schema.getAttributeSchema(attributeName); return attributeSchema == null || StringUtils.isBlank(attributeSchema.getI18NKey()) || hiddenAttributeNames.contains(attributeName); }
private boolean shouldNotBeUpdated(String attributeName) { final AttributeSchema attributeSchema = schema.getAttributeSchema(attributeName); return attributeSchema == null || hiddenAttributeNames.contains(attributeName); }
/** * Will validate the Map representation of the service configuration against the serviceSchema and * return a corresponding JSON representation * * @param attributeValuePairs The schema attribute values. * @param realm The realm, or null if global. * @return Json representation of attributeValuePairs */ public JsonValue toJson(String realm, Map<String, Set<String>> attributeValuePairs) { if (!initialised) { init(); } final boolean validAttributes; try { if (realm == null) { validAttributes = schema.validateAttributes(attributeValuePairs); } else { validAttributes = schema.validateAttributes(attributeValuePairs, realm); } } catch (SMSException e) { debug.error( "schema validation threw an exception while validating the attributes: realm=" + realm + " attributes: " + attributeValuePairs, e); throw new JsonException("Unable to validate attributes", e); } JsonValue parentJson = json(new HashMap<String, Object>()); if (validAttributes) { for (String attributeName : attributeValuePairs.keySet()) { String jsonResourceName = attributeNameToResourceName.get(attributeName); String name; if (jsonResourceName != null) { name = jsonResourceName; } else { name = attributeName; } AttributeSchema attributeSchema = schema.getAttributeSchema(attributeName); if (shouldBeIgnored(attributeName)) { continue; } AttributeSchema.Type type = attributeSchema.getType(); final Set<String> object = attributeValuePairs.get(attributeName); Object jsonAttributeValue = null; if (type == null) { throw new JsonException("Type not defined."); } AttributeSchemaConverter attributeSchemaConverter = attributeSchemaConverters.get(name); if (isASingleValue(type)) { if (!object.isEmpty()) { jsonAttributeValue = attributeSchemaConverter.toJson(object.iterator().next()); } } else if (containsMultipleValues(type)) { if (isAMap(attributeSchema.getUIType())) { Map<String, Object> map = new HashMap<String, Object>(); Iterator<String> itr = object.iterator(); while (itr.hasNext()) { Pair<String, String> entry = nameValueParser.parse(itr.next()); map.put(entry.getFirst(), attributeSchemaConverter.toJson(entry.getSecond())); } jsonAttributeValue = map; } else { List<Object> list = new ArrayList<Object>(); Iterator<String> itr = object.iterator(); while (itr.hasNext()) { list.add(attributeSchemaConverter.toJson(itr.next())); } jsonAttributeValue = list; } } String sectionName = attributeNameToSection.get(attributeName); if (sectionName != null) { parentJson.putPermissive( new JsonPointer("/" + sectionName + "/" + name), jsonAttributeValue); } else { parentJson.put(name, jsonAttributeValue); } } } else { throw new JsonException("Invalid attributes"); } return parentJson; }