/* * $Id$ * * Copyright (c) 2000-2003 by Rodney Kinney * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License (LGPL) as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, copies are available * at http://www.opensource.org. */ package VASSAL.build; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * A Buildable instance can be initialized from a configuration file. * The configuration file is an XML file in which each XML element * represents an object. The Buildable objects are built into an * containment hierarchy that mirrors the XML structure. */ public interface Buildable { /** * Build the object * @param e the XML element containing the object data */ public void build(Element e); /** * Adds this component to its parent. * In order to make Buildable objects extensible, the child * is reponsible for adding itself to the parent. That way, * Buildable subcomponents can be defined in an extension package * without needing to modify the containing class. */ public void addTo(Buildable parent); /** * Adds a child component. Both this method and {@link #addTo} are * invoked when adding a child to a parent */ public void add(Buildable child); /** * @return an XML element from which * this component can be built */ public Element getBuildElement(Document doc); }