/** * Copyright (c) 2013, Redsolution LTD. All rights reserved. * * This file is part of Xabber project; you can redistribute it and/or * modify it under the terms of the GNU General Public License, Version 3. * * Xabber 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 General Public License for more details. * * You should have received a copy of the GNU General Public License, * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.xabber.xmpp; import android.util.Xml; import org.jxmpp.util.XmppDateTime; import org.xmlpull.v1.XmlSerializer; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import java.util.Date; /** * Set of functions commonly used by packet writers. * * @author alexander.ivanov */ public final class SerializerUtils { private SerializerUtils() { } /** * Returned packet as string with xml. String is ready to be written to the * stream. * * @param instance * @return */ public static String toXml(Instance instance) { Writer writer = new StringWriter(); XmlSerializer serializer = Xml.newSerializer(); try { serializer.setOutput(writer); instance.serialize(serializer); serializer.flush(); } catch (IOException e) { return ""; } return writer.toString(); } /** * Serialize container using its element name, namespace and content. * * @param serializer * @param container * @throws IOException */ public static void serialize(XmlSerializer serializer, Container container) throws IOException { serializer.setPrefix("", container.getNamespace()); serializer.startTag(container.getNamespace(), container.getElementName()); container.serializeContent(serializer); serializer.endTag(container.getNamespace(), container.getElementName()); } /** * Adds inner tag. * * @param serializer * @param elementName * @throws IOException */ public static void addEmtpyTag(XmlSerializer serializer, String elementName) throws IOException { serializer.startTag(null, elementName); serializer.endTag(null, elementName); } /** * Adds inner tag with text payload. * * @param serializer * @param elementName * @param innerValue * @throws IOException */ public static void addTextTag(XmlSerializer serializer, String elementName, String innerValue) throws IOException { serializer.startTag(null, elementName); serializer.text(innerValue); serializer.endTag(null, elementName); } public static void addDateTimeTag(XmlSerializer serializer, String elementName, Date innerValue) throws IOException { addTextTag(serializer, elementName, serializeDateTime(innerValue)); } public static void addIntegerTag(XmlSerializer serializer, String elementName, Integer innerValue) throws IOException { addTextTag(serializer, elementName, serializeInteger(innerValue)); } public static void addBooleanTag(XmlSerializer serializer, String elementName, Boolean innerValue) throws IOException { addTextTag(serializer, elementName, serializeBoolean(innerValue)); } /** * Sets attribute. * * @param serializer * @param attributeName * @param value * @throws IOException */ public static void setTextAttribute(XmlSerializer serializer, String attributeName, String value) throws IOException { serializer.attribute(null, attributeName, value); } public static void setDateTimeAttribute(XmlSerializer serializer, String attributeName, Date value) throws IOException { setTextAttribute(serializer, attributeName, serializeDateTime(value)); } public static void setIntegerAttribute(XmlSerializer serializer, String attributeName, Integer value) throws IOException { setTextAttribute(serializer, attributeName, serializeInteger(value)); } public static void setBooleanAttribute(XmlSerializer serializer, String attributeName, Boolean value) throws IOException { setTextAttribute(serializer, attributeName, serializeBoolean(value)); } /** * Creates string with date and time according to * http://xmpp.org/extensions/xep-0082.html * * @param value * @return <code>null</code> if value was <code>null</code>. */ public static String serializeDateTime(Date value) { if (value == null) return null; return XmppDateTime.formatXEP0082Date(value); } /** * @param value * @return <code>null</code> if source value was <code>null</code>. */ public static String serializeInteger(Integer value) { if (value == null) return null; return value.toString(); } /** * @param value * @return <code>null</code> if value was <code>null</code>. */ public static String serializeBoolean(Boolean value) { if (value == null) return null; return value.toString(); } }