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.ActivityObjectImpl; 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.OrganizationImpl; import org.apache.shindig.social.core.model.PersonImpl; import org.apache.shindig.social.opensocial.model.Account; import org.apache.shindig.social.opensocial.model.ActivityObject; 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.Organization; import org.apache.shindig.social.opensocial.model.Person; import org.apache.shindig.social.opensocial.model.Person.Gender; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class PersonConverterFromLinkedin implements PersonConverter { public static String STATUS_COUNT = "statuses_count"; public static String LANGUAGE = "languages"; public static String ID = "id"; public static String FIRST_NAME = "firstName"; public static String LAST_NAME = "lastName"; 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; private List<Account> accounts; public PersonConverterFromLinkedin() { Account linkedinAccounts = new AccountImpl(); linkedinAccounts.setDomain("linkedin.com"); accounts = new ArrayList<Account>(); accounts.add(linkedinAccounts); } public Person load(String data){ person = new PersonImpl(); person.setAccounts(accounts); this.rawData = data; try{ db = new JSONObject(data); if (db.has("error")) return person; person.setId("linkedin:" + db.getString(ID)); ActivityObject providerObj = new ActivityObjectImpl(); providerObj.setUrl("www.linkedin.com"); providerObj.setId("linkedin.com"); providerObj.setDisplayName("Linkedin"); /// SET NAME Name name = new NameImpl(); String formattedName= ""; if (db.has("firstName")){ name.setGivenName(db.getString("firstName")); formattedName=name.getGivenName(); } else name.setGivenName(db.getString("--")); if (db.has("lastName")){ name.setFamilyName(db.getString("lastName")); if (formattedName.length()>0) formattedName += " "; formattedName += name.getFamilyName(); } else name.setFamilyName("--"); if (db.has("formattedName")) name.setFormatted(db.getString("formattedName")); else name.setFormatted(formattedName); person.setName(name); person.setDisplayName(name.getFormatted()); if (db.has("summary")){ person.setAboutMe(db.getString("summary")); } if (db.has("skills")){ JSONObject jSkills = db.getJSONObject("skills"); JSONArray list = jSkills.getJSONArray("values"); String skills=""; for(int i=0; i<list.length();i++){ if (skills.length()>0) skills+=","; skills+=list.getJSONObject(i).getJSONObject("skill").getString("name"); } person.setJobInterests(skills); } if (db.has("dateOfBirth")){ } if (db.has("headline")){ } if (db.has("honors")){ } if (db.has("specialties")){ } if (db.has("pictureUrl")){ } if (db.has("associations")){ } if (db.has("educations")){ } if(db.has("industry")){ List<Organization> orgs = new ArrayList<Organization>(); Organization org = new OrganizationImpl(); org.setName(db.getString("industry")); orgs.add(org); person.setOrganizations(orgs); } if (db.has("interests")) { List<String> interests = new ArrayList<String>(); try{ for (String i : db.getString("interests").split(",")) interests.add(i); }catch(Exception e){}; person.setInterests(interests); } if (db.has("emailAddress")){ getMails(db.getString("emailAddress")); } if (db.has("publicProfileUrl")){ person.setProfileUrl(db.getString("publicProfileUrl")); } if (db.has("languages")) genLanguages(); if (db.has("pictureUrl")){ person.setThumbnailUrl(db.getString("pictureUrl")); } // // 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))); } 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 { JSONArray list = db.getJSONObject("languages").getJSONArray("values"); for (int i=0; i<list.length(); i++){ JSONObject lang = list.getJSONObject(i); langs.add(lang.getJSONObject("language").getString("name")); } } catch (JSONException e) {} return langs; } private void setAccount(){ Account account = new AccountImpl(); try{ account.setDomain("linkedin.com"); account.setUsername("me"); account.setUserId(db.getString(ID)); } 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; } }