ingo@359: package de.intevation.artifactdatabase.state; ingo@359: ingo@359: import java.util.ArrayList; felix@419: import java.util.LinkedHashMap; ingo@359: import java.util.List; ingo@359: import java.util.Map; ingo@359: import java.util.Set; ingo@359: ingo@359: import org.w3c.dom.Document; ingo@359: import org.w3c.dom.Element; ingo@359: import org.w3c.dom.Node; ingo@359: ingo@359: /** felix@419: * Attributes keep the order in which they were inserted. ingo@359: * @author Ingo Weinzierl ingo@359: */ ingo@359: public class DefaultSection implements Section { ingo@359: ingo@359: protected String id; ingo@359: ingo@359: protected List
subsections; ingo@359: felix@419: /** Attribute-map. */ ingo@359: protected Map attributes; ingo@359: ingo@359: ingo@359: /** ingo@359: * Creates a new DefaultSection instance. Note, that the id is used ingo@359: * as Node name of the new Element that is created in toXML(). ingo@359: */ ingo@359: public DefaultSection(String id) { ingo@359: this.id = id; felix@419: // Use LinkedHashMap to keep insertion order. felix@419: this.attributes = new LinkedHashMap(); ingo@359: this.subsections = new ArrayList
(); ingo@359: } ingo@359: ingo@359: ingo@359: @Override ingo@359: public String getId() { ingo@359: return id; ingo@359: } ingo@359: ingo@359: ingo@359: @Override ingo@359: public void addSubsection(Section subsection) { ingo@359: if (subsection != null) { ingo@359: subsections.add(subsection); ingo@359: } ingo@359: } ingo@359: ingo@359: ingo@359: @Override ingo@359: public int getSubsectionCount() { ingo@359: return subsections.size(); ingo@359: } ingo@359: ingo@359: ingo@359: @Override ingo@359: public Section getSubsection(int pos) { ingo@359: if (pos >= 0 && pos < getSubsectionCount()) { ingo@359: return subsections.get(pos); ingo@359: } ingo@359: ingo@359: return null; ingo@359: } ingo@359: ingo@359: felix@419: /** Adding attribute to end of list. */ ingo@359: @Override ingo@359: public void addAttribute(String key, Attribute attribute) { ingo@359: if (key != null && key.length() > 0 && attribute != null) { ingo@359: attributes.put(key, attribute); ingo@359: } ingo@359: } ingo@359: ingo@359: ingo@359: @Override ingo@359: public Attribute getAttribute(String key) { ingo@359: if (key == null || key.length() == 0) { ingo@359: return null; ingo@359: } ingo@359: ingo@359: return attributes.get(key); ingo@359: } ingo@359: ingo@359: ingo@359: @Override ingo@359: public Set getKeys() { ingo@359: return attributes.keySet(); ingo@359: } ingo@359: ingo@359: ingo@359: @Override ingo@359: public void toXML(Node parent) { ingo@359: Document owner = parent.getOwnerDocument(); ingo@359: Element sectionEl = owner.createElement(getId()); ingo@359: ingo@359: parent.appendChild(sectionEl); ingo@359: ingo@359: for (String key: getKeys()) { ingo@359: Attribute attr = getAttribute(key); ingo@359: attr.toXML(sectionEl); ingo@359: } ingo@359: ingo@359: for (int i = 0, n = getSubsectionCount(); i < n; i++) { ingo@359: Section subsection = getSubsection(i); ingo@359: subsection.toXML(sectionEl); ingo@359: } ingo@359: } ingo@359: } ingo@359: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :