package com.flickr4java.flickr.commons; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.util.XMLUtilities; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; /** * * @author mago * @version $Id: CommonsInterface.java,v 1.2 2009/07/11 20:30:27 x-mago Exp $ */ public class CommonsInterface { public static final String METHOD_GET_INSTITUTIONS = "flickr.commons.getInstitutions"; private final String apiKey; private final String sharedSecret; private final Transport transportAPI; public CommonsInterface(String apiKey, String sharedSecret, Transport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; } /** * Retrieves a list of the current Commons institutions. * * This method does not require authentication. * * @return List of Institution * @throws FlickrException */ public ArrayList<Institution> getInstitutions() throws FlickrException { ArrayList<Institution> institutions = new ArrayList<Institution>(); Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_GET_INSTITUTIONS); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } Element mElement = response.getPayload(); NodeList mNodes = mElement.getElementsByTagName("institution"); for (int i = 0; i < mNodes.getLength(); i++) { Element element = (Element) mNodes.item(i); institutions.add(parseInstitution(element)); } return institutions; } private Institution parseInstitution(Element mElement) { Institution inst = new Institution(); inst.setId(mElement.getAttribute("nsid")); inst.setDateLaunch(mElement.getAttribute("date_launch")); inst.setName(XMLUtilities.getChildValue(mElement, "name")); NodeList urlNodes = mElement.getElementsByTagName("url"); for (int i = 0; i < urlNodes.getLength(); i++) { Element urlElement = (Element) urlNodes.item(i); if (urlElement.getAttribute("type").equals("site")) { inst.setSiteUrl(XMLUtilities.getValue(urlElement)); } else if (urlElement.getAttribute("type").equals("license")) { inst.setLicenseUrl(XMLUtilities.getValue(urlElement)); } else if (urlElement.getAttribute("type").equals("flickr")) { inst.setFlickrUrl(XMLUtilities.getValue(urlElement)); } } return inst; } }