@Override public Stream<TreeNode> nodes() { return treeNode.nodes().map(UnmodifiableTreeNode::of); }
@Override @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST", justification = "Cast is verified in canHandle() method") public Object map(TreeNode treeNode, Type type) { Class componentType = ((Class) type).getComponentType(); Collection<TreeNode> values = treeNode.nodes().collect(Collectors.toList()); Object array = Array.newInstance(componentType, values.size()); AtomicInteger index = new AtomicInteger(); values.stream() .map(childNode -> coffig.getMapper().map(childNode, componentType)) .forEach(item -> Array.set(array, index.getAndIncrement(), item)); return array; }
@Override @SuppressWarnings("unchecked") @SuppressFBWarnings(value = "BC_UNCONFIRMED_CAST", justification = "Cast is verified in canHandle() method") public Object map(TreeNode treeNode, Type type) { Class<?> rawClass = (Class<?>) ((ParameterizedType) type).getRawType(); Type itemType = ((ParameterizedType) type).getActualTypeArguments()[0]; if (List.class.isAssignableFrom(rawClass)) { return treeNode.nodes().map(childNode -> coffig.getMapper().map(childNode, itemType)).collect(toList()); } else if (Set.class.isAssignableFrom(rawClass)) { return treeNode.nodes().map(childNode -> coffig.getMapper().map(childNode, itemType)).collect(toSet()); } else { return treeNode.nodes().map(childNode -> coffig.getMapper().map(childNode, itemType)) .collect(toCollection(() -> (Collection<Object>) instantiateDefault(rawClass))); } }
@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 @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)) ); } }