@Override public Optional<Integer> getInt(DataQuery path) { return get(path).flatMap(Coerce::asInteger); }
@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 DataContainer copy() { final DataContainer container = new MemoryDataContainer(this.safety); getKeys(false).stream() .forEach(query -> get(query).ifPresent(obj -> container.set(query, obj) ) ); return container; }
@Override public Optional<Long> getLong(DataQuery path) { return get(path).flatMap(Coerce::asLong); }
@Override public DataContainer copy(SafetyMode safety) { final DataContainer container = new MemoryDataContainer(safety); getKeys(false).stream() .forEach(query -> get(query).ifPresent(obj -> container.set(query, obj) ) ); return container; }
@Override public Optional<Double> getDouble(DataQuery path) { return get(path).flatMap(Coerce::asDouble); }
@Override public DataContainer copy() { final DataContainer container = new MemoryDataContainer(this.safety); getKeys(false).stream() .forEach(query -> get(query).ifPresent(obj -> container.set(query, obj) ) ); return container; }
@Override public Optional<Byte> getByte(DataQuery path) { return get(path).flatMap(Coerce::asByte); }
@Override public Optional<String> getString(DataQuery path) { return get(path).flatMap(Coerce::asString); }
@Override public Optional<Boolean> getBoolean(DataQuery path) { return get(path).flatMap(Coerce::asBoolean); }
@Override public Optional<Short> getShort(DataQuery path) { return get(path).flatMap(Coerce::asShort); }
@Override public Optional<Float> getFloat(DataQuery path) { return get(path).flatMap(Coerce::asFloat); }
@Override public Optional<DataView> getView(DataQuery path) { return get(path).filter(obj -> obj instanceof DataView).map(obj -> (DataView) obj); }
private Optional<List<?>> getUnsafeList(DataQuery path) { return get(path) .filter(obj -> obj instanceof List<?> || obj instanceof Object[]) .map(obj -> { if (obj instanceof List<?>) { return (List<?>) obj; } return Arrays.asList((Object[]) obj); } ); }
private Optional<DataView> getUnsafeView(DataQuery path) { return get(path).filter(obj -> obj instanceof DataView).map(obj -> (DataView) obj); }
@Override public Optional<List<?>> getList(DataQuery path) { Optional<Object> val = get(path); if (val.isPresent()) { if (val.get() instanceof List<?>) { return Optional.<List<?>>of(Lists.newArrayList((List<?>) val.get())); } if (val.get() instanceof Object[]) { return Optional.<List<?>>of(Lists.newArrayList((Object[]) val.get())); } } return Optional.empty(); }
@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(); }
@Override public Optional<String> getString(DataQuery path) { return get(path).flatMap(Coerce::asString); }
@Override public Optional<DataView> getView(DataQuery path) { return get(path).filter(obj -> obj instanceof DataView).map(obj -> (DataView) obj); }
private Optional<List<?>> getUnsafeList(DataQuery path) { return get(path) .filter(obj -> obj instanceof List<?> || obj instanceof Object[]) .map(obj -> { if (obj instanceof List<?>) { return (List<?>) obj; } return Arrays.asList((Object[]) obj); } ); }