Monday, October 29, 2012

Interacting with Facebook using Java

If it's your first time interacting with Facebook, probably you haven't found many examples in Java, have you?
On my case I'm working with something really simple, I just need to create a simple app that will be configured as Canvas. There are 2 important steps in order to work with Facebook by using Canvas:

1. Authorization 
When Facebook calls your webpage (on my case a jhtml using SEAM - it could be a JSP as well), it will send through POST something called signed_request, for more details please read this The signed_request parameter is the concatenation of a HMAC SHA-256 signature string, a period (.), and a base64url encoded JSON object. It looks something like this (without the newlines):

vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso
.
eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsIjAiOiJwYXlsb2FkIn0

Just by receiving this parameter, it means that you (as facebook user) just authorized this app on your account, otherwise you'll get the classic mesage asking for your permission to use this app.

Next, we need to retrieve from the JSON object 2 parameters that we need to do the authentication: oauth_token and expires).
However, in order to play around with JSON object, we need to decode it, and this will do the trick: It's very important to use sun.misc.BASE64Decoder in order to avoid missing few characters when decoding with other classes. Belive me, this save you from a lot of headeaches. I'm a big fan of Commons, however, it didn't work out really good when decoding this JSON object. FYI, this is my method.

2. Authentication 
This step is really easy, because based on attributes oauth_token and expires, we have a to make a http call to https://graph.facebook.com/me in order to authenticate into FB.
As result of my http call, by using the JSON object returned, I'm able to get more details about this FB account, such as email, first name, last name, age, languages, among others. The next steps depend how deep you want to go.
Good luck!

Monday, September 24, 2012

Sorting a bean List with Commons

Nowadays whenever I surf the net, comparable interface is widely used to sort a List of objects. I am very sure it's the best approach, no doubt in that :)

However, if you want to sort in more than one place of your projects, I feel the code will be redundant. Am I right?

The alternate and the best solution is to use the Apache Commons Bean Utils


And this is how I did it:

Asceding order:
For ascending order, we should give the parameter alone. For instance, if we want sort by “endDate”. We should pass the parameter endDate to the BeanComparator class instance.


Reverse Order Sorting(Descending Order):
For descending order, we should give the parameter along with the instance of ReverseComparator class. For instance, if we want to sort by “firstName”. We should pass two parameters, such as the endDate and the instance of ReverseComparator class to the BeanComparator class.


Note:
Just keep in mind that your fild must be NON-NULL otherwise you'll get a pretty NPEx slap in your face.