ingo@359: package de.intevation.artifactdatabase.state;
ingo@359: 
ingo@359: import java.util.ArrayList;
ingo@359: import java.util.HashMap;
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: /**
ingo@359:  * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
ingo@359:  */
ingo@359: public class DefaultSection implements Section {
ingo@359: 
ingo@359:     protected String id;
ingo@359: 
ingo@359:     protected List<Section> subsections;
ingo@359: 
ingo@359:     protected Map<String, Attribute> attributes;
ingo@359: 
ingo@359: 
ingo@359:     /**
ingo@359:      * Creates a new DefaultSection instance. <b>Note, that the <i>id</i> is used
ingo@359:      * as Node name of the new Element that is created in toXML().</b>
ingo@359:      */
ingo@359:     public DefaultSection(String id) {
ingo@359:         this.id          = id;
ingo@359:         this.attributes  = new HashMap<String, Attribute>();
ingo@359:         this.subsections = new ArrayList<Section>();
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: 
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<String> 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 :