(Collection<? extends Tree> trees)
| 87 | } |
| 88 | |
| 89 | private void writeTrees(Collection<? extends Tree> trees) throws IOException { |
| 90 | int indent = 0; |
| 91 | int treeCount = 0; |
| 92 | |
| 93 | writer.println("{"); |
| 94 | |
| 95 | if (trees.size() > 1) { |
| 96 | writer.println("\t\"trees\": ["); |
| 97 | indent ++; |
| 98 | } |
| 99 | |
| 100 | Map<String, Set<String>> attributeMap = new LinkedHashMap<String, Set<String>>(); |
| 101 | |
| 102 | for( Tree t : trees ) { |
| 103 | final boolean isRooted = t instanceof RootedTree; |
| 104 | final RootedTree rtree = isRooted ? (RootedTree)t : Utils.rootTheTree(t); |
| 105 | |
| 106 | for (Node node : rtree.getNodes()) { |
| 107 | for (String name : node.getAttributeNames()) { |
| 108 | if (ATTRIBUTE_NAMES.contains(name)) { |
| 109 | Object valueObject = node.getAttribute(name); |
| 110 | if (valueObject instanceof String) { |
| 111 | Set<String> values = attributeMap.get(name); |
| 112 | if (values == null) { |
| 113 | values = new TreeSet<String>(); |
| 114 | attributeMap.put(name, values); |
| 115 | } |
| 116 | String value = (String)valueObject; |
| 117 | if (value.contains("+")) { |
| 118 | values.add(value.split("\\+")[0]); |
| 119 | } else { |
| 120 | values.add(valueObject.toString()); |
| 121 | } |
| 122 | } |
| 123 | } |
| 124 | } |
| 125 | } |
| 126 | |
| 127 | StringBuilder builder = new StringBuilder(); |
| 128 | |
| 129 | if (trees.size() > 1) { |
| 130 | appendIndent(builder, indent); |
| 131 | builder.append("\"tree\": {\n"); |
| 132 | } |
| 133 | |
| 134 | appendIndent(builder, indent + 1); |
| 135 | builder.append("\"root\": "); |
| 136 | appendTree(rtree, rtree.getRootNode(), builder, indent + 1); |
| 137 | |
| 138 | appendAttributes(rtree, builder, indent + 1); |
| 139 | builder.append((trees.size() == 1 || treeCount < trees.size() - 1 ? ",\n" : "\n")); |
| 140 | |
| 141 | if (trees.size() > 1) { |
| 142 | appendIndent(builder, indent); |
| 143 | builder.append((treeCount < trees.size() - 1 ? "},\n" : "}\n")); |
| 144 | } |
| 145 | |
| 146 | writer.println(builder); |
no test coverage detected