/src/com/google/wireless/gdata/contacts/serializer/xml/XmlContactEntryGDataSerializer.java
Java | 256 lines | 204 code | 41 blank | 11 comment | 36 complexity | ac5de8e8af7cc1d59be9018619a7f8d4 MD5 | raw file
- // Copyright 2007 The Android Open Source Project
- package com.google.wireless.gdata.contacts.serializer.xml;
- import com.google.wireless.gdata.contacts.data.ContactEntry;
- import com.google.wireless.gdata.contacts.data.ContactsElement;
- import com.google.wireless.gdata.contacts.data.EmailAddress;
- import com.google.wireless.gdata.contacts.data.ImAddress;
- import com.google.wireless.gdata.contacts.data.Organization;
- import com.google.wireless.gdata.contacts.data.PhoneNumber;
- import com.google.wireless.gdata.contacts.data.PostalAddress;
- import com.google.wireless.gdata.contacts.data.GroupMembershipInfo;
- import com.google.wireless.gdata.contacts.parser.xml.XmlContactsGDataParser;
- import com.google.wireless.gdata.data.StringUtils;
- import com.google.wireless.gdata.data.ExtendedProperty;
- import com.google.wireless.gdata.parser.ParseException;
- import com.google.wireless.gdata.parser.xml.XmlGDataParser;
- import com.google.wireless.gdata.parser.xml.XmlParserFactory;
- import com.google.wireless.gdata.serializer.xml.XmlEntryGDataSerializer;
- import org.xmlpull.v1.XmlSerializer;
- import java.io.IOException;
- import java.util.Enumeration;
- import java.util.Hashtable;
- /**
- * Serializes Google Contact entries into the Atom XML format.
- */
- public class XmlContactEntryGDataSerializer extends XmlEntryGDataSerializer {
- public XmlContactEntryGDataSerializer(XmlParserFactory factory, ContactEntry entry) {
- super(factory, entry);
- }
- @Override
- protected void declareExtraEntryNamespaces(XmlSerializer serializer) throws IOException {
- super.declareExtraEntryNamespaces(serializer);
- serializer.setPrefix(XmlContactsGDataParser.NAMESPACE_CONTACTS,
- XmlContactsGDataParser.NAMESPACE_CONTACTS_URI);
- }
- protected ContactEntry getContactEntry() {
- return (ContactEntry) getEntry();
- }
- /* (non-Javadoc)
- * @see XmlEntryGDataSerializer#serializeExtraEntryContents
- */
- protected void serializeExtraEntryContents(XmlSerializer serializer, int format)
- throws ParseException, IOException {
- ContactEntry entry = getContactEntry();
- entry.validate();
- serializeLink(serializer, XmlContactsGDataParser.LINK_REL_EDIT_PHOTO,
- entry.getLinkEditPhotoHref(), entry.getLinkEditPhotoType());
- serializeLink(serializer, XmlContactsGDataParser.LINK_REL_PHOTO,
- entry.getLinkPhotoHref(), entry.getLinkPhotoType());
- // Serialize the contact specific parts of this entry. Note that
- // gd:ContactSection and gd:geoPt are likely to be deprecated, and
- // are not currently serialized.
- Enumeration eachEmail = entry.getEmailAddresses().elements();
- while (eachEmail.hasMoreElements()) {
- serialize(serializer, (EmailAddress) eachEmail.nextElement());
- }
- Enumeration eachIm = entry.getImAddresses().elements();
- while (eachIm.hasMoreElements()) {
- serialize(serializer, (ImAddress) eachIm.nextElement());
- }
- Enumeration eachPhone = entry.getPhoneNumbers().elements();
- while (eachPhone.hasMoreElements()) {
- serialize(serializer, (PhoneNumber) eachPhone.nextElement());
- }
- Enumeration eachAddress = entry.getPostalAddresses().elements();
- while (eachAddress.hasMoreElements()) {
- serialize(serializer, (PostalAddress) eachAddress.nextElement());
- }
- Enumeration eachOrganization = entry.getOrganizations().elements();
- while (eachOrganization.hasMoreElements()) {
- serialize(serializer, (Organization) eachOrganization.nextElement());
- }
- Enumeration eachExtendedProperty = entry.getExtendedProperties().elements();
- while (eachExtendedProperty.hasMoreElements()) {
- serialize(serializer, (ExtendedProperty) eachExtendedProperty.nextElement());
- }
- Enumeration eachGroup = entry.getGroups().elements();
- while (eachGroup.hasMoreElements()) {
- serialize(serializer, (GroupMembershipInfo) eachGroup.nextElement());
- }
- serializeYomiName(serializer, entry.getYomiName());
- }
- private static void serialize(XmlSerializer serializer, EmailAddress email)
- throws IOException, ParseException {
- if (StringUtils.isEmptyOrWhitespace(email.getAddress())) return;
- serializer.startTag(XmlGDataParser.NAMESPACE_GD_URI, "email");
- serializeContactsElement(serializer, email, XmlContactsGDataParser.TYPE_TO_REL_EMAIL);
- serializer.attribute(null /* ns */, "address", email.getAddress());
- serializer.endTag(XmlGDataParser.NAMESPACE_GD_URI, "email");
- }
- private static void serialize(XmlSerializer serializer, ImAddress im)
- throws IOException, ParseException {
- if (StringUtils.isEmptyOrWhitespace(im.getAddress())) return;
- serializer.startTag(XmlGDataParser.NAMESPACE_GD_URI, "im");
- serializeContactsElement(serializer, im, XmlContactsGDataParser.TYPE_TO_REL_IM);
- serializer.attribute(null /* ns */, "address", im.getAddress());
- String protocolString;
- switch (im.getProtocolPredefined()) {
- case ImAddress.PROTOCOL_NONE:
- // don't include the attribute if no protocol was specified
- break;
- case ImAddress.PROTOCOL_CUSTOM:
- protocolString = im.getProtocolCustom();
- if (protocolString == null) {
- throw new IllegalArgumentException(
- "the protocol is custom, but the custom string is null");
- }
- serializer.attribute(null /* ns */, "protocol", protocolString);
- break;
- default:
- protocolString = (String)XmlContactsGDataParser.IM_PROTOCOL_TYPE_TO_STRING_MAP.get(
- new Byte(im.getProtocolPredefined()));
- serializer.attribute(null /* ns */, "protocol", protocolString);
- break;
- }
- serializer.endTag(XmlGDataParser.NAMESPACE_GD_URI, "im");
- }
- private static void serialize(XmlSerializer serializer, PhoneNumber phone)
- throws IOException, ParseException {
- if (StringUtils.isEmptyOrWhitespace(phone.getPhoneNumber())) return;
- serializer.startTag(XmlGDataParser.NAMESPACE_GD_URI, "phoneNumber");
- serializeContactsElement(serializer, phone, XmlContactsGDataParser.TYPE_TO_REL_PHONE);
- serializer.text(phone.getPhoneNumber());
- serializer.endTag(XmlGDataParser.NAMESPACE_GD_URI, "phoneNumber");
- }
- private static void serialize(XmlSerializer serializer, Organization organization)
- throws IOException, ParseException {
- final String name = organization.getName();
- final String title = organization.getTitle();
- if (StringUtils.isEmptyOrWhitespace(name) && StringUtils.isEmptyOrWhitespace(title)) return;
- serializer.startTag(XmlGDataParser.NAMESPACE_GD_URI, "organization");
- serializeContactsElement(serializer,
- organization, XmlContactsGDataParser.TYPE_TO_REL_ORGANIZATION);
- if (!StringUtils.isEmpty(name)) {
- serializer.startTag(XmlGDataParser.NAMESPACE_GD_URI, "orgName");
- serializer.text(name);
- serializer.endTag(XmlGDataParser.NAMESPACE_GD_URI, "orgName");
- }
- if (!StringUtils.isEmpty(title)) {
- serializer.startTag(XmlGDataParser.NAMESPACE_GD_URI, "orgTitle");
- serializer.text(title);
- serializer.endTag(XmlGDataParser.NAMESPACE_GD_URI, "orgTitle");
- }
- serializer.endTag(XmlGDataParser.NAMESPACE_GD_URI, "organization");
- }
- private static void serialize(XmlSerializer serializer, PostalAddress addr)
- throws IOException, ParseException {
- if (StringUtils.isEmptyOrWhitespace(addr.getValue())) return;
- serializer.startTag(XmlGDataParser.NAMESPACE_GD_URI, "postalAddress");
- serializeContactsElement(serializer, addr, XmlContactsGDataParser.TYPE_TO_REL_POSTAL);
- final String addressValue = addr.getValue();
- if (addressValue != null) serializer.text(addressValue);
- serializer.endTag(XmlGDataParser.NAMESPACE_GD_URI, "postalAddress");
- }
- private static void serializeContactsElement(XmlSerializer serializer, ContactsElement element,
- Hashtable typeToRelMap) throws IOException, ParseException {
- final String label = element.getLabel();
- boolean hasType = element.getType() != ContactsElement.TYPE_NONE;
- if (((label == null) && !hasType) || ((label != null) && hasType)) {
- throw new ParseException("exactly one of label or rel must be set");
- }
- if (label != null) {
- serializer.attribute(null /* ns */, "label", label);
- }
- if (hasType) {
- serializer.attribute(null /* ns */, "rel",
- (String)typeToRelMap.get(new Byte(element.getType())));
- }
- if (element.isPrimary()) {
- serializer.attribute(null /* ns */, "primary", "true");
- }
- }
- private static void serialize(XmlSerializer serializer, GroupMembershipInfo groupMembershipInfo)
- throws IOException, ParseException {
- final String group = groupMembershipInfo.getGroup();
- final boolean isDeleted = groupMembershipInfo.isDeleted();
- if (StringUtils.isEmptyOrWhitespace(group)) {
- throw new ParseException("the group must not be empty");
- }
- serializer.startTag(XmlContactsGDataParser.NAMESPACE_CONTACTS_URI, "groupMembershipInfo");
- serializer.attribute(null /* ns */, "href", group);
- serializer.attribute(null /* ns */, "deleted", isDeleted ? "true" : "false");
- serializer.endTag(XmlContactsGDataParser.NAMESPACE_CONTACTS_URI, "groupMembershipInfo");
- }
- private static void serialize(XmlSerializer serializer, ExtendedProperty extendedProperty)
- throws IOException, ParseException {
- final String name = extendedProperty.getName();
- final String value = extendedProperty.getValue();
- final String xmlBlob = extendedProperty.getXmlBlob();
- serializer.startTag(XmlGDataParser.NAMESPACE_GD_URI, "extendedProperty");
- if (!StringUtils.isEmpty(name)) {
- serializer.attribute(null /* ns */, "name", name);
- }
- if (!StringUtils.isEmpty(value)) {
- serializer.attribute(null /* ns */, "value", value);
- }
- if (!StringUtils.isEmpty(xmlBlob)) {
- serializeBlob(serializer, xmlBlob);
- }
- serializer.endTag(XmlGDataParser.NAMESPACE_GD_URI, "extendedProperty");
- }
- private static void serializeBlob(XmlSerializer serializer, String blob)
- throws IOException, ParseException {
- serializer.text(blob);
- }
- private static void serializeYomiName(XmlSerializer serializer,
- String yomiName)
- throws IOException {
- if (StringUtils.isEmpty(yomiName)) {
- return;
- }
- serializer.startTag(XmlContactsGDataParser.NAMESPACE_CONTACTS_URI, "yomiName");
- serializer.text(yomiName);
- serializer.endTag(XmlContactsGDataParser.NAMESPACE_CONTACTS_URI, "yomiName");
- }
- }