/** * @author acaplan */ package com.flickr4java.flickr.photos.suggestions; import java.util.HashMap; import java.util.List; import java.util.Map; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.groups.Group; import com.flickr4java.flickr.groups.GroupList; import com.flickr4java.flickr.places.Location; import com.flickr4java.flickr.places.Place; import com.flickr4java.flickr.util.XMLUtilities; /** * @author acaplan * */ public class SuggestionsInterface { public static final String METHOD_APPROVE_SUGGESTION = "flickr.photos.suggestions.approveSuggestion"; public static final String METHOD_REJECT_SUGGESTION = "flickr.photos.suggestions.rejectSuggestion"; public static final String METHOD_REMOVE_SUGGESTION = "flickr.photos.suggestions.removeSuggestion"; public static final String METHOD_SUGGEST_LOCATION = "flickr.photos.suggestions.suggestLocation"; public static final String METHOD_GET_LIST = "flickr.photos.suggestions.getList"; private String apiKey; private String sharedSecret; private Transport transportAPI; public SuggestionsInterface(String apiKey, String sharedSecret, Transport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; } public void approveSuggestion(String suggestionId) throws FlickrException { act(suggestionId, METHOD_APPROVE_SUGGESTION); } public void rejectSuggestion(String suggestionId) throws FlickrException { act(suggestionId, METHOD_REJECT_SUGGESTION); } public void removeSuggestion(String suggestionId) throws FlickrException { act(suggestionId, METHOD_REMOVE_SUGGESTION); } private void act(String suggestionId, String method) throws FlickrException { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", method); parameters.put("suggestion_id", suggestionId); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } } public void suggestLocation(String photoId, double lat, double lon, int accuracy, String woe_id, String place_id, String note) throws FlickrException { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_SUGGEST_LOCATION); parameters.put("photo_id", photoId); parameters.put("lat", lat); parameters.put("lon", lon); if (accuracy > 0 && accuracy <= 16) { parameters.put("accuracy", accuracy); } if (woe_id != null) { parameters.put("woe_id", woe_id); } if (place_id != null) { parameters.put("place_id", place_id); } if (note != null) { parameters.put("note", note); } Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } } public SuggestionList<Suggestion> getList(String photoId) throws FlickrException { SuggestionList<Suggestion> suggestionList = new SuggestionList<Suggestion>(); Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("method", METHOD_GET_LIST); parameters.put("photo_id", photoId); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } Element suggestionsElement = response.getPayload(); suggestionList.setPage(XMLUtilities.getIntAttribute(suggestionsElement, "page")); suggestionList.setPerPage(XMLUtilities.getIntAttribute(suggestionsElement, "perpage")); suggestionList.setTotal(XMLUtilities.getIntAttribute(suggestionsElement, "total")); NodeList suggestionNodes = suggestionsElement.getElementsByTagName("suggestion"); for (int i = 0; i < suggestionNodes.getLength(); i++) { Element suggestionElement = (Element) suggestionNodes.item(i); Suggestion suggestion = new Suggestion(); suggestion.setSuggestionId(suggestionElement.getAttribute("id")); suggestion.setPhotoId(suggestionElement.getAttribute("photo_id")); suggestion.setDateSuggested(suggestionElement.getAttribute("date_suggested")); suggestion.setNote(XMLUtilities.getChild(suggestionElement, "note").getTextContent()); Element suggestedElement = XMLUtilities.getChild(suggestionElement, "suggested_by"); suggestion.setSuggestorUsername(suggestedElement.getAttribute("username")); suggestion.setSuggestorId(suggestedElement.getAttribute("nsid")); Element locationElement = XMLUtilities.getChild(suggestionElement, "location"); Location location = new Location(); location.setLatitude(Double.parseDouble(locationElement.getAttribute("latitude"))); location.setLongitude(Double.parseDouble(locationElement.getAttribute("longitude"))); location.setWoeId(locationElement.getAttribute("woeid")); location.setAccuracy(Integer.parseInt(locationElement.getAttribute("accuracy"))); Element regionElement = XMLUtilities.getChild(locationElement, "region"); if(regionElement != null){ Place placeReg = new Place(); placeReg.setPlaceId(regionElement.getAttribute("place_id")); placeReg.setWoeId(regionElement.getAttribute("woeid")); location.setRegion(placeReg); } Element countryElement = XMLUtilities.getChild(locationElement, "country"); if(countryElement != null){ Place placeCtry = new Place(); placeCtry.setPlaceId(countryElement.getAttribute("place_id")); placeCtry.setWoeId(countryElement.getAttribute("woeid")); location.setCountry(placeCtry); } Element countyElement = XMLUtilities.getChild(locationElement, "county"); if(countyElement != null){ Place placeCnty = new Place(); placeCnty.setPlaceId(countyElement.getAttribute("place_id")); placeCnty.setWoeId(countyElement.getAttribute("woeid")); location.setCounty(placeCnty); } suggestion.setLocation(location); suggestionList.add(suggestion); } return suggestionList; } }