/* * Copyright (c) 2005 Aetrion LLC. */ package com.flickr4java.flickr.photos.licenses; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Interface for working with copyright licenses. * * @author Anthony Eden */ public class LicensesInterface { public static final String METHOD_GET_INFO = "flickr.photos.licenses.getInfo"; public static final String METHOD_SET_LICENSE = "flickr.photos.licenses.setLicense"; private String apiKey; private String sharedSecret; private Transport transportAPI; public LicensesInterface(String apiKey, String sharedSecret, Transport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; } /** * Fetches a list of available photo licenses for Flickr. * * This method does not require authentication. * * @return A collection of License objects * @throws FlickrException */ public Collection<License> getInfo() throws FlickrException { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_GET_INFO); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } List<License> licenses = new ArrayList<License>(); Element licensesElement = response.getPayload(); NodeList licenseElements = licensesElement.getElementsByTagName("license"); for (int i = 0; i < licenseElements.getLength(); i++) { Element licenseElement = (Element) licenseElements.item(i); License license = new License(); license.setId(licenseElement.getAttribute("id")); license.setName(licenseElement.getAttribute("name")); license.setUrl(licenseElement.getAttribute("url")); licenses.add(license); } return licenses; } /** * Sets the license for a photo. * * This method requires authentication with 'write' permission. * * @param photoId * The photo to update the license for. * @param licenseId * The license to apply, or 0 (zero) to remove the current license. * @throws FlickrException */ public void setLicense(String photoId, int licenseId) throws FlickrException { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_SET_LICENSE); parameters.put("photo_id", photoId); parameters.put("license_id", Integer.toString(licenseId)); // Note: This method requires an HTTP POST request. Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } // This method has no specific response - It returns an empty sucess response if it completes without error. } }