package org.simantics.scl.ui.modulebrowser; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import gnu.trove.map.hash.THashMap; public class ModuleNameTreeEntry implements Comparable { public final ModuleNameTreeEntry parent; public final String fullName; public final String name; public final THashMap childMap = new THashMap(); public boolean isModule; public ModuleNameTreeEntry(ModuleNameTreeEntry parent, String fullName, String name) { this.parent = parent; this.fullName = fullName; this.name = name; } public void addModule(String moduleFullName) { int startingPos = fullName.isEmpty() ? 0 : fullName.length()+1; int p = moduleFullName.indexOf('/', startingPos); if(p == -1) { String name = moduleFullName.substring(startingPos); ModuleNameTreeEntry entry = getOrCreateChildMapEntry(name); entry.isModule = true; } else { String name = moduleFullName.substring(startingPos, p); ModuleNameTreeEntry entry = getOrCreateChildMapEntry(name); entry.addModule(moduleFullName); } } private ModuleNameTreeEntry getOrCreateChildMapEntry(String name) { ModuleNameTreeEntry entry = childMap.get(name); if(entry == null) { String newFullName = fullName.isEmpty() ? name : fullName + "/" + name; entry = new ModuleNameTreeEntry(this, newFullName, name); childMap.put(name, entry); } return entry; } public Collection children() { ArrayList children = new ArrayList(childMap.values()); Collections.sort(children); return children; } @Override public int compareTo(ModuleNameTreeEntry o) { return name.compareTo(o.name); } @Override public String toString() { return name; } }