@Override public void process(MapNode configuration) { configuration.get("env").ifPresent(TreeNode::hide); configuration.get("sys").ifPresent(TreeNode::hide); configuration.walk() .filter(node -> node.type() == TreeNode.Type.MAP_NODE) .forEach(node -> node.namedNodes() .filter(this::isPotentialPassword) .forEach(namedNode -> namedNode.node().hide()) ); }
@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; }
@Override public Stream<NamedNode> namedNodes() { return treeNode.namedNodes() .map(namedNode -> new NamedNode(namedNode.name(), UnmodifiableTreeNode.of(namedNode.node()))); }
@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()); } }
@Override public Object map(TreeNode treeNode, Type type) { BuilderSupplier<?> supplier = instantiateBuilderSupplier(type); Object builder = supplier.get(); Map<String, Method> builderMethods = getBuilderMethods(builder); treeNode.namedNodes().forEach(namedNode -> { Method method = builderMethods.get(namedNode.name()); if (method != null) { try { method.invoke(builder, coffig.getMapper().map(namedNode.node(), method.getGenericParameterTypes()[0])); } catch (IllegalAccessException | InvocationTargetException e) { throw ConfigurationException.wrap(e, ConfigurationErrorCode.ERROR_DURING_METHOD_INVOCATION) .put("method", method.toString()); } } }); return supplier; }
@Override @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST", justification = "Cast is verified in canHandle() method") public Object map(TreeNode treeNode, Type type) { Type keyType = ((ParameterizedType) type).getActualTypeArguments()[0]; Type valueType = ((ParameterizedType) type).getActualTypeArguments()[1]; if (treeNode.type() == TreeNode.Type.MAP_NODE) { return treeNode.namedNodes() .collect(toMap( namedNode -> coffig.getMapper().map(new ValueNode(namedNode.name()), keyType), namedNode -> Optional.ofNullable(coffig.getMapper().map(namedNode.node(), valueType)) .orElseGet(() -> instantiateDefault((Class<?>) valueType)) )); } else { return treeNode.nodes() .collect(toMap( node -> coffig.getMapper().map(node, keyType), node -> instantiateDefault((Class<?>) valueType)) ); } }