Esempio n. 1
0
 @Override
 public void updateIndividualFields(
     String collection,
     String name,
     ColumnField valuesMapField,
     ArrayList<ColumnField> valuesMapKeys,
     ArrayList<Object> valuesMapValues)
     throws FailedDBOperationException {
   DatabaseConfig.getLogger()
       .log(Level.FINE, "Update fields {0}/{1}", new Object[] {name, valuesMapKeys});
   JSONObject record;
   try {
     record = lookupEntireRecord(collection, name);
   } catch (RecordNotFoundException e) {
     throw new FailedDBOperationException(collection, name, "Record not found.");
   }
   DatabaseConfig.getLogger().log(Level.FINE, "Record before:{0}", record);
   if (record == null) {
     throw new FailedDBOperationException(collection, name);
   }
   if (valuesMapField != null && valuesMapKeys != null) {
     try {
       JSONObject json = record.getJSONObject(valuesMapField.getName());
       for (int i = 0; i < valuesMapKeys.size(); i++) {
         String fieldName = valuesMapKeys.get(i).getName();
         switch (valuesMapKeys.get(i).type()) {
           case LIST_STRING:
             JSONDotNotation.putWithDotNotation(json, fieldName, valuesMapValues.get(i));
             // json.put(fieldName, valuesMapValues.get(i));
             break;
           case USER_JSON:
             JSONDotNotation.putWithDotNotation(
                 json, fieldName, JSONParse(valuesMapValues.get(i)));
             // json.put(fieldName, JSONParse(valuesMapValues.get(i)));
             break;
           default:
             DatabaseConfig.getLogger()
                 .log(Level.WARNING, "Ignoring unknown format: {0}", valuesMapKeys.get(i).type());
             break;
         }
       }
       DatabaseConfig.getLogger().log(Level.FINE, "Json after:{0}", json);
       record.put(valuesMapField.getName(), json);
       DatabaseConfig.getLogger().log(Level.FINE, "Record after:{0}", record);
     } catch (JSONException e) {
       DatabaseConfig.getLogger().log(Level.SEVERE, "Problem updating json: {0}", e.getMessage());
     }
   }
   getMap(collection).put(name, record);
 }