/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the Common Development
* and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at
* src/com/vodafone360/people/VODAFONE.LICENSE.txt or
* http://github.com/360/360-Engine-for-Android
* See the License for the specific language governing permissions and
* limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each file and
* include the License file at src/com/vodafone360/people/VODAFONE.LICENSE.txt.
* If applicable, add the following below this CDDL HEADER, with the fields
* enclosed by brackets "[]" replaced with your own identifying information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
* Copyright 2010 Vodafone Sales & Services Ltd. All rights reserved.
* Use is subject to license terms.
*/
package com.vodafone360.people.datatypes;
import java.nio.ByteBuffer;
import java.util.Enumeration;
import java.util.Hashtable;
import com.vodafone360.people.datatypes.ContactDetail.DetailKeyTypes;
/**
* BaseDataType encapsulating an Activity Contact which contains contact
* information associated with an Activity response retrieved from the server.
*/
public class ActivityContact extends BaseDataType {
/**
* Tags for fields associated with Activity Contacts.
*/
private enum Tags {
CONTACT_ID("contactid"),
USER_ID("userid"),
NAME("name"),
ADDRESS("address"),
TYPE("type"),
NETWORK("network"),
AVATAR("avatar"),
AVATAR_MIME("avatarmime"),
AVATAR_URL("avatarurl");
private final String tag;
/**
* Constructor for Tags item.
*
* @param s String value associated with Tags item.
*/
private Tags(final String s) {
tag = s;
}
/**
* String value associated with Tags item
*
* @return String associated with Tags item
*/
private String tag() {
return tag;
}
/**
* Find Tags item for specified String
*
* @param tag String value to find Tags item for
* @return Tags item for specified String, null otherwise
*/
private static Tags findTag(String tag) {
for (Tags tags : Tags.values()) {
if (tag.compareTo(tags.tag()) == 0) {
return tags;
}
}
return null;
}
}
/** The contact server id if the activity can be related to a contact. */
public Long mContactId = null;
/** Local id for a Contact if activity can be related to a Contact. */
public Long mLocalContactId = null;
/**
* The user id if the activity can be related to a user, e.g. a message from
* a VF user but non-contact contains userid but not contactid, whereas a
* message from a contact that is also a VF user contains both contactid and
* userid.
*/
public Long mUserId = null;
/**
* Contains the name of the other user. When contactid is present, the name
* from the addressbook. When only userid is present, the name on the user's
* profile. When none is present, the name captured from the outside, if
* possible, e.g. the name on the email From header. In a case like a SMS
* received from an unknown number, there is no name.
*/
public String mName = null;
/**
* Optional for non-messages. Contains the MSISDN, email, etc, needed to
* reply back.
*/
public String mAddress = null;
/**
* Optional for non-messages. Contains the type (mobile, work, etc.)
* captured from the addressbook, if available.
*/
private ContactDetail.DetailKeyTypes mType = null;
/**
* This field contains information about the network (e.g. phone, flickr,
* google).
*/
public String mNetwork = null;
/**
* Defines the binary data for the user's icon. The type of the binary data
* is defined into the avatarmime field.
*/
private ByteBuffer mAvatar = null;
/** Defines the MIME type of the avatar binary data. */
private String mAvatarMime = null;
/**
* Defines an http url that the client can use to retrieve the avatar binary
* data. Can be used to embed the url into an IMG HTML tag.
*/
public String mAvatarUrl = null;
/** {@inheritDoc} */
@Override
public int getType() {
return ACTIVITY_CONTACT_DATA_TYPE;
}
/**
* Create ActivityContact from Hashtable (generated from Hessian encoded
* response).
*
* @param hash Hashtable containing ActivityContact data
* @return ActivityContact created from supplied Hashtable.
*/
public static ActivityContact createFromHashTable(Hashtable<String, Object> hash) {
final ActivityContact zcon = new ActivityContact();
Enumeration<String> e = hash.keys();
while (e.hasMoreElements()) {
String key = e.nextElement();
Object value = hash.get(key);
Tags tag = Tags.findTag(key);
zcon.setValue(tag, value);
}
return zcon;
}
/**
* Sets the value of the member data item associated with the specified tag.
*
* @param tag Current tag
* @param val Value associated with the tag
*/
private void setValue(Tags tag, Object val) {
if (tag != null) {
switch (tag) {
case ADDRESS:
mAddress = (String)val;
break;
case AVATAR:
byte[] avabytes = (byte[])val;
mAvatar = ByteBuffer.allocate(avabytes.length);
mAvatar.put(avabytes);
break;
case AVATAR_MIME:
mAvatarMime = (String)val;
break;
case AVATAR_URL:
mAvatarUrl = (String)val;
break;
case CONTACT_ID:
mContactId = (Long)val;
break;
case NAME:
mName = (String)val;
break;
case NETWORK:
mNetwork = (String)val;
break;
case TYPE:
mType = DetailKeyTypes.findKey((String)val);
break;
case USER_ID:
mUserId = (Long)val;
break;
default:
// Do nothing.
break;
}
}
}
/** {@inheritDoc} */
@Override
public String toString() {
final StringBuffer sb =
new StringBuffer("ActivityContact:\n\t\tContact Id = ");
sb.append(mContactId);
sb.append("\n\t\tLocal contact Id = "); sb.append(mLocalContactId);
sb.append("\n\t\tUser Id = "); sb.append(mUserId);
sb.append("\n\t\tName = "); sb.append(mName);
sb.append("\n\t\tAddress = "); sb.append(mAddress);
sb.append("\n\t\tType = "); sb.append(mType);
sb.append("\n\t\tNetwork = "); sb.append(mNetwork);
if (mAvatar != null) {
sb.append("\n\t\tAvatar = "); sb.append(String.valueOf(mAvatar));
}
sb.append("\n\t\tAvatar mime = "); sb.append(mAvatarMime);
sb.append("\n\t\tAvatar URL = "); sb.append(mAvatarUrl);
return sb.toString();
}
}