@Override public String value() { return treeNode.value(); }
@Override public Object map(TreeNode treeNode, Type type) { return new File(treeNode.value()); }
@SuppressWarnings("unchecked") @Override @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST", justification = "Cast is verified in canHandle() method") public Object map(TreeNode treeNode, Type type) { return Enum.valueOf((Class<Enum>) type, treeNode.value()); }
@Override public Object map(TreeNode value, Type type) { return converters.get(type).apply(value.value()); }
@Override public Stream<NamedNode> namedNodes() { return children.stream().map(child -> new NamedNode(child.value(), (String) null)); }
@Override public Object map(TreeNode treeNode, Type type) { return Duration.parse(treeNode.value()); }
@Override public Object map(TreeNode treeNode, Type type) { return HostAndPort.fromString(treeNode.value()); }
@Override public Object map(TreeNode treeNode, Type type) { return TimeValue.fromString(treeNode.value()); }
@Override public TreeNode evaluate(TreeNode rootNode, TreeNode valueNode) { if (valueNode.type() == TreeNode.Type.VALUE_NODE && !valueNode.isEmpty()) { try { return new ValueNode(processValue(rootNode, valueNode.value())); } catch (Exception e) { LOGGER.error("Error when evaluating configuration macro: {}", valueNode.value(), e); return new ValueNode(); } } else { return valueNode; } }
@Override public TreeNode evaluate(TreeNode rootNode, TreeNode valueNode) { if (valueNode.type() == TreeNode.Type.VALUE_NODE && !valueNode.isEmpty()) { try { return new ValueNode(processValue(rootNode, valueNode.value())); } catch (Exception e) { LOGGER.error("Error when evaluating configuration function: {}", valueNode.value(), e); return new ValueNode(); } } else { return valueNode; } }
Optional<TreeNode> node = rootNode.get(processValue(rootNode, part)); if (node.isPresent()) { result.append(processValue(rootNode, node.get().value())); break;
@Override @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST", justification = "Cast is verified in canHandle() method") public Object map(TreeNode treeNode, Type type) { Type itemType = ((ParameterizedType) type).getActualTypeArguments()[0]; Class<?> someClass; try { someClass = Class.forName(treeNode.value()); } catch (ClassNotFoundException e) { throw ConfigurationException.wrap(e, ConfigurationErrorCode.UNABLE_TO_LOAD_CLASS) .put("class", treeNode.value()); } if (itemType instanceof Class && ((Class<?>) itemType).isAssignableFrom(someClass)) { return someClass; } else if (itemType instanceof WildcardType && isSatisfyingBounds(someClass, (WildcardType) itemType)) { return someClass; } else { throw ConfigurationException.createNew(ConfigurationErrorCode.NON_ASSIGNABLE_CLASS) .put("assigned", someClass.getName()) .put("assignee", itemType.getTypeName()); } }
@Override public Object map(TreeNode treeNode, Type type) { Properties properties = new Properties(); if (treeNode.type() == TreeNode.Type.MAP_NODE) { treeNode.namedNodes() .forEach(namedNode -> properties.setProperty(namedNode.name(), (String) coffig.getMapper().map(namedNode.node(), String.class))); } else { treeNode.nodes().forEach(item -> properties.setProperty(item.value(), "")); } return properties; }
private TreeNode processArgument(TreeNode tree, String value) throws Exception { if (value.startsWith("'") && value.endsWith("'")) { return new ValueNode(value.substring(1, value.length() - 1)); } CallSiteInfo callSiteInfo = findFunctionCall(value, 0); if (callSiteInfo == null) { TreeNode refNode = tree.get(value).orElse(new ValueNode("")); if (refNode.type() == TreeNode.Type.VALUE_NODE) { // References value nodes can be processed... return new ValueNode(processValue(tree, refNode.value())); } else { // ... whereas other node types are passed directly return refNode; } } else { return new ValueNode(processValue(tree, value)); } }
@Override @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST", justification = "Cast is verified in canHandle() method") public Object map(TreeNode treeNode, Type type) { Class<?> rawType = rawClassOf(((ParameterizedType) type).getActualTypeArguments()[0]); if (treeNode.type() == TreeNode.Type.MAP_NODE) { Map<String, String> result = new HashMap<>(); treeNode.namedNodes() .filter(namedNode -> isValueNode(namedNode.node())) .forEach(namedNode -> result.put(namedNode.name(), namedNode.node().value())); return ClassConfiguration.of(rawType, result); } else { throw SeedException.createNew(CoreErrorCode.INVALID_CLASS_CONFIGURATION) .put("nodeType", treeNode.type()) .put("class", rawType.getName()); } }