]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/modulebrowser/ModuleNameTreeEntry.java
6f657b35134859abc3b6285c468e906047fae908
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / modulebrowser / ModuleNameTreeEntry.java
1 package org.simantics.scl.ui.modulebrowser;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.Collections;
6
7 import gnu.trove.map.hash.THashMap;
8
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;
15     
16     public ModuleNameTreeEntry(ModuleNameTreeEntry parent, String fullName, String name) {
17         this.parent = parent;
18         this.fullName = fullName;
19         this.name = name;
20     }
21     
22     public void addModule(String moduleFullName) {
23         int startingPos = fullName.isEmpty() ? 0 : fullName.length()+1;
24         int p = moduleFullName.indexOf('/', startingPos);
25         if(p == -1) {
26             String name = moduleFullName.substring(startingPos);
27             ModuleNameTreeEntry entry = getOrCreateChildMapEntry(name);
28             entry.isModule = true;
29         }
30         else {
31             String name = moduleFullName.substring(startingPos, p);
32             ModuleNameTreeEntry entry = getOrCreateChildMapEntry(name);
33             entry.addModule(moduleFullName);
34         }
35     }
36     
37     private ModuleNameTreeEntry getOrCreateChildMapEntry(String name) {
38         ModuleNameTreeEntry entry = childMap.get(name);
39         if(entry == null) {
40             String newFullName = fullName.isEmpty() ? name : fullName + "/" + name;
41             entry = new ModuleNameTreeEntry(this, newFullName, name);
42             childMap.put(name, entry);
43         }
44         return entry;
45     }
46     
47     public Collection<ModuleNameTreeEntry> children() {
48         ArrayList<ModuleNameTreeEntry> children = new ArrayList<ModuleNameTreeEntry>(childMap.values());
49         Collections.sort(children);
50         return children;
51     }
52
53     @Override
54     public int compareTo(ModuleNameTreeEntry o) {
55         return name.compareTo(o.name);
56     }
57     
58     @Override
59     public String toString() {
60         return name;
61     }
62 }