/*
* Funambol is a mobile platform developed by Funambol, Inc.
* Copyright (C) 2003 - 2007 Funambol, Inc.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by
* the Free Software Foundation with the addition of the following permission
* added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
* WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE
* WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* This program 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 Affero General Public License
* along with this program; if not, see http://www.gnu.org/licenses or write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA.
*
* You can contact Funambol, Inc. headquarters at 643 Bair Island Road, Suite
* 305, Redwood City, CA 94063, USA, or at email address info@funambol.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License
* version 3, these Appropriate Legal Notices must retain the display of the
* "Powered by Funambol" logo. If the display of the logo is not reasonably
* feasible for technical reasons, the Appropriate Legal Notices must display
* the words "Powered by Funambol".
*/
package com.funambol.common.pim.model.contact;
import com.funambol.common.pim.model.common.Property;
import com.funambol.common.pim.model.common.TypifiedPluralProperty;
import com.funambol.util.Base64;
import java.util.ArrayList;
import java.util.List;
/**
* An object containing the personal details of a contact
*/
public class PersonalDetail extends ContactDetail {
private List<TypifiedPluralProperty> photos;
private Property geo;
private String spouse;
private String children;
private String anniversary;
private String birthday;
private String gender;
private String hobbies;
/**
* Creates an empty list of personal details
*/
public PersonalDetail() {
super();
photos = new ArrayList<TypifiedPluralProperty>();
geo = new Property();
spouse = null;
children = null;
anniversary = null;
birthday = null;
gender = null;
hobbies = null;
}
/**
* Returns the geo for this Personal Detail
*
* @return the geo for this Personal Detail
*/
public Property getGeo() {
return geo;
}
/**
* Returns the spouse for this Personal Detail
*
* @return the spouse for this Personal Detail
*/
public String getSpouse() {
return spouse;
}
/**
* Returns the children for this Personal Detail
*
* @return the children for this Personal Detail
*/
public String getChildren() {
return children;
}
/**
* Returns the anniversary for this Personal Detail
*
* @return the anniversary for this Personal Detail
*/
public String getAnniversary() {
return anniversary;
}
/**
* Returns the birthday for this Personal Detail
*
* @return the birthday for this Personal Detail
*/
public String getBirthday() {
return birthday;
}
/**
* Returns the gender for this Personal Detail
*
* @return the gender for this Personal Detail
*/
public String getGender() {
return gender;
}
/**
* Returns the photos for this Personal Detail
*
* @return the photos for this Personal Detail
* @deprecated Since v65, use getPhotoObjects and setPhotoObjects
*/
public List<TypifiedPluralProperty> getPhotos() {
return photos;
}
/**
* Returns the photos as <code>Photo</code> and not just as Property
* @return the photo for this Personal Detail
*/
public List<Photo> getPhotoObjects() {
if (photos == null || photos.isEmpty()) {
return null;
}
List<Photo> photoObjects = new ArrayList<Photo>();
for(TypifiedPluralProperty photo : photos) {
if(photo != null) {
Photo photoObject = new Photo();
photoObject.setPreferred(photo.isPreferred());
String type = photo.getPropertyType();
String value = photo.getPropertyValueAsString();
if (value == null || value.length() == 0) {
photoObjects.add(photoObject);
continue;
}
photoObject.setType(type);
String encoding = photo.getEncoding();
String valueType = photo.getValue();
Object oValue = null;
if ("B".equalsIgnoreCase(encoding) ||
"BASE64".equalsIgnoreCase(encoding)) {
if (value != null && value.length() > 0) {
oValue = Base64.decode(value);
} else {
oValue = new byte[0];
}
} else {
oValue = value;
}
if ("URL".equalsIgnoreCase(valueType)) {
if (oValue instanceof byte[]) {
//
// really strange....an url sent in base 64
//
photoObject.setUrl(new String((byte[])oValue));
} else {
photoObject.setUrl((String)oValue);
}
} else {
photoObject.setImage((byte[])oValue);
}
photoObjects.add(photoObject);
}
}
return photoObjects;
}
/**
* Sets the geo for this Personal Detail
*
* @param geo the geo to set
*/
public void setGeo(Property geo) {
this.geo = geo;
}
/**
* Sets the spouse for this Personal Detail
*
* @param spouse the spouse to set
*/
public void setSpouse (String spouse) {
this.spouse = spouse;
}
/**
* Sets the children for this Personal Detail
*
* @param children the children to set
*/
public void setChildren (String children) {
this.children = children;
}
/**
* Sets the anniversary for this Personal Detail
*
* @param anniversary the anniversary to set
*/
public void setAnniversary (String anniversary) {
this.anniversary = anniversary;
}
/**
* Sets the birthday for this Personal Detail
*
* @param birthday the spouse to set
*/
public void setBirthday (String birthday) {
this.birthday = birthday;
}
/**
* Sets the gender for this Personal Detail
*
* @param gender the gender to set
*/
public void setGender (String gender) {
this.gender = gender;
}
/**
* Getter for property hobbies.
* @return Value of property hobbies.
*/
public java.lang.String getHobbies() {
return hobbies;
}
/**
* Setter for property hobbies.
* @param hobbies New value of property hobbies.
*/
public void setHobbies(java.lang.String hobbies) {
this.hobbies = hobbies;
}
/**
* Sets the photos
* @param photo New value of property photo.
*/
public void setPhotos(List<TypifiedPluralProperty> photos) {
this.photos = photos;
}
/**
* Add a new photo
* @param photo New value of property photo.
*/
public void addPhoto(TypifiedPluralProperty photo) {
if (photo == null) {
return;
}
photos.add(photo);
}
/**
* Add a new Photo object
* @param photo New value of property photo.
*/
public void addPhotoObject(Photo photoObject) {
if (photoObject == null) {
return;
}
TypifiedPluralProperty photo = new TypifiedPluralProperty();
photo.setType(photoObject.getType());
photo.setPreferred(photoObject.isPreferred());
if (photoObject.getUrl() != null && photoObject.getUrl().length() > 0) {
photo.setValue("URL");
photo.setPropertyValue(photoObject.getUrl());
} else {
if (photoObject.getImage() != null && photoObject.getImage().length > 0) {
String b64 = new String(Base64.encode(photoObject.getImage()));
photo.setPropertyValue(b64);
photo.setEncoding("BASE64");
//
// The charset must be null since:
// 1. it is useless since the content is in base64
// 2. on some Nokia phone it doesn't work since for some reason the phone
// adds a new photo and the result is that a contact has two photos
// Examples of wrong phones: Nokia N91, 7610, 6630
//
photo.setCharset(null);
} else {
photo.setPropertyValue("");
}
}
addPhoto(photo);
}
}