/**
*
* Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"); You may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.speedment.runtime.config.internal;
import com.speedment.common.function.OptionalBoolean;
import com.speedment.runtime.config.Document;
import static com.speedment.runtime.config.util.DocumentUtil.childrenOf;
import java.util.Map;
import static java.util.Objects.requireNonNull;
import java.util.Optional;
import java.util.OptionalDouble;
import java.util.OptionalInt;
import java.util.OptionalLong;
import java.util.stream.Stream;
/**
*
* @author Emil Forslund
*/
public class BaseDocument implements Document {
private final transient Document parent; // Nullable
private final Map<String, Object> config;
public BaseDocument(Document parent, Map<String, Object> data) {
this.parent = parent;
this.config = requireNonNull(data);
}
@Override
public Optional<? extends Document> getParent() {
return Optional.ofNullable(parent);
}
@Override
public Map<String, Object> getData() {
return config;
}
@Override
public Optional<Object> get(String key) {
return Optional.ofNullable(config.get(key));
}
@Override
public OptionalBoolean getAsBoolean(String key) {
return OptionalBoolean.ofNullable((Boolean) config.get(key));
}
@Override
public OptionalLong getAsLong(String key) {
final Number value = (Number) config.get(key);
return value == null
? OptionalLong.empty()
: OptionalLong.of(value.longValue());
}
@Override
public OptionalDouble getAsDouble(String key) {
final Number value = (Number) config.get(key);
return value == null
? OptionalDouble.empty()
: OptionalDouble.of(value.doubleValue());
}
@Override
public OptionalInt getAsInt(String key) {
final Number value = (Number) config.get(key);
return value == null
? OptionalInt.empty()
: OptionalInt.of(value.intValue());
}
@Override
public Optional<String> getAsString(String key) {
return get(key).map(String.class::cast);
}
@Override
public void put(String key, Object value) {
requireNonNull(value);
config.put(key, value);
}
@Override
public Stream<Document> children() {
return childrenOf(this, BaseDocument::new);
}
}