From b87b55255844fb40ebbd1bc9eb2d612c94cd8c0d Mon Sep 17 00:00:00 2001 From: paolobiavati Date: Mon, 27 Oct 2014 16:27:32 +0000 Subject: [PATCH 1/7] Update UserMethods.java two new methods in Facebook interface to get profile picture for diffenrent sizes (bigger than 200x200 that is Picture.large Returns the url of the current user's profile picture (usefull for 480x480 and 600x600 sizes). URL getPictureURL(int width, int height) throws FacebookException; URL getPictureURL(String userId, int width, int height) throws FacebookException; --- .../main/java/facebook4j/api/UserMethods.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/facebook4j-core/src/main/java/facebook4j/api/UserMethods.java b/facebook4j-core/src/main/java/facebook4j/api/UserMethods.java index 92adf51a..052dfa21 100644 --- a/facebook4j-core/src/main/java/facebook4j/api/UserMethods.java +++ b/facebook4j-core/src/main/java/facebook4j/api/UserMethods.java @@ -121,6 +121,16 @@ public interface UserMethods { */ URL getSSLPictureURL(PictureSize size) throws FacebookException; + /** + * Returns the url of the current user's profile picture (usefull for 480x480 and 600x600 sizes). + * @param width + * @param height + * @return + * @throws FacebookException when Facebook service or network is unavailable + * @see User - Facebook Developers - Connections - picture + */ + URL getPictureURL(int width, int height) throws FacebookException; + /** * Returns the url of a user's profile picture over a secure connection. * @param userId the ID of a user @@ -142,6 +152,17 @@ public interface UserMethods { */ URL getSSLPictureURL(String userId, PictureSize size) throws FacebookException; + /** + * Returns the url of a user's profile picture (usefull for 480x480 and 600x600 sizes). + * @param userId the ID of a user + * @param width + * @param height + * @return + * @throws FacebookException when Facebook service or network is unavailable + * @see User - Facebook Developers - Connections - picture + */ + URL getPictureURL(String userId, int width, int height) throws FacebookException; + /** * Returns the users specified by IDs. * @param ids the IDs of users From 1eda6cc3cc1b28f1f089e46f972d8531cf51be09 Mon Sep 17 00:00:00 2001 From: paolobiavati Date: Mon, 27 Oct 2014 16:32:14 +0000 Subject: [PATCH 2/7] Update FacebookImpl.java two new methods in Facebook interface to get profile picture for diffenrent sizes (bigger than 200x200 that is Picture.large Returns the url of the current user's profile picture (usefull for 480x480 and 600x600 sizes). URL getPictureURL(int width, int height) throws FacebookException; URL getPictureURL(String userId, int width, int height) throws FacebookException; --- .../main/java/facebook4j/FacebookImpl.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/facebook4j-core/src/main/java/facebook4j/FacebookImpl.java b/facebook4j-core/src/main/java/facebook4j/FacebookImpl.java index 32df5c78..8e183d84 100644 --- a/facebook4j-core/src/main/java/facebook4j/FacebookImpl.java +++ b/facebook4j-core/src/main/java/facebook4j/FacebookImpl.java @@ -180,13 +180,20 @@ public URL getPictureURL(PictureSize size) throws FacebookException { ensureAuthorizationEnabled(); return getPictureURL("me", size); } + public URL getPictureURL(int width, int height) throws FacebookException { + ensureAuthorizationEnabled(); + return getPictureURL("me", width, height); + } public URL getPictureURL(String userId) throws FacebookException { return getPictureURL(userId, null); } public URL getPictureURL(String userId, PictureSize size) throws FacebookException { return _getPictureURL(userId, size); } - + public URL getPictureURL(String userId, int width, int height) throws FacebookException { + return _getPictureURL(userId, width, height); + } + public URL getSSLPictureURL() throws FacebookException { ensureAuthorizationEnabled(); return getSSLPictureURL("me"); @@ -2507,6 +2514,20 @@ private URL _getPictureURL(String objectId, PictureSize size) throws FacebookExc throw new FacebookException(urle.getMessage(), urle); } } + private URL _getPictureURL(String objectId, int width, int height) throws FacebookException { + String url = buildEndpoint(objectId, "picture"); + HttpResponse res; + if (width > 0 && height > 0) { + res = get(url, new HttpParameter[] { new HttpParameter("width", Integer.toString(width)), new HttpParameter("height", Integer.toString(height)) }); + } else { + res = get(url); + } + try { + return new URL(res.getResponseHeader("Location")); + } catch (MalformedURLException urle) { + throw new FacebookException(urle.getMessage(), urle); + } + } private URL _getSSLPictureURL(String objectId, PictureSize size) throws FacebookException { String url = buildEndpoint(objectId, "picture"); From 636ef8200e6a52621828f1532878add3a9a9aba6 Mon Sep 17 00:00:00 2001 From: mamoabeng Date: Tue, 23 Dec 2014 12:16:23 +0100 Subject: [PATCH 3/7] handle current format for graph API endpoint GET /{user-id}/permissions --- .../internal/json/PermissionJSONImpl.java | 14 +-- .../facebook4j/PermissionMethodsTest.java | 11 ++- .../mock_json/permission/all_v2.2.json | 85 +++++++++++++++++++ 3 files changed, 100 insertions(+), 10 deletions(-) create mode 100644 facebook4j-core/src/test/resources/mock_json/permission/all_v2.2.json diff --git a/facebook4j-core/src/main/java/facebook4j/internal/json/PermissionJSONImpl.java b/facebook4j-core/src/main/java/facebook4j/internal/json/PermissionJSONImpl.java index 1d74314a..0e5e9e55 100644 --- a/facebook4j-core/src/main/java/facebook4j/internal/json/PermissionJSONImpl.java +++ b/facebook4j-core/src/main/java/facebook4j/internal/json/PermissionJSONImpl.java @@ -16,10 +16,8 @@ package facebook4j.internal.json; -import static facebook4j.internal.util.z_F4JInternalParseUtil.*; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import facebook4j.FacebookException; @@ -53,20 +51,22 @@ public boolean isGranted() { } /*package*/ - static List createPermissionArray(HttpResponse res, Configuration conf) throws FacebookException { + static List createPermissionArray(HttpResponse res, Configuration conf) throws FacebookException { if (conf.isJSONStoreEnabled()) { DataObjectFactoryUtil.clearThreadLocalMap(); } List permissions = new ArrayList(); JSONObject json = res.asJSONObject(); try { + String nameKey = "permission"; + String statusKey = "status"; + String accessGranted = "granted"; JSONArray list = json.getJSONArray("data"); for (int i = 0; i < list.length(); i++) { JSONObject permissionJSONObject = list.getJSONObject(i); - Iterator permissionNames = permissionJSONObject.keys(); - while (permissionNames.hasNext()) { - String permissionName = permissionNames.next(); - boolean isGranted = getFlag(permissionName, permissionJSONObject); + if(permissionJSONObject.has(nameKey) && permissionJSONObject.has(statusKey)){ + String permissionName = permissionJSONObject.getString(nameKey); + boolean isGranted = accessGranted.equalsIgnoreCase(permissionJSONObject.getString(statusKey)); permissions.add(new PermissionJSONImpl(permissionName, isGranted)); } } diff --git a/facebook4j-core/src/test/java/facebook4j/PermissionMethodsTest.java b/facebook4j-core/src/test/java/facebook4j/PermissionMethodsTest.java index ec6d89ba..861d2c9e 100644 --- a/facebook4j-core/src/test/java/facebook4j/PermissionMethodsTest.java +++ b/facebook4j-core/src/test/java/facebook4j/PermissionMethodsTest.java @@ -17,6 +17,7 @@ package facebook4j; import facebook4j.internal.http.RequestMethod; + import org.junit.Test; import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; @@ -31,9 +32,13 @@ public class PermissionMethodsTest { public static class getPermissions extends MockFacebookTestBase { - @Test + + private static final String MOCK_JSON_PERMISSION_ALL_JSON = "mock_json/permission/all_v2.2.json"; +// private static final String MOCK_JSON_PERMISSION_ALL_JSON = "mock_json/permission/all.json"; + + @Test public void me() throws Exception { - facebook.setMockJSON("mock_json/permission/all.json"); + facebook.setMockJSON(MOCK_JSON_PERMISSION_ALL_JSON); List actuals = facebook.getPermissions(); assertThat(facebook.getHttpMethod(), is(RequestMethod.GET)); assertThat(facebook.getEndpointURL(), is(pathOf("/me/permissions"))); @@ -43,7 +48,7 @@ public void me() throws Exception { @Test public void id() throws Exception { - facebook.setMockJSON("mock_json/permission/all.json"); + facebook.setMockJSON(MOCK_JSON_PERMISSION_ALL_JSON); List actuals = facebook.getPermissions("1234567890123456"); assertThat(facebook.getHttpMethod(), is(RequestMethod.GET)); assertThat(facebook.getEndpointURL(), is(pathOf("/1234567890123456/permissions"))); diff --git a/facebook4j-core/src/test/resources/mock_json/permission/all_v2.2.json b/facebook4j-core/src/test/resources/mock_json/permission/all_v2.2.json new file mode 100644 index 00000000..d05e1b92 --- /dev/null +++ b/facebook4j-core/src/test/resources/mock_json/permission/all_v2.2.json @@ -0,0 +1,85 @@ +{ + "data": [ + {"permission":"ads_management","status":"granted"}, + {"permission":"basic_info","status":"granted"}, + {"permission":"create_event","status":"granted"}, + {"permission":"create_note","status":"granted"}, + {"permission":"email","status":"granted"}, + {"permission":"export_stream","status":"granted"}, + {"permission":"friends_about_me","status":"granted"}, + {"permission":"friends_actions.music","status":"granted"}, + {"permission":"friends_actions.news","status":"granted"}, + {"permission":"friends_actions.video","status":"granted"}, + {"permission":"friends_activities","status":"granted"}, + {"permission":"friends_birthday","status":"granted"}, + {"permission":"friends_education_history","status":"granted"}, + {"permission":"friends_events","status":"granted"}, + {"permission":"friends_games_activity","status":"granted"}, + {"permission":"friends_groups","status":"granted"}, + {"permission":"friends_hometown","status":"granted"}, + {"permission":"friends_interests","status":"granted"}, + {"permission":"friends_likes","status":"granted"}, + {"permission":"friends_location","status":"granted"}, + {"permission":"friends_notes","status":"granted"}, + {"permission":"friends_online_presence","status":"granted"}, + {"permission":"friends_photo_video_tags","status":"granted"}, + {"permission":"friends_photos","status":"granted"}, + {"permission":"friends_questions","status":"granted"}, + {"permission":"friends_relationship_details","status":"granted"}, + {"permission":"friends_relationships","status":"granted"}, + {"permission":"friends_religion_politics","status":"granted"}, + {"permission":"friends_status","status":"granted"}, + {"permission":"friends_subscriptions","status":"granted"}, + {"permission":"friends_videos","status":"granted"}, + {"permission":"friends_website","status":"granted"}, + {"permission":"friends_work_history","status":"granted"}, + {"permission":"installed","status":"granted"}, + {"permission":"manage_friendlists","status":"granted"}, + {"permission":"manage_notifications","status":"granted"}, + {"permission":"manage_pages","status":"granted"}, + {"permission":"photo_upload","status":"granted"}, + {"permission":"publish_actions","status":"granted"}, + {"permission":"publish_checkins","status":"granted"}, + {"permission":"publish_stream","status":"granted"}, + {"permission":"read_friendlists","status":"granted"}, + {"permission":"read_insights","status":"granted"}, + {"permission":"read_mailbox","status":"granted"}, + {"permission":"read_page_mailboxes","status":"granted"}, + {"permission":"read_requests","status":"granted"}, + {"permission":"read_stream","status":"granted"}, + {"permission":"rsvp_event","status":"granted"}, + {"permission":"share_item","status":"granted"}, + {"permission":"sms","status":"granted"}, + {"permission":"status_update","status":"granted"}, + {"permission":"user_about_me","status":"granted"}, + {"permission":"user_actions.music","status":"granted"}, + {"permission":"user_actions.news","status":"granted"}, + {"permission":"user_actions.video","status":"granted"}, + {"permission":"user_activities","status":"granted"}, + {"permission":"user_birthday","status":"granted"}, + {"permission":"user_education_history","status":"granted"}, + {"permission":"user_events","status":"granted"}, + {"permission":"user_games_activity","status":"granted"}, + {"permission":"user_groups","status":"granted"}, + {"permission":"user_hometown","status":"granted"}, + {"permission":"user_interests","status":"granted"}, + {"permission":"user_likes","status":"granted"}, + {"permission":"user_location","status":"granted"}, + {"permission":"user_notes","status":"granted"}, + {"permission":"user_online_presence","status":"granted"}, + {"permission":"user_photo_video_tags","status":"granted"}, + {"permission":"user_photos","status":"granted"}, + {"permission":"user_questions","status":"granted"}, + {"permission":"user_relationship_details","status":"granted"}, + {"permission":"user_relationships","status":"granted"}, + {"permission":"user_religion_politics","status":"granted"}, + {"permission":"user_status","status":"granted"}, + {"permission":"user_subscriptions","status":"granted"}, + {"permission":"user_videos","status":"granted"}, + {"permission":"user_website","status":"granted"}, + {"permission":"user_work_history","status":"granted"}, + {"permission":"video_upload","status":"granted"}, + {"permission":"xmpp_login","status":"granted"} + ], + "paging": {"next": "https://graph.facebook.com/1234567890123456/permissions?access_token=access_token&limit=5000&offset=5000"} +} \ No newline at end of file From 9af1e036f52a00c4849baf03d4eaa525af0b114a Mon Sep 17 00:00:00 2001 From: roundrop Date: Wed, 31 Dec 2014 17:01:49 +0900 Subject: [PATCH 4/7] FFJ-19 Accept string type hometown filed #71 --- .../internal/json/IdNameEntityJSONImpl.java | 5 +++ .../internal/json/UserJSONImpl.java | 9 +++-- .../test/java/facebook4j/UserMethodsTest.java | 9 +++++ .../mock_json/user/hometown_string.json | 34 +++++++++++++++++++ 4 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 facebook4j-core/src/test/resources/mock_json/user/hometown_string.json diff --git a/facebook4j-core/src/main/java/facebook4j/internal/json/IdNameEntityJSONImpl.java b/facebook4j-core/src/main/java/facebook4j/internal/json/IdNameEntityJSONImpl.java index b6f6af9b..8d767296 100644 --- a/facebook4j-core/src/main/java/facebook4j/internal/json/IdNameEntityJSONImpl.java +++ b/facebook4j-core/src/main/java/facebook4j/internal/json/IdNameEntityJSONImpl.java @@ -50,6 +50,11 @@ init(json); } + /*package*/IdNameEntityJSONImpl(String name) { + super(); + this.name = name; + } + private void init(JSONObject json) throws FacebookException { id = getRawString("id", json); name = getRawString("name", json); diff --git a/facebook4j-core/src/main/java/facebook4j/internal/json/UserJSONImpl.java b/facebook4j-core/src/main/java/facebook4j/internal/json/UserJSONImpl.java index aaf20593..019ed40d 100644 --- a/facebook4j-core/src/main/java/facebook4j/internal/json/UserJSONImpl.java +++ b/facebook4j-core/src/main/java/facebook4j/internal/json/UserJSONImpl.java @@ -146,8 +146,13 @@ private void init(JSONObject json) throws FacebookException { } email = getRawString("email", json); if (!json.isNull("hometown")) { - JSONObject hometownJSON = json.getJSONObject("hometown"); - hometown = new IdNameEntityJSONImpl(hometownJSON); + String hometownRawString = getRawString("hometown", json); + if (hometownRawString.startsWith("{")) { + JSONObject hometownJSON = json.getJSONObject("hometown"); + hometown = new IdNameEntityJSONImpl(hometownJSON); + } else { + hometown = new IdNameEntityJSONImpl(hometownRawString); + } } if (!json.isNull("interestedIn")) { JSONArray interestedInJSONArray = json.getJSONArray("interested_in"); diff --git a/facebook4j-core/src/test/java/facebook4j/UserMethodsTest.java b/facebook4j-core/src/test/java/facebook4j/UserMethodsTest.java index 3de9c81f..13cde7b4 100644 --- a/facebook4j-core/src/test/java/facebook4j/UserMethodsTest.java +++ b/facebook4j-core/src/test/java/facebook4j/UserMethodsTest.java @@ -159,6 +159,15 @@ public void reading() throws Exception { assertThat(user.getTimezone(), is(nullValue())); assertThat(user.isInstalled(), is(nullValue())); } + + @Test + public void hometown_string() throws Exception { + facebook.setMockJSON("mock_json/user/hometown_string.json"); + User user = facebook.getUser("CFKArgentina"); + + assertThat(user.getHometown().getId(), is(nullValue())); + assertThat(user.getHometown().getName(), is("La Plata")); + } } public static class getPictureURL extends MockFacebookTestBase { diff --git a/facebook4j-core/src/test/resources/mock_json/user/hometown_string.json b/facebook4j-core/src/test/resources/mock_json/user/hometown_string.json new file mode 100644 index 00000000..d89a58b5 --- /dev/null +++ b/facebook4j-core/src/test/resources/mock_json/user/hometown_string.json @@ -0,0 +1,34 @@ +{ + "about": "Presidenta de la República Argentina, Cristina Fernández de Kirchner. www.cfkargentina.com", + "bio": "Cristina Fernández nació el 19 de Febrero de 1953 en la Ciudad de La Plata, capital de la provincia de Buenos Aires. Es la hija mayor del matrimonio entre Eduardo Fernández y Ofelia Wilhelm. Realizó los dos primeros años de sus estudios secundarios en el ex Colegio Comercial San Martín (actual Escuela de Educación Media 31) y los tres últimos en el Colegio Nuestra Señora de la Misericordia, de la ciudad de La Plata.\n\nCursó sus estudios de abogacía en la Facultad de Ciencias Jurídicas y Sociales de la Universidad Nacional de La Plata. Allí inició su militancia política en el Frente de Agrupaciones Eva Perón (FAEP), que luego se fusionó con la Federación Universitaria por la Revolución Nacional (FURN) para constituir la Juventud Universitaria Peronista de la Universidad de La Plata.\n \nEn octubre de 1974, conoció a su compañero de toda la vida, Néstor Kirchner, con quien militó en la JUP, y con el que se casó el jueves 8 de mayo de 1975. Tras el golpe de estado del 24 de marzo de 1976, que instauró un régimen de terror y persiguió a militantes políticos, sociales y universitarios, la pareja resolvió trasladarse a la ciudad natal de Kirchner, Río Gallegos, en la sureña provincia de Santa Cruz.\n\nInstalada en la Patagonia, se dedicó junto a su marido a la actividad privada como abogados, formando el Estudio jurídico Kirchner. El matrimonio tuvo dos hijos: Máximo (nacido en 1977) y Florencia (1990).\n\nCon el retorno de la democracia, Cristina Fernández volvió a participar activamente en el Partido Justicialista junto a Néstor Kirchner, quien fue electo intendente de Río Gallegos en 1987 y gobernador de Santa Cruz en 1991 y reelecto en dos oportunidades.\n\nEn 1989 Cristina Fernández fue electa Diputada Provincial en la provincia de Santa Cruz, cargo para el que fue reelecta en 1993 y 1995. En la Cámara baja santacruceña ocupó el cargo de Presidenta de la Comisión de Asuntos Constitucionales, Poderes y Reglamentos y fue electa Vicepresidenta 1ª del cuerpo legislativo en 1990.\n\nEn 1994, fue electa representante por Santa Cruz a la Convención Nacional Constituyente de Santa Fe. En el año 1995 ingresó al Senado Nacional en representación de Santa Cruz. En 1997 renunció a su cargo de senadora para ser electa diputada nacional y en 2001 fue electa otra vez senadora, siempre por la misma provincia. En 1998 fue Convencional Provincial Constituyente en Santa Cruz.\n\nDurante su extensa tarea legislativa ocupó la presidencia de la Comisión Bicameral Especial de Seguimiento de los Atentados a la Embajada de Israel y al Edificio de la AMIA, entre septiembre y diciembre de 1999, y la vicepresidencia segunda de la Comisión Especial Investigadora sobre hechos ilícitos vinculados con el lavado de dinero de la Cámara de Diputados en el año 2000.\n\nEntre sus principales iniciativas parlamentarias se pueden destacar los proyecto de ley como el que propone retornar a la composición original de cinco miembros de la Corte Suprema de Justicia de la Nación; sobre transparencia de la labor legislativa estableciendo la votación nominal para los proyectos de ley; derogación de la ley de reforma laboral; reforma de la ley 20.972 de Acefalía Presidencial; reforma del Código Nacional Electoral; reforma de la Ley Orgánica de Partidos Políticos; financiamiento de los partidos políticos; reglamentación del recurso extraordinario por salto de instancia (per saltum); implementación del Estatuto de Roma que crea la Corte Penal Internacional; modificación de la Ley de Educación Superior; reafirmación de la soberanía sobre los hielos continentales; régimen legal de los refugiados; consulta popular; y modificación de la ley 11.683 de procedimiento tributario.\n\nA partir de 2003, durante la presidencia de su marido Néstor Kirchner, representó al país en diversos foros internacionales como la Cumbre de Gobiernos Progresistas, en Londres (2003); la reunión de dirigentes políticas y empresarias internacionales organizado por el National Democratic Institute for International Affairs, en Boston (2004); o el encuentro de partidos progresistas gobernantes en el Cono Sur, en Montevideo (2005). También visitó España, Francia, China, Israel, Alemania, México, Venezuela y Ecuador, entre otros países. Fue condecorada con la Gran Cruz de Chile, declarada Presidenta Honoraria del Observatorio Argentina en Francia, nombrada miembro honoraria de la Universidad Hebrea de Jerusalén y elegida presidenta honoraria del III Congreso Internacional de la Lengua Española, celebrado en Rosario.\n\nEn las elecciones legislativas del 23 de octubre de 2005 fue elegida senadora de la provincia de Buenos Aires por el Frente para la Victoria, mandato durante el cual se desempeñó como presidenta de la Comisión de Asuntos Constitucionales del Senado.\n\nEn 2007 suscribió, en representación del Gobierno Nacional, la adhesión argentina al \"Convenio sobre desaparición forzosa de personas\", en la ciudad de París, Francia. Fue oradora en la conferencia anual de la Organización Internacional del Trabajo (OIT), Ginebra, Suiza. Y brindó los discursos de cierre del Segundo Congreso Internacional Extraordinario de Filosofía, provincia de San Juan y de la conferencia organizada conjuntamente por el \"Council of the Américas\".\n\nEl 28 de octubre de 2007 se consagró como la primera Presidenta electa de la República Argentina, al vencer en primera vuelta con el 45,29% de los votos positivos. El 10 de diciembre de ese año asumió la primera magistratura, sucediendo a su esposo Néstor Kirchner.\n\nEntre las principales medidas de su gobierno se pueden enumerar: la creación de los ministerios de Ciencia, Tecnología e Innovación Productiva, de Producción, de Agricultura, y de Seguridad; la reestatización del sistema de jubilaciones y pensiones; la ley de rescate de las empresas Aerolíneas Argentinas y Austral Líneas Aéreas, por la que el Estado nacional adquirió las acciones de ambas compañías; la reestatización de la fábrica de aviones de Córdoba.\n\nLa Presidenta continuó con la política de lucha contra la pobreza, que había comenzado su antecesor. Según un informe de la Comisión Económica para América Latina (CEPAL), la situación de la pobreza se redujo de 21 por ciento en 2006 a 11,3 por ciento en 2009 (la segunda más baja de América Latina, detrás de Uruguay), en tanto que la cantidad de indigentes bajó en ese lapso de 7,2 a 3,8 por ciento.\n\nFrente a la crisis económica internacional de 2008-2009, el gobierno lanzó una moratoria tributaria y beneficios para la repatriación de capitales; el otorgamiento de créditos de fomento a la producción y al consumo, con una asignación de 13.200 millones de pesos; y un plan de obra pública, por 21.000 millones de dólares, con el fin de impulsar el resto de la economía y duplicar los puestos de trabajo en el sector.\n\nLa jefa de Estado participó en las negociaciones del Grupo de los 20 (G-20), que reúne a países industrializados y emergentes. Entre las medidas propuestas por Cristina Fernández se destacó la de incorporar al G-20 a la Organización Internacional del Trabajo (OIT), propuesta que se concretó en la tercera cumbre realizada en Pittsburgh en septiembre de 2009. También, junto al mandatario brasileño Lula, la Presidenta mantuvo posiciones opuestas a las recetas de ajuste fiscal y flexibilización laboral que proponían las entidades crediticias internacionales como el FMI.\n\nEn materia de deuda, se implementó el Fondo del Bicentenario para garantizar el pago a los bonistas privados con reservas de libre disponibilidad del Banco Central.\n\nEn lo que respecta a la política energética, se concluyó la construcción de la Represa Binacional de Yacyretá (junto a Paraguay) al subir la cota a 83 msnm que implica un 50% más de generación de energía hidroeléctrica y se encuentra en fase de terminación la tercera central nuclear de Atucha 2. Además, se abrió la licitación para la construcción del Gasoducto del Noreste que llevará gas natural a las provincias de Chaco, Corrientes, Formosa, Misiones, norte de Salta y norte de Santa Fe.\n\nEl 29 de octubre de 2009 Cristina Fernández sancionó el Decreto 1602/09 estableciendo la Asignación Universal por Hijo para todos los menores de 18 años cuyos padres se encuentren desocupados o trabajen en la economía informal. A partir de mayo de 2011, el beneficio se amplió a las madres embarazadas a partir del décimotercer mes de gestación.\n\nEn materia laboral, dictó el Decreto 1694/2009 aumentando las indemnizaciones por riesgos del trabajo y modificando el régimen legal (Ley 24.557) con el fin de corregir las fallas del sistema. El decreto elimina el tope máximo que había impuesto la legislación anterior para la renta periódica, fijado en 180.000 pesos y establece que la misma suma será considerada como piso mínimo en caso de pérdida de vida o incapacidad total.\n\nEl porcentaje del PBI destinado a educación creció desde el 3,64% en 2003 a 6,02% en 2010. En términos absolutos, pasó de 14.501 millones de pesos en 2003 a 89.924 millones de pesos en 2010, un 520% más. Se continuó con la política de construcción de escuelas implementada por el gobierno de Néstor Kirchner: entre 1969 y 2003 los diferentes gobiernos nacionales financiaron la construcción de un total de 427 escuelas, mientras que entre 2003 y 2010 se construyeron más de mil escuelas que beneficiaron a medio millón de alumnos.\n\nDesde 2010 la Administración Nacional de Seguridad Social (Anses) desarrolla un plan de entrega de dos millones de netbooks a alumnos secundarios, con acceso a Internet a todas las escuelas públicas primarias y secundarias del país.\n\nEn política internacional, la Presidenta intervino personalmente en las gestiones relativas al canje humanitario de los rehenes de las FARC en la República de Colombia; condenó el golpe de Estado en Honduras y propuso desconocer tanto a las autoridades golpistas, como al gobierno surgido de las elecciones convocadas por el gobierno de facto. Además, la cancillería argentina realizó una protesta formal ante la decisión de Gran Bretaña de instalar una plataforma marítima para explorar yacimientos petrolíferos en el área de las Islas Malvinas. Por otra parte, durante su gobierno, el ex presidente Néstor Kirchner fue electo primer secretario general de la Unión Sudamericana de Naciones (UNASUR).\n\nEn julio de 2010, Cristina Fernández y su par de la República Oriental del Uruguay, José Mujica, llegaron a un acuerdo para monitorear en forma conjunta la posible contaminación del Río Uruguay, provocada por la instalación de la planta de celulosa Botnia UPM en la localidad uruguaya de Fray Bentos.\n\nDurante su presidencia, Cristina Fernández continuó con la política de derechos humanos del presidente Néstor Kirchner, impulsando el juzgamiento de los autores de crímenes de lesa humanidad durante la última dictadura militar (1976-1983).\n\nEn ese sentido, cuestionó públicamente la demora de los tribunales judiciales en resolver los recursos presentados por los represores acusados, causando la parálisis de casi todas las causas. Por otra parte, el 24 de marzo de 2010 la Presidenta anunció que apoyaría a las Abuelas de Plaza de Mayo en caso de que estas decidieran denunciar ante tribunales internacionales las irregularidades en la causa en la que se investiga la supuesta apropiación ilegal de los hijos adoptivos de Ernestina Herrera de Noble.\n\nEn lo que respecta a ampliación de derechos, la Presidenta promulgó en julio de 2010 la Ley de Matrimonio Igualitario, que equipara los derechos de las parejas del mismo sexo con las heterosexuales. Durante el acto de promulgación de la norma, en Casa de Gobierno, Cristina Fernández aseguró: \"Hay cosas que no nos pueden dividir. Hoy somos una sociedad un poco más igualitaria \".\n\nEn materia ambiental, se votó y sancionó una nueva ley de glaciares que fue promulgada el 28 de octubre de 2010. Dicha ley 26.639 establece los presupuestos mínimos para la protección de los glaciares y del ambiente periglacial con el objeto de preservarlos como reservas estratégicas de recursos hídricos.\n\nEn octubre de 2009 se sancionó la nueva ley de Servicios de Comunicación Audiovisual, que establece límites estrictos para impedir la concentración monopólica y oligopólica de medios, además de incorporar a los medios comunitarios y sin fines de lucro al espectro radiofónico y televisivo. También se implementó el programa Fútbol para Todos, por el cual se transmiten por televisión abierta los partidos del torneo de primera división de la AFA. Y se sancionó la ley que despenaliza los delitos de calumnias e injurias para expresiones de interés público.\n\nEntre el 21 y el 25 de mayo de 2010, tuvieron lugar en la ciudad de Buenos Aires los festejos por el Bicentenario de la Revolución de Mayo y la formación del primer gobierno patrio. Los actos, en los que estuvieron presentes todas las provincias, se desarrollaron principalmente en la Avenida 9 de Julio y reunieron a millones de personas. Cristina Fernández fue la anfitriona de los mandatarios sudamericanos que asistieron a la celebración, junto a los que inauguró la Galería de Patriotas Latinoamericanos en la Casa de Gobierno.\n\nEl 27 de octubre de 2010 falleció el ex presidente Néstor Kirchner, esposo de la Presidenta, de un paro cardiorrespiratorio no traumático. Durante el funeral, Cristina Fernández estuvo rodeada de sus familiares más cercanos, funcionarios nacionales y mandatarios de la región, así como de cientos de miles de personas que ingresaron a la Casa Rosada para rendir homenaje al ex jefe de estado. Pocos días después del sepelio, la Presidenta retomó sus actividades y agradeció a todos los que le expresaron sus condolencias.", + "birthday": "02/19/1953", + "can_post": false, + "category": "Politician", + "checkins": 0, + "cover": { + "cover_id": "757119531019251", + "id": "757119531019251", + "offset_x": 94, + "offset_y": 0, + "source": "https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-xpa1/t31.0-8/s720x720/10431347_757119531019251_5207890649554937526_o.jpg" + }, + "has_added_app": false, + "hometown": "La Plata", + "id": "115689108495633", + "is_community_page": false, + "is_published": true, + "likes": 1501781, + "link": "https://www.facebook.com/CFKArgentina", + "location": {"street": "Dirección"}, + "name": "Cristina Fernandez de Kirchner", + "parking": { + "lot": 0, + "street": 0, + "valet": 0 + }, + "phone": "Teléfono", + "talking_about_count": 135256, + "username": "CFKArgentina", + "website": "www.cfkargentina.com", + "were_here_count": 0 +} \ No newline at end of file From 6ecb7d82a3f638b09c8f61bc2d26d559cbc8f962 Mon Sep 17 00:00:00 2001 From: roundrop Date: Wed, 31 Dec 2014 18:04:21 +0900 Subject: [PATCH 5/7] Add method for getting picture of specific size #72 --- .../main/java/facebook4j/api/UserMethods.java | 44 +++++++++---------- .../test/java/facebook4j/UserMethodsTest.java | 14 ++++++ .../user/me_picture_width_height.json | 8 ++++ 3 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 facebook4j-core/src/test/resources/mock_json/user/me_picture_width_height.json diff --git a/facebook4j-core/src/main/java/facebook4j/api/UserMethods.java b/facebook4j-core/src/main/java/facebook4j/api/UserMethods.java index 052dfa21..5d593d00 100644 --- a/facebook4j-core/src/main/java/facebook4j/api/UserMethods.java +++ b/facebook4j-core/src/main/java/facebook4j/api/UserMethods.java @@ -83,6 +83,16 @@ public interface UserMethods { */ URL getPictureURL(PictureSize size) throws FacebookException; + /** + * Returns the url of the current user's profile picture. + * @param width width of the picture + * @param height height of the picture + * @return url + * @throws FacebookException when Facebook service or network is unavailable + * @see User - Facebook Developers - Connections - picture + */ + URL getPictureURL(int width, int height) throws FacebookException; + /** * Returns the url of a user's profile picture. * @param userId the ID of a user @@ -101,35 +111,36 @@ public interface UserMethods { * @see User - Facebook Developers - Connections - picture */ URL getPictureURL(String userId, PictureSize size) throws FacebookException; - + /** - * Returns the url of the current user's profile picture over a secure connection. + * Returns the url of a user's profile picture. + * @param userId the ID of a user + * @param width width of the picture + * @param height height of the picture * @return url * @throws FacebookException when Facebook service or network is unavailable * @see User - Facebook Developers - Connections - picture - * @since Facebook4J 2.0.0 */ - URL getSSLPictureURL() throws FacebookException; + URL getPictureURL(String userId, int width, int height) throws FacebookException; /** * Returns the url of the current user's profile picture over a secure connection. - * @param size {@link PictureSize picture size} * @return url * @throws FacebookException when Facebook service or network is unavailable * @see User - Facebook Developers - Connections - picture * @since Facebook4J 2.0.0 */ - URL getSSLPictureURL(PictureSize size) throws FacebookException; + URL getSSLPictureURL() throws FacebookException; /** - * Returns the url of the current user's profile picture (usefull for 480x480 and 600x600 sizes). - * @param width - * @param height - * @return + * Returns the url of the current user's profile picture over a secure connection. + * @param size {@link PictureSize picture size} + * @return url * @throws FacebookException when Facebook service or network is unavailable * @see User - Facebook Developers - Connections - picture + * @since Facebook4J 2.0.0 */ - URL getPictureURL(int width, int height) throws FacebookException; + URL getSSLPictureURL(PictureSize size) throws FacebookException; /** * Returns the url of a user's profile picture over a secure connection. @@ -152,17 +163,6 @@ public interface UserMethods { */ URL getSSLPictureURL(String userId, PictureSize size) throws FacebookException; - /** - * Returns the url of a user's profile picture (usefull for 480x480 and 600x600 sizes). - * @param userId the ID of a user - * @param width - * @param height - * @return - * @throws FacebookException when Facebook service or network is unavailable - * @see User - Facebook Developers - Connections - picture - */ - URL getPictureURL(String userId, int width, int height) throws FacebookException; - /** * Returns the users specified by IDs. * @param ids the IDs of users diff --git a/facebook4j-core/src/test/java/facebook4j/UserMethodsTest.java b/facebook4j-core/src/test/java/facebook4j/UserMethodsTest.java index 3de9c81f..44ec88c7 100644 --- a/facebook4j-core/src/test/java/facebook4j/UserMethodsTest.java +++ b/facebook4j-core/src/test/java/facebook4j/UserMethodsTest.java @@ -180,6 +180,20 @@ public void me_size() throws Exception { assertThat(url.toString(), is("https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash2/1111_22222_333333_q.jpg")); } + @Test + public void me_width_height() throws Exception { + facebook.setMockJSON("mock_json/user/me_picture_width_height.json"); + URL url = facebook.getPictureURL(720, 540); + assertThat(facebook.getEndpointURL(), hasParameter("width", "720")); + assertThat(facebook.getEndpointURL(), hasParameter("height", "540")); + assertThat(url.toString(), is("https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash2/1111_22222_333333_a.jpg")); + url = facebook.getPictureURL("100001568838021", 720, 540); + assertThat(facebook.getEndpointURL(), is(pathOf("/100001568838021/picture"))); + assertThat(facebook.getEndpointURL(), hasParameter("width", "720")); + assertThat(facebook.getEndpointURL(), hasParameter("height", "540")); + assertThat(url.toString(), is("https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash2/1111_22222_333333_a.jpg")); + } + @Test public void id() throws Exception { facebook.setMockJSON("mock_json/user/me_picture.json"); diff --git a/facebook4j-core/src/test/resources/mock_json/user/me_picture_width_height.json b/facebook4j-core/src/test/resources/mock_json/user/me_picture_width_height.json new file mode 100644 index 00000000..c7de6283 --- /dev/null +++ b/facebook4j-core/src/test/resources/mock_json/user/me_picture_width_height.json @@ -0,0 +1,8 @@ +{ + "data": { + "height": 540, + "is_silhouette": false, + "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash2/1111_22222_333333_a.jpg", + "width": 720 + } +} \ No newline at end of file From 7b4ca4c61a33fec072f1bfcbfb6ebb0f1838dedb Mon Sep 17 00:00:00 2001 From: roundrop Date: Thu, 1 Jan 2015 01:38:36 +0900 Subject: [PATCH 6/7] v1.0 compatibility #73 --- .../internal/json/PermissionJSONImpl.java | 25 ++++++++++------- .../facebook4j/PermissionMethodsTest.java | 27 +++++++++++++++---- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/facebook4j-core/src/main/java/facebook4j/internal/json/PermissionJSONImpl.java b/facebook4j-core/src/main/java/facebook4j/internal/json/PermissionJSONImpl.java index 0e5e9e55..ef0684fd 100644 --- a/facebook4j-core/src/main/java/facebook4j/internal/json/PermissionJSONImpl.java +++ b/facebook4j-core/src/main/java/facebook4j/internal/json/PermissionJSONImpl.java @@ -17,9 +17,6 @@ package facebook4j.internal.json; -import java.util.ArrayList; -import java.util.List; - import facebook4j.FacebookException; import facebook4j.Permission; import facebook4j.conf.Configuration; @@ -28,6 +25,12 @@ import facebook4j.internal.org.json.JSONException; import facebook4j.internal.org.json.JSONObject; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import static facebook4j.internal.util.z_F4JInternalParseUtil.*; + /** * @author Ryuji Yamashita - roundrop at gmail.com */ @@ -58,16 +61,20 @@ static List createPermissionArray(HttpResponse res, Configuration co List permissions = new ArrayList(); JSONObject json = res.asJSONObject(); try { - String nameKey = "permission"; - String statusKey = "status"; - String accessGranted = "granted"; JSONArray list = json.getJSONArray("data"); for (int i = 0; i < list.length(); i++) { JSONObject permissionJSONObject = list.getJSONObject(i); - if(permissionJSONObject.has(nameKey) && permissionJSONObject.has(statusKey)){ - String permissionName = permissionJSONObject.getString(nameKey); - boolean isGranted = accessGranted.equalsIgnoreCase(permissionJSONObject.getString(statusKey)); + if (permissionJSONObject.has("permission") && permissionJSONObject.has("status")) { + String permissionName = permissionJSONObject.getString("permission"); + boolean isGranted = "granted".equalsIgnoreCase(permissionJSONObject.getString("status")); permissions.add(new PermissionJSONImpl(permissionName, isGranted)); + } else { + Iterator permissionNames = permissionJSONObject.keys(); + while (permissionNames.hasNext()) { + String permissionName = permissionNames.next(); + boolean isGranted = getFlag(permissionName, permissionJSONObject); + permissions.add(new PermissionJSONImpl(permissionName, isGranted)); + } } } if (conf.isJSONStoreEnabled()) { diff --git a/facebook4j-core/src/test/java/facebook4j/PermissionMethodsTest.java b/facebook4j-core/src/test/java/facebook4j/PermissionMethodsTest.java index 861d2c9e..f7c6bc4c 100644 --- a/facebook4j-core/src/test/java/facebook4j/PermissionMethodsTest.java +++ b/facebook4j-core/src/test/java/facebook4j/PermissionMethodsTest.java @@ -33,12 +33,9 @@ public class PermissionMethodsTest { public static class getPermissions extends MockFacebookTestBase { - private static final String MOCK_JSON_PERMISSION_ALL_JSON = "mock_json/permission/all_v2.2.json"; -// private static final String MOCK_JSON_PERMISSION_ALL_JSON = "mock_json/permission/all.json"; - @Test public void me() throws Exception { - facebook.setMockJSON(MOCK_JSON_PERMISSION_ALL_JSON); + facebook.setMockJSON("mock_json/permission/all.json"); List actuals = facebook.getPermissions(); assertThat(facebook.getHttpMethod(), is(RequestMethod.GET)); assertThat(facebook.getEndpointURL(), is(pathOf("/me/permissions"))); @@ -48,7 +45,27 @@ public void me() throws Exception { @Test public void id() throws Exception { - facebook.setMockJSON(MOCK_JSON_PERMISSION_ALL_JSON); + facebook.setMockJSON("mock_json/permission/all.json"); + List actuals = facebook.getPermissions("1234567890123456"); + assertThat(facebook.getHttpMethod(), is(RequestMethod.GET)); + assertThat(facebook.getEndpointURL(), is(pathOf("/1234567890123456/permissions"))); + + assertThat(actuals.size(), is(80)); + } + + @Test + public void me_v2() throws Exception { + facebook.setMockJSON("mock_json/permission/all_v2.2.json"); + List actuals = facebook.getPermissions(); + assertThat(facebook.getHttpMethod(), is(RequestMethod.GET)); + assertThat(facebook.getEndpointURL(), is(pathOf("/me/permissions"))); + + assertThat(actuals.size(), is(80)); + } + + @Test + public void id_v2() throws Exception { + facebook.setMockJSON("mock_json/permission/all_v2.2.json"); List actuals = facebook.getPermissions("1234567890123456"); assertThat(facebook.getHttpMethod(), is(RequestMethod.GET)); assertThat(facebook.getEndpointURL(), is(pathOf("/1234567890123456/permissions"))); From d27276b08b3552abf3f6f421ab42d8be3f5e7022 Mon Sep 17 00:00:00 2001 From: roundrop Date: Thu, 1 Jan 2015 01:58:42 +0900 Subject: [PATCH 7/7] prepare release 2.2.1 --- facebook4j-core/src/main/java/facebook4j/Version.java | 2 +- readme.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/facebook4j-core/src/main/java/facebook4j/Version.java b/facebook4j-core/src/main/java/facebook4j/Version.java index 4c368b01..69ae4168 100644 --- a/facebook4j-core/src/main/java/facebook4j/Version.java +++ b/facebook4j-core/src/main/java/facebook4j/Version.java @@ -20,7 +20,7 @@ * @author Ryuji Yamashita - roundrop at gmail.com */ public final class Version { - private static final String VERSION = "2.2.0"; + private static final String VERSION = "2.2.1"; private static final String TITLE = "Facebook4J"; private Version() { diff --git a/readme.md b/readme.md index afa3618c..f286619a 100644 --- a/readme.md +++ b/readme.md @@ -5,7 +5,7 @@ Facebook4J is a Facebook Graph API binding library for the Java language license see: [http://facebook4j.org](http://facebook4j.org) ## Version -2.2.0 +2.2.1 ## License Facebook4J is released under Apache License 2.0.