/** * $RCSfile$ * $Revision$ * $Date$ * * Copyright (C) 2004 Jive Software. All rights reserved. * * This software is published under the terms of the GNU Public License (GPL), * a copy of which is included in this distribution. */ package org.jivesoftware.messenger; import org.jivesoftware.messenger.spi.AbstractFragment; import java.util.Iterator; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; import org.dom4j.Element; public class PayloadFragment extends AbstractFragment { public PayloadFragment(String namespace, String name) { this.namespace = namespace; this.name = name; } public void send(XMLStreamWriter xmlSerializer, int version) throws XMLStreamException { xmlSerializer.writeStartElement(name); xmlSerializer.writeDefaultNamespace(namespace); Iterator frags = getFragments(); while (frags != null && frags.hasNext()) { ((XMPPFragment)frags.next()).send(xmlSerializer, version); } xmlSerializer.writeEndElement(); } public XMPPFragment createDeepCopy() { PayloadFragment payload = new PayloadFragment(namespace, name); Iterator frags = getFragments(); while (frags != null && frags.hasNext()) { payload.addFragment((XMPPFragment)frags.next()); } return payload; } /** * <p>Converts the given fragment into a payload fragment.</p> * <p>All sub-elements of the original fragment are broken out into separate * MetaDataFragments. Currently only supports XMPPDOMFragment objects and their descendents. * During conversion attributes of the root element is lost.</p> * * @param frag The fragment to convert (must be XMPPDOMFragment or descendent) * @return The converted fragment with all sub-fragments broken up into separate fragments. * @throws IllegalArgumentException If the given fragment does not implement XMPPDOMFragment */ public static PayloadFragment convertToPayload(XMPPFragment frag) throws IllegalArgumentException { PayloadFragment payload = null; if (frag instanceof XMPPDOMFragment) { XMPPDOMFragment dom = (XMPPDOMFragment)frag; payload = new PayloadFragment(dom.getNamespace(), dom.getName()); Iterator frags = dom.getRootElement().elementIterator(); while (frags.hasNext()) { payload.addFragment(new MetaDataFragment((Element)frags.next())); } } else { throw new IllegalArgumentException(); } return payload; } }