package dr.xml; import org.jdom.Element; import org.jdom.output.XMLOutputter; import java.io.IOException; import java.io.OutputStream; import java.util.LinkedList; /** * Package: XMLModelIdentifiable * Description: * <p/> * <p/> * Created by * Alexander V. Alekseyenko (alexander.alekseyenko@gmail.com) * Date: Apr 13, 2009 * Time: 10:38:05 AM */ public class XMLModelIdentifiable { private String name; private Element definition; private Element definitionIdref; private boolean defined; private LinkedList<Element> references; public XMLModelIdentifiable(String name, Element definition) { this.name = name; this.definition = definition; definitionIdref = new Element(definition.getName()); definitionIdref.setAttribute("idref", name); defined = true; references = new LinkedList<Element>(); } public void removeDefinition() { if (defined) { definition.getParentElement().addContent(definitionIdref); definition.detach(); defined = false; } } public void restoreDefinition() { if (!defined) { definitionIdref.getParentElement().addContent(definition); definitionIdref.detach(); defined = true; } } public void rename(String newName) { name = newName; definition.setAttribute("id", newName); definitionIdref.setAttribute("idref", newName); for (Element ref : references) { ref.setAttribute("idref", newName); } } public void addReference(Element newRef) { if (newRef.getAttribute("idref").getValue().equals(name)) { references.addLast(newRef); } } public void print(XMLOutputter outputter, OutputStream ostream) { if (ostream == null) { ostream = System.out; } try { if (defined) { outputter.output(definition, ostream); } else { outputter.output(definitionIdref, ostream); } for (Element ref : references) { outputter.output(ref, ostream); } } catch (IOException e) { System.err.println(e); } } }