/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.pepsoft.minecraft.mapexplorer; import org.jnbt.*; import javax.swing.*; import java.text.Collator; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; /** * * @author pepijn */ public class TagNode extends Node { TagNode(Tag tag) { this.tag = tag; } @Override public String getName() { StringBuilder sb = new StringBuilder(); String name = tag.getName(); if ((name != null) && (name.trim().length() > 0)) { sb.append(name.trim()); sb.append(" ("); } sb.append(tag.getClass().getSimpleName()); if ((name != null) && (name.trim().length() > 0)) { sb.append(')'); } if (tag instanceof StringTag) { sb.append(": \""); sb.append(tag.getValue()); sb.append('"'); } else if (tag instanceof ByteArrayTag) { sb.append(": "); sb.append(((ByteArrayTag) tag).getValue().length); sb.append(" bytes of data"); } else if (tag instanceof IntArrayTag) { sb.append(": "); sb.append(((IntArrayTag) tag).getValue().length * 4); sb.append(" bytes of data"); } else if (! ((tag instanceof CompoundTag) || (tag instanceof ListTag))) { sb.append(": "); sb.append(tag.getValue()); } return sb.toString(); } @Override public Icon getIcon() { return null; } @Override public boolean isLeaf() { return ! ((tag instanceof CompoundTag) || (tag instanceof ListTag)); } @Override protected Node[] loadChildren() { List<Tag> tagList = new ArrayList<>(); if (tag instanceof CompoundTag) { Map<String, Tag> tags = ((CompoundTag) tag).getValue(); tagList.addAll(tags.values()); Collections.sort(tagList, (tag1, tag2) -> COLLATOR.compare(tag1.getName(), tag2.getName())); } else if (tag instanceof ListTag) { List<Tag> tags = ((ListTag) tag).getValue(); tagList.addAll(tags); } return tagList.stream().map(TagNode::new).toArray(Node[]::new); } private final Tag tag; private static final Collator COLLATOR = Collator.getInstance(); }