package com.flickr4java.flickr.photos.upload; 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.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; /** * Checks the status of asynchronous photo upload tickets. * * @author till (Till Krech) extranoise:flickr * @version $Id: UploadInterface.java,v 1.3 2008/01/28 23:01:45 x-mago Exp $ */ public class UploadInterface { public static final String METHOD_CHECK_TICKETS = "flickr.photos.upload.checkTickets"; private String apiKey; private String sharedSecret; private Transport transportAPI; public UploadInterface(String apiKey, String sharedSecret, Transport transport) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transport; } /** * Checks the status of one or more asynchronous photo upload tickets. This method does not require authentication. * * @param tickets * a set of ticket ids (Strings) or {@link Ticket} objects containing ids * @return a list of {@link Ticket} objects. * @throws FlickrException */ public List<Ticket> checkTickets(Set<String> tickets) throws FlickrException { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_CHECK_TICKETS); StringBuffer sb = new StringBuffer(); Iterator<String> it = tickets.iterator(); while (it.hasNext()) { if (sb.length() > 0) { sb.append(","); } Object obj = it.next(); if (obj instanceof Ticket) { sb.append(((Ticket) obj).getTicketId()); } else { sb.append(obj); } } parameters.put("tickets", sb.toString()); Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } // <uploader> // <ticket id="128" complete="1" photoid="2995" /> // <ticket id="129" complete="0" /> // <ticket id="130" complete="2" /> // <ticket id="131" invalid="1" /> // </uploader> List<Ticket> list = new ArrayList<Ticket>(); Element uploaderElement = response.getPayload(); NodeList ticketNodes = uploaderElement.getElementsByTagName("ticket"); int n = ticketNodes.getLength(); for (int i = 0; i < n; i++) { Element ticketElement = (Element) ticketNodes.item(i); String id = ticketElement.getAttribute("id"); String complete = ticketElement.getAttribute("complete"); boolean invalid = "1".equals(ticketElement.getAttribute("invalid")); String photoId = ticketElement.getAttribute("photoid"); Ticket info = new Ticket(); info.setTicketId(id); info.setInvalid(invalid); info.setStatus(Integer.parseInt(complete)); info.setPhotoId(photoId); list.add(info); } return list; } }