package de.tud.kom.socom.util.attributemapping.networkparsing; import java.util.Iterator; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import de.tud.kom.socom.util.LoggerFactory; import de.tud.kom.socom.util.attributemapping.Attribute; import de.tud.kom.socom.util.attributemapping.AttributeMap; import de.tud.kom.socom.util.attributemapping.ListAttribute; import de.tud.kom.socom.util.attributemapping.ObjectAttribute; import de.tud.kom.socom.util.attributemapping.UniqueAttribute; public class FacebookAttributeParser extends AttributeParser { public FacebookAttributeParser(AttributeMap atts) { super(atts); } @Override protected String translate(String key) { return trans.get(key); } @Override public void parseAttributes(JSONObject json) { try { @SuppressWarnings("rawtypes") Iterator i = json.keys(); while (i.hasNext()) { String current = (String) i.next(); if (trans.containsKey(current)) { Attribute att = parseAttribute(json.get(current)); atts.addAttribute(current, att); } } } catch (JSONException e) { LoggerFactory.getLogger().Error(e); } } private Attribute parseAttribute(Object json) throws JSONException { if (json instanceof String) { return new UniqueAttribute((String) json); } else if (json instanceof JSONArray) { JSONArray array = (JSONArray) json; ListAttribute list = new ListAttribute(); for (int i = 0; i < array.length(); i++) { Attribute a = parseAttribute(array.get(i)); list.addAttribute(a); } return list; } else if (json instanceof JSONObject) { JSONObject jsonObject = (JSONObject) json; ObjectAttribute object = new ObjectAttribute(); @SuppressWarnings("rawtypes") Iterator i = jsonObject.keys(); while (i.hasNext()) { String current = (String) i.next(); if (trans.containsKey(current)) { Attribute att = parseAttribute(jsonObject.get(current)); object.addAttribute(translate(current), att); } } return object; } return null; } protected void fillTranslations() { trans.put("name", "name"); trans.put("first_name", "first_name"); trans.put("last_name", "last_name"); trans.put("gender", "gender"); trans.put("locale", "locale"); trans.put("languages", "languages"); trans.put("bio", "about"); trans.put("birthday", "birthday"); trans.put("education", "education"); trans.put("email", "email"); trans.put("hometown", "hometown"); trans.put("favorite_athletes", "favorite_athletes"); trans.put("favorite_teams", "favorite_teams"); trans.put("relationship_status", "relationship_status"); trans.put("website", "website"); trans.put("work", "work"); } }