20 package net.sf.gridarta.model.data;
22 import java.io.Serializable;
23 import java.util.ArrayList;
24 import java.util.Arrays;
25 import java.util.Collection;
26 import java.util.Collections;
27 import java.util.Enumeration;
28 import java.util.SortedMap;
29 import java.util.TreeMap;
30 import javax.swing.tree.TreeNode;
31 import javax.swing.tree.TreePath;
32 import org.jetbrains.annotations.NotNull;
33 import org.jetbrains.annotations.Nullable;
52 private final SortedMap<String, NamedTreeNode<E>>
childNodes =
new TreeMap<>();
88 private final boolean dir;
95 this(
true,
null,
"/");
152 String realName = path.startsWith(
"/") ? path.substring(1) : path;
154 if (realName.contains(
"/")) {
156 final String dirName = realName.substring(0, realName.indexOf(
'/'));
157 realName = realName.substring(realName.indexOf(
'/'));
159 if (dirNode ==
null) {
206 public String getName() {
212 public Enumeration<NamedTreeNode<E>> children() {
213 return Collections.enumeration(
childNodes.values());
220 public boolean getAllowsChildren() {
226 public TreeNode getChildAt(
final int childIndex) {
233 public int getChildCount() {
238 public int getIndex(@NotNull
final TreeNode node) {
241 return result < 0 ? -1 : result;
246 public NamedTreeNode<E> getParent() {
254 public boolean isLeaf() {
259 public boolean equals(@Nullable
final Object obj) {
263 if (obj ==
null || obj.getClass() != getClass()) {
267 return dir == namedTreeNode.
dir &&
name.equals(namedTreeNode.
name);
271 public int hashCode() {
272 return (
dir ? 1 : 0) ^
name.hashCode();
276 public int compareTo(@NotNull
final NamedTreeNode<E> o) {
277 return dir ^ !o.dir ?
name.compareTo(o.name) :
dir ? -1 : 1;
286 public TreePath getPathFor(@NotNull
final String path) {
287 final Collection<NamedTreeNode<E>> nodes =
new ArrayList<>();
288 String currentPath = path;
291 for (NamedTreeNode<E> currentNode =
this; currentNode !=
null; currentNode = currentNode.childNodes.get(dirPart)) {
292 nodes.add(currentNode);
293 if (currentPath.indexOf(
'/', 1) >= 0) {
294 dirPart = currentPath.substring(1, currentPath.indexOf(
'/', 1));
295 currentPath = currentPath.substring(currentPath.indexOf(
'/', 1));
296 }
else if (currentPath.indexOf(
'/') >= 0) {
297 dirPart = currentPath.substring(1);
303 return new TreePath(nodes.toArray());
308 public String toString() {