public List<Filter> getFilters() { Object object = get(FILTERS); if (object == null) { return new LinkedList<>(); } if (isListFilters(object)) { return (List<Filter>) object; } else { //convert with objectMapper List<Filter> filters = new ArrayList<>(); try { if (objectMapper == null) { objectMapper = new ObjectMapper(); objectReader = objectMapper.readerFor(Filter.class); } for (Object filterObject : ((List) object)) { filters.add(objectReader.readValue(objectMapper.writeValueAsString(filterObject))); } setFilters(filters); return filters; } catch (IOException e) { throw new UncheckedIOException(e); } } }
@Test public void modifyUserTest() throws CatalogDBException { ObjectMap genomeMapsConfig = new ObjectMap("lastPosition", "4:1222222:1333333"); genomeMapsConfig.put("otherConf", Arrays.asList(1, 2, 3, 4, 5)); catalogUserDBAdaptor.setConfig(user1.getId(), "genomemaps", genomeMapsConfig); User user = catalogUserDBAdaptor.get(user1.getId(), null, null).first(); assertNotNull(user.getConfigs().get("genomemaps")); Map<String, Object> genomemaps = (Map<String, Object>) user.getConfigs().get("genomemaps"); assertNotNull(genomemaps.get("otherConf")); assertNotNull(genomemaps.get("lastPosition")); }
@Override public QueryResult setConfig(String userId, String name, Map<String, Object> config) throws CatalogDBException { long startTime = startQuery(); // Set the config Bson bsonQuery = Filters.eq(QueryParams.ID.key(), userId); Bson filterDocument = getMongoDBDocument(config, "Config"); Bson update = Updates.set(QueryParams.CONFIGS.key() + "." + name, filterDocument); QueryResult<UpdateResult> queryResult = userCollection.update(bsonQuery, update, null); if (queryResult.first().getModifiedCount() == 0) { throw new CatalogDBException("Could not create " + name + " configuration "); } QueryResult<User> userQueryResult = get(userId, new QueryOptions(), ""); if (userQueryResult.getNumResults() == 0) { throw new CatalogDBException("Internal error: Could not retrieve user " + userId + " information"); } return endQuery("Set config", startTime, Arrays.asList(userQueryResult.first().getConfigs().get(name))); }