diff --git a/Flickr4Java/.gitignore b/.gitignore similarity index 96% rename from Flickr4Java/.gitignore rename to .gitignore index 71df0227..0acb4470 100644 --- a/Flickr4Java/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.idea target .gradle build/ diff --git a/Flickr4Java/BUILDING.md b/BUILDING.md similarity index 100% rename from Flickr4Java/BUILDING.md rename to BUILDING.md diff --git a/Flickr4Java/CHANGELOG.txt b/CHANGELOG.txt similarity index 100% rename from Flickr4Java/CHANGELOG.txt rename to CHANGELOG.txt diff --git a/Flickr4Java/CONTRIB.md b/CONTRIB.md similarity index 100% rename from Flickr4Java/CONTRIB.md rename to CONTRIB.md diff --git a/Flickr4Java/LICENSE-apache.txt b/Flickr4Java/LICENSE-apache.txt deleted file mode 100644 index 183b52c0..00000000 --- a/Flickr4Java/LICENSE-apache.txt +++ /dev/null @@ -1,56 +0,0 @@ -/* - * The Apache Software License, Version 1.1 - * - * - * Copyright (c) 1999 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Xerces" and "Apache Software Foundation" must - * not be used to endorse or promote products derived from this - * software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * nor may "Apache" appear in their name, without prior written - * permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation and was - * originally based on software copyright (c) 1999, International - * Business Machines, Inc., http://www.ibm.com. For more - * information on the Apache Software Foundation, please see - * . - */ diff --git a/Flickr4Java/LICENSE.txt b/Flickr4Java/LICENSE.txt deleted file mode 100644 index bbe3905f..00000000 --- a/Flickr4Java/LICENSE.txt +++ /dev/null @@ -1,45 +0,0 @@ -/*-- - - Copyright (C) 2005 Aetrion LLC. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the disclaimer that follows - these conditions in the documentation and/or other materials - provided with the distribution. - - 3. The name "flickrj" must not be used to endorse or promote products - derived from this software without prior written permission. For - written permission, please contact me@anthonyeden.com. - - 4. Products derived from this software may not be called "flickrj", nor - may "flickrj" appear in their name, without prior written permission - from Aetrion LLC (license@aetrion.com). - - In addition, I request (but do not require) that you include in the - end-user documentation provided with the redistribution and/or in the - software itself an acknowledgement equivalent to the following: - "This product includes software developed by Aetrion LLC." - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - For more information on flickrj, please see . - - */ \ No newline at end of file diff --git a/Flickr4Java/src/examples/java/UploadPhoto.java b/Flickr4Java/src/examples/java/UploadPhoto.java deleted file mode 100644 index 2a2d1f57..00000000 --- a/Flickr4Java/src/examples/java/UploadPhoto.java +++ /dev/null @@ -1,871 +0,0 @@ -import com.flickr4java.flickr.Flickr; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.REST; -import com.flickr4java.flickr.RequestContext; -// import com.flickr4java.flickr.Transport; -import com.flickr4java.flickr.auth.Auth; -import com.flickr4java.flickr.auth.AuthInterface; -import com.flickr4java.flickr.auth.Permission; -import com.flickr4java.flickr.photos.Photo; -import com.flickr4java.flickr.photos.PhotoList; -import com.flickr4java.flickr.photos.PhotosInterface; -// import com.flickr4java.flickr.photos.Size; -import com.flickr4java.flickr.photosets.Photoset; -import com.flickr4java.flickr.photosets.PhotosetsInterface; -import com.flickr4java.flickr.util.AuthStore; -import com.flickr4java.flickr.util.FileAuthStore; -import com.flickr4java.flickr.people.PeopleInterface; -import com.flickr4java.flickr.people.User; - -import org.scribe.model.Token; -import org.scribe.model.Verifier; -import org.xml.sax.SAXException; -import org.apache.log4j.Logger; - -import java.text.SimpleDateFormat; -import java.util.Set; - -import com.flickr4java.flickr.photosets.Photosets; - - - -// import java.io.BufferedInputStream; -import java.io.File; -import java.io.FilenameFilter; -// import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -// import java.net.URL; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Properties; -// import java.util.Map; -import java.util.Scanner; -// import java.io.ByteArrayOutputStream; -//import java.io.File; -// import java.io.FileInputStream; -// import java.io.IOException; -// import java.io.InputStream; - - -// import com.flickr4java.flickr.photos.PhotosInterface; -import com.flickr4java.flickr.uploader.UploadMetaData; -import com.flickr4java.flickr.uploader.Uploader; -// import com.flickr4java.flickr.util.IOUtilities; -import com.flickr4java.flickr.prefs.PrefsInterface; - -// import com.flickr4java.flickr.tags.Tag; - -/** - * A simple program to upload photos to a set. It checks for files already uploaded assuming the title - * is not changed so that it can be rerun if partial upload is done. - * It uses the tag field to store the filename as OrigFileName to be used while downloading - * if the title has been changed. - * If setup.properties is not available, pass the apiKey and secret as arguments to the program. - * - * This sample also uses the AuthStore interface, so users will only be asked to authorize on the first run. - * - * Please NOTE that this needs Java 7 to work. Java 7 was released on July 28, 2011 and soon Java 6 may not - * be supported anymore ( Jul 2014). - * - * @author Keyur Parikh - */ - -public class UploadPhoto { - - private static final Logger logger = Logger.getLogger(UploadPhoto.class); - - private String nsid; - private String username; - - // private final String sharedSecret; - - private final Flickr flickr; - - private AuthStore authStore; - public boolean flickrDebug = false; - private boolean setOrigFilenameTag = true; - private boolean replaceSpaces = false; - - private int privacy = -1; - - HashMap allSetsMap = new HashMap(); - HashMap> setNameToId = new HashMap>(); - public static final SimpleDateFormat smp = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss a"); - - public UploadPhoto(String apiKey, String nsid, String sharedSecret, File authsDir, String username) throws FlickrException { - flickr = new Flickr(apiKey, sharedSecret, new REST()); - - this.username = username; - this.nsid = nsid; - // this.sharedSecret = sharedSecret; - - if (authsDir != null) { - this.authStore = new FileAuthStore(authsDir); - } - - // If one of them is not filled in, find and populate it. - if(username == null || username.equals("")) - setUserName(); - if(nsid == null || nsid.equals("")) - setNsid(); - - } - - private void setUserName() throws FlickrException { - if(nsid != null && !nsid.equals("")) { - Auth auth = null; - if (authStore != null) { - auth = authStore.retrieve(nsid); - if (auth != null) { - username = auth.getUser().getUsername(); - } - } - // For this to work: REST.java or PeopleInterface needs to change to pass apiKey - // as the parameter to the call which is not authenticated. - - if(auth == null) { - // Get nsid using flickr.people.findByUsername - PeopleInterface peopleInterf = flickr.getPeopleInterface(); - User u = peopleInterf.getInfo(nsid); - if(u != null) { - username = u.getUsername(); - } - } - } - } - /** - * Check local saved copy first ??. - * If Auth by username is available, then we will not need to make the API call. - * - * @throws FlickrException - */ - - private void setNsid() throws FlickrException { - - if(username != null && !username.equals("")) { - Auth auth = null; - if (authStore != null) { - auth = authStore.retrieve(username); // assuming FileAuthStore is enhanced else need to - // keep in user-level files. - - if (auth != null) { - nsid = auth.getUser().getId(); - } - } - if(auth != null) - return; - - Auth[] allAuths = authStore.retrieveAll(); - for(int i = 0 ; i < allAuths.length; i++) { - if(username.equals(allAuths[i].getUser().getUsername())) { - nsid = allAuths[i].getUser().getId(); - return; - } - } - - // For this to work: REST.java or PeopleInterface needs to change to pass apiKey - // as the parameter to the call which is not authenticated. - - // Get nsid using flickr.people.findByUsername - PeopleInterface peopleInterf = flickr.getPeopleInterface(); - User u = peopleInterf.findByUsername(username); - if(u != null) { - nsid = u.getId(); - } - } - } - - private void authorize() throws IOException, SAXException, FlickrException { - AuthInterface authInterface = flickr.getAuthInterface(); - Token accessToken = authInterface.getRequestToken(); - - // Try with DELETE permission. At least need write permission for upload and add-to-set. - String url = authInterface.getAuthorizationUrl(accessToken, Permission.DELETE); - System.out.println("Follow this URL to authorise yourself on Flickr"); - System.out.println(url); - System.out.println("Paste in the token it gives you:"); - System.out.print(">>"); - - Scanner scanner = new Scanner(System.in); - String tokenKey = scanner.nextLine(); - - Token requestToken = authInterface.getAccessToken(accessToken, new Verifier(tokenKey)); - - Auth auth = authInterface.checkToken(requestToken); - RequestContext.getRequestContext().setAuth(auth); - this.authStore.store(auth); - scanner.close(); - System.out.println("Thanks. You probably will not have to do this every time. Auth saved for user: " - + auth.getUser().getUsername() + " nsid is: " + auth.getUser().getId()); - System.out.println(" AuthToken: " + auth.getToken() + " tokenSecret: " + auth.getTokenSecret()); - } -/** - * If the Authtoken was already created in a separate program but not saved to file. - * - * @param authToken - * @param tokenSecret - * @param username - * @return - * @throws IOException - */ - private Auth constructAuth(String authToken, String tokenSecret, String username) throws IOException { - - Auth auth = new Auth(); - auth.setToken(authToken); - auth.setTokenSecret(tokenSecret); - - // Prompt to ask what permission is needed: read, update or delete. - auth.setPermission(Permission.fromString("delete") ); - - User user = new User(); - // Later change the following 3. Either ask user to pass on command line or read - // from saved file. - user.setId(nsid); - user.setUsername((username)); - user.setRealName(""); - auth.setUser(user); - this.authStore.store(auth); - return auth; - } - - public void setAuth(String authToken, String username, String tokenSecret) throws IOException, SAXException, FlickrException { - RequestContext rc = RequestContext.getRequestContext(); - Auth auth = null; - - if(authToken != null && !authToken.equals("") && tokenSecret != null && !tokenSecret.equals("")) { - auth = constructAuth(authToken, tokenSecret, username); - rc.setAuth(auth); - } - else { - if (this.authStore != null) { - auth = this.authStore.retrieve(this.nsid); - if (auth == null) { - this.authorize(); - } else { - rc.setAuth(auth); - } - } - } - } - - public int getPrivacy() throws Exception { - - PrefsInterface prefi = flickr.getPrefsInterface(); - privacy = prefi.getPrivacy(); - - return(privacy); - } - - private String makeSafeFilename(String input) { - byte[] fname = input.getBytes(); - byte[] bad = new byte[] { '\\', '/', '"', '*' }; - byte replace = '_'; - for (int i = 0; i < fname.length; i++) { - for (byte element : bad) { - if (fname[i] == element) { - fname[i] = replace; - } - } - if(replaceSpaces && fname[i] == ' ') - fname[i] = '_'; - } - return new String(fname); - } - - public String uploadfile(String filename, String inpTitle) throws Exception { - String photoId; - - RequestContext rc = RequestContext.getRequestContext(); - - if (this.authStore != null) { - Auth auth = this.authStore.retrieve(this.nsid); - if (auth == null) { - this.authorize(); - } else { - rc.setAuth(auth); - } - } - - //PhotosetsInterface pi = flickr.getPhotosetsInterface(); - // PhotosInterface photoInt = flickr.getPhotosInterface(); - // Map allPhotos = new HashMap(); -/** - - 1 : Public - 2 : Friends only - 3 : Family only - 4 : Friends and Family - 5 : Private - -**/ - if( privacy == -1) - getPrivacy(); - - UploadMetaData metaData = new UploadMetaData(); - - if(privacy == 1) - metaData.setPublicFlag(true); - if(privacy == 2 || privacy == 4) - metaData.setFriendFlag(true); - if(privacy == 3 || privacy == 4) - metaData.setFamilyFlag(true); - - if(basefilename == null || basefilename.equals("")) - basefilename = filename; // "image.jpg"; - - String title = basefilename; - boolean setMimeType = true; // change during testing. Doesn't seem to be supported at this time in flickr. - if(setMimeType) { - if(basefilename.lastIndexOf('.') > 0) { - title = basefilename.substring(0, basefilename.lastIndexOf('.') ); - String suffix = basefilename.substring(basefilename.lastIndexOf('.')+1); - // Set Mime Type if known. - - // Later use a mime-type properties file or a hash table of all known photo and video types - // allowed by flickr. - - if(suffix.equalsIgnoreCase("png")) { - metaData.setFilemimetype("image/png"); - } - else if(suffix.equalsIgnoreCase("mpg") ||suffix.equalsIgnoreCase("mpeg") ) { - metaData.setFilemimetype("video/mpeg"); - } - else if(suffix.equalsIgnoreCase("mov")) { - metaData.setFilemimetype("video/quicktime"); - } - } - } - logger.debug(" File : " + filename ); - logger.debug(" basefilename : " + basefilename ); - - if(inpTitle != null && !inpTitle.equals("")) { - title = inpTitle; - logger.debug(" title : " + inpTitle ); - metaData.setTitle(title); - } // flickr defaults the title field from file name. - - // UploadMeta is using String not Tag class. - - // Tags are getting mangled by yahoo stripping off the = , '.' and many other punctuation characters - // and converting to lower case: use the raw tag field to find the real value for checking and - // for download. - if(setOrigFilenameTag) { - List tags = new ArrayList(); - String tmp = basefilename; - basefilename = makeSafeFilename(basefilename); - tags.add("OrigFileName='" + basefilename + "'"); - metaData.setTags(tags); - - if(!tmp.equals(basefilename)){ - System.out.println(" File : " + basefilename + " contains special characters. stored as " + basefilename + " in tag field" ); - } - } - - // File imageFile = new File(filename); - // InputStream in = null; - Uploader uploader = flickr.getUploader(); - - // ByteArrayOutputStream out = null; - try { - // in = new FileInputStream(imageFile); - // out = new ByteArrayOutputStream(); - - // int b = -1; - /** - while ((b = in.read()) != -1) { - out.write((byte) b); - } - **/ - - /** - byte[] buf = new byte[1024]; - while ((b = in.read(buf)) != -1) { - // fos.write(read); - out.write(buf, 0, b); - } - **/ - - metaData.setFilename(basefilename); - // check correct handling of escaped value - - File f = new File(filename); - photoId = uploader.upload(f, metaData); - - logger.debug(" File : " + filename + " uploaded: photoId = " + photoId); - } finally { - - } - - return(photoId); - } - - public void getPhotosetsInfo() { - - PhotosetsInterface pi = flickr.getPhotosetsInterface(); - try { - int setsPage = 1; - while (true) { - Photosets photosets = pi.getList(nsid, 500, setsPage); - Collection setsColl = photosets.getPhotosets(); - Iterator setsIter = setsColl.iterator(); - while (setsIter.hasNext()) { - Photoset set = setsIter.next(); - allSetsMap.put(set.getId(), set); - - // 2 or more sets can in theory have the same name. !!! - ArrayList setIdarr = setNameToId.get(set.getTitle()); - if(setIdarr == null) { - setIdarr = new ArrayList(); - setIdarr.add(new String(set.getId())); - setNameToId.put(set.getTitle(), setIdarr); - } - else { - setIdarr.add(new String(set.getId())); - } - } - - if (setsColl.size() < 500) { - break; - } - setsPage++; - } - logger.debug(" Sets retrieved: " + allSetsMap.size()); - // all_sets_retrieved = true; - // Print dups if any. - - Set keys = setNameToId.keySet(); - Iterator iter = keys.iterator(); - while(iter.hasNext()) { - String name = iter.next(); - ArrayList setIdarr = setNameToId.get(name); - if(setIdarr != null && setIdarr.size() > 1) { - System.out.println("There is more than 1 set with this name : " + setNameToId.get(name)); - for(int j = 0; j < setIdarr.size(); j++) { - System.out.println(" id: " + setIdarr.get(j)); - } - } - } - - } catch (FlickrException e) { - e.printStackTrace(); - } - } - - private String setid = null; - private String basefilename = null; - private PhotoList photos = new PhotoList(); - private HashMap filePhotos = new HashMap(); - - private static void Usage() { - System.out.println("Usage: java " + UploadPhoto.class.getName() + " [ -n nsid | -u username ] -s setName { File../Directories}"); - System.out.println(" Must pass either -u username or -n nsid "); - System.out.println(" Must pass -s followed by set-name(albums) followed by file/directories."); - System.out.println("apiKey and shared secret must be available as apiKey and secret via setup.properties or passed as -apiKey key -secret shared-secret"); - System.exit(1); - } - - /** - * @return the setOrigFilenameTag - */ - public boolean isSetorigfilenametag() { - return setOrigFilenameTag; - } - - /** - * @param setOrigFilenameTag the setOrigFilenameTag to set - */ - public void setSetorigfilenametag(boolean setOrigFilenameTag) { - this.setOrigFilenameTag = setOrigFilenameTag; - } - - public static void main(String[] args) throws Exception { - - String apiKey = null; // args[0]; - String sharedSecret = null; // args[1]; - - Properties properties = new Properties(); - InputStream in = null; - try { - in = UploadPhoto.class.getResourceAsStream("/setup.properties"); - if(in != null) { - properties.load(in); - apiKey = properties.getProperty("apiKey"); - sharedSecret = properties.getProperty("secret"); - if(apiKey != null && sharedSecret != null) - logger.debug("Found setup.properties in classpath and set apiKey and shared secret"); - } - } catch (Exception e) { - e.printStackTrace(); - } - finally { - if(in != null) - in.close(); - } - - if (args.length < 5) { - Usage(); - System.exit(1); - } - - ArrayList uploadfileArgs = new ArrayList(); - ArrayList optionArgs = new ArrayList(); - - // Flickr.debugRequest = true; // keep it false else entire file will be in stdout. - - // Flickr.debugStream = true; - - String authsDirStr = System.getProperty("user.home") + File.separatorChar + ".flickrAuth"; - - String nsid = null; - String username = null; - String accessToken = null; // Optional entry. - String tokenSecret = null; // Optional entry. - String setName = null; - - boolean settagname = true; // Default to true to add tag while uploading. - - - int i = 0; - /*** - for(i = 0; i < args.length; i++) { - System.out.println("args[" + i + "] " + args[i]); - } - **/ - - for(i = 0; i < args.length; i++) { - switch(args[i]) { - case "-n": if(i < args.length) - nsid = args[++i]; - break; - case "-u": if(i < args.length) - username = args[++i]; - break; - case "-apiKey": if(i < args.length) - apiKey = args[++i]; - break; - - case "-secret": if(i < args.length) - sharedSecret = args[++i]; - break; - case "-notags" : if(i < args.length) - settagname = false; - break; - - case "-a" : if(i < args.length) - accessToken = args[++i]; - break; - case "-t" : if(i < args.length) - tokenSecret = args[++i]; - break; - case "-s" : if(i < args.length) - setName = args[++i]; - break; - case "-option": - if(i < args.length) - optionArgs.add(args[++i]); - break; - default : if(setName != null) - uploadfileArgs.add(args[i]); - else { - Usage(); - System.exit(1); - } - } - } - - if(apiKey == null || sharedSecret == null || - (username == null && nsid == null) || (setName == null ) || - (uploadfileArgs.size() == 0) ) { - Usage(); - System.exit(1); - } - - UploadPhoto bf = new UploadPhoto(apiKey, nsid, sharedSecret, new File(authsDirStr), username); - for(i = 0; i < optionArgs.size(); i++) { - bf.addOption( optionArgs.get(i)); - } - bf.setSetorigfilenametag(settagname); - bf.setAuth(accessToken, username, tokenSecret ); - - if(!bf.canUpload()) - System.exit(1); - - bf.getPrivacy(); - - bf.getPhotosetsInfo(); - - if(setName != null && !setName.equals("")) { - - bf.getSetPhotos(setName); - } - - // String photoid; - - for( i = 0; i < uploadfileArgs.size(); i++) { - String filename = uploadfileArgs.get(i); - - File f = new File(filename); - if(f.isDirectory()) { - String[] filelist = f.list(new UploadFilenameFilter()); - logger.debug("Processing directory : " + uploadfileArgs.get(i) ); - for(int j = 0; j < filelist.length; j++) { - bf.processFileArg( uploadfileArgs.get(i) + File.separatorChar + filelist[j], setName); - } - } - else { - bf.processFileArg( filename, setName); - } - } - } - - private static final String[] photoSuffixes = { - "jpg" - ,"jpeg" - ,"png" - ,"gif" - ,"bmp" - ,"tif","tiff" }; - - private static final String[] videoSuffixes = { - "3gp","3gp","avi","mov","mp4","mpg","mpeg","wmv","ogg","ogv","m2v"}; - - static class UploadFilenameFilter implements FilenameFilter { - - // Following suffixes from flickr upload page. An App should have this configurable, - // for videos and photos separately. - - public boolean accept(File dir, String name) { - if(isValidSuffix(name)) - return true; - else - return false; - } - - } - - private static boolean isValidSuffix(String basefilename) { - if(basefilename.lastIndexOf('.') <= 0) { - return false; - } - String suffix = basefilename.substring(basefilename.lastIndexOf('.')+1).toLowerCase(); - for(int i = 0; i < photoSuffixes.length; i++) { - if(photoSuffixes[i].equals(suffix)) - return true; - } - for(int i = 0; i < videoSuffixes.length; i++) { - if(videoSuffixes[i].equals(suffix)) - return true; - } - logger.debug(basefilename + " does not have a valid suffix, skipped."); - return false; - } - - private void processFileArg(String filename, String setName) throws Exception { - String photoid; - if(filename.equals("")) { - System.out.println("filename must be entered for uploadfile " ); - return; - } - if(filename.lastIndexOf(File.separatorChar ) > 0) - basefilename = filename.substring(filename.lastIndexOf(File.separatorChar ) + 1, filename.length()); - else - basefilename = filename; - - boolean fileUploaded = checkIfLoaded(filename); - - if(! fileUploaded) { - if(!isValidSuffix(basefilename)) { - System.out.println(" File: " + basefilename + " is not a supported filetype for flickr (invalid suffix)"); - return; - } - - File f = new File(filename); - if(!f.exists() || !f.canRead()) { - System.out.println(" File: " + filename + " cannot be processed, does not exist or is unreadable."); - return; - } - logger.debug("Calling uploadfile for filename : " + filename ); - logger.info("Upload of " + filename + " started at: " + smp.format(new Date()) + "\n"); - - photoid = uploadfile(filename, null); - // Add to Set. Create set if it does not exist. - if(photoid != null) { - addPhotoToSet( photoid, setName); - } - logger.info("Upload of " + filename + " finished at: " + smp.format(new Date()) + "\n"); - - } else { - logger.info(" File: " + filename + " has already been loaded on " + getUploadedTime(filename) ); - } - } - - private void addOption(String opt) { - - switch(opt) { - case "replaceSpaces": replaceSpaces = true; - break; - - case "notags": setSetorigfilenametag(false); - break; - - - default: // Not supported at this time. - System.out.println("Option: " + opt + " is not supported at this time"); - } - } - - - private boolean canUpload() { - RequestContext rc = RequestContext.getRequestContext(); - Auth auth = null; - auth = rc.getAuth(); - if(auth == null) { - System.out.println(" Cannot upload, there is no authorization information."); - return false; - } - Permission perm = auth.getPermission(); - if( (perm.getType() == Permission.WRITE_TYPE) || (perm.getType() == Permission.DELETE_TYPE)) - return true; - else { - System.out.println(" Cannot upload, You need write or delete permission, you have : " + perm.toString()); - return false; - } - } - -/** - * The assumption here is that for a given set only unique file-names will be loaded and the title - * field can be used. Later change to use the tags field ( OrigFileName) and strip off the suffix. - * - * @param filename - * @return - */ - private boolean checkIfLoaded(String filename) { - - String title; - if(basefilename.lastIndexOf('.') > 0) - title = basefilename.substring(0, basefilename.lastIndexOf('.') ); - else - return false; - - if(filePhotos.containsKey(title)) - return true; - - return false; - } - - private String getUploadedTime(String filename) { - - String title = ""; - if(basefilename.lastIndexOf('.') > 0) - title = basefilename.substring(0, basefilename.lastIndexOf('.') ); - - if(filePhotos.containsKey(title)) { - Photo p = filePhotos.get(title); - if(p.getDatePosted() != null) { - return(smp.format(p.getDatePosted())); - } - } - - return ""; - } - - private void getSetPhotos(String setName) throws FlickrException { - // Check if this is an existing set. If it is get all the photo list to avoid reloading already - // loaded photos. - ArrayList setIdarr ; - setIdarr = setNameToId.get(setName); - if(setIdarr != null) { - setid = setIdarr.get(0); - PhotosetsInterface pi = flickr.getPhotosetsInterface(); - - Set extras = new HashSet(); - /** - * A comma-delimited list of extra information to fetch for each returned record. - * Currently supported fields are: license, date_upload, date_taken, owner_name, - * icon_server, original_format, last_update, geo, tags, machine_tags, o_dims, - * views, media, path_alias, url_sq, url_t, url_s, url_m, url_o - */ - - extras.add("date_upload"); - extras.add("original_format"); - extras.add("media"); - // extras.add("url_o"); - extras.add("tags"); - - int setPage = 1; - while (true) { - PhotoList tmpSet = pi.getPhotos(setid, extras, Flickr.PRIVACY_LEVEL_NO_FILTER, 500, setPage); - - int tmpSetSize = tmpSet.size(); - photos.addAll(tmpSet); - if (tmpSetSize < 500) { - break; - } - setPage++; - } - for(int i = 0; i < photos.size(); i++) { - filePhotos.put(photos.get(i).getTitle(), photos.get(i)); - } - if(flickrDebug) { - logger.debug("Set title: " + setName + " id: " + setid + " found"); - logger.debug(" Photos in Set already loaded: " + photos.size() ); - } - } - } - - public void addPhotoToSet(String photoid, String setName) throws Exception { - - ArrayList setIdarr ; - - // all_set_maps. - - PhotosetsInterface psetsInterface = flickr.getPhotosetsInterface(); - - Photoset set = null; - - if(setid == null) { - // In case it is a new photo-set. - setIdarr = setNameToId.get(setName); - if(setIdarr == null) { - // setIdarr should be null since we checked it getSetPhotos. - // Create the new set. - // set the setid . - - String description = ""; - set = psetsInterface.create(setName, description, photoid); - setid = set.getId(); - - setIdarr = new ArrayList(); - setIdarr.add(new String(setid)); - setNameToId.put(setName, setIdarr); - - allSetsMap.put(set.getId(), set); - } - } - else { - set = allSetsMap.get(setid); - psetsInterface.addPhoto(setid , photoid); - } - // Add to photos . - - // Add Photo to existing set. - PhotosInterface photoInt = flickr.getPhotosInterface(); - Photo p = photoInt.getPhoto(photoid); - if(p != null) { - photos.add(p); - String title; - if(basefilename.lastIndexOf('.') > 0) - title = basefilename.substring(0, basefilename.lastIndexOf('.') ); - else - title = p.getTitle(); - filePhotos.put(title, p); - } - } -} - diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java deleted file mode 100644 index 256fdf23..00000000 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java +++ /dev/null @@ -1,466 +0,0 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -package com.flickr4java.flickr; - -import com.flickr4java.flickr.auth.Auth; -import com.flickr4java.flickr.util.Base64; -import com.flickr4java.flickr.util.DebugInputStream; -import com.flickr4java.flickr.util.IOUtilities; -import com.flickr4java.flickr.util.UrlUtilities; - -import org.apache.log4j.Logger; -import org.scribe.builder.ServiceBuilder; - -import org.scribe.builder.api.FlickrApi; -import org.scribe.model.OAuthRequest; -import org.scribe.model.Token; -import org.scribe.model.Verb; -import org.scribe.oauth.OAuthService; -import org.w3c.dom.Document; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.StringReader; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.Map; -import java.util.Map.Entry; -import java.util.concurrent.TimeUnit; - -/** - * Transport implementation using the REST interface. - * - * @author Anthony Eden - * @version $Id: REST.java,v 1.26 2009/07/01 22:07:08 x-mago Exp $ - */ -public class REST extends Transport { - - private static final Logger logger = Logger.getLogger(REST.class); - - public static final String PATH = "/services/rest/"; - - private static final String CHARSET_NAME = "UTF-8"; - - private boolean proxyAuth = false; - - private String proxyUser = ""; - - private String proxyPassword = ""; - - private final DocumentBuilder builder; - - private static Object mutex = new Object(); - - private Integer connectTimeoutMs; - - private Integer readTimeoutMs; - - /** - * Construct a new REST transport instance. - */ - public REST() { - setTransportType(REST); - setHost(API_HOST); - setPath(PATH); - setScheme(DEFAULT_SCHEME); - setResponseClass(RESTResponse.class); - DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); - try { - builder = builderFactory.newDocumentBuilder(); - } catch (ParserConfigurationException e) { - throw new FlickrRuntimeException(e); - } - } - - /** - * Construct a new REST transport instance using the specified host endpoint. - * - * @param host - * The host endpoint - */ - public REST(String host) { - this(); - setHost(host); - } - - /** - * Construct a new REST transport instance using the specified host and port endpoint. - * - * @param host - * The host endpoint - * @param port - * The port - */ - public REST(String host, int port) { - this(); - setHost(host); - setPort(port); - } - - /** - * Set a proxy for REST-requests. - * - * @param proxyHost - * @param proxyPort - */ - public void setProxy(String proxyHost, int proxyPort) { - System.setProperty("http.proxySet", "true"); - System.setProperty("http.proxyHost", proxyHost); - System.setProperty("http.proxyPort", "" + proxyPort); - } - - /** - * Set a proxy with authentication for REST-requests. - * - * @param proxyHost - * @param proxyPort - * @param username - * @param password - */ - public void setProxy(String proxyHost, int proxyPort, String username, String password) { - setProxy(proxyHost, proxyPort); - proxyAuth = true; - proxyUser = username; - proxyPassword = password; - } - - /** - * Invoke an HTTP GET request on a remote host. You must close the InputStream after you are done with. - * - * @param path - * The request path - * @param parameters - * The parameters (collection of Parameter objects) - * @return The Response - */ - @Override - public com.flickr4java.flickr.Response get(String path, Map parameters, String apiKey, String sharedSecret) { - - OAuthRequest request = new OAuthRequest(Verb.GET, getScheme() + "://" + getHost() + path); - for (Map.Entry entry : parameters.entrySet()) { - request.addQuerystringParameter(entry.getKey(), String.valueOf(entry.getValue())); - } - - if (proxyAuth) { - request.addHeader("Proxy-Authorization", "Basic " + getProxyCredentials()); - } - - RequestContext requestContext = RequestContext.getRequestContext(); - Auth auth = requestContext.getAuth(); - if (auth != null) { - Token requestToken = new Token(auth.getToken(), auth.getTokenSecret()); - OAuthService service = createOAuthService(parameters, apiKey, sharedSecret); - service.signRequest(requestToken, request); - } else { - // For calls that do not require authorization e.g. flickr.people.findByUsername which could be the - // first call if the user did not supply the user-id (i.e. nsid). - if (!parameters.containsKey(Flickr.API_KEY)) { - request.addQuerystringParameter(Flickr.API_KEY, apiKey); - } - } - - if (Flickr.debugRequest) { - logger.debug("GET: " + request.getCompleteUrl()); - } - setTimeouts(request); - org.scribe.model.Response scribeResponse = request.send(); - - try { - - com.flickr4java.flickr.Response response = null; - synchronized (mutex) { - String strXml = scribeResponse.getBody(); - if (Flickr.debugStream) { - logger.debug(strXml); - } - if (strXml.startsWith("oauth_problem=")) { - throw new FlickrRuntimeException(strXml); - } - Document document = builder.parse(new InputSource(new StringReader(strXml))); - response = (com.flickr4java.flickr.Response) responseClass.newInstance(); - response.parse(document); - } - return response; - } catch (IllegalAccessException e) { - throw new FlickrRuntimeException(e); - } catch (InstantiationException e) { - throw new FlickrRuntimeException(e); - } catch (SAXException e) { - throw new FlickrRuntimeException(e); - } catch (IOException e) { - throw new FlickrRuntimeException(e); - } - } - - /** - * Invoke a non OAuth HTTP GET request on a remote host. - * - * This is only used for the Flickr OAuth methods checkToken and getAccessToken. - * - * @param path - * The request path - * @param parameters - * The parameters - * @return The Response - */ - @Override - public Response getNonOAuth(String path, Map parameters) { - InputStream in = null; - try { - URL url = UrlUtilities.buildUrl(getScheme(), getHost(), getPort(), path, parameters); - if (Flickr.debugRequest) { - logger.debug("GET: " + url); - } - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - conn.setRequestMethod("GET"); - if (proxyAuth) { - conn.setRequestProperty("Proxy-Authorization", "Basic " + getProxyCredentials()); - } - setTimeouts(conn); - conn.connect(); - - if (Flickr.debugStream) { - in = new DebugInputStream(conn.getInputStream(), System.out); - } else { - in = conn.getInputStream(); - } - - Response response = null; - synchronized (mutex) { - Document document = builder.parse(in); - response = (Response) responseClass.newInstance(); - response.parse(document); - } - return response; - } catch (IllegalAccessException e) { - throw new FlickrRuntimeException(e); - } catch (InstantiationException e) { - throw new FlickrRuntimeException(e); - } catch (IOException e) { - throw new FlickrRuntimeException(e); - } catch (SAXException e) { - throw new FlickrRuntimeException(e); - } finally { - IOUtilities.close(in); - } - } - - /** - * Invoke an HTTP POST request on a remote host. - * - * @param path - * The request path - * @param parameters - * The parameters (collection of Parameter objects) - * @return The Response object - */ - @Override - public com.flickr4java.flickr.Response post(String path, Map parameters, String apiKey, String sharedSecret, boolean multipart) { - - OAuthRequest request = new OAuthRequest(Verb.POST, getScheme() + "://" + getHost() + path); - - if (multipart) { - buildMultipartRequest(parameters, request); - } else { - buildNormalPostRequest(parameters, request); - } - - RequestContext requestContext = RequestContext.getRequestContext(); - Auth auth = requestContext.getAuth(); - if (auth != null) { - Token requestToken = new Token(auth.getToken(), auth.getTokenSecret()); - OAuthService service = createOAuthService(parameters, apiKey, sharedSecret); - service.signRequest(requestToken, request); - } - - if (multipart) { - // Ensure all parameters (including oauth) are added to payload so signature matches - parameters.putAll(request.getOauthParameters()); - request.addPayload(buildMultipartBody(parameters, getMultipartBoundary())); - } - - if (proxyAuth) { - request.addHeader("Proxy-Authorization", "Basic " + getProxyCredentials()); - } - - if (Flickr.debugRequest) { - logger.debug("POST: " + request.getCompleteUrl()); - } - - org.scribe.model.Response scribeResponse = request.send(); - - try { - com.flickr4java.flickr.Response response = null; - synchronized (mutex) { - String strXml = scribeResponse.getBody(); - if (Flickr.debugStream) { - logger.debug(strXml); - } - if (strXml.startsWith("oauth_problem=")) { - throw new FlickrRuntimeException(strXml); - } - Document document = builder.parse(new InputSource(new StringReader(strXml))); - response = (com.flickr4java.flickr.Response) responseClass.newInstance(); - response.parse(document); - } - return response; - } catch (IllegalAccessException e) { - throw new FlickrRuntimeException(e); - } catch (InstantiationException e) { - throw new FlickrRuntimeException(e); - } catch (SAXException e) { - throw new FlickrRuntimeException(e); - } catch (IOException e) { - throw new FlickrRuntimeException(e); - } - } - - /** - * - * @param parameters - * @param sharedSecret - * @return - */ - private OAuthService createOAuthService(Map parameters, String apiKey, String sharedSecret) { - ServiceBuilder serviceBuilder = new ServiceBuilder().provider(FlickrApi.class).apiKey(apiKey).apiSecret(sharedSecret); - if (Flickr.debugRequest) { - serviceBuilder = serviceBuilder.debug(); - } - - return serviceBuilder.build(); - } - - /** - * - * @param parameters - * @param request - */ - private void buildNormalPostRequest(Map parameters, OAuthRequest request) { - for (Map.Entry entry : parameters.entrySet()) { - request.addBodyParameter(entry.getKey(), String.valueOf(entry.getValue())); - } - } - - /** - * - * @param parameters - * @param request - */ - private void buildMultipartRequest(Map parameters, OAuthRequest request) { - request.addHeader("Content-Type", "multipart/form-data; boundary=" + getMultipartBoundary()); - for (Map.Entry entry : parameters.entrySet()) { - String key = entry.getKey(); - if (!key.equals("photo") && !key.equals("filename") && !key.equals("filemimetype")) { - request.addQuerystringParameter(key, String.valueOf(entry.getValue())); - } - } - } - - /** - * - * @return - */ - private String getMultipartBoundary() { - return "---------------------------7d273f7a0d3"; - } - - public boolean isProxyAuth() { - return proxyAuth; - } - - /** - * Generates Base64-encoded credentials from locally stored username and password. - * - * @return credentials - */ - public String getProxyCredentials() { - return new String(Base64.encode((proxyUser + ":" + proxyPassword).getBytes())); - } - - private byte[] buildMultipartBody(Map parameters, String boundary) { - - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - try { - String filename = (String) parameters.get("filename"); - if(filename == null) - filename = "image.jpg"; - - String fileMimeType = (String) parameters.get("filemimetype"); - if(fileMimeType == null) - fileMimeType = "image/jpeg"; - - buffer.write(("--" + boundary + "\r\n").getBytes(CHARSET_NAME)); - for (Entry entry : parameters.entrySet()) { - String key = entry.getKey(); - if(!key.equals("filename") && !key.equals("filemimetype")) - writeParam(key, entry.getValue(), buffer, boundary, filename, fileMimeType); - } - } catch (IOException e) { - throw new FlickrRuntimeException(e); - } - - if (Flickr.debugRequest) { - String output = new String(buffer.toByteArray()); - logger.debug("Multipart body:\n" + output); - } - return buffer.toByteArray(); - } - - private void writeParam(String name, Object value, ByteArrayOutputStream buffer, String boundary, String filename, String fileMimeType) throws IOException { - if (value instanceof InputStream) { - buffer.write(("Content-Disposition: form-data; name=\"" + name + "\"; filename=\"" + filename + "\";\r\n").getBytes(CHARSET_NAME)); - buffer.write(("Content-Type: " + fileMimeType + "\r\n\r\n").getBytes(CHARSET_NAME)); - InputStream in = (InputStream) value; - byte[] buf = new byte[512]; - - int res = -1; - while ((res = in.read(buf)) != -1) { - buffer.write(buf, 0, res); - } - buffer.write(("\r\n" + "--" + boundary + "\r\n").getBytes(CHARSET_NAME)); - } else if (value instanceof byte[]) { - buffer.write(("Content-Disposition: form-data; name=\"" + name + "\"; filename=\"" + filename + "\";\r\n").getBytes(CHARSET_NAME)); - buffer.write(("Content-Type: " + fileMimeType + "\r\n\r\n").getBytes(CHARSET_NAME)); - buffer.write((byte[]) value); - buffer.write(("\r\n" + "--" + boundary + "\r\n").getBytes(CHARSET_NAME)); - } else { - buffer.write(("Content-Disposition: form-data; name=\"" + name + "\"\r\n\r\n").getBytes(CHARSET_NAME)); - buffer.write(((String) value).getBytes(CHARSET_NAME)); - buffer.write(("\r\n" + "--" + boundary + "\r\n").getBytes(CHARSET_NAME)); - } - } - - private void setTimeouts(HttpURLConnection conn) { - if (connectTimeoutMs != null) { - conn.setConnectTimeout(connectTimeoutMs); - } - if (readTimeoutMs != null) { - conn.setReadTimeout(readTimeoutMs); - } - } - - private void setTimeouts(OAuthRequest request) { - if (connectTimeoutMs != null) { - request.setConnectTimeout(connectTimeoutMs, TimeUnit.MILLISECONDS); - } - if (readTimeoutMs != null) { - request.setReadTimeout(readTimeoutMs, TimeUnit.MILLISECONDS); - } - } - - public void setConnectTimeoutMs(Integer connectTimeoutMs) { - this.connectTimeoutMs = connectTimeoutMs; - } - - public void setReadTimeoutMs(Integer readTimeoutMs) { - this.readTimeoutMs = readTimeoutMs; - } -} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java deleted file mode 100644 index 7097a635..00000000 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.flickr4java.flickr; - -import com.flickr4java.flickr.util.XMLUtilities; - -import org.apache.axis.message.SOAPBody; -import org.apache.axis.message.SOAPEnvelope; -import org.apache.axis.message.SOAPFault; -import org.apache.log4j.Logger; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import java.util.Collection; -import java.util.Iterator; -import java.util.List; - -/** - * Flickr SOAP Response object. - * - * @author Matt Ray - */ -public class SOAPResponse implements Response { - - private static Logger _log = Logger.getLogger(SOAPResponse.class); - - private List payload; - - private String errorCode; - - private String errorMessage; - - private final SOAPEnvelope envelope; - - public SOAPResponse(SOAPEnvelope envelope) { - this.envelope = envelope; - } - - @Override - public void parse(Document document) { - try { - SOAPBody body = (SOAPBody) envelope.getBody(); - - if (Flickr.debugStream) { - _log.debug("SOAP RESPONSE.parse"); - _log.debug(body.getAsString()); - } - - SOAPFault fault = (SOAPFault) body.getFault(); - if (fault != null) { - _log.warn("FAULT: " + fault.getAsString()); - errorCode = fault.getFaultCode(); - errorMessage = fault.getFaultString(); - } else { - for (@SuppressWarnings("unchecked") - Iterator i = body.getChildElements(); i.hasNext();) { - Element bodyelement = i.next(); - bodyelement.normalize(); - // TODO: Verify that the payload is always a single XML node - payload = (List) XMLUtilities.getChildElements(bodyelement); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - public String getStat() { - return null; - } - - @Override - public Element getPayload() { - if (payload.isEmpty()) { - throw new RuntimeException("SOAP response payload has no elements"); - } - return payload.get(0); - } - - @Override - public Collection getPayloadCollection() { - return payload; - } - - @Override - public boolean isError() { - return errorCode != null; - } - - @Override - public String getErrorCode() { - return errorCode; - } - - @Override - public String getErrorMessage() { - return errorMessage; - } - -} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/TimeZone.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/TimeZone.java deleted file mode 100644 index 5bda5b48..00000000 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/TimeZone.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.flickr4java.flickr.people; - -public class TimeZone { - - private String label; - - private String offset; - - /** - * Time Zone text - * - * @return timezone - */ - public String getLabel() { - return label; - } - - public void setLabel(String label) { - this.label = label; - } - - /** - * Time Zone offset - * - * @return timezone offset value - */ - public String geOffset() { - return offset; - } - - public void setOffset(String offset) { - this.offset = offset; - } - -} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java deleted file mode 100644 index b2df03a0..00000000 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java +++ /dev/null @@ -1,295 +0,0 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ - -package com.flickr4java.flickr.uploader; - -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.FlickrRuntimeException; -import com.flickr4java.flickr.REST; -import com.flickr4java.flickr.Transport; -import com.flickr4java.flickr.util.IOUtilities; -import com.flickr4java.flickr.util.StringUtilities; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.Collection; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; - -/** - * Upload a photo. - *

- * - * Setting {@link com.flickr4java.flickr.uploader.UploadMetaData#setAsync(boolean)} you can switch between synchronous and asynchronous uploads. - *

- * - * Synchronous uploads return the photoId, whilst asynchronous uploads return a ticketId. - *

- * - * TicketId's can be tracked with {@link com.flickr4java.flickr.photos.upload.UploadInterface#checkTickets(Set)} for completion. - * - * @author Anthony Eden - * @version $Id: Uploader.java,v 1.12 2009/12/15 20:57:49 x-mago Exp $ - */ -public class Uploader { - /** - * - */ - private static final String SERVICES_REPLACE_PATH = "/services/replace/"; - /** - * - */ - private static final String SERVICES_UPLOAD_PATH = "/services/upload/"; - - private final String apiKey; - - private final String sharedSecret; - - private final Transport transport; - - /** - * Construct an Uploader. - * - * @param apiKey - * The API key - */ - public Uploader(String apiKey, String sharedSecret) { - this.apiKey = apiKey; - this.sharedSecret = sharedSecret; - this.transport = new REST(Transport.UPLOAD_API_HOST); - this.transport.setResponseClass(UploaderResponse.class); - } - - /** - * Upload a photo from a byte-array. - * - * @param data - * The photo data as a byte array - * @param metaData - * The meta data - * @return photoId or ticketId - * @throws FlickrException - */ - public String upload(byte[] data, UploadMetaData metaData) throws FlickrException { - Map parameters = setUploadParameters(metaData); - parameters.put("photo", data); - - UploaderResponse response = postPhoto(parameters, SERVICES_UPLOAD_PATH); - - return getResponseString(metaData.isAsync(), response); - } - - /** - * Upload a photo from a File. - * - * @param file - * the photo file - * @param metaData - * The meta data - * @return photoId or ticketId - * @throws FlickrException - */ - public String upload(File file, UploadMetaData metaData) throws FlickrException { - InputStream in = null; - - try { - in = new FileInputStream(file); - return upload(in, metaData); - } catch (IOException e) { - throw new FlickrRuntimeException(e); - } finally { - IOUtilities.close(in); - } - } - - /** - * Upload a photo from an InputStream. - * - * @param in - * @param metaData - * @return photoId or ticketId - * @throws FlickrException - */ - public String upload(InputStream in, UploadMetaData metaData) throws FlickrException { - Map parameters = setUploadParameters(metaData); - parameters.put("photo", in); - - UploaderResponse response = postPhoto(parameters, SERVICES_UPLOAD_PATH); - - return getResponseString(metaData.isAsync(), response); - } - - /** - * Replace a photo from an InputStream. - * - * @param in - * @return photoId or ticketId - * @throws FlickrException - */ - public String replace(InputStream in, String flickrId, boolean async) throws FlickrException { - Map parameters = setReplaceParameters(flickrId, async); - parameters.put("photo", in); - - UploaderResponse response = postPhoto(parameters, SERVICES_REPLACE_PATH); - - return getResponseString(async, response); - } - - /** - * Replace a photo from an InputStream. - * - * @param data - * @param flickrId - * @param async - * @return photoId or ticketId - * @throws FlickrException - */ - public String replace(byte[] data, String flickrId, boolean async) throws FlickrException { - Map parameters = setReplaceParameters(flickrId, async); - - parameters.put("photo", data); - - UploaderResponse response = postPhoto(parameters, SERVICES_REPLACE_PATH); - - return getResponseString(async, response); - } - - /** - * Replace a photo from a File. - * - * @param file - * @param flickrId - * @param async - * @return photoId or ticketId - * @throws FlickrException - */ - public String replace(File file, String flickrId, boolean async) throws FlickrException { - InputStream in = null; - - try { - in = new FileInputStream(file); - return replace(in, flickrId, async); - } catch (FileNotFoundException e) { - throw new FlickrRuntimeException(e); - } finally { - IOUtilities.close(in); - } - } - - /** - * Call the post multipart end point. - * - * @param parameters - * @param path - * @return - * @throws FlickrException - */ - private UploaderResponse postPhoto(Map parameters, String path) throws FlickrException { - UploaderResponse response = (UploaderResponse) transport.post(path, parameters, apiKey, sharedSecret, true); - if (response.isError()) { - throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); - } - return response; - } - - /** - * Get the photo or ticket id from the response. - * - * @param async - * @param response - * @return - */ - private String getResponseString(boolean async, UploaderResponse response) { - String id = ""; - if (async) { - id = response.getTicketId(); - } else { - id = response.getPhotoId(); - } - return id; - } - - /** - * - * @param metaData - * @return - */ - private Map setUploadParameters(UploadMetaData metaData) { - Map parameters = new TreeMap(); - - String filename = metaData.getFilename(); - if(filename == null || filename.equals("")) - filename = "image.jpg"; // Will NOT work for videos, filename must be passed. - parameters.put("filename", filename); - - String fileMimeType = metaData.getFilemimetype(); - if(fileMimeType == null || fileMimeType.equals("")) - fileMimeType = "image/jpeg"; - - parameters.put("filemimetype", fileMimeType); - - String title = metaData.getTitle(); - if (title != null) { - parameters.put("title", title); - } - - String description = metaData.getDescription(); - if (description != null) { - parameters.put("description", description); - } - - Collection tags = metaData.getTags(); - if (tags != null) { - parameters.put("tags", StringUtilities.join(tags, " ")); - } - - if (metaData.isHidden() != null) { - parameters.put("hidden", metaData.isHidden().booleanValue() ? "1" : "0"); - } - - if (metaData.getSafetyLevel() != null) { - parameters.put("safety_level", metaData.getSafetyLevel()); - } - - if (metaData.getContentType() != null) { - parameters.put("content_type", metaData.getContentType()); - } - - parameters.put("is_public", metaData.isPublicFlag() ? "1" : "0"); - parameters.put("is_family", metaData.isFamilyFlag() ? "1" : "0"); - parameters.put("is_friend", metaData.isFriendFlag() ? "1" : "0"); - parameters.put("async", metaData.isAsync() ? "1" : "0"); - - return parameters; - } - - /** - * - * @param flickrId - * @param async - * @return - */ - private Map setReplaceParameters(String flickrId, boolean async) { - Map parameters = new TreeMap(); - - parameters.put("async", async ? "1" : "0"); - parameters.put("photo_id", flickrId); - - return parameters; - } - - /** - * Return the {@link REST} impl used by this instance so that properties can be set on it, eg {@link REST#setConnectTimeoutMs(Integer)}. TODO: should return - * a wrapper that only allows "safe" properties to be set. - * - * @return The {@link REST} transport used by this instance - */ - public REST getTransport() { - return (REST) transport; - } -} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/Base64.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/util/Base64.java deleted file mode 100644 index af8b2112..00000000 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/Base64.java +++ /dev/null @@ -1,403 +0,0 @@ -/* - * The Apache Software License, Version 1.1 - * - * - * Copyright (c) 1999 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Xerces" and "Apache Software Foundation" must - * not be used to endorse or promote products derived from this - * software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * nor may "Apache" appear in their name, without prior written - * permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation and was - * originally based on software copyright (c) 1999, International - * Business Machines, Inc., http://www.apache.org. For more - * information on the Apache Software Foundation, please see - * . - */ - -package com.flickr4java.flickr.util; - -import org.apache.log4j.Logger; - -/** - * This class provides encode/decode for RFC 2045 Base64 as defined by RFC 2045, N. Freed and N. Borenstein. RFC 2045: Multipurpose Internet Mail Extensions - * (MIME) Part One: Format of Internet Message Bodies. Reference 1996 Available at: http://www.ietf.org/rfc/rfc2045.txt This class is used by XML Schema binary - * format validation. - *

- * - * This implementation does not encode/decode streaming data. You need the data that you will encode/decode already on a byte array. - *

- * - * This is the latest pre commons-codec version of Base64. - * - * @author Jeffrey Rodriguez - * @author Sandy Gao - * @version Base64.java,v 1.8 2001/05/29 22:19:01 neilg Exp - */ -public final class Base64 { - - private static Logger _log = Logger.getLogger(Base64.class); - - static private final int BASELENGTH = 255; - - static private final int LOOKUPLENGTH = 64; - - static private final int TWENTYFOURBITGROUP = 24; - - static private final int EIGHTBIT = 8; - - static private final int SIXTEENBIT = 16; - - static private final int SIXBIT = 6; - - static private final int FOURBYTE = 4; - - static private final int SIGN = -128; - - static private final byte PAD = (byte) '='; - - static private byte[] base64Alphabet = new byte[BASELENGTH]; - - static private byte[] lookUpBase64Alphabet = new byte[LOOKUPLENGTH]; - - static { - - for (int i = 0; i < BASELENGTH; i++) { - base64Alphabet[i] = -1; - } - for (int i = 'Z'; i >= 'A'; i--) { - base64Alphabet[i] = (byte) (i - 'A'); - } - for (int i = 'z'; i >= 'a'; i--) { - base64Alphabet[i] = (byte) (i - 'a' + 26); - } - - for (int i = '9'; i >= '0'; i--) { - base64Alphabet[i] = (byte) (i - '0' + 52); - } - - base64Alphabet['+'] = 62; - base64Alphabet['/'] = 63; - - for (int i = 0; i <= 25; i++) - lookUpBase64Alphabet[i] = (byte) ('A' + i); - - for (int i = 26, j = 0; i <= 51; i++, j++) - lookUpBase64Alphabet[i] = (byte) ('a' + j); - - for (int i = 52, j = 0; i <= 61; i++, j++) - lookUpBase64Alphabet[i] = (byte) ('0' + j); - lookUpBase64Alphabet[62] = (byte) '+'; - lookUpBase64Alphabet[63] = (byte) '/'; - - } - - protected static boolean isWhiteSpace(byte octect) { - return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9); - } - - protected static boolean isPad(byte octect) { - return (octect == PAD); - } - - protected static boolean isData(byte octect) { - return (base64Alphabet[octect] != -1); - } - - public static boolean isBase64(String isValidString) { - if (isValidString == null) - return false; - return (isArrayByteBase64(isValidString.getBytes())); - } - - public static boolean isBase64(byte octect) { - return (isWhiteSpace(octect) || isPad(octect) || isData(octect)); - } - - /** - * remove WhiteSpace from MIME containing encoded Base64 data. e.g. " sdffferererrereresfsdfsdfsdff\n\r iiiiiiiiierejrlkwjerklwjerwerwr==\n\r" - * - * @param data - * @return stripped data - */ - public static synchronized byte[] removeWhiteSpace(byte[] data) { - if (data == null) - return null; - - int newSize = 0; - int len = data.length; - int i = 0; - for (; i < len; i++) { - if (!isWhiteSpace(data[i])) - newSize++; - } - - if (newSize == len) - return data;// return input array since no whiteSpace - - byte[] arrayWithoutSpaces = new byte[newSize];// Allocate new array without whiteSpace - - int j = 0; - for (i = 0; i < len; i++) { - if (isWhiteSpace(data[i])) - continue; - else - arrayWithoutSpaces[j++] = data[i];// copy non-WhiteSpace - } - return arrayWithoutSpaces; - - } - - public static synchronized boolean isArrayByteBase64(byte[] arrayOctect) { - return (getDecodedDataLength(arrayOctect) >= 0); - } - - /** - * Encodes hex octects into Base64 - * - * @param binaryData - * Array containing binaryData - * @return Encoded Base64 array - */ - public static synchronized byte[] encode(byte[] binaryData) { - if (binaryData == null) - return null; - - int lengthDataBits = binaryData.length * EIGHTBIT; - int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; - int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; - byte encodedData[] = null; - - if (fewerThan24bits != 0) // data not divisible by 24 bit - encodedData = new byte[(numberTriplets + 1) * 4]; - else - // 16 or 8 bit - encodedData = new byte[numberTriplets * 4]; - - byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0; - - int encodedIndex = 0; - int dataIndex = 0; - int i = 0; - if (_log.isDebugEnabled()) { - _log.debug("number of triplets = " + numberTriplets); - } - for (i = 0; i < numberTriplets; i++) { - - dataIndex = i * 3; - b1 = binaryData[dataIndex]; - b2 = binaryData[dataIndex + 1]; - b3 = binaryData[dataIndex + 2]; - - if (_log.isDebugEnabled()) { - _log.debug("b1= " + b1 + ", b2= " + b2 + ", b3= " + b3); - } - - l = (byte) (b2 & 0x0f); - k = (byte) (b1 & 0x03); - - encodedIndex = i * 4; - byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); - - byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); - byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); - - encodedData[encodedIndex] = lookUpBase64Alphabet[val1]; - if (_log.isDebugEnabled()) { - _log.debug("val2 = " + val2); - _log.debug("k4 = " + (k << 4)); - _log.debug("vak = " + (val2 | (k << 4))); - } - - encodedData[encodedIndex + 1] = lookUpBase64Alphabet[val2 | (k << 4)]; - encodedData[encodedIndex + 2] = lookUpBase64Alphabet[(l << 2) | val3]; - encodedData[encodedIndex + 3] = lookUpBase64Alphabet[b3 & 0x3f]; - } - - // form integral number of 6-bit groups - dataIndex = i * 3; - encodedIndex = i * 4; - if (fewerThan24bits == EIGHTBIT) { - b1 = binaryData[dataIndex]; - k = (byte) (b1 & 0x03); - if (_log.isDebugEnabled()) { - _log.debug("b1=" + b1); - _log.debug("b1<<2 = " + (b1 >> 2)); - } - byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); - encodedData[encodedIndex] = lookUpBase64Alphabet[val1]; - encodedData[encodedIndex + 1] = lookUpBase64Alphabet[k << 4]; - encodedData[encodedIndex + 2] = PAD; - encodedData[encodedIndex + 3] = PAD; - } else if (fewerThan24bits == SIXTEENBIT) { - - b1 = binaryData[dataIndex]; - b2 = binaryData[dataIndex + 1]; - l = (byte) (b2 & 0x0f); - k = (byte) (b1 & 0x03); - - byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); - byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); - - encodedData[encodedIndex] = lookUpBase64Alphabet[val1]; - encodedData[encodedIndex + 1] = lookUpBase64Alphabet[val2 | (k << 4)]; - encodedData[encodedIndex + 2] = lookUpBase64Alphabet[l << 2]; - encodedData[encodedIndex + 3] = PAD; - } - return encodedData; - } - - /** - * Decodes Base64 data into octects - * - * @param base64Data - * Byte array containing Base64 data - * @return Array containind decoded data. - */ - public static synchronized byte[] decode(byte[] base64Data) { - - if (base64Data == null) - return null; - - byte[] normalizedBase64Data = removeWhiteSpace(base64Data); - - if (normalizedBase64Data.length % FOURBYTE != 0) { - return null;// should be divisible by four - } - - int numberQuadruple = (normalizedBase64Data.length / FOURBYTE); - - if (numberQuadruple == 0) - return new byte[0]; - - byte decodedData[] = null; - byte b1 = 0, b2 = 0, b3 = 0, b4 = 0, marker0 = 0, marker1 = 0; - byte d1 = 0, d2 = 0, d3 = 0, d4 = 0; - - // Throw away anything not in normalizedBase64Data - // Adjust size - int i = 0; - int encodedIndex = 0; - int dataIndex = 0; - decodedData = new byte[(numberQuadruple) * 3]; - - for (; i < numberQuadruple - 1; i++) { - - if (!isData((d1 = normalizedBase64Data[dataIndex++])) || !isData((d2 = normalizedBase64Data[dataIndex++])) - || !isData((d3 = normalizedBase64Data[dataIndex++])) || !isData((d4 = normalizedBase64Data[dataIndex++]))) - return null;// if found "no data" just return null - - b1 = base64Alphabet[d1]; - b2 = base64Alphabet[d2]; - b3 = base64Alphabet[d3]; - b4 = base64Alphabet[d4]; - - decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); - decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); - decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); - } - - if (!isData((d1 = normalizedBase64Data[dataIndex++])) || !isData((d2 = normalizedBase64Data[dataIndex++]))) { - return null;// if found "no data" just return null - } - - b1 = base64Alphabet[d1]; - b2 = base64Alphabet[d2]; - - d3 = normalizedBase64Data[dataIndex++]; - d4 = normalizedBase64Data[dataIndex++]; - if (!isData((d3)) || !isData((d4))) {// Check if they are PAD characters - if (isPad(d3) && isPad(d4)) { // Two PAD e.g. 3c[Pad][Pad] - if ((b2 & 0xf) != 0)// last 4 bits should be zero - return null; - byte[] tmp = new byte[i * 3 + 1]; - System.arraycopy(decodedData, 0, tmp, 0, i * 3); - tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); - return tmp; - } else if (!isPad(d3) && isPad(d4)) { // One PAD e.g. 3cQ[Pad] - b3 = base64Alphabet[d3]; - if ((b3 & 0x3) != 0)// last 2 bits should be zero - return null; - byte[] tmp = new byte[i * 3 + 2]; - System.arraycopy(decodedData, 0, tmp, 0, i * 3); - tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); - tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); - return tmp; - } else { - return null;// an error like "3c[Pad]r", "3cdX", "3cXd", "3cXX" where X is non data - } - } else { // No PAD e.g 3cQl - b3 = base64Alphabet[d3]; - b4 = base64Alphabet[d4]; - decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); - decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); - decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); - - } - - return decodedData; - } - - /** - * returns length of decoded data given an array containing encoded data. WhiteSpace removing is done if data array not valid. - * - * @param base64Data - * @return a -1 would be return if not - */ - static public synchronized int getDecodedDataLength(byte[] base64Data) { - - if (base64Data == null) - return -1; - - if (base64Data.length == 0) - return 0; - - // byte[] normalizedBase64Data = removeWhiteSpace( base64Data );//Remove any whiteSpace - byte[] decodedData = null; - - if ((decodedData = decode(base64Data)) == null)// decode could return a null byte array - return -1; - - return decodedData.length; - } -} diff --git a/Flickr4Java/src/main/resources/log4j.properties b/Flickr4Java/src/main/resources/log4j.properties deleted file mode 100644 index 63e5511e..00000000 --- a/Flickr4Java/src/main/resources/log4j.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Set root category priority to INFO and its only appender to CONSOLE. -log4j.rootCategory=INFO, CONSOLE -#log4j.rootCategory=INFO, CONSOLE, LOGFILE - -# Set the enterprise logger category to FATAL and its only appender to CONSOLE. -log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE - -# CONSOLE is set to be a ConsoleAppender using a PatternLayout. -log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender -log4j.appender.CONSOLE.Threshold=INFO -log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout -log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n - -# LOGFILE is set to be a File appender using a PatternLayout. -log4j.appender.LOGFILE=org.apache.log4j.FileAppender -log4j.appender.LOGFILE.File=axis.log -log4j.appender.LOGFILE.Append=true -log4j.appender.LOGFILE.Threshold=INFO -log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout -log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java deleted file mode 100644 index ff95a820..00000000 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @author acaplan - */ -package com.flickr4java.flickr.test; - -import org.junit.Before; - -import com.flickr4java.flickr.Flickr; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.REST; -import com.flickr4java.flickr.RequestContext; -import com.flickr4java.flickr.auth.Auth; -import com.flickr4java.flickr.auth.Permission; - -/** - * @author acaplan - * - */ -public class Flickr4JavaTest { - - protected Flickr flickr = null; - - protected TestProperties testProperties; - - @Before - public void setUp() throws FlickrException { - // Flickr.debugStream = true; - - testProperties = new TestProperties(); - - REST rest = new REST(); - rest.setHost(testProperties.getHost()); - - flickr = new Flickr(testProperties.getApiKey(), testProperties.getSecret(), rest); - - Auth auth = new Auth(); - auth.setPermission(Permission.READ); - auth.setToken(testProperties.getToken()); - auth.setTokenSecret(testProperties.getTokenSecret()); - - RequestContext requestContext = RequestContext.getRequestContext(); - requestContext.setAuth(auth); - flickr.setAuth(auth); - } -} diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UploaderTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UploaderTest.java deleted file mode 100644 index b970c5b1..00000000 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UploaderTest.java +++ /dev/null @@ -1,181 +0,0 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ - -package com.flickr4java.flickr.test; - -import static org.junit.Assert.assertNotNull; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.junit.Test; - -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.photos.PhotosInterface; -import com.flickr4java.flickr.uploader.UploadMetaData; -import com.flickr4java.flickr.uploader.Uploader; -import com.flickr4java.flickr.util.IOUtilities; - -/** - * @author Anthony Eden - */ -public class UploaderTest extends Flickr4JavaTest { - - /** - * Test photo uploading using a byte array. - * - * @throws IOException - * @throws FlickrException - */ - @Test - public void testUploadByteArray() throws IOException, FlickrException { - File imageFile = new File(testProperties.getImageFile()); - InputStream in = null; - Uploader uploader = flickr.getUploader(); - PhotosInterface pint = flickr.getPhotosInterface(); - - ByteArrayOutputStream out = null; - try { - in = new FileInputStream(imageFile); - out = new ByteArrayOutputStream(); - int b = -1; - while ((b = in.read()) != -1) { - out.write((byte) b); - } - UploadMetaData metaData = buildPrivatePhotoMetadata(); - // check correct handling of escaped value - metaData.setTitle("óöä"); - String photoId = uploader.upload(out.toByteArray(), metaData); - assertNotNull(photoId); - pint.delete(photoId); - } finally { - IOUtilities.close(in); - IOUtilities.close(out); - } - } - - /** - * Test photo upload using an InputStream. - * - * @throws IOException - * @throws FlickrException - */ - @Test - public void testUploadInputStream() throws IOException, FlickrException { - File imageFile = new File(testProperties.getImageFile()); - InputStream in = null; - Uploader uploader = flickr.getUploader(); - PhotosInterface pint = flickr.getPhotosInterface(); - - try { - in = new FileInputStream(imageFile); - UploadMetaData metaData = buildPrivatePhotoMetadata(); - metaData.setPublicFlag(false); - // check correct handling of escaped value - metaData.setTitle("óöä"); - String photoId = uploader.upload(in, metaData); - assertNotNull(photoId); - pint.delete(photoId); - } finally { - IOUtilities.close(in); - } - } - - /** - * Test photo replace using an InputStream. - * - * @throws IOException - * @throws FlickrException - */ - @Test - public void testReplaceInputStream() throws IOException, FlickrException { - Uploader uploader = flickr.getUploader(); - PhotosInterface pint = flickr.getPhotosInterface(); - File imageFile = new File(testProperties.getImageFile()); - InputStream uploadIS = null; - String photoId = null; - try { - uploadIS = new FileInputStream(imageFile); - - // Upload a photo, which we'll replace, then delete - UploadMetaData metaData = buildPrivatePhotoMetadata(); - photoId = uploader.upload(uploadIS, metaData); - } finally { - IOUtilities.close(uploadIS); - } - - InputStream replaceIS = null; - try { - replaceIS = new FileInputStream(imageFile); - - try { - photoId = uploader.replace(replaceIS, photoId, false); - assertNotNull(photoId); - } catch (FlickrException e) { - // Error code 1 means test account is not pro so don't fail test because of that - if (!e.getErrorCode().equals("1")) { - throw e; - } - } - pint.delete(photoId); - } finally { - IOUtilities.close(replaceIS); - } - } - - /** - * Test photo replace using a byte array. - * - * @throws IOException - * @throws FlickrException - */ - @Test - public void testReplaceByteArray() throws IOException, FlickrException { - File imageFile = new File(testProperties.getImageFile()); - InputStream in = null; - ByteArrayOutputStream out = null; - Uploader uploader = flickr.getUploader(); - PhotosInterface pint = flickr.getPhotosInterface(); - - try { - in = new FileInputStream(imageFile); - out = new ByteArrayOutputStream(); - int b = -1; - while ((b = in.read()) != -1) { - out.write((byte) b); - } - - // Upload a photo, which we'll replace, then delete - UploadMetaData metaData = buildPrivatePhotoMetadata(); - String photoId = uploader.upload(out.toByteArray(), metaData); - - try { - photoId = uploader.replace(out.toByteArray(), photoId, false); - assertNotNull(photoId); - } catch (FlickrException e) { - // Error code 1 means test account is not pro so don't fail test because of that - if (!e.getErrorCode().equals("1")) { - throw e; - } - } - - pint.delete(photoId); - } finally { - IOUtilities.close(in); - } - } - - /** - * Build {@link UploadMetaData} with public set to false so uploaded photos are private. - * - * @return - */ - private UploadMetaData buildPrivatePhotoMetadata() { - UploadMetaData uploadMetaData = new UploadMetaData(); - uploadMetaData.setPublicFlag(false); - return uploadMetaData; - } - -} diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..527794c3 --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,22 @@ +### Subject of the issue +Describe your issue here. + +### Your environment +* version of Flickr4Java +* version of JDK + +### Steps to reproduce +Tell us how to reproduce this issue. +Please provide working code. + +### Expected behaviour +Tell us what should happen + +### Actual behaviour +Tell us what happens instead + +### Log +``` +Please copy paste the log here if available + +``` diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..82b96c85 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,25 @@ +BSD 2-Clause License + +Copyright (c) 2004, Anthony Eden (@aeden), Darren Greaves (@boncey), Allan (@callmeal) and contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/README.md b/README.md index 648cfdd3..8b8016d7 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ __Note:__ This API has been forked from [FlickrJ at Sourceforge](http://flickrj. This is a Java API which wraps the [REST-based Flickr API](http://www.flickr.com/services/api/). -Comments and questions should be sent to the [GitHub Repo](https://github.com/callmeal/Flickr4Java). +Comments and questions should be raised on the [GitHub Repo issue tracker](https://github.com/boncey/Flickr4Java/issues). ### Usage @@ -14,33 +14,53 @@ To use the API just construct an instance of the class `com.flickr4java.flickr.t For example, to send a test ping to the Flickr service: String apiKey = "YOUR_API_KEY"; - Flickr f = new Flickr(apiKey); + String sharedSecret = "YOUR_SHARED_SECRET"; + Flickr f = new Flickr(apiKey, sharedSecret, new REST()); TestInterface testInterface = f.getTestInterface(); - Collection results = testInterface.echo(Collections.EMPTY_LIST); - -__Please note:__ this library is not thread safe. - + Collection results = testInterface.echo(Collections.EMPTY_MAP); + +See `/src/examples/java` for more. ### Requirements -This API has been tested with JDK 1.4 and JDK 1.5. The default distribution is built with JDK 1.5 (it builds and runs fine under 1.6 and 1.7 too though). +This API has been tested and built with JDK 1.8. An API key is required to use this API. You can [request one on Flickr](http://www.flickr.com/services/api/). -[scribe-java (v.1.3.2)](https://github.com/fernandezpablo85/scribe-java/wiki/Getting-Started) is also required for the OAuth functionality. +#### Required libraries + +- [scribejava-api (v 6.9.0 onwards)](https://github.com/scribejava/scribejava) (required for the OAuth functionality) +- [SLF4J](https://www.slf4j.org) (runtime dependency for logging) -### Download +[See here](https://www.slf4j.org/manual.html#swapping) for details on how to choose and configure an SLF4J logging library. -[Download the latest version from bintray](https://bintray.com/boncey/Flickr4Java/Flickr4Java). +### Gradle + + compile 'com.flickr4java:flickr4java:3.0.6' ### Maven com.flickr4java flickr4java - 2.10 + 3.0.6 -Flickr4Java is now available on Maven Central so the above settings should be all you need (it used to only be available on [JCenter](https://bintray.com/bintray/jcenter). +Flickr4Java is available on Maven Central so the above settings should be all you need. + +### Testing +The tests now run against captured responses from Flickr (see `src/test/resources/payloads`) and don't contact the Flickr API at all. +This means there is no longer any need to create a test account and populate a properties file. + +#### Functional testing against the Flickr API. +This is the setup to run the tests against the Flickr API. +*Not for the faint-hearted. Only do this to test large refactorings etc.* + +Create up a `setup.properties` file (see `src/test/resources/setup.properties.example`) with details of a real account on Flickr (I recommend setting up a test account for this purpose). +Run tests as follows. + + mvn -DsetupPropertiesPath=/path/to/your/setup.properties clean install + +Expect lots of failures and general flakiness as data has changed on Flickr and the tests or data need updating. diff --git a/Flickr4Java/build.gradle b/build.gradle similarity index 86% rename from Flickr4Java/build.gradle rename to build.gradle index 22900b6a..1303b5f3 100644 --- a/Flickr4Java/build.gradle +++ b/build.gradle @@ -4,11 +4,11 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.10' +version = '3.0.6' group = 'com.flickr4java.flickr' -sourceCompatibility = '1.5' -targetCompatibility = '1.5' +sourceCompatibility = '1.8' +targetCompatibility = '1.8' repositories { mavenCentral() @@ -27,9 +27,8 @@ sourceSets { } dependencies { - compile 'org.scribe:scribe:1.3.3' - compile 'axis:axis:1.4' - compile 'log4j:log4j:1.2.17' + compile 'com.github.scribejava:scribejava-apis:6.9.0' + compile 'org.slf4j:slf4j-api:1.7.25' testCompile group: 'junit', name: 'junit', version: '4.11' } diff --git a/Flickr4Java/config/Flickr4JavaFormatter.xml b/config/Flickr4JavaFormatter.xml similarity index 100% rename from Flickr4Java/config/Flickr4JavaFormatter.xml rename to config/Flickr4JavaFormatter.xml diff --git a/Flickr4Java/doc/flickr-photo-sizes.xml b/doc/flickr-photo-sizes.xml similarity index 100% rename from Flickr4Java/doc/flickr-photo-sizes.xml rename to doc/flickr-photo-sizes.xml diff --git a/Flickr4Java/doc/flickr-video-sizes.xml b/doc/flickr-video-sizes.xml similarity index 100% rename from Flickr4Java/doc/flickr-video-sizes.xml rename to doc/flickr-video-sizes.xml diff --git a/Flickr4Java/doc/photo-sizes b/doc/photo-sizes similarity index 100% rename from Flickr4Java/doc/photo-sizes rename to doc/photo-sizes diff --git a/Flickr4Java/doc/video-sizes b/doc/video-sizes similarity index 100% rename from Flickr4Java/doc/video-sizes rename to doc/video-sizes diff --git a/Flickr4Java/pom.xml b/pom.xml similarity index 59% rename from Flickr4Java/pom.xml rename to pom.xml index 9b40684b..17edf39f 100644 --- a/Flickr4Java/pom.xml +++ b/pom.xml @@ -4,25 +4,11 @@ com.flickr4java flickr4java - 2.11-SNAPSHOT + 3.0.7-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. - https://github.com/callmeal/Flickr4Java - - - org.sonatype.oss - oss-parent - 7 - - - - - Apache License, Version 1.1 - http://www.apache.org/licenses/LICENSE-1.1.txt - repo - - + https://github.com/boncey/Flickr4Java @@ -41,28 +27,37 @@ + + + BSD 2-Clause License + https://github.com/boncey/Flickr4Java/blob/master/LICENSE.txt + repo + + + - 1.6 - 1.2.17 - 4.11 + 1.8 + 4.13.1 + 1.7.30 + 6.9.0 - org.scribe - scribe - 1.3.5 + com.github.scribejava + scribejava-apis + ${scribe.version} - org.apache.axis - axis - 1.4 + org.slf4j + slf4j-api + ${slf4j.version} - log4j - log4j - ${log4jVersion} - + org.slf4j + slf4j-simple + ${slf4j.version} + test junit @@ -78,12 +73,13 @@ org.apache.maven.plugins maven-release-plugin - 2.1 + 2.5.3 - forked-path + true false - ${arguments} -Psonatype-oss-release - Flickr4Java/pom.xml + release + deploy + ${arguments} -Prelease-sign-artifacts @@ -92,16 +88,27 @@ org.apache.maven.plugins maven-compiler-plugin - 2.3.2 + 3.8.1 ${javaVersion} ${javaVersion} + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + + + ${setupPropertiesPath} + + + org.apache.maven.plugins maven-source-plugin - 2.2.1 + 3.2.1 attach-sources @@ -115,7 +122,21 @@ org.apache.maven.plugins maven-javadoc-plugin - 2.9.1 + 3.2.0 + + 8 + + + + attach-javadocs + + jar + + + -Xdoclint:none + + + @@ -133,17 +154,16 @@ - scm:git:https://github.com/callmeal/Flickr4Java.git - scm:git:git@github.com:callmeal/Flickr4Java.git - https://github.com/callmeal/Flickr4Java + scm:git:https://github.com/boncey/Flickr4Java.git + scm:git:git@github.com:boncey/Flickr4Java.git + https://github.com/boncey/Flickr4Java HEAD - - bintray-boncey-Flickr4Java-Flickr4Java - boncey-Flickr4Java-Flickr4Java - https://api.bintray.com/maven/boncey/Flickr4Java/Flickr4Java - + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + @@ -172,6 +192,17 @@ + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + true + + ossrh + https://oss.sonatype.org/ + true + + @@ -188,7 +219,7 @@ org.apache.maven.plugins maven-gpg-plugin - 1.1 + 1.6 sign-artifacts @@ -203,4 +234,13 @@ + + + + org.apache.maven.plugins + maven-surefire-report-plugin + 2.22.2 + + + diff --git a/Flickr4Java/src/examples/java/ActivityExample.java b/src/examples/java/ActivityExample.java similarity index 96% rename from Flickr4Java/src/examples/java/ActivityExample.java rename to src/examples/java/ActivityExample.java index 9350cf8a..1bb9beef 100644 --- a/Flickr4Java/src/examples/java/ActivityExample.java +++ b/src/examples/java/ActivityExample.java @@ -12,8 +12,6 @@ import org.xml.sax.SAXException; -import javax.xml.parsers.ParserConfigurationException; - import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -52,6 +50,7 @@ public ActivityExample() throws IOException { Auth auth = new Auth(); auth.setPermission(Permission.READ); auth.setToken(properties.getProperty("token")); + auth.setTokenSecret(properties.getProperty("tokensecret")); requestContext.setAuth(auth); Flickr.debugRequest = false; Flickr.debugStream = false; diff --git a/Flickr4Java/src/examples/java/AuthExample.java b/src/examples/java/AuthExample.java similarity index 74% rename from Flickr4Java/src/examples/java/AuthExample.java rename to src/examples/java/AuthExample.java index 226a5151..b76802bb 100644 --- a/Flickr4Java/src/examples/java/AuthExample.java +++ b/src/examples/java/AuthExample.java @@ -5,14 +5,14 @@ import com.flickr4java.flickr.auth.AuthInterface; import com.flickr4java.flickr.auth.Permission; import com.flickr4java.flickr.util.IOUtilities; - -import org.scribe.model.Token; -import org.scribe.model.Verifier; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.OAuth1Token; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import java.util.Scanner; +import java.util.concurrent.ExecutionException; /** * Demonstrates the authentication-process. @@ -26,7 +26,7 @@ */ public class AuthExample { - public static void auth() throws IOException, FlickrException { + public static void auth() throws IOException, FlickrException, ExecutionException, InterruptedException { Properties properties; InputStream in = null; try { @@ -43,10 +43,10 @@ public static void auth() throws IOException, FlickrException { Scanner scanner = new Scanner(System.in); - Token token = authInterface.getRequestToken(); - System.out.println("token: " + token); + OAuth1RequestToken requestToken = authInterface.getRequestToken(); + System.out.println("token: " + requestToken); - String url = authInterface.getAuthorizationUrl(token, Permission.DELETE); + String url = authInterface.getAuthorizationUrl(requestToken, Permission.DELETE); System.out.println("Follow this URL to authorise yourself on Flickr"); System.out.println(url); System.out.println("Paste in the token it gives you:"); @@ -55,14 +55,14 @@ public static void auth() throws IOException, FlickrException { String tokenKey = scanner.nextLine(); scanner.close(); - Token requestToken = authInterface.getAccessToken(token, new Verifier(tokenKey)); + OAuth1Token accessToken = authInterface.getAccessToken(requestToken, tokenKey); System.out.println("Authentication success"); - Auth auth = authInterface.checkToken(requestToken); + Auth auth = authInterface.checkToken(accessToken); // This token can be used until the user revokes it. - System.out.println("Token: " + requestToken.getToken()); - System.out.println("Secret: " + requestToken.getSecret()); + System.out.println("Token: " + accessToken.getToken()); + System.out.println("Secret: " + accessToken.getTokenSecret()); System.out.println("nsid: " + auth.getUser().getId()); System.out.println("Realname: " + auth.getUser().getRealName()); System.out.println("Username: " + auth.getUser().getUsername()); diff --git a/Flickr4Java/src/examples/java/Backup.java b/src/examples/java/Backup.java similarity index 89% rename from Flickr4Java/src/examples/java/Backup.java rename to src/examples/java/Backup.java index cf888ebe..e86f418f 100644 --- a/Flickr4Java/src/examples/java/Backup.java +++ b/src/examples/java/Backup.java @@ -13,10 +13,8 @@ import com.flickr4java.flickr.photosets.PhotosetsInterface; import com.flickr4java.flickr.util.AuthStore; import com.flickr4java.flickr.util.FileAuthStore; - -import org.scribe.model.Token; -import org.scribe.model.Verifier; -import org.xml.sax.SAXException; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.OAuth1Token; import java.io.BufferedInputStream; import java.io.File; @@ -57,11 +55,11 @@ public Backup(String apiKey, String nsid, String sharedSecret, File authsDir) th } } - private void authorize() throws IOException, SAXException, FlickrException { + private void authorize() throws IOException, FlickrException { AuthInterface authInterface = flickr.getAuthInterface(); - Token accessToken = authInterface.getRequestToken(); + OAuth1RequestToken requestToken = authInterface.getRequestToken(); - String url = authInterface.getAuthorizationUrl(accessToken, Permission.READ); + String url = authInterface.getAuthorizationUrl(requestToken, Permission.READ); System.out.println("Follow this URL to authorise yourself on Flickr"); System.out.println(url); System.out.println("Paste in the token it gives you:"); @@ -69,9 +67,9 @@ private void authorize() throws IOException, SAXException, FlickrException { String tokenKey = new Scanner(System.in).nextLine(); - Token requestToken = authInterface.getAccessToken(accessToken, new Verifier(tokenKey)); + OAuth1Token accessToken = authInterface.getAccessToken(requestToken, tokenKey); - Auth auth = authInterface.checkToken(requestToken); + Auth auth = authInterface.checkToken(accessToken); RequestContext.getRequestContext().setAuth(auth); this.authStore.store(auth); System.out.println("Thanks. You probably will not have to do this every time. Now starting backup."); diff --git a/src/examples/java/FlickrCrawler.java b/src/examples/java/FlickrCrawler.java new file mode 100644 index 00000000..e9739d53 --- /dev/null +++ b/src/examples/java/FlickrCrawler.java @@ -0,0 +1,110 @@ +import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.REST; +import com.flickr4java.flickr.photos.Photo; +import com.flickr4java.flickr.photos.PhotoList; +import com.flickr4java.flickr.photos.SearchParameters; + +import javax.imageio.ImageIO; +import java.io.File; +import java.io.IOException; +import java.util.Iterator; +import java.util.prefs.Preferences; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/* + * - Java 7 is needed + * - insert your api- and secretkey + * + * start main with wanted tags as parameter, for example: FlickrCrawler.main(Sunset) and all pics will be saved in original size or large to pics\sunset\... + */ +public class FlickrCrawler { + + private static String path = ""; + private static Preferences userPrefs = Preferences.userNodeForPackage(FlickrCrawler.class); + + // convert filename to clean filename + public static String convertToFileSystemChar(String name) { + String erg = ""; + Matcher m = Pattern.compile("[a-z0-9 _#&@\\[\\(\\)\\]\\-\\.]", Pattern.CASE_INSENSITIVE).matcher(name); + while (m.find()) { + erg += name.substring(m.start(), m.end()); + } + if (erg.length() > 200) { + erg = erg.substring(0, 200); + System.out.println("cut filename: " + erg); + } + return erg; + } + + public static boolean saveImage(Flickr f, Photo p) { + + String cleanTitle = convertToFileSystemChar(p.getTitle()); + + File orgFile = new File(path + File.separator + cleanTitle + "_" + p.getId() + "_o." + p.getOriginalFormat()); + File largeFile = new File(path + File.separator + cleanTitle + "_" + p.getId() + "_b." + p.getOriginalFormat()); + + if (orgFile.exists() || largeFile.exists()) { + System.out.println(p.getTitle() + "\t" + p.getLargeUrl() + " skipped!"); + return false; + } + + try { + Photo nfo = f.getPhotosInterface().getInfo(p.getId(), null); + if (nfo.getOriginalSecret().isEmpty()) { + ImageIO.write(p.getLargeImage(), p.getOriginalFormat(), largeFile); + System.out.println(p.getTitle() + "\t" + p.getLargeUrl() + " was written to " + largeFile.getName()); + } else { + p.setOriginalSecret(nfo.getOriginalSecret()); + ImageIO.write(p.getOriginalImage(), p.getOriginalFormat(), orgFile); + System.out.println(p.getTitle() + "\t" + p.getOriginalUrl() + " was written to " + orgFile.getName()); + } + } catch (FlickrException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return true; + } + + public static void main(String[] args) { + if (args.length == 0) { + System.out.println("Parameter are needed as for searching. Example: FlickrCrawler.java sunset"); + return; + } + + String apikey = "apikey"; + String secret = "secret"; + + Flickr flickr = new Flickr(apikey, secret, new REST()); + SearchParameters searchParameters = new SearchParameters(); + searchParameters.setAccuracy(1); + + StringBuilder tagsBuilder = new StringBuilder(); + for (String tmp : args) { + tagsBuilder.append(" " + tmp); + } + path = "pics" + File.separator + tagsBuilder.toString().substring(1); + + new File(path).mkdirs(); + searchParameters.setTags(args); + + for (int i = userPrefs.getInt(path, 0); true; i++) { + userPrefs.putInt( path, i ); + System.out.println("\tcurrent page: " + userPrefs.getInt(path, 0)); + try { + PhotoList list = flickr.getPhotosInterface().search(searchParameters, 500, i); + if (list.isEmpty()) + break; + + Iterator itr = list.iterator(); + while (itr.hasNext()) { + saveImage(flickr, (Photo) itr.next()); + } + } catch (FlickrException e) { + e.printStackTrace(); + } + } + } +} diff --git a/src/examples/java/SearchExample.java b/src/examples/java/SearchExample.java new file mode 100644 index 00000000..a1808010 --- /dev/null +++ b/src/examples/java/SearchExample.java @@ -0,0 +1,94 @@ +import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.REST; +import com.flickr4java.flickr.RequestContext; +import com.flickr4java.flickr.auth.Auth; +import com.flickr4java.flickr.auth.Permission; +import com.flickr4java.flickr.photos.Photo; +import com.flickr4java.flickr.photos.PhotoList; +import com.flickr4java.flickr.photos.PhotosInterface; +import com.flickr4java.flickr.photos.SearchParameters; +import com.flickr4java.flickr.util.IOUtilities; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * Demonstration of how to search. + */ +public class SearchExample +{ + static String apiKey; + + static String sharedSecret; + + Flickr f; + + REST rest; + + RequestContext requestContext; + + Properties properties; + + public SearchExample() throws IOException + { + String setupPropertiesPath = System.getenv("SETUP_PROPERTIES_PATH"); + + InputStream in = null; + try + { + if (setupPropertiesPath != null) + { + in = new FileInputStream(new File(setupPropertiesPath)); + } else + { + in = getClass().getResourceAsStream("/setup.properties"); + } + properties = new Properties(); + properties.load(in); + } finally + { + IOUtilities.close(in); + } + + f = new Flickr(properties.getProperty("apiKey"), properties.getProperty("secret"), new REST()); + requestContext = RequestContext.getRequestContext(); + Auth auth = new Auth(); + auth.setPermission(Permission.READ); + auth.setToken(properties.getProperty("token")); + auth.setTokenSecret(properties.getProperty("tokensecret")); + requestContext.setAuth(auth); + Flickr.debugRequest = false; + Flickr.debugStream = false; + } + + private void search(String text) throws FlickrException + { + PhotosInterface photos = f.getPhotosInterface(); + SearchParameters params = new SearchParameters(); + params.setMedia("videos"); // One of "photos", "videos" or "all" + params.setExtras(Stream.of("media").collect(Collectors.toSet())); + params.setText(text); + PhotoList results = photos.search(params, 5, 0); + + results.forEach(p -> + { + System.out.println(String.format("Title: %s", p.getTitle())); + System.out.println(String.format("Media: %s", p.getMedia())); + System.out.println(String.format("Original Video URL: %s", p.getVideoOriginalUrl())); + }); + + } + + public static void main(String[] args) throws Exception + { + SearchExample t = new SearchExample(); + t.search(args.length == 0 ? "London" : args[0]); + } + +} diff --git a/src/examples/java/UploadPhoto.java b/src/examples/java/UploadPhoto.java new file mode 100644 index 00000000..bfaa1f9e --- /dev/null +++ b/src/examples/java/UploadPhoto.java @@ -0,0 +1,835 @@ +import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.REST; +import com.flickr4java.flickr.RequestContext; +import com.flickr4java.flickr.auth.Auth; +import com.flickr4java.flickr.auth.AuthInterface; +import com.flickr4java.flickr.auth.Permission; +import com.flickr4java.flickr.people.PeopleInterface; +import com.flickr4java.flickr.people.User; +import com.flickr4java.flickr.photos.Photo; +import com.flickr4java.flickr.photos.PhotoList; +import com.flickr4java.flickr.photos.PhotosInterface; +import com.flickr4java.flickr.photosets.Photoset; +import com.flickr4java.flickr.photosets.Photosets; +import com.flickr4java.flickr.photosets.PhotosetsInterface; +import com.flickr4java.flickr.prefs.PrefsInterface; +import com.flickr4java.flickr.uploader.UploadMetaData; +import com.flickr4java.flickr.uploader.Uploader; +import com.flickr4java.flickr.util.AuthStore; +import com.flickr4java.flickr.util.FileAuthStore; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.OAuth1Token; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Properties; +import java.util.Scanner; +import java.util.Set; + +/** + * A simple program to upload photos to a set. It checks for files already uploaded assuming the title is not changed so that it can be rerun if partial upload + * is done. It uses the tag field to store the filename as OrigFileName to be used while downloading if the title has been changed. If setup.properties is not + * available, pass the apiKey and secret as arguments to the program. + * + * This sample also uses the AuthStore interface, so users will only be asked to authorize on the first run. + * + * Please NOTE that this needs Java 7 to work. Java 7 was released on July 28, 2011 and soon Java 6 may not be supported anymore ( Jul 2014). + * + * @author Keyur Parikh + */ + +public class UploadPhoto { + + private static final Logger logger = LoggerFactory.getLogger(UploadPhoto.class); + + private String nsid; + + private String username; + + // private final String sharedSecret; + + private final Flickr flickr; + + private AuthStore authStore; + + public boolean flickrDebug = false; + + private boolean setOrigFilenameTag = true; + + private boolean replaceSpaces = false; + + private int privacy = -1; + + HashMap allSetsMap = new HashMap(); + + HashMap> setNameToId = new HashMap>(); + + public static final SimpleDateFormat smp = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss a"); + + public UploadPhoto(String apiKey, String nsid, String sharedSecret, File authsDir, String username) throws FlickrException { + flickr = new Flickr(apiKey, sharedSecret, new REST()); + + this.username = username; + this.nsid = nsid; + // this.sharedSecret = sharedSecret; + + if (authsDir != null) { + this.authStore = new FileAuthStore(authsDir); + } + + // If one of them is not filled in, find and populate it. + if (username == null || username.equals("")) + setUserName(); + if (nsid == null || nsid.equals("")) + setNsid(); + + } + + private void setUserName() throws FlickrException { + if (nsid != null && !nsid.equals("")) { + Auth auth = null; + if (authStore != null) { + auth = authStore.retrieve(nsid); + if (auth != null) { + username = auth.getUser().getUsername(); + } + } + // For this to work: REST.java or PeopleInterface needs to change to pass apiKey + // as the parameter to the call which is not authenticated. + + if (auth == null) { + // Get nsid using flickr.people.findByUsername + PeopleInterface peopleInterf = flickr.getPeopleInterface(); + User u = peopleInterf.getInfo(nsid); + if (u != null) { + username = u.getUsername(); + } + } + } + } + + /** + * Check local saved copy first ??. If Auth by username is available, then we will not need to make the API call. + * + * @throws FlickrException if there was a problem connecting to Flickr + */ + + private void setNsid() throws FlickrException { + + if (username != null && !username.equals("")) { + Auth auth = null; + if (authStore != null) { + auth = authStore.retrieve(username); // assuming FileAuthStore is enhanced else need to + // keep in user-level files. + + if (auth != null) { + nsid = auth.getUser().getId(); + } + } + if (auth != null) + return; + + Auth[] allAuths = authStore.retrieveAll(); + for (int i = 0; i < allAuths.length; i++) { + if (username.equals(allAuths[i].getUser().getUsername())) { + nsid = allAuths[i].getUser().getId(); + return; + } + } + + // For this to work: REST.java or PeopleInterface needs to change to pass apiKey + // as the parameter to the call which is not authenticated. + + // Get nsid using flickr.people.findByUsername + PeopleInterface peopleInterf = flickr.getPeopleInterface(); + User u = peopleInterf.findByUsername(username); + if (u != null) { + nsid = u.getId(); + } + } + } + + private void authorize() throws IOException, FlickrException { + AuthInterface authInterface = flickr.getAuthInterface(); + OAuth1RequestToken accessToken = authInterface.getRequestToken(); + + // Try with DELETE permission. At least need write permission for upload and add-to-set. + String url = authInterface.getAuthorizationUrl(accessToken, Permission.DELETE); + System.out.println("Follow this URL to authorise yourself on Flickr"); + System.out.println(url); + System.out.println("Paste in the token it gives you:"); + System.out.print(">>"); + + Scanner scanner = new Scanner(System.in); + String tokenKey = scanner.nextLine(); + + OAuth1Token requestToken = authInterface.getAccessToken(accessToken, tokenKey); + + Auth auth = authInterface.checkToken(requestToken); + RequestContext.getRequestContext().setAuth(auth); + this.authStore.store(auth); + scanner.close(); + System.out.println("Thanks. You probably will not have to do this every time. Auth saved for user: " + auth.getUser().getUsername() + " nsid is: " + + auth.getUser().getId()); + System.out.println(" AuthToken: " + auth.getToken() + " tokenSecret: " + auth.getTokenSecret()); + } + + /** + * If the Authtoken was already created in a separate program but not saved to file. + * + * @param authToken + * @param tokenSecret + * @param username + * @return + * @throws IOException + */ + private Auth constructAuth(String authToken, String tokenSecret, String username) throws IOException { + + Auth auth = new Auth(); + auth.setToken(authToken); + auth.setTokenSecret(tokenSecret); + + // Prompt to ask what permission is needed: read, update or delete. + auth.setPermission(Permission.fromString("delete")); + + User user = new User(); + // Later change the following 3. Either ask user to pass on command line or read + // from saved file. + user.setId(nsid); + user.setUsername((username)); + user.setRealName(""); + auth.setUser(user); + this.authStore.store(auth); + return auth; + } + + public void setAuth(String authToken, String username, String tokenSecret) throws IOException, FlickrException { + RequestContext rc = RequestContext.getRequestContext(); + Auth auth = null; + + if (authToken != null && !authToken.equals("") && tokenSecret != null && !tokenSecret.equals("")) { + auth = constructAuth(authToken, tokenSecret, username); + rc.setAuth(auth); + } else { + if (this.authStore != null) { + auth = this.authStore.retrieve(this.nsid); + if (auth == null) { + this.authorize(); + } else { + rc.setAuth(auth); + } + } + } + } + + public int getPrivacy() throws Exception { + + PrefsInterface prefi = flickr.getPrefsInterface(); + privacy = prefi.getPrivacy(); + + return (privacy); + } + + private String makeSafeFilename(String input) { + byte[] fname = input.getBytes(); + byte[] bad = new byte[] { '\\', '/', '"', '*' }; + byte replace = '_'; + for (int i = 0; i < fname.length; i++) { + for (byte element : bad) { + if (fname[i] == element) { + fname[i] = replace; + } + } + if (replaceSpaces && fname[i] == ' ') + fname[i] = '_'; + } + return new String(fname); + } + + public String uploadfile(String filename, String inpTitle) throws Exception { + String photoId; + + RequestContext rc = RequestContext.getRequestContext(); + + if (this.authStore != null) { + Auth auth = this.authStore.retrieve(this.nsid); + if (auth == null) { + this.authorize(); + } else { + rc.setAuth(auth); + } + } + + // PhotosetsInterface pi = flickr.getPhotosetsInterface(); + // PhotosInterface photoInt = flickr.getPhotosInterface(); + // Map allPhotos = new HashMap(); + /** + * 1 : Public 2 : Friends only 3 : Family only 4 : Friends and Family 5 : Private + **/ + if (privacy == -1) + getPrivacy(); + + UploadMetaData metaData = new UploadMetaData(); + + if (privacy == 1) + metaData.setPublicFlag(true); + if (privacy == 2 || privacy == 4) + metaData.setFriendFlag(true); + if (privacy == 3 || privacy == 4) + metaData.setFamilyFlag(true); + + if (basefilename == null || basefilename.equals("")) + basefilename = filename; // "image.jpg"; + + String title = basefilename; + boolean setMimeType = true; // change during testing. Doesn't seem to be supported at this time in flickr. + if (setMimeType) { + if (basefilename.lastIndexOf('.') > 0) { + title = basefilename.substring(0, basefilename.lastIndexOf('.')); + String suffix = basefilename.substring(basefilename.lastIndexOf('.') + 1); + // Set Mime Type if known. + + // Later use a mime-type properties file or a hash table of all known photo and video types + // allowed by flickr. + + if (suffix.equalsIgnoreCase("png")) { + metaData.setFilemimetype("image/png"); + } else if (suffix.equalsIgnoreCase("mpg") || suffix.equalsIgnoreCase("mpeg")) { + metaData.setFilemimetype("video/mpeg"); + } else if (suffix.equalsIgnoreCase("mov")) { + metaData.setFilemimetype("video/quicktime"); + } + } + } + logger.debug(" File : " + filename); + logger.debug(" basefilename : " + basefilename); + + if (inpTitle != null && !inpTitle.equals("")) { + title = inpTitle; + logger.debug(" title : " + inpTitle); + metaData.setTitle(title); + } // flickr defaults the title field from file name. + + // UploadMeta is using String not Tag class. + + // Tags are getting mangled by yahoo stripping off the = , '.' and many other punctuation characters + // and converting to lower case: use the raw tag field to find the real value for checking and + // for download. + if (setOrigFilenameTag) { + List tags = new ArrayList(); + String tmp = basefilename; + basefilename = makeSafeFilename(basefilename); + tags.add("OrigFileName='" + basefilename + "'"); + metaData.setTags(tags); + + if (!tmp.equals(basefilename)) { + System.out.println(" File : " + basefilename + " contains special characters. stored as " + basefilename + " in tag field"); + } + } + + // File imageFile = new File(filename); + // InputStream in = null; + Uploader uploader = flickr.getUploader(); + + // ByteArrayOutputStream out = null; + try { + // in = new FileInputStream(imageFile); + // out = new ByteArrayOutputStream(); + + // int b = -1; + /** + * while ((b = in.read()) != -1) { out.write((byte) b); } + **/ + + /** + * byte[] buf = new byte[1024]; while ((b = in.read(buf)) != -1) { // fos.write(read); out.write(buf, 0, b); } + **/ + + metaData.setFilename(basefilename); + // check correct handling of escaped value + + File f = new File(filename); + photoId = uploader.upload(f, metaData); + + logger.debug(" File : " + filename + " uploaded: photoId = " + photoId); + } finally { + + } + + return (photoId); + } + + public void getPhotosetsInfo() { + + PhotosetsInterface pi = flickr.getPhotosetsInterface(); + try { + int setsPage = 1; + while (true) { + Photosets photosets = pi.getList(nsid, 500, setsPage, null); + Collection setsColl = photosets.getPhotosets(); + Iterator setsIter = setsColl.iterator(); + while (setsIter.hasNext()) { + Photoset set = setsIter.next(); + allSetsMap.put(set.getId(), set); + + // 2 or more sets can in theory have the same name. !!! + ArrayList setIdarr = setNameToId.get(set.getTitle()); + if (setIdarr == null) { + setIdarr = new ArrayList(); + setIdarr.add(new String(set.getId())); + setNameToId.put(set.getTitle(), setIdarr); + } else { + setIdarr.add(new String(set.getId())); + } + } + + if (setsColl.size() < 500) { + break; + } + setsPage++; + } + logger.debug(" Sets retrieved: " + allSetsMap.size()); + // all_sets_retrieved = true; + // Print dups if any. + + Set keys = setNameToId.keySet(); + Iterator iter = keys.iterator(); + while (iter.hasNext()) { + String name = iter.next(); + ArrayList setIdarr = setNameToId.get(name); + if (setIdarr != null && setIdarr.size() > 1) { + System.out.println("There is more than 1 set with this name : " + setNameToId.get(name)); + for (int j = 0; j < setIdarr.size(); j++) { + System.out.println(" id: " + setIdarr.get(j)); + } + } + } + + } catch (FlickrException e) { + e.printStackTrace(); + } + } + + private String setid = null; + + private String basefilename = null; + + private final PhotoList photos = new PhotoList(); + + private final HashMap filePhotos = new HashMap(); + + private static void Usage() { + System.out.println("Usage: java " + UploadPhoto.class.getName() + " [ -n nsid | -u username ] -s setName { File../Directories}"); + System.out.println(" Must pass either -u username or -n nsid "); + System.out.println(" Must pass -s followed by set-name(albums) followed by file/directories."); + System.out + .println("apiKey and shared secret must be available as apiKey and secret via setup.properties or passed as -apiKey key -secret shared-secret"); + System.exit(1); + } + + /** + * @return the setOrigFilenameTag + */ + public boolean isSetorigfilenametag() { + return setOrigFilenameTag; + } + + /** + * @param setOrigFilenameTag + * the setOrigFilenameTag to set + */ + public void setSetorigfilenametag(boolean setOrigFilenameTag) { + this.setOrigFilenameTag = setOrigFilenameTag; + } + + public static void main(String[] args) throws Exception { + + String apiKey = null; // args[0]; + String sharedSecret = null; // args[1]; + + Properties properties = new Properties(); + InputStream in = null; + try { + in = UploadPhoto.class.getResourceAsStream("/setup.properties"); + if (in != null) { + properties.load(in); + apiKey = properties.getProperty("apiKey"); + sharedSecret = properties.getProperty("secret"); + if (apiKey != null && sharedSecret != null) + logger.debug("Found setup.properties in classpath and set apiKey and shared secret"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (in != null) + in.close(); + } + + if (args.length < 5) { + Usage(); + System.exit(1); + } + + ArrayList uploadfileArgs = new ArrayList(); + ArrayList optionArgs = new ArrayList(); + + // Flickr.debugRequest = true; // keep it false else entire file will be in stdout. + + // Flickr.debugStream = true; + + String authsDirStr = System.getProperty("user.home") + File.separatorChar + ".flickrAuth"; + + String nsid = null; + String username = null; + String accessToken = null; // Optional entry. + String tokenSecret = null; // Optional entry. + String setName = null; + + boolean settagname = true; // Default to true to add tag while uploading. + + int i = 0; + /*** + * for(i = 0; i < args.length; i++) { System.out.println("args[" + i + "] " + args[i]); } + **/ + + for (i = 0; i < args.length; i++) { + switch (args[i]) { + case "-n": + if (i < args.length) + nsid = args[++i]; + break; + case "-u": + if (i < args.length) + username = args[++i]; + break; + case "-apiKey": + if (i < args.length) + apiKey = args[++i]; + break; + + case "-secret": + if (i < args.length) + sharedSecret = args[++i]; + break; + case "-notags": + if (i < args.length) + settagname = false; + break; + + case "-a": + if (i < args.length) + accessToken = args[++i]; + break; + case "-t": + if (i < args.length) + tokenSecret = args[++i]; + break; + case "-s": + if (i < args.length) + setName = args[++i]; + break; + case "-option": + if (i < args.length) + optionArgs.add(args[++i]); + break; + default: + if (setName != null) + uploadfileArgs.add(args[i]); + else { + Usage(); + System.exit(1); + } + } + } + + if (apiKey == null || sharedSecret == null || (username == null && nsid == null) || (setName == null) || (uploadfileArgs.size() == 0)) { + Usage(); + System.exit(1); + } + + UploadPhoto bf = new UploadPhoto(apiKey, nsid, sharedSecret, new File(authsDirStr), username); + for (i = 0; i < optionArgs.size(); i++) { + bf.addOption(optionArgs.get(i)); + } + bf.setSetorigfilenametag(settagname); + bf.setAuth(accessToken, username, tokenSecret); + + if (!bf.canUpload()) + System.exit(1); + + bf.getPrivacy(); + + bf.getPhotosetsInfo(); + + if (setName != null && !setName.equals("")) { + + bf.getSetPhotos(setName); + } + + // String photoid; + + for (i = 0; i < uploadfileArgs.size(); i++) { + String filename = uploadfileArgs.get(i); + + File f = new File(filename); + if (f.isDirectory()) { + String[] filelist = f.list(new UploadFilenameFilter()); + logger.debug("Processing directory : " + uploadfileArgs.get(i)); + for (int j = 0; j < filelist.length; j++) { + bf.processFileArg(uploadfileArgs.get(i) + File.separatorChar + filelist[j], setName); + } + } else { + bf.processFileArg(filename, setName); + } + } + } + + private static final String[] photoSuffixes = { "jpg", "jpeg", "png", "gif", "bmp", "tif", "tiff" }; + + private static final String[] videoSuffixes = { "3gp", "3gp", "avi", "mov", "mp4", "mpg", "mpeg", "wmv", "ogg", "ogv", "m2v" }; + + static class UploadFilenameFilter implements FilenameFilter { + + // Following suffixes from flickr upload page. An App should have this configurable, + // for videos and photos separately. + + @Override + public boolean accept(File dir, String name) { + if (isValidSuffix(name)) + return true; + else + return false; + } + + } + + private static boolean isValidSuffix(String basefilename) { + if (basefilename.lastIndexOf('.') <= 0) { + return false; + } + String suffix = basefilename.substring(basefilename.lastIndexOf('.') + 1).toLowerCase(); + for (int i = 0; i < photoSuffixes.length; i++) { + if (photoSuffixes[i].equals(suffix)) + return true; + } + for (int i = 0; i < videoSuffixes.length; i++) { + if (videoSuffixes[i].equals(suffix)) + return true; + } + logger.debug(basefilename + " does not have a valid suffix, skipped."); + return false; + } + + private void processFileArg(String filename, String setName) throws Exception { + String photoid; + if (filename.equals("")) { + System.out.println("filename must be entered for uploadfile "); + return; + } + if (filename.lastIndexOf(File.separatorChar) > 0) + basefilename = filename.substring(filename.lastIndexOf(File.separatorChar) + 1, filename.length()); + else + basefilename = filename; + + boolean fileUploaded = checkIfLoaded(filename); + + if (!fileUploaded) { + if (!isValidSuffix(basefilename)) { + System.out.println(" File: " + basefilename + " is not a supported filetype for flickr (invalid suffix)"); + return; + } + + File f = new File(filename); + if (!f.exists() || !f.canRead()) { + System.out.println(" File: " + filename + " cannot be processed, does not exist or is unreadable."); + return; + } + logger.debug("Calling uploadfile for filename : " + filename); + logger.info("Upload of " + filename + " started at: " + smp.format(new Date()) + "\n"); + + photoid = uploadfile(filename, null); + // Add to Set. Create set if it does not exist. + if (photoid != null) { + addPhotoToSet(photoid, setName); + } + logger.info("Upload of " + filename + " finished at: " + smp.format(new Date()) + "\n"); + + } else { + logger.info(" File: " + filename + " has already been loaded on " + getUploadedTime(filename)); + } + } + + private void addOption(String opt) { + + switch (opt) { + case "replaceSpaces": + replaceSpaces = true; + break; + + case "notags": + setSetorigfilenametag(false); + break; + + default: // Not supported at this time. + System.out.println("Option: " + opt + " is not supported at this time"); + } + } + + private boolean canUpload() { + RequestContext rc = RequestContext.getRequestContext(); + Auth auth = null; + auth = rc.getAuth(); + if (auth == null) { + System.out.println(" Cannot upload, there is no authorization information."); + return false; + } + Permission perm = auth.getPermission(); + if ((perm.getType() == Permission.WRITE_TYPE) || (perm.getType() == Permission.DELETE_TYPE)) + return true; + else { + System.out.println(" Cannot upload, You need write or delete permission, you have : " + perm.toString()); + return false; + } + } + + /** + * The assumption here is that for a given set only unique file-names will be loaded and the title field can be used. Later change to use the tags field ( + * OrigFileName) and strip off the suffix. + * + * @param filename + * @return + */ + private boolean checkIfLoaded(String filename) { + + String title; + if (basefilename.lastIndexOf('.') > 0) + title = basefilename.substring(0, basefilename.lastIndexOf('.')); + else + return false; + + if (filePhotos.containsKey(title)) + return true; + + return false; + } + + private String getUploadedTime(String filename) { + + String title = ""; + if (basefilename.lastIndexOf('.') > 0) + title = basefilename.substring(0, basefilename.lastIndexOf('.')); + + if (filePhotos.containsKey(title)) { + Photo p = filePhotos.get(title); + if (p.getDatePosted() != null) { + return (smp.format(p.getDatePosted())); + } + } + + return ""; + } + + private void getSetPhotos(String setName) throws FlickrException { + // Check if this is an existing set. If it is get all the photo list to avoid reloading already + // loaded photos. + ArrayList setIdarr; + setIdarr = setNameToId.get(setName); + if (setIdarr != null) { + setid = setIdarr.get(0); + PhotosetsInterface pi = flickr.getPhotosetsInterface(); + + Set extras = new HashSet(); + /** + * A comma-delimited list of extra information to fetch for each returned record. Currently supported fields are: license, date_upload, date_taken, + * owner_name, icon_server, original_format, last_update, geo, tags, machine_tags, o_dims, views, media, path_alias, url_sq, url_t, url_s, url_m, + * url_o + */ + + extras.add("date_upload"); + extras.add("original_format"); + extras.add("media"); + // extras.add("url_o"); + extras.add("tags"); + + int setPage = 1; + while (true) { + PhotoList tmpSet = pi.getPhotos(setid, extras, Flickr.PRIVACY_LEVEL_NO_FILTER, 500, setPage); + + int tmpSetSize = tmpSet.size(); + photos.addAll(tmpSet); + if (tmpSetSize < 500) { + break; + } + setPage++; + } + for (int i = 0; i < photos.size(); i++) { + filePhotos.put(photos.get(i).getTitle(), photos.get(i)); + } + if (flickrDebug) { + logger.debug("Set title: " + setName + " id: " + setid + " found"); + logger.debug(" Photos in Set already loaded: " + photos.size()); + } + } + } + + public void addPhotoToSet(String photoid, String setName) throws Exception { + + ArrayList setIdarr; + + // all_set_maps. + + PhotosetsInterface psetsInterface = flickr.getPhotosetsInterface(); + + Photoset set = null; + + if (setid == null) { + // In case it is a new photo-set. + setIdarr = setNameToId.get(setName); + if (setIdarr == null) { + // setIdarr should be null since we checked it getSetPhotos. + // Create the new set. + // set the setid . + + String description = ""; + set = psetsInterface.create(setName, description, photoid); + setid = set.getId(); + + setIdarr = new ArrayList(); + setIdarr.add(new String(setid)); + setNameToId.put(setName, setIdarr); + + allSetsMap.put(set.getId(), set); + } + } else { + set = allSetsMap.get(setid); + psetsInterface.addPhoto(setid, photoid); + } + // Add to photos . + + // Add Photo to existing set. + PhotosInterface photoInt = flickr.getPhotosInterface(); + Photo p = photoInt.getPhoto(photoid); + if (p != null) { + photos.add(p); + String title; + if (basefilename.lastIndexOf('.') > 0) + title = basefilename.substring(0, basefilename.lastIndexOf('.')); + else + title = p.getTitle(); + filePhotos.put(title, p); + } + } +} diff --git a/Flickr4Java/src/examples/resources/setup.properties.example b/src/examples/resources/setup.properties.example similarity index 100% rename from Flickr4Java/src/examples/resources/setup.properties.example rename to src/examples/resources/setup.properties.example diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java b/src/main/java/com/flickr4java/flickr/AbstractTransport.java similarity index 75% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java rename to src/main/java/com/flickr4java/flickr/AbstractTransport.java index 5e818cc9..16e34a89 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java +++ b/src/main/java/com/flickr4java/flickr/AbstractTransport.java @@ -1,147 +1,146 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -package com.flickr4java.flickr; - -import java.util.Map; - -/** - * The abstract Transport class provides a common interface for transporting requests to the Flickr servers. Flickr offers several transport methods including - * REST, SOAP and XML-RPC. Flickr4Java currently implements the REST transport and work is being done to include the SOAP transport. - * - * @author Matt Ray - * @author Anthony Eden - */ -public abstract class Transport { - - public static final String REST = "REST"; - - public static final String SOAP = "SOAP"; - - protected static final String API_HOST = "api.flickr.com"; - - /** - * Host is different for upload, need to set it from Uploader.java. - */ - public static final String UPLOAD_API_HOST = "up.flickr.com"; - - protected static final String DEFAULT_SCHEME = "https"; - - private String transportType; - - protected Class responseClass; - - private String path; - - private String host; - - private int port = 443; - - private String scheme; - - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } - - public String getTransportType() { - return transportType; - } - - public void setTransportType(String transport) { - this.transportType = transport; - } - - public String getPath() { - return path; - } - - public void setPath(String path) { - this.path = path; - } - - public String getScheme() { - return scheme; - } - - public void setScheme(String scheme) { - this.scheme = scheme; - } - - /** - * Invoke an HTTP GET request on a remote host. You must close the InputStream after you are done with. - * - * @param path - * The request path - * @param parameters - * The parameters (collection of Parameter objects) - * @param apiKey - * @param sharedSecret - * @return The Response - * @throws FlickrException - */ - public abstract Response get(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException; - - /** - * Invoke an HTTP POST request on a remote host. - * - * @param path - * The request path - * @param parameters - * The parameters (List of Parameter objects) - * @param apiKey - * @param sharedSecret - * @return The Response object - * @throws FlickrException - */ - public abstract Response post(String path, Map parameters, String apiKey, String sharedSecret, boolean multipart) throws FlickrException; - - /** - * Invoke an HTTP POST request on a remote host. - * - * @param path - * The request path - * @param parameters - * The parameters (List of Parameter objects) - * @param apiKey - * @param sharedSecret - * @return The Response object - * @throws FlickrException - */ - public Response post(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException { - - return post(path, parameters, apiKey, sharedSecret, false); - } - - /** - * Invoke a non OAuth HTTP GET request on a remote host. - * - * This is only used for the Flickr OAuth methods checkToken and getAccessToken. - * - * @param path - * The request path - * @param parameters - * The parameters - * @return The Response - * @throws FlickrException - */ - public abstract Response getNonOAuth(String path, Map parameters) throws FlickrException; - - public void setResponseClass(Class responseClass) { - if (responseClass == null) { - throw new IllegalArgumentException("The response Class cannot be null"); - } - this.responseClass = responseClass; - } -} + +package com.flickr4java.flickr; + +import com.flickr4java.flickr.uploader.Payload; +import com.flickr4java.flickr.uploader.UploadMetaData; + +import java.util.Map; + +/** + * The abstract Transport class provides a common interface for transporting requests to the Flickr servers. + * Flickr offers several transport methods including REST, SOAP and XML-RPC. + * Flickr4Java currently implements the REST transport. + * + * @author Matt Ray + * @author Anthony Eden + */ + +public abstract class AbstractTransport { + + public static final String REST = "REST"; + + protected static final String API_HOST = "api.flickr.com"; + + /** + * Host is different for upload, need to set it from Uploader.java. + */ + public static final String UPLOAD_API_HOST = "up.flickr.com"; + + protected static final String DEFAULT_SCHEME = "https"; + + private String transportType; + + protected Class responseClass; + + private String path; + + private String host; + + private int port = 443; + + private String scheme; + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + public String getTransportType() { + return transportType; + } + + public void setTransportType(String transport) { + this.transportType = transport; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getScheme() { + return scheme; + } + + public void setScheme(String scheme) { + this.scheme = scheme; + } + + /** + * Invoke an HTTP GET request on a remote host. You must close the InputStream after you are done with. + * + * @param path + * The request path + * @param parameters + * The parameters (collection of Parameter objects) + * @param apiKey + * @param sharedSecret + * @return The Response + * @throws FlickrException if there was a problem connecting to Flickr + */ + public abstract Response get(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException; + + /** + * Invoke an HTTP POST request on a remote host. + * + * @param path + * The request path + * @param parameters + * The parameters (List of Parameter objects) + * @param apiKey + * @param sharedSecret + * @return The Response object + * @throws FlickrException if there was a problem connecting to Flickr + */ + public abstract Response post(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException; + + /** + * Invoke an HTTP POST multipart request on a remote host. + * + * @param path + * The request path + * @param parameters + * The parameters (List of Parameter objects) + * @param payload + * @param apiKey + * @param sharedSecret + * @return The Response object + * @throws FlickrException if there was a problem connecting to Flickr + */ + public abstract Response postMultiPart(String path, UploadMetaData parameters, Payload payload, String apiKey, String sharedSecret) throws FlickrException; + + /** + * Invoke a non OAuth HTTP GET request on a remote host. + * + * This is only used for the Flickr OAuth methods checkToken and getAccessToken. + * + * @param path + * The request path + * @param parameters + * The parameters + * @return The Response + * @throws FlickrRuntimeException + */ + public abstract Response getNonOAuth(String path, Map parameters) throws FlickrRuntimeException; + + public void setResponseClass(Class responseClass) { + if (responseClass == null) { + throw new IllegalArgumentException("The response Class cannot be null"); + } + this.responseClass = responseClass; + } +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java b/src/main/java/com/flickr4java/flickr/Flickr.java similarity index 95% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java rename to src/main/java/com/flickr4java/flickr/Flickr.java index 114b0010..42720aa5 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java +++ b/src/main/java/com/flickr4java/flickr/Flickr.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr; import com.flickr4java.flickr.activity.ActivityInterface; @@ -51,12 +49,12 @@ *

* * The user who authenticates himself, can manage this permissions at his list of Third-party - * applications (You -> Your account -> Extending Flickr -> Account Links -> edit). + * applications (You / Your account / Extending Flickr / Account Links / edit). * * @author Anthony Eden * @version $Id: Flickr.java,v 1.45 2009/06/23 21:51:25 x-mago Exp $ */ -public class Flickr { +public class Flickr implements IFlickr { /** * The default endpoint host. @@ -82,7 +80,7 @@ public class Flickr { private String sharedSecret; - private Transport transport; + private AbstractTransport transport; private Auth auth; @@ -280,7 +278,7 @@ public class Flickr { * @param sharedSecret * @param transport */ - public Flickr(String apiKey, String sharedSecret, Transport transport) { + public Flickr(String apiKey, String sharedSecret, AbstractTransport transport) { setApiKey(apiKey); setSharedSecret(sharedSecret); setTransport(transport); @@ -291,6 +289,7 @@ public Flickr(String apiKey, String sharedSecret, Transport transport) { * * @return The API key */ + @Override public String getApiKey() { return apiKey; } @@ -301,6 +300,7 @@ public String getApiKey() { * @param apiKey * The API key which cannot be null */ + @Override public void setApiKey(String apiKey) { if (apiKey == null) { throw new IllegalArgumentException("API key must not be null"); @@ -308,6 +308,7 @@ public void setApiKey(String apiKey) { this.apiKey = apiKey; } + @Override public void setAuth(Auth auth) { this.auth = auth; } @@ -317,6 +318,7 @@ public void setAuth(Auth auth) { * * @return The Auth-object */ + @Override public Auth getAuth() { return auth; } @@ -326,6 +328,7 @@ public Auth getAuth() { * * @return The Shared-Secret */ + @Override public String getSharedSecret() { return sharedSecret; } @@ -336,6 +339,7 @@ public String getSharedSecret() { * @param sharedSecret * The Shared-Secret which cannot be null */ + @Override public void setSharedSecret(String sharedSecret) { if (sharedSecret == null) { throw new IllegalArgumentException("Shared-Secret must not be null"); @@ -348,7 +352,8 @@ public void setSharedSecret(String sharedSecret) { * * @return The Tranport interface */ - public Transport getTransport() { + @Override + public AbstractTransport getTransport() { return transport; } @@ -357,7 +362,8 @@ public Transport getTransport() { * * @param transport */ - public void setTransport(Transport transport) { + @Override + public void setTransport(AbstractTransport transport) { if (transport == null) { throw new IllegalArgumentException("Transport must not be null"); } @@ -369,6 +375,7 @@ public void setTransport(Transport transport) { * * @return The AuthInterface */ + @Override public AuthInterface getAuthInterface() { if (authInterface == null) { authInterface = new AuthInterface(apiKey, sharedSecret, transport); @@ -381,6 +388,7 @@ public AuthInterface getAuthInterface() { * * @return The ActivityInterface */ + @Override public ActivityInterface getActivityInterface() { if (activityInterface == null) { activityInterface = new ActivityInterface(apiKey, sharedSecret, transport); @@ -388,6 +396,7 @@ public ActivityInterface getActivityInterface() { return activityInterface; } + @Override public synchronized BlogsInterface getBlogsInterface() { if (blogsInterface == null) { blogsInterface = new BlogsInterface(apiKey, sharedSecret, transport); @@ -395,6 +404,7 @@ public synchronized BlogsInterface getBlogsInterface() { return blogsInterface; } + @Override public CommentsInterface getCommentsInterface() { if (commentsInterface == null) { commentsInterface = new CommentsInterface(apiKey, sharedSecret, transport); @@ -402,6 +412,7 @@ public CommentsInterface getCommentsInterface() { return commentsInterface; } + @Override public CommonsInterface getCommonsInterface() { if (commonsInterface == null) { commonsInterface = new CommonsInterface(apiKey, sharedSecret, transport); @@ -409,6 +420,7 @@ public CommonsInterface getCommonsInterface() { return commonsInterface; } + @Override public ContactsInterface getContactsInterface() { if (contactsInterface == null) { contactsInterface = new ContactsInterface(apiKey, sharedSecret, transport); @@ -416,6 +428,7 @@ public ContactsInterface getContactsInterface() { return contactsInterface; } + @Override public FavoritesInterface getFavoritesInterface() { if (favoritesInterface == null) { favoritesInterface = new FavoritesInterface(apiKey, sharedSecret, transport); @@ -423,6 +436,7 @@ public FavoritesInterface getFavoritesInterface() { return favoritesInterface; } + @Override public GeoInterface getGeoInterface() { if (geoInterface == null) { geoInterface = new GeoInterface(apiKey, sharedSecret, transport); @@ -430,6 +444,7 @@ public GeoInterface getGeoInterface() { return geoInterface; } + @Override public GroupsInterface getGroupsInterface() { if (groupsInterface == null) { groupsInterface = new GroupsInterface(apiKey, sharedSecret, transport); @@ -440,6 +455,7 @@ public GroupsInterface getGroupsInterface() { /** * @return the interface to the flickr.interestingness methods */ + @Override public synchronized InterestingnessInterface getInterestingnessInterface() { if (interestingnessInterface == null) { interestingnessInterface = new InterestingnessInterface(apiKey, sharedSecret, transport); @@ -447,6 +463,7 @@ public synchronized InterestingnessInterface getInterestingnessInterface() { return interestingnessInterface; } + @Override public LicensesInterface getLicensesInterface() { if (licensesInterface == null) { licensesInterface = new LicensesInterface(apiKey, sharedSecret, transport); @@ -454,6 +471,7 @@ public LicensesInterface getLicensesInterface() { return licensesInterface; } + @Override public MachinetagsInterface getMachinetagsInterface() { if (machinetagsInterface == null) { machinetagsInterface = new MachinetagsInterface(apiKey, sharedSecret, transport); @@ -461,6 +479,7 @@ public MachinetagsInterface getMachinetagsInterface() { return machinetagsInterface; } + @Override public MembersInterface getMembersInterface() { if (membersInterface == null) { membersInterface = new MembersInterface(apiKey, sharedSecret, transport); @@ -468,6 +487,7 @@ public MembersInterface getMembersInterface() { return membersInterface; } + @Override public NotesInterface getNotesInterface() { if (notesInterface == null) { notesInterface = new NotesInterface(apiKey, sharedSecret, transport); @@ -475,6 +495,7 @@ public NotesInterface getNotesInterface() { return notesInterface; } + @Override public PandaInterface getPandaInterface() { if (pandaInterface == null) { pandaInterface = new PandaInterface(apiKey, sharedSecret, transport); @@ -482,6 +503,7 @@ public PandaInterface getPandaInterface() { return pandaInterface; } + @Override public PoolsInterface getPoolsInterface() { if (poolsInterface == null) { poolsInterface = new PoolsInterface(apiKey, sharedSecret, transport); @@ -489,6 +511,7 @@ public PoolsInterface getPoolsInterface() { return poolsInterface; } + @Override public PeopleInterface getPeopleInterface() { if (peopleInterface == null) { peopleInterface = new PeopleInterface(apiKey, sharedSecret, transport); @@ -496,6 +519,7 @@ public PeopleInterface getPeopleInterface() { return peopleInterface; } + @Override public PhotosInterface getPhotosInterface() { if (photosInterface == null) { photosInterface = new PhotosInterface(apiKey, sharedSecret, transport); @@ -503,6 +527,7 @@ public PhotosInterface getPhotosInterface() { return photosInterface; } + @Override public PhotosetsCommentsInterface getPhotosetsCommentsInterface() { if (photosetsCommentsInterface == null) { photosetsCommentsInterface = new PhotosetsCommentsInterface(apiKey, sharedSecret, transport); @@ -510,6 +535,7 @@ public PhotosetsCommentsInterface getPhotosetsCommentsInterface() { return photosetsCommentsInterface; } + @Override public PhotosetsInterface getPhotosetsInterface() { if (photosetsInterface == null) { photosetsInterface = new PhotosetsInterface(apiKey, sharedSecret, transport); @@ -517,6 +543,7 @@ public PhotosetsInterface getPhotosetsInterface() { return photosetsInterface; } + @Override public CollectionsInterface getCollectionsInterface() { if (collectionsInterface == null) { collectionsInterface = new CollectionsInterface(apiKey, sharedSecret, transport); @@ -524,6 +551,7 @@ public CollectionsInterface getCollectionsInterface() { return collectionsInterface; } + @Override public PlacesInterface getPlacesInterface() { if (placesInterface == null) { placesInterface = new PlacesInterface(apiKey, sharedSecret, transport); @@ -531,6 +559,7 @@ public PlacesInterface getPlacesInterface() { return placesInterface; } + @Override public PrefsInterface getPrefsInterface() { if (prefsInterface == null) { prefsInterface = new PrefsInterface(apiKey, sharedSecret, transport); @@ -538,6 +567,7 @@ public PrefsInterface getPrefsInterface() { return prefsInterface; } + @Override public ReflectionInterface getReflectionInterface() { if (reflectionInterface == null) { reflectionInterface = new ReflectionInterface(apiKey, sharedSecret, transport); @@ -550,6 +580,7 @@ public ReflectionInterface getReflectionInterface() { * * @return The TagsInterface */ + @Override public TagsInterface getTagsInterface() { if (tagsInterface == null) { tagsInterface = new TagsInterface(apiKey, sharedSecret, transport); @@ -557,6 +588,7 @@ public TagsInterface getTagsInterface() { return tagsInterface; } + @Override public TestInterface getTestInterface() { if (testInterface == null) { testInterface = new TestInterface(apiKey, sharedSecret, transport); @@ -564,6 +596,7 @@ public TestInterface getTestInterface() { return testInterface; } + @Override public TransformInterface getTransformInterface() { if (transformInterface == null) { transformInterface = new TransformInterface(apiKey, sharedSecret, transport); @@ -571,6 +604,7 @@ public TransformInterface getTransformInterface() { return transformInterface; } + @Override public UploadInterface getUploadInterface() { if (uploadInterface == null) { uploadInterface = new UploadInterface(apiKey, sharedSecret, transport); @@ -578,6 +612,7 @@ public UploadInterface getUploadInterface() { return uploadInterface; } + @Override public Uploader getUploader() { if (uploader == null) { uploader = new Uploader(apiKey, sharedSecret); @@ -585,6 +620,7 @@ public Uploader getUploader() { return uploader; } + @Override public UrlsInterface getUrlsInterface() { if (urlsInterface == null) { urlsInterface = new UrlsInterface(apiKey, sharedSecret, transport); @@ -592,6 +628,7 @@ public UrlsInterface getUrlsInterface() { return urlsInterface; } + @Override public GalleriesInterface getGalleriesInterface() { if (galleriesInterface == null) { galleriesInterface = new GalleriesInterface(apiKey, sharedSecret, transport); @@ -599,6 +636,7 @@ public GalleriesInterface getGalleriesInterface() { return galleriesInterface; } + @Override public StatsInterface getStatsInterface() { if (statsInterface == null) { statsInterface = new StatsInterface(apiKey, sharedSecret, transport); @@ -606,6 +644,7 @@ public StatsInterface getStatsInterface() { return statsInterface; } + @Override public CamerasInterface getCamerasInterface() { if (cameraInterface == null) { cameraInterface = new CamerasInterface(apiKey, sharedSecret, transport); @@ -618,6 +657,7 @@ public CamerasInterface getCamerasInterface() { * * @return The SuggestionsInterface */ + @Override public SuggestionsInterface getSuggestionsInterface() { if (suggestionsInterface == null) { suggestionsInterface = new SuggestionsInterface(apiKey, sharedSecret, transport); @@ -631,6 +671,7 @@ public SuggestionsInterface getSuggestionsInterface() { * @return The GroupDiscussInterface */ + @Override public GroupDiscussInterface getDiscussionInterface() { if (discussionInterface == null) { discussionInterface = new GroupDiscussInterface(apiKey, sharedSecret, transport); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/FlickrException.java b/src/main/java/com/flickr4java/flickr/FlickrException.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/FlickrException.java rename to src/main/java/com/flickr4java/flickr/FlickrException.java index 40a2b243..56d13c43 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/FlickrException.java +++ b/src/main/java/com/flickr4java/flickr/FlickrException.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr; /** diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java b/src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java rename to src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java diff --git a/src/main/java/com/flickr4java/flickr/IFlickr.java b/src/main/java/com/flickr4java/flickr/IFlickr.java new file mode 100644 index 00000000..e1e31032 --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/IFlickr.java @@ -0,0 +1,126 @@ +package com.flickr4java.flickr; + +import com.flickr4java.flickr.activity.ActivityInterface; +import com.flickr4java.flickr.auth.Auth; +import com.flickr4java.flickr.auth.AuthInterface; +import com.flickr4java.flickr.blogs.BlogsInterface; +import com.flickr4java.flickr.cameras.CamerasInterface; +import com.flickr4java.flickr.collections.CollectionsInterface; +import com.flickr4java.flickr.commons.CommonsInterface; +import com.flickr4java.flickr.contacts.ContactsInterface; +import com.flickr4java.flickr.favorites.FavoritesInterface; +import com.flickr4java.flickr.galleries.GalleriesInterface; +import com.flickr4java.flickr.groups.GroupsInterface; +import com.flickr4java.flickr.groups.discuss.GroupDiscussInterface; +import com.flickr4java.flickr.groups.members.MembersInterface; +import com.flickr4java.flickr.groups.pools.PoolsInterface; +import com.flickr4java.flickr.interestingness.InterestingnessInterface; +import com.flickr4java.flickr.machinetags.MachinetagsInterface; +import com.flickr4java.flickr.panda.PandaInterface; +import com.flickr4java.flickr.people.PeopleInterface; +import com.flickr4java.flickr.photos.PhotosInterface; +import com.flickr4java.flickr.photos.comments.CommentsInterface; +import com.flickr4java.flickr.photos.geo.GeoInterface; +import com.flickr4java.flickr.photos.licenses.LicensesInterface; +import com.flickr4java.flickr.photos.notes.NotesInterface; +import com.flickr4java.flickr.photos.suggestions.SuggestionsInterface; +import com.flickr4java.flickr.photos.transform.TransformInterface; +import com.flickr4java.flickr.photos.upload.UploadInterface; +import com.flickr4java.flickr.photosets.PhotosetsInterface; +import com.flickr4java.flickr.photosets.comments.PhotosetsCommentsInterface; +import com.flickr4java.flickr.places.PlacesInterface; +import com.flickr4java.flickr.prefs.PrefsInterface; +import com.flickr4java.flickr.reflection.ReflectionInterface; +import com.flickr4java.flickr.stats.StatsInterface; +import com.flickr4java.flickr.tags.TagsInterface; +import com.flickr4java.flickr.test.TestInterface; +import com.flickr4java.flickr.uploader.Uploader; +import com.flickr4java.flickr.urls.UrlsInterface; + +public interface IFlickr { + String getApiKey(); + + void setApiKey(String apiKey); + + void setAuth(Auth auth); + + Auth getAuth(); + + String getSharedSecret(); + + void setSharedSecret(String sharedSecret); + + AbstractTransport getTransport(); + + void setTransport(AbstractTransport transport); + + AuthInterface getAuthInterface(); + + ActivityInterface getActivityInterface(); + + BlogsInterface getBlogsInterface(); + + CommentsInterface getCommentsInterface(); + + CommonsInterface getCommonsInterface(); + + ContactsInterface getContactsInterface(); + + FavoritesInterface getFavoritesInterface(); + + GeoInterface getGeoInterface(); + + GroupsInterface getGroupsInterface(); + + InterestingnessInterface getInterestingnessInterface(); + + LicensesInterface getLicensesInterface(); + + MachinetagsInterface getMachinetagsInterface(); + + MembersInterface getMembersInterface(); + + NotesInterface getNotesInterface(); + + PandaInterface getPandaInterface(); + + PoolsInterface getPoolsInterface(); + + PeopleInterface getPeopleInterface(); + + PhotosInterface getPhotosInterface(); + + PhotosetsCommentsInterface getPhotosetsCommentsInterface(); + + PhotosetsInterface getPhotosetsInterface(); + + CollectionsInterface getCollectionsInterface(); + + PlacesInterface getPlacesInterface(); + + PrefsInterface getPrefsInterface(); + + ReflectionInterface getReflectionInterface(); + + TagsInterface getTagsInterface(); + + TestInterface getTestInterface(); + + TransformInterface getTransformInterface(); + + UploadInterface getUploadInterface(); + + Uploader getUploader(); + + UrlsInterface getUrlsInterface(); + + GalleriesInterface getGalleriesInterface(); + + StatsInterface getStatsInterface(); + + CamerasInterface getCamerasInterface(); + + SuggestionsInterface getSuggestionsInterface(); + + GroupDiscussInterface getDiscussionInterface(); +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Parameter.java b/src/main/java/com/flickr4java/flickr/Parameter.java similarity index 89% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/Parameter.java rename to src/main/java/com/flickr4java/flickr/Parameter.java index 54dd321f..7d0b62d3 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Parameter.java +++ b/src/main/java/com/flickr4java/flickr/Parameter.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr; /** diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/ProxyAuthenticator.java b/src/main/java/com/flickr4java/flickr/ProxyAuthenticator.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/ProxyAuthenticator.java rename to src/main/java/com/flickr4java/flickr/ProxyAuthenticator.java index 7435f9db..d287618c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/ProxyAuthenticator.java +++ b/src/main/java/com/flickr4java/flickr/ProxyAuthenticator.java @@ -10,9 +10,10 @@ * @version $Id: ProxyAuthenticator.java,v 1.1 2007/11/25 00:26:51 x-mago Exp $ */ public class ProxyAuthenticator extends Authenticator { - String userName = ""; - String passWord = ""; + public String userName = ""; + + public String passWord = ""; public ProxyAuthenticator(String userName, String passWord) { this.userName = userName; diff --git a/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java new file mode 100644 index 00000000..68349fb3 --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -0,0 +1,361 @@ + +package com.flickr4java.flickr; + +import com.flickr4java.flickr.auth.Auth; +import com.flickr4java.flickr.uploader.Payload; +import com.flickr4java.flickr.uploader.UploadMetaData; +import com.flickr4java.flickr.util.DebugInputStream; +import com.flickr4java.flickr.util.IOUtilities; +import com.flickr4java.flickr.util.OAuthUtilities; +import com.flickr4java.flickr.util.UrlUtilities; +import com.github.scribejava.core.model.OAuth1AccessToken; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Parameter; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth10aService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.io.InputStream; +import java.io.StringReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ExecutionException; + +/** + * Transport implementation using the REST interface. + * + * @author Anthony Eden + * @version $Id: REST.java,v 1.26 2009/07/01 22:07:08 x-mago Exp $ + */ +public class REST extends AbstractTransport { + private static final Logger LOGGER = LoggerFactory.getLogger(REST.class); + + private static final String PATH = "/services/rest/"; + + /** + * Error code from Flickr API when the service is unavailable. + */ + private static final String FLICKR_SERVICE_UNAVAILABLE = "105"; + + private boolean proxyAuth = false; + + private String proxyUser = ""; + + private String proxyPassword = ""; + + private Integer connectTimeoutMs; + + private Integer readTimeoutMs; + + /** + * Construct a new REST transport instance. + */ + public REST() { + setTransportType(REST); + setHost(API_HOST); + setPath(PATH); + setScheme(DEFAULT_SCHEME); + setResponseClass(RESTResponse.class); + } + + /** + * Construct a new REST transport instance using the specified host endpoint. + * + * @param host The host endpoint + */ + public REST(String host) { + this(); + setHost(host); + } + + /** + * Construct a new REST transport instance using the specified host and port endpoint. + * + * @param host The host endpoint + * @param port The port + */ + public REST(String host, int port) { + this(); + setHost(host); + setPort(port); + } + + /** + * Set a proxy for REST-requests. + * + * @param proxyHost + * @param proxyPort + */ + public void setProxy(String proxyHost, int proxyPort) { + System.setProperty("http.proxySet", "true"); + System.setProperty("http.proxyHost", proxyHost); + System.setProperty("http.proxyPort", "" + proxyPort); + System.setProperty("https.proxyHost", proxyHost); + System.setProperty("https.proxyPort", "" + proxyPort); + } + + /** + * Set a proxy with authentication for REST-requests. + * + * @param proxyHost + * @param proxyPort + * @param username + * @param password + */ + public void setProxy(String proxyHost, int proxyPort, String username, String password) { + setProxy(proxyHost, proxyPort); + proxyAuth = true; + proxyUser = username; + proxyPassword = password; + } + + /** + * Invoke an HTTP GET request on a remote host. You must close the InputStream after you are done with. + * + * @param path The request path + * @param parameters The parameters (collection of Parameter objects) + * @return The Response + */ + @Override + public com.flickr4java.flickr.Response get(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException { + + OAuthRequest request = new OAuthRequest(Verb.GET, buildUrl(path)); + for (Map.Entry entry : parameters.entrySet()) { + request.addQuerystringParameter(entry.getKey(), String.valueOf(entry.getValue())); + } + + if (proxyAuth) { + request.addHeader("Proxy-Authorization", "Basic " + getProxyCredentials()); + } + + RequestContext requestContext = RequestContext.getRequestContext(); + Auth auth = requestContext.getAuth(); + OAuth10aService service = OAuthUtilities.createOAuthService(apiKey, sharedSecret, connectTimeoutMs, readTimeoutMs); + if (auth == null) { + // For calls that do not require authorization e.g. flickr.people.findByUsername which could be the + // first call if the user did not supply the user-id (i.e. nsid). + if (!parameters.containsKey(Flickr.API_KEY)) { + request.addQuerystringParameter(Flickr.API_KEY, apiKey); + } + } else { + OAuth1AccessToken requestToken = new OAuth1AccessToken(auth.getToken(), auth.getTokenSecret()); + service.signRequest(requestToken, request); + } + + if (Flickr.debugRequest) { + LOGGER.debug("GET: " + request.getCompleteUrl()); + } + + try { + return handleResponse(request, service); + } catch (ReflectiveOperationException | SAXException | IOException | InterruptedException | ExecutionException | ParserConfigurationException e) { + throw new FlickrRuntimeException(e); + } + } + + /** + * Invoke an HTTP POST request on a remote host. + * + * @param path The request path + * @param parameters The parameters (collection of Parameter objects) + * @return The Response object + */ + @Override + public com.flickr4java.flickr.Response post(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException { + + OAuthRequest request = OAuthUtilities.buildNormalPostRequest(parameters, buildUrl(path)); + + OAuth10aService service = createAndSignRequest(apiKey, sharedSecret, request); + + try { + return handleResponse(request, service); + } catch (ReflectiveOperationException | InterruptedException | ExecutionException | IOException | SAXException | ParserConfigurationException e) { + throw new FlickrRuntimeException(e); + } + } + + /** + * Invoke an HTTP POST request on a remote host. + * + * @param path The request path + * @param metaData The parameters (collection of Parameter objects) + * @param payload + * @return The Response object + */ + @Override + public com.flickr4java.flickr.Response postMultiPart(String path, UploadMetaData metaData, Payload payload, String apiKey, String sharedSecret) throws FlickrException { + + Map uploadParameters = new HashMap<>(metaData.getUploadParameters()); + OAuthRequest request = OAuthUtilities.buildMultipartRequest(uploadParameters, buildUrl(path)); + + OAuth10aService service = createAndSignRequest(apiKey, sharedSecret, request); + + // Ensure all parameters (including oauth) are added to payload so signature matches + uploadParameters.putAll(request.getOauthParameters()); + + request.addFileByteArrayBodyPartPayloadInMultipartPayload(payload.getPayload(), "photo", metaData.getFilename()); + uploadParameters.entrySet().forEach(e -> + request.addFileByteArrayBodyPartPayloadInMultipartPayload(null, e.getValue().getBytes(), e.getKey())); + + try { + return handleResponse(request, service); + } catch (ReflectiveOperationException | InterruptedException | ExecutionException | IOException | SAXException | ParserConfigurationException e) { + throw new FlickrRuntimeException(e); + } + } + + private OAuth10aService createAndSignRequest(String apiKey, String sharedSecret, OAuthRequest request) { + OAuth10aService service = OAuthUtilities.createOAuthService(apiKey, sharedSecret, connectTimeoutMs, readTimeoutMs); + OAuthUtilities.signRequest(service, request, proxyAuth ? getProxyCredentials() : null); + return service; + } + + private String buildUrl(String path) { + return String.format("%s://%s%s", getScheme(), getHost(), path); + } + + private Response handleResponse(OAuthRequest request, OAuth10aService service) throws InterruptedException, ExecutionException, IOException, SAXException, ParserConfigurationException, FlickrException, ReflectiveOperationException { + com.github.scribejava.core.model.Response scribeResponse = service.execute(request); + + if (!scribeResponse.isSuccessful()) { + throw new FlickrException(FLICKR_SERVICE_UNAVAILABLE, String.format("Received '%s' error from Flickr with status %d", scribeResponse.getMessage(), scribeResponse.getCode())); + } + String strXml = scribeResponse.getBody().trim(); + if (Flickr.debugStream) { + LOGGER.debug(strXml); + } + if (strXml.startsWith("oauth_problem=")) { + throw new FlickrRuntimeException(strXml); + } + + DocumentBuilder builder = getDocumentBuilder(); + Document document = builder.parse(new InputSource(new StringReader(strXml))); + Response f4jResponse = (Response) responseClass.getConstructor().newInstance(); + f4jResponse.parse(document); + + // Enable this method to update the test payloads + // dumpResponseToFile(request, strXml); + + return f4jResponse; + } + + /** + * Invoke a non OAuth HTTP GET request on a remote host. + *

+ * This is only used for the Flickr OAuth methods checkToken and getAccessToken. + * + * @param path The request path + * @param parameters The parameters + * @return The Response + */ + @Override + public Response getNonOAuth(String path, Map parameters) { + InputStream in = null; + try { + URL url = UrlUtilities.buildUrl(getScheme(), getHost(), getPort(), path, parameters); + if (Flickr.debugRequest) { + LOGGER.debug("GET: " + url); + } + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + if (proxyAuth) { + conn.setRequestProperty("Proxy-Authorization", "Basic " + getProxyCredentials()); + } + setTimeouts(conn); + conn.connect(); + + if (Flickr.debugStream) { + in = new DebugInputStream(conn.getInputStream(), System.out); + } else { + in = conn.getInputStream(); + } + + Response response; + DocumentBuilder builder = getDocumentBuilder(); + Document document = builder.parse(in); + response = (Response) responseClass.newInstance(); + response.parse(document); + + return response; + } catch (IllegalAccessException | SAXException | IOException | InstantiationException | ParserConfigurationException e) { + throw new FlickrRuntimeException(e); + } finally { + IOUtilities.close(in); + } + } + + public boolean isProxyAuth() { + return proxyAuth; + } + + /** + * Generates Base64-encoded credentials from locally stored username and password. + * + * @return credentials + */ + public String getProxyCredentials() { + return new String(Base64.getEncoder().encode((proxyUser + ":" + proxyPassword).getBytes())); + } + + private void setTimeouts(HttpURLConnection conn) { + if (connectTimeoutMs != null) { + conn.setConnectTimeout(connectTimeoutMs); + } + if (readTimeoutMs != null) { + conn.setReadTimeout(readTimeoutMs); + } + } + + public void setConnectTimeoutMs(Integer connectTimeoutMs) { + this.connectTimeoutMs = connectTimeoutMs; + } + + public void setReadTimeoutMs(Integer readTimeoutMs) { + this.readTimeoutMs = readTimeoutMs; + } + + private DocumentBuilder getDocumentBuilder() throws ParserConfigurationException { + DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); + return builderFactory.newDocumentBuilder(); + } + + // Generate responses for offline tests + + private void dumpResponseToFile(OAuthRequest request, String strXml) throws IOException { + Verb verb = request.getVerb(); + Optional flickrMethod = Optional.empty(); + switch (verb) { + case GET: + flickrMethod = request.getQueryStringParams().getParams().stream().filter(param -> param.getKey().equals("method")).findFirst().map(Parameter::getValue); + break; + case POST: + flickrMethod = request.getBodyParams().getParams().stream().filter(param -> param.getKey().equals("method")).findFirst().map(Parameter::getValue); + break; + default: + break; + } + if (flickrMethod.isPresent()) { + String filename = String.format("%s.xml", flickrMethod.get()); + Path filePath = Paths.get("src/test/resources/payloads/" + verb, filename); + Files.write(filePath, strXml.getBytes()); + LOGGER.info(String.format("Writing payload to file '%s'", filePath)); + } else { + LOGGER.warn("Not dumping response to file as method not found in request for URL {}", request.getUrl()); + } + } +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/RESTResponse.java b/src/main/java/com/flickr4java/flickr/RESTResponse.java similarity index 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/RESTResponse.java rename to src/main/java/com/flickr4java/flickr/RESTResponse.java index 1a2f91b2..e35da74d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/RESTResponse.java +++ b/src/main/java/com/flickr4java/flickr/RESTResponse.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr; import com.flickr4java.flickr.util.XMLUtilities; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/RequestContext.java b/src/main/java/com/flickr4java/flickr/RequestContext.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/RequestContext.java rename to src/main/java/com/flickr4java/flickr/RequestContext.java index aa685997..030b0b63 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/RequestContext.java +++ b/src/main/java/com/flickr4java/flickr/RequestContext.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Response.java b/src/main/java/com/flickr4java/flickr/Response.java similarity index 84% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/Response.java rename to src/main/java/com/flickr4java/flickr/Response.java index cfc26a6d..6b37a11b 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Response.java +++ b/src/main/java/com/flickr4java/flickr/Response.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/SearchResultList.java b/src/main/java/com/flickr4java/flickr/SearchResultList.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/SearchResultList.java rename to src/main/java/com/flickr4java/flickr/SearchResultList.java index b5ec5e21..61af8d2e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/SearchResultList.java +++ b/src/main/java/com/flickr4java/flickr/SearchResultList.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java b/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java similarity index 95% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java rename to src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java index b648ccf7..aa956e7c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java +++ b/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java @@ -45,10 +45,10 @@ public ActivityInterface(String apiKey, String sharedSecret, Transport transport * @param perPage * @param page * @return ItemList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public ItemList userComments(int perPage, int page) throws FlickrException { - ItemList items = new ItemList(); + Map parameters = new HashMap(); parameters.put("method", METHOD_USER_COMMENTS); @@ -64,7 +64,7 @@ public ItemList userComments(int perPage, int page) throws FlickrException if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } - + ItemList items = new ItemList(); Element itemList = response.getPayload(); NodeList itemElements = itemList.getElementsByTagName("item"); items.setPage(itemList.getAttribute("page")); @@ -88,7 +88,7 @@ public ItemList userComments(int perPage, int page) throws FlickrException * @param page * @param timeframe * @return ItemList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public ItemList userPhotos(int perPage, int page, String timeframe) throws FlickrException { ItemList items = new ItemList(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/activity/Event.java b/src/main/java/com/flickr4java/flickr/activity/Event.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/activity/Event.java rename to src/main/java/com/flickr4java/flickr/activity/Event.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/activity/Item.java b/src/main/java/com/flickr4java/flickr/activity/Item.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/activity/Item.java rename to src/main/java/com/flickr4java/flickr/activity/Item.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ItemList.java b/src/main/java/com/flickr4java/flickr/activity/ItemList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ItemList.java rename to src/main/java/com/flickr4java/flickr/activity/ItemList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/Auth.java b/src/main/java/com/flickr4java/flickr/auth/Auth.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/auth/Auth.java rename to src/main/java/com/flickr4java/flickr/auth/Auth.java index 32441bbf..44ea9e94 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/Auth.java +++ b/src/main/java/com/flickr4java/flickr/auth/Auth.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.auth; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java similarity index 71% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java rename to src/main/java/com/flickr4java/flickr/auth/AuthInterface.java index be232c4d..88ad88fb 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java +++ b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java @@ -1,31 +1,32 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.auth; import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.FlickrRuntimeException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.people.User; import com.flickr4java.flickr.util.ByteUtilities; import com.flickr4java.flickr.util.XMLUtilities; - -import org.apache.log4j.Logger; -import org.scribe.builder.ServiceBuilder; -import org.scribe.builder.api.FlickrApi; -import org.scribe.exceptions.OAuthException; -import org.scribe.model.Token; -import org.scribe.model.Verifier; -import org.scribe.oauth.OAuthService; +import com.github.scribejava.apis.FlickrApi; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.exceptions.OAuthException; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.OAuth1Token; +import com.github.scribejava.core.oauth.OAuth10aService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Element; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Map; import java.util.TreeMap; +import java.util.concurrent.ExecutionException; /** * Authentication interface. @@ -47,9 +48,9 @@ public class AuthInterface { private final String sharedSecret; - private final Transport transportAPI; + private final AbstractTransport transportAPI; - private final static Logger logger = Logger.getLogger(AuthInterface.class); + private final static Logger logger = LoggerFactory.getLogger(AuthInterface.class); private int maxGetTokenRetries = 3; @@ -61,7 +62,7 @@ public class AuthInterface { * @param transport * The Transport interface */ - public AuthInterface(String apiKey, String sharedSecret, Transport transport) { + public AuthInterface(String apiKey, String sharedSecret, AbstractTransport transport) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transport; @@ -70,9 +71,9 @@ public AuthInterface(String apiKey, String sharedSecret, Transport transport) { /** * Get the OAuth request token - this is step one of authorization. * - * @return the {@link Token}, store this for when the user returns from the Flickr website. + * @return the {@link OAuth1RequestToken}, store this for when the user returns from the Flickr website. */ - public Token getRequestToken() { + public OAuth1RequestToken getRequestToken() { return getRequestToken(null); } @@ -82,15 +83,21 @@ public Token getRequestToken() { * * @param callbackUrl * optional callback URL - required for web auth flow, will be set to "oob" if not specified. - * @return the {@link Token}, store this for when the user returns from the Flickr website. + * @return the {@link OAuth1RequestToken}, store this for when the user returns from the Flickr website. */ - public Token getRequestToken(String callbackUrl) { - + public OAuth1RequestToken getRequestToken(String callbackUrl) { String callback = (callbackUrl != null) ? callbackUrl : OUT_OF_BOUND_AUTH_METHOD; - OAuthService service = new ServiceBuilder().provider(FlickrApi.class).apiKey(apiKey).apiSecret(sharedSecret).callback(callback).build(); + OAuth10aService service = new ServiceBuilder(apiKey) + .apiSecret(sharedSecret) + .callback(callback) + .build(FlickrApi.instance()); - return service.getRequestToken(); + try { + return service.getRequestToken(); + } catch (IOException | InterruptedException | ExecutionException e) { + throw new FlickrRuntimeException(e); + } } /** @@ -99,38 +106,39 @@ public Token getRequestToken(String callbackUrl) { * @param oAuthRequestToken * the token from a {@link AuthInterface#getRequestToken} call. */ - public String getAuthorizationUrl(Token oAuthRequestToken, Permission permission) { - - OAuthService service = new ServiceBuilder().provider(FlickrApi.class).apiKey(apiKey).apiSecret(sharedSecret).build(); + public String getAuthorizationUrl(OAuth1RequestToken oAuthRequestToken, Permission permission) { + OAuth10aService service = new ServiceBuilder(apiKey) + .apiSecret(sharedSecret) + .build(FlickrApi.instance()); String authorizationUrl = service.getAuthorizationUrl(oAuthRequestToken); return String.format("%s&perms=%s", authorizationUrl, permission.toString()); } /** * Trade the request token for an access token, this is step three of authorization. - * - * @param oAuthRequestToken + * @param oAuthRequestToken * this is the token returned by the {@link AuthInterface#getRequestToken} call. * @param verifier - * the Verifier created from the code entered by a user or passed back to a callback URL. */ @SuppressWarnings("boxing") - public Token getAccessToken(Token oAuthRequestToken, Verifier verifier) { - OAuthService service = new ServiceBuilder().provider(FlickrApi.class).apiKey(apiKey).apiSecret(sharedSecret).build(); + public OAuth1Token getAccessToken(OAuth1RequestToken oAuthRequestToken, String verifier) { + OAuth10aService service = new ServiceBuilder(apiKey) + .apiSecret(sharedSecret) + .build(FlickrApi.instance()); // Flickr seems to return invalid token sometimes so retry a few times. // See http://www.flickr.com/groups/api/discuss/72157628028927244/ - Token accessToken = null; + OAuth1Token accessToken = null; boolean success = false; for (int i = 0; i < maxGetTokenRetries && !success; i++) { try { accessToken = service.getAccessToken(oAuthRequestToken, verifier); success = true; - } catch (OAuthException e) { - if (i == maxGetTokenRetries) { + } catch (OAuthException | IOException | InterruptedException | ExecutionException e) { + if (i == maxGetTokenRetries - 1) { logger.error(String.format("OAuthService.getAccessToken failing after %d tries, re-throwing exception", i), e); - throw e; + throw new FlickrRuntimeException(e); } else { logger.warn(String.format("OAuthService.getAccessToken failed, try number %d: %s", i, e.getMessage())); try { @@ -142,9 +150,6 @@ public Token getAccessToken(Token oAuthRequestToken, Verifier verifier) { } } - assert accessToken != null; - assert success; - return accessToken; } @@ -154,11 +159,10 @@ public Token getAccessToken(Token oAuthRequestToken, Verifier verifier) { * @param accessToken * The authentication token * @return The Auth object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ - public Auth checkToken(Token accessToken) throws FlickrException { - - return checkToken(accessToken.getToken(), accessToken.getSecret()); + public Auth checkToken(OAuth1Token accessToken) throws FlickrException { + return checkToken(accessToken.getToken(), accessToken.getTokenSecret()); } /** @@ -167,7 +171,7 @@ public Auth checkToken(Token accessToken) throws FlickrException { * The authentication token * @param tokenSecret * @return The Auth object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see "http://www.flickr.com/services/api/flickr.auth.oauth.checkToken.html" */ public Auth checkToken(String authToken, String tokenSecret) throws FlickrException { @@ -195,10 +199,10 @@ public Auth checkToken(String authToken, String tokenSecret) throws FlickrExcept * Calling this method will delete the auth token used to make the request. * * @param authToken - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see "http://www.flickr.com/services/api/flickr.auth.oauth.getAccessToken.html" */ - public Token exchangeAuthToken(String authToken) throws FlickrException { + public OAuth1RequestToken exchangeAuthToken(String authToken) throws FlickrException { // Use TreeMap so keys are automatically sorted alphabetically Map parameters = new TreeMap(); @@ -212,7 +216,7 @@ public Token exchangeAuthToken(String authToken) throws FlickrException { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } - Token accessToken = constructToken(response); + OAuth1RequestToken accessToken = constructToken(response); return accessToken; } @@ -244,12 +248,12 @@ private Auth constructAuth(Response response, String authToken, String tokenSecr * * @param response */ - private Token constructToken(Response response) { + private OAuth1RequestToken constructToken(Response response) { Element authElement = response.getPayload(); String oauthToken = XMLUtilities.getChildValue(authElement, "oauth_token"); String oauthTokenSecret = XMLUtilities.getChildValue(authElement, "oauth_token_secret"); - Token token = new Token(oauthToken, oauthTokenSecret); + OAuth1RequestToken token = new OAuth1RequestToken(oauthToken, oauthTokenSecret); return token; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/Permission.java b/src/main/java/com/flickr4java/flickr/auth/Permission.java similarity index 89% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/auth/Permission.java rename to src/main/java/com/flickr4java/flickr/auth/Permission.java index 993c43d4..aa1f5275 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/Permission.java +++ b/src/main/java/com/flickr4java/flickr/auth/Permission.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.auth; @@ -94,18 +92,24 @@ public static Permission fromString(String permission) { @Override public String toString() { + String returnval; switch (type) { case NONE_TYPE: - return "none"; + returnval = "none"; + break; case READ_TYPE: - return "read"; + returnval = "read"; + break; case WRITE_TYPE: - return "write"; + returnval = "write"; + break; case DELETE_TYPE: - return "delete"; + returnval = "delete"; + break; default: throw new IllegalStateException("Unsupported type: " + type); } + return returnval; } } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/Blog.java b/src/main/java/com/flickr4java/flickr/blogs/Blog.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/Blog.java rename to src/main/java/com/flickr4java/flickr/blogs/Blog.java index fc93f4e5..80eabc84 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/Blog.java +++ b/src/main/java/com/flickr4java/flickr/blogs/Blog.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.blogs; import java.math.BigDecimal; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java b/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java similarity index 86% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java rename to src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java index 9d26caa2..fbf29a78 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java +++ b/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java @@ -1,11 +1,9 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.blogs; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.util.XMLUtilities; @@ -32,13 +30,13 @@ public class BlogsInterface { private static final String METHOD_POST_PHOTO = "flickr.blogs.postPhoto"; - private String apiKey; + private final String apiKey; - private String sharedSecret; + private final String sharedSecret; - private Transport transportAPI; + private final AbstractTransport transportAPI; - public BlogsInterface(String apiKey, String sharedSecret, Transport transport) { + public BlogsInterface(String apiKey, String sharedSecret, AbstractTransport transport) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transport; @@ -50,14 +48,14 @@ public BlogsInterface(String apiKey, String sharedSecret, Transport transport) { * This method does not require authentication. * * @return List of Services - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getServices() throws FlickrException { List list = new ArrayList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_SERVICES); - Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -82,7 +80,7 @@ public Collection getServices() throws FlickrException { * The blog ID * @param blogPassword * The blog password - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void postPhoto(Photo photo, String blogId, String blogPassword) throws FlickrException { Map parameters = new HashMap(); @@ -109,7 +107,7 @@ public void postPhoto(Photo photo, String blogId, String blogPassword) throws Fl * The photo metadata * @param blogId * The blog ID - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void postPhoto(Photo photo, String blogId) throws FlickrException { postPhoto(photo, blogId, null); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/Service.java b/src/main/java/com/flickr4java/flickr/blogs/Service.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/Service.java rename to src/main/java/com/flickr4java/flickr/blogs/Service.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/Brand.java b/src/main/java/com/flickr4java/flickr/cameras/Brand.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/Brand.java rename to src/main/java/com/flickr4java/flickr/cameras/Brand.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/Camera.java b/src/main/java/com/flickr4java/flickr/cameras/Camera.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/Camera.java rename to src/main/java/com/flickr4java/flickr/cameras/Camera.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java b/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java rename to src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java index 93561fa7..a722ca0e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java +++ b/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java @@ -5,10 +5,10 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.util.XMLUtilities; - -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -29,18 +29,18 @@ public class CamerasInterface { private static final String METHOD_GET_BRAND_MODELS = "flickr.cameras.getBrandModels"; /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(CamerasInterface.class); + private static Logger _log = LoggerFactory.getLogger(CamerasInterface.class); private final String apiKey; private final String sharedSecret; - private final Transport transportAPI; + private final AbstractTransport transportAPI; - public CamerasInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public CamerasInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -53,7 +53,7 @@ public CamerasInterface(String apiKey, String sharedSecret, Transport transportA * * * @return List of Brands - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public List getBrands() throws FlickrException { Map parameters = new HashMap(); @@ -85,7 +85,7 @@ public List getBrands() throws FlickrException { * * * @return List of Brands - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public List getBrandModels(String strBrand) throws FlickrException { Map parameters = new HashMap(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/Details.java b/src/main/java/com/flickr4java/flickr/cameras/Details.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/Details.java rename to src/main/java/com/flickr4java/flickr/cameras/Details.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/collections/Collection.java b/src/main/java/com/flickr4java/flickr/collections/Collection.java similarity index 96% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/collections/Collection.java rename to src/main/java/com/flickr4java/flickr/collections/Collection.java index 974bfe42..2a54c18f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/collections/Collection.java +++ b/src/main/java/com/flickr4java/flickr/collections/Collection.java @@ -2,8 +2,8 @@ import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photosets.Photoset; - -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Date; @@ -18,10 +18,10 @@ public class Collection { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Collection.class); + private static Logger _log = LoggerFactory.getLogger(Collection.class); private String id; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java b/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java similarity index 95% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java rename to src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java index 304ebd0e..80856155 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java +++ b/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java @@ -6,8 +6,8 @@ import com.flickr4java.flickr.photos.PhotoUtils; import com.flickr4java.flickr.photosets.Photoset; import com.flickr4java.flickr.util.XMLUtilities; - -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -29,10 +29,10 @@ public class CollectionsInterface { private static final String METHOD_GET_TREE = "flickr.collections.getTree"; /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(CollectionsInterface.class); + private static Logger _log = LoggerFactory.getLogger(CollectionsInterface.class); private final String apiKey; @@ -55,7 +55,7 @@ public CollectionsInterface(String apiKey, String sharedSecret, Transport transp * the id of the collection (from the getTree call, not from the collection URL). * * @return the given Collection - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getInfo(String collectionId) throws FlickrException { Map parameters = new HashMap(); @@ -83,7 +83,7 @@ public Collection getInfo(String collectionId) throws FlickrException { * the user id of the collection owner (optional - defaults to calling user). * * @return List of Institution - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public List getTree(String collectionId, String userId) throws FlickrException { Map parameters = new HashMap(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java b/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java rename to src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java index ebabc201..d70c97ed 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java +++ b/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java @@ -2,7 +2,7 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.util.XMLUtilities; import org.w3c.dom.Element; @@ -24,9 +24,9 @@ public class CommonsInterface { private final String sharedSecret; - private final Transport transportAPI; + private final AbstractTransport transportAPI; - public CommonsInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public CommonsInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -38,7 +38,7 @@ public CommonsInterface(String apiKey, String sharedSecret, Transport transportA * This method does not require authentication. * * @return List of Institution - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public ArrayList getInstitutions() throws FlickrException { ArrayList institutions = new ArrayList(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/commons/Institution.java b/src/main/java/com/flickr4java/flickr/commons/Institution.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/commons/Institution.java rename to src/main/java/com/flickr4java/flickr/commons/Institution.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/Contact.java b/src/main/java/com/flickr4java/flickr/contacts/Contact.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/Contact.java rename to src/main/java/com/flickr4java/flickr/contacts/Contact.java index 0df98fd1..d8545116 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/Contact.java +++ b/src/main/java/com/flickr4java/flickr/contacts/Contact.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.contacts; import com.flickr4java.flickr.util.BuddyIconable; @@ -161,7 +159,7 @@ public void setIconServer(String iconServer) { /** * Get the contact's path alias, which may appear instead of nsid in urls published by Flickr. For example feeds have urls of the form - * .../photos/${NSID_OR_PATHALIAS}/${PHOTO_ID} & .../people/${NSID_OR_PATHALIAS}. This allows clients to look up a {@link Contact} given such a url. (Note + * .../photos/${NSID_OR_PATHALIAS}/${PHOTO_ID} and .../people/${NSID_OR_PATHALIAS}. This allows clients to look up a {@link Contact} given such a url. (Note * that <author> elements in feeds have a <flickr:nsid> child which could be used instead of the lookup this method * enables.) * diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactList.java b/src/main/java/com/flickr4java/flickr/contacts/ContactList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactList.java rename to src/main/java/com/flickr4java/flickr/contacts/ContactList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java b/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java rename to src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java index d899cbb7..5e27820f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java +++ b/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java @@ -1,11 +1,9 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.contacts; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.util.XMLUtilities; import org.w3c.dom.Element; @@ -36,9 +34,9 @@ public class ContactsInterface { private final String sharedSecret; - private final Transport transportAPI; + private final AbstractTransport transportAPI; - public ContactsInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public ContactsInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -96,11 +94,11 @@ public Collection getList() throws FlickrException { * Limits the resultset to contacts that have uploaded photos since this date. The date should be in the form of a Unix timestamp. The default, * and maximum, offset is (1) hour. (Optional, can be null) * @param filter - * Limit the result set to all contacts or only those who are friends or family.
+ * Limit the result set to all contacts or only those who are friends or family.
* Valid options are: ff -> friends and family, all -> all your contacts. (Optional, can be null) * * @return List of Contacts - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getListRecentlyUploaded(Date lastUpload, String filter) throws FlickrException { List contacts = new ArrayList(); @@ -151,7 +149,7 @@ public Collection getListRecentlyUploaded(Date lastUpload, String filte * @param userId * The user ID * @return The Collection of Contact objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getPublicList(String userId) throws FlickrException { List contacts = new ArrayList(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java b/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java rename to src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java index fa62f54a..3b55706f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java +++ b/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.contacts; import java.io.Serializable; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java b/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java similarity index 89% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java rename to src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java index e4316ae5..fe81ed8e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java +++ b/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java @@ -1,18 +1,16 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.favorites; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photos.PhotoContext; import com.flickr4java.flickr.photos.PhotoList; import com.flickr4java.flickr.photos.PhotoUtils; import com.flickr4java.flickr.util.StringUtilities; - -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -29,7 +27,7 @@ */ public class FavoritesInterface { - private static final Logger logger = Logger.getLogger(FavoritesInterface.class); + private static final Logger logger = LoggerFactory.getLogger(FavoritesInterface.class); public static final String METHOD_ADD = "flickr.favorites.add"; @@ -45,9 +43,9 @@ public class FavoritesInterface { private final String sharedSecret; - private final Transport transportAPI; + private final AbstractTransport transportAPI; - public FavoritesInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public FavoritesInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -58,7 +56,7 @@ public FavoritesInterface(String apiKey, String sharedSecret, Transport transpor * * @param photoId * The photo ID - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void add(String photoId) throws FlickrException { Map parameters = new HashMap(); @@ -77,9 +75,9 @@ public void add(String photoId) throws FlickrException { * @param userId * The optional user ID. Null value will be ignored. * @param perPage - * The optional per page value. Values <= 0 will be ignored. + * The optional per page value. Values {@code <= 0} will be ignored. * @param page - * The page to view. Values <= 0 will be ignored. + * The page to view. Values {@code <= 0} will be ignored. * @param extras * a Set Strings representing extra parameters to send * @return The Collection of Photo objects @@ -130,13 +128,13 @@ public PhotoList getList(String userId, int perPage, int page, Set getPublicList(String userId, int perPage, int page, Set extras) throws FlickrException { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java b/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java rename to src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java index 37ba31cd..aa3ef239 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java +++ b/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java @@ -5,7 +5,7 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.people.User; import com.flickr4java.flickr.photos.Extras; import com.flickr4java.flickr.photos.Photo; @@ -49,7 +49,7 @@ public class GalleriesInterface { private String sharedSecret; - private Transport transport; + private AbstractTransport transport; /** * Construct a GalleriesInterface. @@ -59,7 +59,7 @@ public class GalleriesInterface { * @param transportAPI * The Transport interface */ - public GalleriesInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public GalleriesInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transport = transportAPI; @@ -75,9 +75,9 @@ public GalleriesInterface(String apiKey, String sharedSecret, Transport transpor * @param page * The page number * @return gallery - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * - * @see flickr.galleries.getList + * @see flickr.galleries.getList */ public List getList(String userId, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); @@ -214,7 +214,7 @@ public Gallery getInfo(String strGalleryId) throws FlickrException { * @param strTitle * @param strDescription * @param primaryPhotoId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Gallery create(String strTitle, String strDescription, String primaryPhotoId) throws FlickrException { Map parameters = new HashMap(); @@ -255,7 +255,7 @@ public Gallery create(String strTitle, String strDescription, String primaryPhot * @param page * The page offset (0 to ignore) * @return A Collection of Photo objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getPhotos(String galleryId, Set extras, int perPage, int page) throws FlickrException { PhotoList photos = new PhotoList(); @@ -330,7 +330,7 @@ public PhotoList getPhotos(String galleryId, Set extras, int perP * @param page * The page offset (0 to ignore) * @return A Collection of Photo objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getListForPhoto(String photoId, int perPage, int page) throws FlickrException { PhotoList photos = new PhotoList(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/Gallery.java b/src/main/java/com/flickr4java/flickr/galleries/Gallery.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/Gallery.java rename to src/main/java/com/flickr4java/flickr/galleries/Gallery.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleryList.java b/src/main/java/com/flickr4java/flickr/galleries/GalleryList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleryList.java rename to src/main/java/com/flickr4java/flickr/galleries/GalleryList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Blast.java b/src/main/java/com/flickr4java/flickr/groups/Blast.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Blast.java rename to src/main/java/com/flickr4java/flickr/groups/Blast.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Category.java b/src/main/java/com/flickr4java/flickr/groups/Category.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Category.java rename to src/main/java/com/flickr4java/flickr/groups/Category.java index c0c32125..7a765271 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Category.java +++ b/src/main/java/com/flickr4java/flickr/groups/Category.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.groups; import java.util.Collection; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java b/src/main/java/com/flickr4java/flickr/groups/Group.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java rename to src/main/java/com/flickr4java/flickr/groups/Group.java index 5e395dc5..3be27cc6 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java +++ b/src/main/java/com/flickr4java/flickr/groups/Group.java @@ -1,12 +1,10 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.groups; import com.flickr4java.flickr.util.BuddyIconable; import com.flickr4java.flickr.util.UrlUtilities; - -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Class representing a Flickr Group. @@ -15,7 +13,7 @@ */ public class Group implements BuddyIconable { - private static Logger _log = Logger.getLogger(Group.class); + private static Logger _log = LoggerFactory.getLogger(Group.class); private String id; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupList.java b/src/main/java/com/flickr4java/flickr/groups/GroupList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupList.java rename to src/main/java/com/flickr4java/flickr/groups/GroupList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java b/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java rename to src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java index 30b83eb9..878c36d0 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java @@ -1,14 +1,12 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.groups; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.util.XMLUtilities; - -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -26,7 +24,7 @@ */ public class GroupsInterface { - private static Logger _log = Logger.getLogger(GroupsInterface.class); + private static Logger _log = LoggerFactory.getLogger(GroupsInterface.class); public static final String METHOD_BROWSE = "flickr.groups.browse"; @@ -46,9 +44,9 @@ public class GroupsInterface { private final String sharedSecret; - private final Transport transportAPI; + private final AbstractTransport transportAPI; - public GroupsInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public GroupsInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -60,7 +58,7 @@ public GroupsInterface(String apiKey, String sharedSecret, Transport transportAP * @param catId * The optional category id. Null value will be ignored. * @return The Collection of Photo objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @deprecated Flickr returns just empty results */ @Deprecated @@ -211,7 +209,7 @@ public Group getInfo(String groupId) throws FlickrException { * @param page * The page of results to return. If this argument is 0, it defaults to 1. * @return A GroupList Object. Only the fields id, name and eighteenplus in the Groups will be set. - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection search(String text, int perPage, int page) throws FlickrException { GroupList groupList = new GroupList(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Restriction.java b/src/main/java/com/flickr4java/flickr/groups/Restriction.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Restriction.java rename to src/main/java/com/flickr4java/flickr/groups/Restriction.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Subcategory.java b/src/main/java/com/flickr4java/flickr/groups/Subcategory.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Subcategory.java rename to src/main/java/com/flickr4java/flickr/groups/Subcategory.java index 4ea067f3..987852c6 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Subcategory.java +++ b/src/main/java/com/flickr4java/flickr/groups/Subcategory.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.groups; /** diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Throttle.java b/src/main/java/com/flickr4java/flickr/groups/Throttle.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Throttle.java rename to src/main/java/com/flickr4java/flickr/groups/Throttle.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java b/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java rename to src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java index a491ecd0..012b1d73 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java @@ -2,7 +2,7 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.util.XMLUtilities; import org.w3c.dom.Element; @@ -30,9 +30,9 @@ public class GroupDiscussInterface { private final String sharedSecret; - private final Transport transportAPI; + private final AbstractTransport transportAPI; - public GroupDiscussInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public GroupDiscussInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -42,13 +42,13 @@ public GroupDiscussInterface(String apiKey, String sharedSecret, Transport trans * Get a list of topics from a group. * * @param groupId - * Unique identifier of a group returns a list of topics for a given group {@link Group}. + * Unique identifier of a group returns a list of topics for a given group {@link com.flickr4java.flickr.groups.Group}. * @param perPage * Number of records per page. * @param page * Result-section. * @return A group topic list - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see API Documentation */ public TopicList getTopicsList(String groupId, int perPage, int page) throws FlickrException { @@ -98,7 +98,7 @@ public TopicList getTopicsList(String groupId, int perPage, int page) thr * @param topicId * Unique identifier of a topic for a given group {@link Topic}. * @return A group topic - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see API Documentation */ public Topic getTopicInfo(String topicId) throws FlickrException { @@ -122,7 +122,7 @@ public Topic getTopicInfo(String topicId) throws FlickrException { * @param topicId * Unique identifier of a topic for a given group {@link Topic}. * @return A reply object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see API Documentation */ public ReplyObject getReplyList(String topicId, int perPage, int page) throws FlickrException { @@ -174,7 +174,7 @@ public ReplyObject getReplyList(String topicId, int perPage, int page) throws Fl * @param replyId * Unique identifier of a reply for a given topic {@link Reply}. * @return A group topic - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see API Documentation */ public Reply getReplyInfo(String topicId, String replyId) throws FlickrException { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/Reply.java b/src/main/java/com/flickr4java/flickr/groups/discuss/Reply.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/Reply.java rename to src/main/java/com/flickr4java/flickr/groups/discuss/Reply.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyList.java b/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyList.java rename to src/main/java/com/flickr4java/flickr/groups/discuss/ReplyList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyObject.java b/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyObject.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyObject.java rename to src/main/java/com/flickr4java/flickr/groups/discuss/ReplyObject.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/Topic.java b/src/main/java/com/flickr4java/flickr/groups/discuss/Topic.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/Topic.java rename to src/main/java/com/flickr4java/flickr/groups/discuss/Topic.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/TopicList.java b/src/main/java/com/flickr4java/flickr/groups/discuss/TopicList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/TopicList.java rename to src/main/java/com/flickr4java/flickr/groups/discuss/TopicList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/members/Member.java b/src/main/java/com/flickr4java/flickr/groups/members/Member.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/members/Member.java rename to src/main/java/com/flickr4java/flickr/groups/members/Member.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java b/src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java rename to src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java index 9fcbec16..8edcb15e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java @@ -2,7 +2,7 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.util.StringUtilities; import org.w3c.dom.Element; @@ -25,9 +25,9 @@ public class MembersInterface { private String sharedSecret; - private Transport transportAPI; + private AbstractTransport transportAPI; - public MembersInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public MembersInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -46,7 +46,7 @@ public MembersInterface(String apiKey, String sharedSecret, Transport transportA * @param page * Result-section. * @return A members-list - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see API Documentation */ public MembersList getList(String groupId, Set memberTypes, int perPage, int page) throws FlickrException { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/members/MembersList.java b/src/main/java/com/flickr4java/flickr/groups/members/MembersList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/members/MembersList.java rename to src/main/java/com/flickr4java/flickr/groups/members/MembersList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java b/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java rename to src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java index 65ae548e..cc0b683a 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java @@ -1,11 +1,9 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.groups.pools; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.groups.Group; import com.flickr4java.flickr.groups.GroupList; import com.flickr4java.flickr.photos.Extras; @@ -14,8 +12,8 @@ import com.flickr4java.flickr.photos.PhotoList; import com.flickr4java.flickr.photos.PhotoUtils; import com.flickr4java.flickr.util.StringUtilities; - -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -31,7 +29,7 @@ */ public class PoolsInterface { - private static Logger _log = Logger.getLogger(PoolsInterface.class); + private static Logger _log = LoggerFactory.getLogger(PoolsInterface.class); public static final String METHOD_ADD = "flickr.groups.pools.add"; @@ -47,9 +45,9 @@ public class PoolsInterface { private final String sharedSecret; - private final Transport transport; + private final AbstractTransport transport; - public PoolsInterface(String apiKey, String sharedSecret, Transport transport) { + public PoolsInterface(String apiKey, String sharedSecret, AbstractTransport transport) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transport = transport; @@ -86,7 +84,7 @@ public void add(String photoId, String groupId) throws FlickrException { * @param groupId * The group ID * @return The PhotoContext - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoContext getContext(String photoId, String groupId) throws FlickrException { Map parameters = new HashMap(); @@ -122,7 +120,7 @@ public PhotoContext getContext(String photoId, String groupId) throws FlickrExce * Get a collection of all of the user's groups. * * @return A Collection of Group objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getGroups() throws FlickrException { GroupList groups = new GroupList(); @@ -174,7 +172,7 @@ public Collection getGroups() throws FlickrException { * @param page * The page offset (0 to ignore) * @return A Collection of Photo objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getPhotos(String groupId, String userId, String[] tags, Set extras, int perPage, int page) throws FlickrException { PhotoList photos = new PhotoList(); @@ -244,7 +242,7 @@ public PhotoList getPhotos(String groupId, String userId, String[] tags, * @param page * The page offset (0 to ignore) * @return A Collection of Photo objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getPhotos(String groupId, String[] tags, Set extras, int perPage, int page) throws FlickrException { return getPhotos(groupId, null, tags, extras, perPage, page); @@ -277,7 +275,7 @@ public PhotoList getPhotos(String groupId, String[] tags, int perPage, in * The photo ID * @param groupId * The group ID - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void remove(String photoId, String groupId) throws FlickrException { Map parameters = new HashMap(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java b/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java rename to src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java index 37c3704b..277e5795 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java +++ b/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java @@ -7,7 +7,7 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.photos.Extras; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photos.PhotoList; @@ -54,9 +54,9 @@ protected synchronized SimpleDateFormat initialValue() { private final String sharedSecret; - private final Transport transportAPI; + private final AbstractTransport transportAPI; - public InterestingnessInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public InterestingnessInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -76,7 +76,7 @@ public InterestingnessInterface(String apiKey, String sharedSecret, Transport tr * @param page * The page offset * @return PhotoList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see com.flickr4java.flickr.photos.Extras */ public PhotoList getList(String date, Set extras, int perPage, int page) throws FlickrException { @@ -126,7 +126,7 @@ public PhotoList getList(String date, Set extras, int perPage, in * @param perPage * @param page * @return PhotoList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see com.flickr4java.flickr.photos.Extras */ public PhotoList getList(Date date, Set extras, int perPage, int page) throws FlickrException { @@ -142,7 +142,7 @@ public PhotoList getList(Date date, Set extras, int perPage, int * convenience method to get the list of all 500 most recent photos in flickr explore with all known extra attributes. * * @return a List of Photos - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getList() throws FlickrException { return getList((String) null, Extras.ALL_EXTRAS, 500, 1); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java b/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java rename to src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java index 76b83156..f62553a3 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java +++ b/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java @@ -2,7 +2,7 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.util.XMLUtilities; import org.w3c.dom.Element; @@ -43,18 +43,18 @@ * is the excellent "Flickr Upcoming Event" greasemonkey script: *

* - * {@link http://userscripts.org/scripts/show/5464} + * Flickr Upcoming Event *

* * Dan Catt wrote a very good piece about machine tags - he called them "triple tags" - last year: *

* - * {@link http://geobloggers.com/archives/2006/01/11/advanced-tagging-and-tripletags/} + * Advanced Tagging and TripleTags *

* * Update : Dan's gone and written another excellent piece about all of this stuff now that we've launched machine tags: * - * {@link http://geobloggers.com/archives/2007/01/24/offtopic-ish-flickr-ramps-up-triple-tag-support/} + * Flickr Ramps up Triple Tag (Machine Tags) Support * * *

@@ -130,37 +130,37 @@ *

  • Find photos using the 'dc' namespace: *

    * - * {"machine_tags" => "dc:"}

  • + * {"machine_tags" => "dc:"} * *
  • Find photos with a title in the 'dc' namespace: *

    * - * {"machine_tags" => "dc:title="}

  • + * {"machine_tags" => "dc:title="} * *
  • Find photos titled "mr. camera" in the 'dc' namespace: *

    * - * {"machine_tags" => "dc:title=\"mr. camera\"}

  • + * {"machine_tags" => "dc:title=\"mr. camera\"} * *
  • Find photos whose value is "mr. camera": *

    * - * {"machine_tags" => "*:*=\"mr. camera\""}

  • + * {"machine_tags" => "*:*=\"mr. camera\""} * *
  • Find photos that have a title, in any namespace: *

    * - * {"machine_tags" => "*:title="}

  • + * {"machine_tags" => "*:title="} * *
  • Find photos that have a title, in any namespace, whose value is "mr. camera": *

    * - * {"machine_tags" => "*:title=\"mr. camera\""}

  • + * {"machine_tags" => "*:title=\"mr. camera\""} * *
  • Find photos, in the 'dc' namespace whose value is "mr. camera": *

    * - * {"machine_tags" => "dc:*=\"mr. camera\""}

  • + * {"machine_tags" => "dc:*=\"mr. camera\""} * * *

    Is there a limit to the number of machine tags I can query?

    @@ -215,7 +215,7 @@ * * See also: * - * {@link http://weblog.scifihifi.com/2005/08/05/meta-tags-the-poor-mans-rdf} + * Meta Tags: The Poor Man’s RDF? * *

    Huh, what is RDF?

    * @@ -244,9 +244,9 @@ public class MachinetagsInterface { private final String sharedSecret; - private final Transport transportAPI; + private final AbstractTransport transportAPI; - public MachinetagsInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public MachinetagsInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -261,7 +261,7 @@ public MachinetagsInterface(String apiKey, String sharedSecret, Transport transp * @param perPage * @param page * @return NamespacesList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public NamespacesList getNamespaces(String predicate, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); @@ -309,7 +309,7 @@ public NamespacesList getNamespaces(String predicate, int perPage, in * @param page * The page offset * @return NamespacesList containing Pair-objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public NamespacesList getPairs(String namespace, String predicate, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); @@ -358,7 +358,7 @@ public NamespacesList getPairs(String namespace, String predicate, int per * @param page * The page offset * @return NamespacesList containing Predicate - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public NamespacesList getPredicates(String namespace, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); @@ -406,7 +406,7 @@ public NamespacesList getPredicates(String namespace, int perPage, in * @param page * The page offset * @return NamespacesList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public NamespacesList getValues(String namespace, String predicate, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); @@ -458,7 +458,7 @@ public NamespacesList getValues(String namespace, String predicate, int p * @param addedSince * Only return machine tags values that have been added since this Date. * @return NamespacesList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public NamespacesList getRecentValues(String namespace, String predicate, Date addedSince) throws FlickrException { Map parameters = new HashMap(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/Namespace.java b/src/main/java/com/flickr4java/flickr/machinetags/Namespace.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/Namespace.java rename to src/main/java/com/flickr4java/flickr/machinetags/Namespace.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/NamespacesList.java b/src/main/java/com/flickr4java/flickr/machinetags/NamespacesList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/NamespacesList.java rename to src/main/java/com/flickr4java/flickr/machinetags/NamespacesList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/Pair.java b/src/main/java/com/flickr4java/flickr/machinetags/Pair.java similarity index 89% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/Pair.java rename to src/main/java/com/flickr4java/flickr/machinetags/Pair.java index cc31e17c..95e3e4a6 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/Pair.java +++ b/src/main/java/com/flickr4java/flickr/machinetags/Pair.java @@ -6,10 +6,9 @@ * @version $Id: Pair.java,v 1.2 2009/07/12 22:43:07 x-mago Exp $ */ public class Pair { + public String namespace; - String namespace; - - String predicate; + public String predicate; int usage; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/Predicate.java b/src/main/java/com/flickr4java/flickr/machinetags/Predicate.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/Predicate.java rename to src/main/java/com/flickr4java/flickr/machinetags/Predicate.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/Value.java b/src/main/java/com/flickr4java/flickr/machinetags/Value.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/Value.java rename to src/main/java/com/flickr4java/flickr/machinetags/Value.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/panda/Panda.java b/src/main/java/com/flickr4java/flickr/panda/Panda.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/panda/Panda.java rename to src/main/java/com/flickr4java/flickr/panda/Panda.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java b/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java similarity index 89% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java rename to src/main/java/com/flickr4java/flickr/panda/PandaInterface.java index b7b9ce8f..b5f2478d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java +++ b/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java @@ -2,7 +2,7 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photos.PhotoList; import com.flickr4java.flickr.photos.PhotoUtils; @@ -33,9 +33,9 @@ public class PandaInterface { private String sharedSecret; - private Transport transportAPI; + private AbstractTransport transportAPI; - public PandaInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public PandaInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -48,7 +48,7 @@ public PandaInterface(String apiKey, String sharedSecret, Transport transportAPI * This method does not require authentication. * * @return A list of pandas - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public ArrayList getList() throws FlickrException { ArrayList pandas = new ArrayList(); @@ -84,7 +84,7 @@ public ArrayList getList() throws FlickrException { * @param page * The page offset * @return A PhotoList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see com.flickr4java.flickr.photos.Extras */ public PhotoList getPhotos(Panda panda, Set extras, int perPage, int page) throws FlickrException { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java b/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java similarity index 88% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java rename to src/main/java/com/flickr4java/flickr/people/PeopleInterface.java index 52e3c036..a35e7507 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java +++ b/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java @@ -1,12 +1,9 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.people; -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.groups.Group; import com.flickr4java.flickr.groups.GroupList; import com.flickr4java.flickr.photos.Extras; @@ -30,7 +27,7 @@ /** * Interface for finding Flickr users. - * + * * @author Anthony Eden * @version $Id: PeopleInterface.java,v 1.28 2010/09/12 20:13:57 x-mago Exp $ */ @@ -55,16 +52,16 @@ public class PeopleInterface { public static final String METHOD_GET_PHOTOS_OF = "flickr.people.getPhotosOf"; public static final String METHOD_GET_GROUPS = "flickr.people.getGroups"; - + public static final String METHOD_GET_LIMITS = "flickr.people.getLimits"; private final String apiKey; private final String sharedSecret; - private final Transport transportAPI; + private final AbstractTransport transportAPI; - public PeopleInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public PeopleInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -72,13 +69,13 @@ public PeopleInterface(String apiKey, String sharedSecret, Transport transportAP /** * Find the user by their email address. - * + * * This method does not require authentication. - * + * * @param email * The email address * @return The User - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public User findByEmail(String email) throws FlickrException { Map parameters = new HashMap(); @@ -99,18 +96,18 @@ public User findByEmail(String email) throws FlickrException { /** * Find a User by the username. - * + * * This method does not require authentication. - * + * * @param username * The username * @return The User object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public User findByUsername(String username) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_FIND_BY_USERNAME); - + parameters.put("username", username); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); @@ -126,21 +123,21 @@ public User findByUsername(String username) throws FlickrException { /** * Get info about the specified user. - * + * * This method does not require authentication. - * + * * @param userId * The user ID * @return The User object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public User getInfo(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); - + parameters.put("user_id", userId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -157,6 +154,12 @@ public User getInfo(String userId) throws FlickrException { String lPathAlias = userElement.getAttribute("path_alias"); user.setPathAlias(lPathAlias == null || "".equals(lPathAlias) ? null : lPathAlias); user.setUsername(XMLUtilities.getChildValue(userElement, "username")); + user.setDescription(XMLUtilities.getChildValue(userElement, "description")); + user.setGender(XMLUtilities.getChildValue(userElement, "gender")); + user.setIgnored("1".equals(XMLUtilities.getChildValue(userElement, "ignored"))); + user.setContact("1".equals(XMLUtilities.getChildValue(userElement, "contact"))); + user.setFriend("1".equals(XMLUtilities.getChildValue(userElement, "friend"))); + user.setFamily("1".equals(XMLUtilities.getChildValue(userElement, "family"))); user.setRealName(XMLUtilities.getChildValue(userElement, "realname")); user.setLocation(XMLUtilities.getChildValue(userElement, "location")); user.setMbox_sha1sum(XMLUtilities.getChildValue(userElement, "mbox_sha1sum")); @@ -168,13 +171,14 @@ public User getInfo(String userId) throws FlickrException { user.setPhotosFirstDate(XMLUtilities.getChildValue(photosElement, "firstdate")); user.setPhotosFirstDateTaken(XMLUtilities.getChildValue(photosElement, "firstdatetaken")); user.setPhotosCount(XMLUtilities.getChildValue(photosElement, "count")); - + NodeList tzNodes = userElement.getElementsByTagName("timezone"); for (int i = 0; i < tzNodes.getLength(); i++) { Element tzElement = (Element) tzNodes.item(i); TimeZone tz = new TimeZone(); user.setTimeZone(tz); tz.setLabel(tzElement.getAttribute("label")); + tz.setTimeZoneId(tzElement.getAttribute("timezone_id")); tz.setOffset(tzElement.getAttribute("offset")); } @@ -183,16 +187,16 @@ public User getInfo(String userId) throws FlickrException { /** * Get a collection of public groups for the user. - * + * * The groups will contain only the members nsid, name, admin and eighteenplus. If you want the whole group-information, you have to call * {@link com.flickr4java.flickr.groups.GroupsInterface#getInfo(String)}. - * + * * This method does not require authentication. - * + * * @param userId * The user ID * @return The public groups - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getPublicGroups(String userId) throws FlickrException { List groups = new ArrayList(); @@ -202,7 +206,7 @@ public Collection getPublicGroups(String userId) throws FlickrException { parameters.put("user_id", userId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -226,9 +230,9 @@ public PhotoList getPublicPhotos(String userId, int perPage, int page) th /** * Get a collection of public photos for the specified user ID. - * + * * This method does not require authentication. - * + * * @see com.flickr4java.flickr.photos.Extras * @param userId * The User ID @@ -239,7 +243,7 @@ public PhotoList getPublicPhotos(String userId, int perPage, int page) th * @param page * The page offset * @return The PhotoList collection - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getPublicPhotos(String userId, Set extras, int perPage, int page) throws FlickrException { PhotoList photos = new PhotoList(); @@ -260,7 +264,7 @@ public PhotoList getPublicPhotos(String userId, Set extras, int p parameters.put(Extras.KEY_EXTRAS, StringUtilities.join(extras, ",")); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -280,17 +284,17 @@ public PhotoList getPublicPhotos(String userId, Set extras, int p /** * Get upload status for the currently authenticated user. - * + * * Requires authentication with 'read' permission using the new authentication API. - * + * * @return A User object with upload status data fields filled - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public User getUploadStatus() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_UPLOAD_STATUS); - Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -307,19 +311,18 @@ public User getUploadStatus() throws FlickrException { Element filesizeElement = XMLUtilities.getChild(userElement, "filesize"); user.setFilesizeMax(filesizeElement.getAttribute("max")); - + Element setsElement = XMLUtilities.getChild(userElement, "sets"); user.setSetsCreated(setsElement.getAttribute("created")); user.setSetsRemaining(setsElement.getAttribute("remaining")); - + Element videosElement = XMLUtilities.getChild(userElement, "videos"); user.setVideosUploaded(videosElement.getAttribute("uploaded")); user.setVideosRemaining(videosElement.getAttribute("remaining")); - + Element videoSizeElement = XMLUtilities.getChild(userElement, "videosize"); user.setVideoSizeMax(videoSizeElement.getAttribute("maxbytes")); - return user; } @@ -361,7 +364,7 @@ public PhotoList getPhotos(String userId, String safeSearch, Date minUplo parameters.put(Extras.KEY_EXTRAS, StringUtilities.join(extras, ",")); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -400,7 +403,7 @@ public PhotoList getPhotosOf(String userId, String ownerId, Set e parameters.put("page", "" + page); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -433,11 +436,11 @@ public PhotoList getPhotosOf(String userId, String ownerId, Set e /** * Add the given person to the photo. Optionally, send in co-ordinates - * + * * @param photoId * @param userId * @param bounds - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void add(String photoId, String userId, Rectangle bounds) throws FlickrException { @@ -448,10 +451,10 @@ public void add(String photoId, String userId, Rectangle bounds) throws FlickrEx /** * Delete the person from the photo - * + * * @param photoId * @param userId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void delete(String photoId, String userId) throws FlickrException { @@ -462,10 +465,10 @@ public void delete(String photoId, String userId) throws FlickrException { /** * Delete the co-ordinates that the user is shown in - * + * * @param photoId * @param userId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void deleteCoords(String photoId, String userId) throws FlickrException { @@ -476,11 +479,11 @@ public void deleteCoords(String photoId, String userId) throws FlickrException { /** * Edit the co-ordinates that the user shows in - * + * * @param photoId * @param userId * @param bounds - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void editCoords(String photoId, String userId, Rectangle bounds) throws FlickrException { @@ -491,9 +494,9 @@ public void editCoords(String photoId, String userId, Rectangle bounds) throws F /** * Get a list of people in a given photo. - * + * * @param photoId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PersonTagList getList(String photoId) throws FlickrException { @@ -503,9 +506,9 @@ public PersonTagList getList(String photoId) throws FlickrException { } /** - * + * * @param userId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public GroupList getGroups(String userId) throws FlickrException { @@ -514,7 +517,7 @@ public GroupList getGroups(String userId) throws FlickrException { parameters.put("method", METHOD_GET_GROUPS); parameters.put("user_id", userId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -532,23 +535,25 @@ public GroupList getGroups(String userId) throws FlickrException { group.setAdmin("1".equals(groupElement.getAttribute("admin"))); group.setEighteenPlus("1".equals(groupElement.getAttribute("eighteenplus"))); group.setInvitationOnly("1".equals(groupElement.getAttribute("invitation_only"))); + group.setMembers(groupElement.getAttribute("members")); + group.setPhotoCount(groupElement.getAttribute("pool_count")); groupList.add(group); } return groupList; } - + /** * Get's the user's current upload limits, User object only contains user_id * * @return Media Limits */ - + public User getLimits() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIMITS); - Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PersonTag.java b/src/main/java/com/flickr4java/flickr/people/PersonTag.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/people/PersonTag.java rename to src/main/java/com/flickr4java/flickr/people/PersonTag.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PersonTagList.java b/src/main/java/com/flickr4java/flickr/people/PersonTagList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/people/PersonTagList.java rename to src/main/java/com/flickr4java/flickr/people/PersonTagList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PhotoLimits.java b/src/main/java/com/flickr4java/flickr/people/PhotoLimits.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/people/PhotoLimits.java rename to src/main/java/com/flickr4java/flickr/people/PhotoLimits.java diff --git a/src/main/java/com/flickr4java/flickr/people/TimeZone.java b/src/main/java/com/flickr4java/flickr/people/TimeZone.java new file mode 100644 index 00000000..8ec092a4 --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/people/TimeZone.java @@ -0,0 +1,58 @@ +package com.flickr4java.flickr.people; + +public class TimeZone { + + private String label; + + private String offset; + + private String timeZoneId; + + /** + * Time Zone text + * + * @return the label + */ + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + /** + * Time Zone offset + * + * @return timezone offset value + */ + public String getOffset() { + return offset; + } + + /** + * @deprecated typo in method name, use {@link #getOffset()}. + */ + @Deprecated + public String geOffset() { + return offset; + } + + public void setOffset(String offset) { + this.offset = offset; + } + + /** + * Time Zone id + * + * @return timezone_id offset value + */ + public String getTimeZoneId() { + return timeZoneId; + } + + public void setTimeZoneId(String id) { + this.timeZoneId = id; + } + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java b/src/main/java/com/flickr4java/flickr/people/User.java similarity index 77% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java rename to src/main/java/com/flickr4java/flickr/people/User.java index 52cb85f3..02cb8326 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java +++ b/src/main/java/com/flickr4java/flickr/people/User.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.people; import com.flickr4java.flickr.contacts.OnlineStatus; @@ -31,6 +29,18 @@ protected synchronized SimpleDateFormat initialValue() { private String username; + private String description; + + private String gender; + + private boolean ignored; + + private boolean contact; + + private boolean friend; + + private boolean family; + private boolean admin; private boolean pro; @@ -44,7 +54,7 @@ protected synchronized SimpleDateFormat initialValue() { private String location; private TimeZone timeZone; - + private Date photosFirstDate; private Date photosFirstDateTaken; @@ -60,17 +70,17 @@ protected synchronized SimpleDateFormat initialValue() { private long bandwidthMax; private long bandwidthUsed; - + private Boolean bandwidthUnlimited; - + private String setsCreated; - + private String setsRemaining; - + private String videosUploaded; - + private String videosRemaining; - + private String videoSizeMax; private long filesizeMax; @@ -90,11 +100,10 @@ protected synchronized SimpleDateFormat initialValue() { private boolean revFamily; private String pathAlias; - + private PhotoLimits photoLimits; - + private VideoLimits videoLimits; - public User() { } @@ -115,6 +124,61 @@ public void setUsername(String username) { this.username = username; } + /** + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * @param description + * the description to set + */ + public void setDescription(String description) { + this.description = description; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public boolean isIgnored() { + return ignored; + } + + public void setIgnored(boolean ignored) { + this.ignored = ignored; + } + + public boolean isContact() { + return contact; + } + + public void setContact(boolean contact) { + this.contact = contact; + } + + public boolean isFriend() { + return friend; + } + + public void setFriend(boolean friend) { + this.friend = friend; + } + + public boolean isFamily() { + return family; + } + + public void setFamily(boolean family) { + this.family = family; + } + public boolean isAdmin() { return admin; } @@ -131,28 +195,34 @@ public void setPro(boolean pro) { this.pro = pro; } + @Override public int getIconFarm() { return iconFarm; } + @Override public void setIconFarm(int iconFarm) { this.iconFarm = iconFarm; } + @Override public void setIconFarm(String iconFarm) { if (iconFarm != null) { setIconFarm(Integer.parseInt(iconFarm)); } } + @Override public int getIconServer() { return iconServer; } + @Override public void setIconServer(int iconServer) { this.iconServer = iconServer; } + @Override public void setIconServer(String iconServer) { if (iconServer != null) { setIconServer(Integer.parseInt(iconServer)); @@ -167,12 +237,10 @@ public void setRealName(String realName) { this.realName = realName; } - - public TimeZone getTimeZone() { + public TimeZone getTimeZone() { return timeZone; } - - + public TimeZone setTimeZone(TimeZone string) { return this.timeZone = string; } @@ -186,11 +254,12 @@ public TimeZone setTimeZone(TimeZone string) { * @return The BuddyIconUrl * @deprecated use {@link #getSecureBuddyIconUrl() } */ + @Override @Deprecated public String getBuddyIconUrl() { return UrlUtilities.createBuddyIconUrl(iconFarm, iconServer, id); } - + public String getLocation() { return location; } @@ -207,7 +276,6 @@ public String getSecureBuddyIconUrl() { return UrlUtilities.createSecureBuddyIconUrl(iconFarm, iconServer, id); } - public void setLocation(String location) { this.location = location; } @@ -448,7 +516,7 @@ public boolean isRevFamily() { /** * Get the user's path alias, which may appear instead of nsid in urls published by Flickr. For example feeds have urls of the form - * .../photos/${NSID_OR_PATHALIAS}/${PHOTO_ID} & .../people/${NSID_OR_PATHALIAS}. This allows clients to look up a {@link User} given such a url. (Note that + * .../photos/${NSID_OR_PATHALIAS}/${PHOTO_ID} and .../people/${NSID_OR_PATHALIAS}. This allows clients to look up a {@link User} given such a url. (Note that * <author> elements in feeds have a <flickr:nsid> child which could be used instead of the lookup this method * enables.) * @@ -461,6 +529,7 @@ public String getPathAlias() { public void setPathAlias(String pathAlias) { this.pathAlias = pathAlias; } + /** * @return PhotoLimits class instance */ @@ -471,6 +540,7 @@ public PhotoLimits getPhotoLimits() { public void setPhotoLimits(PhotoLimits photoLimits) { this.photoLimits = photoLimits; } + /** * @return VideoLimits class instance */ @@ -481,54 +551,53 @@ public VideoLimits getVideoLimits() { public void setPhotoLimits(VideoLimits videoLimits) { this.videoLimits = videoLimits; } - public Boolean isBandwidthUnlimited(){ - return bandwidthUnlimited; - } - public void setIsBandwidthUnlimited(Boolean bandwidthUnlimited){ - this.bandwidthUnlimited = bandwidthUnlimited; + + public Boolean isBandwidthUnlimited() { + return bandwidthUnlimited; } - public String getSetsCreated() { - return setsCreated; - } + public void setIsBandwidthUnlimited(Boolean bandwidthUnlimited) { + this.bandwidthUnlimited = bandwidthUnlimited; + } - public void setSetsCreated(String setsCreated) { - this.setsCreated = setsCreated; - } + public String getSetsCreated() { + return setsCreated; + } - public String getSetsRemaining() { - return setsRemaining; - } + public void setSetsCreated(String setsCreated) { + this.setsCreated = setsCreated; + } - public void setSetsRemaining(String setsRemaining) { - this.setsRemaining = setsRemaining; - } + public String getSetsRemaining() { + return setsRemaining; + } - public String getVideosUploaded() { - return videosUploaded; - } + public void setSetsRemaining(String setsRemaining) { + this.setsRemaining = setsRemaining; + } - public void setVideosUploaded(String videosUploaded) { - this.videosUploaded = videosUploaded; - } + public String getVideosUploaded() { + return videosUploaded; + } - public String getVideosRemaining() { - return videosRemaining; - } + public void setVideosUploaded(String videosUploaded) { + this.videosUploaded = videosUploaded; + } - public void setVideosRemaining(String videosRemaining) { - this.videosRemaining = videosRemaining; - } + public String getVideosRemaining() { + return videosRemaining; + } - public String getVideosSizeMax() { - return videoSizeMax; - } + public void setVideosRemaining(String videosRemaining) { + this.videosRemaining = videosRemaining; + } - public void setVideoSizeMax(String videoSizeMax) { - this.videoSizeMax = videoSizeMax; - } + public String getVideosSizeMax() { + return videoSizeMax; + } - + public void setVideoSizeMax(String videoSizeMax) { + this.videoSizeMax = videoSizeMax; + } - } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/UserList.java b/src/main/java/com/flickr4java/flickr/people/UserList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/people/UserList.java rename to src/main/java/com/flickr4java/flickr/people/UserList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/VideoLimits.java b/src/main/java/com/flickr4java/flickr/people/VideoLimits.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/people/VideoLimits.java rename to src/main/java/com/flickr4java/flickr/people/VideoLimits.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Editability.java b/src/main/java/com/flickr4java/flickr/photos/Editability.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Editability.java rename to src/main/java/com/flickr4java/flickr/photos/Editability.java index c378657e..618229df 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Editability.java +++ b/src/main/java/com/flickr4java/flickr/photos/Editability.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; /** diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Exif.java b/src/main/java/com/flickr4java/flickr/photos/Exif.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Exif.java rename to src/main/java/com/flickr4java/flickr/photos/Exif.java index 6d56dcb4..97f5ae4b 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Exif.java +++ b/src/main/java/com/flickr4java/flickr/photos/Exif.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Extras.java b/src/main/java/com/flickr4java/flickr/photos/Extras.java similarity index 96% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Extras.java rename to src/main/java/com/flickr4java/flickr/photos/Extras.java index 154bdee0..58c63426 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Extras.java +++ b/src/main/java/com/flickr4java/flickr/photos/Extras.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; import java.util.HashSet; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/GeoData.java b/src/main/java/com/flickr4java/flickr/photos/GeoData.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/GeoData.java rename to src/main/java/com/flickr4java/flickr/photos/GeoData.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Media.java b/src/main/java/com/flickr4java/flickr/photos/Media.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Media.java rename to src/main/java/com/flickr4java/flickr/photos/Media.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Note.java b/src/main/java/com/flickr4java/flickr/photos/Note.java similarity index 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Note.java rename to src/main/java/com/flickr4java/flickr/photos/Note.java index 53252e11..a4ec3202 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Note.java +++ b/src/main/java/com/flickr4java/flickr/photos/Note.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; import java.awt.Rectangle; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Permissions.java b/src/main/java/com/flickr4java/flickr/photos/Permissions.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Permissions.java rename to src/main/java/com/flickr4java/flickr/photos/Permissions.java index 6cf6ed03..06dbe5cf 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Permissions.java +++ b/src/main/java/com/flickr4java/flickr/photos/Permissions.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; /** diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java b/src/main/java/com/flickr4java/flickr/photos/Photo.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java rename to src/main/java/com/flickr4java/flickr/photos/Photo.java index dfb6aae5..cc18d532 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java +++ b/src/main/java/com/flickr4java/flickr/photos/Photo.java @@ -1,10 +1,9 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.people.User; +import com.flickr4java.flickr.places.Place; import com.flickr4java.flickr.stats.Stats; import com.flickr4java.flickr.stats.StatsInterface; import com.flickr4java.flickr.tags.Tag; @@ -20,6 +19,7 @@ import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Arrays; import java.util.Collection; import java.util.Date; @@ -181,6 +181,14 @@ protected synchronized SimpleDateFormat initialValue() { private boolean hasPeople; + private Place locality; + + private Place county; + + private Place region; + + private Place country; + /** * Stats on views, comments and favorites. Only set on {@link StatsInterface#getPopularPhotos} call. */ @@ -562,7 +570,7 @@ public void setOriginalSecret(String originalSecret) { * @see PhotosInterface#getImage(Photo, int) * @return An Image * @throws IOException - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Deprecated public BufferedImage getOriginalImage() throws IOException, FlickrException { @@ -822,7 +830,8 @@ public String getSiteMP4Url() { public String getVideoOriginalUrl() { if (videoOriginal == null) { - return ""; + // Workaround for API limitations + return String.format("https://www.flickr.com/video_download.gne?id=%s&originalSecret=%s&secret=%s", id, originalSecret, secret); } else { return videoOriginal.getSource(); } @@ -869,7 +878,7 @@ private BufferedImage getImage(String suffix) throws IOException { * The URL suffix, including the .extension * @return The BufferedImage object * @throws IOException - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Deprecated private BufferedImage getOriginalImage(String suffix) throws IOException, FlickrException { @@ -922,7 +931,7 @@ private InputStream getImageAsStream(String suffix) throws IOException { * @param suffix * @return InoutStream * @throws IOException - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Deprecated private InputStream getOriginalImageAsStream(String suffix) throws IOException, FlickrException { @@ -960,7 +969,7 @@ private StringBuffer _getBaseImageUrl() { StringBuffer buffer = new StringBuffer(); buffer.append("https://farm"); buffer.append(getFarm()); - buffer.append(".static.flickr.com/"); + buffer.append(".staticflickr.com/"); buffer.append(getServer()); buffer.append("/"); buffer.append(getId()); @@ -1074,6 +1083,15 @@ else if (size.getLabel() == Size.HD_MP4) { } } + public Collection getSizes() { + return Arrays.asList( + smallSize, squareSize, thumbnailSize, mediumSize, + largeSize, large1600Size, large2048Size, originalSize, + squareLargeSize, small320Size, medium640Size, medium800Size, + videoPlayer, siteMP4, videoOriginal, mobileMP4, hdMP4 + ); + } + public Size getSquareSize() { return squareSize; } @@ -1248,5 +1266,36 @@ public void setIsHasPeople(boolean hasPeople) { this.hasPeople = hasPeople; } + public Place getLocality() { + return locality; + } + + public void setLocality(Place locality) { + this.locality = locality; + } + + public Place getCounty() { + return county; + } + + public void setCounty(Place county) { + this.county = county; + } + + public Place getRegion() { + return region; + } + + public void setRegion(Place region) { + this.region = region; + } + + public Place getCountry() { + return country; + } + + public void setCountry(Place country) { + this.country = country; + } } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoAllContext.java b/src/main/java/com/flickr4java/flickr/photos/PhotoAllContext.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoAllContext.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoAllContext.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoContext.java b/src/main/java/com/flickr4java/flickr/photos/PhotoContext.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoContext.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoContext.java index 03622a6a..9ff3bb04 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoContext.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotoContext.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; /** diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoList.java b/src/main/java/com/flickr4java/flickr/photos/PhotoList.java similarity index 84% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoList.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoList.java index 2367e7eb..194f94eb 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoList.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotoList.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoPlace.java b/src/main/java/com/flickr4java/flickr/photos/PhotoPlace.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoPlace.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoPlace.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoSet.java b/src/main/java/com/flickr4java/flickr/photos/PhotoSet.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoSet.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoSet.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoSetList.java b/src/main/java/com/flickr4java/flickr/photos/PhotoSetList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoSetList.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoSetList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java b/src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java similarity index 84% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java index d4376963..1dfee81c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.photos; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java b/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java similarity index 76% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java index f6c4501e..8716d291 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java @@ -1,15 +1,17 @@ package com.flickr4java.flickr.photos; -import java.util.ArrayList; -import java.util.List; +import com.flickr4java.flickr.people.User; +import com.flickr4java.flickr.places.Place; +import com.flickr4java.flickr.stats.Stats; +import com.flickr4java.flickr.tags.Tag; +import com.flickr4java.flickr.util.XMLUtilities; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.w3c.dom.Text; -import com.flickr4java.flickr.people.User; -import com.flickr4java.flickr.tags.Tag; -import com.flickr4java.flickr.util.XMLUtilities; +import java.util.ArrayList; +import java.util.List; /** * Utilitiy-methods to transfer requested XML to Photo-objects. @@ -73,17 +75,18 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme photo.setLastUpdate(photoElement.getAttribute("lastupdate")); // flickr.groups.pools.getPhotos provides this value! photo.setDateAdded(photoElement.getAttribute("dateadded")); - photo.setOriginalWidth(photoElement.getAttribute("o_width")); - photo.setOriginalHeight(photoElement.getAttribute("o_height")); + photo.setOriginalWidth(photoElement.getAttribute("width_o")); + photo.setOriginalHeight(photoElement.getAttribute("height_o")); photo.setMedia(photoElement.getAttribute("media")); photo.setMediaStatus(photoElement.getAttribute("media_status")); photo.setPathAlias(photoElement.getAttribute("pathalias")); - + photo.setViews(photoElement.getAttribute("views")); + Element peopleElement = (Element) photoElement.getElementsByTagName("people").item(0); - if(peopleElement != null){ - photo.setIsHasPeople("1".equals(peopleElement.getAttribute("haspeople"))); - }else{ - photo.setIsHasPeople(false); + if (peopleElement != null) { + photo.setIsHasPeople("1".equals(peopleElement.getAttribute("haspeople"))); + } else { + photo.setIsHasPeople(false); } // If the attributes active that contain the image-urls, @@ -95,6 +98,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.THUMB); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_t")); + sizeT.setHeight(photoElement.getAttribute("height_t")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_s"); @@ -102,6 +107,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.SMALL); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_s")); + sizeT.setHeight(photoElement.getAttribute("height_s")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_sq"); @@ -109,6 +116,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.SQUARE); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_sq")); + sizeT.setHeight(photoElement.getAttribute("height_sq")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_m"); @@ -116,6 +125,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.MEDIUM); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_m")); + sizeT.setHeight(photoElement.getAttribute("height_m")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_l"); @@ -123,6 +134,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.LARGE); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_l")); + sizeT.setHeight(photoElement.getAttribute("height_l")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_o"); @@ -130,6 +143,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.ORIGINAL); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_o")); + sizeT.setHeight(photoElement.getAttribute("height_o")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_q"); @@ -137,6 +152,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.SQUARE_LARGE); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_q")); + sizeT.setHeight(photoElement.getAttribute("height_q")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_n"); @@ -144,6 +161,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.SMALL_320); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_n")); + sizeT.setHeight(photoElement.getAttribute("height_n")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_z"); @@ -151,6 +170,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.MEDIUM_640); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_z")); + sizeT.setHeight(photoElement.getAttribute("height_z")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_c"); @@ -158,6 +179,26 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.MEDIUM_800); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_c")); + sizeT.setHeight(photoElement.getAttribute("height_c")); + sizes.add(sizeT); + } + urlTmp = photoElement.getAttribute("url_h"); + if (urlTmp != null && urlTmp.startsWith("http")) { + Size sizeT = new Size(); + sizeT.setLabel(Size.LARGE_1600); + sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_h")); + sizeT.setHeight(photoElement.getAttribute("height_h")); + sizes.add(sizeT); + } + urlTmp = photoElement.getAttribute("url_k"); + if (urlTmp != null && urlTmp.startsWith("http")) { + Size sizeT = new Size(); + sizeT.setLabel(Size.LARGE_2048); + sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_k")); + sizeT.setHeight(photoElement.getAttribute("height_k")); sizes.add(sizeT); } if (sizes.size() > 0) { @@ -167,12 +208,12 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme // Searches, or other list may contain orginal_format. // If not choosen via extras, set jpg as default. try { - if (photo.getOriginalFormat() == null || photo.getOriginalFormat().equals("")) { - String media = photo.getMedia(); - if(media != null && media.equals("video")) - photo.setOriginalFormat("mov"); // Currently flickr incorrectly returns original_format as jpg for movies. - else - photo.setOriginalFormat("jpg"); + if (photo.getOriginalFormat() == null || photo.getOriginalFormat().equals("")) { + String media = photo.getMedia(); + if (media != null && media.equals("video")) + photo.setOriginalFormat("mov"); // Currently flickr incorrectly returns original_format as jpg for movies. + else + photo.setOriginalFormat("jpg"); } } catch (NullPointerException e) { photo.setOriginalFormat("jpg"); @@ -255,7 +296,6 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme photo.setDateTaken(photoElement.getAttribute("datetaken")); } - try { Element permissionsElement = (Element) photoElement.getElementsByTagName("permissions").item(0); Permissions permissions = new Permissions(); @@ -266,7 +306,6 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme } catch (NullPointerException e) { // nop } - try { Element editabilityElement = (Element) photoElement.getElementsByTagName("editability").item(0); @@ -278,7 +317,7 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme } catch (NullPointerException e) { // nop } - + try { Element publicEditabilityElement = (Element) photoElement.getElementsByTagName("publiceditability").item(0); Editability publicEditability = new Editability(); @@ -289,11 +328,11 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme } catch (NullPointerException e) { // nop } - + try { Element usageElement = (Element) photoElement.getElementsByTagName("usage").item(0); Usage usage = new Usage(); - + usage.setIsCanBlog("1".equals(usageElement.getAttribute("canblog"))); usage.setIsCanDownload("1".equals(usageElement.getAttribute("candownload"))); usage.setIsCanShare("1".equals(usageElement.getAttribute("canshare"))); @@ -382,9 +421,9 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme photo.setUrl(photoUrl.getUrl()); urls.add(photoUrl.getUrl()); } - + } - + photo.setUrls(urls); } catch (IndexOutOfBoundsException e) { } catch (NullPointerException e) { @@ -416,6 +455,53 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme } } + try { + Place place = null; + Element element = (Element) photoElement.getElementsByTagName("locality").item(0); + place = new Place(element.getAttribute("place_id"), element.getTextContent(), element.getAttribute("woeid")); + photo.setLocality(place); + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { + } + + try { + Place place = null; + Element element = (Element) photoElement.getElementsByTagName("county").item(0); + place = new Place(element.getAttribute("place_id"), element.getTextContent(), element.getAttribute("woeid")); + photo.setCounty(place); + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { + } + + try { + Place place = null; + Element element = (Element) photoElement.getElementsByTagName("region").item(0); + place = new Place(element.getAttribute("place_id"), element.getTextContent(), element.getAttribute("woeid")); + photo.setRegion(place); + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { + } + + try { + Place place = null; + Element element = (Element) photoElement.getElementsByTagName("country").item(0); + place = new Place(element.getAttribute("place_id"), element.getTextContent(), element.getAttribute("woeid")); + photo.setCountry(place); + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { + } + + //set stats from extras (count_faves,count_comments,count_views) + try { + Stats stats = new Stats();; + stats.setFavorites(photoElement.getAttribute("count_faves")); + stats.setComments(photoElement.getAttribute("count_comments")); + stats.setViews(photoElement.getAttribute("count_views")); + photo.setStats(stats); + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { + } + return photo; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photocount.java b/src/main/java/com/flickr4java/flickr/photos/Photocount.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photocount.java rename to src/main/java/com/flickr4java/flickr/photos/Photocount.java index 4e95e7b3..a4a16d2f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photocount.java +++ b/src/main/java/com/flickr4java/flickr/photos/Photocount.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; import java.util.Date; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java b/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java similarity index 89% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java rename to src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java index 7155ac81..8ce051bb 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java @@ -1,13 +1,11 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.REST; import com.flickr4java.flickr.RequestContext; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.people.User; import com.flickr4java.flickr.photos.geo.GeoInterface; import com.flickr4java.flickr.util.IOUtilities; @@ -18,11 +16,11 @@ import org.w3c.dom.NodeList; import javax.imageio.ImageIO; +import javax.net.ssl.HttpsURLConnection; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; -import java.net.HttpURLConnection; import java.net.URL; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -110,9 +108,9 @@ protected synchronized SimpleDateFormat initialValue() { private final String sharedSecret; - private final Transport transport; + private final AbstractTransport transport; - public PhotosInterface(String apiKey, String sharedSecret, Transport transport) { + public PhotosInterface(String apiKey, String sharedSecret, AbstractTransport transport) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transport = transport; @@ -139,7 +137,7 @@ public synchronized GeoInterface getGeoInterface() { * The photo ID * @param tags * The tags - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void addTags(String photoId, String[] tags) throws FlickrException { Map parameters = new HashMap(); @@ -160,7 +158,7 @@ public void addTags(String photoId, String[] tags) throws FlickrException { * This method requires authentication with 'delete' permission. * * @param photoId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void delete(String photoId) throws FlickrException { Map parameters = new HashMap(); @@ -185,13 +183,13 @@ public void delete(String photoId) throws FlickrException { * @param photoId * The photo to return information for. * @return a list of {@link PhotoContext} objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoAllContext getAllContexts(String photoId) throws FlickrException { - PhotoSetList setList = new PhotoSetList(); - PoolList poolList = new PoolList(); - PhotoAllContext allContext = new PhotoAllContext(); - + PhotoSetList setList = new PhotoSetList(); + PoolList poolList = new PoolList(); + PhotoAllContext allContext = new PhotoAllContext(); + Map parameters = new HashMap(); parameters.put("method", METHOD_GET_ALL_CONTEXTS); @@ -203,35 +201,35 @@ public PhotoAllContext getAllContexts(String photoId) throws FlickrException { } Collection photosElement = response.getPayloadCollection(); - for (Element setElement : photosElement) { - if(setElement.getTagName().equals("set")){ - PhotoSet pset = new PhotoSet(); - pset.setTitle(setElement.getAttribute("title")); - pset.setSecret(setElement.getAttribute("secret")); - pset.setId(setElement.getAttribute("id")); - pset.setFarm(setElement.getAttribute("farm")); - pset.setPrimary(setElement.getAttribute("primary")); - pset.setServer(setElement.getAttribute("server")); - pset.setViewCount(Integer.parseInt(setElement.getAttribute("view_count"))); - pset.setCommentCount(Integer.parseInt(setElement.getAttribute("comment_count"))); - pset.setCountPhoto(Integer.parseInt(setElement.getAttribute("count_photo"))); - pset.setCountVideo(Integer.parseInt(setElement.getAttribute("count_video"))); - setList.add(pset); - allContext.setPhotoSetList(setList); - }else if(setElement.getTagName().equals("pool")){ - Pool pool = new Pool(); - pool.setTitle(setElement.getAttribute("title")); - pool.setId(setElement.getAttribute("id")); - pool.setUrl(setElement.getAttribute("url")); - pool.setIconServer(setElement.getAttribute("iconserver")); - pool.setIconFarm(setElement.getAttribute("iconfarm")); - pool.setMemberCount(Integer.parseInt(setElement.getAttribute("members"))); - pool.setPoolCount(Integer.parseInt(setElement.getAttribute("pool_count"))); - poolList.add(pool); - allContext.setPoolList(poolList); - } - } - + for (Element setElement : photosElement) { + if (setElement.getTagName().equals("set")) { + PhotoSet pset = new PhotoSet(); + pset.setTitle(setElement.getAttribute("title")); + pset.setSecret(setElement.getAttribute("secret")); + pset.setId(setElement.getAttribute("id")); + pset.setFarm(setElement.getAttribute("farm")); + pset.setPrimary(setElement.getAttribute("primary")); + pset.setServer(setElement.getAttribute("server")); + pset.setViewCount(Integer.parseInt(setElement.getAttribute("view_count"))); + pset.setCommentCount(Integer.parseInt(setElement.getAttribute("comment_count"))); + pset.setCountPhoto(Integer.parseInt(setElement.getAttribute("count_photo"))); + pset.setCountVideo(Integer.parseInt(setElement.getAttribute("count_video"))); + setList.add(pset); + allContext.setPhotoSetList(setList); + } else if (setElement.getTagName().equals("pool")) { + Pool pool = new Pool(); + pool.setTitle(setElement.getAttribute("title")); + pool.setId(setElement.getAttribute("id")); + pool.setUrl(setElement.getAttribute("url")); + pool.setIconServer(setElement.getAttribute("iconserver")); + pool.setIconFarm(setElement.getAttribute("iconfarm")); + pool.setMemberCount(Integer.parseInt(setElement.getAttribute("members"))); + pool.setPoolCount(Integer.parseInt(setElement.getAttribute("pool_count"))); + poolList.add(pool); + allContext.setPoolList(poolList); + } + } + return allContext; } @@ -250,7 +248,7 @@ public PhotoAllContext getAllContexts(String photoId) throws FlickrException { * @param includeSelf * Set to true to include self * @return The Collection of photos - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getContactsPhotos(int count, boolean justFriends, boolean singlePhoto, boolean includeSelf) throws FlickrException { PhotoList photos = new PhotoList(); @@ -305,7 +303,7 @@ public PhotoList getContactsPhotos(int count, boolean justFriends, boolea * @param includeSelf * True to include self * @return A collection of Photo objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getContactsPublicPhotos(String userId, int count, boolean justFriends, boolean singlePhoto, boolean includeSelf) throws FlickrException { @@ -371,7 +369,7 @@ public PhotoList getContactsPublicPhotos(String userId, Set extra * @param photoId * The photo ID * @return The PhotoContext - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoContext getContext(String photoId) throws FlickrException { Map parameters = new HashMap(); @@ -474,7 +472,7 @@ public Collection getCounts(Date[] dates, Date[] takenDates) throws * @param secret * The secret * @return A collection of Exif objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getExif(String photoId, String secret) throws FlickrException { Map parameters = new HashMap(); @@ -562,7 +560,7 @@ public Collection getFavorites(String photoId, int perPage, int page) thro * @param secret * The optional secret String * @return The Photo - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Photo getInfo(String photoId, String secret) throws FlickrException { Map parameters = new HashMap(); @@ -592,7 +590,7 @@ public Photo getInfo(String photoId, String secret) throws FlickrException { * @param page * The page * @return The collection of Photo objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getNotInSet(int perPage, int page) throws FlickrException { PhotoList photos = new PhotoList(); @@ -640,7 +638,7 @@ public PhotoList getNotInSet(int perPage, int page) throws FlickrExceptio * @param photoId * The photo id * @return The Permissions object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Permissions getPerms(String photoId) throws FlickrException { Map parameters = new HashMap(); @@ -676,7 +674,7 @@ public Permissions getPerms(String photoId) throws FlickrException { * @param page * The page offset * @return A collection of Photo objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getRecent(Set extras, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); @@ -711,7 +709,7 @@ public PhotoList getRecent(Set extras, int perPage, int page) thr * @param photoId * The photo ID * @return A collection of {@link Size} - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getSizes(String photoId) throws FlickrException { return getSizes(photoId, false); @@ -729,12 +727,12 @@ public Collection getSizes(String photoId) throws FlickrException { * @param sign * toggle to allow optionally signing the call (Authenticate) * @return A collection of {@link Size} - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getSizes(String photoId, boolean sign) throws FlickrException { - SizeList sizes = new SizeList(); + SizeList sizes = new SizeList<>(); - Map parameters = new HashMap(); + Map parameters = new HashMap<>(); parameters.put("method", METHOD_GET_SIZES); parameters.put("photo_id", photoId); @@ -770,7 +768,7 @@ public Collection getSizes(String photoId, boolean sign) throws FlickrExce * @param perPage * @param page * @return A Collection of Photos - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getUntagged(int perPage, int page) throws FlickrException { Map parameters = new HashMap(); @@ -811,7 +809,7 @@ public PhotoList getUntagged(int perPage, int page) throws FlickrExceptio *
  • 1 public photos
  • *
  • 2 private photos visible to friends
  • *
  • 3 private photos visible to family
  • - *
  • 4 private photos visible to friends & family
  • + *
  • 4 private photos visible to friends and family
  • *
  • 5 completely private photos
  • * * Set to 0 to not specify a privacy Filter. @@ -828,7 +826,7 @@ public PhotoList getUntagged(int perPage, int page) throws FlickrExceptio * @param page * The page of results to return. If this argument is 0, it defaults to 1. * @return photos - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getWithGeoData(Date minUploadDate, Date maxUploadDate, Date minTakenDate, Date maxTakenDate, int privacyFilter, String sort, Set extras, int perPage, int page) throws FlickrException { @@ -891,7 +889,7 @@ public PhotoList getWithGeoData(Date minUploadDate, Date maxUploadDate, D *
  • 1 public photos
  • *
  • 2 private photos visible to friends
  • *
  • 3 private photos visible to family
  • - *
  • 4 private photos visible to friends & family
  • + *
  • 4 private photos visible to friends and family
  • *
  • 5 completely private photos
  • * * Set to 0 to not specify a privacy Filter. @@ -908,7 +906,7 @@ public PhotoList getWithGeoData(Date minUploadDate, Date maxUploadDate, D * @param page * The page of results to return. If this argument is 0, it defaults to 1. * @return a photo list - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getWithoutGeoData(Date minUploadDate, Date maxUploadDate, Date minTakenDate, Date maxTakenDate, int privacyFilter, String sort, Set extras, int perPage, int page) throws FlickrException { @@ -969,7 +967,7 @@ public PhotoList getWithoutGeoData(Date minUploadDate, Date maxUploadDate * @param page * The page of results to return. If this argument is 0, it defaults to 1. * @return a list of photos - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList recentlyUpdated(Date minDate, Set extras, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); @@ -1003,7 +1001,7 @@ public PhotoList recentlyUpdated(Date minDate, Set extras, int pe * * @param tagId * The tag ID - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void removeTag(String tagId) throws FlickrException { Map parameters = new HashMap(); @@ -1027,7 +1025,7 @@ public void removeTag(String tagId) throws FlickrException { * @param page * The page offset * @return A PhotoList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList search(SearchParameters params, int perPage, int page) throws FlickrException { PhotoList photos = new PhotoList(); @@ -1072,7 +1070,7 @@ public PhotoList search(SearchParameters params, int perPage, int page) t * @param page * The page to start on * @return A PhotoList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList searchInterestingness(SearchParameters params, int perPage, int page) throws FlickrException { PhotoList photos = new PhotoList(); @@ -1133,7 +1131,7 @@ public PhotoList searchInterestingness(SearchParameters params, int perPa * The photo ID * @param contentType * The contentType to set - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void setContentType(String photoId, String contentType) throws FlickrException { Map parameters = new HashMap(); @@ -1161,7 +1159,7 @@ public void setContentType(String photoId, String contentType) throws FlickrExce * The date the photo was taken or null * @param dateTakenGranularity * The granularity of the taken date or null - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void setDates(String photoId, Date datePosted, Date dateTaken, String dateTakenGranularity) throws FlickrException { Map parameters = new HashMap(); @@ -1198,7 +1196,7 @@ public void setDates(String photoId, Date datePosted, Date dateTaken, String dat * The new title * @param description * The new description - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void setMeta(String photoId, String title, String description) throws FlickrException { Map parameters = new HashMap(); @@ -1223,7 +1221,7 @@ public void setMeta(String photoId, String title, String description) throws Fli * The photo ID * @param permissions * The permissions object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void setPerms(String photoId, Permissions permissions) throws FlickrException { Map parameters = new HashMap(); @@ -1257,7 +1255,7 @@ public void setPerms(String photoId, Permissions permissions) throws FlickrExcep * @see com.flickr4java.flickr.Flickr#SAFETYLEVEL_SAFE * @see com.flickr4java.flickr.Flickr#SAFETYLEVEL_MODERATE * @see com.flickr4java.flickr.Flickr#SAFETYLEVEL_RESTRICTED - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void setSafetyLevel(String photoId, String safetyLevel, Boolean hidden) throws FlickrException { Map parameters = new HashMap(); @@ -1288,7 +1286,7 @@ public void setSafetyLevel(String photoId, String safetyLevel, Boolean hidden) t * The photo ID * @param tags * The tag array - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void setTags(String photoId, String[] tags) throws FlickrException { Map parameters = new HashMap(); @@ -1339,7 +1337,7 @@ public Photo getPhoto(String id, String secret) throws FlickrException { * @param size * The Size * @return InputStream The InputStream - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public InputStream getImageAsStream(Photo photo, int size) throws FlickrException { try { @@ -1369,22 +1367,20 @@ public InputStream getImageAsStream(Photo photo, int size) throws FlickrExceptio } else if (size == Size.MEDIUM_800) { urlStr = photo.getMedium800Url(); } else if (size == Size.VIDEO_ORIGINAL) { - urlStr = photo.getVideoOriginalUrl(); + urlStr = photo.getVideoOriginalUrl(); } else if (size == Size.VIDEO_PLAYER) { - urlStr = photo.getVideoPlayerUrl(); + urlStr = photo.getVideoPlayerUrl(); } else if (size == Size.SITE_MP4) { - urlStr = photo.getSiteMP4Url(); - } - else if(size == Size.MOBILE_MP4) { - urlStr = photo.getMobileMp4Url(); - } - else if(size == Size.HD_MP4) { - urlStr = photo.getHdMp4Url(); - } else { + urlStr = photo.getSiteMP4Url(); + } else if (size == Size.MOBILE_MP4) { + urlStr = photo.getMobileMp4Url(); + } else if (size == Size.HD_MP4) { + urlStr = photo.getHdMp4Url(); + } else { throw new FlickrException("0", "Unknown Photo-size"); } URL url = new URL(urlStr); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); if (transport instanceof REST) { if (((REST) transport).isProxyAuth()) { conn.setRequestProperty("Proxy-Authorization", "Basic " + ((REST) transport).getProxyCredentials()); @@ -1408,7 +1404,7 @@ else if(size == Size.HD_MP4) { * @param size * The size * @return An Image - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public BufferedImage getImage(Photo photo, int size) throws FlickrException { try { @@ -1429,7 +1425,7 @@ public BufferedImage getImage(String urlStr) throws FlickrException { InputStream in = null; try { URL url = new URL(urlStr); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); if (transport instanceof REST) { if (((REST) transport).isProxyAuth()) { conn.setRequestProperty("Proxy-Authorization", "Basic " + ((REST) transport).getProxyCredentials()); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Pool.java b/src/main/java/com/flickr4java/flickr/photos/Pool.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Pool.java rename to src/main/java/com/flickr4java/flickr/photos/Pool.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PoolList.java b/src/main/java/com/flickr4java/flickr/photos/PoolList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PoolList.java rename to src/main/java/com/flickr4java/flickr/photos/PoolList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java b/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java rename to src/main/java/com/flickr4java/flickr/photos/SearchParameters.java index 94955fd8..0b5c850a 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java +++ b/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java @@ -1,642 +1,722 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -package com.flickr4java.flickr.photos; - -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.util.StringUtilities; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -/** - * @author Anthony Eden - * @version $Id: SearchParameters.java,v 1.20 2009/07/23 20:41:03 x-mago Exp $ - */ -public class SearchParameters { - - private String userId; - - private String groupId; - - private String woeId; - - private String media; - - private String contacts; - - private String[] tags; - - private String tagMode; - - private String text; - - private Date minUploadDate; - - private Date maxUploadDate; - - private Date minTakenDate; - - private Date maxTakenDate; - - private Date interestingnessDate; - - private String license; - - private Set extras; - - private String[] bbox; - - private String placeId; - - private int accuracy = 0; - - private String safeSearch; - - private String[] machineTags; - - private String machineTagMode; - - private String latitude; - - private String longitude; - - private int radius = -1; - - private String radiusUnits; - - private boolean hasGeo = false; - - public static final ThreadLocal DATE_FORMATS = new ThreadLocal() { - @Override - protected synchronized SimpleDateFormat initialValue() { - return new SimpleDateFormat("yyyy-MM-dd"); - } - }; - - public static final ThreadLocal MYSQL_DATE_FORMATS = new ThreadLocal() { - @Override - protected synchronized SimpleDateFormat initialValue() { - return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - } - }; - - /** order argument */ - public static int DATE_POSTED_DESC = 0; - - /** order argument */ - public static int DATE_POSTED_ASC = 1; - - /** order argument */ - public static int DATE_TAKEN_DESC = 2; - - /** order argument */ - public static int DATE_TAKEN_ASC = 3; - - /** order argument */ - public static int INTERESTINGNESS_DESC = 4; - - /** order argument */ - public static int INTERESTINGNESS_ASC = 5; - - /** order argument */ - public static int RELEVANCE = 6; - - private int sort = 0; - - public SearchParameters() { - - } - - /** - * Optional to use, if BBox is set. - *

    - * Defaults to maximum value if not specified. - * - * @param accuracy - * from 1 to 16 - * @see com.flickr4java.flickr.Flickr#ACCURACY_WORLD - * @see com.flickr4java.flickr.Flickr#ACCURACY_COUNTRY - * @see com.flickr4java.flickr.Flickr#ACCURACY_REGION - * @see com.flickr4java.flickr.Flickr#ACCURACY_CITY - * @see com.flickr4java.flickr.Flickr#ACCURACY_STREET - */ - public void setAccuracy(int accuracy) { - this.accuracy = accuracy; - } - - public int getAccuracy() { - return accuracy; - } - - public String getGroupId() { - return groupId; - } - - /** - * The id of a group who's pool to search. If specified, only matching photos posted to the group's pool will be returned. - * - * @param groupId - */ - public void setGroupId(String groupId) { - this.groupId = groupId; - } - - /** - * Any photo that has been geotagged. - *

    - * - * Geo queries require some sort of limiting agent in order to prevent the database from crying. This is basically like the check against - * "parameterless searches" for queries without a geo component. - *

    - * - * A tag, for instance, is considered a limiting agent as are user defined min_date_taken and min_date_upload parameters &emdash; If no limiting factor is - * passed flickr will return only photos added in the last 12 hours (though flickr may extend the limit in the future). - * - * @param hasGeo - */ - public void setHasGeo(boolean hasGeo) { - this.hasGeo = hasGeo; - } - - public boolean getHasGeo() { - return hasGeo; - } - - public String[] getTags() { - return tags; - } - - public void setTags(String[] tags) { - this.tags = tags; - } - - public String getTagMode() { - return tagMode; - } - - public void setTagMode(String tagMode) { - this.tagMode = tagMode; - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - public Date getMinUploadDate() { - return minUploadDate; - } - - public void setMinUploadDate(Date minUploadDate) { - this.minUploadDate = minUploadDate; - } - - public Date getMaxUploadDate() { - return maxUploadDate; - } - - public void setMaxUploadDate(Date maxUploadDate) { - this.maxUploadDate = maxUploadDate; - } - - public Date getMinTakenDate() { - return minTakenDate; - } - - public void setMinTakenDate(Date minTakenDate) { - this.minTakenDate = minTakenDate; - } - - public Date getMaxTakenDate() { - return maxTakenDate; - } - - public void setMaxTakenDate(Date maxTakenDate) { - this.maxTakenDate = maxTakenDate; - } - - public String getLicense() { - return license; - } - - public void setLicense(String license) { - this.license = license; - } - - public Date getInterestingnessDate() { - return interestingnessDate; - } - - /** - * Set the date, for which interesting Photos to request. - * - * @param intrestingnessDate - */ - public void setInterestingnessDate(Date intrestingnessDate) { - this.interestingnessDate = intrestingnessDate; - } - - /** - * Set the machine tags, for which Photos to request. - * - * @param tags - */ - public void setMachineTags(String[] tags) { - this.machineTags = tags; - } - - public String[] getMachineTags() { - return machineTags; - } - - /** - * Set the machine tags search mode to use when requesting photos - * - * @param tagMode - */ - public void setMachineTagMode(String tagMode) { - this.machineTagMode = tagMode; - } - - public String getMachineTagMode() { - return machineTagMode; - } - - /** - * List of extra information to fetch for each returned record. Currently supported fields are: license, date_upload, date_taken, owner_name, icon_server, - * original_format, last_update, geo, tags, machine_tags, o_dims, views, media, path_alias, url_sq, url_t, url_s, url_m, url_l, url_o - * - * @param extras - * A set of extra-attributes - * @see com.flickr4java.flickr.photos.Extras#ALL_EXTRAS - * @see com.flickr4java.flickr.photos.Extras#MIN_EXTRAS - */ - public void setExtras(Set extras) { - this.extras = extras; - } - - /** - * 4 values defining the Bounding Box of the area that will be searched. - *

    - * The 4 values represent the bottom-left corner of the box and the top-right corner, minimum_longitude, minimum_latitude, maximum_longitude, - * maximum_latitude. - *

    - * - * Longitude has a range of -180 to 180, latitude of -90 to 90. Defaults to -180, -90, 180, 90 if not specified. - *

    - * - * Unlike standard photo queries, geo (or bounding box) queries will only return 250 results per page. - *

    - * - * Geo queries require some sort of limiting agent in order to prevent the database from crying. This is basically like the check against - * "parameterless searches" for queries without a geo component. - *

    - * - * A tag, for instance, is considered a limiting agent as are user defined min_date_taken and min_date_upload parameters. If no limiting factor is passed - * flickr returns only photos added in the last 12 hours (though flickr may extend the limit in the future). - * - * @param minimum_longitude - * @param minimum_latitude - * @param maximum_longitude - * @param maximum_latitude - */ - public void setBBox(String minimum_longitude, String minimum_latitude, String maximum_longitude, String maximum_latitude) { - this.bbox = new String[] { minimum_longitude, minimum_latitude, maximum_longitude, maximum_latitude }; - } - - public String[] getBBox() { - return bbox; - } - - /** - * Optional safe search setting.
    - * Un-authed calls can only see Safe content. - * - * @param level - * 1, 2 or 3 - * @see com.flickr4java.flickr.Flickr#SAFETYLEVEL_SAFE - * @see com.flickr4java.flickr.Flickr#SAFETYLEVEL_MODERATE - * @see com.flickr4java.flickr.Flickr#SAFETYLEVEL_RESTRICTED - */ - public void setSafeSearch(String level) { - this.safeSearch = level; - } - - public String getSafeSearch() { - return safeSearch; - } - - public int getSort() { - return sort; - } - - /** - * Set the sort-order. - *

    - * The default is DATE_POSTED_DESC - * - * @see com.flickr4java.flickr.photos.SearchParameters#DATE_POSTED_ASC - * @see com.flickr4java.flickr.photos.SearchParameters#DATE_POSTED_DESC - * @see com.flickr4java.flickr.photos.SearchParameters#DATE_TAKEN_ASC - * @see com.flickr4java.flickr.photos.SearchParameters#DATE_TAKEN_DESC - * @see com.flickr4java.flickr.photos.SearchParameters#INTERESTINGNESS_ASC - * @see com.flickr4java.flickr.photos.SearchParameters#INTERESTINGNESS_DESC - * @see com.flickr4java.flickr.photos.SearchParameters#RELEVANCE - * @param order - */ - public void setSort(int order) { - this.sort = order; - } - - /** - * @return A placeId - * @see com.flickr4java.flickr.places.PlacesInterface#resolvePlaceId(String) - */ - public String getPlaceId() { - return placeId; - } - - /** - * PlaceId only used when bbox not set. - * - * Geo queries require some sort of limiting agent in order to prevent the database from crying. This is basically like the check against - * "parameterless searches" for queries without a geo component. - *

    - * - * A tag, for instance, is considered a limiting agent as are user defined min_date_taken and min_date_upload parameters &emdash; If no limiting factor is - * passed we return only photos added in the last 12 hours (though we may extend the limit in the future). - * - * @param placeId - * @see com.flickr4java.flickr.places.PlacesInterface#resolvePlaceId(String) - * @see com.flickr4java.flickr.places.Place#getPlaceId() - * @see com.flickr4java.flickr.places.Location#getPlaceId() - */ - public void setPlaceId(String placeId) { - this.placeId = placeId; - } - - public String getWoeId() { - return woeId; - } - - /** - * A Where on Earth identifier to use to filter photo clusters.
    - * For example all the photos clustered by locality in the United States (WOE ID 23424977).
    - * (not used if bbox argument is present). - *

    - * - * Geo queries require some sort of limiting agent in order to prevent the database from crying. This is basically like the check against - * "parameterless searches" for queries without a geo component. - *

    - * - * A tag, for instance, is considered a limiting agent as are user defined min_date_taken and min_date_upload parameters. If no limiting factor is passed we - * return only photos added in the last 12 hours (though flickr may extend the limit in the future). - *

    - * - * @param woeId - * @see com.flickr4java.flickr.places.Place#getWoeId() - * @see com.flickr4java.flickr.places.Location#getWoeId() - */ - public void setWoeId(String woeId) { - this.woeId = woeId; - } - - public String getMedia() { - return media; - } - - /** - * Filter results by media type. Possible values are all (default), photos or videos. - * - * @param media - */ - public void setMedia(String media) throws FlickrException { - if (media.equals("all") || media.equals("photos") || media.equals("videos")) { - this.media = media; - } else { - throw new FlickrException("0", "Media type is not valid."); - } - } - - public String getContacts() { - return contacts; - } - - /** - * Search your contacts. Valid arguments are either 'all' or 'ff' for just friends and family. - *

    - * - * It requires that the "user_id" field also be set and allows you to limit queries to only photos belonging to that user's photos. As in : All my contacts - * photos tagged "aaron". (Experimental) - * - * @param contacts - */ - public void setContacts(String contacts) { - this.contacts = contacts; - } - - public Map getAsParameters() { - Map parameters = new HashMap(); - - String lat = getLatitude(); - if (lat != null) { - parameters.put("lat", lat); - } - - String lon = getLongitude(); - if (lon != null) { - parameters.put("lon", lon); - } - - int radius = getRadius(); - if (radius > 0) { - parameters.put("radius", Integer.toString(radius)); - } - - String radiusUnits = getRadiusUnits(); - if (radiusUnits != null) { - parameters.put("radius_units", radiusUnits); - } - - String media = getMedia(); - if (media != null) { - parameters.put("media", media); - } - - String userId = getUserId(); - if (userId != null) { - parameters.put("user_id", userId); - String contacts = getContacts(); - if (contacts != null) { - parameters.put("contacts", contacts); - } - } - - String groupId = getGroupId(); - if (groupId != null) { - parameters.put("group_id", groupId); - } - - String[] tags = getTags(); - if (tags != null) { - parameters.put("tags", StringUtilities.join(tags, ",")); - } - - String tagMode = getTagMode(); - if (tagMode != null) { - parameters.put("tag_mode", tagMode); - } - - String[] mtags = getMachineTags(); - if (mtags != null) { - parameters.put("machine_tags", StringUtilities.join(mtags, ",")); - } - - String mtagMode = getMachineTagMode(); - if (mtagMode != null) { - parameters.put("machine_tag_mode", mtagMode); - } - - String text = getText(); - if (text != null) { - parameters.put("text", text); - } - - Date minUploadDate = getMinUploadDate(); - if (minUploadDate != null) { - parameters.put("min_upload_date", Long.toString(minUploadDate.getTime() / 1000L)); - } - - Date maxUploadDate = getMaxUploadDate(); - if (maxUploadDate != null) { - parameters.put("max_upload_date", Long.toString(maxUploadDate.getTime() / 1000L)); - } - - Date minTakenDate = getMinTakenDate(); - if (minTakenDate != null) { - parameters.put("min_taken_date", ((DateFormat) MYSQL_DATE_FORMATS.get()).format(minTakenDate)); - } - - Date maxTakenDate = getMaxTakenDate(); - if (maxTakenDate != null) { - parameters.put("max_taken_date", ((DateFormat) MYSQL_DATE_FORMATS.get()).format(maxTakenDate)); - } - - String license = getLicense(); - if (license != null) { - parameters.put("license", license); - } - - Date intrestingnessDate = getInterestingnessDate(); - if (intrestingnessDate != null) { - parameters.put("date", ((DateFormat) DATE_FORMATS.get()).format(intrestingnessDate)); - } - - String[] bbox = getBBox(); - if (bbox != null) { - parameters.put("bbox", StringUtilities.join(bbox, ",")); - if (accuracy > 0) { - parameters.put("accuracy", Integer.toString(accuracy)); - } - } else { - String woeId = getWoeId(); - if (woeId != null) { - parameters.put("woe_id", woeId); - } - } - - String safeSearch = getSafeSearch(); - if (safeSearch != null) { - parameters.put("safe_search", safeSearch); - } - - boolean hasGeo = getHasGeo(); - if (hasGeo) { - parameters.put("has_geo", "true"); - } - - if (extras != null && !extras.isEmpty()) { - parameters.put("extras", StringUtilities.join(extras, ",")); - } - - if (sort != DATE_POSTED_DESC) { - String sortArg = null; - if (sort == DATE_POSTED_ASC) { - sortArg = "date-posted-asc"; - } - if (sort == DATE_TAKEN_DESC) { - sortArg = "date-taken-desc"; - } - if (sort == DATE_TAKEN_ASC) { - sortArg = "date-taken-asc"; - } - if (sort == INTERESTINGNESS_DESC) { - sortArg = "interestingness-desc"; - } - if (sort == INTERESTINGNESS_ASC) { - sortArg = "interestingness-asc"; - } - if (sort == RELEVANCE) { - sortArg = "relevance"; - } - if (sortArg != null) { - parameters.put("sort", sortArg); - } - } - - if (placeId != null && !placeId.isEmpty()) { - parameters.put("place_id", placeId); - } - - return parameters; - } - - public void setLatitude(String lat) { - latitude = lat; - } - - public void setRadius(int r) { - radius = r; - } - - public void setLongitude(String lon) { - longitude = lon; - } - - public void setRadiusUnits(String units) { - radiusUnits = units; - } - - public String getLatitude() { - return latitude; - } - - public String getLongitude() { - return longitude; - } - - public int getRadius() { - return radius; - } - - public String getRadiusUnits() { - return radiusUnits; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } - -} + +package com.flickr4java.flickr.photos; + +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.util.StringUtilities; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +/** + * @author Anthony Eden + * @version $Id: SearchParameters.java,v 1.20 2009/07/23 20:41:03 x-mago Exp $ + */ +public class SearchParameters { + + private String userId; + + private String groupId; + + private String woeId; + + private String media; + + private String contacts; + + private String[] tags; + + private String tagMode; + + private String text; + + private Date minUploadDate; + + private Date maxUploadDate; + + private Date minTakenDate; + + private Date maxTakenDate; + + private Date interestingnessDate; + + private String license; + + private Set extras; + + private String[] bbox; + + private String placeId; + + private int accuracy = 0; + + private int privacyFilter = 0; + + private String safeSearch; + + private String[] machineTags; + + private String machineTagMode; + + private String latitude; + + private String longitude; + + private double radius = -1; + + private String radiusUnits; + + private boolean hasGeo = false; + + private boolean inGallery = false; + + private boolean isCommons = false; + + private boolean isGetty = false; + + public static final ThreadLocal DATE_FORMATS = new ThreadLocal() { + @Override + protected synchronized SimpleDateFormat initialValue() { + return new SimpleDateFormat("yyyy-MM-dd"); + } + }; + + public static final ThreadLocal MYSQL_DATE_FORMATS = new ThreadLocal() { + @Override + protected synchronized SimpleDateFormat initialValue() { + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + } + }; + + /** order argument */ + public static int DATE_POSTED_DESC = 0; + + /** order argument */ + public static int DATE_POSTED_ASC = 1; + + /** order argument */ + public static int DATE_TAKEN_DESC = 2; + + /** order argument */ + public static int DATE_TAKEN_ASC = 3; + + /** order argument */ + public static int INTERESTINGNESS_DESC = 4; + + /** order argument */ + public static int INTERESTINGNESS_ASC = 5; + + /** order argument */ + public static int RELEVANCE = 6; + + private int sort = 0; + + public SearchParameters() { + + } + + /** + * Optional to use, if BBox is set. + *

    + * Defaults to maximum value if not specified. + * + * @param accuracy + * from 1 to 16 + * @see com.flickr4java.flickr.Flickr#ACCURACY_WORLD + * @see com.flickr4java.flickr.Flickr#ACCURACY_COUNTRY + * @see com.flickr4java.flickr.Flickr#ACCURACY_REGION + * @see com.flickr4java.flickr.Flickr#ACCURACY_CITY + * @see com.flickr4java.flickr.Flickr#ACCURACY_STREET + */ + public void setAccuracy(int accuracy) { + this.accuracy = accuracy; + } + + public int getAccuracy() { + return accuracy; + } + + /** + * @return the privacyFilter + */ + public int getPrivacyFilter() { + return privacyFilter; + } + + /** + * @param privacyFilter + * Return photos only matching a certain privacy level. + * + * This only applies when making an authenticated call to view photos you own. Valid values are: + *

      + *
    • 1 public photos + *
    • 2 private photos visible to friends + *
    • 3 private photos visible to family + *
    • 4 private photos visible to friends and family + *
    • 5 completely private photos + *
    + */ + public void setPrivacyFilter(int privacyFilter) { + this.privacyFilter = privacyFilter; + } + + public String getGroupId() { + return groupId; + } + + /** + * The id of a group who's pool to search. If specified, only matching photos posted to the group's pool will be returned. + * + * @param groupId + */ + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + /** + * Any photo that has been geotagged. + *

    + * + * Geo queries require some sort of limiting agent in order to prevent the database from crying. This is basically like the check against + * "parameterless searches" for queries without a geo component. + *

    + * + * A tag, for instance, is considered a limiting agent as are user defined min_date_taken and min_date_upload parameters — If no limiting factor is + * passed flickr will return only photos added in the last 12 hours (though flickr may extend the limit in the future). + * + * @param hasGeo + */ + public void setHasGeo(boolean hasGeo) { + this.hasGeo = hasGeo; + } + + public boolean getHasGeo() { + return hasGeo; + } + + public String[] getTags() { + return tags; + } + + public void setTags(String[] tags) { + this.tags = tags; + } + + public String getTagMode() { + return tagMode; + } + + public void setTagMode(String tagMode) { + this.tagMode = tagMode; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public Date getMinUploadDate() { + return minUploadDate; + } + + public void setMinUploadDate(Date minUploadDate) { + this.minUploadDate = minUploadDate; + } + + public Date getMaxUploadDate() { + return maxUploadDate; + } + + public void setMaxUploadDate(Date maxUploadDate) { + this.maxUploadDate = maxUploadDate; + } + + public Date getMinTakenDate() { + return minTakenDate; + } + + public void setMinTakenDate(Date minTakenDate) { + this.minTakenDate = minTakenDate; + } + + public Date getMaxTakenDate() { + return maxTakenDate; + } + + public void setMaxTakenDate(Date maxTakenDate) { + this.maxTakenDate = maxTakenDate; + } + + public String getLicense() { + return license; + } + + public void setLicense(String license) { + this.license = license; + } + + public Date getInterestingnessDate() { + return interestingnessDate; + } + + /** + * Set the date, for which interesting Photos to request. + * + * @param intrestingnessDate + */ + public void setInterestingnessDate(Date intrestingnessDate) { + this.interestingnessDate = intrestingnessDate; + } + + /** + * Set the machine tags, for which Photos to request. + * + * @param tags + */ + public void setMachineTags(String[] tags) { + this.machineTags = tags; + } + + public String[] getMachineTags() { + return machineTags; + } + + /** + * Set the machine tags search mode to use when requesting photos + * + * @param tagMode + */ + public void setMachineTagMode(String tagMode) { + this.machineTagMode = tagMode; + } + + public String getMachineTagMode() { + return machineTagMode; + } + + /** + * List of extra information to fetch for each returned record. Currently supported fields are: license, date_upload, date_taken, owner_name, icon_server, + * original_format, last_update, geo, tags, machine_tags, o_dims, views, media, path_alias, url_sq, url_t, url_s, url_m, url_l, url_o,count_faves,count_comments,count_views + * + * @param extras + * A set of extra-attributes + * @see com.flickr4java.flickr.photos.Extras#ALL_EXTRAS + * @see com.flickr4java.flickr.photos.Extras#MIN_EXTRAS + */ + public void setExtras(Set extras) { + this.extras = extras; + } + + public Set getExtras() { + return extras; + } + + /** + * 4 values defining the Bounding Box of the area that will be searched. + *

    + * The 4 values represent the bottom-left corner of the box and the top-right corner, minimum_longitude, minimum_latitude, maximum_longitude, + * maximum_latitude. + *

    + * + * Longitude has a range of -180 to 180, latitude of -90 to 90. Defaults to -180, -90, 180, 90 if not specified. + *

    + * + * Unlike standard photo queries, geo (or bounding box) queries will only return 250 results per page. + *

    + * + * Geo queries require some sort of limiting agent in order to prevent the database from crying. This is basically like the check against + * "parameterless searches" for queries without a geo component. + *

    + * + * A tag, for instance, is considered a limiting agent as are user defined min_date_taken and min_date_upload parameters. If no limiting factor is passed + * flickr returns only photos added in the last 12 hours (though flickr may extend the limit in the future). + * + * @param minimum_longitude + * @param minimum_latitude + * @param maximum_longitude + * @param maximum_latitude + */ + public void setBBox(String minimum_longitude, String minimum_latitude, String maximum_longitude, String maximum_latitude) { + this.bbox = new String[] { minimum_longitude, minimum_latitude, maximum_longitude, maximum_latitude }; + } + + public String[] getBBox() { + return bbox; + } + + /** + * Optional safe search setting.
    + * Un-authed calls can only see Safe content. + * + * @param level + * 1, 2 or 3 + * @see com.flickr4java.flickr.Flickr#SAFETYLEVEL_SAFE + * @see com.flickr4java.flickr.Flickr#SAFETYLEVEL_MODERATE + * @see com.flickr4java.flickr.Flickr#SAFETYLEVEL_RESTRICTED + */ + public void setSafeSearch(String level) { + this.safeSearch = level; + } + + public String getSafeSearch() { + return safeSearch; + } + + public int getSort() { + return sort; + } + + /** + * Set the sort-order. + *

    + * The default is DATE_POSTED_DESC + * + * @see com.flickr4java.flickr.photos.SearchParameters#DATE_POSTED_ASC + * @see com.flickr4java.flickr.photos.SearchParameters#DATE_POSTED_DESC + * @see com.flickr4java.flickr.photos.SearchParameters#DATE_TAKEN_ASC + * @see com.flickr4java.flickr.photos.SearchParameters#DATE_TAKEN_DESC + * @see com.flickr4java.flickr.photos.SearchParameters#INTERESTINGNESS_ASC + * @see com.flickr4java.flickr.photos.SearchParameters#INTERESTINGNESS_DESC + * @see com.flickr4java.flickr.photos.SearchParameters#RELEVANCE + * @param order + */ + public void setSort(int order) { + this.sort = order; + } + + /** + * @return A placeId + * @see com.flickr4java.flickr.places.PlacesInterface#resolvePlaceId(String) + */ + public String getPlaceId() { + return placeId; + } + + /** + * PlaceId only used when bbox not set. + * + * Geo queries require some sort of limiting agent in order to prevent the database from crying. This is basically like the check against + * "parameterless searches" for queries without a geo component. + *

    + * + * A tag, for instance, is considered a limiting agent as are user defined min_date_taken and min_date_upload parameters — If no limiting factor is + * passed we return only photos added in the last 12 hours (though we may extend the limit in the future). + * + * @param placeId + * @see com.flickr4java.flickr.places.PlacesInterface#resolvePlaceId(String) + * @see com.flickr4java.flickr.places.Place#getPlaceId() + * @see com.flickr4java.flickr.places.Location#getPlaceId() + */ + public void setPlaceId(String placeId) { + this.placeId = placeId; + } + + public String getWoeId() { + return woeId; + } + + /** + * A Where on Earth identifier to use to filter photo clusters.
    + * For example all the photos clustered by locality in the United States (WOE ID 23424977).
    + * (not used if bbox argument is present). + *

    + * + * Geo queries require some sort of limiting agent in order to prevent the database from crying. This is basically like the check against + * "parameterless searches" for queries without a geo component. + *

    + * + * A tag, for instance, is considered a limiting agent as are user defined min_date_taken and min_date_upload parameters. If no limiting factor is passed we + * return only photos added in the last 12 hours (though flickr may extend the limit in the future). + *

    + * + * @param woeId + * @see com.flickr4java.flickr.places.Place#getWoeId() + * @see com.flickr4java.flickr.places.Location#getWoeId() + */ + public void setWoeId(String woeId) { + this.woeId = woeId; + } + + public String getMedia() { + return media; + } + + /** + * Filter results by media type. Possible values are all (default), photos or videos. + * + * @param media + */ + public void setMedia(String media) throws FlickrException { + if (media.equals("all") || media.equals("photos") || media.equals("videos")) { + this.media = media; + } else { + throw new FlickrException("0", "Media type is not valid."); + } + } + + public String getContacts() { + return contacts; + } + + /** + * Search your contacts. Valid arguments are either 'all' or 'ff' for just friends and family. + *

    + * + * It requires that the "user_id" field also be set and allows you to limit queries to only photos belonging to that user's photos. As in : All my contacts + * photos tagged "aaron". (Experimental) + * + * @param contacts + */ + public void setContacts(String contacts) { + this.contacts = contacts; + } + + public Map getAsParameters() { + Map parameters = new HashMap(); + + String lat = getLatitude(); + if (lat != null) { + parameters.put("lat", lat); + } + + String lon = getLongitude(); + if (lon != null) { + parameters.put("lon", lon); + } + + double radius = getRadius(); + if (radius > 0) { + parameters.put("radius", Double.toString(radius)); + } + + String radiusUnits = getRadiusUnits(); + if (radiusUnits != null) { + parameters.put("radius_units", radiusUnits); + } + + String media = getMedia(); + if (media != null) { + parameters.put("media", media); + } + + String userId = getUserId(); + if (userId != null) { + parameters.put("user_id", userId); + String contacts = getContacts(); + if (contacts != null) { + parameters.put("contacts", contacts); + } + } + + String groupId = getGroupId(); + if (groupId != null) { + parameters.put("group_id", groupId); + } + + String[] tags = getTags(); + if (tags != null) { + parameters.put("tags", StringUtilities.join(tags, ",")); + } + + String tagMode = getTagMode(); + if (tagMode != null) { + parameters.put("tag_mode", tagMode); + } + + String[] mtags = getMachineTags(); + if (mtags != null) { + parameters.put("machine_tags", StringUtilities.join(mtags, ",")); + } + + String mtagMode = getMachineTagMode(); + if (mtagMode != null) { + parameters.put("machine_tag_mode", mtagMode); + } + + String text = getText(); + if (text != null) { + parameters.put("text", text); + } + + Date minUploadDate = getMinUploadDate(); + if (minUploadDate != null) { + parameters.put("min_upload_date", Long.toString(minUploadDate.getTime() / 1000L)); + } + + Date maxUploadDate = getMaxUploadDate(); + if (maxUploadDate != null) { + parameters.put("max_upload_date", Long.toString(maxUploadDate.getTime() / 1000L)); + } + + Date minTakenDate = getMinTakenDate(); + if (minTakenDate != null) { + parameters.put("min_taken_date", ((DateFormat) MYSQL_DATE_FORMATS.get()).format(minTakenDate)); + } + + Date maxTakenDate = getMaxTakenDate(); + if (maxTakenDate != null) { + parameters.put("max_taken_date", ((DateFormat) MYSQL_DATE_FORMATS.get()).format(maxTakenDate)); + } + + String license = getLicense(); + if (license != null) { + parameters.put("license", license); + } + + Date intrestingnessDate = getInterestingnessDate(); + if (intrestingnessDate != null) { + parameters.put("date", ((DateFormat) DATE_FORMATS.get()).format(intrestingnessDate)); + } + + String[] bbox = getBBox(); + if (bbox != null) { + parameters.put("bbox", StringUtilities.join(bbox, ",")); + if (accuracy > 0) { + parameters.put("accuracy", Integer.toString(accuracy)); + } + } else { + String woeId = getWoeId(); + if (woeId != null) { + parameters.put("woe_id", woeId); + } + } + + String safeSearch = getSafeSearch(); + if (safeSearch != null) { + parameters.put("safe_search", safeSearch); + } + + boolean hasGeo = getHasGeo(); + if (hasGeo) { + parameters.put("has_geo", "true"); + } + + boolean inGallery = getInGallery(); + if (inGallery) { + parameters.put("in_gallery", "true"); + } + + boolean isCommons = getIsCommons(); + if (isCommons) { + parameters.put("is_commons", "true"); + } + + boolean isGetty = getIsGetty(); + if (isGetty) { + parameters.put("is_getty", "true"); + } + + if (privacyFilter > 0) { + parameters.put("privacy_filter", Integer.toString(privacyFilter)); + } + + if (extras != null && !extras.isEmpty()) { + parameters.put("extras", StringUtilities.join(extras, ",")); + } + + if (sort != DATE_POSTED_DESC) { + String sortArg = null; + if (sort == DATE_POSTED_ASC) { + sortArg = "date-posted-asc"; + } + if (sort == DATE_TAKEN_DESC) { + sortArg = "date-taken-desc"; + } + if (sort == DATE_TAKEN_ASC) { + sortArg = "date-taken-asc"; + } + if (sort == INTERESTINGNESS_DESC) { + sortArg = "interestingness-desc"; + } + if (sort == INTERESTINGNESS_ASC) { + sortArg = "interestingness-asc"; + } + if (sort == RELEVANCE) { + sortArg = "relevance"; + } + if (sortArg != null) { + parameters.put("sort", sortArg); + } + } + + if (placeId != null && !placeId.isEmpty()) { + parameters.put("place_id", placeId); + } + + return parameters; + } + + public void setLatitude(String lat) { + latitude = lat; + } + + public void setRadius(double r) { + radius = r; + } + + public void setRadius(int r) { + radius = r; + } + + public void setLongitude(String lon) { + longitude = lon; + } + + public void setRadiusUnits(String units) { + radiusUnits = units; + } + + public String getLatitude() { + return latitude; + } + + public String getLongitude() { + return longitude; + } + + public double getRadius() { + return radius; + } + + public String getRadiusUnits() { + return radiusUnits; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public void setInGallery(boolean inGallery) { + this.inGallery = inGallery; + } + + public boolean getInGallery() { + return inGallery; + } + + public void setIsCommons(boolean isCommons) { + this.isCommons = isCommons; + } + + public boolean getIsCommons() { + return isCommons; + } + + public void setIsGetty(boolean isGetty) { + this.isGetty = isGetty; + } + + public boolean getIsGetty() { + return isGetty; + } +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java b/src/main/java/com/flickr4java/flickr/photos/Size.java similarity index 95% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java rename to src/main/java/com/flickr4java/flickr/photos/Size.java index 13e0646c..0d7a95f5 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java +++ b/src/main/java/com/flickr4java/flickr/photos/Size.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; import java.util.Arrays; @@ -165,6 +163,7 @@ public class Size { * @see com.flickr4java.flickr.photos.PhotosInterface#getImageAsStream(Photo, int) */ public static final int VIDEO_ORIGINAL = 14; + /** * Video, the original for mobiles. * @@ -174,11 +173,13 @@ public class Size { * @see com.flickr4java.flickr.photos.PhotosInterface#getImageAsStream(Photo, int) */ public static final int MOBILE_MP4 = 15; - + public static final int HD_MP4 = 16; private int label; + private String labelName; + private int width; private int height; @@ -208,12 +209,17 @@ public Size() { * @see com.flickr4java.flickr.photos.Size#MEDIUM_640 * @see com.flickr4java.flickr.photos.Size#MEDIUM_800 */ + @Deprecated // This method is unreliable - use getLabelName instead public int getLabel() { return label; } - private final List lstSizes = Arrays.asList("Thumbnail", "Square", "Small", "Medium", "Large", "Original", "Square Large", "Small 320", + public String getLabelName() { + return labelName; + } + + private final List lstSizes = Arrays.asList("Thumbnail", "Square", "Small", "Medium", "Large", "Original", "Large Square", "Small 320", "Medium 640", "Medium 800", "Large 1600", "Large 2048", "Site MP4", "Video Player", "Video Original", "Mobile MP4", "HD MP4"); /** @@ -229,6 +235,7 @@ public void setLabel(String label) { if (ix != -1) { setLabel(ix); } + labelName = label; } /** @@ -260,7 +267,7 @@ public void setWidth(int width) { public void setWidth(String width) { - if (width != null) { + if (!(width == null || "".equals(width))) { // checking both null and empty setWidth(Integer.parseInt(width)); } } @@ -277,7 +284,7 @@ public void setHeight(int height) { public void setHeight(String height) { - if (height != null) { + if (!(height == null || "".equals(height))) { // checking both null and empty setHeight(Integer.parseInt(height)); } } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SizeList.java b/src/main/java/com/flickr4java/flickr/photos/SizeList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SizeList.java rename to src/main/java/com/flickr4java/flickr/photos/SizeList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Usage.java b/src/main/java/com/flickr4java/flickr/photos/Usage.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Usage.java rename to src/main/java/com/flickr4java/flickr/photos/Usage.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/comments/Comment.java b/src/main/java/com/flickr4java/flickr/photos/comments/Comment.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/comments/Comment.java rename to src/main/java/com/flickr4java/flickr/photos/comments/Comment.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java b/src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java rename to src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java index 9e6bae28..6d0118bb 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java @@ -2,7 +2,7 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photos.PhotoList; import com.flickr4java.flickr.photos.PhotoUtils; @@ -41,9 +41,9 @@ public class CommentsInterface { private final String sharedSecret; - private final Transport transportAPI; + private final AbstractTransport transportAPI; - public CommentsInterface(String apiKey, String sharedSecret, Transport transport) { + public CommentsInterface(String apiKey, String sharedSecret, AbstractTransport transport) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transport; @@ -59,7 +59,7 @@ public CommentsInterface(String apiKey, String sharedSecret, Transport transport * @param commentText * Text of the comment. * @return a unique comment id. - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public String addComment(String photoId, String commentText) throws FlickrException { Map parameters = new HashMap(); @@ -84,7 +84,7 @@ public String addComment(String photoId, String commentText) throws FlickrExcept * * @param commentId * The id of the comment to delete. - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void deleteComment(String commentId) throws FlickrException { Map parameters = new HashMap(); @@ -110,7 +110,7 @@ public void deleteComment(String commentId) throws FlickrException { * The id of the comment to edit. * @param commentText * Update the comment to this text. - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void editComment(String commentId, String commentText) throws FlickrException { Map parameters = new HashMap(); @@ -136,7 +136,7 @@ public void editComment(String commentId, String commentText) throws FlickrExcep * @param photoId * The id of the photo to fetch comments for. * @return a List of {@link Comment} objects. - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public List getList(String photoId) throws FlickrException { Map parameters = new HashMap(); @@ -206,7 +206,7 @@ public List getList(String photoId) throws FlickrException { * @param page * The page offset. * @return List of photos - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getRecentForContacts(Date lastComment, ArrayList contactsFilter, Set extras, int perPage, int page) throws FlickrException { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java b/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java rename to src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java index 47420178..8a0c294c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java @@ -2,7 +2,7 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.photos.GeoData; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photos.PhotoList; @@ -46,9 +46,9 @@ public class GeoInterface { private final String sharedSecret; - private final Transport transport; + private final AbstractTransport transport; - public GeoInterface(String apiKey, String sharedSecret, Transport transport) { + public GeoInterface(String apiKey, String sharedSecret, AbstractTransport transport) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transport = transport; @@ -62,7 +62,7 @@ public GeoInterface(String apiKey, String sharedSecret, Transport transport) { * @param photoId * reqired photo id, not null * @return Geo Data, if the photo has it. - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * if photo id is invalid, if photo has no geodata or if any other error has been reported in the response. */ public GeoData getLocation(String photoId) throws FlickrException { @@ -99,7 +99,7 @@ public GeoData getLocation(String photoId) throws FlickrException { * @param photoId * reqired photo id, not null * @return the permissions - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * if photo id is invalid, if photo has no geodata or if any other error has been reported in the response. */ public GeoPermissions getPerms(String photoId) throws FlickrException { @@ -130,7 +130,7 @@ public GeoPermissions getPerms(String photoId) throws FlickrException { * * This method requires authentication with 'write' permission. * - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void removeLocation(String photoId) throws FlickrException { Map parameters = new HashMap(); @@ -157,7 +157,7 @@ public void removeLocation(String photoId) throws FlickrException { * The id of the photo to cet permissions for. * @param location * geo data with optional accuracy (1-16), accuracy 0 to use the default. - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void setLocation(String photoId, GeoData location) throws FlickrException { Map parameters = new HashMap(); @@ -189,7 +189,7 @@ public void setLocation(String photoId, GeoData location) throws FlickrException * The id of the photo to set permissions for. * @param perms * Permissions, who can see the geo data of this photo - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void setPerms(String photoId, GeoPermissions perms) throws FlickrException { Map parameters = new HashMap(); @@ -221,7 +221,7 @@ public void setPerms(String photoId, GeoPermissions perms) throws FlickrExceptio * A Flickr Places ID. (While optional, you must pass either a valid Places ID or a WOE ID.) * @param woeId * A Where On Earth (WOE) ID. (While optional, you must pass either a valid Places ID or a WOE ID.) - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void batchCorrectLocation(GeoData location, String placeId, String woeId) throws FlickrException { Map parameters = new HashMap(); @@ -254,7 +254,7 @@ public void batchCorrectLocation(GeoData location, String placeId, String woeId) * A Flickr Places ID. (While optional, you must pass either a valid Places ID or a WOE ID.) * @param woeId * A Where On Earth (WOE) ID. (While optional, you must pass either a valid Places ID or a WOE ID.) - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void correctLocation(String photoId, String placeId, String woeId) throws FlickrException { Map parameters = new HashMap(); @@ -285,7 +285,7 @@ public void correctLocation(String photoId, String placeId, String woeId) throws * @param perPage * @param page * @return The collection of Photo objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see com.flickr4java.flickr.photos.Extras */ public PhotoList photosForLocation(GeoData location, Set extras, int perPage, int page) throws FlickrException { @@ -334,7 +334,7 @@ public PhotoList photosForLocation(GeoData location, Set extras, * @param context * Context is a numeric value representing the photo's geotagginess beyond latitude and longitude. For example, you may wish to indicate that a * photo was taken "indoors" (1) or "outdoors" (2). - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void setContext(String photoId, int context) throws FlickrException { Map parameters = new HashMap(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoPermissions.java b/src/main/java/com/flickr4java/flickr/photos/geo/GeoPermissions.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoPermissions.java rename to src/main/java/com/flickr4java/flickr/photos/geo/GeoPermissions.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/License.java b/src/main/java/com/flickr4java/flickr/photos/licenses/License.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/License.java rename to src/main/java/com/flickr4java/flickr/photos/licenses/License.java index 6ee46b8f..15983df1 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/License.java +++ b/src/main/java/com/flickr4java/flickr/photos/licenses/License.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos.licenses; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java b/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java similarity index 89% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java rename to src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java index 3c34198e..65b73dbb 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java @@ -1,12 +1,10 @@ -/* - * 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 com.flickr4java.flickr.AbstractTransport; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -32,9 +30,9 @@ public class LicensesInterface { private String sharedSecret; - private Transport transportAPI; + private AbstractTransport transportAPI; - public LicensesInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public LicensesInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -46,7 +44,7 @@ public LicensesInterface(String apiKey, String sharedSecret, Transport transport * This method does not require authentication. * * @return A collection of License objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getInfo() throws FlickrException { Map parameters = new HashMap(); @@ -79,7 +77,7 @@ public Collection getInfo() throws FlickrException { * The photo to update the license for. * @param licenseId * The license to apply, or 0 (zero) to remove the current license. - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void setLicense(String photoId, int licenseId) throws FlickrException { Map parameters = new HashMap(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java b/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java similarity index 88% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java rename to src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java index e29c23f2..a6bff3fd 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java @@ -1,12 +1,10 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos.notes; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.photos.Note; import org.w3c.dom.Element; @@ -30,9 +28,9 @@ public class NotesInterface { private String sharedSecret; - private Transport transportAPI; + private AbstractTransport transportAPI; - public NotesInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public NotesInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -79,7 +77,7 @@ public Note add(String photoId, Note note) throws FlickrException { * * @param noteId * The node ID - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void delete(String noteId) throws FlickrException { Map parameters = new HashMap(); @@ -98,7 +96,7 @@ public void delete(String noteId) throws FlickrException { * * @param note * The Note to update - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void edit(Note note) throws FlickrException { Map parameters = new HashMap(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java b/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java similarity index 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java rename to src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java index 001c633c..9d50bb84 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java @@ -50,7 +50,7 @@ public PeopleInterface(String apiKey, String sharedSecret, Transport transportAP * @param photoId * @param userId * @param bounds - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void add(String photoId, String userId, Rectangle bounds) throws FlickrException { Map parameters = new HashMap(); @@ -76,7 +76,7 @@ public void add(String photoId, String userId, Rectangle bounds) throws FlickrEx * * @param photoId * @param userId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void delete(String photoId, String userId) throws FlickrException { Map parameters = new HashMap(); @@ -96,7 +96,7 @@ public void delete(String photoId, String userId) throws FlickrException { * * @param photoId * @param userId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void deleteCoords(String photoId, String userId) throws FlickrException { Map parameters = new HashMap(); @@ -117,7 +117,7 @@ public void deleteCoords(String photoId, String userId) throws FlickrException { * @param photoId * @param userId * @param bounds - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void editCoords(String photoId, String userId, Rectangle bounds) throws FlickrException { Map parameters = new HashMap(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/Suggestion.java b/src/main/java/com/flickr4java/flickr/photos/suggestions/Suggestion.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/Suggestion.java rename to src/main/java/com/flickr4java/flickr/photos/suggestions/Suggestion.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionList.java b/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionList.java rename to src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java b/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java rename to src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java b/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java rename to src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java index 18c3ff01..30b65ad4 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java @@ -1,12 +1,10 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos.transform; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import java.util.HashMap; import java.util.Map; @@ -23,9 +21,9 @@ public class TransformInterface { private String sharedSecret; - private Transport transportAPI; + private AbstractTransport transportAPI; - public TransformInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public TransformInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/upload/Ticket.java b/src/main/java/com/flickr4java/flickr/photos/upload/Ticket.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/upload/Ticket.java rename to src/main/java/com/flickr4java/flickr/photos/upload/Ticket.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java b/src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java similarity index 89% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java rename to src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java index edc62ed7..19e3a02d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java @@ -2,7 +2,7 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -27,9 +27,9 @@ public class UploadInterface { private String sharedSecret; - private Transport transportAPI; + private AbstractTransport transportAPI; - public UploadInterface(String apiKey, String sharedSecret, Transport transport) { + public UploadInterface(String apiKey, String sharedSecret, AbstractTransport transport) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transport; @@ -41,7 +41,7 @@ public UploadInterface(String apiKey, String sharedSecret, Transport transport) * @param tickets * a set of ticket ids (Strings) or {@link Ticket} objects containing ids * @return a list of {@link Ticket} objects. - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public List checkTickets(Set tickets) throws FlickrException { Map parameters = new HashMap(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photoset.java b/src/main/java/com/flickr4java/flickr/photosets/Photoset.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photoset.java rename to src/main/java/com/flickr4java/flickr/photosets/Photoset.java index b0066d78..93e1a1fb 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photoset.java +++ b/src/main/java/com/flickr4java/flickr/photosets/Photoset.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photosets; import com.flickr4java.flickr.people.User; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photosets.java b/src/main/java/com/flickr4java/flickr/photosets/Photosets.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photosets.java rename to src/main/java/com/flickr4java/flickr/photosets/Photosets.java index 74f995ac..0551c8a4 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photosets.java +++ b/src/main/java/com/flickr4java/flickr/photosets/Photosets.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photosets; import java.util.Collection; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java b/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java rename to src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java index 0546ce65..dba6d835 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java +++ b/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java @@ -1,12 +1,10 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photosets; import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.people.User; import com.flickr4java.flickr.photos.Extras; import com.flickr4java.flickr.photos.Photo; @@ -15,8 +13,8 @@ import com.flickr4java.flickr.photos.PhotoUtils; import com.flickr4java.flickr.util.StringUtilities; import com.flickr4java.flickr.util.XMLUtilities; - -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -35,7 +33,7 @@ */ public class PhotosetsInterface { - private static Logger _log = Logger.getLogger(PhotosetsInterface.class); + private static Logger _log = LoggerFactory.getLogger(PhotosetsInterface.class); public static final String METHOD_ADD_PHOTO = "flickr.photosets.addPhoto"; @@ -69,9 +67,9 @@ public class PhotosetsInterface { private final String sharedSecret; - private final Transport transportAPI; + private final AbstractTransport transportAPI; - public PhotosetsInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public PhotosetsInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -79,7 +77,7 @@ public PhotosetsInterface(String apiKey, String sharedSecret, Transport transpor /** * Add a photo to the end of the photoset. - *

    + *

    * Note: requires authentication with the new authentication API with 'write' permission. * * @param photosetId @@ -110,7 +108,7 @@ public void addPhoto(String photosetId, String photoId) throws FlickrException { * @param primaryPhotoId * The primary photo id * @return The new Photset - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Photoset create(String title, String description, String primaryPhotoId) throws FlickrException { Map parameters = new HashMap(); @@ -136,7 +134,7 @@ public Photoset create(String title, String description, String primaryPhotoId) * * @param photosetId * The photoset ID - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void delete(String photosetId) throws FlickrException { Map parameters = new HashMap(); @@ -159,7 +157,7 @@ public void delete(String photosetId) throws FlickrException { * A new title * @param description * A new description (can be null) - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void editMeta(String photosetId, String title, String description) throws FlickrException { Map parameters = new HashMap(); @@ -186,7 +184,7 @@ public void editMeta(String photosetId, String title, String description) throws * The primary photo Id * @param photoIds * The photo IDs for the photos in the set - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void editPhotos(String photosetId, String primaryPhotoId, String[] photoIds) throws FlickrException { Map parameters = new HashMap(); @@ -212,7 +210,7 @@ public void editPhotos(String photosetId, String primaryPhotoId, String[] photoI * @param photosetId * The photoset ID * @return The PhotoContext - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoContext getContext(String photoId, String photosetId) throws FlickrException { Map parameters = new HashMap(); @@ -254,7 +252,7 @@ public PhotoContext getContext(String photoId, String photosetId) throws FlickrE * @param photosetId * The photoset ID * @return The Photoset - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Photoset getInfo(String photosetId) throws FlickrException { Map parameters = new HashMap(); @@ -310,10 +308,26 @@ public Photoset getInfo(String photosetId) throws FlickrException { * @param userId * The User id * @return The Photosets collection - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Photosets getList(String userId) throws FlickrException { - return getList(userId, 0, 0); + return getList(userId, 0, 0, null); + } + + /** + * Get a list of all photosets for the specified user. + * + * This method does not require authentication. But to get a Photoset into the list, that contains just private photos, the call needs to be authenticated. + * + * @param userId + * The User id + * @param primaryPhotoExtras + * A comma-delimited list of extra information to fetch for the primary photo + * @return The Photosets collection + * @throws FlickrException if there was a problem connecting to Flickr + */ + public Photosets getList(String userId, String primaryPhotoExtras) throws FlickrException { + return getList(userId, 0, 0, primaryPhotoExtras); } /** @@ -327,10 +341,12 @@ public Photosets getList(String userId) throws FlickrException { * The number of photosets per page * @param page * The page offset + * @param primaryPhotoExtras + * A comma-delimited list of extra information to fetch for the primary photo * @return The Photosets collection - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ - public Photosets getList(String userId, int perPage, int page) throws FlickrException { + public Photosets getList(String userId, int perPage, int page, String primaryPhotoExtras) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); @@ -346,6 +362,10 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce parameters.put("page", String.valueOf(page)); } + if (primaryPhotoExtras != null) { + parameters.put("primary_photo_extras", primaryPhotoExtras); + } + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); @@ -368,7 +388,13 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce owner.setId(photosetElement.getAttribute("owner")); photoset.setOwner(owner); - Photo primaryPhoto = new Photo(); + Element primaryPhotoExtrasEl = XMLUtilities.getChild(photosetElement, "primary_photo_extras"); + Photo primaryPhoto; + if (primaryPhotoExtrasEl != null) { + primaryPhoto = PhotoUtils.createPhoto(primaryPhotoExtrasEl); + } else { + primaryPhoto = new Photo(); + } primaryPhoto.setId(photosetElement.getAttribute("primary")); primaryPhoto.setSecret(photosetElement.getAttribute("secret")); // TODO verify that this is the secret for the photo primaryPhoto.setServer(photosetElement.getAttribute("server")); // TODO verify that this is the server for the photo @@ -409,7 +435,7 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce * @param userId * The User id * @return int The number of photosets - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public int getPhotosetCount(String userId) throws FlickrException { Map parameters = new HashMap(); @@ -455,7 +481,7 @@ public int getPhotosetCount(String userId) throws FlickrException { * @param page * The page offset * @return PhotoList The Collection of Photo objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getPhotos(String photosetId, Set extras, int privacy_filter, int perPage, int page) throws FlickrException { PhotoList photos = new PhotoList(); @@ -521,7 +547,7 @@ public PhotoList getPhotos(String photosetId, Set extras, int pri * @param page * The page offset * @return PhotoList The Collection of Photo objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getPhotos(String photosetId, int perPage, int page) throws FlickrException { return getPhotos(photosetId, Extras.MIN_EXTRAS, Flickr.PRIVACY_LEVEL_NO_FILTER, perPage, page); @@ -534,7 +560,7 @@ public PhotoList getPhotos(String photosetId, int perPage, int page) thro * * @param photosetIds * An array of Ids - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void orderSets(String[] photosetIds) throws FlickrException { Map parameters = new HashMap(); @@ -556,7 +582,7 @@ public void orderSets(String[] photosetIds) throws FlickrException { * The photoset ID * @param photoId * The photo ID - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void removePhoto(String photosetId, String photoId) throws FlickrException { Map parameters = new HashMap(); @@ -578,7 +604,7 @@ public void removePhoto(String photosetId, String photoId) throws FlickrExceptio * The photoset ID * @param photoIds * The ID's of the photos, in CVS format - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void removePhotos(String photosetId, String photoIds) throws FlickrException { Map parameters = new HashMap(); @@ -600,7 +626,7 @@ public void removePhotos(String photosetId, String photoIds) throws FlickrExcept * The photoset ID * @param photoIds * The ID's of the photos, in CSV format, in the order they need to be in. - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void reorderPhotos(String photosetId, String photoIds) throws FlickrException { Map parameters = new HashMap(); @@ -622,7 +648,7 @@ public void reorderPhotos(String photosetId, String photoIds) throws FlickrExcep * The photoset ID * @param photoId * The photo ID that is being added - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void setPrimaryPhoto(String photosetId, String photoId) throws FlickrException { Map parameters = new HashMap(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java b/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java rename to src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java index 4b58cf69..1db744e3 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java +++ b/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java @@ -2,7 +2,7 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.photos.comments.Comment; import com.flickr4java.flickr.util.XMLUtilities; @@ -34,9 +34,9 @@ public class PhotosetsCommentsInterface { private String sharedSecret; - private Transport transportAPI; + private AbstractTransport transportAPI; - public PhotosetsCommentsInterface(String apiKey, String sharedSecret, Transport transport) { + public PhotosetsCommentsInterface(String apiKey, String sharedSecret, AbstractTransport transport) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transport; @@ -50,7 +50,7 @@ public PhotosetsCommentsInterface(String apiKey, String sharedSecret, Transport * @param commentText * Text of the comment * @return the comment id - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public String addComment(String photosetId, String commentText) throws FlickrException { Map parameters = new HashMap(); @@ -75,7 +75,7 @@ public String addComment(String photosetId, String commentText) throws FlickrExc * * @param commentId * The id of the comment to delete from a photoset. - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void deleteComment(String commentId) throws FlickrException { Map parameters = new HashMap(); @@ -98,7 +98,7 @@ public void deleteComment(String commentId) throws FlickrException { * The id of the comment to edit. * @param commentText * Update the comment to this text. - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void editComment(String commentId, String commentText) throws FlickrException { Map parameters = new HashMap(); @@ -123,7 +123,7 @@ public void editComment(String commentId, String commentText) throws FlickrExcep * @param photosetId * The id of the photoset to fetch comments for. * @return a list of {@link Comment} objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public List getList(String photosetId) throws FlickrException { Map parameters = new HashMap(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/Location.java b/src/main/java/com/flickr4java/flickr/places/Location.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/places/Location.java rename to src/main/java/com/flickr4java/flickr/places/Location.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/Place.java b/src/main/java/com/flickr4java/flickr/places/Place.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/places/Place.java rename to src/main/java/com/flickr4java/flickr/places/Place.java index d865f1d0..efef1e49 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/Place.java +++ b/src/main/java/com/flickr4java/flickr/places/Place.java @@ -62,6 +62,12 @@ public Place(String placeId, String name, int placeType) { this.placeType = placeType; } + public Place(String placeId, String name, String woeId) { + this.name = name; + this.placeId = placeId; + this.woeId = woeId; + } + public String getName() { return name; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlaceType.java b/src/main/java/com/flickr4java/flickr/places/PlaceType.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlaceType.java rename to src/main/java/com/flickr4java/flickr/places/PlaceType.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java b/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java rename to src/main/java/com/flickr4java/flickr/places/PlacesInterface.java index 9a9ae812..2da55ff5 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java +++ b/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java @@ -2,7 +2,7 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.photos.SearchParameters; import com.flickr4java.flickr.tags.Tag; import com.flickr4java.flickr.util.StringUtilities; @@ -20,12 +20,15 @@ /** * Lookup Flickr Places. *

    + * + * Note: As of May 2021 many of these methods no longer seem to work correctly in the Flickr API. + * Confirmed via the https://www.flickr.com/services/api/ page. * * Announcement on places from yahoo: *

    * *

    - * From: kellan 
    + * From: kellan - kellan@yahoo-inc.com
      * Date: Fri, 11 Jan 2008 15:57:59 -0800
      * Subject: [yws-flickr] Flickr and "Place IDs"
      * 
    @@ -131,9 +134,9 @@ public class PlacesInterface {
     
         private final String sharedSecret;
     
    -    private final Transport transportAPI;
    +    private final AbstractTransport transportAPI;
     
    -    public PlacesInterface(String apiKey, String sharedSecret, Transport transportAPI) {
    +    public PlacesInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) {
             this.apiKey = apiKey;
             this.sharedSecret = sharedSecret;
             this.transportAPI = transportAPI;
    @@ -151,7 +154,7 @@ public PlacesInterface(String apiKey, String sharedSecret, Transport transportAP
          * 
          * @param query
          * @return PlacesList
    -     * @throws FlickrException
    +     * @throws FlickrException if there was a problem connecting to Flickr
          */
         public PlacesList find(String query) throws FlickrException {
             Map parameters = new HashMap();
    @@ -229,7 +232,7 @@ public PlacesList find(String query) throws FlickrException {
          *            The longitude whose valid range is -180 to 180. Anything more than 4 decimal places will be truncated.
          * @param accuracy
          * @return A PlacesList
    -     * @throws FlickrException
    +     * @throws FlickrException if there was a problem connecting to Flickr
          */
         public PlacesList findByLatLon(double latitude, double longitude, int accuracy) throws FlickrException {
             Map parameters = new HashMap();
    @@ -271,7 +274,7 @@ public PlacesList findByLatLon(double latitude, double longitude, int acc
          * @param woeId
          *            A Where On Earth (WOE) ID. Can be null. (While optional, you must pass either a valid Places ID or a WOE ID.)
          * @return List of Places
    -     * @throws FlickrException
    +     * @throws FlickrException if there was a problem connecting to Flickr
          */
         public PlacesList getChildrenWithPhotosPublic(String placeId, String woeId) throws FlickrException {
             Map parameters = new HashMap();
    @@ -314,7 +317,7 @@ public PlacesList getChildrenWithPhotosPublic(String placeId, String woeI
          * @param woeId
          *            A Where On Earth (WOE) ID. Optional, can be null. (While optional, you must pass either a valid Places ID or a WOE ID.)
          * @return A Location
    -     * @throws FlickrException
    +     * @throws FlickrException if there was a problem connecting to Flickr
          */
         public Location getInfo(String placeId, String woeId) throws FlickrException {
             Map parameters = new HashMap();
    @@ -344,7 +347,7 @@ public Location getInfo(String placeId, String woeId) throws FlickrException {
          * 
          * @param url
          * @return A Location
    -     * @throws FlickrException
    +     * @throws FlickrException if there was a problem connecting to Flickr
          */
         public Location getInfoByUrl(String url) throws FlickrException {
             Map parameters = new HashMap();
    @@ -368,7 +371,7 @@ public Location getInfoByUrl(String url) throws FlickrException {
          * 

    * * @return A list of placetypes - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public ArrayList getPlaceTypes() throws FlickrException { Map parameters = new HashMap(); @@ -408,7 +411,7 @@ public ArrayList getPlaceTypes() throws FlickrException { * @param woeId * A Where On Earth (WOE) ID. Optional, can be null. * @return A list of shapes - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public ShapeDataList getShapeHistory(String placeId, String woeId) throws FlickrException { ShapeDataList shapeList = new ShapeDataList(); @@ -468,7 +471,7 @@ public ShapeDataList getShapeHistory(String placeId, String woeId) th * @param woeId * A Where On Earth (WOE) ID. Optional, can be null. * @return PlacesList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PlacesList getTopPlacesList(int placeType, Date date, String placeId, String woeId) throws FlickrException { Map parameters = new HashMap(); @@ -525,7 +528,7 @@ public PlacesList getTopPlacesList(int placeType, Date date, String place * @param bbox * @param placeType * @return A PlacesList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PlacesList placesForBoundingBox(int placeType, String bbox) throws FlickrException { Map parameters = new HashMap(); @@ -569,7 +572,7 @@ public PlacesList placesForBoundingBox(int placeType, String bbox) throws * @param contacts * Search your contacts. Either 'all' or 'ff' for just friends and family. (Optional, default is all) * @return A PlacesList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PlacesList placesForContacts(int placeType, String placeId, String woeId, String threshold, String contacts) throws FlickrException { Map parameters = new HashMap(); @@ -638,7 +641,7 @@ public PlacesList placesForContacts(int placeType, String placeId, String * @param maxTakenDate * Optional, can be null. * @return A PlacesList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PlacesList placesForTags(int placeTypeId, String woeId, String placeId, String threshold, String[] tags, String tagMode, String machineTags, String machineTagMode, Date minUploadDate, Date maxUploadDate, Date minTakenDate, Date maxTakenDate) throws FlickrException { @@ -719,7 +722,7 @@ public PlacesList placesForTags(int placeTypeId, String woeId, String pla * @param maxTakenDate * Optional, can be null. * @return A PlacesList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PlacesList placesForUser(int placeType, String woeId, String placeId, String threshold, Date minUploadDate, Date maxUploadDate, Date minTakenDate, Date maxTakenDate) throws FlickrException { @@ -773,7 +776,7 @@ public PlacesList placesForUser(int placeType, String woeId, String place * @deprecated This method has been deprecated. It won't be removed but you should use {@link #getInfo(String, String)} instead. * @param placeId * @return A Location - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Deprecated public Location resolvePlaceId(String placeId) throws FlickrException { @@ -800,7 +803,7 @@ public Location resolvePlaceId(String placeId) throws FlickrException { * @deprecated This method has been deprecated. It won't be removed but you should use {@link PlacesInterface#getInfoByUrl(String)} instead. * @param flickrPlacesUrl * @return A Location - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Deprecated public Location resolvePlaceURL(String flickrPlacesUrl) throws FlickrException { @@ -837,7 +840,7 @@ public Location resolvePlaceURL(String flickrPlacesUrl) throws FlickrException { * @param maxTakenDate * Optional, can be null. * @return A list of Tags - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public ArrayList tagsForPlace(String woeId, String placeId, Date minUploadDate, Date maxUploadDate, Date minTakenDate, Date maxTakenDate) throws FlickrException { @@ -898,14 +901,8 @@ private Location parseLocation(Element locationElement) { location.setWoeName(locationElement.getAttribute("woe_name")); location.setIsHasShapeData("1".equals(locationElement.getAttribute("has_shapedata"))); location.setPlaceType(stringPlaceTypeToInt(locationElement.getAttribute("place_type"))); - try { - location.setLocality(parseLocationPlace(localityElement, Place.TYPE_LOCALITY)); - } catch (NullPointerException ex) { - } - try { - location.setCounty(parseLocationPlace(countyElement, Place.TYPE_COUNTY)); - } catch (NullPointerException ex) { - } + location.setLocality(parseLocationPlace(localityElement, Place.TYPE_LOCALITY)); + location.setCounty(parseLocationPlace(countyElement, Place.TYPE_COUNTY)); location.setRegion(parseLocationPlace(regionElement, Place.TYPE_REGION)); location.setCountry(parseLocationPlace(countryElement, Place.TYPE_COUNTRY)); @@ -913,14 +910,18 @@ private Location parseLocation(Element locationElement) { } private Place parseLocationPlace(Element element, int type) { - Place place = new Place(); - place.setName(XMLUtilities.getValue(element)); - place.setPlaceId(element.getAttribute("place_id")); - place.setPlaceUrl(element.getAttribute("place_url")); - place.setWoeId(element.getAttribute("woeid")); - place.setLatitude(element.getAttribute("latitude")); - place.setLongitude(element.getAttribute("longitude")); - place.setPlaceType(type); + Place place = null; + if (element != null) { + place = new Place(); + place.setName(XMLUtilities.getValue(element)); + place.setPlaceId(element.getAttribute("place_id")); + place.setPlaceUrl(element.getAttribute("place_url")); + place.setWoeId(element.getAttribute("woeid")); + place.setLatitude(element.getAttribute("latitude")); + place.setLongitude(element.getAttribute("longitude")); + place.setPlaceType(type); + } + return place; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesList.java b/src/main/java/com/flickr4java/flickr/places/PlacesList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesList.java rename to src/main/java/com/flickr4java/flickr/places/PlacesList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/ShapeData.java b/src/main/java/com/flickr4java/flickr/places/ShapeData.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/places/ShapeData.java rename to src/main/java/com/flickr4java/flickr/places/ShapeData.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/ShapeDataList.java b/src/main/java/com/flickr4java/flickr/places/ShapeDataList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/places/ShapeDataList.java rename to src/main/java/com/flickr4java/flickr/places/ShapeDataList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java b/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java similarity index 89% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java rename to src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java index a9d10c8b..bbcb3d60 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java +++ b/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java @@ -5,7 +5,7 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import org.w3c.dom.Element; @@ -33,7 +33,7 @@ public class PrefsInterface { private String sharedSecret; - private Transport transportAPI; + private AbstractTransport transportAPI; /** * Construct a PrefsInterface. @@ -43,7 +43,7 @@ public class PrefsInterface { * @param transportAPI * The Transport interface */ - public PrefsInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public PrefsInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -56,7 +56,7 @@ public PrefsInterface(String apiKey, String sharedSecret, Transport transportAPI * @see com.flickr4java.flickr.Flickr#CONTENTTYPE_PHOTO * @see com.flickr4java.flickr.Flickr#CONTENTTYPE_SCREENSHOT * @return The content-type - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public String getContentType() throws FlickrException { Map parameters = new HashMap(); @@ -75,7 +75,7 @@ public String getContentType() throws FlickrException { * Returns the default privacy level for geographic information attached to the user's photos. * * @return privacy-level - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see com.flickr4java.flickr.Flickr#PRIVACY_LEVEL_NO_FILTER * @see com.flickr4java.flickr.Flickr#PRIVACY_LEVEL_PUBLIC * @see com.flickr4java.flickr.Flickr#PRIVACY_LEVEL_FRIENDS @@ -107,7 +107,7 @@ public int getGeoPerms() throws FlickrException { * Returns the default hidden preference for the user. * * @return boolean hidden or not - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public boolean getHidden() throws FlickrException { Map parameters = new HashMap(); @@ -129,7 +129,7 @@ public boolean getHidden() throws FlickrException { * @see com.flickr4java.flickr.Flickr#SAFETYLEVEL_RESTRICTED * @see com.flickr4java.flickr.Flickr#SAFETYLEVEL_SAFE * @return The current users safety-level - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public String getSafetyLevel() throws FlickrException { Map parameters = new HashMap(); @@ -153,7 +153,7 @@ public String getSafetyLevel() throws FlickrException { * @see com.flickr4java.flickr.Flickr#PRIVACY_LEVEL_FRIENDS_FAMILY * @see com.flickr4java.flickr.Flickr#PRIVACY_LEVEL_FAMILY * @see com.flickr4java.flickr.Flickr#PRIVACY_LEVEL_FRIENDS - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @return privacyLevel */ public int getPrivacy() throws FlickrException { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/push/PushInterface.java b/src/main/java/com/flickr4java/flickr/push/PushInterface.java similarity index 76% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/push/PushInterface.java rename to src/main/java/com/flickr4java/flickr/push/PushInterface.java index f222bddb..163488af 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/push/PushInterface.java +++ b/src/main/java/com/flickr4java/flickr/push/PushInterface.java @@ -3,7 +3,7 @@ */ package com.flickr4java.flickr.push; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; /** * @author acaplan @@ -23,7 +23,7 @@ public class PushInterface { private String sharedSecret; - private Transport transportAPI; + private AbstractTransport transportAPI; /** * @@ -31,7 +31,7 @@ public class PushInterface { * @param sharedSecret * @param transportAPI */ - public PushInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public PushInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Argument.java b/src/main/java/com/flickr4java/flickr/reflection/Argument.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Argument.java rename to src/main/java/com/flickr4java/flickr/reflection/Argument.java index 74ccda22..1e57efda 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Argument.java +++ b/src/main/java/com/flickr4java/flickr/reflection/Argument.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.reflection; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Error.java b/src/main/java/com/flickr4java/flickr/reflection/Error.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Error.java rename to src/main/java/com/flickr4java/flickr/reflection/Error.java index 75a151ae..1ecef1ef 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Error.java +++ b/src/main/java/com/flickr4java/flickr/reflection/Error.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.reflection; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Method.java b/src/main/java/com/flickr4java/flickr/reflection/Method.java similarity index 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Method.java rename to src/main/java/com/flickr4java/flickr/reflection/Method.java index 0e28dd3c..00d437af 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Method.java +++ b/src/main/java/com/flickr4java/flickr/reflection/Method.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.reflection; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java b/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java similarity index 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java rename to src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java index 09b94741..002dfbd9 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java +++ b/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java @@ -1,14 +1,12 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.reflection; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.util.XMLUtilities; - -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -27,7 +25,7 @@ */ public class ReflectionInterface { - private static Logger _log = Logger.getLogger(ReflectionInterface.class); + private static Logger _log = LoggerFactory.getLogger(ReflectionInterface.class); public static final String METHOD_GET_METHOD_INFO = "flickr.reflection.getMethodInfo"; @@ -61,7 +59,7 @@ public ReflectionInterface(String apiKey, String sharedSecret, Transport transpo * @param methodName * The method name * @return The Method object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Method getMethodInfo(String methodName) throws FlickrException { Map parameters = new HashMap(); @@ -179,7 +177,7 @@ public Method getMethodInfo(String methodName) throws FlickrException { * Get a list of all methods. * * @return The method names - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getMethods() throws FlickrException { Map parameters = new HashMap(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Csv.java b/src/main/java/com/flickr4java/flickr/stats/Csv.java similarity index 83% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Csv.java rename to src/main/java/com/flickr4java/flickr/stats/Csv.java index d853787c..9bfeb51f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Csv.java +++ b/src/main/java/com/flickr4java/flickr/stats/Csv.java @@ -1,6 +1,7 @@ package com.flickr4java.flickr.stats; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.Date; @@ -13,10 +14,10 @@ public class Csv { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Csv.class); + private static Logger _log = LoggerFactory.getLogger(Csv.class); private String href; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Domain.java b/src/main/java/com/flickr4java/flickr/stats/Domain.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Domain.java rename to src/main/java/com/flickr4java/flickr/stats/Domain.java index b4addf83..299f1edb 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Domain.java +++ b/src/main/java/com/flickr4java/flickr/stats/Domain.java @@ -1,6 +1,7 @@ package com.flickr4java.flickr.stats; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Domain information as returned by the stats interface. @@ -11,10 +12,10 @@ public class Domain { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Domain.class); + private static Logger _log = LoggerFactory.getLogger(Domain.class); public Domain() { } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/DomainList.java b/src/main/java/com/flickr4java/flickr/stats/DomainList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/DomainList.java rename to src/main/java/com/flickr4java/flickr/stats/DomainList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Referrer.java b/src/main/java/com/flickr4java/flickr/stats/Referrer.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Referrer.java rename to src/main/java/com/flickr4java/flickr/stats/Referrer.java index c808422e..e64ac8c8 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Referrer.java +++ b/src/main/java/com/flickr4java/flickr/stats/Referrer.java @@ -1,6 +1,7 @@ package com.flickr4java.flickr.stats; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Referrer information as returned by the stats interface. @@ -11,10 +12,10 @@ public class Referrer { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Referrer.class); + private static Logger _log = LoggerFactory.getLogger(Referrer.class); public Referrer() { } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/ReferrerList.java b/src/main/java/com/flickr4java/flickr/stats/ReferrerList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/ReferrerList.java rename to src/main/java/com/flickr4java/flickr/stats/ReferrerList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Stats.java b/src/main/java/com/flickr4java/flickr/stats/Stats.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Stats.java rename to src/main/java/com/flickr4java/flickr/stats/Stats.java index 3541d3eb..cd66ddc8 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Stats.java +++ b/src/main/java/com/flickr4java/flickr/stats/Stats.java @@ -1,6 +1,7 @@ package com.flickr4java.flickr.stats; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Stats information as returned by the stats interface. @@ -11,10 +12,10 @@ public class Stats { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Stats.class); + private static Logger _log = LoggerFactory.getLogger(Stats.class); private int views; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java b/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java similarity index 97% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java rename to src/main/java/com/flickr4java/flickr/stats/StatsInterface.java index bbfe07bf..0f6286ae 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java +++ b/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java @@ -3,13 +3,13 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.FlickrRuntimeException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photos.PhotoList; import com.flickr4java.flickr.photos.PhotoUtils; import com.flickr4java.flickr.util.XMLUtilities; - -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; @@ -31,10 +31,10 @@ public class StatsInterface { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(StatsInterface.class); + private static Logger _log = LoggerFactory.getLogger(StatsInterface.class); private static final String METHOD_GET_COLLECTION_DOMAINS = "flickr.stats.getCollectionDomains"; @@ -70,9 +70,9 @@ public class StatsInterface { private final String sharedSecret; - private final Transport transportAPI; + private final AbstractTransport transportAPI; - public StatsInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public StatsInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transportAPI = transportAPI; @@ -133,7 +133,7 @@ public Stats getCollectionStats(String collectionId, Date date) throws FlickrExc /** * Returns a list of URLs for text files containing all your stats data (from November 26th 2007 onwards) for the currently auth'd user. * - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * * @see "http://www.flickr.com/services/api/flickr.stats.getCSVFiles.html" */ @@ -315,7 +315,7 @@ public Stats getPhotostreamStats(Date date) throws FlickrException { * (Optional) Number of referrers to return per page. If this argument is omitted, it defaults to 25. The maximum allowed value is 100. * @param page * (Optional) The page of results to return. If this argument is omitted, it defaults to 1. - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see "http://www.flickr.com/services/api/flickr.stats.getPopularPhotos.html" */ public PhotoList getPopularPhotos(Date date, StatsSort sort, int perPage, int page) throws FlickrException { @@ -344,7 +344,7 @@ public PhotoList getPopularPhotos(Date date, StatsSort sort, int perPage, * @param date * (Optional) Stats will be returned for this date. A day according to Flickr Stats starts at midnight GMT for all users, and timestamps will * automatically be rounded down to the start of the day. If no date is provided, all time view counts will be returned. - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * * @see "http://www.flickr.com/services/api/flickr.stats.getTotalViews.html" */ diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/StatsSort.java b/src/main/java/com/flickr4java/flickr/stats/StatsSort.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/StatsSort.java rename to src/main/java/com/flickr4java/flickr/stats/StatsSort.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Totals.java b/src/main/java/com/flickr4java/flickr/stats/Totals.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Totals.java rename to src/main/java/com/flickr4java/flickr/stats/Totals.java index b5d17555..d1f8cbd4 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Totals.java +++ b/src/main/java/com/flickr4java/flickr/stats/Totals.java @@ -1,6 +1,7 @@ package com.flickr4java.flickr.stats; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Stats information as returned by the stats interface. @@ -11,10 +12,10 @@ public class Totals { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Totals.class); + private static Logger _log = LoggerFactory.getLogger(Totals.class); private int total; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/Cluster.java b/src/main/java/com/flickr4java/flickr/tags/Cluster.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/Cluster.java rename to src/main/java/com/flickr4java/flickr/tags/Cluster.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/ClusterList.java b/src/main/java/com/flickr4java/flickr/tags/ClusterList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/ClusterList.java rename to src/main/java/com/flickr4java/flickr/tags/ClusterList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/HotlistTag.java b/src/main/java/com/flickr4java/flickr/tags/HotlistTag.java similarity index 85% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/HotlistTag.java rename to src/main/java/com/flickr4java/flickr/tags/HotlistTag.java index c0b07bfc..0432046d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/HotlistTag.java +++ b/src/main/java/com/flickr4java/flickr/tags/HotlistTag.java @@ -15,6 +15,8 @@ public HotlistTag() { } + @Deprecated + // Note that the API no longer returns the score public int getScore() { return score; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java b/src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java similarity index 85% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java rename to src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java index 8cd0e984..113d0f4c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java +++ b/src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.tags; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/Tag.java b/src/main/java/com/flickr4java/flickr/tags/Tag.java similarity index 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/Tag.java rename to src/main/java/com/flickr4java/flickr/tags/Tag.java index ae389c5c..81354c33 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/Tag.java +++ b/src/main/java/com/flickr4java/flickr/tags/Tag.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.tags; /** diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/TagRaw.java b/src/main/java/com/flickr4java/flickr/tags/TagRaw.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/TagRaw.java rename to src/main/java/com/flickr4java/flickr/tags/TagRaw.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java b/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java rename to src/main/java/com/flickr4java/flickr/tags/TagsInterface.java index 74062ae1..24b048ac 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java +++ b/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java @@ -1,11 +1,9 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.tags; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photos.PhotoList; import com.flickr4java.flickr.photos.PhotoUtils; @@ -19,6 +17,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Optional; import java.util.Map; /** @@ -53,7 +52,7 @@ public class TagsInterface { private final String sharedSecret; - private final Transport transportAPI; + private final AbstractTransport transportAPI; /** * Construct a TagsInterface. @@ -63,7 +62,7 @@ public class TagsInterface { * @param transportAPI * The Transport interface */ - public TagsInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public TagsInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; @@ -72,7 +71,6 @@ public TagsInterface(String apiKey, String sharedSecret, Transport transportAPI) /** * Search for tag-clusters. - *

    * *

    * This method does not require authentication. @@ -119,7 +117,7 @@ public ClusterList getClusters(String searchTag) throws FlickrException { * @param tag * @param clusterId * @return PhotoList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getClusterPhotos(String tag, String clusterId) throws FlickrException { @@ -174,16 +172,18 @@ public Collection getHotList(String period, int count) throws Flickr throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } - Element tagsElement = response.getPayload(); - - List tags = new ArrayList(); - NodeList tagElements = tagsElement.getElementsByTagName("tag"); - for (int i = 0; i < tagElements.getLength(); i++) { - Element tagElement = (Element) tagElements.item(i); - HotlistTag tag = new HotlistTag(); - tag.setScore(tagElement.getAttribute("score")); - tag.setValue(((Text) tagElement.getFirstChild()).getData()); - tags.add(tag); + Collection payloadCollection = response.getPayloadCollection(); + Optional element = payloadCollection.stream().filter(payload -> payload.getTagName().equals("hottags")).findFirst(); + + List tags = new ArrayList<>(); + if (element.isPresent()) { + NodeList tagElements = element.get().getElementsByTagName("tag"); + for (int i = 0; i < tagElements.getLength(); i++) { + Element tagElement = (Element) tagElements.item(i); + HotlistTag tag = new HotlistTag(); + tag.setValue(((Text) tagElement.getFirstChild()).getData()); + tags.add(tag); + } } return tags; } @@ -242,7 +242,7 @@ public Photo getListPhoto(String photoId) throws FlickrException { * @param userId * The User ID * @return The User object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getListUser(String userId) throws FlickrException { @@ -280,7 +280,7 @@ public Collection getListUser(String userId) throws FlickrException { * @param userId * The user ID * @return The collection of Tag objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getListUserPopular(String userId) throws FlickrException { @@ -317,7 +317,7 @@ public Collection getListUserPopular(String userId) throws FlickrException *

    * * @return The collection of Tag objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getListUserRaw() throws FlickrException { @@ -335,7 +335,7 @@ public Collection getListUserRaw() throws FlickrException { * a tag to search for (optional) * * @return The collection of Tag objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getListUserRaw(String tagVal) throws FlickrException { @@ -380,7 +380,7 @@ public Collection getListUserRaw(String tagVal) throws FlickrException { * @param tag * The source tag * @return A RelatedTagsList object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public RelatedTagsList getRelated(String tag) throws FlickrException { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/test/TestInterface.java b/src/main/java/com/flickr4java/flickr/test/TestInterface.java similarity index 82% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/test/TestInterface.java rename to src/main/java/com/flickr4java/flickr/test/TestInterface.java index ddde5d40..111b27f9 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/test/TestInterface.java +++ b/src/main/java/com/flickr4java/flickr/test/TestInterface.java @@ -1,16 +1,14 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.test; +import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.AbstractTransport; import com.flickr4java.flickr.people.User; import org.w3c.dom.Element; import org.w3c.dom.Text; -import org.xml.sax.SAXException; import java.util.Collection; import java.util.HashMap; @@ -33,9 +31,9 @@ public class TestInterface { private final String sharedSecret; - private final Transport transport; + private final AbstractTransport transport; - public TestInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public TestInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transport = transportAPI; @@ -47,11 +45,12 @@ public TestInterface(String apiKey, String sharedSecret, Transport transportAPI) * @param params * The parameters * @return The Collection of echoed elements - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection echo(Map params) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ECHO); + parameters.put(Flickr.API_KEY, apiKey); parameters.putAll(params); Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); @@ -65,8 +64,7 @@ public Collection echo(Map params) throws FlickrExcepti * A testing method which checks if the caller is logged in then returns a User object. * * @return The User object - * @throws SAXException - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public User login() throws FlickrException { Map parameters = new HashMap(); @@ -89,7 +87,7 @@ public User login() throws FlickrException { /** * Null test. This method requires authentication with 'read' permission. * - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void null_() throws FlickrException { Map parameters = new HashMap(); diff --git a/src/main/java/com/flickr4java/flickr/uploader/IUploader.java b/src/main/java/com/flickr4java/flickr/uploader/IUploader.java new file mode 100644 index 00000000..1c9613da --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/uploader/IUploader.java @@ -0,0 +1,20 @@ +package com.flickr4java.flickr.uploader; + +import com.flickr4java.flickr.FlickrException; + +import java.io.File; +import java.io.InputStream; + +public interface IUploader { + String upload(byte[] data, UploadMetaData metaData) throws FlickrException; + + String upload(File file, UploadMetaData metaData) throws FlickrException; + + String upload(InputStream in, UploadMetaData metaData) throws FlickrException; + + String replace(InputStream in, String flickrId, boolean async) throws FlickrException; + + String replace(byte[] data, String flickrId, boolean async) throws FlickrException; + + String replace(File file, String flickrId, boolean async) throws FlickrException; +} diff --git a/src/main/java/com/flickr4java/flickr/uploader/Payload.java b/src/main/java/com/flickr4java/flickr/uploader/Payload.java new file mode 100644 index 00000000..231f78d6 --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/uploader/Payload.java @@ -0,0 +1,66 @@ +package com.flickr4java.flickr.uploader; + +import com.flickr4java.flickr.FlickrRuntimeException; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; + +public class Payload { + + private byte[] payload; + + private String photoId; + + public Payload(byte[] payload) { + this.payload = payload; + } + + public Payload(File file) { + try { + payload = Files.readAllBytes(file.toPath()); + } catch (IOException e) { + throw new FlickrRuntimeException(e); + } + } + + public Payload(InputStream inputStream) { + try (ByteArrayOutputStream buffer = new ByteArrayOutputStream()) { + int nRead; + byte[] data = new byte[16384]; + + while ((nRead = inputStream.read(data, 0, data.length)) != -1) { + buffer.write(data, 0, nRead); + } + + payload = buffer.toByteArray(); + } catch (IOException e) { + throw new FlickrRuntimeException(e); + } + } + + public Payload(InputStream inputStream, String photoId) { + this(inputStream); + this.photoId = photoId; + } + + public Payload(byte[] payload, String photoId) { + this(payload); + this.photoId = photoId; + } + + public Payload(File file, String photoId) { + this(file); + this.photoId = photoId; + } + + public byte[] getPayload() { + return payload; + } + + public String getPhotoId() { + return photoId; + } +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java b/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java similarity index 63% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java rename to src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java index 9cd0e64f..65859260 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java +++ b/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java @@ -1,10 +1,12 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.uploader; +import com.flickr4java.flickr.util.StringUtilities; + import java.util.Collection; +import java.util.Map; +import java.util.TreeMap; /** * Metadata that describe a photo. @@ -14,9 +16,9 @@ */ public class UploadMetaData { - private String filename = null; + private String filename = "image.jpg"; - private String fileMimeType = null; + private String fileMimeType = "image/jpeg"; private String title; @@ -30,7 +32,7 @@ public class UploadMetaData { private boolean familyFlag; - private boolean async = false; + private boolean async; private Boolean hidden; @@ -38,6 +40,8 @@ public class UploadMetaData { private String contentType; + private String photoId; + public String getTitle() { return title; } @@ -190,7 +194,7 @@ public boolean isAsync() { } /** - * Switch the Uploader behaviour - sychronous or asyncrounous. + * Switch the Uploader behaviour - synchronous or asynchronous. *

    * * The default is sychronous. @@ -204,4 +208,70 @@ public UploadMetaData setAsync(boolean async) { return this; } + public String getPhotoId() { + return photoId; + } + + /** + * Set the existing photo id for a replace operation. + * @param photoId + */ + public void setPhotoId(String photoId) { + this.photoId = photoId; + } + + /** + * Get the upload parameters. + * @return + */ + public Map getUploadParameters() { + Map parameters = new TreeMap<>(); + + + String title = getTitle(); + if (title != null) { + parameters.put("title", title); + } + + String description = getDescription(); + if (description != null) { + parameters.put("description", description); + } + + Collection tags = getTags(); + if (tags != null) { + parameters.put("tags", StringUtilities.join(tags, " ")); + } + + if (isHidden() != null) { + parameters.put("hidden", isHidden().booleanValue() ? "1" : "0"); + } + + if (getSafetyLevel() != null) { + parameters.put("safety_level", getSafetyLevel()); + } + + if (getContentType() != null) { + parameters.put("content_type", getContentType()); + } + + if (getPhotoId() != null) { + parameters.put("photo_id", getPhotoId()); + } + + parameters.put("is_public", isPublicFlag() ? "1" : "0"); + parameters.put("is_family", isFamilyFlag() ? "1" : "0"); + parameters.put("is_friend", isFriendFlag() ? "1" : "0"); + parameters.put("async", isAsync() ? "1" : "0"); + + return parameters; + } + + public static UploadMetaData replace(boolean async, String photoId) { + UploadMetaData metaData = new UploadMetaData(); + metaData.async = async; + metaData.photoId = photoId; + return metaData; + } + } diff --git a/src/main/java/com/flickr4java/flickr/uploader/Uploader.java b/src/main/java/com/flickr4java/flickr/uploader/Uploader.java new file mode 100644 index 00000000..accc7ce2 --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/uploader/Uploader.java @@ -0,0 +1,191 @@ + + +package com.flickr4java.flickr.uploader; + +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.REST; +import com.flickr4java.flickr.Transport; + +import java.io.File; +import java.io.InputStream; +import java.util.Set; + +/** + * Upload a photo. + *

    + * + * Setting {@link com.flickr4java.flickr.uploader.UploadMetaData#setAsync(boolean)} you can switch between synchronous and asynchronous uploads. + *

    + * + * Synchronous uploads return the photoId, whilst asynchronous uploads return a ticketId. + *

    + * + * TicketId's can be tracked with {@link com.flickr4java.flickr.photos.upload.UploadInterface#checkTickets(Set)} for completion. + * + * @author Anthony Eden + * @version $Id: Uploader.java,v 1.12 2009/12/15 20:57:49 x-mago Exp $ + */ +public class Uploader implements IUploader { + + private static final String SERVICES_REPLACE_PATH = "/services/replace/"; + + private static final String SERVICES_UPLOAD_PATH = "/services/upload/"; + + private final String apiKey; + + private final String sharedSecret; + + private final Transport transport; + + /** + * Construct an Uploader. + * + * @param apiKey + * The API key + */ + public Uploader(String apiKey, String sharedSecret) { + this(apiKey, sharedSecret, new REST(Transport.UPLOAD_API_HOST)); + this.transport.setResponseClass(UploaderResponse.class); + } + + /** + * Construct an Uploader. + * + * @param apiKey + * The API key + * @param transport + */ + public Uploader(String apiKey, String sharedSecret, Transport transport) { + this.apiKey = apiKey; + this.sharedSecret = sharedSecret; + this.transport = transport; + } + + /** + * Upload a photo from a byte-array. + * + * @param data + * The photo data as a byte array + * @param metaData + * The meta data + * @return photoId or ticketId + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Override + public String upload(byte[] data, UploadMetaData metaData) throws FlickrException { + Payload payload = new Payload(data); + return sendUploadRequest(metaData, payload); + } + + /** + * Upload a photo from a File. + * + * @param file + * the photo file + * @param metaData + * The meta data + * @return photoId or ticketId + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Override + public String upload(File file, UploadMetaData metaData) throws FlickrException { + Payload payload = new Payload(file); + return sendUploadRequest(metaData, payload); + } + + /** + * Upload a photo from an InputStream. + * + * @param in + * @param metaData + * @return photoId or ticketId + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Override + public String upload(InputStream in, UploadMetaData metaData) throws FlickrException { + Payload payload = new Payload(in); + return sendUploadRequest(metaData, payload); + } + + /** + * Replace a photo from an InputStream. + * + * @param in + * @return photoId or ticketId + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Override + public String replace(InputStream in, String flickrId, boolean async) throws FlickrException { + Payload payload = new Payload(in, flickrId); + return sendReplaceRequest(async, payload); + } + + /** + * Replace a photo from an InputStream. + * + * @param data + * @param flickrId + * @param async + * @return photoId or ticketId + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Override + public String replace(byte[] data, String flickrId, boolean async) throws FlickrException { + Payload payload = new Payload(data, flickrId); + return sendReplaceRequest(async, payload); + } + + /** + * Replace a photo from a File. + * + * @param file + * @param flickrId + * @param async + * @return photoId or ticketId + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Override + public String replace(File file, String flickrId, boolean async) throws FlickrException { + Payload payload = new Payload(file, flickrId); + return sendReplaceRequest(async, payload); + } + + private String sendUploadRequest(UploadMetaData metaData, Payload payload) throws FlickrException { + UploaderResponse response = (UploaderResponse) transport.postMultiPart(SERVICES_UPLOAD_PATH, metaData, payload, apiKey, sharedSecret); + if (response.isError()) { + throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); + } + + return getResponseString(metaData.isAsync(), response); + } + + private String sendReplaceRequest(boolean async, Payload payload) throws FlickrException { + UploaderResponse response = (UploaderResponse) transport.postMultiPart(SERVICES_REPLACE_PATH, UploadMetaData.replace(async, payload.getPhotoId()), payload, apiKey, sharedSecret); + if (response.isError()) { + throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); + } + + return getResponseString(async, response); + } + + /** + * Get the photo or ticket id from the response. + * + * @param async + * @param response + * @return + */ + private String getResponseString(boolean async, UploaderResponse response) { + return async ? response.getTicketId() : response.getPhotoId(); + } + + /** + * Return the {@link REST} impl used by this instance so that properties can be set on it, eg {@link REST#setConnectTimeoutMs(Integer)}. TODO: should return + * a wrapper that only allows "safe" properties to be set. + * + * @return The {@link REST} transport used by this instance + */ + public REST getTransport() { + return (REST) transport; + } +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java b/src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java rename to src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java index 5d00cf85..07ce5988 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java +++ b/src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.uploader; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java b/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java similarity index 81% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java rename to src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java index e991fa8c..558e3a6c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java +++ b/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java @@ -1,11 +1,9 @@ -/* - * 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.AbstractTransport; import com.flickr4java.flickr.galleries.Gallery; import com.flickr4java.flickr.groups.Group; import com.flickr4java.flickr.people.User; @@ -36,11 +34,11 @@ public class UrlsInterface { public static final String METHOD_LOOKUP_GALLERY = "flickr.urls.lookupGallery"; - private String apiKey; + private final String apiKey; - private String sharedSecret; + private final String sharedSecret; - private Transport transport; + private final AbstractTransport transport; /** * Construct a UrlsInterface. @@ -50,7 +48,7 @@ public class UrlsInterface { * @param transportAPI * The Transport interface */ - public UrlsInterface(String apiKey, String sharedSecret, Transport transportAPI) { + public UrlsInterface(String apiKey, String sharedSecret, AbstractTransport transportAPI) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; this.transport = transportAPI; @@ -62,7 +60,7 @@ public UrlsInterface(String apiKey, String sharedSecret, Transport transportAPI) * @param groupId * The group ID * @return The group URL - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public String getGroup(String groupId) throws FlickrException { Map parameters = new HashMap(); @@ -70,7 +68,7 @@ public String getGroup(String groupId) throws FlickrException { parameters.put("group_id", groupId); - Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -85,7 +83,7 @@ public String getGroup(String groupId) throws FlickrException { * @param userId * The user ID * @return The user photo URL - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public String getUserPhotos(String userId) throws FlickrException { Map parameters = new HashMap(); @@ -93,7 +91,7 @@ public String getUserPhotos(String userId) throws FlickrException { parameters.put("user_id", userId); - Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -108,7 +106,7 @@ public String getUserPhotos(String userId) throws FlickrException { * @param userId * The user ID * @return The URL - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public String getUserProfile(String userId) throws FlickrException { Map parameters = new HashMap(); @@ -116,7 +114,7 @@ public String getUserProfile(String userId) throws FlickrException { parameters.put("user_id", userId); - Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -131,7 +129,7 @@ public String getUserProfile(String userId) throws FlickrException { * @param url * The url * @return The group - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Group lookupGroup(String url) throws FlickrException { Map parameters = new HashMap(); @@ -139,7 +137,7 @@ public Group lookupGroup(String url) throws FlickrException { parameters.put("url", url); - Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -158,7 +156,7 @@ public Group lookupGroup(String url) throws FlickrException { * @param url * The user profile URL * @return The username - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public String lookupUser(String url) throws FlickrException { Map parameters = new HashMap(); @@ -166,7 +164,7 @@ public String lookupUser(String url) throws FlickrException { parameters.put("url", url); - Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -182,7 +180,7 @@ public String lookupUser(String url) throws FlickrException { * @param galleryId * The user profile URL * @return The Gallery - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Gallery lookupGallery(String galleryId) throws FlickrException { @@ -190,7 +188,7 @@ public Gallery lookupGallery(String galleryId) throws FlickrException { parameters.put("method", METHOD_LOOKUP_GALLERY); parameters.put("url", galleryId); - Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/AuthStore.java b/src/main/java/com/flickr4java/flickr/util/AuthStore.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/AuthStore.java rename to src/main/java/com/flickr4java/flickr/util/AuthStore.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/BuddyIconable.java b/src/main/java/com/flickr4java/flickr/util/BuddyIconable.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/BuddyIconable.java rename to src/main/java/com/flickr4java/flickr/util/BuddyIconable.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/ByteUtilities.java b/src/main/java/com/flickr4java/flickr/util/ByteUtilities.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/ByteUtilities.java rename to src/main/java/com/flickr4java/flickr/util/ByteUtilities.java index 05d37ef1..256426e0 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/ByteUtilities.java +++ b/src/main/java/com/flickr4java/flickr/util/ByteUtilities.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/DebugInputStream.java b/src/main/java/com/flickr4java/flickr/util/DebugInputStream.java similarity index 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/DebugInputStream.java rename to src/main/java/com/flickr4java/flickr/util/DebugInputStream.java index 08207446..b4e7829d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/DebugInputStream.java +++ b/src/main/java/com/flickr4java/flickr/util/DebugInputStream.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java b/src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java similarity index 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java rename to src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java index 12e163b2..65b7cd39 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java +++ b/src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java b/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java rename to src/main/java/com/flickr4java/flickr/util/FileAuthStore.java index df2ae861..c9a4fb48 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java +++ b/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java @@ -37,8 +37,10 @@ public FileAuthStore(File authStoreDir) throws FlickrException { this.authStoreDir = authStoreDir; - if (!authStoreDir.exists()) + + if (!authStoreDir.exists()) { authStoreDir.mkdir(); + } if (!authStoreDir.canRead()) { try { @@ -131,8 +133,9 @@ public void clearAll() { this.auths.clear(); this.authsByUser.clear(); File[] auths = this.authStoreDir.listFiles(new AuthFilenameFilter()); - for (int i = 0; i < auths.length; i++) { - auths[i].delete(); + + for (File auth : auths) { + auth.delete(); } } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/IOUtilities.java b/src/main/java/com/flickr4java/flickr/util/IOUtilities.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/IOUtilities.java rename to src/main/java/com/flickr4java/flickr/util/IOUtilities.java index adb5f146..7c475f2d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/IOUtilities.java +++ b/src/main/java/com/flickr4java/flickr/util/IOUtilities.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; import java.io.IOException; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/ImageUtilities.java b/src/main/java/com/flickr4java/flickr/util/ImageUtilities.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/ImageUtilities.java rename to src/main/java/com/flickr4java/flickr/util/ImageUtilities.java index 6adfd9f2..1808ff82 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/ImageUtilities.java +++ b/src/main/java/com/flickr4java/flickr/util/ImageUtilities.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; diff --git a/src/main/java/com/flickr4java/flickr/util/OAuthUtilities.java b/src/main/java/com/flickr4java/flickr/util/OAuthUtilities.java new file mode 100644 index 00000000..08121597 --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/util/OAuthUtilities.java @@ -0,0 +1,114 @@ +package com.flickr4java.flickr.util; + +import java.util.Map; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.RequestContext; +import com.flickr4java.flickr.auth.Auth; +import com.github.scribejava.apis.FlickrApi; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.httpclient.jdk.JDKHttpClientConfig; +import com.github.scribejava.core.model.OAuth1AccessToken; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth10aService; + +/** + * OAuth utilities. + * + * @author Vincent Privat + */ +public final class OAuthUtilities { + + private static final Logger logger = LoggerFactory.getLogger(OAuthUtilities.class); + + private OAuthUtilities() { + + } + + /** + * Creates a new OAuth 1.0.a service. + * + * @param apiKey OAuth API key + * @param sharedSecret OAuth API secret + * @param connectTimeoutMs connect timeout in milliseconds + * @param readTimeoutMs read timeout in milliseconds + * + * @return OAuth 1.0.a service + */ + public static OAuth10aService createOAuthService(String apiKey, String sharedSecret, Integer connectTimeoutMs, Integer readTimeoutMs) { + JDKHttpClientConfig config = JDKHttpClientConfig.defaultConfig(); + if (connectTimeoutMs != null) { + config.setConnectTimeout(connectTimeoutMs); + } + if (readTimeoutMs != null) { + config.setReadTimeout(readTimeoutMs); + } + ServiceBuilder serviceBuilder = new ServiceBuilder(apiKey).apiSecret(sharedSecret).httpClientConfig(config); + + if (Flickr.debugRequest) { + serviceBuilder = serviceBuilder.debug(); + } + + return serviceBuilder.build(FlickrApi.instance()); + } + + /** + * Signs the given OAuth request using the given OAuth service. + * + * @param service OAuth 1.0.a service + * @param request OAuth request + * @param proxyCredentials optional proxy credentials, can be null + */ + public static void signRequest(OAuth10aService service, OAuthRequest request, String proxyCredentials) { + Auth auth = RequestContext.getRequestContext().getAuth(); + if (auth != null) { + service.signRequest(new OAuth1AccessToken(auth.getToken(), auth.getTokenSecret()), request); + } + + if (proxyCredentials != null) { + request.addHeader("Proxy-Authorization", "Basic " + proxyCredentials); + } + + if (Flickr.debugRequest) { + logger.debug("POST: {}", request.getCompleteUrl()); + } + } + + /** + * Builds a normal POST request. + * + * @param parameters body parameters + * @param url URL + * @return OAuth request + */ + public static OAuthRequest buildNormalPostRequest(Map parameters, String url) { + OAuthRequest request = new OAuthRequest(Verb.POST, url); + parameters.entrySet().forEach(e -> request.addBodyParameter(e.getKey(), String.valueOf(e.getValue()))); + return request; + } + + /** + * Builds a multipart POST request. + * + * @param parameters QueryString parameters + * @param url URL + * @return OAuth request + */ + public static OAuthRequest buildMultipartRequest(Map parameters, String url) { + OAuthRequest request = new OAuthRequest(Verb.POST, url); + String multipartBoundary = getMultipartBoundary(); + request.initMultipartPayload(multipartBoundary); + request.addHeader("Content-Type", "multipart/form-data; boundary=" + multipartBoundary); + parameters.entrySet().forEach(e -> request.addQuerystringParameter(e.getKey(), e.getValue())); + return request; + } + + private static String getMultipartBoundary() { + return "---------------------------" + UUID.randomUUID(); + } +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/StringUtilities.java b/src/main/java/com/flickr4java/flickr/util/StringUtilities.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/StringUtilities.java rename to src/main/java/com/flickr4java/flickr/util/StringUtilities.java index 2abb1417..d10296d0 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/StringUtilities.java +++ b/src/main/java/com/flickr4java/flickr/util/StringUtilities.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; import java.util.Arrays; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java b/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java rename to src/main/java/com/flickr4java/flickr/util/UrlUtilities.java index 13687b43..6036208b 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java +++ b/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; @@ -208,7 +206,7 @@ public static String createBuddyIconUrl(String scheme, int iconFarm, int iconSer */ String iconUrl = scheme + "://www.flickr.com/images/buddyicon.jpg"; if (iconServer > 0) { - iconUrl = scheme + "://farm" + iconFarm + ".static.flickr.com/" + iconServer + "/buddyicons/" + id + ".jpg"; + iconUrl = scheme + "://farm" + iconFarm + ".staticflickr.com/" + iconServer + "/buddyicons/" + id + ".jpg"; } return iconUrl; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/XMLUtilities.java b/src/main/java/com/flickr4java/flickr/util/XMLUtilities.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/XMLUtilities.java rename to src/main/java/com/flickr4java/flickr/util/XMLUtilities.java index bf1da72b..fb104ff6 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/XMLUtilities.java +++ b/src/main/java/com/flickr4java/flickr/util/XMLUtilities.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; import org.w3c.dom.Element; diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ActivityInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/ActivityInterfaceTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/ActivityInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/ActivityInterfaceTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java similarity index 75% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java index 89acc27b..21be6830 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.test; @@ -13,11 +11,12 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Scanner; +import java.util.concurrent.ExecutionException; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.OAuth1Token; import org.junit.Ignore; import org.junit.Test; -import org.scribe.model.Token; -import org.scribe.model.Verifier; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.auth.Auth; @@ -32,15 +31,15 @@ public class AuthInterfaceTest extends Flickr4JavaTest { @Test @Ignore // Ignored as test is interactive so would fail a build - public void testAuthFlow() throws FlickrException, IOException, URISyntaxException { + public void testAuthFlow() throws IOException, URISyntaxException, ExecutionException, InterruptedException, FlickrException { AuthInterface authInterface = flickr.getAuthInterface(); - Token requestToken = authInterface.getRequestToken(); + OAuth1RequestToken requestToken = authInterface.getRequestToken(); assertNotNull(requestToken); assertNotNull(requestToken.getToken()); - assertNotNull(requestToken.getSecret()); + assertNotNull(requestToken.getTokenSecret()); assertTrue(requestToken.getRawResponse().contains("oauth_callback_confirmed=true")); String url = authInterface.getAuthorizationUrl(requestToken, Permission.READ); @@ -66,17 +65,16 @@ public void testAuthFlow() throws FlickrException, IOException, URISyntaxExcepti assertNotNull(code); - Verifier verifier = new Verifier(code); - Token accessToken = authInterface.getAccessToken(requestToken, verifier); + OAuth1Token accessToken = authInterface.getAccessToken(requestToken, code); assertNotNull(accessToken); assertNotNull(accessToken.getToken()); - assertNotNull(accessToken.getSecret()); + assertNotNull(accessToken.getTokenSecret()); Auth checkedAuth = authInterface.checkToken(accessToken); assertNotNull(checkedAuth); assertEquals(accessToken.getToken(), checkedAuth.getToken()); - assertEquals(accessToken.getSecret(), checkedAuth.getTokenSecret()); + assertEquals(accessToken.getTokenSecret(), checkedAuth.getTokenSecret()); assertEquals(Permission.READ, checkedAuth.getPermission()); assertNotNull(checkedAuth.getUser()); assertNotNull(checkedAuth.getUser().getUsername()); @@ -94,10 +92,10 @@ public void testExchangeToken() throws FlickrException { System.out.print(">>"); String flickrAuthToken = in.nextLine(); - Token oAuthToken = authInterface.exchangeAuthToken(flickrAuthToken); + OAuth1RequestToken oAuthToken = authInterface.exchangeAuthToken(flickrAuthToken); assertNotNull(oAuthToken); assertNotNull(oAuthToken.getToken()); - assertNotNull(oAuthToken.getSecret()); + assertNotNull(oAuthToken.getTokenSecret()); } } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/AuthUtilitiesTest.java b/src/test/java/com/flickr4java/flickr/test/AuthUtilitiesTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/AuthUtilitiesTest.java rename to src/test/java/com/flickr4java/flickr/test/AuthUtilitiesTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java similarity index 85% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java index 4b76a6fe..e615da54 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java @@ -1,8 +1,7 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -27,7 +26,6 @@ public void testGetList() throws FlickrException { BlogsInterface blogsInterface = flickr.getBlogsInterface(); Collection blogs = blogsInterface.getList(); assertNotNull(blogs); - assertEquals(0, blogs.size()); } @Test @@ -37,7 +35,7 @@ public void testGetServices() throws FlickrException { Iterator it = services.iterator(); boolean bloggerFound = false; while (it.hasNext()) { - Service ser = (Service) it.next(); + Service ser = it.next(); if (ser.getId().equals("beta.blogger.com") && ser.getName().equals("Blogger")) { bloggerFound = true; } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java similarity index 94% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java index 864b81af..dd8324e4 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java @@ -1,7 +1,7 @@ package com.flickr4java.flickr.test; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertTrue; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CollectionsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/CollectionsInterfaceTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/CollectionsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/CollectionsInterfaceTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java similarity index 83% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java index 217ef87f..7d08f0c5 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java @@ -1,6 +1,5 @@ package com.flickr4java.flickr.test; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -46,7 +45,7 @@ public void testGetList() throws FlickrException { @Test public void testComment() throws FlickrException { - String photoId = "419231219"; // http://www.flickr.com/photos/javatest3/419231219/ + String photoId = testProperties.getPhotoId(); // http://www.flickr.com/photos/javatest3/419231219/ String txt1 = "This is a test for the flickr java api"; String txt2 = "This is an edited comment for the java flickr api"; CommentsInterface ci = flickr.getCommentsInterface(); @@ -55,20 +54,13 @@ public void testComment() throws FlickrException { // System.out.println("Comment Id:" + commentId); assertNotNull(commentId); assertTrue(commentId.length() > 0); - // verify if comment arrived on the photo page - Comment comment = findCommment(photoId, commentId); - assertNotNull(comment); - assertEquals(commentId, comment.getId()); - assertEquals(txt1, comment.getText()); + // change the comment text and verify change ci.editComment(commentId, txt2); - comment = findCommment(photoId, commentId); - assertNotNull(comment); - assertEquals(commentId, comment.getId()); - assertEquals(txt2, comment.getText()); + // delete the comment ci.deleteComment(commentId); - comment = findCommment(photoId, commentId); + Comment comment = findCommment(photoId, commentId); assertNull(comment); } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java similarity index 93% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java index 3caeca96..96b58f10 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CompletenessTest.java b/src/test/java/com/flickr4java/flickr/test/CompletenessTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/CompletenessTest.java rename to src/test/java/com/flickr4java/flickr/test/CompletenessTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java similarity index 94% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java index 1b4e77fe..9e564a1c 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java similarity index 78% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java index dfaffef7..a864f54e 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; @@ -16,7 +16,6 @@ import org.junit.Test; import java.util.Collection; -import java.util.Iterator; /** * @author Anthony Eden @@ -50,7 +49,7 @@ public void testGetPublicList() throws FlickrException { @Test public void testAddAndRemove() throws FlickrException { - String photoId = "2153378"; + String photoId = "51144759448"; // Photo that doesn't belong to the test user's account FavoritesInterface iface = flickr.getFavoritesInterface(); try { @@ -58,19 +57,8 @@ public void testAddAndRemove() throws FlickrException { } catch (Exception e) { // running the remove in case it's there before the add } - iface.add(photoId); + iface.add(photoId); // No response to check - Photo foundPhoto = null; - Iterator favorites = iface.getList(null, 0, 0, null).iterator(); - while (favorites.hasNext()) { - Photo photo = favorites.next(); - if (photo.getId().equals(photoId)) { - foundPhoto = photo; - break; - } - } - assertNotNull(foundPhoto); - assertEquals(photoId, foundPhoto.getId()); iface.remove(photoId); } diff --git a/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java b/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java new file mode 100644 index 00000000..fc2d5316 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java @@ -0,0 +1,71 @@ +/** + * @author acaplan + */ +package com.flickr4java.flickr.test; + +import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.IFlickr; +import com.flickr4java.flickr.REST; +import com.flickr4java.flickr.RequestContext; +import com.flickr4java.flickr.auth.Auth; +import com.flickr4java.flickr.auth.Permission; +import com.flickr4java.flickr.test.util.FlickrStub; +import com.flickr4java.flickr.test.util.TestProperties; +import com.flickr4java.flickr.test.util.TestPropertiesFactory; +import org.junit.Before; + +/** + * @author acaplan + * + */ +public class Flickr4JavaTest { + + protected IFlickr flickr; + + protected TestProperties testProperties; + + /** + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Before + public void setUp() throws FlickrException { + testProperties = TestPropertiesFactory.getTestProperties(); + + if (testProperties.isRealFlickr()) { + REST rest = new REST(); + rest.setHost(testProperties.getHost()); + + flickr = new Flickr(testProperties.getApiKey(), testProperties.getSecret(), rest); + + setAuth(Permission.READ); + } else { + flickr = new FlickrStub(); + } + } + + /** + * Set auth parameters for API calls that need it. + * + * @param perms + */ + protected void setAuth(Permission perms) { + Auth auth = new Auth(); + auth.setPermission(perms); + auth.setToken(testProperties.getToken()); + auth.setTokenSecret(testProperties.getTokenSecret()); + + RequestContext requestContext = RequestContext.getRequestContext(); + requestContext.setAuth(auth); + flickr.setAuth(auth); + } + + /** + * Certain tests don't require authorization and calling with auth set may mask other errors. + */ + protected void clearAuth() { + RequestContext requestContext = RequestContext.getRequestContext(); + requestContext.setAuth(null); + } + +} diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GeoInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/GeoInterfaceTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/GeoInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/GeoInterfaceTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java similarity index 76% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java index 2ac30513..362e8b05 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; @@ -22,8 +22,6 @@ */ public class GroupsInterfaceTest extends Flickr4JavaTest { - public static final String TEST_JOIN_GROUP = "2173840@N20"; - public void deprecatedBrowse() throws FlickrException { GroupsInterface iface = flickr.getGroupsInterface(); Category cat = iface.browse(null); @@ -92,29 +90,43 @@ public void testSearch() throws FlickrException { @Test public void testSearchPage() throws FlickrException { GroupsInterface iface = flickr.getGroupsInterface(); - GroupList groups = (GroupList) iface.search("java", 10, 1); + GroupList groups = (GroupList) iface.search("java", 100, 1); assertTrue(groups.size() > 0); assertEquals(1, groups.getPage()); assertTrue(groups.getPages() > 0); - assertEquals(10, groups.getPerPage()); + assertEquals(100, groups.getPerPage()); assertTrue(groups.getTotal() > 0); } @Test public void testJoinLeave() throws FlickrException { - GroupsInterface iface = flickr.getGroupsInterface(); - Group group = iface.getInfo(TEST_JOIN_GROUP); + Group group = iface.getInfo(testProperties.getGroupId()); int cntBeforeJoin = group.getMembers(); - iface.join(TEST_JOIN_GROUP, null); - group = iface.getInfo(TEST_JOIN_GROUP); - int cntAfterJoin = group.getMembers(); - assertTrue("Member count increased by 1", cntBeforeJoin + 1 == cntAfterJoin); - - iface.leave(TEST_JOIN_GROUP, false); - group = iface.getInfo(TEST_JOIN_GROUP); - int cntAfterLeave = group.getMembers(); - assertTrue("Member count decreased by 1", cntAfterLeave == cntBeforeJoin); + try { + iface.join(testProperties.getGroupId(), null); + group = iface.getInfo(testProperties.getGroupId()); + int cntAfterJoin = group.getMembers(); + assertTrue("Member count increased by 1", cntBeforeJoin + 1 == cntAfterJoin); + } catch (FlickrException e) { + // Ignore if user is already in group + if (!e.getErrorCode().equals("4")) { + throw e; + } + } + + try { + iface.leave(testProperties.getGroupId(), false); + group = iface.getInfo(testProperties.getGroupId()); + int cntAfterLeave = group.getMembers(); + assertTrue("Member count decreased by 1", cntAfterLeave == cntBeforeJoin); + } catch (FlickrException e) { + // Ignore if user doesn't have delete permissions + if (!e.getErrorCode().equals("99")) { + throw e; + } + } + } } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java similarity index 80% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java index 2a6e171b..af50e997 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java @@ -3,7 +3,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.interestingness.InterestingnessInterface; @@ -29,10 +28,10 @@ public void testGetListStringSetIntInt() throws FlickrException { assertNotNull(ii); PhotoList list = ii.getList("2006-09-11", Extras.ALL_EXTRAS, 7, 9); assertNotNull(list); - assertEquals(7, list.size()); - assertEquals(9, list.getPage()); - assertEquals(7, list.getPerPage()); - assertEquals(500, list.getTotal()); + assertTrue(list.size() >= 1); + assertTrue(list.getPage() >= 1); + assertTrue(list.getPerPage() >= 1); + assertTrue(list.getTotal() >= 1); assertTrue(list.get(0) instanceof Photo); Photo photo = list.get(1); assertNotNull(photo.getId()); @@ -53,15 +52,6 @@ public void testGetListStringSetIntInt() throws FlickrException { // System.out.println(photo.getId() + " " + photo.getGeoData() + " " + photo.getUrl()); } } - - // date in the far future - try { - list = ii.getList("2030-01-01", null, 100, 3); - fail("Expected exception not thrown"); - } catch (FlickrException e) { - // everything ok. we expect that - } - } /* diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/LicensesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/LicensesInterfaceTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/LicensesInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/LicensesInterfaceTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java similarity index 92% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java index a55d6ebf..2e7ada76 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java @@ -93,15 +93,15 @@ public void testGetValues() throws FlickrException { @Test public void testGetRecentValues() throws FlickrException { MachinetagsInterface machinetagsInterface = flickr.getMachinetagsInterface(); - String namespace = "ceramics"; - String predicate = "material"; + String namespace = "filmdev"; + String predicate = "recipe"; Calendar addedSince = Calendar.getInstance(); - addedSince.add(Calendar.YEAR, -5); + addedSince.add(Calendar.YEAR, -10); NamespacesList list = machinetagsInterface.getRecentValues(namespace, predicate, addedSince.getTime()); assertTrue(list.size() >= 3); boolean contentFound = false; for (Value value : list) { - if (value.getValue().equals("mixed_media")) { + if (value.getValue().equals("8040")) { contentFound = true; } } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java similarity index 88% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java index d61a9b77..5a90905b 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; @@ -6,16 +6,16 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import java.util.HashSet; -import java.util.Set; - -import org.junit.Test; - import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.groups.members.Member; import com.flickr4java.flickr.groups.members.MembersInterface; import com.flickr4java.flickr.groups.members.MembersList; +import org.junit.Test; + +import java.util.HashSet; +import java.util.Set; + /** * @author mago * @version $Id: MembersInterfaceTest.java,v 1.3 2009/07/11 20:30:27 x-mago Exp $ @@ -26,7 +26,7 @@ public class MembersInterfaceTest extends Flickr4JavaTest { public void testGetList() throws FlickrException { MembersInterface iface = flickr.getMembersInterface(); // Group: Urban fragments - String id = "64262537@N00"; + String id = testProperties.getGroupId(); Set memberTypes = new HashSet(); memberTypes.add(Member.TYPE_MEMBER); memberTypes.add(Member.TYPE_ADMIN); @@ -34,7 +34,7 @@ public void testGetList() throws FlickrException { MembersList list = iface.getList(id, memberTypes, 50, 1); assertNotNull(list); assertEquals(50, list.size()); - Member m = (Member) list.get(10); + Member m = list.get(10); assertTrue(m.getId().indexOf("@") > 0); assertTrue(m.getUserName().length() > 0); assertTrue(m.getIconFarm() > -1); diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/NotesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/NotesInterfaceTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/NotesInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/NotesInterfaceTest.java diff --git a/src/test/java/com/flickr4java/flickr/test/OAuthUtilitiesTest.java b/src/test/java/com/flickr4java/flickr/test/OAuthUtilitiesTest.java new file mode 100644 index 00000000..73df6e75 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/OAuthUtilitiesTest.java @@ -0,0 +1,73 @@ +package com.flickr4java.flickr.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Test; + +import com.flickr4java.flickr.util.OAuthUtilities; +import com.github.scribejava.apis.FlickrApi; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Parameter; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth10aService; + +public class OAuthUtilitiesTest extends Flickr4JavaTest { + + @Test + public void testCreateOAuthService() { + OAuth10aService service = OAuthUtilities.createOAuthService("foo", "bar", null, null); + assertEquals("foo", service.getApiKey()); + assertEquals("bar", service.getApiSecret()); + + service = OAuthUtilities.createOAuthService("foo", "bar", 1, 2); + assertEquals("foo", service.getApiKey()); + assertEquals("bar", service.getApiSecret()); + } + + @Test + public void testSignRequest() { + // No proxy credentials + OAuth10aService service = new ServiceBuilder("foo").apiSecret("bar").build(FlickrApi.instance()); + OAuthRequest request = new OAuthRequest(Verb.GET, "http://foobar"); + assertTrue(request.getOauthParameters().isEmpty()); + OAuthUtilities.signRequest(service, request, null); + assertNull(request.getHeaders().get("Proxy-Authorization")); + + // proxy credentials + service = new ServiceBuilder("foo").apiSecret("bar").build(FlickrApi.instance()); + request = new OAuthRequest(Verb.POST, "http://foobar"); + assertTrue(request.getOauthParameters().isEmpty()); + OAuthUtilities.signRequest(service, request, "creds"); + assertEquals("Basic creds", request.getHeaders().get("Proxy-Authorization")); + } + + @Test + public void testBuildNormalPostRequest() { + Map params = new HashMap<>(); + params.put("foo", "bar"); + OAuthRequest request = OAuthUtilities.buildNormalPostRequest(params, "http://foo"); + List bodyParams = request.getBodyParams().getParams(); + assertEquals(1, bodyParams.size()); + assertEquals(new Parameter("foo", "bar"), bodyParams.get(0)); + } + + @Test + public void testBuildMultipartRequest() { + Map params = new HashMap<>(); + params.put("foo", "bar"); + OAuthRequest request = OAuthUtilities.buildMultipartRequest(params, "http://foo"); + List queryStringParams = request.getQueryStringParams().getParams(); + assertEquals(1, queryStringParams.size()); + assertEquals(new Parameter("foo", "bar"), queryStringParams.get(0)); + String contentType = request.getHeaders().get("Content-Type"); + assertTrue(contentType, contentType.matches( + "multipart/form-data; boundary=---------------------------[a-f0-9]{8}(-[a-f0-9]{4}){4}[a-f0-9]{8}")); + } +} diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ObjectTest.java b/src/test/java/com/flickr4java/flickr/test/ObjectTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/ObjectTest.java rename to src/test/java/com/flickr4java/flickr/test/ObjectTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java similarity index 92% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java index 537c57df..c013392f 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java similarity index 92% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java index 8e41d704..3c2aeca2 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; @@ -40,13 +40,8 @@ public void testFindByUsername() throws FlickrException { PeopleInterface iface = flickr.getPeopleInterface(); User person = iface.findByUsername(testProperties.getUsername()); assertNotNull(person); - assertEquals(testProperties.getNsid(), person.getId()); assertEquals(testProperties.getUsername(), person.getUsername()); - // Do the UrlEcoding is correct? - person = iface.findByUsername("K H A L E D"); - assertNotNull(person); - assertEquals("7478210@N02", person.getId()); - assertEquals("K H A L E D", person.getUsername()); + assertNotNull(person.getId()); } @Test @@ -60,6 +55,10 @@ public void testGetInfo() throws FlickrException { assertEquals(person.getPhotosurl(), String.format("https://www.flickr.com/photos/%s/", testProperties.getUsername())); assertEquals(person.getProfileurl(), String.format("https://www.flickr.com/people/%s/", testProperties.getUsername())); assertTrue(person.getSecureBuddyIconUrl().startsWith("https://")); + assertNotNull(person.getTimeZone()); + assertNotNull(person.getTimeZone().getTimeZoneId()); + assertNotNull(person.getTimeZone().getOffset()); + assertNotNull(person.getTimeZone().getLabel()); } @Test diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java similarity index 81% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java index 1e5c32e1..50e205c8 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java @@ -1,11 +1,6 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ -package com.flickr4java.flickr.test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +package com.flickr4java.flickr.test; import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; @@ -20,21 +15,17 @@ import com.flickr4java.flickr.photos.SearchParameters; import com.flickr4java.flickr.photos.Size; import com.flickr4java.flickr.tags.Tag; - import org.junit.After; import org.junit.Test; -import javax.imageio.ImageIO; - -import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; /** * @author Anthony Eden @@ -51,6 +42,14 @@ public class PhotosInterfaceTest extends Flickr4JavaTest { private final File smallSquareFile = new File("out.smallsquare.jpg"); private final File thumbnailFile = new File("out.thumbnail.jpg"); + + private List photoSizes; + + @Override + public void setUp() throws FlickrException { + super.setUp(); + preparePhotoSizes(); + } @After public void teardown() { @@ -61,6 +60,129 @@ public void teardown() { smallSquareFile.deleteOnExit(); thumbnailFile.deleteOnExit(); } + + private void preparePhotoSizes() { + photoSizes = new ArrayList(); + Size size = new Size(); + size.setLabel("Thumbnail"); + size.setWidth("100"); + size.setHeight("75"); + size.setSource("urlThumb"); + size.setUrl("urlThumbPage"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Square"); + size.setWidth("75"); + size.setHeight("75"); + size.setSource("urlSquare"); + size.setUrl("urlSquarePage"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Small"); + size.setWidth("240"); + size.setHeight("180"); + size.setSource("urlSmall"); + size.setUrl("urlSmallPage"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Medium"); + size.setWidth("240"); + size.setHeight("180"); + size.setSource("urlMedium"); + size.setUrl("urlMediumPage"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Original"); + size.setWidth("240"); + size.setHeight("180"); + size.setSource("urlOriginal"); + size.setUrl("urlOriginalPage"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Large"); + size.setWidth("240"); + size.setHeight("180"); + size.setSource("urlLarge"); + size.setUrl("urlLargePage"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Large Square"); + size.setWidth("150"); + size.setHeight("150"); + size.setSource("urlSquareLarge"); + size.setUrl("urlSquareLargePage"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Small 320"); + size.setWidth("320"); + size.setHeight("240"); + size.setSource("urlSmall320"); + size.setUrl("urlSmall320Page"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Medium 640"); + size.setWidth("640"); + size.setHeight("320"); + size.setSource("urlMedium640"); + size.setUrl("urlMedium640Page"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Medium 800"); + size.setWidth("800"); + size.setHeight("500"); + size.setSource("urlMedium800"); + size.setUrl("urlMedium800Page"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Large 1600"); + size.setWidth("1600"); + size.setHeight("1024"); + size.setSource("urlLarge1600"); + size.setUrl("urlLarge1600Page"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Large 2048"); + size.setWidth("2048"); + size.setHeight("1600"); + size.setSource("urlLarge2048"); + size.setUrl("urlLarge2048Page"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Video Player"); + size.setWidth("320"); + size.setHeight("240"); + size.setSource("urlVideoPlayer"); + size.setUrl("urlVideoPlayerPage"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Site MP4"); + size.setWidth("320"); + size.setHeight("240"); + size.setSource("urlSiteMP4"); + size.setUrl("urlSiteMP4Page"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Video Original"); + size.setWidth("960"); + size.setHeight("720"); + size.setSource("urlVideoOriginal"); + size.setUrl("urlVideoOriginalPage"); + photoSizes.add(size); + size = new Size(); + size.setLabel("Mobile MP4"); + size.setWidth("640"); + size.setHeight("360"); + size.setSource("urlMobileMP4"); + size.setUrl("urlMobileMP4Page"); + photoSizes.add(size); + size = new Size(); + size.setLabel("HD MP4"); + size.setWidth("1280"); + size.setHeight("720"); + size.setSource("urlHDMP4"); + size.setUrl("urlHDMP4Page"); + photoSizes.add(size); + } @Test public void testAddAndRemoveTags() throws FlickrException { @@ -70,7 +192,6 @@ public void testAddAndRemoveTags() throws FlickrException { // Find number of existing tags int preCount = photo.getTags().size(); - int postCount = preCount + 1; // Add a tag String[] tagsToAdd = { "test" }; @@ -80,7 +201,6 @@ public void testAddAndRemoveTags() throws FlickrException { photo = iface.getInfo(photoId, null); Collection tags = photo.getTags(); assertNotNull(tags); - assertEquals(postCount, tags.size()); // Get the added tag's ID String tagId = null; @@ -199,6 +319,10 @@ public void testGetSizes() throws FlickrException { PhotosInterface iface = flickr.getPhotosInterface(); Collection sizes = iface.getSizes(testProperties.getPhotoId()); assertNotNull(sizes); + + sizes.forEach(size -> assertNotNull(size.getLabelName())); + Optional original = sizes.stream().filter(size -> size.getLabelName().equals("Original")).findFirst(); + assertTrue(original.isPresent()); } @Test @@ -271,8 +395,6 @@ public void testSetMeta() throws FlickrException { String oldTitle = photo.getTitle(); photo.setTitle(newTitle); iface.setMeta(photo.getId(), photo.getTitle(), null); - Photo updatedPhoto = iface.getInfo(testProperties.getPhotoId(), null); - assertEquals(newTitle, updatedPhoto.getTitle()); iface.setMeta(photo.getId(), oldTitle, "Description"); } @@ -290,16 +412,11 @@ public void testSetTags() throws FlickrException { String[] tagsAfterRemove = {}; iface.setTags(photoId, tagsAfterRemove); - Photo photo = iface.getInfo(photoId, null); - Collection tags = photo.getTags(); - assertNotNull(tags); - assertEquals(0, tags.size()); - String[] tagsToAdd = { "green", "grn", "grngrn" }; iface.setTags(photoId, tagsToAdd); - photo = iface.getInfo(photoId, null); - tags = photo.getTags(); + Photo photo = iface.getInfo(photoId, null); + Collection tags = photo.getTags(); assertNotNull(tags); assertEquals(3, tags.size()); @@ -320,13 +437,8 @@ public void testGetSmallImage() throws FlickrException, IOException { PhotosInterface iface = flickr.getPhotosInterface(); String photoId = testProperties.getPhotoId(); Photo photo = iface.getInfo(photoId, null); - BufferedImage image = iface.getImage(photo, Size.SMALL); - assertNotNull(image); - assertNotNull(image.getWidth()); - assertNotNull(image.getHeight()); - // System.out.println("Image width: " + image.getWidth()); - // System.out.println("Image height: " + image.getHeight()); - ImageIO.write(image, "jpg", smallFile); + assertNotNull(photo); + assertEquals(photoId, photo.getId()); } @Test @@ -334,11 +446,8 @@ public void testGetThumbnailImage() throws FlickrException, IOException { PhotosInterface iface = flickr.getPhotosInterface(); String photoId = testProperties.getPhotoId(); Photo photo = iface.getInfo(photoId, null); - BufferedImage image = iface.getImage(photo, Size.THUMB); - assertNotNull(image); - assertTrue(67 == image.getWidth() || 68 == image.getWidth()); - assertEquals(100, image.getHeight()); - ImageIO.write(image, "jpg", thumbnailFile); + assertNotNull(photo); + assertEquals(photoId, photo.getId()); } @Test @@ -346,11 +455,8 @@ public void testGetSmallSquareImage() throws FlickrException, IOException { PhotosInterface iface = flickr.getPhotosInterface(); String photoId = testProperties.getPhotoId(); Photo photo = iface.getInfo(photoId, null); - BufferedImage image = iface.getImage(photo, Size.SQUARE); - assertNotNull(image); - assertEquals(75, image.getWidth()); - assertEquals(75, image.getHeight()); - ImageIO.write(image, "jpg", smallSquareFile); + assertNotNull(photo); + assertEquals(photoId, photo.getId()); } @Test @@ -358,11 +464,8 @@ public void testGetMediumImage() throws FlickrException, IOException { PhotosInterface iface = flickr.getPhotosInterface(); String photoId = testProperties.getPhotoId(); Photo photo = iface.getInfo(photoId, null); - BufferedImage image = iface.getImage(photo, Size.MEDIUM); - assertNotNull(image); - assertNotNull(image.getWidth()); - assertNotNull(image.getHeight()); - ImageIO.write(image, "jpg", mediumFile); + assertNotNull(photo); + assertEquals(photoId, photo.getId()); } @Test @@ -370,11 +473,8 @@ public void testGetLargeImage() throws FlickrException, IOException { PhotosInterface iface = flickr.getPhotosInterface(); String photoId = testProperties.getPhotoId(); Photo photo = iface.getInfo(photoId, null); - BufferedImage image = iface.getImage(photo, Size.LARGE); - assertNotNull(image); - assertNotNull(image.getWidth()); - assertNotNull(image.getHeight()); - ImageIO.write(image, "jpg", largeFile); + assertNotNull(photo); + assertEquals(photoId, photo.getId()); } @Test @@ -390,113 +490,6 @@ public void testGetPhoto() throws FlickrException { */ @Test public void testSetSizes() { - List sizes = new ArrayList(); - Size size = new Size(); - size.setLabel("Thumbnail"); - size.setWidth("100"); - size.setHeight("75"); - size.setSource("urlThumb"); - size.setUrl("urlThumbPage"); - sizes.add(size); - size = new Size(); - size.setLabel("Square"); - size.setWidth("75"); - size.setHeight("75"); - size.setSource("urlSquare"); - size.setUrl("urlSquarePage"); - sizes.add(size); - size = new Size(); - size.setLabel("Small"); - size.setWidth("240"); - size.setHeight("180"); - size.setSource("urlSmall"); - size.setUrl("urlSmallPage"); - sizes.add(size); - size = new Size(); - size.setLabel("Medium"); - size.setWidth("240"); - size.setHeight("180"); - size.setSource("urlMedium"); - size.setUrl("urlMediumPage"); - sizes.add(size); - size = new Size(); - size.setLabel("Original"); - size.setWidth("240"); - size.setHeight("180"); - size.setSource("urlOriginal"); - size.setUrl("urlOriginalPage"); - sizes.add(size); - size = new Size(); - size.setLabel("Large"); - size.setWidth("240"); - size.setHeight("180"); - size.setSource("urlLarge"); - size.setUrl("urlLargePage"); - sizes.add(size); - size = new Size(); - size.setLabel("Square Large"); - size.setWidth("150"); - size.setHeight("150"); - size.setSource("urlSquareLarge"); - size.setUrl("urlSquareLargePage"); - sizes.add(size); - size = new Size(); - size.setLabel("Small 320"); - size.setWidth("320"); - size.setHeight("240"); - size.setSource("urlSmall320"); - size.setUrl("urlSmall320Page"); - sizes.add(size); - size = new Size(); - size.setLabel("Medium 640"); - size.setWidth("640"); - size.setHeight("320"); - size.setSource("urlMedium640"); - size.setUrl("urlMedium640Page"); - sizes.add(size); - size = new Size(); - size.setLabel("Medium 800"); - size.setWidth("800"); - size.setHeight("500"); - size.setSource("urlMedium800"); - size.setUrl("urlMedium800Page"); - sizes.add(size); - size = new Size(); - size.setLabel("Large 1600"); - size.setWidth("1600"); - size.setHeight("1024"); - size.setSource("urlLarge1600"); - size.setUrl("urlLarge1600Page"); - sizes.add(size); - size = new Size(); - size.setLabel("Large 2048"); - size.setWidth("2048"); - size.setHeight("1600"); - size.setSource("urlLarge2048"); - size.setUrl("urlLarge2048Page"); - sizes.add(size); - size = new Size(); - size.setLabel("Video Player"); - size.setWidth("320"); - size.setHeight("240"); - size.setSource("urlVideoPlayer"); - size.setUrl("urlVideoPlayerPage"); - sizes.add(size); - size = new Size(); - size.setLabel("Site MP4"); - size.setWidth("320"); - size.setHeight("240"); - size.setSource("urlSiteMP4"); - size.setUrl("urlSiteMP4Page"); - sizes.add(size); - size = new Size(); - size.setLabel("Video Original"); - size.setWidth("960"); - size.setHeight("720"); - size.setSource("urlVideoOriginal"); - size.setUrl("urlVideoOriginalPage"); - sizes.add(size); - Photo p = new Photo(); p.setId("id"); p.setServer("server"); @@ -504,23 +497,23 @@ public void testSetSizes() { p.setOriginalSecret("osecret"); p.setFarm("1"); - assertEquals("https://farm1.static.flickr.com/server/id_secret_m.jpg", p.getSmallUrl()); - assertEquals("https://farm1.static.flickr.com/server/id_secret_s.jpg", p.getSmallSquareUrl()); - assertEquals("https://farm1.static.flickr.com/server/id_secret_t.jpg", p.getThumbnailUrl()); - assertEquals("https://farm1.static.flickr.com/server/id_secret.jpg", p.getMediumUrl()); - assertEquals("https://farm1.static.flickr.com/server/id_secret_b.jpg", p.getLargeUrl()); - assertEquals("https://farm1.static.flickr.com/server/id_secret_q.jpg", p.getSquareLargeUrl()); - assertEquals("https://farm1.static.flickr.com/server/id_secret_n.jpg", p.getSmall320Url()); - assertEquals("https://farm1.static.flickr.com/server/id_secret_z.jpg", p.getMedium640Url()); - assertEquals("https://farm1.static.flickr.com/server/id_secret_c.jpg", p.getMedium800Url()); - assertEquals("https://farm1.static.flickr.com/server/id_secret_h.jpg", p.getLarge1600Url()); - assertEquals("https://farm1.static.flickr.com/server/id_secret_k.jpg", p.getLarge2048Url()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_m.jpg", p.getSmallUrl()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_s.jpg", p.getSmallSquareUrl()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_t.jpg", p.getThumbnailUrl()); + assertEquals("https://farm1.staticflickr.com/server/id_secret.jpg", p.getMediumUrl()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_b.jpg", p.getLargeUrl()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_q.jpg", p.getSquareLargeUrl()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_n.jpg", p.getSmall320Url()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_z.jpg", p.getMedium640Url()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_c.jpg", p.getMedium800Url()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_h.jpg", p.getLarge1600Url()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_k.jpg", p.getLarge2048Url()); try { - assertEquals("https://farm1.static.flickr.com/server/id_osecret_o.jpg", p.getOriginalUrl()); + assertEquals("https://farm1.staticflickr.com/server/id_osecret_o.jpg", p.getOriginalUrl()); } catch (FlickrException ex) { } // setSizes() to override the generated URLs. - p.setSizes(sizes); + p.setSizes(photoSizes); assertEquals("urlSmall", p.getSmallUrl()); assertEquals("urlSquare", p.getSmallSquareUrl()); assertEquals("urlThumb", p.getThumbnailUrl()); @@ -540,4 +533,16 @@ public void testSetSizes() { } catch (FlickrException ex) { } } + + @Test + public void testGetAllSizes() { + Photo p = new Photo(); + p.setSizes(photoSizes); + + List pSizes = new ArrayList(p.getSizes()); + + for(Size s: pSizes) { + assertNotNull(s); + } + } } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java similarity index 81% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java index 66d7948f..8de7e511 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java @@ -1,33 +1,33 @@ package com.flickr4java.flickr.test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.auth.Permission; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photos.PhotoContext; import com.flickr4java.flickr.photos.PhotoList; import com.flickr4java.flickr.photosets.Photoset; import com.flickr4java.flickr.photosets.Photosets; import com.flickr4java.flickr.photosets.PhotosetsInterface; - -import org.apache.log4j.Logger; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.util.Collections; +import java.util.Collection; import java.util.List; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + /** * @author Anthony Eden */ public class PhotosetsInterfaceTest extends Flickr4JavaTest { - private static Logger _log = Logger.getLogger(PhotosetsInterfaceTest.class); + private static Logger _log = LoggerFactory.getLogger(PhotosetsInterfaceTest.class); private Photoset testSet; @@ -48,6 +48,8 @@ public void setUp() throws FlickrException { @After public void tearDown() throws FlickrException { + setAuth(Permission.DELETE); + PhotosetsInterface iface = flickr.getPhotosetsInterface(); iface.delete(testSet.getId()); } @@ -70,18 +72,14 @@ public void testEditMeta() { @Test public void testEditPhotos() throws FlickrException { - List reordered = setPics; - reordered.add(testProperties.getPhotoId()); - Collections.reverse(reordered); - PhotosetsInterface iface = flickr.getPhotosetsInterface(); - iface.addPhoto(testSet.getId(), testProperties.getPhotoId()); - iface.editPhotos(testSet.getId(), testProperties.getPhotoId(), reordered.toArray(new String[setPics.size()])); + + iface.editPhotos(testSet.getId(), testProperties.getPhotoId(), setPics.toArray(new String[setPics.size()])); Photoset ps = iface.getInfo(testSet.getId()); assertNotNull(ps); assertEquals(testProperties.getPhotoId(), ps.getPrimaryPhoto().getId()); - assertEquals(4, ps.getPhotoCount()); + assertTrue(ps.getPhotoCount() >= 2); } @Test @@ -96,6 +94,8 @@ public void testGetContext() throws FlickrException { @Test public void testGetInfo() throws FlickrException { + clearAuth(); + PhotosetsInterface iface = flickr.getPhotosetsInterface(); Photoset photoset = iface.getInfo(testProperties.getPhotosetId()); _log.debug(photoset.getUrl()); @@ -113,10 +113,17 @@ public void testGetList() throws FlickrException { } @Test - public void testGetList2() throws FlickrException { + public void testGetListWithExtras() throws FlickrException { PhotosetsInterface iface = flickr.getPhotosetsInterface(); - Photosets photosets = iface.getList("26095690@N00"); + Photosets photosets = iface.getList(testProperties.getNsid(), "last_update, owner_name"); assertNotNull(photosets); + Collection photosetsList = photosets.getPhotosets(); + assertFalse(photosetsList.isEmpty()); + Photoset photoset = photosetsList.iterator().next(); + assertNotNull(photoset.getPrimaryPhoto().getLastUpdate()); + assertNotNull(photoset.getPrimaryPhoto().getOwner()); + assertNotNull(photoset.getPrimaryPhoto().getOwner().getUsername()); + assertTrue(photoset.getPrimaryPhoto().getOwner().getUsername().length() > 0); } @Test @@ -125,8 +132,8 @@ public void testGetPhotos() throws FlickrException { PhotoList photos = iface.getPhotos(testProperties.getPhotosetId(), 10, 1); assertNotNull(photos); assertTrue(photos.size() >= 1); - assertEquals(testProperties.getUsername(), photos.get(0).getOwner().getUsername()); - assertEquals(testProperties.getNsid(), photos.get(0).getOwner().getId()); + assertNotNull(photos.get(0).getOwner().getUsername()); + assertNotNull(photos.get(0).getOwner().getId()); } @Test @@ -147,13 +154,11 @@ public void testRemovePhotos() throws FlickrException { PhotoList photos = iface.getPhotos(photoset.getId(), 10, 1); assertNotNull(photos); - assertEquals(1, photos.size()); iface.removePhoto(photoset.getId(), testProperties.getPhotoId()); try { photos = iface.getPhotos(photoset.getId(), 10, 1); - fail("Photoset shouldn't still exist"); } catch (FlickrException e) { // photoset should be nuked when the only photo is removed from it } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java similarity index 78% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java index 697e7b72..1c3d5576 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java @@ -13,6 +13,7 @@ import com.flickr4java.flickr.places.PlacesList; import com.flickr4java.flickr.tags.Tag; +import org.junit.Ignore; import org.junit.Test; import java.util.ArrayList; @@ -29,64 +30,45 @@ public class PlacesInterfaceTest extends Flickr4JavaTest { String sfWoeId = "2487956"; @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testFindByLonLat() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); PlacesList list = placesInterface.findByLatLon(52.524577D, 13.412247D, Flickr.ACCURACY_CITY); assertTrue(list.getTotal() == 1); Place place = list.get(0); - assertEquals("zot2ouJXUbKOJRM", place.getPlaceId()); - assertEquals("/Germany/Berlin/Berlin", place.getPlaceUrl()); - assertEquals(Place.TYPE_LOCALITY, place.getPlaceType()); - assertEquals("638242", place.getWoeId()); - assertEquals(52.516D, place.getLatitude(), 0d); - assertEquals(13.376D, place.getLongitude(), 0d); + assertNotNull(place.getPlaceType()); + assertNotNull(place.getWoeId()); + assertNotNull(place.getLatitude()); + assertNotNull(place.getLongitude()); } @Test - public void testFind() throws FlickrException { + @Ignore + // This Flickr API method no longer seems to work correctly + public void testFindAlabama() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); PlacesList list = placesInterface.find("Alabama"); - assertTrue(list.getTotal() == 3); Place place = list.get(0); assertEquals("KSb302RTUb74OxqL", place.getPlaceId()); assertEquals("/United+States/Alabama", place.getPlaceUrl()); assertEquals(Place.TYPE_REGION, place.getPlaceType()); - - place = list.get(1); - assertEquals("D_36GGlTUb8R9C_Y", place.getPlaceId()); - assertEquals("/United+States/New+York/Alabama", place.getPlaceUrl()); - assertEquals(Place.TYPE_LOCALITY, place.getPlaceType()); - - place = list.get(2); - assertEquals("3BCBV2pQV70Ei4_4", place.getPlaceId()); - assertEquals("/South+Africa/North-west/Alabama", place.getPlaceUrl()); - assertEquals(Place.TYPE_LOCALITY, place.getPlaceType()); - } - - @Test - public void testFind2() throws FlickrException { - PlacesInterface placesInterface = flickr.getPlacesInterface(); - PlacesList list = placesInterface.find("Europe"); - assertTrue(list.getTotal() == 2); - Place place = list.get(0); - assertEquals("6dCBhRRTVrJiB5xOrg", place.getPlaceId()); - assertEquals("/6dCBhRRTVrJiB5xOrg", place.getPlaceUrl()); - assertEquals(Place.TYPE_CONTINENT, place.getPlaceType()); - - place = list.get(1); - assertEquals("SmLXwKZUV7JlnVvxUA", place.getPlaceId()); - assertEquals("/France/Ile-de-France/Paris/Europe", place.getPlaceUrl()); - assertEquals(Place.TYPE_NEIGHBOURHOOD, place.getPlaceType()); } + @SuppressWarnings("deprecation") @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testResolvePlaceId() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); Location location = placesInterface.resolvePlaceId("7.MJR8tTVrIO1EgB"); // SF placeAssertions(location); } + @SuppressWarnings("deprecation") @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testResolvePlaceUrl() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); Location location = placesInterface.resolvePlaceURL("/United+States/California/San+Francisco"); @@ -94,14 +76,15 @@ public void testResolvePlaceUrl() throws FlickrException { } @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testGetChildrenWithPhotosPublic() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); String woeId = "2487956"; String placeId = "kH8dLOubBZRvX_YZ"; PlacesList list = placesInterface.getChildrenWithPhotosPublic(placeId, woeId); boolean presidioFound = false; - for (int i = 0; i < list.size(); i++) { - Place place = list.get(i); + for (Place place : list) { // System.out.println(place.getName()); if (place.getPlaceId().equals("7bgsk3lTWrhSWp2fUQ")) { assertEquals("Fisherman's Wharf, San Francisco, CA, US, United States", place.getName()); @@ -118,12 +101,12 @@ public void testGetInfo() throws FlickrException { String woeId = "2487956"; String placeId = "7.MJR8tTVrIO1EgB"; Location loc = placesInterface.getInfo(woeId, null); - assertEquals("/United+States/California/San+Francisco", loc.getPlaceUrl()); - loc = placesInterface.getInfo(null, placeId); - assertEquals("/United+States/California/San+Francisco", loc.getPlaceUrl()); + assertEquals("San Francisco,", loc.getName()); } @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testGetInfoByUrl() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); String placeId = "7.MJR8tTVrIO1EgB"; @@ -161,6 +144,8 @@ public void testGetTopPlacesList() throws FlickrException { } @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testPlacesForBoundingBox() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); String bbox = "-122.42307100000001,37.773779,-122.381071,37.815779"; @@ -168,13 +153,15 @@ public void testPlacesForBoundingBox() throws FlickrException { PlacesList places = placesInterface.placesForBoundingBox(placeType, bbox); assertTrue((places.size() > 0)); Place place = places.get(0); - assertEquals(sfWoeId, place.getWoeId()); - assertEquals("7.MJR8tTVrIO1EgB", place.getPlaceId()); - assertEquals("/United+States/California/San+Francisco", place.getPlaceUrl()); - assertEquals(Place.TYPE_LOCALITY, place.getPlaceType()); + assertNotNull(place.getWoeId()); + assertNotNull(place.getPlaceId()); + assertNotNull(place.getPlaceUrl()); + assertNotNull(place.getPlaceType()); } @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testPlacesForContacts() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); int placeType = Place.TYPE_REGION; @@ -192,6 +179,8 @@ public void testPlacesForContacts() throws FlickrException { } @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testPlacesForTags() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); int placeTypeId = Place.TYPE_REGION; @@ -217,6 +206,8 @@ public void testPlacesForTags() throws FlickrException { } @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testPlacesForUser() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); int placeType = Place.TYPE_REGION; @@ -227,8 +218,8 @@ public void testPlacesForUser() throws FlickrException { Calendar maxUploadDate = Calendar.getInstance(); Calendar minTakenDate = Calendar.getInstance(); Calendar maxTakenDate = Calendar.getInstance(); - minUploadDate.roll(Calendar.YEAR, -5); - minTakenDate.roll(Calendar.YEAR, -5); + minUploadDate.roll(Calendar.YEAR, -10); + minTakenDate.roll(Calendar.YEAR, -10); PlacesList places = placesInterface.placesForUser(placeType, woeId, placeId, threshold, minUploadDate.getTime(), maxUploadDate.getTime(), minTakenDate.getTime(), maxTakenDate.getTime()); assertTrue((places.size() > 0)); @@ -256,15 +247,15 @@ private void placeAssertions(Location location) { assertEquals("7.MJR8tTVrIO1EgB", location.getPlaceId()); assertEquals("/United+States/California/San+Francisco", location.getPlaceUrl()); assertEquals("2487956", location.getWoeId()); - assertEquals(37.779D, location.getLatitude(), 0d); - assertEquals(-122.420D, location.getLongitude(), 0d); - assertEquals(Place.TYPE_LOCALITY, location.getPlaceType()); + assertNotNull(location.getLatitude()); + assertNotNull(location.getLongitude()); + assertNotNull(location.getPlaceType()); assertEquals("7.MJR8tTVrIO1EgB", location.getLocality().getPlaceId()); assertEquals("San Francisco, California, United States", location.getLocality().getName()); assertEquals("2487956", location.getLocality().getWoeId()); - assertEquals(37.779D, location.getLocality().getLatitude(), 0d); - assertEquals(-122.420D, location.getLocality().getLongitude(), 0d); + assertNotNull(location.getLocality().getLatitude()); + assertNotNull(location.getLocality().getLongitude()); assertEquals(".7sOmlRQUL9nK.kMzA", location.getCounty().getPlaceId()); assertEquals("San Francisco County, California, United States", location.getCounty().getName()); diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java similarity index 94% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java index 9ad6e8d2..32eb42cf 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PrefsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PrefsInterfaceTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PrefsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PrefsInterfaceTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java similarity index 67% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java index 8beb0393..e97823a1 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java @@ -38,7 +38,7 @@ public void testGetMethodInfo_public() throws FlickrException { assertFalse(method.needsLogin()); assertNotNull(method.getArguments()); - assertEquals(7, method.getArguments().size()); + assertEquals(5, method.getArguments().size()); Collection args = method.getArguments(); Iterator argsIterator = args.iterator(); @@ -51,14 +51,6 @@ public void testGetMethodInfo_public() throws FlickrException { assertEquals("date", date.getName()); assertTrue(date.isOptional()); - Argument panda = argsIterator.next(); - assertEquals("use_panda", panda.getName()); - assertTrue(panda.isOptional()); - - Argument offsetDays = argsIterator.next(); - assertEquals("offset_days", offsetDays.getName()); - assertTrue(offsetDays.isOptional()); - Argument extras = argsIterator.next(); assertEquals("extras", extras.getName()); assertTrue(extras.isOptional()); @@ -82,38 +74,6 @@ public void testGetMethodInfo_public() throws FlickrException { assertNotNull(error.getExplaination()); } - @Test - public void testGetMethodInfo_withPerms() throws FlickrException { - String methodName = "flickr.photos.addTags"; - ReflectionInterface reflectionInterface = flickr.getReflectionInterface(); - Method method = reflectionInterface.getMethodInfo(methodName); - assertNotNull(method); - assertEquals(methodName, method.getName()); - assertNotNull(method.getArguments()); - assertEquals(3, method.getArguments().size()); - - assertTrue(method.needsSigning()); - assertTrue(method.needsLogin()); - assertEquals(Method.WRITE_PERMISSION, method.getRequiredPerms()); - - Collection c = method.getArguments(); - Iterator argsIterator = c.iterator(); - - Argument api_key = argsIterator.next(); - assertEquals(Flickr.API_KEY, api_key.getName()); - assertFalse(api_key.isOptional()); - assertNotNull(api_key.getDescription()); - - Argument photo_id = argsIterator.next(); - assertEquals("photo_id", photo_id.getName()); - assertFalse(photo_id.isOptional()); - - Argument tags = argsIterator.next(); - assertEquals("tags", tags.getName()); - assertFalse(tags.isOptional()); - - } - @Test public void testGetMethods() throws FlickrException { ReflectionInterface reflectionInterface = flickr.getReflectionInterface(); diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/StatsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/StatsInterfaceTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/StatsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/StatsInterfaceTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java similarity index 91% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java index 9e040837..0245df1e 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; diff --git a/src/test/java/com/flickr4java/flickr/test/UploaderTest.java b/src/test/java/com/flickr4java/flickr/test/UploaderTest.java new file mode 100644 index 00000000..49555eae --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/UploaderTest.java @@ -0,0 +1,204 @@ +package com.flickr4java.flickr.test; + +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.photos.PhotosInterface; +import com.flickr4java.flickr.uploader.UploadMetaData; +import com.flickr4java.flickr.uploader.Uploader; +import org.junit.Test; + +import java.io.*; +import java.nio.file.Files; + +import static org.junit.Assert.assertNotNull; + +/** + * @author Anthony Eden + */ +public class UploaderTest extends Flickr4JavaTest { + + private static final String DUMMY_PHOTO_ID = "1234567890"; + + /** + * Test photo uploading using a byte array. + * + * @throws IOException + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Test + public void testUploadByteArray() throws IOException, FlickrException { + File imageFile = new File(testProperties.getImageFile()); + Uploader uploader = flickr.getUploader(); + PhotosInterface pint = flickr.getPhotosInterface(); + + if (testProperties.isRealFlickr()) { + + UploadMetaData metaData = buildPrivatePhotoMetadata(); + // check correct handling of escaped value + metaData.setTitle("óöä"); + String photoId = uploader.upload(Files.readAllBytes(imageFile.toPath()), metaData); + assertNotNull(photoId); + try { + pint.delete(photoId); + } catch (FlickrException e) { + // Ignore if user doesn't have delete permissions + // This will leave a *private* photo in the test account's photostream! + if (!e.getErrorCode().equals("99")) { + throw e; + } + + } + } else { + UploadMetaData metaData = buildPrivatePhotoMetadata(); + String photoId = uploader.upload("".getBytes(), metaData); + assertNotNull(photoId); + } + } + + /** + * Test photo upload using an InputStream. + * + * @throws IOException + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Test + public void testUploadInputStream() throws IOException, FlickrException { + File imageFile = new File(testProperties.getImageFile()); + Uploader uploader = flickr.getUploader(); + PhotosInterface pint = flickr.getPhotosInterface(); + + if (testProperties.isRealFlickr()) { + try (InputStream in = new FileInputStream(imageFile)) { + UploadMetaData metaData = buildPrivatePhotoMetadata(); + metaData.setPublicFlag(false); + // check correct handling of escaped value + metaData.setTitle("óöä"); + String photoId = uploader.upload(in, metaData); + assertNotNull(photoId); + try { + pint.delete(photoId); + } catch (FlickrException e) { + // Ignore if user doesn't have delete permissions + // This will leave a *private* photo in the test account's photostream! + if (!e.getErrorCode().equals("99")) { + throw e; + } + } + } + } else { + UploadMetaData metaData = buildPrivatePhotoMetadata(); + String photoId = uploader.upload("".getBytes(), metaData); + assertNotNull(photoId); + } + } + + /** + * Test photo replace using an InputStream. + * + * @throws IOException + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Test + public void testReplaceInputStream() throws IOException, FlickrException, InterruptedException { + Uploader uploader = flickr.getUploader(); + PhotosInterface pint = flickr.getPhotosInterface(); + File imageFile = new File(testProperties.getImageFile()); + + if (testProperties.isRealFlickr()) { + String photoId; + try (InputStream uploadIS = new FileInputStream(imageFile)) { + + // Upload a photo, which we'll replace, then delete + UploadMetaData metaData = buildPrivatePhotoMetadata(); + photoId = uploader.upload(uploadIS, metaData); + } + + // Fix some odd timing issue + Thread.sleep(1500); + + try (InputStream replaceIS = new FileInputStream(imageFile)) { + + try { + photoId = uploader.replace(replaceIS, photoId, false); + assertNotNull(photoId); + } catch (FlickrException e) { + // Error code 1 means test account is not pro so don't fail test because of that + if (!e.getErrorCode().equals("1")) { + throw e; + } + } + try { + pint.delete(photoId); + } catch (FlickrException e) { + // Ignore if user doesn't have delete permissions + // This will leave a *private* photo in the test account's photostream! + if (!e.getErrorCode().equals("99")) { + throw e; + } + } + } + } else { + try (InputStream replaceIS = new ByteArrayInputStream("".getBytes())) { + String photoId = uploader.replace(replaceIS, DUMMY_PHOTO_ID, false); + assertNotNull(photoId); + } + } + } + + /** + * Test photo replace using a byte array. + * + * @throws IOException + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Test + public void testReplaceByteArray() throws IOException, FlickrException, InterruptedException { + File imageFile = new File(testProperties.getImageFile()); + Uploader uploader = flickr.getUploader(); + PhotosInterface pint = flickr.getPhotosInterface(); + + if (testProperties.isRealFlickr()) { + + // Upload a photo, which we'll replace, then delete + UploadMetaData metaData = buildPrivatePhotoMetadata(); + String photoId = uploader.upload(Files.readAllBytes(imageFile.toPath()), metaData); + + // Fix some odd timing issue + Thread.sleep(1500); + + try { + photoId = uploader.replace(Files.readAllBytes(imageFile.toPath()), photoId, false); + assertNotNull(photoId); + } catch (FlickrException e) { + // Error code 1 means test account is not pro so don't fail test because of that + if (!e.getErrorCode().equals("1")) { + throw e; + } + } + + try { + pint.delete(photoId); + } catch (FlickrException e) { + // Ignore if user doesn't have delete permissions + // This will leave a *private* photo in the test account's photostream! + if (!e.getErrorCode().equals("99")) { + throw e; + } + } + } else { + String photoId = uploader.replace("".getBytes(), DUMMY_PHOTO_ID, false); + assertNotNull(photoId); + } + } + + /** + * Build {@link UploadMetaData} with public set to false so uploaded photos are private. + * + * @return + */ + private UploadMetaData buildPrivatePhotoMetadata() { + UploadMetaData uploadMetaData = new UploadMetaData(); + uploadMetaData.setPublicFlag(false); + return uploadMetaData; + } + +} diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java similarity index 91% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java index 8b37a9b4..a1ca91f7 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java @@ -1,5 +1,3 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ - package com.flickr4java.flickr.test; import static org.junit.Assert.assertEquals; @@ -11,6 +9,7 @@ import com.flickr4java.flickr.groups.Group; import com.flickr4java.flickr.urls.UrlsInterface; +import org.junit.Before; import org.junit.Test; /** @@ -18,6 +17,13 @@ */ public class UrlsInterfaceTest extends Flickr4JavaTest { + @Override + @Before + public void setUp() throws FlickrException { + super.setUp(); + clearAuth(); + } + @Test public void testGetGroup() throws FlickrException { UrlsInterface iface = flickr.getUrlsInterface(); diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestProperties.java b/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java similarity index 82% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestProperties.java rename to src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java index 627d7d36..90457865 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestProperties.java +++ b/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java @@ -1,10 +1,9 @@ -package com.flickr4java.flickr.test; +package com.flickr4java.flickr.test.util; import com.flickr4java.flickr.FlickrRuntimeException; -import com.flickr4java.flickr.util.IOUtilities; - -import org.apache.log4j.Logger; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -17,13 +16,7 @@ * * @author Darren Greaves Copyright (c) 2012 Darren Greaves. */ -public class TestProperties { - - /** - * Logger for log4j. - */ - @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(TestProperties.class); +public class FileTestProperties implements TestProperties { private String host; @@ -63,13 +56,24 @@ public class TestProperties { private final List photosetPhotos; - public TestProperties() { - - photosetPhotos = new ArrayList(); - Properties properties = load(); + public FileTestProperties(File propertiesFile) { + photosetPhotos = new ArrayList<>(); + Properties properties = load(propertiesFile); populate(properties); } + private Properties load(File propertiesFile) { + Properties properties = new Properties(); + + try (InputStream in = new FileInputStream(propertiesFile)) { + properties.load(in); + } catch (IOException e) { + throw new FlickrRuntimeException("Problem loading properties", e); + } + + return properties; + } + /** * * @param properties @@ -102,95 +106,104 @@ private void populate(Properties properties) { Collections.sort(this.photosetPhotos); } - private Properties load() { - Properties properties = new Properties(); - InputStream in = null; - try { - in = getClass().getResourceAsStream("/setup.properties"); - properties.load(in); - } catch (IOException e) { - throw new FlickrRuntimeException("Problem loading setup.properties", e); - } finally { - IOUtilities.close(in); - } - - return properties; - } - + @Override public String getHost() { return host; } + @Override public String getApiKey() { return apiKey; } + @Override public String getSecret() { return secret; } + @Override public String getToken() { return token; } + @Override public String getTokenSecret() { return tokenSecret; } + @Override public String getNsid() { return nsid; } + @Override public String getEmail() { return email; } + @Override public String getUsername() { return username; } + @Override public String getGroupId() { return groupId; } + @Override public String getTestGroupId() { return testGroupId; } + @Override public String getPhotoId() { return photoId; } + @Override public String getPhotosetId() { return photosetId; } + @Override public String getImageFile() { return imageFile; } + @Override public String getGeoWritePhotoId() { return geoWritePhotoId; } + @Override public String getCollectionId() { return collectionId; } + @Override public String getCollectionUrlId() { return collectionUrlId; } + @Override public String getGalleryId() { return galleryId; } + @Override public String getDisplayname() { return displayname; } + @Override public List getPhotosetPhotos() { return photosetPhotos; } + @Override + public boolean isRealFlickr() { + return true; + } + } diff --git a/src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java b/src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java new file mode 100644 index 00000000..ee61a730 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java @@ -0,0 +1,488 @@ + +package com.flickr4java.flickr.test.util; + +import com.flickr4java.flickr.IFlickr; +import com.flickr4java.flickr.AbstractTransport; +import com.flickr4java.flickr.activity.ActivityInterface; +import com.flickr4java.flickr.auth.Auth; +import com.flickr4java.flickr.auth.AuthInterface; +import com.flickr4java.flickr.blogs.BlogsInterface; +import com.flickr4java.flickr.cameras.CamerasInterface; +import com.flickr4java.flickr.collections.CollectionsInterface; +import com.flickr4java.flickr.commons.CommonsInterface; +import com.flickr4java.flickr.contacts.ContactsInterface; +import com.flickr4java.flickr.favorites.FavoritesInterface; +import com.flickr4java.flickr.galleries.GalleriesInterface; +import com.flickr4java.flickr.groups.GroupsInterface; +import com.flickr4java.flickr.groups.discuss.GroupDiscussInterface; +import com.flickr4java.flickr.groups.members.MembersInterface; +import com.flickr4java.flickr.groups.pools.PoolsInterface; +import com.flickr4java.flickr.interestingness.InterestingnessInterface; +import com.flickr4java.flickr.machinetags.MachinetagsInterface; +import com.flickr4java.flickr.panda.PandaInterface; +import com.flickr4java.flickr.people.PeopleInterface; +import com.flickr4java.flickr.photos.PhotosInterface; +import com.flickr4java.flickr.photos.comments.CommentsInterface; +import com.flickr4java.flickr.photos.geo.GeoInterface; +import com.flickr4java.flickr.photos.licenses.LicensesInterface; +import com.flickr4java.flickr.photos.notes.NotesInterface; +import com.flickr4java.flickr.photos.suggestions.SuggestionsInterface; +import com.flickr4java.flickr.photos.transform.TransformInterface; +import com.flickr4java.flickr.photos.upload.UploadInterface; +import com.flickr4java.flickr.photosets.PhotosetsInterface; +import com.flickr4java.flickr.photosets.comments.PhotosetsCommentsInterface; +import com.flickr4java.flickr.places.PlacesInterface; +import com.flickr4java.flickr.prefs.PrefsInterface; +import com.flickr4java.flickr.reflection.ReflectionInterface; +import com.flickr4java.flickr.stats.StatsInterface; +import com.flickr4java.flickr.tags.TagsInterface; +import com.flickr4java.flickr.test.TestInterface; +import com.flickr4java.flickr.uploader.Uploader; +import com.flickr4java.flickr.urls.UrlsInterface; + +/** + * Stubbed entry point for the Flickr4Java API. This class is used to acquire Interface classes which wrap the Flickr API. + * + */ +public class FlickrStub implements IFlickr { + + private String apiKey; + + private String sharedSecret; + + private AbstractTransport transport; + + private Auth auth; + + private AuthInterface authInterface; + + private ActivityInterface activityInterface; + + private BlogsInterface blogsInterface; + + private CommentsInterface commentsInterface; + + private CommonsInterface commonsInterface; + + private ContactsInterface contactsInterface; + + private FavoritesInterface favoritesInterface; + + private GeoInterface geoInterface; + + private GroupsInterface groupsInterface; + + private InterestingnessInterface interestingnessInterface; + + private LicensesInterface licensesInterface; + + private MembersInterface membersInterface; + + private MachinetagsInterface machinetagsInterface; + + private NotesInterface notesInterface; + + private PandaInterface pandaInterface; + + private PoolsInterface poolsInterface; + + private PeopleInterface peopleInterface; + + private PhotosInterface photosInterface; + + private PhotosetsCommentsInterface photosetsCommentsInterface; + + private PhotosetsInterface photosetsInterface; + + private CollectionsInterface collectionsInterface; + + private PlacesInterface placesInterface; + + private PrefsInterface prefsInterface; + + private ReflectionInterface reflectionInterface; + + private TagsInterface tagsInterface; + + private TestInterface testInterface; + + private TransformInterface transformInterface; + + private UploadInterface uploadInterface; + + private Uploader uploader; + + private UrlsInterface urlsInterface; + + private GalleriesInterface galleriesInterface; + + private StatsInterface statsInterface; + + private CamerasInterface cameraInterface; + + private SuggestionsInterface suggestionsInterface; + + private GroupDiscussInterface discussionInterface; + + /** + * Construct a new stubbed Flickr instance. + * + */ + public FlickrStub() { + transport = new TransportStub(); + } + + /** + * Get the API key. + * + * @return The API key + */ + public String getApiKey() { + return apiKey; + } + + /** + * Set the API key to use which must not be null. + * + * @param apiKey + * The API key which cannot be null + */ + public void setApiKey(String apiKey) { + if (apiKey == null) { + throw new IllegalArgumentException("API key must not be null"); + } + this.apiKey = apiKey; + } + + public void setAuth(Auth auth) { + this.auth = auth; + } + + /** + * Get the Auth-object. + * + * @return The Auth-object + */ + public Auth getAuth() { + return auth; + } + + /** + * Get the Shared-Secret. + * + * @return The Shared-Secret + */ + public String getSharedSecret() { + return sharedSecret; + } + + /** + * Set the Shared-Secret to use which must not be null. + * + * @param sharedSecret + * The Shared-Secret which cannot be null + */ + public void setSharedSecret(String sharedSecret) { + if (sharedSecret == null) { + throw new IllegalArgumentException("Shared-Secret must not be null"); + } + this.sharedSecret = sharedSecret; + } + + /** + * Get the Transport interface. + * + * @return The Tranport interface + */ + public AbstractTransport getTransport() { + return transport; + } + + /** + * Set the Transport which must not be null. + * + * @param transport + */ + public void setTransport(AbstractTransport transport) { + if (transport == null) { + throw new IllegalArgumentException("Transport must not be null"); + } + this.transport = transport; + } + + /** + * Get the AuthInterface. + * + * @return The AuthInterface + */ + public AuthInterface getAuthInterface() { + if (authInterface == null) { + authInterface = new AuthInterface(apiKey, sharedSecret, transport); + } + return authInterface; + } + + /** + * Get the ActivityInterface. + * + * @return The ActivityInterface + */ + public ActivityInterface getActivityInterface() { + if (activityInterface == null) { + activityInterface = new ActivityInterface(apiKey, sharedSecret, transport); + } + return activityInterface; + } + + public BlogsInterface getBlogsInterface() { + if (blogsInterface == null) { + blogsInterface = new BlogsInterface(apiKey, sharedSecret, transport); + } + return blogsInterface; + } + + public CommentsInterface getCommentsInterface() { + if (commentsInterface == null) { + commentsInterface = new CommentsInterface(apiKey, sharedSecret, transport); + } + return commentsInterface; + } + + public CommonsInterface getCommonsInterface() { + if (commonsInterface == null) { + commonsInterface = new CommonsInterface(apiKey, sharedSecret, transport); + } + return commonsInterface; + } + + public ContactsInterface getContactsInterface() { + if (contactsInterface == null) { + contactsInterface = new ContactsInterface(apiKey, sharedSecret, transport); + } + return contactsInterface; + } + + public FavoritesInterface getFavoritesInterface() { + if (favoritesInterface == null) { + favoritesInterface = new FavoritesInterface(apiKey, sharedSecret, transport); + } + return favoritesInterface; + } + + public GeoInterface getGeoInterface() { + if (geoInterface == null) { + geoInterface = new GeoInterface(apiKey, sharedSecret, transport); + } + return geoInterface; + } + + public GroupsInterface getGroupsInterface() { + if (groupsInterface == null) { + groupsInterface = new GroupsInterface(apiKey, sharedSecret, transport); + } + return groupsInterface; + } + + /** + * @return the interface to the flickr.interestingness methods + */ + public InterestingnessInterface getInterestingnessInterface() { + if (interestingnessInterface == null) { + interestingnessInterface = new InterestingnessInterface(apiKey, sharedSecret, transport); + } + return interestingnessInterface; + } + + public LicensesInterface getLicensesInterface() { + if (licensesInterface == null) { + licensesInterface = new LicensesInterface(apiKey, sharedSecret, transport); + } + return licensesInterface; + } + + public MachinetagsInterface getMachinetagsInterface() { + if (machinetagsInterface == null) { + machinetagsInterface = new MachinetagsInterface(apiKey, sharedSecret, transport); + } + return machinetagsInterface; + } + + public MembersInterface getMembersInterface() { + if (membersInterface == null) { + membersInterface = new MembersInterface(apiKey, sharedSecret, transport); + } + return membersInterface; + } + + public NotesInterface getNotesInterface() { + if (notesInterface == null) { + notesInterface = new NotesInterface(apiKey, sharedSecret, transport); + } + return notesInterface; + } + + public PandaInterface getPandaInterface() { + if (pandaInterface == null) { + pandaInterface = new PandaInterface(apiKey, sharedSecret, transport); + } + return pandaInterface; + } + + public PoolsInterface getPoolsInterface() { + if (poolsInterface == null) { + poolsInterface = new PoolsInterface(apiKey, sharedSecret, transport); + } + return poolsInterface; + } + + public PeopleInterface getPeopleInterface() { + if (peopleInterface == null) { + peopleInterface = new PeopleInterface(apiKey, sharedSecret, transport); + } + return peopleInterface; + } + + public PhotosInterface getPhotosInterface() { + if (photosInterface == null) { + photosInterface = new PhotosInterface(apiKey, sharedSecret, transport); + } + return photosInterface; + } + + public PhotosetsCommentsInterface getPhotosetsCommentsInterface() { + if (photosetsCommentsInterface == null) { + photosetsCommentsInterface = new PhotosetsCommentsInterface(apiKey, sharedSecret, transport); + } + return photosetsCommentsInterface; + } + + public PhotosetsInterface getPhotosetsInterface() { + if (photosetsInterface == null) { + photosetsInterface = new PhotosetsInterface(apiKey, sharedSecret, transport); + } + return photosetsInterface; + } + + public CollectionsInterface getCollectionsInterface() { + if (collectionsInterface == null) { + collectionsInterface = new CollectionsInterface(apiKey, sharedSecret, transport); + } + return collectionsInterface; + } + + public PlacesInterface getPlacesInterface() { + if (placesInterface == null) { + placesInterface = new PlacesInterface(apiKey, sharedSecret, transport); + } + return placesInterface; + } + + public PrefsInterface getPrefsInterface() { + if (prefsInterface == null) { + prefsInterface = new PrefsInterface(apiKey, sharedSecret, transport); + } + return prefsInterface; + } + + public ReflectionInterface getReflectionInterface() { + if (reflectionInterface == null) { + reflectionInterface = new ReflectionInterface(apiKey, sharedSecret, transport); + } + return reflectionInterface; + } + + /** + * Get the TagsInterface for working with Flickr Tags. + * + * @return The TagsInterface + */ + public TagsInterface getTagsInterface() { + if (tagsInterface == null) { + tagsInterface = new TagsInterface(apiKey, sharedSecret, transport); + } + return tagsInterface; + } + + public TestInterface getTestInterface() { + if (testInterface == null) { + testInterface = new TestInterface(apiKey, sharedSecret, transport); + } + return testInterface; + } + + public TransformInterface getTransformInterface() { + if (transformInterface == null) { + transformInterface = new TransformInterface(apiKey, sharedSecret, transport); + } + return transformInterface; + } + + public UploadInterface getUploadInterface() { + if (uploadInterface == null) { + uploadInterface = new UploadInterface(apiKey, sharedSecret, transport); + } + return uploadInterface; + } + + public Uploader getUploader() { + if (uploader == null) { + AbstractTransport uploadTransport = new TransportStub(); + uploader = new Uploader(apiKey, sharedSecret, uploadTransport); + } + return uploader; + } + + public UrlsInterface getUrlsInterface() { + if (urlsInterface == null) { + urlsInterface = new UrlsInterface(apiKey, sharedSecret, transport); + } + return urlsInterface; + } + + public GalleriesInterface getGalleriesInterface() { + if (galleriesInterface == null) { + galleriesInterface = new GalleriesInterface(apiKey, sharedSecret, transport); + } + return galleriesInterface; + } + + public StatsInterface getStatsInterface() { + if (statsInterface == null) { + statsInterface = new StatsInterface(apiKey, sharedSecret, transport); + } + return statsInterface; + } + + public CamerasInterface getCamerasInterface() { + if (cameraInterface == null) { + cameraInterface = new CamerasInterface(apiKey, sharedSecret, transport); + } + return cameraInterface; + } + + /** + * Get the SuggestionsInterface. + * + * @return The SuggestionsInterface + */ + public SuggestionsInterface getSuggestionsInterface() { + if (suggestionsInterface == null) { + suggestionsInterface = new SuggestionsInterface(apiKey, sharedSecret, transport); + } + return suggestionsInterface; + } + + /** + * Get the GroupDiscussInterface. + * + * @return The GroupDiscussInterface + */ + + public GroupDiscussInterface getDiscussionInterface() { + if (discussionInterface == null) { + discussionInterface = new GroupDiscussInterface(apiKey, sharedSecret, transport); + } + return discussionInterface; + } + +} diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Setup.java b/src/test/java/com/flickr4java/flickr/test/util/Setup.java similarity index 82% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/Setup.java rename to src/test/java/com/flickr4java/flickr/test/util/Setup.java index a110a36e..3db87122 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Setup.java +++ b/src/test/java/com/flickr4java/flickr/test/util/Setup.java @@ -1,4 +1,4 @@ -package com.flickr4java.flickr.test; +package com.flickr4java.flickr.test.util; import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; @@ -6,13 +6,14 @@ import com.flickr4java.flickr.auth.Auth; import com.flickr4java.flickr.auth.AuthInterface; import com.flickr4java.flickr.auth.Permission; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.OAuth1Token; + import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties; import java.util.Scanner; -import org.scribe.model.Token; -import org.scribe.model.Verifier; public class Setup { @@ -20,9 +21,7 @@ public static void main(String[] args) { System.out.println("Flickr4Java: Set up integration test environment"); try { new Setup(); - } catch (IOException e) { - e.printStackTrace(); - } catch (FlickrException e) { + } catch (IOException | FlickrException e) { e.printStackTrace(); } } @@ -38,7 +37,7 @@ public Setup() throws IOException, FlickrException { Scanner scanner = new Scanner(System.in); - Token requestToken = authInterface.getRequestToken(); + OAuth1RequestToken requestToken = authInterface.getRequestToken(); String url = authInterface.getAuthorizationUrl(requestToken, Permission.DELETE); System.out.println("Follow this URL to authorise yourself on Flickr"); @@ -48,18 +47,18 @@ public Setup() throws IOException, FlickrException { String tokenKey = scanner.nextLine().trim(); - Token accessToken = authInterface.getAccessToken(requestToken, new Verifier(tokenKey)); + OAuth1Token accessToken = authInterface.getAccessToken(requestToken, tokenKey); System.out.println("Authentication success"); Auth auth = authInterface.checkToken(accessToken); properties.setProperty("token", accessToken.getToken()); - properties.setProperty("tokensecret", accessToken.getSecret()); + properties.setProperty("tokensecret", accessToken.getTokenSecret()); properties.store(new FileOutputStream(propertiesFile), ""); // This token can be used until the user revokes it. System.out.println("Access token - token = " + accessToken.getToken()); - System.out.println(" - secret = " + accessToken.getSecret()); + System.out.println(" - secret = " + accessToken.getTokenSecret()); System.out.println("(These have been saved to the properties file.)"); System.out.println("Realname: " + auth.getUser().getRealName()); System.out.println("Username: " + auth.getUser().getUsername()); diff --git a/src/test/java/com/flickr4java/flickr/test/util/StubTestProperties.java b/src/test/java/com/flickr4java/flickr/test/util/StubTestProperties.java new file mode 100644 index 00000000..5863da35 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/util/StubTestProperties.java @@ -0,0 +1,112 @@ +package com.flickr4java.flickr.test.util; + +import java.util.Arrays; +import java.util.List; + +/** + * TestProperties for stubbed out unit tests. + * + * Values are not sent to Flickr so don't have to be real. + */ +public class StubTestProperties implements TestProperties { + + @Override + public String getHost() { + return "localhost"; + } + + @Override + public String getApiKey() { + return "FAKE_API_KEY"; + } + + @Override + public String getSecret() { + return "FAKE_SECRET"; + } + + @Override + public String getToken() { + return "FAKE_TOKEN"; + } + + @Override + public String getTokenSecret() { + return "FAKE_TOKEN_SECRET"; + } + + @Override + public String getNsid() { + return "24573443@N04"; + } + + @Override + public String getEmail() { + return "EMAIL"; + } + + @Override + public String getUsername() { + return "boncey_test"; + } + + @Override + public String getGroupId() { + return "34427469792@N01"; + } + + @Override + public String getTestGroupId() { + return "12345"; + } + + @Override + public String getPhotoId() { + return "5628095432"; + } + + @Override + public String getPhotosetId() { + return "12345"; + } + + @Override + public String getImageFile() { + return "FILE"; + } + + @Override + public String getGeoWritePhotoId() { + return "12345"; + } + + @Override + public String getCollectionId() { + return "12345"; + } + + @Override + public String getCollectionUrlId() { + return "12345"; + } + + @Override + public String getGalleryId() { + return "72157634925210101"; + } + + @Override + public String getDisplayname() { + return "Darren Greaves"; + } + + @Override + public List getPhotosetPhotos() { + return Arrays.asList("5628122182", "5628111146", "4169948514"); + } + + @Override + public boolean isRealFlickr() { + return false; + } +} diff --git a/src/test/java/com/flickr4java/flickr/test/util/TestProperties.java b/src/test/java/com/flickr4java/flickr/test/util/TestProperties.java new file mode 100644 index 00000000..ec9b2809 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/util/TestProperties.java @@ -0,0 +1,45 @@ +package com.flickr4java.flickr.test.util; + +import java.util.List; + +public interface TestProperties { + String getHost(); + + String getApiKey(); + + String getSecret(); + + String getToken(); + + String getTokenSecret(); + + String getNsid(); + + String getEmail(); + + String getUsername(); + + String getGroupId(); + + String getTestGroupId(); + + String getPhotoId(); + + String getPhotosetId(); + + String getImageFile(); + + String getGeoWritePhotoId(); + + String getCollectionId(); + + String getCollectionUrlId(); + + String getGalleryId(); + + String getDisplayname(); + + List getPhotosetPhotos(); + + boolean isRealFlickr(); +} diff --git a/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java b/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java new file mode 100644 index 00000000..36a29188 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java @@ -0,0 +1,58 @@ +package com.flickr4java.flickr.test.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.net.URL; +import java.nio.file.Paths; +import java.util.Optional; + +public class TestPropertiesFactory { + + /** + * Logger. + */ + private static Logger _log = LoggerFactory.getLogger(TestPropertiesFactory.class); + + + public static TestProperties getTestProperties() { + + TestPropertiesFactory factory = new TestPropertiesFactory(); + Optional fileOptional = factory.findPropertyFile(); + + TestProperties testProperties; + if (fileOptional.isPresent()) { + testProperties = new FileTestProperties(fileOptional.get()); + } else { + testProperties = new StubTestProperties(); + } + + return testProperties; + } + + private Optional findPropertyFile() { + Optional fileOptional = Optional.empty(); + String setupPropertiesPath = System.getenv("SETUP_PROPERTIES_PATH"); + + try { + if (setupPropertiesPath != null && setupPropertiesPath.length() > 0) { + _log.info("Using properties file at '{}'", setupPropertiesPath); + File properties = new File(setupPropertiesPath); + fileOptional = properties.exists() ? Optional.of(properties) : Optional.empty(); + } else { + URL resource = this.getClass().getResource("/setup.properties"); + if (resource != null) { + fileOptional = Optional.of(Paths.get(resource.toURI()).toFile()); + _log.info("Using properties file /setup.properties from classpath"); + } + } + } catch (Exception e) { + _log.warn("Unable to load properties file", e); + fileOptional = Optional.empty(); + } + + return fileOptional; + } + +} diff --git a/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java b/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java new file mode 100644 index 00000000..2034107e --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java @@ -0,0 +1,86 @@ +package com.flickr4java.flickr.test.util; + +import com.flickr4java.flickr.*; +import com.flickr4java.flickr.uploader.Payload; +import com.flickr4java.flickr.uploader.UploadMetaData; +import com.flickr4java.flickr.uploader.UploaderResponse; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.StringReader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Map; + +public class TransportStub extends AbstractTransport { + + private final DocumentBuilder builder; + + public TransportStub() { + DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); + try { + builder = builderFactory.newDocumentBuilder(); + } catch (ParserConfigurationException e) { + throw new FlickrRuntimeException(e); + } + } + + @Override + public Response get(String path, Map parameters, String apiKey, String sharedSecret) { + return loadResponseFromFile(parameters.get("method"), "get"); + } + + @Override + public Response post(String path, Map parameters, String apiKey, String sharedSecret) { + return loadResponseFromFile(parameters.get("method"), "post"); + } + + @Override + public Response postMultiPart(String path, UploadMetaData parameters, Payload payload, String apiKey, String sharedSecret) { + return loadMulitpartResponseFromFile("upload", "post"); + } + + @Override + public Response getNonOAuth(String path, Map parameters) { + return null; + } + + private Response loadResponseFromFile(Object flickrMethod, String httpMethod) { + RESTResponse response; + String filename = String.format("/payloads/%s/%s.xml", httpMethod, flickrMethod); + try { + Path filePath = Paths.get(this.getClass().getResource(filename).toURI()); + String strXml = new String(Files.readAllBytes(filePath), StandardCharsets.UTF_8); + Document document = builder.parse(new InputSource(new StringReader(strXml))); + + response = new RESTResponse(); + response.parse(document); + } catch (Exception e) { + throw new FlickrRuntimeException(e); + } + + return response; + } + + private Response loadMulitpartResponseFromFile(Object flickrMethod, String httpMethod) { + UploaderResponse response; + String filename = String.format("/payloads/%s/%s.xml", httpMethod, flickrMethod); + try { + Path filePath = Paths.get(this.getClass().getResource(filename).toURI()); + String strXml = new String(Files.readAllBytes(filePath), StandardCharsets.UTF_8); + Document document = builder.parse(new InputSource(new StringReader(strXml))); + + response = new UploaderResponse(); + response.parse(document); + } catch (Exception e) { + throw new FlickrRuntimeException(e); + } + + return response; + } +} diff --git a/Flickr4Java/src/test/resources/completenesstest.properties b/src/test/resources/completenesstest.properties similarity index 100% rename from Flickr4Java/src/test/resources/completenesstest.properties rename to src/test/resources/completenesstest.properties diff --git a/src/test/resources/payloads/get/flickr.activity.userComments.xml b/src/test/resources/payloads/get/flickr.activity.userComments.xml new file mode 100644 index 00000000..16f2d28d --- /dev/null +++ b/src/test/resources/payloads/get/flickr.activity.userComments.xml @@ -0,0 +1,11 @@ + + + + + Cheddar + + Test comment. + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.activity.userPhotos.xml b/src/test/resources/payloads/get/flickr.activity.userPhotos.xml new file mode 100644 index 00000000..7a633f54 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.activity.userPhotos.xml @@ -0,0 +1,19 @@ + + + + + 2014-05-04 13.56.00 + + london + + + + Robot + + This looks familiar + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.blogs.getServices.xml b/src/test/resources/payloads/get/flickr.blogs.getServices.xml new file mode 100644 index 00000000..2c542434 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.blogs.getServices.xml @@ -0,0 +1,10 @@ + + + + Blogger + LiveJournal + Wordpress + BloggerAPI + Twitter + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.cameras.getBrandModels.xml b/src/test/resources/payloads/get/flickr.cameras.getBrandModels.xml new file mode 100644 index 00000000..235b9746 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.cameras.getBrandModels.xml @@ -0,0 +1,2521 @@ + + + + + Canon EOS 5D Mark III +

    + 22.3 + 3.2 + CompactFlash, Secure Digital, SDHC, SDXC +
    + + https://live.staticflickr.com/cameras/72157622292089908_model_small_99bff53988.jpg + https://live.staticflickr.com/cameras/72157622292089908_model_large_497d3698ba.jpg + + + + CANON EOS 5D MARK IV + + + Canon EOS 6D +
    + 20.2 + 3 + Secure Digital, SDXC, SDHC +
    + + https://live.staticflickr.com/cameras/72157607012320362_model_small_aa23f6b999.jpg + https://live.staticflickr.com/cameras/72157607012320362_model_large_ceb47a4e39.jpg + +
    + + Canon EOS 7D MARK II + + https://live.staticflickr.com/cameras/72157644861391679_model_small_68f69eec3f.jpg + https://live.staticflickr.com/cameras/72157644861391679_model_large_12fcf1403e.jpg + + + + Canon EOS 80D + + https://live.staticflickr.com/cameras/72157664130845639_model_small_0888c8b51d.jpg + https://live.staticflickr.com/cameras/72157664130845639_model_large_4404988642.jpg + + + + Canon EOS 5D Mark II +
    + 21.1 + 3 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/72157607348761901_model_small_a874952616.jpg + https://live.staticflickr.com/cameras/72157607348761901_model_large_97198e11ef.jpg + +
    + + Canon EOS Rebel T6 + + https://live.staticflickr.com/cameras/72157665871654952_model_small_3fb73b6dcf.jpg + https://live.staticflickr.com/cameras/72157665871654952_model_large_fe071c3051.jpg + + + + Canon EOS 70D +
    + 20.2 + 3 + Secure Digital, SDXC, SDHC +
    + + https://live.staticflickr.com/cameras/72157633273873695_model_small_e17b51707b.jpg + https://live.staticflickr.com/cameras/72157633273873695_model_large_0ac43738dc.jpg + +
    + + Canon EOS 6D Mark II + + https://live.staticflickr.com/cameras/72157662779818774_model_small_b1ed20e0a1.jpg + https://live.staticflickr.com/cameras/72157662779818774_model_large_c2d76f60af.jpg + + + + Canon EOS 7D +
    + 18 + 3 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/72157602280763141_model_small_d6e5af0712.jpg + https://live.staticflickr.com/cameras/72157602280763141_model_large_1f77f7e0f2.jpg + +
    + + Canon EOS REBEL T3i +
    + 18 + 3 + Secure Digital, SDXC, SDHC +
    + + https://live.staticflickr.com/cameras/72157625858229685_model_small_82002d6bd6.jpg + https://live.staticflickr.com/cameras/72157625858229685_model_large_7c02ddbfe1.jpg + +
    + + Canon EOS 60D +
    + 18 + 3 + Secure Digital, SDHC, SDXC +
    + + https://live.staticflickr.com/cameras/72157624493316109_model_small_93c8e25107.jpg + https://live.staticflickr.com/cameras/72157624493316109_model_large_c07377e8d4.jpg + +
    + + Canon EOS R + + + Canon EOS 750D + + https://live.staticflickr.com/cameras/72157632205837729_model_small_42e58fa967.jpg + https://live.staticflickr.com/cameras/72157632205837729_model_large_8cb7ba6c52.jpg + + + + Canon EOS REBEL T3 +
    + 12.2 + 2.7 + SDHC Memory Card +
    + + https://live.staticflickr.com/cameras/72157625983689520_model_small_fbd9eb7715.jpg + https://live.staticflickr.com/cameras/72157625983689520_model_large_f244f70fb6.jpg + +
    + + Canon EOS REBEL T5 +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157642353970835_model_small_b3f1ecb638.jpg + https://live.staticflickr.com/cameras/72157642353970835_model_large_359a3f62ee.jpg + +
    + + Canon EOS REBEL T2i +
    + 18 + 3 + SDXC, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157623502347808_model_small_d6f54d07c8.jpg + https://live.staticflickr.com/cameras/72157623502347808_model_large_692b09d10c.jpg + +
    + + Canon EOS-1D X Mark II + + https://live.staticflickr.com/cameras/72157663262267976_model_small_fe1274e6b7.jpg + https://live.staticflickr.com/cameras/72157663262267976_model_large_a69c5c58dd.jpg + + + + Canon EOS 700D + + https://live.staticflickr.com/cameras/72157632461630521_model_small_7db5f3e1ea.jpg + https://live.staticflickr.com/cameras/72157632461630521_model_large_ebdc3e28a2.jpg + + + + Canon EOS-1D X +
    + 18.1 + 3.2 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/72157629220288179_model_small_4807a929c8.jpg + https://live.staticflickr.com/cameras/72157629220288179_model_large_9b2a9a4024.jpg + +
    + + Canon EOS Rebel T7i + + + Canon EOS 77D + + + Canon EOS REBEL T5i +
    + 18 + 3 + Secure Digital, SDHC, SDXC +
    + + https://live.staticflickr.com/cameras/72157633291340568_model_small_a29265b941.jpg + https://live.staticflickr.com/cameras/72157633291340568_model_large_6aa43d9736.jpg + +
    + + Canon EOS REBEL T1i +
    + 15.1 + 3 + Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157617313528954_model_small_aa0037849d.jpg + https://live.staticflickr.com/cameras/72157617313528954_model_large_1fd8120fef.jpg + +
    + + Canon EOS Rebel T7 + + + Canon EOS Rebel SL2 + + + Canon EOS 90D + + + Canon EOS 50D +
    + 15.1 + 3 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/72157606814096380_model_small_acfeba1dae.jpg + https://live.staticflickr.com/cameras/72157606814096380_model_large_320ea78949.jpg + +
    + + Canon EOS Digital Rebel XSi +
    + 12.2 + 3 + Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157604225656701_model_small_c76252f106.jpg + https://live.staticflickr.com/cameras/72157604225656701_model_large_dedb412bb3.jpg + +
    + + Canon EOS REBEL T4i +
    + 18 + 3 + Secure Digital, SDXC, SDHC +
    + + https://live.staticflickr.com/cameras/72157630136654636_model_small_7aa6948e95.jpg + https://live.staticflickr.com/cameras/72157630136654636_model_large_9f1336ca57.jpg + +
    + + Canon EOS Digital Rebel XTi +
    + 1 + 2.5 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/68_model_small_201afafc2f.jpg + https://live.staticflickr.com/cameras/68_model_large_5fbbd26c3c.jpg + +
    + + Canon EOS Digital Rebel XT +
    + 8 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/31_model_small_7143654004.jpg + https://live.staticflickr.com/cameras/31_model_large_f11b305bdd.jpg + +
    + + Canon EOS 5DS R + + https://live.staticflickr.com/cameras/72157650665459092_model_small_70265a1860.jpg + https://live.staticflickr.com/cameras/72157650665459092_model_large_0272a7ab99.jpg + + + + Canon PowerShot SX60 HS + + https://live.staticflickr.com/cameras/72157647824755152_model_small_e23090b5f4.jpg + https://live.staticflickr.com/cameras/72157647824755152_model_large_7e7e4f80c6.jpg + + + + Canon EOS M50 + + + Canon EOS 40D +
    + 10.1 + 3 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/13483_model_small_bc865d9a17.jpg + https://live.staticflickr.com/cameras/13483_model_large_9d618a4965.jpg + +
    + + Canon EOS RP + + + Canon EOS 760D + + https://live.staticflickr.com/cameras/72157651752742028_model_small_299d7bef9a.jpg + https://live.staticflickr.com/cameras/72157651752742028_model_large_c8b8060b16.jpg + + + + Canon PowerShot G7 X Mark II + + + Canon EOS 5D +
    + 12.8 + 2.5 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/130_model_small_9dbbe5a2b2.jpg + https://live.staticflickr.com/cameras/130_model_large_b8df029b89.jpg + +
    + + Canon EOS 100D + + https://live.staticflickr.com/cameras/72157623555354732_model_small_4ee35cfeb3.jpg + https://live.staticflickr.com/cameras/72157623555354732_model_large_b5dc69964d.jpg + + + + Canon EOS 1200D + + https://live.staticflickr.com/cameras/72157640939372033_model_small_c1a3cb597a.jpg + https://live.staticflickr.com/cameras/72157640939372033_model_large_52555f6708.jpg + + + + Canon EOS Digital Rebel XS +
    + 10.1 + 2.5 + Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157605582107524_model_small_f8c3eacc3e.jpg + https://live.staticflickr.com/cameras/72157605582107524_model_large_f2dd3c1f2b.jpg + +
    + + Canon EOS-1D Mark IV +
    + 16.1 + 3 + SDHC Memory Card, CompactFlash, Secure Digital (SD) Card, Microdrive +
    + + https://live.staticflickr.com/cameras/72157603810225532_model_small_e8a45a1b36.jpg + https://live.staticflickr.com/cameras/72157603810225532_model_large_9785d9733c.jpg + +
    + + Canon EOS Rebel T100 + + + Canon PowerShot SX50 HS +
    + 12.1 + 2.8 + Secure Digital, SDXC, SDHC +
    + + https://live.staticflickr.com/cameras/72157631606498503_model_small_e5db6a3484.jpg + https://live.staticflickr.com/cameras/72157631606498503_model_large_17cd9b1f8e.jpg + +
    + + Canon EOS REBEL SL1 + + https://live.staticflickr.com/cameras/72157633336811707_model_small_9f40643ac4.jpg + https://live.staticflickr.com/cameras/72157633336811707_model_large_2d70d20249.jpg + + + + Canon EOS 20D +
    + 8.3 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/44_model_small_2cb85e48f5.jpg + https://live.staticflickr.com/cameras/44_model_large_eb72aa76ed.jpg + +
    + + Canon EOS 5Ds + + https://live.staticflickr.com/cameras/72157603423041122_model_small_7066489740.jpg + https://live.staticflickr.com/cameras/72157603423041122_model_large_ca4d89355b.jpg + + + + Canon PowerShot SX720 HS + + + Canon EOS M5 + + https://live.staticflickr.com/cameras/72157668584224581_model_small_7ccab5572f.jpg + https://live.staticflickr.com/cameras/72157668584224581_model_large_fde021b1e9.jpg + + + + Canon PowerShot SX530 HS + + https://live.staticflickr.com/cameras/72157648098386118_model_small_7b16d1c3a6.jpg + https://live.staticflickr.com/cameras/72157648098386118_model_large_aaf7999ccb.jpg + + + + Canon PowerShot SX620 HS + + + Canon EOS Digital Rebel +
    + 6.3 + 1.8 + CompactFlash, Microdrive +
    + + https://live.staticflickr.com/cameras/4_model_small_0d320aed75.jpg + https://live.staticflickr.com/cameras/4_model_large_2a7e545a1e.jpg + +
    + + Canon EOS 30D +
    + 8.2 + 2.5 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/9_model_small_e4b4d029e2.jpg + https://live.staticflickr.com/cameras/9_model_large_b17d8c82c3.jpg + +
    + + Canon PowerShot G9 X Mark II + + + Canon EOS M3 + + + Canon CanoScan 9000F Mark II + + + Canon EOS 1Ds Mark III +
    + 21.1 + 3 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/72157601586629334_model_small_071161b82f.jpg + https://live.staticflickr.com/cameras/72157601586629334_model_large_9bfa056618.jpg + +
    + + Canon PowerShot G16 +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157633994515034_model_small_4563648ebb.jpg + https://live.staticflickr.com/cameras/72157633994515034_model_large_8458a45884.jpg + +
    + + Canon EOS 1D Mark III +
    + 10.1 + 3 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/72157600288628059_model_small_4cdfcb3773.jpg + https://live.staticflickr.com/cameras/72157600288628059_model_large_97180e7aa5.jpg + +
    + + Canon EOS M6 + + https://live.staticflickr.com/cameras/72157676311863712_model_small_35cc29dfba.jpg + https://live.staticflickr.com/cameras/72157676311863712_model_large_2a969ea6f8.jpg + + + + Canon PowerShot SX710 HS + + https://live.staticflickr.com/cameras/72157649863292917_model_small_4e5f4385ba.jpg + https://live.staticflickr.com/cameras/72157649863292917_model_large_9af0e169f3.jpg + + + + Canon PowerShot SX730 HS + + https://live.staticflickr.com/cameras/72157673805378274_model_small_544878b8ee.jpg + https://live.staticflickr.com/cameras/72157673805378274_model_large_13e4637fe9.jpg + + + + Canon PowerShot G12 +
    + 10 + 2.8 +
    + + https://live.staticflickr.com/cameras/72157624839718693_model_small_81c526286d.jpg + https://live.staticflickr.com/cameras/72157624839718693_model_large_b6d975e7d6.jpg + +
    + + Canon PowerShot SX40 HS +
    + 12.1 + 2.7 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/72157627707836876_model_small_d58fd3c6ff.jpg + https://live.staticflickr.com/cameras/72157627707836876_model_large_9edd7fd023.jpg + +
    + + Canon PowerShot G15 +
    + 12.1 + 3 + Secure Digital, SDXC, SDHC +
    + + https://live.staticflickr.com/cameras/72157631669626016_model_small_b412b6f89a.jpg + https://live.staticflickr.com/cameras/72157631669626016_model_large_aee995637e.jpg + +
    + + Canon EOS M +
    + 18 + 3 + Secure Digital, SDXC, SDHC +
    + + https://live.staticflickr.com/cameras/72157630734034208_model_small_92bbea491c.jpg + https://live.staticflickr.com/cameras/72157630734034208_model_large_2a60438278.jpg + +
    + + Canon EOS 1Ds Mark II +
    + 16.7 + 2 + CompactFlash, Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/156_model_small_a56b80a67f.jpg + https://live.staticflickr.com/cameras/156_model_large_e6b1f8216a.jpg + +
    + + Canon PowerShot G7 X + + https://live.staticflickr.com/cameras/72157645338335022_model_small_7ec3d31a3c.jpg + https://live.staticflickr.com/cameras/72157645338335022_model_large_c815303a07.jpg + + + + Canon PowerShot SD1100 IS +
    + 8 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157603983956398_model_small_b6d51a8150.jpg + https://live.staticflickr.com/cameras/72157603983956398_model_large_c4d1e89f8d.jpg + +
    + + Canon PowerShot S95 +
    + 10 + 3 + SD/SDHC +
    + + https://live.staticflickr.com/cameras/72157624762166562_model_small_fdc8df7c28.jpg + https://live.staticflickr.com/cameras/72157624762166562_model_large_85e6ab9d4f.jpg + +
    + + Canon PowerShot SX510 HS +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157633170380529_model_small_267d868489.jpg + https://live.staticflickr.com/cameras/72157633170380529_model_large_1196f12423.jpg + +
    + + Canon EOS M100 + + https://live.staticflickr.com/cameras/72157683011558521_model_small_c108ba4596.jpg + https://live.staticflickr.com/cameras/72157683011558521_model_large_6958cc8184.jpg + + + + Canon PowerShot SD1000 +
    + 7.1 + 2.5 + SDHC Memory Card, MultiMediaCard, Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/72157600291596369_model_small_9cf1a0b9c6.jpg + https://live.staticflickr.com/cameras/72157600291596369_model_large_9782e6ca80.jpg + +
    + + Canon PowerShot G11 +
    + 10 + 2.8 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157621971543189_model_small_1644edb612.jpg + https://live.staticflickr.com/cameras/72157621971543189_model_large_bdefce42a8.jpg + +
    + + Canon EOS M6 Mark II + + + Canon PowerShot S120 +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157632858905716_model_small_09c906f983.jpg + https://live.staticflickr.com/cameras/72157632858905716_model_large_85a885e1ce.jpg + +
    + + Canon PowerShot SX130 IS +
    + 12.1 + 3 + SDHX +
    + + https://live.staticflickr.com/cameras/72157624843263664_model_small_466ca9648e.jpg + https://live.staticflickr.com/cameras/72157624843263664_model_large_0cdf8d446b.jpg + +
    + + Canon EOS 10D +
    + 6.3 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/81_model_small_4b6d829266.jpg + https://live.staticflickr.com/cameras/81_model_large_7082fc8590.jpg + +
    + + Canon PowerShot G9 X + + https://live.staticflickr.com/cameras/72157654193429816_model_small_4ef5d73fbb.jpg + https://live.staticflickr.com/cameras/72157654193429816_model_large_199f1a72bc.jpg + + + + Canon PowerShot S5 IS +
    + 8 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/72157600292972439_model_small_d10462f983.jpg + https://live.staticflickr.com/cameras/72157600292972439_model_large_33a048b67b.jpg + +
    + + Canon PowerShot S100 + + + Canon PowerShot SX160 IS + + + Canon PowerShot SX610 HS + + https://live.staticflickr.com/cameras/72157648049359450_model_small_3e6493e3ac.jpg + https://live.staticflickr.com/cameras/72157648049359450_model_large_bf8a8110d6.jpg + + + + Canon PowerShot SX260 HS +
    + 12.1 + 3 + Secure Digital (SD) Card, Secure Digital High Capacity (SDHC) Card, Secure Digital Extended Capacity (SDXC) +
    + + https://live.staticflickr.com/cameras/72157629555712731_model_small_c08bd90398.jpg + https://live.staticflickr.com/cameras/72157629555712731_model_large_cf014452fb.jpg + +
    + + Canon PowerShot S3 IS +
    + 6 + 2 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/115_model_small_ec10d60f7a.jpg + https://live.staticflickr.com/cameras/115_model_large_9ffdcf70bf.jpg + +
    + + Canon PowerShot G10 +
    + 14.7 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607254728807_model_small_c7595d237f.jpg + https://live.staticflickr.com/cameras/72157607254728807_model_large_62ddda0838.jpg + +
    + + Canon PowerShot G9 +
    + 12.1 + 3 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157601586583928_model_small_71f71758a6.jpg + https://live.staticflickr.com/cameras/72157601586583928_model_large_3df7faed63.jpg + +
    + + Canon PowerShot SX200 IS +
    + 12.1 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157615327177137_model_small_c923617fcf.jpg + https://live.staticflickr.com/cameras/72157615327177137_model_large_e2585949a3.jpg + +
    + + Canon PowerShot G1 X Mark II + + https://live.staticflickr.com/cameras/72157640985213904_model_small_8d1b938d77.jpg + https://live.staticflickr.com/cameras/72157640985213904_model_large_8454c17833.jpg + + + + Canon PowerShot G1 X +
    + 14.3 + 3 + Secure Digital, SDHC, SDXC +
    + + https://live.staticflickr.com/cameras/72157628828372835_model_small_198698201c.jpg + https://live.staticflickr.com/cameras/72157628828372835_model_large_a3c965c325.jpg + +
    + + Canon PowerShot SX30 IS +
    + 14.1 + 2.7 +
    + + https://live.staticflickr.com/cameras/72157624846412507_model_small_3ba18a5885.jpg + https://live.staticflickr.com/cameras/72157624846412507_model_large_478b8f73b5.jpg + +
    + + Canon PowerShot SX120 IS +
    + 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157622008716929_model_small_7acbfb860f.jpg + https://live.staticflickr.com/cameras/72157622008716929_model_large_730372a5d9.jpg + +
    + + Canon PowerShot SX10 IS +
    + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607394786554_model_small_cd7b8479c5.jpg + https://live.staticflickr.com/cameras/72157607394786554_model_large_472ea85a5a.jpg + +
    + + Canon PowerShot SD750 +
    + 7.1 + 3 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/72157600292482502_model_small_16de7e5ce6.jpg + https://live.staticflickr.com/cameras/72157600292482502_model_large_25b3e8c05d.jpg + +
    + + Canon PowerShot SD1200 IS +
    + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157615858002250_model_small_d297c2dd76.jpg + https://live.staticflickr.com/cameras/72157615858002250_model_large_18e94049dd.jpg + +
    + + Canon PowerShot S90 +
    + 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157622037248671_model_small_599abbeea4.jpg + https://live.staticflickr.com/cameras/72157622037248671_model_large_a3e2203efb.jpg + +
    + + Canon PowerShot ELPH 100 HS + + https://live.staticflickr.com/cameras/72157626077723737_model_small_422bc9313f.jpg + https://live.staticflickr.com/cameras/72157626077723737_model_large_e95bc5563a.jpg + + + + Canon PowerShot A520 +
    + 4 + 1.8 + MultiMediaCard, Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/113_model_small_3c4e2b476c.jpg + https://live.staticflickr.com/cameras/113_model_large_a8ae50aaa2.jpg + +
    + + Canon CanoScan 9000F + + https://live.staticflickr.com/cameras/72157624247324882_model_small_a3237917bd.jpg + https://live.staticflickr.com/cameras/72157624247324882_model_large_287ed633f5.jpg + + + + Canon PowerShot SX210 IS +
    + 14.1 + 3 +
    + + https://live.staticflickr.com/cameras/72157623514846576_model_small_102da06252.jpg + https://live.staticflickr.com/cameras/72157623514846576_model_large_ff33eaebcd.jpg + +
    + + Canon PowerShot SD600 +
    + 6 + 2.5 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/147_model_small_d4e6885dd1.jpg + https://live.staticflickr.com/cameras/147_model_large_7542357b7b.jpg + +
    + + Canon PowerShot SX500 IS +
    + 16 + 3 + Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157631426644668_model_small_3db39a01f5.jpg + https://live.staticflickr.com/cameras/72157631426644668_model_large_3d45443eaf.jpg + +
    + + Canon PowerShot SD1300 IS +
    + 12.1 + 2.7 + SDHC Memory Card +
    + + https://live.staticflickr.com/cameras/72157623495818996_model_small_a77640cee0.jpg + https://live.staticflickr.com/cameras/72157623495818996_model_large_23f998fc01.jpg + +
    + + Canon PowerShot SX110 IS +
    + 9 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607097240125_model_small_89b9359b0a.jpg + https://live.staticflickr.com/cameras/72157607097240125_model_large_37bf0a0285.jpg + +
    + + Canon PowerShot A2300 +
    + 16 + 2.7 + Secure Digital, SDHC, SDXC +
    + + https://live.staticflickr.com/cameras/72157629682877859_model_small_0e76052de3.jpg + https://live.staticflickr.com/cameras/72157629682877859_model_large_512c829f1c.jpg + +
    + + Canon PowerShot S2 IS +
    + 5 + 1.8 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/73_model_small_54db2b6032.jpg + https://live.staticflickr.com/cameras/73_model_large_b8912b2c1e.jpg + +
    + + Canon PowerShot SX220 HS + + https://live.staticflickr.com/cameras/72157626120402661_model_small_2d8ae30536.jpg + https://live.staticflickr.com/cameras/72157626120402661_model_large_16f4ed2c3f.jpg + + + + Canon PowerShot SX400 IS + + https://live.staticflickr.com/cameras/72157647167111895_model_small_d02bbe89d7.jpg + https://live.staticflickr.com/cameras/72157647167111895_model_large_cfbf3da591.jpg + + + + Canon PowerShot SD780 IS +
    + 12.1 + 2.5 + SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157615260423184_model_small_bc5565c8b7.jpg + https://live.staticflickr.com/cameras/72157615260423184_model_large_f0a803b0fc.jpg + +
    + + Canon PowerShot S400 + + https://live.staticflickr.com/cameras/533_model_small_d595a3f690.jpg + https://live.staticflickr.com/cameras/533_model_large_9c8688c05a.jpg + + + + Canon PowerShot A4000 IS +
    + 16 + 3 + Secure Digital, SDHC, SDXC +
    + + https://live.staticflickr.com/cameras/72157629690121413_model_small_c3674f9a04.jpg + https://live.staticflickr.com/cameras/72157629690121413_model_large_fd69104134.jpg + +
    + + Canon PowerShot SX20 IS +
    + 12.1 + 2.5 + MultiMediaCard (MMC) +
    + + https://live.staticflickr.com/cameras/72157622054003161_model_small_fa47de9a45.jpg + https://live.staticflickr.com/cameras/72157622054003161_model_large_84bc659ebc.jpg + +
    + + Canon PowerShot SX150 IS +
    + 14.1 + 3 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/72157627401052221_model_small_27ede7c032.jpg + https://live.staticflickr.com/cameras/72157627401052221_model_large_a88fcd5700.jpg + +
    + + Canon PowerShot SD870 IS +
    + 8 + 3 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/72157601661637005_model_small_8e99150a47.jpg + https://live.staticflickr.com/cameras/72157601661637005_model_large_778c7a6f7f.jpg + +
    + + Canon PowerShot SX280 HS + + https://live.staticflickr.com/cameras/72157633352455718_model_small_d946c5d9ca.jpg + https://live.staticflickr.com/cameras/72157633352455718_model_large_0bc3ebbc33.jpg + + + + Canon PowerShot SD400 +
    + 5 + 2 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/30_model_small_ba4763b423.jpg + https://live.staticflickr.com/cameras/30_model_large_464f18fc8a.jpg + +
    + + Canon PowerShot A95 +
    + 5 + 1.8 + CompactFlash +
    + + https://live.staticflickr.com/cameras/58_model_small_1e7955211c.jpg + https://live.staticflickr.com/cameras/58_model_large_2f415e825f.jpg + +
    + + Canon PowerShot SX520 HS +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157646860530030_model_small_c287cae292.jpg + https://live.staticflickr.com/cameras/72157646860530030_model_large_2e679b44dd.jpg + +
    + + Canon EOS 1D Mark II N +
    + 8.2 + 2.5 + CompactFlash, Secure Digital (SD) Card, Microdrive +
    + + https://live.staticflickr.com/cameras/792_model_small_79b90ff356.jpg + https://live.staticflickr.com/cameras/792_model_large_ae86ccf632.jpg + +
    + + Canon PowerShot A710 IS +
    + 7.1 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/928_model_small_687bc868ed.jpg + https://live.staticflickr.com/cameras/928_model_large_863d565f23.jpg + +
    + + Canon PowerShot SD850 IS +
    + 8 + 2.5 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/72157600316000762_model_small_a83286a964.jpg + https://live.staticflickr.com/cameras/72157600316000762_model_large_1970b12f6c.jpg + +
    + + Canon PowerShot SD500 +
    + 7.1 + 2 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/413_model_small_cde2faea24.jpg + https://live.staticflickr.com/cameras/413_model_large_9eff7352b6.jpg + +
    + + Canon PowerShot S45 +
    + 4 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/373_model_small_f2002e4d4c.jpg + https://live.staticflickr.com/cameras/373_model_large_8d345e31a2.jpg + +
    + + Canon PowerShot S110 + + + Canon EOS 1D Mark II +
    + 8.2 + 2.5 + CompactFlash, Secure Digital (SD) Card, Microdrive +
    + + https://live.staticflickr.com/cameras/12_model_small_1242e67975.jpg + https://live.staticflickr.com/cameras/12_model_large_dfa80dabd0.jpg + +
    + + Canon PowerShot SX600 HS +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157642221879684_model_small_dc7d3c59ee.jpg + https://live.staticflickr.com/cameras/72157642221879684_model_large_206c3e1651.jpg + +
    + + Canon PowerShot A590 IS +
    + 8 + 2.5 + MMCplus +
    + + https://live.staticflickr.com/cameras/72157603914408544_model_small_70f463f26f.jpg + https://live.staticflickr.com/cameras/72157603914408544_model_large_914d992355.jpg + +
    + + Canon PowerShot SD450 +
    + 5 + 2.5 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/64_model_small_fa1065b7b6.jpg + https://live.staticflickr.com/cameras/64_model_large_35994d68f5.jpg + +
    + + Canon PowerShot S200 + + + Canon PowerShot A550 +
    + 7.1 + 2 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157600289383418_model_small_0ee0a7e545.jpg + https://live.staticflickr.com/cameras/72157600289383418_model_large_b029991d3d.jpg + +
    + + Canon PowerShot A640 +
    + 10 + 2.5 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/1317_model_small_82221e6d98.jpg + https://live.staticflickr.com/cameras/1317_model_large_5c7290e792.jpg + +
    + + Canon PowerShot SX700 HS +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157641922172003_model_small_335e01dc78.jpg + https://live.staticflickr.com/cameras/72157641922172003_model_large_c62a48d7c0.jpg + +
    + + Canon PowerShot SD800 IS +
    + 7.1 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/3506_model_small_baa4b8be11.jpg + https://live.staticflickr.com/cameras/3506_model_large_9fba9d5611.jpg + +
    + + Canon PowerShot SX230 HS + + https://live.staticflickr.com/cameras/72157626107421899_model_small_fe96996285.jpg + https://live.staticflickr.com/cameras/72157626107421899_model_large_3b15049271.jpg + + + + Canon PowerShot SX170 IS +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157635427421420_model_small_2ddc739862.jpg + https://live.staticflickr.com/cameras/72157635427421420_model_large_6530dd3eac.jpg + +
    + + Canon PowerShot SD790 IS +
    + 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157604206177666_model_small_61519d019b.jpg + https://live.staticflickr.com/cameras/72157604206177666_model_large_fe0abf6ac8.jpg + +
    + + Canon PowerShot A720 IS +
    + 8 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/72157601700908638_model_small_ffa204741b.jpg + https://live.staticflickr.com/cameras/72157601700908638_model_large_c5f41eec0b.jpg + +
    + + Canon PowerShot SD300 +
    + 4 + 2 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/192_model_small_dc3c6ec0b9.jpg + https://live.staticflickr.com/cameras/192_model_large_d808fc3fb6.jpg + +
    + + Canon PowerShot G7 +
    + 10 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/24369_model_small_cc7df00614.jpg + https://live.staticflickr.com/cameras/24369_model_large_e18440c1ed.jpg + +
    + + Canon PowerShot SD550 +
    + 7.1 + 2.5 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/482_model_small_f8b4bfe6d8.jpg + https://live.staticflickr.com/cameras/482_model_large_033233faac.jpg + +
    + + Canon PowerShot A570 IS +
    + 7.1 + 2.5 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157600291595413_model_small_4f322f47a2.jpg + https://live.staticflickr.com/cameras/72157600291595413_model_large_d7bed7b9d9.jpg + +
    + + Canon PowerShot A650 IS +
    + 12.1 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/72157601891740240_model_small_935ab686ff.jpg + https://live.staticflickr.com/cameras/72157601891740240_model_large_010a6f6998.jpg + +
    + + Canon PowerShot SD980 IS +
    + 12.1 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157622084783391_model_small_1558771e45.jpg + https://live.staticflickr.com/cameras/72157622084783391_model_large_05e2884fe1.jpg + +
    + + Canon PowerShot G2 +
    + 4 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/42_model_small_53424d7981.jpg + https://live.staticflickr.com/cameras/42_model_large_e48879fba0.jpg + +
    + + Canon PowerShot A70 + + https://live.staticflickr.com/cameras/331_model_small_fd6c5d9f6e.jpg + https://live.staticflickr.com/cameras/331_model_large_2a908d5d29.jpg + + + + Canon PowerShot SX100 IS +
    + 8 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/72157602254956013_model_small_c7fc8218ed.jpg + https://live.staticflickr.com/cameras/72157602254956013_model_large_ca3276f712.jpg + +
    + + Canon PowerShot SD1400 IS +
    + 12 +
    + + https://live.staticflickr.com/cameras/72157623403735861_model_small_7b6eef712c.jpg + https://live.staticflickr.com/cameras/72157623403735861_model_large_6377095b94.jpg + +
    + + Canon PowerShot A630 +
    + 8 + 2.5 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/880_model_small_f621539dd2.jpg + https://live.staticflickr.com/cameras/880_model_large_f447184173.jpg + +
    + + Canon PowerShot S500 +
    + 5 + 1.5 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/311_model_small_8f0b9890f5.jpg + https://live.staticflickr.com/cameras/311_model_large_7d733573e9.jpg + +
    + + Canon PowerShot D10 +
    + 12.1 + 2.5 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/72157616911061933_model_small_e0ca711a7f.jpg + https://live.staticflickr.com/cameras/72157616911061933_model_large_cc00846c64.jpg + +
    + + Canon PowerShot G5 + + + Canon EOS 650D + + https://live.staticflickr.com/cameras/72157658988031402_model_small_84fd539622.jpg + https://live.staticflickr.com/cameras/72157658988031402_model_large_3b9e33f1d9.jpg + + + + Canon PowerShot S50 + + + Canon PowerShot G3 +
    + 4 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/168_model_small_f86db7018f.jpg + https://live.staticflickr.com/cameras/168_model_large_bf37ba94b6.jpg + +
    + + Canon EOS D60 + + + Canon PowerShot SD900 +
    + 10 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/2705_model_small_e4e7c5e7df.jpg + https://live.staticflickr.com/cameras/2705_model_large_af0d96d561.jpg + +
    + + Canon PowerShot A480 +
    + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157613371182459_model_small_8f00044538.jpg + https://live.staticflickr.com/cameras/72157613371182459_model_large_6f9d21111d.jpg + +
    + + Canon PowerShot A470 +
    + 7.1 + 2.5 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/72157604008953746_model_small_ab3a0c68fb.jpg + https://live.staticflickr.com/cameras/72157604008953746_model_large_5b25b77672.jpg + +
    + + Canon PowerShot A400 + + + Canon PowerShot S230 + + + Canon PowerShot G6 +
    + 7.1 + 2 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/306_model_small_10710a51a3.jpg + https://live.staticflickr.com/cameras/306_model_large_1cbfb40949.jpg + +
    + + Canon PowerShot A2200 +
    + 14.1 +
    + + https://live.staticflickr.com/cameras/72157626006484232_model_small_32fb85f79e.jpg + https://live.staticflickr.com/cameras/72157626006484232_model_large_7de50bc2d5.jpg + +
    + + Canon PowerShot A490 +
    + 10 +
    +
    + + Canon PowerShot ELPH 300 HS +
    + 12 +
    + + https://live.staticflickr.com/cameras/72157626133707081_model_small_fd24fe9a5f.jpg + https://live.staticflickr.com/cameras/72157626133707081_model_large_5789bb40d6.jpg + +
    + + Canon PowerShot S70 +
    + 7.1 + 1.8 + CompactFlash +
    + + https://live.staticflickr.com/cameras/70_model_small_74b4f1d550.jpg + https://live.staticflickr.com/cameras/70_model_large_f9711ed374.jpg + +
    + + Canon PowerShot SD960 IS +
    + 12.1 + 2.8 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157615260434668_model_small_068dd2b166.jpg + https://live.staticflickr.com/cameras/72157615260434668_model_large_bddd57f961.jpg + +
    + + Canon PowerShot S40 + + + Canon PowerShot A3300 IS +
    + 16 + 3 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/72157626169050894_model_small_9024e25b64.jpg + https://live.staticflickr.com/cameras/72157626169050894_model_large_11c60be00c.jpg + +
    + + Canon PowerShot A410 +
    + 3.2 + 1.5 + MultiMediaCard, Secure Digital +
    + + https://live.staticflickr.com/cameras/18_model_small_4e47ea423d.jpg + https://live.staticflickr.com/cameras/18_model_large_dc8a8ee8b3.jpg + +
    + + Canon PowerShot A200 + + + Canon PowerShot A620 +
    + 7.1 + 2 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/134_model_small_92eeb17022.jpg + https://live.staticflickr.com/cameras/134_model_large_d1c1e2d3df.jpg + +
    + + Canon PowerShot A540 +
    + 6 + 2.5 + MultiMediaCard, Secure Digital +
    + + https://live.staticflickr.com/cameras/21_model_small_4595d398d7.jpg + https://live.staticflickr.com/cameras/21_model_large_511e5c2f88.jpg + +
    + + Canon PowerShot SD630 +
    + 6 + 3 + MultiMediaCard, Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/380_model_small_ced61150f3.jpg + https://live.staticflickr.com/cameras/380_model_large_aa27b87301.jpg + +
    + + Canon EOS 1DS +
    + 11.1 + 2 + CompactFlash +
    + + https://live.staticflickr.com/cameras/541_model_small_8bf11ebe60.jpg + https://live.staticflickr.com/cameras/541_model_large_f104299b9c.jpg + +
    + + Canon PowerShot A2500 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/72157633211759483_model_small_fdf71aaa57.jpg + https://live.staticflickr.com/cameras/72157633211759483_model_large_068f77cbc8.jpg + +
    + + Canon PowerShot A75 +
    + 3.2 + 1.8 + CompactFlash +
    + + https://live.staticflickr.com/cameras/53_model_small_1358fa386c.jpg + https://live.staticflickr.com/cameras/53_model_large_83792310b4.jpg + +
    + + Canon PowerShot Pro1 +
    + 8 + 2 + CompactFlash +
    + + https://live.staticflickr.com/cameras/279_model_small_e6281ed159.jpg + https://live.staticflickr.com/cameras/279_model_large_ac13e907a7.jpg + +
    + + Canon IXUS 220HS + + + Canon PowerShot A40 + + + Canon PowerShot SX1 IS +
    + 10 + 2.8 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607398275267_model_small_506f6616ce.jpg + https://live.staticflickr.com/cameras/72157607398275267_model_large_533d29fcab.jpg + +
    + + Canon PowerShot SD770 IS +
    + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157604597339286_model_small_4e767448d9.jpg + https://live.staticflickr.com/cameras/72157604597339286_model_large_c7c345de36.jpg + +
    + + Canon PowerShot A3100 IS +
    + 12 +
    +
    + + Canon PowerShot S80 +
    + 8 + 2.5 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/162_model_small_e1565c67c9.jpg + https://live.staticflickr.com/cameras/162_model_large_571ee7b4bd.jpg + +
    + + Canon PowerShot SD950 IS +
    + 12.1 + 2.5 + MultiMediaCard, Secure Digital +
    + + https://live.staticflickr.com/cameras/72157602219148731_model_small_d208e9a3b0.jpg + https://live.staticflickr.com/cameras/72157602219148731_model_large_95eacd033f.jpg + +
    + + Canon PowerShot A85 +
    + 4 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/123_model_small_64e30bc0c3.jpg + https://live.staticflickr.com/cameras/123_model_large_6a55c4cc59.jpg + +
    + + Canon PowerShot A60 + + + Canon PowerShot SD200 + + + Canon PowerShot SD890 IS +
    + 10 + 2.5 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157604325182497_model_small_37aa89e826.jpg + https://live.staticflickr.com/cameras/72157604325182497_model_large_80e15aacfd.jpg + +
    + + Canon PowerShot S1 IS +
    + 3.2 + 1.5 + CompactFlash +
    + + https://live.staticflickr.com/cameras/445_model_small_a6791e4c0a.jpg + https://live.staticflickr.com/cameras/445_model_large_7499eb1668.jpg + +
    + + Canon PowerShot SD990 IS +
    + 14.7 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607826378076_model_small_570b3e63da.jpg + https://live.staticflickr.com/cameras/72157607826378076_model_large_57edfd2df8.jpg + +
    + + Canon PowerShot S430 + + + Canon PowerShot A700 +
    + 6 + 2.5 + MultiMediaCard, Secure Digital +
    + + https://live.staticflickr.com/cameras/24_model_small_82f9fe11cf.jpg + https://live.staticflickr.com/cameras/24_model_large_9a1ac4b633.jpg + +
    + + Canon PowerShot S10 + + + Canon PowerShot A50 + + + Canon PowerShot ELPH 110 HS +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157629310448342_model_small_cd14d2b324.jpg + https://live.staticflickr.com/cameras/72157629310448342_model_large_d505d94f18.jpg + +
    + + Canon EOS M2 + + https://live.staticflickr.com/cameras/72157638486651333_model_small_dd694f802b.jpg + https://live.staticflickr.com/cameras/72157638486651333_model_large_ee0838b78e.jpg + + + + Canon PowerShot S410 +
    + 4 + 1.5 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/49_model_small_a82d562b14.jpg + https://live.staticflickr.com/cameras/49_model_large_f7c124120b.jpg + +
    + + Canon PowerShot A430 +
    + 4 + 1.8 + MultiMediaCard, Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/7_model_small_b345a26c77.jpg + https://live.staticflickr.com/cameras/7_model_large_377848c90e.jpg + +
    + + Canon PowerShot SD100 + + + Canon PowerShot A20 + + + Canon PowerShot A580 +
    + 8 + 2.5 + MMCplus +
    + + https://live.staticflickr.com/cameras/72157604000068487_model_small_11826b37d5.jpg + https://live.staticflickr.com/cameras/72157604000068487_model_large_57e09b15a2.jpg + +
    + + Canon PowerShot S20 + + + Canon PowerShot A420 + + + Canon PowerShot SX240 HS + + + Canon PowerShot A560 +
    + 7.1 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/72157600291685735_model_small_c81b932be3.jpg + https://live.staticflickr.com/cameras/72157600291685735_model_large_6bcd9d3efc.jpg + +
    + + Canon PowerShot A80 + + + Canon PowerShot A530 +
    + 5 + 1.8 + MultiMediaCard, Secure Digital +
    + + https://live.staticflickr.com/cameras/303_model_small_85ec2a9970.jpg + https://live.staticflickr.com/cameras/303_model_large_90dd997c32.jpg + +
    + + Canon PowerShot SD700 IS +
    + 6 + 2.5 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/432_model_small_08e9751d7e.jpg + https://live.staticflickr.com/cameras/432_model_large_137b141680.jpg + +
    + + Canon PowerShot A1100 IS +
    + 12.1 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157614912551863_model_small_6c2707008a.jpg + https://live.staticflickr.com/cameras/72157614912551863_model_large_3870e9c623.jpg + +
    + + Canon PowerShot A610 +
    + 5 + 2 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/295_model_small_ec60d819ec.jpg + https://live.staticflickr.com/cameras/295_model_large_b9f67ef906.jpg + +
    + + Canon PowerShot SD880 IS +
    + 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607803563543_model_small_f054e019cf.jpg + https://live.staticflickr.com/cameras/72157607803563543_model_large_b23b35ef33.jpg + +
    + + Canon PowerShot A510 +
    + 3.2 + 1.8 + MultiMediaCard, Secure Digital +
    + + https://live.staticflickr.com/cameras/103_model_small_b132094ab0.jpg + https://live.staticflickr.com/cameras/103_model_large_f8b0f7772c.jpg + +
    + + Canon PowerShot ELPH 300HS +
    + 12.1 + 2.7 + MultiMediaCard, Secure Digital, SDXC, SDHC +
    + + https://live.staticflickr.com/cameras/72157626177410605_model_small_384a9a5bf2.jpg + https://live.staticflickr.com/cameras/72157626177410605_model_large_ac6be593a2.jpg + +
    + + Canon PowerShot A1000 IS +
    + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607149127437_model_small_ea9ae41258.jpg + https://live.staticflickr.com/cameras/72157607149127437_model_large_c274e4a031.jpg + +
    + + Canon PowerShot S30 +
    + 3.2 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/681_model_small_b801bc3de5.jpg + https://live.staticflickr.com/cameras/681_model_large_fc4c035a37.jpg + +
    + + Canon EOS 1D + + + Canon PowerShot A1200 +
    + 12.1 + 2.7 + SD/SDHC/SDXC +
    + + https://live.staticflickr.com/cameras/72157626100347637_model_small_98281cf6c9.jpg + https://live.staticflickr.com/cameras/72157626100347637_model_large_5815e8dea2.jpg + +
    + + Canon PowerShot A460 +
    + 5 + 2 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157600289350296_model_small_7fbe5bacab.jpg + https://live.staticflickr.com/cameras/72157600289350296_model_large_4a22860b7c.jpg + +
    + + Canon PowerShot SD940 IS +
    + 12.1 + 2.7 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157622084755657_model_small_1eaf6702b9.jpg + https://live.staticflickr.com/cameras/72157622084755657_model_large_b543294bc4.jpg + +
    + + Canon PowerShot SD10 +
    + 4 + 1.5 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/345_model_small_727b7fb8a6.jpg + https://live.staticflickr.com/cameras/345_model_large_0640966e76.jpg + +
    + + Canon PowerShot A495 + + https://live.staticflickr.com/cameras/72157623248701455_model_small_866f79da99.jpg + https://live.staticflickr.com/cameras/72157623248701455_model_large_d76121e78f.jpg + + + + Canon PowerShot A2000 IS +
    + 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607272610511_model_small_ffc16364ec.jpg + https://live.staticflickr.com/cameras/72157607272610511_model_large_c3440fdc55.jpg + +
    + + Canon PowerShot A3000 IS + + https://live.staticflickr.com/cameras/72157623337752577_model_small_ff326581e0.jpg + https://live.staticflickr.com/cameras/72157623337752577_model_large_fa3577dc49.jpg + + + + Canon IXUS 300 HS + + https://live.staticflickr.com/cameras/72157624136191544_model_small_c8c1f1020d.jpg + https://live.staticflickr.com/cameras/72157624136191544_model_large_0d9be374a0.jpg + + + + Canon PowerShot S330 + + + Canon PowerShot S300 + + + Canon PowerShot SD110 + + + Canon PowerShot G1 + + + Canon PowerShot S60 +
    + 5 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/319_model_small_b6503c5e8f.jpg + https://live.staticflickr.com/cameras/319_model_large_a74142fbbb.jpg + +
    + + Canon PowerShot A300 + + + Canon PowerShot Pro90 IS +
    + 3.2 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/1792_model_small_6ca66ff1ac.jpg + https://live.staticflickr.com/cameras/1792_model_large_2654c5d5de.jpg + +
    + + Canon PowerShot SD30 +
    + 5 + 1.8 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/329_model_small_ca1aa2959e.jpg + https://live.staticflickr.com/cameras/329_model_large_ab5abc906b.jpg + +
    + + Canon PowerShot SD20 +
    + 5 + 1.5 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/1056_model_small_0fe1cb84e6.jpg + https://live.staticflickr.com/cameras/1056_model_large_c3b3853158.jpg + +
    + + Canon PowerShot A310 + + + Canon PowerShot A2100 IS +
    + 12.1 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157615813690609_model_small_85a05a0580.jpg + https://live.staticflickr.com/cameras/72157615813690609_model_large_5c483e0981.jpg + +
    + + Canon PowerShot A10 + + + Canon PowerShot A450 + + + Canon PowerShot SD3500 IS +
    + 14.1 +
    +
    + + Canon PowerShot E1 +
    + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607584729571_model_small_19dc0473cb.jpg + https://live.staticflickr.com/cameras/72157607584729571_model_large_ef505b6354.jpg + +
    + + Canon PowerShot SD970 IS +
    + 12.1 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157616347164661_model_small_3f4b234723.jpg + https://live.staticflickr.com/cameras/72157616347164661_model_large_886fd1e530.jpg + +
    + + Canon PowerShot SD40 +
    + 7.1 + 1.8 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/50047_model_small_07b3b7b4c4.jpg + https://live.staticflickr.com/cameras/50047_model_large_21ac845732.jpg + +
    + + Canon PowerShot TX1 +
    + 7.1 + 1.8 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157600293208250_model_small_264ea2a837.jpg + https://live.staticflickr.com/cameras/72157600293208250_model_large_d7a965d3fb.jpg + +
    + + Canon HV20 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/72157600292920852_model_small_08ffbdf604.jpg + https://live.staticflickr.com/cameras/72157600292920852_model_large_3175d743e7.jpg + +
    + + Canon Optura 200 MC + + + Canon PowerShot A100 + + + Canon Optura 20 + + + Canon Optura 300 + + + Canon ZR90 + + + Canon GL2 + + + Canon PowerShot SD430 Wireless +
    + 5 + 2 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/414_model_small_ecb3329329.jpg + https://live.staticflickr.com/cameras/414_model_large_a004c60da3.jpg + +
    + + Canon ZR65 MC + + + Canon Optura 40 +
    + 2.5 +
    + + https://live.staticflickr.com/cameras/1766_model_small_f8791abed7.jpg + https://live.staticflickr.com/cameras/1766_model_large_dd791c27a3.jpg + +
    + + Canon ZR70 MC + + + Canon ZR700 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/6046_model_small_f41b4b4d4e.jpg + https://live.staticflickr.com/cameras/6046_model_large_6c3b8985db.jpg + +
    + + Canon PowerShot A30 + + + Canon ZR850 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/72157600292491412_model_small_bd46421c08.jpg + https://live.staticflickr.com/cameras/72157600292491412_model_large_5f38b568a4.jpg + +
    + + Canon ZR600 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/1901_model_small_5e8b8ace02.jpg + https://live.staticflickr.com/cameras/1901_model_large_00bb945fd0.jpg + +
    + + Canon Elura 70 + + + Canon DC10 +
    + 2.5 +
    + + https://live.staticflickr.com/cameras/1556_model_small_4687e277f0.jpg + https://live.staticflickr.com/cameras/1556_model_large_22f4d11350.jpg + +
    + + Canon ZR400 +
    + 2.4 +
    + + https://live.staticflickr.com/cameras/2427_model_small_ef31cd0754.jpg + https://live.staticflickr.com/cameras/2427_model_large_8dea31956f.jpg + +
    + + Canon EOS D30 + + + Canon ZR200 +
    + 2.4 +
    + + https://live.staticflickr.com/cameras/834_model_small_32d5d5661c.jpg + https://live.staticflickr.com/cameras/834_model_large_0e0c1b4558.jpg + +
    + + Canon ZR85 +
    + 2.5 +
    + + https://live.staticflickr.com/cameras/2031_model_small_23f714666e.jpg + https://live.staticflickr.com/cameras/2031_model_large_b853e28789.jpg + +
    + + Canon Elura 85 + + + Canon Optura 600 +
    + 2.5 +
    + + https://live.staticflickr.com/cameras/2644_model_small_2b31ee6a72.jpg + https://live.staticflickr.com/cameras/2644_model_large_c99852498a.jpg + +
    + + Canon Elura 100 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/3454_model_small_c33c5c12df.jpg + https://live.staticflickr.com/cameras/3454_model_large_2c7745a2c9.jpg + +
    + + Canon HV10 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/4250_model_small_0587b2f1d4.jpg + https://live.staticflickr.com/cameras/4250_model_large_485d09c770.jpg + +
    + + Canon Elura 60 + + https://live.staticflickr.com/cameras/3243_model_small_7171eda644.jpg + https://live.staticflickr.com/cameras/3243_model_large_4b80555830.jpg + + + + Canon Elura 50 + + + Canon DC40 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/2604_model_small_be408cc63c.jpg + https://live.staticflickr.com/cameras/2604_model_large_42c1d7eeed.jpg + +
    + + Canon Elura 65 + + + Canon Optura Xi + + https://live.staticflickr.com/cameras/2327_model_small_4adaf0cbba.jpg + https://live.staticflickr.com/cameras/2327_model_large_afb3324063.jpg + + + + Canon Elura 80 +
    + 2.5 +
    + + https://live.staticflickr.com/cameras/3699_model_small_44534ffb98.jpg + https://live.staticflickr.com/cameras/3699_model_large_c50d67a3b0.jpg + +
    + + Canon Elura 40 MC + + + Canon Elura 90 + + + Canon DC20 +
    + 2.5 +
    + + https://live.staticflickr.com/cameras/2706_model_small_c33b9358b4.jpg + https://live.staticflickr.com/cameras/2706_model_large_dc34c957f5.jpg + +
    + + Canon Optura 400 +
    + 2.5 +
    + + https://live.staticflickr.com/cameras/7708_model_small_6893d5c98d.jpg + https://live.staticflickr.com/cameras/7708_model_large_7046065dd5.jpg + +
    + + Canon Optura 50 +
    + 2.5 +
    + + https://live.staticflickr.com/cameras/2715_model_small_dc3a2c41df.jpg + https://live.staticflickr.com/cameras/2715_model_large_dcd9166601.jpg + +
    + + Canon DC100 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/2732_model_small_36ae667f4a.jpg + https://live.staticflickr.com/cameras/2732_model_large_068d35c572.jpg + +
    + + Canon Optura 30 + + + Canon ZR300 +
    + 2.4 +
    + + https://live.staticflickr.com/cameras/4573_model_small_cdec1cc747.jpg + https://live.staticflickr.com/cameras/4573_model_large_6603ffbb98.jpg + +
    + + Canon Optura 10 + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.cameras.getBrands.xml b/src/test/resources/payloads/get/flickr.cameras.getBrands.xml new file mode 100644 index 00000000..e1d60f1b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.cameras.getBrands.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.collections.getInfo.xml b/src/test/resources/payloads/get/flickr.collections.getInfo.xml new file mode 100644 index 00000000..cbe7b251 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.collections.getInfo.xml @@ -0,0 +1,21 @@ + + + + test + test description + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.collections.getTree.xml b/src/test/resources/payloads/get/flickr.collections.getTree.xml new file mode 100644 index 00000000..c594488d --- /dev/null +++ b/src/test/resources/payloads/get/flickr.collections.getTree.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.commons.getInstitutions.xml b/src/test/resources/payloads/get/flickr.commons.getInstitutions.xml new file mode 100644 index 00000000..caa2256e --- /dev/null +++ b/src/test/resources/payloads/get/flickr.commons.getInstitutions.xml @@ -0,0 +1,917 @@ + + + + + NavyMedicine + + https://www.med.navy.mil/Pages/default.aspx + https://www.flickr.com/people/navymedicine/ + http://flickr.com/photos/navymedicine/ + + + + Colección Amadeo León - Boconó + + fotoleonbocono.tumblr.com + https://fotoleonbocono.tumblr.com/post/174576043211/flickr-commons + http://flickr.com/photos/bocono/ + + + + Médiathèques Valence Romans agglomération + + http://mediatheques.valenceromans.fr + http://mediatheques.valenceromans.fr/patrimoine + http://flickr.com/photos/mediathequesvalenceromansagglo/ + + + + Halifax Municipal Archives + + http://www.halifax.ca/archives + https://www.halifax.ca/about-halifax/municipal-archives/services/copying-services + http://flickr.com/photos/halifaxarchives/ + + + + Armenian Studies Program, Fresno State + + http://www.fresnostate.edu/artshum/armenianstudies/ + http://www.fresnostate.edu/artshum/armenianstudies/library/index.html + http://flickr.com/photos/armenianstudies/ + + + + UC Berkeley, Department of Geography + + http://geography.berkeley.edu + http://geography.berkeley.edu/geography-at-berkeley-flickr-commons-site/ + http://flickr.com/photos/105662205@N04/ + + + + Liberas + + http://www.liberaalarchief.be/ + http://www.liberaalarchief.be/LiberaalArchief-NoKnownCopyrightRestrictions.pdf + http://flickr.com/photos/142575440@N02/ + + + + East Riding Archives + + http://www2.eastriding.gov.uk/leisure/archives-family-and-local-history/ + http://www2.eastriding.gov.uk/leisure/archives-family-and-local-history/using-our-service/ + http://flickr.com/photos/erarchives/ + + + + Camden Public Library (Maine) + + www.librarycamden.org + http://www.librarycamden.org/learn-research/walsh-history-center/photo-services/ + http://flickr.com/photos/cplmaine/ + + + + American Aviation Historical Society + + http://www.aahs-online.org + http://www.aahs-online.org/cc_notice.php + http://flickr.com/photos/aahs_archives/ + + + + TXSTATE Library Digital Collections + + http://exhibits.library.txstate.edu + http://www.library.txstate.edu/about/departments/dws/flickr-rights-statement + http://flickr.com/photos/txstate-library/ + + + + The Gallen-Kallela Museum + + www.gallen-kallela.fi + http://www.gallen-kallela.fi/en/kokoelmat/the-gallen-kallela-museum-participates-in-the-flickr-commons/ + http://flickr.com/photos/gallen-kallelanmuseo/ + + + + sinaloaarchivohistorico + + http://ahgs.gob.mx/ + http://ahgs.gob.mx/servicios-digitales/archivo-fotografico/ + http://flickr.com/photos/99115493@N08/ + + + + Presidency Of The Republic Of Turkey Directorate o + + http://www.byegm.gov.tr/english + http://www.byegm.gov.tr/turkce/rightsstatement + http://flickr.com/photos/dgpi/ + + + + Regionaal Archief Alkmaar Commons + + www.archiefalkmaar.nl + https://www.regionaalarchiefalkmaar.nl/api-english + http://flickr.com/photos/public-domain-archief-alkmaar/ + + + + UVicLibraries + + http://www.uvic.ca/library/ + http://www.uvic.ca/library/featured/collections/disclaimer-flickr.php + http://flickr.com/photos/128520551@N04/ + + + + Congregation of Sisters of St. Joseph in Canada + + http://www.csjcanada.org/csj-archives + http://www.csjcanada.org/csj-archives + http://flickr.com/photos/csj_canada_archives/ + + + + VCU Libraries Commons + + http://www.library.vcu.edu/ + http://www.library.vcu.edu/about/policies/copyright-privacy/#flickr-policy + http://flickr.com/photos/vcucommons/ + + + + Vestfoldmuseene | Vestfold Museums + + www.vestfoldmuseene.no + http://vestfoldmuseene.no/flickr_commons/ + http://flickr.com/photos/vestfoldmuseene/ + + + + Aalto University Library and Archive Commons + + http://www.aalto.fi/en/ + http://lib.aalto.fi/en/materials/images/ + http://flickr.com/photos/aaltocommons/ + + + + Senado Federal do Brasil + + http://www12.senado.gov.br/noticias + http://www12.senado.gov.br/noticias/arquivo-de-imagens-no-flickr-commons + http://flickr.com/photos/senadothecommons/ + + + + Huron County Museum & Historic Gaol + + http://huroncounty.ca/museum/ + http://huroncounty.ca/museum/online_collections.php + http://flickr.com/photos/huroncountymuseum/ + + + + Archives of the Finnish Broadcasting Company Yle + + www.yle.fi (in Finnish) or http://yle.fi/yleisradio/about-yle/this-is-yle (in English) + http://yle.fi/yleisradio/about-yle/yle-sales/yle-archives-flickr + http://flickr.com/photos/ylearkisto/ + + + + National Library of Medicine - History of Medicine + + http://www.nlm.nih.gov/ + http://www.nlm.nih.gov/hmd/collections/photos/flickr.html + http://flickr.com/photos/nlmhmd/ + + + + The Graduate Institute, Geneva + + http://graduateinstitute.ch/home/research/library.html + http://graduateinstitute.ch/fr/home/research/library/archives/boris-souvarine.html + http://flickr.com/photos/graduateinstitute_library/ + + + + Université de Caen Normandie + + www.unicaen.fr + http://scd.unicaen.fr/flickr-commons/rights-statement-designation-juridique/ + http://flickr.com/photos/universite_caen/ + + + + Faculty of Music, Trinity Laban + + www.trinitylaban.ac.uk/jerwoodlibrary + http://www.trinitylaban.ac.uk/student-experience/facilities/faculty-music/jerwood-library/collections-resources/archives-and + http://flickr.com/photos/jerwoodtcm/ + + + + Internet Archive Book Images + + http://archive.org + https://archive.org/about/terms.php + http://flickr.com/photos/internetarchivebookimages/ + + + + Cloyne & District Historical Society + + www.cloynepioneermuseum.ca + http://pioneer.mazinaw.on.ca/flickr_statement.php + http://flickr.com/photos/cdhs/ + + + + tyrrellhistoricallibrary + + http://www.beaumontlibrary.org/tyrrell_historical_library.htm + http://cdm16058.contentdm.oclc.org/ui/custom/default/collection/default/resources/custompages/policies/FlickrCommons.html + http://flickr.com/photos/124327652@N02/ + + + + Preus museum + + www.preusmuseum.no + http://www.preusmuseum.no/Discover-the-Collections/Photographic-Collection/Flickr-The-Commons + http://flickr.com/photos/preusmuseum/ + + + + Local History & Archives, Hamilton Public Library + + www.hpl.ca + http://www.hpl.ca/articles/use-images + http://flickr.com/photos/hpllocalhistory/ + + + + UBC Library Digitization Centre + + http://diginit.library.ubc.ca/ + http://digitalcollections.library.ubc.ca/cdm/about + http://flickr.com/photos/ubclibrary_digicentre/ + + + + SALT Research + + http://saltonline.org/en/anasayfa + https://archives.saltresearch.org/salt/info_rights.jsp + http://flickr.com/photos/saltonline/ + + + + Tasmanian Archives and State Library (Commons) + + http://www.linc.tas.gov.au/tasmaniasheritage + http://www.linc.tas.gov.au/tasmaniasheritage/browse/pictorial/flickr-commons + http://flickr.com/photos/107895189@N03/ + + + + The Finnish Museum of Photography + + http://www.valokuvataiteenmuseo.fi/ + http://www.valokuvataiteenmuseo.fi/en/information-en/the-terms-of-use-of-the-images#images-on-flickr-commons + http://flickr.com/photos/valokuvataiteenmuseo/ + + + + Library Company of Philadelphia + + http://www.librarycompany.org/ + http://www.librarycompany.org/collections/rightsrepro/rr_digitalresources.htm + http://flickr.com/photos/library-company-of-philadelphia/ + + + + Provincial Archives of Alberta + + http://culture.alberta.ca/paa/default.aspx + http://culture.alberta.ca/paa/about/flickr.aspx + http://flickr.com/photos/alberta_archives/ + + + + Miami U. Libraries - Digital Collections + + http://www.lib.miamioh.edu + http://www.lib.miamioh.edu/digital-collections-flickr-rights-statement + http://flickr.com/photos/muohio_digital_collections/ + + + + The British Library + + www.bl.uk + http://www.bl.uk/aboutus/terms/copyright/index.html + http://flickr.com/photos/britishlibrary/ + + + + Costică Acsinte Archive + + http://colectiacosticaacsinte.eu/ + http://colectiacosticaacsinte.eu/ + http://flickr.com/photos/costicaacsinte/ + + + + Vancouver Public Library Historical Photographs + + http://www.vpl.ca + https://www.vpl.ca/find/cat/C393/C393 + http://flickr.com/photos/99915476@N04/ + + + + National Library of Norway + + http://www.nb.no + http://www.nb.no/Kontakt/Kontakt/Sosiale-medier/Flickr-Commons-No-known-copyright-restrictions + http://flickr.com/photos/national_library_of_norway/ + + + + Royal Australian Historical Society + + http://www.rahs.org.au/ + http://www.rahs.org.au/about-rahs/rahs-copyright-statement/ + http://flickr.com/photos/royalaustralianhistoricalsociety/ + + + + Fotoarkivet NTM + + www.tekniskmuseum.no / www.dextraphoto.no + http://dextraphoto.photodeck.com/about + http://flickr.com/photos/dextraphoto/ + + + + California Historical Society Digital Collection + + http://www.californiahistoricalsociety.org/ + http://www.californiahistoricalsociety.org/research/flickr.html + http://flickr.com/photos/chs_commons/ + + + + Schlesinger Library, RIAS, Harvard University + + http://www.radcliffe.harvard.edu/schlesinger-library + http://www.radcliffe.harvard.edu/schlesinger-library/permission-publish + http://flickr.com/photos/schlesinger_library/ + + + + National Museum of Denmark + + http://natmus.dk/ + http://natmus.dk/en/forsknings-og-formidlingsafdelingen/center-for-strategi-kommunikation-og-administration/rights-statement-the-commons-on-flickr/ + http://flickr.com/photos/thenationalmuseumofdenmark/ + + + + Svenska litteratursällskapet i Finland + + www.sls.fi + http://www.sls.fi/doc.php?category=2&language=eng + http://flickr.com/photos/slsarkiva/ + + + + National Archives of Estonia + + http://www.ra.ee/ + http://www.ra.ee/en/flickr-commons/ + http://flickr.com/photos/national_archives_of_estonia/ + + + + Het Nieuwe Instituut - Architecture Collection + + http://www.thenewinstitute.nl + http://www.hetnieuweinstituut.nl/en/page/flickr-commons-rights-statement + http://flickr.com/photos/nai_collection/ + + + + Dundas Museum and Archives + + www.dundasmuseum.ca + http://www.dundasmuseum.ca/photographs.php + http://flickr.com/photos/dundasmuseum/ + + + + UL Digital Library + + http://www.ul.ie/~library + http://www2.ul.ie/web/WWW/Services/Library/Digital_Library + http://flickr.com/photos/ul_digital_library/ + + + + Mennonite Church USA Archives + + http://www.mennoniteusa.org/executive-board/archives/ + http://www.mennoniteusa.org/executive-board/archives/archives-about/archives-about-policies/archives-about-policies-copyright/ + http://flickr.com/photos/mennonitechurchusa-archives/ + + + + Archives of the Law Society of Ontario + + http://www.lsuc.on.ca/PDC/Archives/Overview-of-the-Archives/ + http://www.lsuc.on.ca/PDC/Archives/Archives-Collection/ + http://flickr.com/photos/lsuc_archives/ + + + + NSW State Archives and Records + + http://www.records.nsw.gov.au/ + http://www.records.nsw.gov.au/about-us/rights-and-permissions + http://flickr.com/photos/state-records-nsw/ + + + + Nova Scotia Archives + + gov.ns.ca/nsarm + http://novascotia.ca/archives/useimages.asp + http://flickr.com/photos/nsarchives/ + + + + Public Record Office of Northern Ireland + + www.proni.gov.uk + http://www.proni.gov.uk/index/search_the_archives/pronionflickr.htm + http://flickr.com/photos/proni/ + + + + Deseronto Archives + + http://deserontoarchives.wordpress.com + http://deserontoarchives.wordpress.com/collections/ + http://flickr.com/photos/deserontoarchives/ + + + + Stockholm Transport Museum Commons + + www.sparvagsmuseet.sl.se + http://sparvagsmuseet.sl.se/stockholms-transport-museum-om-flickr-commons/ + http://flickr.com/photos/stockholmtransportmuseum_commons/ + + + + National Library of Australia Commons + + www.nla.gov.au + http://www.nla.gov.au/flickr-commons-copyright + http://flickr.com/photos/national_library_of_australia_commons/ + + + + Riksarkivet (National Archives of Norway) + + http://www.arkivverket.no/ + http://www.arkivverket.no/eng/content/view/full/9266 + http://flickr.com/photos/national_archives_of_norway/ + + + + Royal Danish Library + + www.kb.dk + http://www.kb.dk/en/kb/copyright/index.html + http://flickr.com/photos/departmentofmapsprintsandphotographstheroyallibrarydenmark/ + + + + Museum of Photographic Arts Collections + + www.mopa.org + http://www.mopa.org/content/museum-photographic-arts-flickr-commons + http://flickr.com/photos/mopa1/ + + + + National Library of Ireland on The Commons + + http://www.nli.ie/en/homepage.aspx + http://www.nli.ie/en/flickr-commons.aspx + http://flickr.com/photos/nlireland/ + + + + Tyne & Wear Archives & Museums + + http://www.twmuseums.org.uk/ + http://www.twmuseums.org.uk/usingimagesfromflickr/ + http://flickr.com/photos/twm_news/ + + + + San Diego Air & Space Museum Archives + + http://sandiegoairandspace.org/ + http://sandiegoairandspace.org/collections/collection_index.php?id=3 + http://flickr.com/photos/sdasmarchives/ + + + + Museum of Hartlepool + + http://www.destinationhartlepool.com + http://www.hartlepool.gov.uk/info/100009/leisure_and_culture/1533/collections/1 + http://flickr.com/photos/hartlepool_museum/ + + + + Woodrow Wilson Presidential Library Archives + + www.woodrowwilson.org + http://woodrowwilson.org/index.php/library-a-archives/research + http://flickr.com/photos/wwplarchives/ + + + + NASA on The Commons + + http://www.nasa.gov/ + http://www.nasa.gov/audience/formedia/features/MP_Photo_Guidelines.html + http://flickr.com/photos/nasacommons/ + + + + National Library of Scotland + + http://www.nls.uk/ + http://www.nls.uk/copyright/index.html + http://flickr.com/photos/nlscotland/ + + + + Ljósmyndasafn Reykjavíkur / Reykjavík Museum of + + www.photomuseum.is + http://ljosmyndasafnreykjavikur.is/english/information.html + http://flickr.com/photos/reykjavikmuseumofphotography/ + + + + Keene and Cheshire County (NH) Historical Photos + + http://www.ci.keene.nh.us/library/ and http://www.hsccnh.org/ + http://keenepubliclibrary.org/library/commons-rights-statement + http://flickr.com/photos/keenepubliclibrary/ + + + + Fylkesarkivet i Vestland + + http://fylkesarkiv.no + http://www.fylkesarkiv.no/en/side/flickr-commons + http://flickr.com/photos/fylkesarkiv/ + + + + Cornell University Library + + http://www.library.cornell.edu/ + http://hdl.handle.net/1813.001/62pk + http://flickr.com/photos/cornelluniversitylibrary/ + + + + Australian National Maritime Museum on The Commons + + http://www.anmm.gov.au/ + http://www.anmm.gov.au/site/page.cfm?u=1657 + http://flickr.com/photos/anmm_thecommons/ + + + + SMU Libraries Digital Collections + + http://smu.edu/cul/ + http://digitalcollections.smu.edu/all/cul/flickr/ + http://flickr.com/photos/smu_cul_digitalcollections/ + + + + Texas State Archives + + http://www.tsl.state.tx.us + http://www.tsl.state.tx.us/exhibits/ccc_flickr.html + http://flickr.com/photos/texasstatearchives/ + + + + Center for Jewish History, NYC + + www.cjh.org + http://www.cjh.org/collections/copyright.php + http://flickr.com/photos/center_for_jewish_history/ + + + + UA Archives | Upper Arlington History + + http://www.uaarchives.org + http://www.uaarchives.org/commons.htm + http://flickr.com/photos/uaarchives/ + + + + Jewish Historical Society of the Upper Midwest + + http://www.jhsum.org/ + http://www.jhsum.org/collections/copyright/ + http://flickr.com/photos/jhsum-commons/ + + + + The National Archives UK + + http://www.nationalarchives.gov.uk/ + http://www.nationalarchives.gov.uk/legal/copyright/creative-commons-and-photo-sharing/ + http://flickr.com/photos/nationalarchives/ + + + + UW Digital Collections + + http://content.lib.washington.edu/index.html + http://content.lib.washington.edu/FlickrCommons.html + http://flickr.com/photos/uw_digital_images/ + + + + The U.S. National Archives + + http://www.archives.gov/ + http://www.archives.gov/social-media/flickr-faqs.html#9 + http://flickr.com/photos/usnationalarchives/ + + + + Bergen Public Library + + http://nettbiblioteket.no/ + http://nettbiblioteket.no/biblioteksinformasjon/flickr-commons.html + http://flickr.com/photos/bergen_public_library/ + + + + LSE Library + + http://www2.lse.ac.uk/library/Home.aspx + http://www2.lse.ac.uk/library/archive/flickr_rights_statement.aspx + http://flickr.com/photos/lselibrary/ + + + + JWA Commons + + http://jwa.org/ + http://jwa.org/exhibits/ww2/flickrcommons + http://flickr.com/photos/jwacommons/ + + + + Galt Museum & Archives on The Commons + + http://www.galtmuseum.com/ + http://www.galtmuseum.com/copyright.htm + http://flickr.com/photos/galt-museum/ + + + + Getty Research Institute + + http://www.getty.edu/ + http://www.getty.edu/legal/copyright.html#flickr + http://flickr.com/photos/gettyresearchinstitute/ + + + + LlGC ~ NLW + + http://www.llgc.org.uk/ + http://www.llgc.org.uk/index.php?id=publicationrights#Flickr + http://flickr.com/photos/llgc/ + + + + The Field Museum Library + + http://www.fieldmuseum.org/ + http://www.fieldmuseum.org/research_collections/library/library_sites/photo_archives/flickr.htm + http://flickr.com/photos/field_museum_library/ + + + + DC Public Library Commons + + http://www.dclibrarylabs.org/ + http://dclibrarylabs.org/projects/flickr-commons/ + http://flickr.com/photos/dcplcommons/ + + + + Swedish National Heritage Board + + http://www.kms.raa.se/cocoon/bild/public_search.html + http://www.kms.raa.se/cocoon/bild/about.html + http://flickr.com/photos/swedish_heritage_board/ + + + + nha.library + + http://www.nha.org/ + http://www.nha.org/library/copyright-flickr.html + http://flickr.com/photos/nantuckethistoricalassociation/ + + + + OSU Special Collections & Archives : Commons + + http://osulibrary.oregonstate.edu/archives/ + http://osulibrary.oregonstate.edu/archives/FlickrCommonsNoKnownCopyrightsRestrictions.html + http://flickr.com/photos/osucommons/ + + + + State Library and Archives of Florida + + http://www.floridamemory.com/ + http://floridamemory.com/disclaimer/disclaimer-flickr.php + http://flickr.com/photos/floridamemory/ + + + + State Library of Queensland, Australia + + http://www.slq.qld.gov.au + http://www.slq.qld.gov.au/home/copyright/#flickr + http://flickr.com/photos/statelibraryqueensland/ + + + + National Galleries of Scotland Commons + + http://www.nationalgalleries.org/ + http://www.nationalgalleries.org/aboutus/article/1:4946/295 + http://flickr.com/photos/nationalgalleries/ + + + + New York Public Library + + http://nypl.org + http://www.nypl.org/legal/flickr.cfm + http://flickr.com/photos/nypl/ + + + + National Library NZ on The Commons + + http://www.natlib.govt.nz/ + http://natlib.govt.nz/about-this-site/copyright-and-privacy/reusing-objects-from-this-site + http://flickr.com/photos/nationallibrarynz_commons/ + + + + IWM Collections + + http://www.iwm.org.uk + http://www.iwm.org.uk/corporate/privacy-copyright/licence + http://flickr.com/photos/imperialwarmuseum/ + + + + Australian War Memorial collection + + http://www.awm.gov.au/ + http://www.awm.gov.au/about/copyright/index.asp + http://flickr.com/photos/australian-war-memorial/ + + + + Nationaal Archief + + http://www.nationaalarchief.nl/ + http://beeldbank.nationaalarchief.nl/index.php?option=com_memorix&mrx_mod=content&mrx_item=auteursrechten + http://flickr.com/photos/nationaalarchief/ + + + + Musée McCord Museum + + http://www.mccord-museum.qc.ca/ + http://www.mccord-museum.qc.ca/en/copyright.html#noknowncopyright + http://flickr.com/photos/museemccordmuseum/ + + + + The Library of Virginia + + http://www.lva.virginia.gov/ + http://www.lva.virginia.gov/copyright.htm + http://flickr.com/photos/library_of_virginia/ + + + + State Library of New South Wales collection + + http://www.sl.nsw.gov.au/ + http://www.sl.nsw.gov.au/about/policies/copyright.html + http://flickr.com/photos/statelibraryofnsw/ + + + + Royal Museums Greenwich + + http://www.nmm.ac.uk/ + http://www.nmm.ac.uk/copyright + http://flickr.com/photos/nationalmaritimemuseum/ + + + + National Science and Media Museum + + http://www.nmsi.ac.uk + http://www.nationalmediamuseum.org.uk/Photography/copyright.asp + http://flickr.com/photos/nationalmediamuseum/ + + + + Biblioteca de Arte-Fundação Calouste Gulbenkian + + http://www.biblarte.gulbenkian.pt/ + http://www.biblarte.gulbenkian.pt/content.asp?cod=servico_leitura&menu=servicos&parent=servicos&lang=en + http://flickr.com/photos/biblarte/ + + + + George Eastman Museum + + http://www.eastmanhouse.org/ + http://www.eastmanhouse.org/flickr/statement.php + http://flickr.com/photos/george_eastman_house/ + + + + bibliothequedetoulouse + + http://www.bm-toulouse.fr/ + http://www.bibliothequedetoulouse.fr/fr/catalogues/02-mentions_legales.jsp + http://flickr.com/photos/bibliothequedetoulouse/ + + + + Smithsonian Institution + + http://www.si.edu/ + http://www.si.edu/copyright/ + http://flickr.com/photos/smithsonian/ + + + + Powerhouse Museum Collection + + http://www.powerhousemuseum.com/ + http://www.powerhousemuseum.com/imageservices/?page_id=157 + http://flickr.com/photos/powerhouse_museum/ + + + + The Library of Congress + + http://www.loc.gov/ + http://www.loc.gov/rr/print/195_copr.html#noknown + http://flickr.com/photos/library_of_congress/ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.contacts.getList.xml b/src/test/resources/payloads/get/flickr.contacts.getList.xml new file mode 100644 index 00000000..3387c65c --- /dev/null +++ b/src/test/resources/payloads/get/flickr.contacts.getList.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.contacts.getPublicList.xml b/src/test/resources/payloads/get/flickr.contacts.getPublicList.xml new file mode 100644 index 00000000..9d6c1264 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.contacts.getPublicList.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.favorites.getList.xml b/src/test/resources/payloads/get/flickr.favorites.getList.xml new file mode 100644 index 00000000..6a84b572 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.favorites.getList.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.favorites.getPublicList.xml b/src/test/resources/payloads/get/flickr.favorites.getPublicList.xml new file mode 100644 index 00000000..244f1f64 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.favorites.getPublicList.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.groups.getInfo.xml b/src/test/resources/payloads/get/flickr.groups.getInfo.xml new file mode 100644 index 00000000..e132b59d --- /dev/null +++ b/src/test/resources/payloads/get/flickr.groups.getInfo.xml @@ -0,0 +1,43 @@ + + + + FlickrCentral + <b>Welcome to FlickrCentral!</b> +Just like Grand Central but without the oyster bar, the trains, New York city... + +FlickrCentral is a place for the newbies to get a taste of what Flickr is about, and a place for the more experienced users to keep a finger on the pulse of our favorite addiction. This group is for viewing Flickr from high above - <i>a place for posts on things that are about Flickr or would interest MOST flickrites.</i> + +We adhere to Flickr's <a href="http://www.flickr.com/groups_guidelines.gne">Group Guidelines</a> and <a href="http://www.flickr.com/guidelines.gne">Community Guidelines</a>. + +<b>This is a moderated group.</b> The moderators retain the right to delete (or lock as appropriate) threads and comments that do not follow these rules, guidelines or are perceived to be abusive, redundant, self-promotional/commercial or not leading to novel discussion. + + + - Be polite: Do not fingerpoint, shame, nor attack personally other flickr members. + +- Please use the search tools (<a href="http://www.flickr.com/search/groups/?w=34427469792@N01&amp;q=">FlickrCentral discussions</a>, <a href="http://www.flickr.com/search/groups/?q=">group search</a>) before posting a new topic. + +- Photos added to group discussions must be of &quot;small&quot; size, or smaller. + +- Photos added to the group pool must be 'Kid Friendly' and 'Safe For Workplaces'. + +- <b>If you wish to say 'Hello!':</b> +Please do not create threads to introduce yourself, or to ask for views, comments or votes <b>(this includes any 'game' threads for this purpose too)</b>, but instead look at the following threads and post there: +<a href="http://www.flickr.com/groups/central/discuss/72157627531743181//lastpage">Introduce Yourself</a>. +<a href="http://www.flickr.com/groups/central/discuss/72157627531749025/lastpage">Announce a New Group</a>. +<a href="http://www.flickr.com/groups/central/discuss/72157605807256126/">Suggest content for the FlickrBlog</a>. +<a href="http://www.flickr.com/groups/central/discuss/98246/">Announce exhibits and shows featuring flickr members</a>. + +To clarify - if you start a thread that includes your own image as a means to promote traffic, or even that encourages traffic as a byproduct, it will be deleted. If your thread cannot stand on it's own without an image from your stream being included, then it is sufficiently self-promotional to fall foul of this rule. By all means discuss all things photography, but the discussion itself should be of more importance than using an image to demonstrate it. + + 313872 + 8808003 + 12810 + 3 + + 2004-02-05 22:15:10 + 1620054938 + Due to the volume of pictures in the pool and it's constant bashing up against the size limit, I have changed the limit to be 25 photos TOTAL in the pool from any user. So if you want to add new stuff, you need to remove your oldest stuff first! + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.groups.members.getList.xml b/src/test/resources/payloads/get/flickr.groups.members.getList.xml new file mode 100644 index 00000000..60005481 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.groups.members.getList.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.groups.pools.getContext.xml b/src/test/resources/payloads/get/flickr.groups.pools.getContext.xml new file mode 100644 index 00000000..365887df --- /dev/null +++ b/src/test/resources/payloads/get/flickr.groups.pools.getContext.xml @@ -0,0 +1,6 @@ + + +1 + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.groups.pools.getGroups.xml b/src/test/resources/payloads/get/flickr.groups.pools.getGroups.xml new file mode 100644 index 00000000..347eee51 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.groups.pools.getGroups.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.groups.pools.getPhotos.xml b/src/test/resources/payloads/get/flickr.groups.pools.getPhotos.xml new file mode 100644 index 00000000..da590019 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.groups.pools.getPhotos.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.groups.search.xml b/src/test/resources/payloads/get/flickr.groups.search.xml new file mode 100644 index 00000000..ef753482 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.groups.search.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.interestingness.getList.xml b/src/test/resources/payloads/get/flickr.interestingness.getList.xml new file mode 100644 index 00000000..19ff1469 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.interestingness.getList.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.machinetags.getNamespaces.xml b/src/test/resources/payloads/get/flickr.machinetags.getNamespaces.xml new file mode 100644 index 00000000..9afdaee5 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.machinetags.getNamespaces.xml @@ -0,0 +1,21 @@ + + + + cameratoss + camertoss + commons + content + diptych + experimentcameratoss + fc + getty + gravitygroup + image + jds + jp2br + labels + pfo + thegardens + wrh + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.machinetags.getPairs.xml b/src/test/resources/payloads/get/flickr.machinetags.getPairs.xml new file mode 100644 index 00000000..a2c9c895 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.machinetags.getPairs.xml @@ -0,0 +1,19 @@ + + + + ceramics:artist + ceramics:date + ceramics:dateadded + ceramics:depth + ceramics:glazing + ceramics:height + ceramics:length + ceramics:material + ceramics:object_type + ceramics:series_title + ceramics:technique + ceramics:temperature + ceramics:title + ceramics:width + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.machinetags.getPredicates.xml b/src/test/resources/payloads/get/flickr.machinetags.getPredicates.xml new file mode 100644 index 00000000..1593258e --- /dev/null +++ b/src/test/resources/payloads/get/flickr.machinetags.getPredicates.xml @@ -0,0 +1,15 @@ + + + + age + all + flickrprivacy + flickrsafesearch + groups + location + privacy + projects + realestate + safesearch + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml b/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml new file mode 100644 index 00000000..d5b6c52a --- /dev/null +++ b/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml @@ -0,0 +1,505 @@ + + + + 11655 + 9089 + 12753 + 12072 + 12752 + 12666 + 12751 + 12750 + 10119 + 12739 + 12435 + 12749 + 12235 + 11982 + 12748 + 12041 + 12747 + 7309 + 12746 + 12745 + 12736 + 12730 + 6986 + 12744 + 12743 + 12742 + 12741 + 12737 + 12740 + 12738 + 12362 + 9712 + 8209 + 12315 + 12735 + 12734 + 6275 + 12314 + 12732 + 12733 + 12731 + 12729 + 5488 + 5477 + 5596 + 5585 + 12728 + 12726 + 12727 + 9504 + 12712 + 12725 + 12724 + 12723 + 12722 + 12721 + 12720 + 12719 + 12718 + 12717 + 12716 + 12715 + 12714 + 12713 + 12701 + 11724 + 11725 + 10301 + 6390 + 6335 + 5145 + 5112 + 12711 + 12710 + 12709 + 12708 + 5321 + 5277 + 12707 + 12705 + 7606 + 7584 + 12700 + 7221 + 7188 + 5057 + 5035 + 7903 + 7892 + 12706 + 7111 + 7089 + 5651 + 6102 + 6091 + 7870 + 7848 + 7243 + 7232 + 5400 + 5378 + 5717 + 5640 + 11469 + 12196 + 12704 + 7364 + 7331 + 5719 + 5730 + 12696 + 7565 + 12702 + 12699 + 7329 + 12693 + 12692 + 12688 + 12606 + 12690 + 9128 + 12689 + 12686 + 12685 + 12684 + 12682 + 12680 + 12679 + 12658 + 12678 + 12677 + 9298 + 12675 + 12674 + 12578 + 12670 + 12669 + 12668 + 12667 + 12662 + 12665 + 12664 + 12663 + 12661 + 8332 + 12316 + 12660 + 12659 + 7514 + 12654 + 12633 + 10856 + 12657 + 12656 + 12655 + 12460 + 12653 + 12652 + 12651 + 12650 + 12649 + 12648 + 12647 + 5871 + 12646 + 12644 + 12638 + 12643 + 12641 + 12367 + 12640 + 11614 + 12639 + 12610 + 12637 + 11634 + 12634 + 12631 + 11869 + 10290 + 12371 + 8174 + 12629 + 12628 + 12627 + 12626 + 12372 + 11315 + 12600 + 12623 + 11964 + 12621 + 12620 + 6354 + 6277 + 12608 + 12619 + 12481 + 12618 + 12617 + 12616 + 6278 + 6276 + 12615 + 12614 + 12613 + 12612 + 8031 + 12605 + 12603 + 12602 + 12587 + 8256 + 9503 + 7100 + 7067 + 12598 + 12594 + 12593 + 12591 + 12574 + 12588 + 7795 + 12573 + 12582 + 5205 + 12581 + 9511 + 12425 + 12317 + 12579 + 12577 + 12576 + 12575 + 11659 + 12572 + 12569 + 12345 + 12568 + 12567 + 12566 + 6280 + 12565 + 12564 + 11767 + 12561 + 12563 + 12562 + 12559 + 12560 + 12226 + 12173 + 12557 + 12556 + 12554 + 12553 + 12552 + 12551 + 12549 + 12550 + 12272 + 12547 + 12400 + 12546 + 12545 + 12544 + 11772 + 12542 + 11142 + 7920 + 12543 + 8211 + 12432 + 12541 + 12538 + 6510 + 12540 + 6279 + 11611 + 12537 + 12536 + 12535 + 12534 + 12533 + 12532 + 12531 + 12530 + 8040 + 9388 + 12528 + 12527 + 12526 + 12525 + 12524 + 11954 + 10509 + 11552 + 10506 + 12517 + 12523 + 12522 + 11020 + 12521 + 12520 + 12519 + 7459 + 7426 + 12403 + 12518 + 12494 + 12497 + 12516 + 12515 + 12514 + 12513 + 12512 + 11892 + 12509 + 12506 + 12508 + 12502 + 12505 + 7609 + 10875 + 12398 + 12504 + 12501 + 12500 + 12499 + 12498 + 12496 + 12495 + 12492 + 12491 + 12490 + 12303 + 12489 + 12484 + 12488 + 12487 + 12483 + 12486 + 10555 + 12485 + 12480 + 12479 + 11313 + 12478 + 12477 + 12476 + 12475 + 12473 + 12472 + 12470 + 12469 + 12434 + 12468 + 12467 + 12466 + 11432 + 12263 + 12465 + 12462 + 12464 + 12461 + 12457 + 10291 + 11360 + 12459 + 12450 + 11087 + 10312 + 12262 + 12456 + 12455 + 12454 + 12453 + 10716 + 12452 + 12451 + 12447 + 10862 + 10840 + 6936 + 10266 + 12445 + 10035 + 10476 + 12443 + 12326 + 10974 + 11394 + 12442 + 6282 + 12441 + 12440 + 12439 + 12438 + 12327 + 12430 + 12436 + 12429 + 12431 + 6283 + 6472 + 12426 + 12428 + 12424 + 5773 + 12207 + 6890 + 10719 + 10809 + 10688 + 12417 + 12423 + 12422 + 11192 + 12420 + 6965 + 12419 + 12418 + 9898 + 6284 + 12416 + 12413 + 12415 + 12412 + 12397 + 12411 + 12410 + 12392 + 11461 + 11719 + 10363 + 12409 + 9142 + 12401 + 12408 + 12319 + 12407 + 12406 + 12405 + 8324 + 12277 + 12404 + 11673 + 12402 + 12360 + 12399 + 12396 + 12395 + 12394 + 12393 + 12376 + 12391 + 12390 + 10055 + 12389 + 12388 + 12387 + 12384 + 12383 + 12382 + 12381 + 12380 + 12334 + 12379 + 12378 + 12377 + 12375 + 12374 + 12370 + 12369 + 12368 + 12363 + 12366 + 12365 + 12364 + 11513 + 12361 + 12358 + 12359 + 12357 + 12356 + 12355 + 12354 + 12353 + 12352 + 12197 + 12331 + 12117 + 12349 + 12348 + 12346 + 12344 + 12343 + 12308 + 12309 + 12310 + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.machinetags.getValues.xml b/src/test/resources/payloads/get/flickr.machinetags.getValues.xml new file mode 100644 index 00000000..e69f2f51 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.machinetags.getValues.xml @@ -0,0 +1,61 @@ + + + + _wood + bag + black_clay + booy + boy + boys + bus + camera + cast_iron + charcoal + chocolate + clay_and_brick + clover + counter + cyrus + dfgdfg + dfggdf + digital_image + dog + earthenware + flower + fruit + fur + glass + glaze + grass + grass_hill + hiking + hill + human_flesh + kiln_cast_glass + kiln-cast_glass + leather_pillow + limoges_porcelain + marley + mixed_media + mn + nature + none, + nylon_flocking + other + paint + porcelain + porcelain_slip + puppy + resin + royal_copenhagen_porcelain + silver_leaf + slipware + small_child + stoneware + t_material + table + terra_cotta + trails + wood + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.panda.getList.xml b/src/test/resources/payloads/get/flickr.panda.getList.xml new file mode 100644 index 00000000..05cc9bda --- /dev/null +++ b/src/test/resources/payloads/get/flickr.panda.getList.xml @@ -0,0 +1,8 @@ + + + + ling ling + hsing hsing + wang wang + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.panda.getPhotos.xml b/src/test/resources/payloads/get/flickr.panda.getPhotos.xml new file mode 100644 index 00000000..928b2b93 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.panda.getPhotos.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.people.findByEmail.xml b/src/test/resources/payloads/get/flickr.people.findByEmail.xml new file mode 100644 index 00000000..012e50ef --- /dev/null +++ b/src/test/resources/payloads/get/flickr.people.findByEmail.xml @@ -0,0 +1,6 @@ + + + + boncey_test + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.people.findByUsername.xml b/src/test/resources/payloads/get/flickr.people.findByUsername.xml new file mode 100644 index 00000000..012e50ef --- /dev/null +++ b/src/test/resources/payloads/get/flickr.people.findByUsername.xml @@ -0,0 +1,6 @@ + + + + boncey_test + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.people.getGroups.xml b/src/test/resources/payloads/get/flickr.people.getGroups.xml new file mode 100644 index 00000000..a70c9032 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.people.getGroups.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.people.getInfo.xml b/src/test/resources/payloads/get/flickr.people.getInfo.xml new file mode 100644 index 00000000..25a1eff4 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.people.getInfo.xml @@ -0,0 +1,20 @@ + + + + boncey_test + Darren Greaves + a35471fa063d334a497c1ad805a0bbf4d1f77641 + London, England + + I am <a href="https://flickr.com/photos/boncey">boncey</a>'s test account. + https://www.flickr.com/photos/boncey_test/ + https://www.flickr.com/people/boncey_test/ + https://m.flickr.com/photostream.gne?id=24541304 + + 2009-12-07 14:28:39 + 1260224919 + 100 + 106 + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.people.getPhotos.xml b/src/test/resources/payloads/get/flickr.people.getPhotos.xml new file mode 100644 index 00000000..1ebeccec --- /dev/null +++ b/src/test/resources/payloads/get/flickr.people.getPhotos.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.people.getPhotosOf.xml b/src/test/resources/payloads/get/flickr.people.getPhotosOf.xml new file mode 100644 index 00000000..06cd15ae --- /dev/null +++ b/src/test/resources/payloads/get/flickr.people.getPhotosOf.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.people.getPublicGroups.xml b/src/test/resources/payloads/get/flickr.people.getPublicGroups.xml new file mode 100644 index 00000000..1bba3577 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.people.getPublicGroups.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.people.getPublicPhotos.xml b/src/test/resources/payloads/get/flickr.people.getPublicPhotos.xml new file mode 100644 index 00000000..b44c0b1e --- /dev/null +++ b/src/test/resources/payloads/get/flickr.people.getPublicPhotos.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.people.getUploadStatus.xml b/src/test/resources/payloads/get/flickr.people.getUploadStatus.xml new file mode 100644 index 00000000..d01bda7f --- /dev/null +++ b/src/test/resources/payloads/get/flickr.people.getUploadStatus.xml @@ -0,0 +1,11 @@ + + + + boncey_test + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.comments.getList.xml b/src/test/resources/payloads/get/flickr.photos.comments.getList.xml new file mode 100644 index 00000000..61a630f6 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.comments.getList.xml @@ -0,0 +1,6 @@ + + + + This looks familiar + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.geo.getLocation.xml b/src/test/resources/payloads/get/flickr.photos.geo.getLocation.xml new file mode 100644 index 00000000..7359438b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.geo.getLocation.xml @@ -0,0 +1,11 @@ + + + + + Daḩl Hīt + + Ar Riyāḑ + Saudi Arabia + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.geo.getPerms.xml b/src/test/resources/payloads/get/flickr.photos.geo.getPerms.xml new file mode 100644 index 00000000..2618c241 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.geo.getPerms.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getContactsPhotos.xml b/src/test/resources/payloads/get/flickr.photos.getContactsPhotos.xml new file mode 100644 index 00000000..02641278 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getContactsPhotos.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getContactsPublicPhotos.xml b/src/test/resources/payloads/get/flickr.photos.getContactsPublicPhotos.xml new file mode 100644 index 00000000..ac297d56 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getContactsPublicPhotos.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getContext.xml b/src/test/resources/payloads/get/flickr.photos.getContext.xml new file mode 100644 index 00000000..9d2543cd --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getContext.xml @@ -0,0 +1,6 @@ + + +100 + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getCounts.xml b/src/test/resources/payloads/get/flickr.photos.getCounts.xml new file mode 100644 index 00000000..8a27e575 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getCounts.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getExif.xml b/src/test/resources/payloads/get/flickr.photos.getExif.xml new file mode 100644 index 00000000..d57fff62 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getExif.xml @@ -0,0 +1,187 @@ + + + + + 1.02 + + + inches + + + 240 + 240 dpi + + + 240 + 240 dpi + + + JPEG (old-style) + + + Canon + + + Canon EOS 20D + + + inches + + + 2011:04:03 11:47:32 + + + Darren Greaves + + + Centered + + + 1/60 + 0.017 sec (1/60) + + + 4.0 + f/4.0 + + + Aperture-priority AE + + + 400 + + + 0221 + + + 2011:04:02 18:55:46 + + + 2011:04:02 18:55:46 + + + Y, Cb, Cr, - + + + 0 + 0 EV + + + 1.8 + + + Multi-segment + + + Off, Did not fire + + + 28.0 mm + 28 mm + + + 212 + + + 0100 + + + Uncalibrated + + + 3959.322034 + 3959.32203389831 dpi + + + 3959.322034 + 3959.32203389831 dpi + + + inches + + + Normal + + + Auto + + + Auto + + + Standard + + + High + + + Normal + + + Hard + + + 2 + + + Darren Greaves + + + 6ec563ec53e8134661386ad9612f591b + + + Image::ExifTool 8.15 + + + 1.1.0 + + + 0 + + + 212 + + + 28.0 mm + + + 65535 + + + Darren Greaves + + + 930407553 + + + Darren Greaves + + + 28mm f/? + + + 6EC563EC53E8134661386AD9612F591B + + + 8 + + + JPEG (old-style) + + + Canon + + + Canon EOS 20D + + + inches + + + YCbCr4:4:4 (1 1) + + + 0 + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getInfo.xml b/src/test/resources/payloads/get/flickr.photos.getInfo.xml new file mode 100644 index 00000000..0201e1d8 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getInfo.xml @@ -0,0 +1,32 @@ + + + + + Robot + Description + + + + + + + 1 + + + + green + grn + grngrn + + + Daḩl Hīt + + Ar Riyāḑ + Saudi Arabia + + + + https://www.flickr.com/photos/boncey_test/5628095432/ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml b/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml new file mode 100644 index 00000000..ea5ee8f4 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getPerms.xml b/src/test/resources/payloads/get/flickr.photos.getPerms.xml new file mode 100644 index 00000000..77ece85c --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getPerms.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getRecent.xml b/src/test/resources/payloads/get/flickr.photos.getRecent.xml new file mode 100644 index 00000000..ebaf0206 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getRecent.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getSizes.xml b/src/test/resources/payloads/get/flickr.photos.getSizes.xml new file mode 100644 index 00000000..d4f57f07 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getSizes.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getUntagged.xml b/src/test/resources/payloads/get/flickr.photos.getUntagged.xml new file mode 100644 index 00000000..a423f366 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getUntagged.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.licenses.getInfo.xml b/src/test/resources/payloads/get/flickr.photos.licenses.getInfo.xml new file mode 100644 index 00000000..06795976 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.licenses.getInfo.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.people.add.xml b/src/test/resources/payloads/get/flickr.photos.people.add.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.people.add.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.people.delete.xml b/src/test/resources/payloads/get/flickr.photos.people.delete.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.people.delete.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.people.getList.xml b/src/test/resources/payloads/get/flickr.photos.people.getList.xml new file mode 100644 index 00000000..f5d0c8a8 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.people.getList.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.search.xml b/src/test/resources/payloads/get/flickr.photos.search.xml new file mode 100644 index 00000000..32c7802f --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.search.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photosets.getContext.xml b/src/test/resources/payloads/get/flickr.photosets.getContext.xml new file mode 100644 index 00000000..8839c484 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photosets.getContext.xml @@ -0,0 +1,6 @@ + + +9 + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photosets.getInfo.xml b/src/test/resources/payloads/get/flickr.photosets.getInfo.xml new file mode 100644 index 00000000..d5070a1d --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photosets.getInfo.xml @@ -0,0 +1,7 @@ + + + + PhotosetsInterfaceTest + JUnit test, should be deleted + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photosets.getList.xml b/src/test/resources/payloads/get/flickr.photosets.getList.xml new file mode 100644 index 00000000..fb64a172 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photosets.getList.xml @@ -0,0 +1,25 @@ + + + + + PhotosetsInterfaceTest + JUnit test, should be deleted + + + + test + + + + + test + A test photoset + + + + Places + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photosets.getPhotos.xml b/src/test/resources/payloads/get/flickr.photosets.getPhotos.xml new file mode 100644 index 00000000..81d13ae5 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photosets.getPhotos.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.find.xml b/src/test/resources/payloads/get/flickr.places.find.xml new file mode 100644 index 00000000..ec07b514 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.find.xml @@ -0,0 +1,11 @@ + + + + Alabama, United States + Alabama, United States + Alabama, North-West, South Africa + Alabama, Lehigh Acres, FL, United States + Ilsfeld, Baden-Wurttemberg, Germany + Rimini, Emilia Romagna, Italy + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.findByLatLon.xml b/src/test/resources/payloads/get/flickr.places.findByLatLon.xml new file mode 100644 index 00000000..51bb3feb --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.findByLatLon.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.getChildrenWithPhotosPublic.xml b/src/test/resources/payloads/get/flickr.places.getChildrenWithPhotosPublic.xml new file mode 100644 index 00000000..403ec2d3 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.getChildrenWithPhotosPublic.xml @@ -0,0 +1,83 @@ + + + + Financial District, San Francisco, CA, US, United States + Fisherman's Wharf, San Francisco, CA, US, United States + Financial District South, San Francisco, CA, US, United States + Inner Richmond, San Francisco, CA, US, United States + Golden Gate Park, San Francisco, CA, US, United States + Marina District, San Francisco, CA, US, United States + Presidio National Park, San Francisco, CA, US, United States + South Of Market, San Francisco, CA, US, United States + South Beach, San Francisco, CA, US, United States + Civic Center, San Francisco, CA, US, United States + Mission Bay, San Francisco, CA, US, United States + Chinatown, San Francisco, CA, US, United States + Fort Winfield Scott, San Francisco, CA, US, United States + Mission District, San Francisco, CA, US, United States + Downtown San Francisco-Union Square, San Francisco, CA, US, United States + Tenderloin, San Francisco, CA, US, United States + Russian Hill, San Francisco, CA, US, United States + Telegraph Hill, San Francisco, CA, US, United States + Mission Dolores, San Francisco, CA, US, United States + Outer Richmond, San Francisco, CA, US, United States + Inner Mission, San Francisco, CA, US, United States + Alamo Square, San Francisco, CA, US, United States + Mission District, San Francisco, CA, US, United States + Duboce Triangle, San Francisco, CA, US, United States + Little Italy, San Francisco, CA, US, United States + Nob Hill, San Francisco, CA, US, United States + Haight Ashbury, San Francisco, CA, US, United States + Eureka Valley Dolores Heights, San Francisco, CA, US, United States + Lower Haight, San Francisco, CA, US, United States + Lower Nob Hill, San Francisco, CA, US, United States + Bernal Heights, San Francisco, CA, US, United States + Inset, San Francisco, CA, US, United States + Westlake and Olympic, San Francisco, CA, US, United States + SOMISSPO, San Francisco, CA, US, United States + Hayes Valley, San Francisco, CA, US, United States + Twin Peaks, San Francisco, CA, US, United States + Lone Mountain, San Francisco, CA, US, United States + Van Ness, San Francisco, CA, US, United States + Cathedral Hill, San Francisco, CA, US, United States + Dogpatch, San Francisco, CA, US, United States + Outset, San Francisco, CA, US, United States + Victoria Mews, San Francisco, CA, US, United States + Seacliff, San Francisco, CA, US, United States + Outer Sunset, San Francisco, CA, US, United States + North Panhandle, San Francisco, CA, US, United States + Corona Heights, San Francisco, CA, US, United States + Dolores Heights, San Francisco, CA, US, United States + Fort Mason, San Francisco, CA, US, United States + Cole Valley, San Francisco, CA, US, United States + Lincoln Park, San Francisco, CA, US, United States + Potrero Hill, San Francisco, CA, US, United States + Lincoln Park-Fort Miley, San Francisco, CA, US, United States + Embarcadero, San Francisco, CA, US, United States + Golden Gate Heights, San Francisco, CA, US, United States + Upper Market, San Francisco, CA, US, United States + Silver Terrace, San Francisco, CA, US, United States + Treasure Island, San Francisco, CA, US, United States + Forest Knolls, San Francisco, CA, US, United States + Showplace Square, San Francisco, CA, US, United States + India Basin, San Francisco, CA, US, United States + Clarendon Heights, San Francisco, CA, US, United States + Mission Terrace, San Francisco, CA, US, United States + Merced Manor, San Francisco, CA, US, United States + Panhandle, San Francisco, CA, US, United States + West Portal, San Francisco, CA, US, United States + Sunnyside, San Francisco, CA, US, United States + Portola, San Francisco, CA, US, United States + Ingleside, San Francisco, CA, US, United States + Diamond Heights, San Francisco, CA, US, United States + Western Addition, San Francisco, CA, US, United States + Yerba Buena Island, San Francisco, CA, US, United States + Northeast San Francisco, San Francisco, CA, US, United States + St. Francis Wood, San Francisco, CA, US, United States + Sunset District, San Francisco, CA, US, United States + Balboa Terrace, San Francisco, CA, US, United States + Laguna Honda, San Francisco, CA, US, United States + St. Marys Park, San Francisco, CA, US, United States + Northwest San Francisco, San Francisco, CA, US, United States + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.getInfo.xml b/src/test/resources/payloads/get/flickr.places.getInfo.xml new file mode 100644 index 00000000..191e44d7 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.getInfo.xml @@ -0,0 +1,13 @@ + + + + + + 37.815452575684,-122.53009796143 37.818988800049,-122.53137207031 37.825004577637,-122.53424835205 37.830020904541,-122.52942657471 37.830963134766,-122.52574920654 37.831489562988,-122.52450561523 37.832233428955,-122.52037811279 37.832630157471,-122.51798248291 37.829006195068,-122.51068878174 37.848560333252,-122.49755859375 37.839462280273,-122.48850250244 37.839073181152,-122.48382568359 37.839954376221,-122.47953033447 37.841239929199,-122.47627258301 37.847137451172,-122.46211242676 37.849033355713,-122.46022033691 37.851474761963,-122.45824432373 37.85241317749,-122.45698547363 37.85425567627,-122.4499206543 37.85425567627,-122.44846343994 37.858455657959,-122.43653106689 37.865367889404,-122.43232727051 37.869770050049,-122.42537689209 37.860218048096,-122.41292572021 37.854034423828,-122.39771270752 37.856422424316,-122.38632202148 37.855743408203,-122.38511657715 37.85046005249,-122.37739562988 37.845478057861,-122.37190246582 37.835681915283,-122.366065979 37.83544921875,-122.36573791504 37.832969665527,-122.3609161377 37.829853057861,-122.35473632812 37.819004058838,-122.33551025391 37.798999786377,-122.3426361084 37.796764373779,-122.34375 37.780490875244,-122.34375 37.776584625244,-122.34057617188 37.771595001221,-122.33654022217 37.757144927979,-122.33791351318 37.753345489502,-122.33722686768 37.748863220215,-122.33448028564 37.742214202881,-122.33688354492 37.724834442139,-122.34031677246 37.713157653809,-122.33310699463 37.702293395996,-122.33757019043 37.712818145752,-122.35250091553 37.714218139648,-122.36018371582 37.711994171143,-122.36627960205 37.708606719971,-122.37457275391 37.698047637939,-122.37842559814 37.695911407471,-122.37893676758 37.685516357422,-122.39018249512 37.687164306641,-122.39084625244 37.691528320312,-122.39232635498 37.69847869873,-122.40190124512 37.705265045166,-122.41796875 37.703788757324,-122.42202758789 37.686130523682,-122.42752075195 37.697708129883,-122.44104003906 37.694686889648,-122.44833374023 37.699016571045,-122.46086120605 37.697666168213,-122.46514892578 37.697673797607,-122.46678924561 37.696868896484,-122.4711227417 37.697406768799,-122.47254180908 37.698818206787,-122.47752380371 37.698989868164,-122.47806549072 37.700984954834,-122.48245239258 37.701602935791,-122.48553466797 37.697784423828,-122.49645233154 37.698322296143,-122.49716949463 37.700603485107,-122.50006866455 37.698081970215,-122.51557922363 37.696334838867,-122.51850128174 37.714244842529,-122.52502441406 37.715450286865,-122.53712463379 37.728092193604,-122.54665374756 37.727550506592,-122.56141662598 37.734764099121,-122.54871368408 37.731624603271,-122.53326416016 37.753749847412,-122.53223419189 37.759925842285,-122.52991485596 37.768814086914,-122.53034210205 37.776683807373,-122.53961181641 37.775871276855,-122.54837036133 37.779331207275,-122.55334472656 37.788082122803,-122.55506134033 37.790725708008,-122.55249023438 37.796424865723,-122.53617858887 37.811157226562,-122.5294418335 37.815452575684,-122.53009796143 + + + http://farm6.static.flickr.com/5201/shapefiles/2487956_20101217_bd77c29997.tar.gz + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.getInfoByUrl.xml b/src/test/resources/payloads/get/flickr.places.getInfoByUrl.xml new file mode 100644 index 00000000..fa6fb5e8 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.getInfoByUrl.xml @@ -0,0 +1,17 @@ + + + + San Francisco, California, United States + San Francisco County, California, United States + California, United States + United States + + + 37.815452575684,-122.53009796143 37.818988800049,-122.53137207031 37.825004577637,-122.53424835205 37.830020904541,-122.52942657471 37.830963134766,-122.52574920654 37.831489562988,-122.52450561523 37.832233428955,-122.52037811279 37.832630157471,-122.51798248291 37.829006195068,-122.51068878174 37.848560333252,-122.49755859375 37.839462280273,-122.48850250244 37.839073181152,-122.48382568359 37.839954376221,-122.47953033447 37.841239929199,-122.47627258301 37.847137451172,-122.46211242676 37.849033355713,-122.46022033691 37.851474761963,-122.45824432373 37.85241317749,-122.45698547363 37.85425567627,-122.4499206543 37.85425567627,-122.44846343994 37.858455657959,-122.43653106689 37.865367889404,-122.43232727051 37.869770050049,-122.42537689209 37.860218048096,-122.41292572021 37.854034423828,-122.39771270752 37.856422424316,-122.38632202148 37.855743408203,-122.38511657715 37.85046005249,-122.37739562988 37.845478057861,-122.37190246582 37.835681915283,-122.366065979 37.83544921875,-122.36573791504 37.832969665527,-122.3609161377 37.829853057861,-122.35473632812 37.819004058838,-122.33551025391 37.798999786377,-122.3426361084 37.796764373779,-122.34375 37.780490875244,-122.34375 37.776584625244,-122.34057617188 37.771595001221,-122.33654022217 37.757144927979,-122.33791351318 37.753345489502,-122.33722686768 37.748863220215,-122.33448028564 37.742214202881,-122.33688354492 37.724834442139,-122.34031677246 37.713157653809,-122.33310699463 37.702293395996,-122.33757019043 37.712818145752,-122.35250091553 37.714218139648,-122.36018371582 37.711994171143,-122.36627960205 37.708606719971,-122.37457275391 37.698047637939,-122.37842559814 37.695911407471,-122.37893676758 37.685516357422,-122.39018249512 37.687164306641,-122.39084625244 37.691528320312,-122.39232635498 37.69847869873,-122.40190124512 37.705265045166,-122.41796875 37.703788757324,-122.42202758789 37.686130523682,-122.42752075195 37.697708129883,-122.44104003906 37.694686889648,-122.44833374023 37.699016571045,-122.46086120605 37.697666168213,-122.46514892578 37.697673797607,-122.46678924561 37.696868896484,-122.4711227417 37.697406768799,-122.47254180908 37.698818206787,-122.47752380371 37.698989868164,-122.47806549072 37.700984954834,-122.48245239258 37.701602935791,-122.48553466797 37.697784423828,-122.49645233154 37.698322296143,-122.49716949463 37.700603485107,-122.50006866455 37.698081970215,-122.51557922363 37.696334838867,-122.51850128174 37.714244842529,-122.52502441406 37.715450286865,-122.53712463379 37.728092193604,-122.54665374756 37.727550506592,-122.56141662598 37.734764099121,-122.54871368408 37.731624603271,-122.53326416016 37.753749847412,-122.53223419189 37.759925842285,-122.52991485596 37.768814086914,-122.53034210205 37.776683807373,-122.53961181641 37.775871276855,-122.54837036133 37.779331207275,-122.55334472656 37.788082122803,-122.55506134033 37.790725708008,-122.55249023438 37.796424865723,-122.53617858887 37.811157226562,-122.5294418335 37.815452575684,-122.53009796143 + + + http://farm6.staticflickr.com/5201/shapefiles/2487956_20101217_bd77c29997.tar.gz + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.getPlaceTypes.xml b/src/test/resources/payloads/get/flickr.places.getPlaceTypes.xml new file mode 100644 index 00000000..6cf29986 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.getPlaceTypes.xml @@ -0,0 +1,11 @@ + + + + neighbourhood + locality + county + region + country + continent + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml b/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml new file mode 100644 index 00000000..a5b9c1a9 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.placesForBoundingBox.xml b/src/test/resources/payloads/get/flickr.places.placesForBoundingBox.xml new file mode 100644 index 00000000..48557ef5 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.placesForBoundingBox.xml @@ -0,0 +1,6 @@ + + + + China Basin Heliport, United States + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.placesForContacts.xml b/src/test/resources/payloads/get/flickr.places.placesForContacts.xml new file mode 100644 index 00000000..b522fab7 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.placesForContacts.xml @@ -0,0 +1,51 @@ + + + + England, GB, United Kingdom + New York, US, United States + Tokyo Prefecture, JP, Japan + Ile-de-France, FR, France + Lazio, IT, Italy + Scotland, GB, United Kingdom + Berlin, DE, Germany + Massachusetts, US, United States + Kyoto Prefecture, JP, Japan + Ciudad de la Habana, CU, Cuba + Provence-Alpes-Cote d'Azur, FR, France + Nord-Pas-de-Calais, FR, France + Bavaria, DE, Germany + Campania, IT, Italy + Islands, HK, Hong Kong + Sancti Spiritus, CU, Cuba + Pinar del Rio, CU, Cuba + Madrid, ES, Spain + Santiago de Cuba, CU, Cuba + Osaka Prefecture, JP, Japan + Central and Western, HK, Hong Kong + West-Vlaanderen, BE, Belgium + Guantanamo, CU, Cuba + California, US, United States + Andalusia, ES, Spain + Holguin, CU, Cuba + Kanagawa Prefecture, JP, Japan + Lisbon, PT, Portugal + Sudur-Mulasysla, IS, Iceland + Brandenburg, DE, Germany + Wales, GB, United Kingdom + Capital Region of Brussels, BE, Belgium + Yamanashi Prefecture, JP, Japan + New Hampshire, US, United States + Yau Tsim Mong, HK, Hong Kong + Southern, HK, Hong Kong + Eastern, HK, Hong Kong + Cienfuegos, CU, Cuba + Seydisfjordur, IS, Iceland + Valencia, ES, Spain + Vlaams Brabant, BE, Belgium + Castille la Mancha, ES, Spain + Nordur-Mulasysla, IS, Iceland + Rangarvallasysla, IS, Iceland + Nordur-Tingeyjarsysla, IS, Iceland + Camaguey, CU, Cuba + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.placesForTags.xml b/src/test/resources/payloads/get/flickr.places.placesForTags.xml new file mode 100644 index 00000000..945c3872 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.placesForTags.xml @@ -0,0 +1,6 @@ + + + + California, US, United States + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.placesForUser.xml b/src/test/resources/payloads/get/flickr.places.placesForUser.xml new file mode 100644 index 00000000..a40eb2e4 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.placesForUser.xml @@ -0,0 +1,7 @@ + + + + England, GB, United Kingdom + Riyadh, SA, Saudi Arabia + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.resolvePlaceId.xml b/src/test/resources/payloads/get/flickr.places.resolvePlaceId.xml new file mode 100644 index 00000000..94f5482b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.resolvePlaceId.xml @@ -0,0 +1,9 @@ + + + + San Francisco, California, United States + San Francisco County, California, United States + California, United States + United States + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.resolvePlaceURL.xml b/src/test/resources/payloads/get/flickr.places.resolvePlaceURL.xml new file mode 100644 index 00000000..94f5482b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.resolvePlaceURL.xml @@ -0,0 +1,9 @@ + + + + San Francisco, California, United States + San Francisco County, California, United States + California, United States + United States + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.tagsForPlace.xml b/src/test/resources/payloads/get/flickr.places.tagsForPlace.xml new file mode 100644 index 00000000..179da487 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.tagsForPlace.xml @@ -0,0 +1,105 @@ + + + + france + germany + newyork + hdr + 2019 + insect + ice + 2018 + holland + hiking + fauna + house + iceland + flickr + grass + french + holidays + garden + fullframe + herbst + hill + 100faves + india + history + hills + highlands + horse + hiver + hike + home + ilce7m2 + 100 + inexplore + grey + horses + 100400 + industry + hautesalpes + hour + hff + greenhouse + google + indianocean + glen + golden + heidelberg + ff + ilce6000 + fromentinjulien + fromus + fromus75 + gravel + icm + iceberg + gipfel + frame + hautsdefrance + häst + hrvatska + greyheron + goldenhour + hovedstad + imagesgoogle + inca + imagestwiston + huge + industrialarchaeology + infiel + ibex + ijsland + hugovonschreck + iluminaciónnatural + hupfleitenjoch + hylättymaalaistalo + hälsinglad + héritagelaurentien + höllental + höllentalangerhütte + höllentalklamm + hüljatudtalumaja + hoverfly + hudsonyards + houstonaudubonsociety + föhn + vessel + 0672 + 100400mm + 10exposures + 1116mmf8 + 123abstractarchitecture + 12apostles + 14150 + flour + fragmentsoft + francais + fromentin + full + giardino + horsfieldsbronzecuckoo + gibbons + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.prefs.getContentType.xml b/src/test/resources/payloads/get/flickr.prefs.getContentType.xml new file mode 100644 index 00000000..c2d4e371 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.prefs.getContentType.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.prefs.getGeoPerms.xml b/src/test/resources/payloads/get/flickr.prefs.getGeoPerms.xml new file mode 100644 index 00000000..6c339721 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.prefs.getGeoPerms.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.prefs.getHidden.xml b/src/test/resources/payloads/get/flickr.prefs.getHidden.xml new file mode 100644 index 00000000..0326d1fb --- /dev/null +++ b/src/test/resources/payloads/get/flickr.prefs.getHidden.xml @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.prefs.getSafetyLevel.xml b/src/test/resources/payloads/get/flickr.prefs.getSafetyLevel.xml new file mode 100644 index 00000000..6555412b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.prefs.getSafetyLevel.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.reflection.getMethodInfo.xml b/src/test/resources/payloads/get/flickr.reflection.getMethodInfo.xml new file mode 100644 index 00000000..853f42a4 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.reflection.getMethodInfo.xml @@ -0,0 +1,24 @@ + + + + Returns the list of interesting photos for the most recent day or a user-specified date. + + + Your API application key. <a href="/services/api/misc.api_keys.html">See here</a> for more details. + A specific date, formatted as YYYY-MM-DD, to return interesting photos for. + A comma-delimited list of extra information to fetch for each returned record. Currently supported fields are: <code>description</code>, <code>license</code>, <code>date_upload</code>, <code>date_taken</code>, <code>owner_name</code>, <code>icon_server</code>, <code>original_format</code>, <code>last_update</code>, <code>geo</code>, <code>tags</code>, <code>machine_tags</code>, <code>o_dims</code>, <code>views</code>, <code>media</code>, <code>path_alias</code>, <code>url_sq</code>, <code>url_t</code>, <code>url_s</code>, <code>url_q</code>, <code>url_m</code>, <code>url_n</code>, <code>url_z</code>, <code>url_c</code>, <code>url_l</code>, <code>url_o</code> + Number of photos to return per page. If this argument is omitted, it defaults to 100. The maximum allowed value is 500. + The page of results to return. If this argument is omitted, it defaults to 1. + + + The date string passed did not validate. All dates must be formatted : YYYY-MM-DD + The API key passed was not valid or has expired. + The requested service is temporarily unavailable. + The requested operation failed due to a temporary issue. + The requested response format was not found. + The requested method was not found. + The SOAP envelope send in the request could not be parsed. + The XML-RPC request document could not be parsed. + One or more arguments contained a URL that has been used for abuse on Flickr. + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.reflection.getMethods.xml b/src/test/resources/payloads/get/flickr.reflection.getMethods.xml new file mode 100644 index 00000000..3dd8fd7b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.reflection.getMethods.xml @@ -0,0 +1,227 @@ + + + + flickr.activity.userComments + flickr.activity.userPhotos + flickr.auth.checkToken + flickr.auth.getFrob + flickr.auth.getFullToken + flickr.auth.getToken + flickr.auth.oauth.checkToken + flickr.auth.oauth.getAccessToken + flickr.blogs.getList + flickr.blogs.getServices + flickr.blogs.postPhoto + flickr.cameras.getBrandModels + flickr.cameras.getBrands + flickr.collections.getInfo + flickr.collections.getTree + flickr.commons.getInstitutions + flickr.contacts.getList + flickr.contacts.getListRecentlyUploaded + flickr.contacts.getPublicList + flickr.contacts.getTaggingSuggestions + flickr.favorites.add + flickr.favorites.getContext + flickr.favorites.getList + flickr.favorites.getPublicList + flickr.favorites.remove + flickr.galleries.addPhoto + flickr.galleries.create + flickr.galleries.editMeta + flickr.galleries.editPhoto + flickr.galleries.editPhotos + flickr.galleries.getInfo + flickr.galleries.getList + flickr.galleries.getListForPhoto + flickr.galleries.getPhotos + flickr.galleries.removePhoto + flickr.groups.browse + flickr.groups.discuss.replies.add + flickr.groups.discuss.replies.delete + flickr.groups.discuss.replies.edit + flickr.groups.discuss.replies.getInfo + flickr.groups.discuss.replies.getList + flickr.groups.discuss.topics.add + flickr.groups.discuss.topics.getInfo + flickr.groups.discuss.topics.getList + flickr.groups.getInfo + flickr.groups.join + flickr.groups.joinRequest + flickr.groups.leave + flickr.groups.members.getList + flickr.groups.pools.add + flickr.groups.pools.getContext + flickr.groups.pools.getGroups + flickr.groups.pools.getPhotos + flickr.groups.pools.remove + flickr.groups.search + flickr.interestingness.getList + flickr.machinetags.getNamespaces + flickr.machinetags.getPairs + flickr.machinetags.getPredicates + flickr.machinetags.getRecentValues + flickr.machinetags.getValues + flickr.panda.getList + flickr.panda.getPhotos + flickr.people.findByEmail + flickr.people.findByUsername + flickr.people.getGroups + flickr.people.getInfo + flickr.people.getLimits + flickr.people.getPhotos + flickr.people.getPhotosOf + flickr.people.getPublicGroups + flickr.people.getPublicPhotos + flickr.people.getUploadStatus + flickr.photos.addTags + flickr.photos.comments.addComment + flickr.photos.comments.deleteComment + flickr.photos.comments.editComment + flickr.photos.comments.getList + flickr.photos.comments.getRecentForContacts + flickr.photos.delete + flickr.photos.geo.batchCorrectLocation + flickr.photos.geo.correctLocation + flickr.photos.geo.getLocation + flickr.photos.geo.getPerms + flickr.photos.geo.photosForLocation + flickr.photos.geo.removeLocation + flickr.photos.geo.setContext + flickr.photos.geo.setLocation + flickr.photos.geo.setPerms + flickr.photos.getAllContexts + flickr.photos.getContactsPhotos + flickr.photos.getContactsPublicPhotos + flickr.photos.getContext + flickr.photos.getCounts + flickr.photos.getExif + flickr.photos.getFavorites + flickr.photos.getInfo + flickr.photos.getNotInSet + flickr.photos.getPerms + flickr.photos.getPopular + flickr.photos.getRecent + flickr.photos.getSizes + flickr.photos.getUntagged + flickr.photos.getWithGeoData + flickr.photos.getWithoutGeoData + flickr.photos.licenses.getInfo + flickr.photos.licenses.setLicense + flickr.photos.notes.add + flickr.photos.notes.delete + flickr.photos.notes.edit + flickr.photos.people.add + flickr.photos.people.delete + flickr.photos.people.deleteCoords + flickr.photos.people.editCoords + flickr.photos.people.getList + flickr.photos.recentlyUpdated + flickr.photos.removeTag + flickr.photos.search + flickr.photos.setContentType + flickr.photos.setDates + flickr.photos.setMeta + flickr.photos.setPerms + flickr.photos.setSafetyLevel + flickr.photos.setTags + flickr.photos.suggestions.approveSuggestion + flickr.photos.suggestions.getList + flickr.photos.suggestions.rejectSuggestion + flickr.photos.suggestions.removeSuggestion + flickr.photos.suggestions.suggestLocation + flickr.photos.transform.rotate + flickr.photos.upload.checkTickets + flickr.photosets.addPhoto + flickr.photosets.comments.addComment + flickr.photosets.comments.deleteComment + flickr.photosets.comments.editComment + flickr.photosets.comments.getList + flickr.photosets.create + flickr.photosets.delete + flickr.photosets.editMeta + flickr.photosets.editPhotos + flickr.photosets.getContext + flickr.photosets.getInfo + flickr.photosets.getList + flickr.photosets.getPhotos + flickr.photosets.orderSets + flickr.photosets.removePhoto + flickr.photosets.removePhotos + flickr.photosets.reorderPhotos + flickr.photosets.setPrimaryPhoto + flickr.places.find + flickr.places.findByLatLon + flickr.places.getChildrenWithPhotosPublic + flickr.places.getInfo + flickr.places.getInfoByUrl + flickr.places.getPlaceTypes + flickr.places.getShapeHistory + flickr.places.getTopPlacesList + flickr.places.placesForBoundingBox + flickr.places.placesForContacts + flickr.places.placesForTags + flickr.places.placesForUser + flickr.places.resolvePlaceId + flickr.places.resolvePlaceURL + flickr.places.tagsForPlace + flickr.prefs.getContentType + flickr.prefs.getGeoPerms + flickr.prefs.getHidden + flickr.prefs.getPrivacy + flickr.prefs.getSafetyLevel + flickr.profile.getProfile + flickr.push.getSubscriptions + flickr.push.getTopics + flickr.push.subscribe + flickr.push.unsubscribe + flickr.reflection.getMethodInfo + flickr.reflection.getMethods + flickr.stats.getCollectionDomains + flickr.stats.getCollectionReferrers + flickr.stats.getCollectionStats + flickr.stats.getCSVFiles + flickr.stats.getPhotoDomains + flickr.stats.getPhotoReferrers + flickr.stats.getPhotosetDomains + flickr.stats.getPhotosetReferrers + flickr.stats.getPhotosetStats + flickr.stats.getPhotoStats + flickr.stats.getPhotostreamDomains + flickr.stats.getPhotostreamReferrers + flickr.stats.getPhotostreamStats + flickr.stats.getPopularPhotos + flickr.stats.getTotalViews + flickr.tags.getClusterPhotos + flickr.tags.getClusters + flickr.tags.getHotList + flickr.tags.getListPhoto + flickr.tags.getListUser + flickr.tags.getListUserPopular + flickr.tags.getListUserRaw + flickr.tags.getMostFrequentlyUsed + flickr.tags.getRelated + flickr.test.echo + flickr.test.login + flickr.test.null + flickr.testimonials.addTestimonial + flickr.testimonials.approveTestimonial + flickr.testimonials.deleteTestimonial + flickr.testimonials.editTestimonial + flickr.testimonials.getAllTestimonialsAbout + flickr.testimonials.getAllTestimonialsAboutBy + flickr.testimonials.getAllTestimonialsBy + flickr.testimonials.getPendingTestimonialsAbout + flickr.testimonials.getPendingTestimonialsAboutBy + flickr.testimonials.getPendingTestimonialsBy + flickr.testimonials.getTestimonialsAbout + flickr.testimonials.getTestimonialsAboutBy + flickr.testimonials.getTestimonialsBy + flickr.urls.getGroup + flickr.urls.getUserPhotos + flickr.urls.getUserProfile + flickr.urls.lookupGallery + flickr.urls.lookupGroup + flickr.urls.lookupUser + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.tags.getClusterPhotos.xml b/src/test/resources/payloads/get/flickr.tags.getClusterPhotos.xml new file mode 100644 index 00000000..999af65f --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getClusterPhotos.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.tags.getClusters.xml b/src/test/resources/payloads/get/flickr.tags.getClusters.xml new file mode 100644 index 00000000..821ea32b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getClusters.xml @@ -0,0 +1,47 @@ + + + + + fiori + macro + insetti + flowers + natura + nature + insects + nikon + animali + primavera + spring + closeup + canon + estate + + + verde + green + + + bee + ape + bees + flower + fiore + insect + italy + yellow + giallo + miele + honey + italia + insetto + girasole + sunflower + + + flickr + screenshot + flickrapi + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.tags.getHotList.xml b/src/test/resources/payloads/get/flickr.tags.getHotList.xml new file mode 100644 index 00000000..a3dd9e29 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getHotList.xml @@ -0,0 +1,147 @@ + + + + + + +fs210502 + + + + + + +fotosondag + + + + + + +budding + + + + + + +longexposure + + + + + + +spirande + + + + + + +macromondays + + + + + + +sony + + + + + + +brittany + + + + + + +abstract + + + + + + +españa + + + + + + +scotland + + + + + + +beautiful + + + + + + +thailand + + + + + + +rocks + + + + + + +m42 + + + + + + +niedersachsen + + + + + + +reflection + + + + + + +waterfall + + + + + + +720nm + + + + + + +light + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.tags.getListPhoto.xml b/src/test/resources/payloads/get/flickr.tags.getListPhoto.xml new file mode 100644 index 00000000..cc2d1875 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getListPhoto.xml @@ -0,0 +1,10 @@ + + + + + green + grn + grngrn + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.tags.getListUser.xml b/src/test/resources/payloads/get/flickr.tags.getListUser.xml new file mode 100644 index 00000000..b893f029 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getListUser.xml @@ -0,0 +1,95 @@ + + + + + 10 + 11 + 2000 + 30 + 400 + a + an + april + banana + be + blog + commercial + d76 + database + dbms + ddx + developed + developer:brand=foma + developer:brand=ilford + developer:name=fomafomauniversaldeveloper + developer:name=ilfordilfotecddx + developing + documents + enhancements + entry + every + expired + features + film + film:brand=ilford + film:brand=kodak + film:iso=25 + film:iso=800 + film:name=ilfordhp5400 + film:name=kodakprofessionalortho655625 + filmdev:recipe=2307 + filmdev:recipe=2347 + filmdev:recipe=2355 + filmdev:recipe=6417 + filmdev:recipe=9083 + flickr + fomafomauniversaldeveloper + for + found + green + grn + grngrn + has + hp5 + ilford + ilfordhp5400 + ilfordilfotecddx + ilfotec + infact + installation + inversions + is + kodak + kodakprofessionalortho6556 + linking + linux + london + minutes + nextgeneration + objectrelational + pan + photos + postgresql + process + rated + recipes + seconds + shot + site + speed + stock + stuff + system + systems + that + this + tmax + traditional + trix + ubuntu + uniquetesttag + with + xml + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.tags.getListUserPopular.xml b/src/test/resources/payloads/get/flickr.tags.getListUserPopular.xml new file mode 100644 index 00000000..c6ddf2f7 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getListUserPopular.xml @@ -0,0 +1,17 @@ + + + + + 30 + film + for + found + green + is + london + speed + that + this + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.tags.getListUserRaw.xml b/src/test/resources/payloads/get/flickr.tags.getListUserRaw.xml new file mode 100644 index 00000000..cb903ab6 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getListUserRaw.xml @@ -0,0 +1,376 @@ + + + + + + 10 + + + 1+1 + + + 2000) + + + 30 + + + 400 + + + A + + + an + + + (April + + + banana + + + be + + + blog + + + commercial + + + D76 + + + database + + + DBMS + + + DD-X + + + developed + + + developer:brand=Foma + + + developer:brand=Ilford + + + developer:name=Foma Foma Universal Developer + + + developer:name=Ilford Ilfotec DD-X + + + developing + + + documents + + + enhancements + + + entry + + + every + + + Expired + + + features + + + film + + + film:brand=Ilford + + + film:brand=Kodak + + + film:iso=25 + + + film:iso=800 + + + film:name=Ilford HP5+ 400 + + + film:name=Kodak Professional Ortho 6556 25 + + + filmdev:recipe=1028 + + + filmdev:recipe=10840 + + + filmdev:recipe=1171 + + + filmdev:recipe=1177 + + + filmdev:recipe=1237 + + + filmdev:recipe=1362 + + + filmdev:recipe=14 + + + filmdev:recipe=1545 + + + filmdev:recipe=157 + + + filmdev:recipe=16765 + + + filmdev:recipe=1914 + + + filmdev:recipe=2035 + + + filmdev:recipe=212 + + + filmdev:recipe=2167 + + + filmdev:recipe=2266 + + + filmdev:recipe=2307 + + + filmdev:recipe=234 + + + filmdev:recipe=2347 + + + filmdev:recipe=2355 + + + filmdev:recipe=2396 + + + filmdev:recipe=2442 + + + filmdev:recipe=2552 + + + filmdev:recipe=256 + + + filmdev:recipe=25840 + + + filmdev:recipe=2816 + + + filmdev:recipe=283 + + + filmdev:recipe=335 + + + filmdev:recipe=5035 + + + filmdev:recipe=522 + + + filmdev:recipe=608 + + + filmdev:recipe=6091 + + + filmdev:recipe=6390 + + + filmdev:recipe=6417 + + + filmdev:recipe=7100 + + + filmdev:recipe=720 + + + filmdev:recipe=7426 + + + filmdev:recipe=80 + + + filmdev:recipe=9083 + + + filmdev:recipe=91 + + + Flickr + + + Foma Foma Universal Developer + + + for + + + found + + + green + + + grn + + + grngrn + + + has + + + HP5+ + + + Ilford + + + Ilford HP5+ 400 + + + Ilford Ilfotec DD-X + + + Ilfotec + + + In fact + + + installation + + + inversions + + + is + + + Kodak + + + Kodak Professional Ortho 6556 + + + linking + + + Linux. + + + london + + + minutes + + + next-generation + + + object-relational + + + Pan + + + photos + + + PostgreSQL + + + process + + + rated + + + recipes + + + seconds. + + + shot + + + site + + + speed + + + Stock + + + stuff + + + system + + + systems + + + test + + + that + + + This + + + T-MAX + + + traditional + + + Tri-X + + + Ubuntu + + + unique_test_tag + + + with + + + xml + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.tags.getRelated.xml b/src/test/resources/payloads/get/flickr.tags.getRelated.xml new file mode 100644 index 00000000..f598f567 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getRelated.xml @@ -0,0 +1,37 @@ + + + + macro + nature + yellow + red + green + garden + pink + purple + bokeh + closeup + rose + flowers + plant + white + bee + dof + nikon + insect + canon + orange + sunflower + petals + color + blue + naturesfinest + daisy + rosa + summer + tulip + butterfly + water + pollen + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.urls.getGroup.xml b/src/test/resources/payloads/get/flickr.urls.getGroup.xml new file mode 100644 index 00000000..7c6c477b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.urls.getGroup.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.urls.getUserPhotos.xml b/src/test/resources/payloads/get/flickr.urls.getUserPhotos.xml new file mode 100644 index 00000000..66897392 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.urls.getUserPhotos.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.urls.getUserProfile.xml b/src/test/resources/payloads/get/flickr.urls.getUserProfile.xml new file mode 100644 index 00000000..3266ab69 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.urls.getUserProfile.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.urls.lookupGallery.xml b/src/test/resources/payloads/get/flickr.urls.lookupGallery.xml new file mode 100644 index 00000000..23ecc72b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.urls.lookupGallery.xml @@ -0,0 +1,10 @@ + + + + test + test gallery for Flickr4Java + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.urls.lookupGroup.xml b/src/test/resources/payloads/get/flickr.urls.lookupGroup.xml new file mode 100644 index 00000000..a5095bab --- /dev/null +++ b/src/test/resources/payloads/get/flickr.urls.lookupGroup.xml @@ -0,0 +1,6 @@ + + + + FlickrCentral + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.urls.lookupUser.xml b/src/test/resources/payloads/get/flickr.urls.lookupUser.xml new file mode 100644 index 00000000..bc06baba --- /dev/null +++ b/src/test/resources/payloads/get/flickr.urls.lookupUser.xml @@ -0,0 +1,6 @@ + + + + boncey_test + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.blogs.getList.xml b/src/test/resources/payloads/post/flickr.blogs.getList.xml new file mode 100644 index 00000000..6394a8f2 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.blogs.getList.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.favorites.add.xml b/src/test/resources/payloads/post/flickr.favorites.add.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.favorites.add.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.favorites.getContext.xml b/src/test/resources/payloads/post/flickr.favorites.getContext.xml new file mode 100644 index 00000000..887fec82 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.favorites.getContext.xml @@ -0,0 +1,6 @@ + + +12 + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.favorites.remove.xml b/src/test/resources/payloads/post/flickr.favorites.remove.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.favorites.remove.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.galleries.getInfo.xml b/src/test/resources/payloads/post/flickr.galleries.getInfo.xml new file mode 100644 index 00000000..e44c4299 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.galleries.getInfo.xml @@ -0,0 +1,12 @@ + + + + Motorcycle Pics + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.galleries.getList.xml b/src/test/resources/payloads/post/flickr.galleries.getList.xml new file mode 100644 index 00000000..017535c0 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.galleries.getList.xml @@ -0,0 +1,9 @@ + + + + + test + test gallery for Flickr4Java + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.groups.join.xml b/src/test/resources/payloads/post/flickr.groups.join.xml new file mode 100644 index 00000000..5b57fa68 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.groups.join.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.groups.leave.xml b/src/test/resources/payloads/post/flickr.groups.leave.xml new file mode 100644 index 00000000..8c15cd91 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.groups.leave.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.groups.pools.add.xml b/src/test/resources/payloads/post/flickr.groups.pools.add.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.groups.pools.add.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.groups.pools.remove.xml b/src/test/resources/payloads/post/flickr.groups.pools.remove.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.groups.pools.remove.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photos.addTags.xml b/src/test/resources/payloads/post/flickr.photos.addTags.xml new file mode 100644 index 00000000..7b44d216 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photos.addTags.xml @@ -0,0 +1,6 @@ + + + + test + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photos.comments.addComment.xml b/src/test/resources/payloads/post/flickr.photos.comments.addComment.xml new file mode 100644 index 00000000..d81e00a8 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photos.comments.addComment.xml @@ -0,0 +1,6 @@ + + + +This is a test for the flickr java api + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photos.comments.deleteComment.xml b/src/test/resources/payloads/post/flickr.photos.comments.deleteComment.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photos.comments.deleteComment.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photos.comments.editComment.xml b/src/test/resources/payloads/post/flickr.photos.comments.editComment.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photos.comments.editComment.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photos.delete.xml b/src/test/resources/payloads/post/flickr.photos.delete.xml new file mode 100644 index 00000000..8c15cd91 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photos.delete.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photos.geo.removeLocation.xml b/src/test/resources/payloads/post/flickr.photos.geo.removeLocation.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photos.geo.removeLocation.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photos.geo.setLocation.xml b/src/test/resources/payloads/post/flickr.photos.geo.setLocation.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photos.geo.setLocation.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photos.removeTag.xml b/src/test/resources/payloads/post/flickr.photos.removeTag.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photos.removeTag.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photos.setContentType.xml b/src/test/resources/payloads/post/flickr.photos.setContentType.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photos.setContentType.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photos.setMeta.xml b/src/test/resources/payloads/post/flickr.photos.setMeta.xml new file mode 100644 index 00000000..0bf3d9ee --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photos.setMeta.xml @@ -0,0 +1,7 @@ + + + + Robot + Description + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photos.setSafetyLevel.xml b/src/test/resources/payloads/post/flickr.photos.setSafetyLevel.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photos.setSafetyLevel.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photos.setTags.xml b/src/test/resources/payloads/post/flickr.photos.setTags.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photos.setTags.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photosets.addPhoto.xml b/src/test/resources/payloads/post/flickr.photosets.addPhoto.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photosets.addPhoto.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photosets.create.xml b/src/test/resources/payloads/post/flickr.photosets.create.xml new file mode 100644 index 00000000..668b8e82 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photosets.create.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photosets.delete.xml b/src/test/resources/payloads/post/flickr.photosets.delete.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photosets.delete.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photosets.editPhotos.xml b/src/test/resources/payloads/post/flickr.photosets.editPhotos.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photosets.editPhotos.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photosets.orderSets.xml b/src/test/resources/payloads/post/flickr.photosets.orderSets.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photosets.orderSets.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photosets.removePhoto.xml b/src/test/resources/payloads/post/flickr.photosets.removePhoto.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.photosets.removePhoto.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.test.echo.xml b/src/test/resources/payloads/post/flickr.test.echo.xml new file mode 100644 index 00000000..7eb11790 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.test.echo.xml @@ -0,0 +1,16 @@ + + +flickr.test.echo +test +20f26bfcb5a2b46a2c11fd1210d3b420 +2173728070 +s9J6iZTiT88Z89ezlHCu7eIKan4= +72157628704501859-025864ab0471c9bc +20f26bfcb5a2b46a2c11fd1210d3b420 +1620055008 +HMAC-SHA1 +1.0 +1 +s9J6iZTiT88Z89ezlHCu7eIKan4= +72157628704501859-025864ab0471c9bc + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.test.login.xml b/src/test/resources/payloads/post/flickr.test.login.xml new file mode 100644 index 00000000..c257ab62 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.test.login.xml @@ -0,0 +1,6 @@ + + + + boncey_test + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/upload.xml b/src/test/resources/payloads/post/upload.xml new file mode 100644 index 00000000..e4428334 --- /dev/null +++ b/src/test/resources/payloads/post/upload.xml @@ -0,0 +1,4 @@ + + +43123716831 + \ No newline at end of file diff --git a/Flickr4Java/src/test/resources/setup.properties.example b/src/test/resources/setup.properties.example similarity index 100% rename from Flickr4Java/src/test/resources/setup.properties.example rename to src/test/resources/setup.properties.example