1 package org.simantics.scl.ui.modulebrowser;
3 import java.util.Arrays;
4 import java.util.Iterator;
6 import gnu.trove.map.hash.THashMap;
8 public class ModuleNameTreeEntry implements Comparable<ModuleNameTreeEntry> {
9 public static final String STANDARD_LIBRARY = "StandardLibrary"; //$NON-NLS-1$
10 public static final String HTTP_PREFIX = "http://"; //$NON-NLS-1$
12 public final ModuleNameTreeEntry parent;
13 public final String fullName;
14 public final String name;
15 public final THashMap<String, ModuleNameTreeEntry> childMap = new THashMap<String, ModuleNameTreeEntry>();
16 public boolean isModule;
18 public ModuleNameTreeEntry(ModuleNameTreeEntry parent, String fullName, String name) {
20 this.fullName = fullName;
24 public void addModule(String moduleFullName) {
25 int startingPos = fullName.isEmpty() ? 0 : fullName.length()+1;
27 if(parent == null && moduleFullName.startsWith(HTTP_PREFIX))
28 p = moduleFullName.indexOf('/', HTTP_PREFIX.length());
30 p = moduleFullName.indexOf('/', startingPos);
33 getOrCreateChildMapEntry(STANDARD_LIBRARY).addModule(name);
36 String name = moduleFullName.substring(startingPos);
37 ModuleNameTreeEntry entry = getOrCreateChildMapEntry(name);
38 entry.isModule = true;
42 String name = moduleFullName.substring(startingPos, p);
43 ModuleNameTreeEntry entry = getOrCreateChildMapEntry(name);
44 entry.addModule(moduleFullName);
48 private ModuleNameTreeEntry getOrCreateChildMapEntry(String name) {
49 ModuleNameTreeEntry entry = childMap.get(name);
53 if(name.equals(STANDARD_LIBRARY))
54 newFullName = ""; //$NON-NLS-1$
59 newFullName = fullName + "/" + name; //$NON-NLS-1$
60 entry = new ModuleNameTreeEntry(this, newFullName, name);
61 childMap.put(name, entry);
66 public Object[] children() {
67 Object[] result = childMap.values().toArray();
72 public void clearModuleFlags() {
74 for(ModuleNameTreeEntry child : childMap.values())
75 child.clearModuleFlags();
79 public int compareTo(ModuleNameTreeEntry o) {
80 return name.compareTo(o.name);
83 public boolean prune() {
84 Iterator<ModuleNameTreeEntry> it = childMap.values().iterator();
86 ModuleNameTreeEntry entry = it.next();
90 return isModule || !childMap.isEmpty();