package core.aws.local; import core.aws.util.Asserts; import java.nio.file.Path; import java.util.List; import java.util.Map; import java.util.Optional; /** * @author neo */ public class ResourceNode { public final String type; public final String id; public final Map<?, ?> value; public final String yml; public final Path path; public ResourceNode(String type, String id, Map<?, ?> value, String yml, Path path) { this.type = type; this.id = id; this.value = value; this.yml = yml; this.path = path; } public Object field(String field) { return value.get(field); } public Optional<String> getString(String field) { Object result = field(field); if (result == null) return Optional.empty(); Asserts.isTrue(result instanceof String, "value is not text, field={}, value={}", field, result); return Optional.of((String) result); } public Optional<Integer> getInt(String field) { Object result = field(field); if (result == null) return Optional.empty(); Asserts.isTrue(result instanceof Integer, "value is not int, field={}, value={}", field, result); return Optional.of((Integer) result); } public String requiredString(String field) { return getString(field).orElseThrow(() -> new Error("field is required, field=" + field)); } @SuppressWarnings("unchecked") public Map<String, Object> mapField(String field) { Object result = field(field); if (result == null) return null; Asserts.isTrue(result instanceof Map, "value is not map, field={}, value={}", field, result); return (Map<String, Object>) result; } @SuppressWarnings("unchecked") public List<?> listField(String field) { Object result = field(field); if (result == null) return null; Asserts.isTrue(result instanceof List, "value is not list, field={}, value={}", field, result); return (List<?>) result; } }