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 :