/*
* Copyright (c) 2005 Aetrion LLC.
*/
package com.flickr4java.flickr.urls;
import com.flickr4java.flickr.FlickrException;
import com.flickr4java.flickr.Response;
import com.flickr4java.flickr.Transport;
import com.flickr4java.flickr.galleries.Gallery;
import com.flickr4java.flickr.groups.Group;
import com.flickr4java.flickr.people.User;
import com.flickr4java.flickr.util.XMLUtilities;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
import java.util.HashMap;
import java.util.Map;
/**
* Interface for testing Flickr connectivity.
*
* @author Anthony Eden
*/
public class UrlsInterface {
public static final String METHOD_GET_GROUP = "flickr.urls.getGroup";
public static final String METHOD_GET_USER_PHOTOS = "flickr.urls.getUserPhotos";
public static final String METHOD_GET_USER_PROFILE = "flickr.urls.getUserProfile";
public static final String METHOD_LOOKUP_GROUP = "flickr.urls.lookupGroup";
public static final String METHOD_LOOKUP_USER = "flickr.urls.lookupUser";
public static final String METHOD_LOOKUP_GALLERY = "flickr.urls.lookupGallery";
private final String apiKey;
private final String sharedSecret;
private final Transport transport;
/**
* Construct a UrlsInterface.
*
* @param apiKey
* The API key
* @param transportAPI
* The Transport interface
*/
public UrlsInterface(String apiKey, String sharedSecret, Transport transportAPI) {
this.apiKey = apiKey;
this.sharedSecret = sharedSecret;
this.transport = transportAPI;
}
/**
* Get the group URL for the specified group ID
*
* @param groupId
* The group ID
* @return The group URL
* @throws FlickrException
*/
public String getGroup(String groupId) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_GET_GROUP);
parameters.put("group_id", groupId);
Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
Element payload = response.getPayload();
return payload.getAttribute("url");
}
/**
* Get the URL for the user's photos.
*
* @param userId
* The user ID
* @return The user photo URL
* @throws FlickrException
*/
public String getUserPhotos(String userId) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_GET_USER_PHOTOS);
parameters.put("user_id", userId);
Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
Element payload = response.getPayload();
return payload.getAttribute("url");
}
/**
* Get the URL for the user's profile.
*
* @param userId
* The user ID
* @return The URL
* @throws FlickrException
*/
public String getUserProfile(String userId) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_GET_USER_PROFILE);
parameters.put("user_id", userId);
Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
Element payload = response.getPayload();
return payload.getAttribute("url");
}
/**
* Lookup the group for the specified URL.
*
* @param url
* The url
* @return The group
* @throws FlickrException
*/
public Group lookupGroup(String url) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_LOOKUP_GROUP);
parameters.put("url", url);
Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
Group group = new Group();
Element payload = response.getPayload();
Element groupnameElement = (Element) payload.getElementsByTagName("groupname").item(0);
group.setId(payload.getAttribute("id"));
group.setName(((Text) groupnameElement.getFirstChild()).getData());
return group;
}
/**
* Lookup the username for the specified User URL.
*
* @param url
* The user profile URL
* @return The username
* @throws FlickrException
*/
public String lookupUser(String url) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_LOOKUP_USER);
parameters.put("url", url);
Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
Element payload = response.getPayload();
Element groupnameElement = (Element) payload.getElementsByTagName("username").item(0);
return ((Text) groupnameElement.getFirstChild()).getData();
}
/**
* Lookup the Gallery for the specified ID.
*
* @param galleryId
* The user profile URL
* @return The Gallery
* @throws FlickrException
*/
public Gallery lookupGallery(String galleryId) throws FlickrException {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("method", METHOD_LOOKUP_GALLERY);
parameters.put("url", galleryId);
Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret);
if (response.isError()) {
throw new FlickrException(response.getErrorCode(), response.getErrorMessage());
}
Element galleryElement = response.getPayload();
Gallery gallery = new Gallery();
gallery.setId(galleryElement.getAttribute("id"));
gallery.setUrl(galleryElement.getAttribute("url"));
User owner = new User();
owner.setId(galleryElement.getAttribute("owner"));
gallery.setOwner(owner);
gallery.setCreateDate(galleryElement.getAttribute("date_create"));
gallery.setUpdateDate(galleryElement.getAttribute("date_update"));
gallery.setPrimaryPhotoId(galleryElement.getAttribute("primary_photo_id"));
gallery.setPrimaryPhotoServer(galleryElement.getAttribute("primary_photo_server"));
gallery.setVideoCount(galleryElement.getAttribute("count_videos"));
gallery.setPhotoCount(galleryElement.getAttribute("count_photos"));
gallery.setPrimaryPhotoFarm(galleryElement.getAttribute("farm"));
gallery.setPrimaryPhotoSecret(galleryElement.getAttribute("secret"));
gallery.setTitle(XMLUtilities.getChildValue(galleryElement, "title"));
gallery.setDesc(XMLUtilities.getChildValue(galleryElement, "description"));
return gallery;
}
}