net.sourceforge.plantuml.png.Metadata Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of plantuml-mit Show documentation
Show all versions of plantuml-mit Show documentation
PlantUML is a component that allows to quickly write diagrams from text.
// THIS FILE HAS BEEN GENERATED BY A PREPROCESSOR.
package net.sourceforge.plantuml.png;
import java.io.IOException;
import java.util.Iterator;
import javax.imageio.ImageReader;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.stream.ImageInputStream;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import net.sourceforge.plantuml.security.SFile;
import net.sourceforge.plantuml.security.SImageIO;
public class Metadata {
// ::remove file when __CORE__
public static void main(String[] args) throws IOException {
final Metadata meta = new Metadata();
final int length = args.length;
for (int i = 0; i < length; i++) {
meta.readAndDisplayMetadata(new SFile(args[i]));
}
}
public void readAndDisplayMetadata(SFile file) throws IOException {
final ImageInputStream iis = SImageIO.createImageInputStream(file);
final Iterator readers = SImageIO.getImageReaders(iis);
if (readers.hasNext()) {
// pick the first available ImageReader
final ImageReader reader = readers.next();
// attach source to the reader
reader.setInput(iis, true);
// read metadata of first image
final IIOMetadata metadata = reader.getImageMetadata(0);
final String[] names = metadata.getMetadataFormatNames();
final int length = names.length;
for (int i = 0; i < length; i++) {
displayMetadata(metadata.getAsTree(names[i]));
}
}
}
private void displayMetadata(Node root) {
displayMetadata(root, 0);
}
private void indent(int level) {
for (int i = 0; i < level; i++) {
System.out.print(" ");
}
}
private void displayMetadata(Node node, int level) {
// print open tag of element
indent(level);
System.out.print("<" + node.getNodeName());
final NamedNodeMap map = node.getAttributes();
if (map != null) {
// print attribute values
final int length = map.getLength();
for (int i = 0; i < length; i++) {
final Node attr = map.item(i);
System.out.print(" " + attr.getNodeName() + "=\"" + attr.getNodeValue() + "\"");
}
}
Node child = node.getFirstChild();
if (child == null) {
// no children, so close element and return
System.out.println("/>");
return;
}
// children, so close current tag
System.out.println(">");
while (child != null) {
// print children recursively
displayMetadata(child, level + 1);
child = child.getNextSibling();
}
// print close tag of element
indent(level);
System.out.println("" + node.getNodeName() + ">");
}
}