package org.societies.platform.socialdata.converters;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.shindig.social.core.model.AccountImpl;
import org.apache.shindig.social.core.model.AddressImpl;
import org.apache.shindig.social.core.model.ListFieldImpl;
import org.apache.shindig.social.core.model.NameImpl;
import org.apache.shindig.social.core.model.PersonImpl;
import org.apache.shindig.social.opensocial.model.Account;
import org.apache.shindig.social.opensocial.model.Address;
import org.apache.shindig.social.opensocial.model.ListField;
import org.apache.shindig.social.opensocial.model.Name;
import org.apache.shindig.social.opensocial.model.Person;
import org.apache.shindig.social.opensocial.model.Person.Gender;
import org.json.JSONException;
import org.json.JSONObject;
public class PersonConverterFromTwitter implements PersonConverter {
public static String STATUS_COUNT = "statuses_count";
public static String LANGUAGE = "lang";
public static String ID = "id";
public static String NAME = "name";
public static String SCREEN_NAME = "screen_name";
public static String CREATED_AT = "created_at";
public static String LOCATION = "location";
public static String FRIENDS_COUNT = "friends_count";
public static String IMAGE = "profile_image_url";
public static String FOLLOWERS_COUNT= "followers_count";
public static String STATUSES_COUNT = "statuses_count";
public static String DESCRIPTION = "description";
public static String TIMEZONE = "time_zone";
public static String BIRTHDAY = "birthday";
public static String EMAIL = "email";
public static String GENDER = "gender";
public static String STATUS = "status";
public static String COORDINATES = "coordinates";
public static String TEXT = "text";
public static String CONTRIBUTIONS = "contributors";
public static String GEO = "geo";
public static String RETWEETED = "retweeted";
public static String TWEET_ID = "id";
private String rawData;
private JSONObject db;
private Person person;
public Person load(String data){
person = new PersonImpl();
this.rawData = data;
try{
db = new JSONObject(data);
if (db.has("error"))
return person;
person.setId("twitter:" + db.getString(ID));
//if(db.has(UCT)) person.setUtcOffset(db.getLong(UCT));
if (db.has(NAME)) {
Name name = new NameImpl(db.getString(NAME));
name.setFormatted(db.getString(NAME));
person.setName(name);
}
if (db.has(SCREEN_NAME)) person.setDisplayName(db.getString(SCREEN_NAME));
if (db.has(DESCRIPTION)) person.setAboutMe(db.getString(DESCRIPTION));
if (db.has(LOCATION)) person.setCurrentLocation(setLocation(db.getString(LOCATION)));
// if (db.has(EMAIL)) person.setEmails(getMails(db.getString(EMAIL)));
// if (db.has(BIRTHDAY)) person.setBirthday(getBirthDay(db.getString(BIRTHDAY)));
// if (db.has(GENDER)) person.setGender(gender(db.getString(GENDER)));
if (db.has("profile_image_url_https")) person.setThumbnailUrl(db.getString("profile_image_url_https"));
}
catch (JSONException e) {
e.printStackTrace();
}
setAccount(); // Set Twitter Account
person.setLanguagesSpoken(genLanguages());
// System.out.println("profile:\n"+person.getTurnOns().toString());
return person;
}
private List<String> genLanguages(){
ArrayList<String> langs = new ArrayList<String>();
try {
if(!db.has(LANGUAGE))
return null;
langs.add(db.getString(LANGUAGE));
} catch (JSONException e) {}
return langs;
}
private void setAccount(){
Account account = new AccountImpl();
try{
account.setDomain("twitter.com");
account.setUsername(db.getString(NAME));
account.setUserId(db.getString(ID));
if (db.has("screen_name"));
account.setUsername(db.getString("screen_name"));
}
catch (JSONException e) {
e.printStackTrace();
}
//Add the twitter account
List<Account> accounts = new ArrayList<Account>();
accounts.add(account);
person.setAccounts(accounts);
}
private Address setLocation(String data) {
Address address = new AddressImpl();
try{
address.setFormatted(data);
}
catch(Exception ex){}
return address;
}
public Object getData(String key){
try {
if (db.has(key)){
return db.get(key);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
public String getString(String key){
try {
if (db.has(key)){
return db.getString(key);
}
} catch (JSONException e) {
e.printStackTrace();
}
return "";
}
public String getRawData(){
return rawData;
}
private List<ListField> getMails(String mail){
List<ListField> emails = new ArrayList<ListField>();
ListField email = new ListFieldImpl();
email.setPrimary(true);
email.setType("home");
email.setValue(mail);
emails.add(email);
return emails;
}
private Gender gender(String g){
if (g.equals("male"))
return Gender.male;
else
return Gender.female;
}
private Date getBirthDay(String date) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
return df.parse(date);
} catch (ParseException e) {
}
return null;
}
}