/** * */ package org.korsakow.ide.ui.controller; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.korsakow.ide.Application; import org.korsakow.ide.resources.WidgetType; import org.korsakow.ide.resources.widget.WidgetModel; import org.korsakow.ide.util.DomUtil; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** * Parses a DOM tree and populates a WidgetCanvas from it. * @author d * */ public class WidgetDomParser { private List<WidgetModel> widgets = new ArrayList<WidgetModel>(); private Map<Long, WidgetModel> idMap = new HashMap<Long, WidgetModel>(); public WidgetDomParser() { } public List<? extends WidgetModel> getWidgets() { return widgets; } public void parseDom(Document doc) { widgets = new ArrayList<WidgetModel>(); idMap = new HashMap<Long, WidgetModel>(); parseDom(doc.getDocumentElement()); } public void parseDom(Element elm) { if (elm.getTagName().equals("WidgetModel")) { widgets.add(parseDomWidget(elm)); } NodeList childNodes = elm.getChildNodes(); int length = childNodes.getLength(); for (int i = 0; i < length; ++i) { Node child = childNodes.item(i); if (child.getNodeType() == Node.ELEMENT_NODE) parseDom((Element)child); } } private WidgetModel parseDomWidget(Element elm) { Long id = Long.parseLong(elm.getAttribute("id")); String widgetType = DomUtil.getString(elm, "type"); WidgetModel widget = WidgetType.forId(widgetType).newInstance(); widget.setId(id); widget.setX(DomUtil.getInt(elm, "x")); widget.setY(DomUtil.getInt(elm, "y")); widget.setWidth(DomUtil.getInt(elm, "width")); widget.setHeight(DomUtil.getInt(elm, "height")); for (String propertyId : widget.getDynamicPropertyIds()) { Node propNode = DomUtil.findChildByTagName(elm, propertyId); if (propNode == null) // missing means null valued continue; widget.setDynamicProperty(propertyId, DomUtil.getString(elm, propertyId)); } return widget; } }