MCPcopy Create free account
hub / github.com/rambaut/figtree / writeTrees

Method writeTrees

src/figtree/application/JSONTreeExporter.java:89–172  ·  view source on GitHub ↗
(Collection<? extends Tree> trees)

Source from the content-addressed store, hash-verified

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);

Callers 1

exportTreesMethod · 0.95

Calls 12

appendIndentMethod · 0.95
appendTreeMethod · 0.95
appendAttributesMethod · 0.95
getNodesMethod · 0.80
getRootNodeMethod · 0.80
getMethod · 0.65
putMethod · 0.65
getAttributeNamesMethod · 0.45
getAttributeMethod · 0.45
addMethod · 0.45
toStringMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected