1 package org.simantics.scl.ui.modulebrowser;
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.Collections;
7 import gnu.trove.map.hash.THashMap;
9 public class ModuleNameTreeEntry implements Comparable<ModuleNameTreeEntry> {
10 public final ModuleNameTreeEntry parent;
11 public final String fullName;
12 public final String name;
13 public final THashMap<String, ModuleNameTreeEntry> childMap = new THashMap<String, ModuleNameTreeEntry>();
14 public boolean isModule;
16 public ModuleNameTreeEntry(ModuleNameTreeEntry parent, String fullName, String name) {
18 this.fullName = fullName;
22 public void addModule(String moduleFullName) {
23 int startingPos = fullName.isEmpty() ? 0 : fullName.length()+1;
24 int p = moduleFullName.indexOf('/', startingPos);
26 String name = moduleFullName.substring(startingPos);
27 ModuleNameTreeEntry entry = getOrCreateChildMapEntry(name);
28 entry.isModule = true;
31 String name = moduleFullName.substring(startingPos, p);
32 ModuleNameTreeEntry entry = getOrCreateChildMapEntry(name);
33 entry.addModule(moduleFullName);
37 private ModuleNameTreeEntry getOrCreateChildMapEntry(String name) {
38 ModuleNameTreeEntry entry = childMap.get(name);
40 String newFullName = fullName.isEmpty() ? name : fullName + "/" + name;
41 entry = new ModuleNameTreeEntry(this, newFullName, name);
42 childMap.put(name, entry);
47 public Collection<ModuleNameTreeEntry> children() {
48 ArrayList<ModuleNameTreeEntry> children = new ArrayList<ModuleNameTreeEntry>(childMap.values());
49 Collections.sort(children);
54 public int compareTo(ModuleNameTreeEntry o) {
55 return name.compareTo(o.name);
59 public String toString() {