protected Map<String, Object> parseDatasourceSettings(
     Set<SettingDefinition<?, ?>> defs, HttpServletRequest req) {
   Map<String, String> parameters = new HashMap<String, String>(req.getParameterMap().size());
   Enumeration<?> e = req.getParameterNames();
   while (e.hasMoreElements()) {
     String key = (String) e.nextElement();
     parameters.put(key, req.getParameter(key));
   }
   Map<String, Object> parsedSettings = new HashMap<String, Object>(parameters.size());
   for (SettingDefinition<?, ?> def : defs) {
     SettingValue<?> newValue =
         getSettingsManager()
             .getSettingFactory()
             .newSettingValue(def, parameters.get(def.getKey()));
     parsedSettings.put(def.getKey(), newValue.getValue());
   }
   return parsedSettings;
 }
 private JsonNode encodeSettings(Map<String, Object> p) throws JSONException {
   SettingDefinitionEncoder enc = new SettingDefinitionEncoder();
   Set<SettingDefinition<?, ?>> defs =
       getDatasource()
           .getChangableSettingDefinitions(
               getDatasource().getDatasourceProperties(getSettings(), p));
   for (SettingDefinition<?, ?> def : defs) {
     setDefaultValue(def, p.get(def.getKey()));
   }
   JsonNode settings = enc.encode(enc.sortByGroup(defs));
   ObjectNode node = JSONUtils.nodeFactory().objectNode();
   node.put(SETTINGS, settings);
   return node;
 }