@Override public Map<DataQuery, Object> getValues(boolean deep) { ImmutableMap.Builder<DataQuery, Object> builder = ImmutableMap.builder(); for (DataQuery query : getKeys(deep)) { Object value = get(query).get(); if (value instanceof DataView) { builder.put(query, ((DataView) value).getValues(deep)); } else { builder.put(query, get(query).get()); } } return builder.build(); }
@Override public Optional<? extends Map<?, ?>> getMap(DataQuery path) { Optional<Object> val = get(path); if (val.isPresent()) { if (val.get() instanceof DataView) { ImmutableMap.Builder<String, Object> builder = ImmutableMap.builder(); for (Map.Entry<DataQuery, Object> entry : ((DataView) val.get()).getValues(false).entrySet()) { builder.put(entry.getKey().asString('.'), ensureMappingOf(entry.getValue())); } return Optional.of(builder.build()); } else if (val.get() instanceof Map) { return Optional.of((Map<?, ?>) ensureMappingOf(val.get())); } } return Optional.empty(); }
@SuppressWarnings("rawtypes") private Object ensureMappingOf(Object object) { if (object instanceof DataView) { final ImmutableMap.Builder<String, Object> builder = ImmutableMap.builder(); for (Map.Entry<DataQuery, Object> entry : ((DataView) object).getValues(false).entrySet()) { builder.put(entry.getKey().asString('.'), ensureMappingOf(entry.getValue())); } return builder.build(); } else if (object instanceof Map) { final ImmutableMap.Builder<Object, Object> builder = ImmutableMap.builder(); for (Map.Entry<?, ?> entry : ((Map<?, ?>) object).entrySet()) { builder.put(entry.getKey().toString(), ensureMappingOf(entry.getValue())); } return builder.build(); } else if (object instanceof Collection) { final ImmutableList.Builder<Object> builder = ImmutableList.builder(); for (Object entry : (Collection) object) { builder.add(ensureMappingOf(entry)); } return builder.build(); } else { return object; } }
MemoryDataView view = new MemoryDataContainer(this.safety); DataView internalView = (DataView) object; for (Map.Entry<DataQuery, Object> entry : internalView.getValues(false).entrySet()) { view.set(entry.getKey(), entry.getValue());
shallowMap.put(of("foo"), intermediateMap); Map<DataQuery, Object> shallowValues = view.getValues(false); assertTrue(shallowValues.entrySet().equals(shallowMap.entrySet())); deepMap.put(of("foo", "bar"), internalView); Map<DataQuery, Object> deepValues = view.getValues(true); assertTrue(deepValues.keySet().equals(deepMap.keySet())); assertTrue(deepValues.entrySet().equals(deepMap.entrySet()));
@Override public Map<DataQuery, Object> getValues(boolean deep) { ImmutableMap.Builder<DataQuery, Object> builder = ImmutableMap.builder(); for (DataQuery query : getKeys(deep)) { Object value = get(query).get(); if (value instanceof DataView) { builder.put(query, ((DataView) value).getValues(deep)); } else { builder.put(query, get(query).get()); } } return builder.build(); }
@Override public Optional<? extends Map<?, ?>> getMap(DataQuery path) { Optional<Object> val = get(path); if (val.isPresent()) { if (val.get() instanceof DataView) { ImmutableMap.Builder<String, Object> builder = ImmutableMap.builder(); for (Map.Entry<DataQuery, Object> entry : ((DataView) val.get()).getValues(false).entrySet()) { builder.put(entry.getKey().asString('.'), ensureMappingOf(entry.getValue())); } return Optional.of(builder.build()); } else if (val.get() instanceof Map) { return Optional.of((Map<?, ?>) ensureMappingOf(val.get())); } } return Optional.empty(); }
@SuppressWarnings("rawtypes") private Object ensureMappingOf(Object object) { if (object instanceof DataView) { final ImmutableMap.Builder<String, Object> builder = ImmutableMap.builder(); for (Map.Entry<DataQuery, Object> entry : ((DataView) object).getValues(false).entrySet()) { builder.put(entry.getKey().asString('.'), ensureMappingOf(entry.getValue())); } return builder.build(); } else if (object instanceof Map) { final ImmutableMap.Builder<Object, Object> builder = ImmutableMap.builder(); for (Map.Entry<?, ?> entry : ((Map<?, ?>) object).entrySet()) { builder.put(entry.getKey().toString(), ensureMappingOf(entry.getValue())); } return builder.build(); } else if (object instanceof Collection) { final ImmutableList.Builder<Object> builder = ImmutableList.builder(); for (Object entry : (Collection) object) { builder.add(ensureMappingOf(entry)); } return builder.build(); } else { return object; } }
MemoryDataView view = new MemoryDataContainer(this.safety); DataView internalView = (DataView) object; for (Map.Entry<DataQuery, Object> entry : internalView.getValues(false).entrySet()) { view.set(entry.getKey(), entry.getValue());