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<>();
89 private final boolean dir;
96 this(
true, null,
"/");
126 name = namedObject.getName();
136 if (parent != null) {
149 childNodeArray = null;
153 String realName = path.startsWith(
"/") ? path.substring(1) : path;
155 if (realName.contains(
"/")) {
157 final String dirName = realName.substring(0, realName.indexOf(
'/'));
158 realName = realName.substring(realName.indexOf(
'/'));
160 if (dirNode == null) {
162 childNodes.put(dirName, dirNode);
164 dirNode.
append(realName, namedObject);
169 childNodes.put(realName, faceNode);
177 if (childNodeArray == null) {
178 childNodeArray = childNodes.values().toArray(
new NamedTreeNode<?>[childNodes.size()]);
207 public String getName() {
213 public Enumeration<NamedTreeNode<E>> children() {
214 return Collections.enumeration(childNodes.values());
221 public boolean getAllowsChildren() {
227 public TreeNode getChildAt(
final int childIndex) {
229 assert childNodeArray != null;
230 return childNodeArray[childIndex];
234 public int getChildCount() {
235 return childNodes.size();
239 public int getIndex(@NotNull
final TreeNode node) {
241 final int result = Arrays.binarySearch(childNodeArray, node);
242 return result < 0 ? -1 : result;
255 public boolean isLeaf() {
260 public boolean equals(@Nullable
final Object obj) {
264 if (obj == null || obj.getClass() != getClass()) {
268 return dir == namedTreeNode.
dir && name.equals(namedTreeNode.
name);
272 public int hashCode() {
273 return (dir ? 1 : 0) ^ name.hashCode();
278 return dir ^ !o.dir ? name.compareTo(o.name) : dir ? -1 : 1;
287 public TreePath getPathFor(@NotNull
final String path) {
288 final Collection<NamedTreeNode<E>> nodes =
new ArrayList<>();
289 String currentPath = path;
293 nodes.add(currentNode);
294 if (currentPath.indexOf(
'/', 1) >= 0) {
295 dirPart = currentPath.substring(1, currentPath.indexOf(
'/', 1));
296 currentPath = currentPath.substring(currentPath.indexOf(
'/', 1));
297 }
else if (currentPath.indexOf(
'/') >= 0) {
298 dirPart = currentPath.substring(1);
304 return new TreePath(nodes.toArray());
309 public String toString() {
final NamedTreeNode< E > parent
The parent node, which may be.
NamedTreeNode(final boolean dir, @Nullable final NamedTreeNode< E > parent, @NotNull final String name)
Create a NamedTreeNode.
NamedTreeNode<?> [] childNodeArray
The node array.
static final long serialVersionUID
The serial version UID.
void initLazyArray()
Makes sure that the variable childNodeArray points to a valid array.
final String name
The node name.
final SortedMap< String, NamedTreeNode< E > > childNodes
The children.
String getPath()
Get the path of this AbstractNamedObject.
final NamedObject namedObject
The node object.
NamedTreeNode()
Create a root node.
final boolean dir
Directory state,.
Exception thrown to indicate that a named object is not acceptable.
NamedTreeNode(final boolean dir, @Nullable final NamedTreeNode< E > parent, @NotNull final NamedObject namedObject)
Create a NamedTreeNode.
void append(@NotNull final NamedObject namedObject)
Append a node.
void append(@NotNull final String path, @NotNull final NamedObject namedObject)
Appends a node.
TreeNode implementation for Named Objects (like arches, faces, animations, artifacts etc...