package org.krakenapps.docxcod; import java.util.ArrayList; import java.util.List; import org.w3c.dom.NamedNodeMap; public class Relationship { public Relationship parent; public String id; public String target; public String type; public List<Relationship> children; public Relationship() { parent = null; children = new ArrayList<Relationship>(); } public Relationship(Relationship p, NamedNodeMap m) { parent = p; id = m.getNamedItem("Id").getNodeValue(); target = m.getNamedItem("Target").getNodeValue(); type = m.getNamedItem("Type").getNodeValue(); children = new ArrayList<Relationship>(); } public String toString() { if (type != null) { String prefix = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/"; String shortType = type.startsWith(prefix) ? type.substring(prefix.length()) : type; if (children.isEmpty()) return String.format("[%s, %s, %s]", id, target, shortType); else return String.format("[%s, %s, %s, %d children]", id, target, shortType, children.size()); } else { return String.format("[root, %d children]", children.size()); } } public String toSummaryString() { if (target == null) return String.format("%s", toSummaryString(children)); else { if (children == null || children.isEmpty()) { return String.format("%s", target); } else { return String.format("[%s%s]", target, toSummaryString(children)); } } } private Object toSummaryString(List<Relationship> children) { if (children == null) return ""; if (children.size() > 0) { StringBuilder sb = new StringBuilder(); sb.append(" ["); for (Relationship r: children) { if (r != children.get(0)) sb.append(" "); sb.append(r.toSummaryString()); } sb.append("]"); return sb.toString(); } else { return ""; } } }