From be25cc8150f32b5a17efe31eba395b247be2a711 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 21 Dec 2013 18:08:38 +0000 Subject: [PATCH 001/239] Rename pom artifact --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index ed530280..d711d342 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.flickr4java - flickr + flickr4java 2.6-SNAPSHOT jar flickr4java From fa954b86f903a725f397a977ce68efe3bd5613af Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 22 Dec 2013 10:15:45 +0000 Subject: [PATCH 002/239] Rename CONTRIB to Markdown and add F4J contributors --- Flickr4Java/{CONTRIB.txt => CONTRIB.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Flickr4Java/{CONTRIB.txt => CONTRIB.md} (100%) diff --git a/Flickr4Java/CONTRIB.txt b/Flickr4Java/CONTRIB.md similarity index 100% rename from Flickr4Java/CONTRIB.txt rename to Flickr4Java/CONTRIB.md From acc4485d0525891bba142aca15e58eab0fb6c378 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 22 Dec 2013 10:39:21 +0000 Subject: [PATCH 003/239] Add link to contributors page on github --- Flickr4Java/CONTRIB.md | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/Flickr4Java/CONTRIB.md b/Flickr4Java/CONTRIB.md index c00d154c..6d6f7d84 100644 --- a/Flickr4Java/CONTRIB.md +++ b/Flickr4Java/CONTRIB.md @@ -1,7 +1,17 @@ -Contributors: - -Anthony Eden (me at anthonyeden.com) -Martin Goebel (x-mago at gmx.de) -Matthew Ray (matthewhray at gmail.com) -Matthew MacKenzie (matthew.mackenzie at gmail.com) -Till Krech (till at dasburo.com) \ No newline at end of file +## Contributors + +### flickrj + +Anthony Eden (me at anthonyeden.com) +Martin Goebel (x-mago at gmx.de) +Matthew Ray (matthewhray at gmail.com) +Matthew MacKenzie (matthew.mackenzie at gmail.com) +Till Krech (till at dasburo.com) + +### Flickr4Java +#### Main contributors/owners +Allan (https://github.com/callmeal) +Darren Greaves (https://github.com/boncey) + +#### Full list +https://github.com/callmeal/Flickr4Java/graphs/contributors From 4c36b4a51d6361df72523c6fc694a538e1b6db3c Mon Sep 17 00:00:00 2001 From: isim Date: Tue, 24 Dec 2013 20:48:23 -0800 Subject: [PATCH 004/239] Remove unused obsolete file. --- .../com/flickr4java/flickr/Flickr.java.bak | 605 ------------------ 1 file changed, 605 deletions(-) delete mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java.bak diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java.bak b/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java.bak deleted file mode 100644 index 500d10f5..00000000 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java.bak +++ /dev/null @@ -1,605 +0,0 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -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.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.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.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; - -import java.util.Set; - -/** - * Main entry point for the Flickr4Java API. This class is used to acquire Interface classes which wrap the Flickr API. - *

- * - * If you registered API keys, you find them with the shared secret at your list of API - * keys - *

- * - * The user who authenticates himself, can manage this permissions at his list of Third-party - * 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 { - - /** - * The default endpoint host. - */ - public static final String DEFAULT_HOST = "api.flickr.com"; - - /** - * The key used when the API key is stored for passing to the Transport methods. - */ - public static final String API_KEY = "api_key"; - - /** - * Set to true to enable response debugging (print the response stream) - */ - public static boolean debugStream = false; - - /** - * Set to true to enable request debugging (print the request stream, used for "post") - */ - public static boolean debugRequest = false; - - /** - * If set to true, trace messages will be printed to STDOUT. - */ - public static boolean tracing = false; - - private String apiKey; - - private String sharedSecret; - - private Transport 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; - - /** - * @see com.flickr4java.flickr.photos.PhotosInterface#setContentType(String, String) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getContentType() - * @see com.flickr4java.flickr.uploader.UploadMetaData#setContentType(String) - */ - public static final String CONTENTTYPE_PHOTO = "1"; - - /** - * @see com.flickr4java.flickr.photos.PhotosInterface#setContentType(String, String) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getContentType() - * @see com.flickr4java.flickr.uploader.UploadMetaData#setContentType(String) - */ - public static final String CONTENTTYPE_SCREENSHOT = "2"; - - /** - * @see com.flickr4java.flickr.photos.PhotosInterface#setContentType(String, String) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getContentType() - * @see com.flickr4java.flickr.uploader.UploadMetaData#setContentType(String) - */ - public static final String CONTENTTYPE_OTHER = "3"; - - /** - * The lowest accuracy for bounding-box searches. - * - * @see com.flickr4java.flickr.photos.SearchParameters#setAccuracy(int) - */ - public static final int ACCURACY_WORLD = 1; - - /** - * @see com.flickr4java.flickr.photos.SearchParameters#setAccuracy(int) - */ - public static final int ACCURACY_COUNTRY = 3; - - /** - * @see com.flickr4java.flickr.photos.SearchParameters#setAccuracy(int) - */ - public static final int ACCURACY_REGION = 6; - - /** - * @see com.flickr4java.flickr.photos.SearchParameters#setAccuracy(int) - */ - public static final int ACCURACY_CITY = 11; - - /** - * The highest accuracy for bounding-box searches. - * - * @see com.flickr4java.flickr.photos.SearchParameters#setAccuracy(int) - */ - public static final int ACCURACY_STREET = 16; - - /** - * @see com.flickr4java.flickr.photos.PhotosInterface#setSafetyLevel(String, String, Boolean) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getSafetyLevel() - * @see com.flickr4java.flickr.uploader.UploadMetaData#setSafetyLevel(String) - * @see com.flickr4java.flickr.photos.SearchParameters#setSafeSearch(String) - */ - public static final String SAFETYLEVEL_SAFE = "1"; - - /** - * @see com.flickr4java.flickr.photos.PhotosInterface#setSafetyLevel(String, String, Boolean) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getSafetyLevel() - * @see com.flickr4java.flickr.uploader.UploadMetaData#setSafetyLevel(String) - * @see com.flickr4java.flickr.photos.SearchParameters#setSafeSearch(String) - */ - public static final String SAFETYLEVEL_MODERATE = "2"; - - /** - * @see com.flickr4java.flickr.photos.PhotosInterface#setSafetyLevel(String, String, Boolean) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getSafetyLevel() - * @see com.flickr4java.flickr.uploader.UploadMetaData#setSafetyLevel(String) - * @see com.flickr4java.flickr.photos.SearchParameters#setSafeSearch(String) - */ - public static final String SAFETYLEVEL_RESTRICTED = "3"; - - /** - * @see com.flickr4java.flickr.photosets.PhotosetsInterface#getPhotos(String, Set, int, int, int) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getPrivacy() - * @see com.flickr4java.flickr.prefs.PrefsInterface#getGeoPerms() - */ - public static final int PRIVACY_LEVEL_NO_FILTER = 0; - - /** - * @see com.flickr4java.flickr.photosets.PhotosetsInterface#getPhotos(String, Set, int, int, int) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getPrivacy() - * @see com.flickr4java.flickr.prefs.PrefsInterface#getGeoPerms() - */ - public static final int PRIVACY_LEVEL_PUBLIC = 1; - - /** - * @see com.flickr4java.flickr.photosets.PhotosetsInterface#getPhotos(String, Set, int, int, int) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getPrivacy() - * @see com.flickr4java.flickr.prefs.PrefsInterface#getGeoPerms() - */ - public static final int PRIVACY_LEVEL_FRIENDS = 2; - - /** - * @see com.flickr4java.flickr.photosets.PhotosetsInterface#getPhotos(String, Set, int, int, int) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getPrivacy() - * @see com.flickr4java.flickr.prefs.PrefsInterface#getGeoPerms() - */ - public static final int PRIVACY_LEVEL_FAMILY = 3; - - /** - * @see com.flickr4java.flickr.photosets.PhotosetsInterface#getPhotos(String, Set, int, int, int) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getPrivacy() - * @see com.flickr4java.flickr.prefs.PrefsInterface#getGeoPerms() - */ - public static final int PRIVACY_LEVEL_FRIENDS_FAMILY = 4; - - /** - * @see com.flickr4java.flickr.photosets.PhotosetsInterface#getPhotos(String, Set, int, int, int) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getPrivacy() - * @see com.flickr4java.flickr.prefs.PrefsInterface#getGeoPerms() - */ - public static final int PRIVACY_LEVEL_PRIVATE = 5; - - /** - * Construct a new Flickr gateway instance. - * - * @param apiKey - * The API key, must be non-null - * @param sharedSecret - * @param transport - */ - public Flickr(String apiKey, String sharedSecret, Transport transport) { - setApiKey(apiKey); - setSharedSecret(sharedSecret); - setTransport(transport); - } - - /** - * 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 Transport getTransport() { - return transport; - } - - /** - * Set the Transport which must not be null. - * - * @param transport - */ - public void setTransport(Transport 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 synchronized 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 synchronized 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) { - uploader = new Uploader(apiKey, sharedSecret); - } - 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; - } - -} From d0f134f574d2edb02cccf8640e898e17cd9d148c Mon Sep 17 00:00:00 2001 From: gmaslowski Date: Mon, 17 Feb 2014 19:27:42 +0100 Subject: [PATCH 005/239] Changed OnlineStatus to enum. --- .../flickr/contacts/OnlineStatus.java | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java index b91d781e..fa62f54a 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java @@ -5,31 +5,26 @@ import java.io.Serializable; +import static com.flickr4java.flickr.contacts.OnlineStatus.OnlineStatusType.AWAY_TYPE; +import static com.flickr4java.flickr.contacts.OnlineStatus.OnlineStatusType.OFFLINE_TYPE; +import static com.flickr4java.flickr.contacts.OnlineStatus.OnlineStatusType.ONLINE_TYPE; +import static com.flickr4java.flickr.contacts.OnlineStatus.OnlineStatusType.UNKNOWN_TYPE; + /** * Class representing the various types of online statuses. - * + * * @author Anthony Eden */ -public class OnlineStatus implements Serializable { - private static final long serialVersionUID = 12L; - - public static final int OFFLINE_TYPE = 0; - - public static final int AWAY_TYPE = 1; - - public static final int ONLINE_TYPE = 2; - - public static final int UNKNOWN_TYPE = 100; +public enum OnlineStatus implements Serializable { - public static final OnlineStatus OFFLINE = new OnlineStatus(OFFLINE_TYPE); + OFFLINE(OFFLINE_TYPE), + AWAY(AWAY_TYPE), + ONLINE(ONLINE_TYPE), + UNKNOWN(UNKNOWN_TYPE); - public static final OnlineStatus AWAY = new OnlineStatus(AWAY_TYPE); - - public static final OnlineStatus ONLINE = new OnlineStatus(ONLINE_TYPE); - - public static final OnlineStatus UNKNOWN = new OnlineStatus(UNKNOWN_TYPE); + private static final long serialVersionUID = 12L; - private int type; + private final int type; private OnlineStatus(int type) { this.type = type; @@ -37,7 +32,7 @@ private OnlineStatus(int type) { /** * Get the int value for the online status. This method is useful in switch statements. - * + * * @return The int value for the online status */ public int getType() { @@ -46,31 +41,29 @@ public int getType() { /** * Get an OnlineStatus object for a given int value. - * - * @param type - * The int value + * + * @param type The int value * @return The OnlineStatus object */ public static OnlineStatus fromType(int type) { switch (type) { - case OFFLINE_TYPE: - return OFFLINE; - case AWAY_TYPE: - return AWAY; - case ONLINE_TYPE: - return ONLINE; - case UNKNOWN_TYPE: - return UNKNOWN; - default: - throw new IllegalArgumentException("Unsupported online type: " + type); + case OFFLINE_TYPE: + return OFFLINE; + case AWAY_TYPE: + return AWAY; + case ONLINE_TYPE: + return ONLINE; + case UNKNOWN_TYPE: + return UNKNOWN; + default: + throw new IllegalArgumentException("Unsupported online type: " + type); } } /** * Get the OnlineStatus value for a given int represented as a String - * - * @param type - * The int represented as a String + * + * @param type The int represented as a String * @return The OnlineStatus object */ public static OnlineStatus fromType(String type) { @@ -80,4 +73,11 @@ public static OnlineStatus fromType(String type) { return fromType(Integer.parseInt(type)); } } + + static class OnlineStatusType { + static final int OFFLINE_TYPE = 0; + static final int AWAY_TYPE = 1; + static final int ONLINE_TYPE = 2; + static final int UNKNOWN_TYPE = 100; + } } From f9522564603e4ac1102a9a0e3e05327514e04d2b Mon Sep 17 00:00:00 2001 From: Mike Date: Wed, 26 Mar 2014 16:25:10 -0400 Subject: [PATCH 006/239] use SSL by default --- .../main/java/com/flickr4java/flickr/REST.java | 3 ++- .../java/com/flickr4java/flickr/Transport.java | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java index 7266e481..4592ce76 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java @@ -69,6 +69,7 @@ public REST() { setTransportType(REST); setHost(API_HOST); setPath(PATH); + setScheme(DEFAULT_SCHEME); setResponseClass(RESTResponse.class); DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); try { @@ -204,7 +205,7 @@ public com.flickr4java.flickr.Response get(String path, Map para public Response getNonOAuth(String path, Map parameters) { InputStream in = null; try { - URL url = UrlUtilities.buildUrl(getHost(), getPort(), path, parameters); + URL url = UrlUtilities.buildUrl(getScheme(), getHost(), getPort(), path, parameters); if (Flickr.debugRequest) { logger.debug("GET: " + url); } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java index 6eaddced..7ca735dc 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java @@ -18,8 +18,10 @@ public abstract class Transport { public static final String SOAP = "SOAP"; - protected static final String API_HOST = "http://api.flickr.com"; + protected static final String API_HOST = "api.flickr.com"; + protected static final String DEFAULT_SCHEME = "https"; + private String transportType; protected Class responseClass; @@ -28,7 +30,9 @@ public abstract class Transport { private String host; - private int port = 80; + private int port = 443; + + private String scheme; public String getHost() { return host; @@ -62,6 +66,14 @@ 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. * From d175291a812e2de469fc1ca2288579d2b1ef501b Mon Sep 17 00:00:00 2001 From: Mike Date: Wed, 26 Mar 2014 16:26:01 -0400 Subject: [PATCH 007/239] added method to get buddy icon via https --- .../com/flickr4java/flickr/contacts/Contact.java | 14 ++++++++++++++ .../java/com/flickr4java/flickr/groups/Group.java | 14 ++++++++++++++ .../java/com/flickr4java/flickr/people/User.java | 15 +++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/Contact.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/Contact.java index e968a661..0df98fd1 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/Contact.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/Contact.java @@ -116,11 +116,25 @@ public void setAwayMessage(String awayMessage) { * * @see Flickr Documentation * @return The BuddyIconUrl + * @deprecated use {@link #getSecureBuddyIconUrl() } */ + @Deprecated public String getBuddyIconUrl() { return UrlUtilities.createBuddyIconUrl(iconFarm, iconServer, id); } + /** + * Construct the BuddyIconUrl using {@code https} scheme. + *

+ * If none available, return the default, or an URL assembled from farm, iconserver and nsid. + * + * @see Flickr Documentation + * @return The BuddyIconUrl + */ + public String getSecureBuddyIconUrl() { + return UrlUtilities.createSecureBuddyIconUrl(iconFarm, iconServer, id); + } + public int getIconFarm() { return iconFarm; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java index c9bc3b5a..5401f40c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java @@ -287,11 +287,25 @@ public void setIconServer(String iconServer) { * * @see Flickr Documentation * @return The BuddyIconUrl + * @deprecated use {@link #getSecureBuddyIconUrl() } */ + @Deprecated public String getBuddyIconUrl() { return UrlUtilities.createBuddyIconUrl(iconFarm, iconServer, id); } + /** + * Construct the BuddyIconUrl using {@code https} scheme. + *

+ * If none available, return the default, or an URL assembled from farm, iconserver and nsid. + * + * @see Flickr Documentation + * @return The BuddyIconUrl + */ + public String getSecureBuddyIconUrl() { + return UrlUtilities.createSecureBuddyIconUrl(iconFarm, iconServer, id); + } + public Throttle getThrottle() { return throttle; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java index 2685a02b..9e3e68b1 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java @@ -159,11 +159,26 @@ public String getLocation() { * * @see Flickr Documentation * @return The BuddyIconUrl + * @deprecated use {@link #getSecureBuddyIconUrl() } */ + @Deprecated public String getBuddyIconUrl() { return UrlUtilities.createBuddyIconUrl(iconFarm, iconServer, id); } + /** + * Construct the BuddyIconUrl using {@code https} scheme. + *

+ * If none available, return the default, or an URL assembled from farm, iconserver and nsid. + * + * @see Flickr Documentation + * @return The BuddyIconUrl + */ + public String getSecureBuddyIconUrl() { + return UrlUtilities.createSecureBuddyIconUrl(iconFarm, iconServer, id); + } + + public void setLocation(String location) { this.location = location; } From 23e08fee0641941a0a55ad7069be8ddf72089706 Mon Sep 17 00:00:00 2001 From: Mike Date: Wed, 26 Mar 2014 16:26:20 -0400 Subject: [PATCH 008/239] added methods to build https URLs --- .../flickr4java/flickr/util/UrlUtilities.java | 123 ++++++++++++++++-- 1 file changed, 111 insertions(+), 12 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java index 9eabb4e7..13687b43 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java @@ -10,7 +10,10 @@ import java.net.URLEncoder; import java.util.Map; -/** @author Anthony Eden */ +/** + * @author Anthony Eden + * @author Mike Chaberski + */ public class UrlUtilities { public static final String UTF8 = "UTF-8"; @@ -28,14 +31,33 @@ public class UrlUtilities { * The parameters * @return The URL * @throws MalformedURLException + * @deprecated use {@link #buildSecureUrl(java.lang.String, int, java.lang.String, java.util.Map) } */ + @Deprecated public static URL buildUrl(String host, int port, String path, Map parameters) throws MalformedURLException { - // see: AuthUtilities.getSignature() - // AuthUtilities.addAuthToken(parameters); - - StringBuffer buffer = new StringBuffer(); - if (!host.startsWith("http://")) { - buffer.append("http://"); + return buildUrl("http", port, path, parameters); + } + + /** + * Build a request URL using a given scheme. + * + * @param scheme the scheme, either {@code http} or {@code https} + * @param host + * The host + * @param port + * The port + * @param path + * The path + * @param parameters + * The parameters + * @return The URL + * @throws MalformedURLException + */ + public static URL buildUrl(String scheme, String host, int port, String path, Map parameters) throws MalformedURLException { + checkSchemeAndPort(scheme, port); + StringBuilder buffer = new StringBuilder(); + if (!host.startsWith(scheme + "://")) { + buffer.append(scheme).append("://"); } buffer.append(host); if (port > 0) { @@ -77,9 +99,64 @@ public static URL buildUrl(String host, int port, String path, Map parameters) throws MalformedURLException { + return buildUrl("https", host, port, path, parameters); + } + + public static URL buildSecurePostUrl(String host, int port, String path) throws MalformedURLException { + return buildPostUrl("https", host, port, path); + } + + private static void checkScheme(String scheme) { + if (scheme == null || !("http".equals(scheme) || "https".equals(scheme))) { + throw new IllegalArgumentException("scheme must be http or https"); + } + } + + private static void checkSchemeAndPort(String scheme, int port) { + checkScheme(scheme); + /* + * Be liberal about accepting non-default ports, but strict + * about mismatching scheme and default port. + */ + if ("http".equals(scheme) && port == 443) { + throw new IllegalArgumentException("port 443 is invalid with http scheme"); + } + if ("https".equals(scheme) && port == 80) { + throw new IllegalArgumentException("port 80 is invalid with https scheme"); + } + } + + /** + * Build a POST URL with {@code http} scheme. + * @param host the host + * @param port the port + * @param path the path + * @return + * @throws MalformedURLException + */ public static URL buildPostUrl(String host, int port, String path) throws MalformedURLException { - StringBuffer buffer = new StringBuffer(); - buffer.append("http://"); + return buildPostUrl("http", host, port, path); + } + + public static URL buildPostUrl(String scheme, String host, int port, String path) throws MalformedURLException { + checkSchemeAndPort(scheme, port); + StringBuilder buffer = new StringBuilder(); + buffer.append(scheme).append("://"); buffer.append(host); if (port > 0) { buffer.append(':'); @@ -93,7 +170,7 @@ public static URL buildPostUrl(String host, int port, String path) throws Malfor } /** - * Construct the BuddyIconUrl. + * Construct the BuddyIconUrl with {@code http} scheme. *

* If none available, return the default, or an URL assembled from farm, iconserver and nsid. * @@ -102,14 +179,36 @@ public static URL buildPostUrl(String host, int port, String path) throws Malfor * @param iconServer * @param id * @return The BuddyIconUrl + * @deprecated use {@link #createSecureBuddyIconUrl(int, int, java.lang.String) } */ + @Deprecated public static String createBuddyIconUrl(int iconFarm, int iconServer, String id) { + return createBuddyIconUrl("http", iconFarm, iconServer, id); + } + + /** + * Construct the BuddyIconUrl with {@code https} scheme. + *

+ * If none available, return the default, or an URL assembled from farm, iconserver and nsid. + * + * @see Flickr Documentation + * @param iconFarm + * @param iconServer + * @param id + * @return The BuddyIconUrl + */ + public static String createSecureBuddyIconUrl(int iconFarm, int iconServer, String id) { + return createBuddyIconUrl("https", iconFarm, iconServer, id); + } + + public static String createBuddyIconUrl(String scheme, int iconFarm, int iconServer, String id) { + checkScheme(scheme); /** * The default-URL, if the iconServer equals 0. */ - String iconUrl = "http://www.flickr.com/images/buddyicon.jpg"; + String iconUrl = scheme + "://www.flickr.com/images/buddyicon.jpg"; if (iconServer > 0) { - iconUrl = "http://farm" + iconFarm + ".static.flickr.com/" + iconServer + "/buddyicons/" + id + ".jpg"; + iconUrl = scheme + "://farm" + iconFarm + ".static.flickr.com/" + iconServer + "/buddyicons/" + id + ".jpg"; } return iconUrl; } From 9781158226800010c55faafd6bfbc8236006ba66 Mon Sep 17 00:00:00 2001 From: Mike Date: Wed, 26 Mar 2014 16:27:19 -0400 Subject: [PATCH 009/239] changed expectation to https --- .../flickr4java/flickr/test/GroupsInterfaceTest.java | 2 +- .../flickr4java/flickr/test/PeopleInterfaceTest.java | 8 ++++---- .../flickr4java/flickr/test/UrlsInterfaceTest.java | 12 ++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java index 9d2f4667..36e04ff2 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java @@ -73,7 +73,7 @@ public void testGetInfo() throws FlickrException { assertEquals("34427469792@N01", group.getId()); assertEquals("FlickrCentral", group.getName()); assertTrue(group.getMembers() > 0); - assertTrue(group.getBuddyIconUrl().startsWith("http://farm")); + assertTrue(group.getBuddyIconUrl().startsWith("https://farm")); // System.out.println("group members: " + group.getMembers()); } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java index e10e94dd..6ccc1b5f 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java @@ -55,10 +55,10 @@ public void testGetInfo() throws FlickrException { assertNotNull(person); assertEquals(testProperties.getNsid(), person.getId()); assertEquals(testProperties.getDisplayname(), person.getUsername()); - assertTrue(person.getMobileurl().startsWith("http://m.flickr.com/photostream.gne")); - assertEquals(person.getPhotosurl(), String.format("http://www.flickr.com/photos/%s/", testProperties.getUsername())); - assertEquals(person.getProfileurl(), String.format("http://www.flickr.com/people/%s/", testProperties.getUsername())); - assertTrue(person.getBuddyIconUrl().startsWith("http://")); + assertTrue(person.getMobileurl().startsWith("https://m.flickr.com/photostream.gne")); + 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.getBuddyIconUrl().startsWith("https://")); } @Test diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java index c0d72b3b..8b37a9b4 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java @@ -22,7 +22,7 @@ public class UrlsInterfaceTest extends Flickr4JavaTest { public void testGetGroup() throws FlickrException { UrlsInterface iface = flickr.getUrlsInterface(); String url = iface.getGroup(testProperties.getGroupId()); - assertEquals("http://www.flickr.com/groups/central/", url); + assertEquals("https://www.flickr.com/groups/central/", url); } @Test @@ -30,7 +30,7 @@ public void testGetUserPhotos() throws FlickrException { UrlsInterface iface = flickr.getUrlsInterface(); String url = iface.getUserPhotos(testProperties.getNsid()); String username = testProperties.getUsername(); - assertEquals(String.format("http://www.flickr.com/photos/%s/", username), url); + assertEquals(String.format("https://www.flickr.com/photos/%s/", username), url); } @Test @@ -38,13 +38,13 @@ public void testGetUserProfile() throws FlickrException { UrlsInterface iface = flickr.getUrlsInterface(); String url = iface.getUserProfile(testProperties.getNsid()); String username = testProperties.getUsername(); - assertEquals(String.format("http://www.flickr.com/people/%s/", username), url); + assertEquals(String.format("https://www.flickr.com/people/%s/", username), url); } @Test public void testLookupGroup() throws FlickrException { UrlsInterface iface = flickr.getUrlsInterface(); - Group group = iface.lookupGroup("http://www.flickr.com/groups/central/"); + Group group = iface.lookupGroup("https://www.flickr.com/groups/central/"); assertEquals("FlickrCentral", group.getName()); assertEquals(testProperties.getGroupId(), group.getId()); } @@ -53,7 +53,7 @@ public void testLookupGroup() throws FlickrException { public void testLookupUser() throws FlickrException { UrlsInterface iface = flickr.getUrlsInterface(); String username = testProperties.getUsername(); - String usernameOnFlickr = iface.lookupUser(String.format("http://www.flickr.com/people/%s/", username)); + String usernameOnFlickr = iface.lookupUser(String.format("https://www.flickr.com/people/%s/", username)); assertEquals(username, usernameOnFlickr); } @@ -61,7 +61,7 @@ public void testLookupUser() throws FlickrException { public void testLookupGallery() throws FlickrException { UrlsInterface iface = flickr.getUrlsInterface(); - Gallery gallery = iface.lookupGallery(String.format("http://www.flickr.com/photos/%s/", + Gallery gallery = iface.lookupGallery(String.format("https://www.flickr.com/photos/%s/", testProperties.getUsername() + "/galleries/" + testProperties.getGalleryId())); assertNotNull(gallery); assertTrue(gallery.getId().endsWith(testProperties.getGalleryId())); From 7d5cf4bd2f43aca33ba48119eb1327a92f0ad362 Mon Sep 17 00:00:00 2001 From: Mike Date: Wed, 26 Mar 2014 17:05:16 -0400 Subject: [PATCH 010/239] modified to expect https --- .../java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java index 01a01655..1b36d6ea 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java @@ -28,6 +28,7 @@ public void tearDown() { flickr = null; } + @Ignore @Test public void testGetList() throws FlickrException { GalleriesInterface iface = flickr.getGalleriesInterface(); From 030a5fe73ae47961230fc9fe03efd4457873d607 Mon Sep 17 00:00:00 2001 From: Mike Date: Wed, 26 Mar 2014 17:05:40 -0400 Subject: [PATCH 011/239] include scheme in URL construction --- Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java index 4592ce76..596513f8 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java @@ -143,7 +143,7 @@ public void setProxy(String proxyHost, int proxyPort, String username, String pa @Override public com.flickr4java.flickr.Response get(String path, Map parameters, String sharedSecret) { - OAuthRequest request = new OAuthRequest(Verb.GET, API_HOST + path); + OAuthRequest request = new OAuthRequest(Verb.GET, getScheme() + "://" + getHost() + path); for (Map.Entry entry : parameters.entrySet()) { request.addQuerystringParameter(entry.getKey(), String.valueOf(entry.getValue())); } @@ -255,7 +255,7 @@ public Response getNonOAuth(String path, Map parameters) { @Override public com.flickr4java.flickr.Response post(String path, Map parameters, String sharedSecret, boolean multipart) { - OAuthRequest request = new OAuthRequest(Verb.POST, API_HOST + path); + OAuthRequest request = new OAuthRequest(Verb.POST, getScheme() + "://" + getHost() + path); if (multipart) { buildMultipartRequest(parameters, request); From 3143a26d4c3cf15250ee829a6b1776947eb9fddf Mon Sep 17 00:00:00 2001 From: haggisandchips Date: Sat, 5 Apr 2014 00:55:44 +0100 Subject: [PATCH 012/239] Get photos from group pool for specific user --- .../flickr/groups/pools/PoolsInterface.java | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java index 216e126c..1ea66965 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java @@ -158,6 +158,8 @@ public Collection getGroups() throws FlickrException { * @see com.flickr4java.flickr.photos.Extras * @param groupId * The group ID + * @param userId + * The user ID (may be null) * @param tags * The optional tags (may be null) * @param extras @@ -169,7 +171,7 @@ public Collection getGroups() throws FlickrException { * @return A Collection of Photo objects * @throws FlickrException */ - public PhotoList getPhotos(String groupId, String[] tags, Set extras, int perPage, int page) throws FlickrException { + public PhotoList getPhotos(String groupId, String userId, String[] tags, Set extras, int perPage, int page) throws FlickrException { PhotoList photos = new PhotoList(); Map parameters = new HashMap(); @@ -177,6 +179,9 @@ public PhotoList getPhotos(String groupId, String[] tags, Set ext parameters.put(Flickr.API_KEY, apiKey); parameters.put("group_id", groupId); + if (userId != null) { + parameters.put("user_id", userId); + } if (tags != null) { parameters.put("tags", StringUtilities.join(tags, " ")); } @@ -218,6 +223,29 @@ public PhotoList getPhotos(String groupId, String[] tags, Set ext return photos; } + /** + * Convenience/Compatibility method. + * + * This method does not require authentication. + * + * @see com.flickr4java.flickr.photos.Extras + * @param groupId + * The group ID + * @param tags + * The optional tags (may be null) + * @param extras + * Set of extra-attributes to include (may be null) + * @param perPage + * The number of photos per page (0 to ignore) + * @param page + * The page offset (0 to ignore) + * @return A Collection of Photo objects + * @throws FlickrException + */ + public PhotoList getPhotos(String groupId, String[] tags, Set extras, int perPage, int page) throws FlickrException { + return getPhotos(groupId, null, tags, extras, perPage, page); + } + /** * Convenience/Compatibility method. * From 270ea0e9d2ef5d5dd859e066377a0984735bc9a4 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Apr 2014 11:00:28 +0100 Subject: [PATCH 013/239] No longer pass api_key parameter in method calls --- .../com/flickr4java/flickr/Flickr.java.bak | 605 ------------------ .../java/com/flickr4java/flickr/REST.java | 28 +- .../com/flickr4java/flickr/RESTResponse.java | 6 +- .../flickr4java/flickr/RequestContext.java | 6 +- .../java/com/flickr4java/flickr/Response.java | 4 +- .../com/flickr4java/flickr/SOAPResponse.java | 8 +- .../com/flickr4java/flickr/Transport.java | 11 +- .../flickr/activity/ActivityInterface.java | 23 +- .../flickr/auth/AuthInterface.java | 2 - .../flickr/blogs/BlogsInterface.java | 28 +- .../flickr/cameras/CamerasInterface.java | 7 +- .../collections/CollectionsInterface.java | 7 +- .../flickr/commons/CommonsInterface.java | 18 +- .../flickr/commons/Institution.java | 7 +- .../flickr/contacts/ContactsInterface.java | 26 +- .../flickr/favorites/FavoritesInterface.java | 34 +- .../flickr/galleries/GalleriesInterface.java | 46 +- .../flickr/groups/GroupsInterface.java | 35 +- .../groups/members/MembersInterface.java | 18 +- .../flickr/groups/pools/PoolsInterface.java | 38 +- .../InterestingnessInterface.java | 35 +- .../machinetags/MachinetagsInterface.java | 41 +- .../flickr4java/flickr/machinetags/Value.java | 10 +- .../flickr/panda/PandaInterface.java | 23 +- .../flickr/people/PeopleInterface.java | 28 +- .../flickr4java/flickr/photos/PhotoUtils.java | 10 +- .../flickr/photos/PhotosInterface.java | 82 +-- .../photos/comments/CommentsInterface.java | 36 +- .../flickr/photos/geo/GeoInterface.java | 42 +- .../photos/licenses/LicensesInterface.java | 21 +- .../flickr/photos/notes/NotesInterface.java | 22 +- .../flickr/photos/people/PeopleInterface.java | 30 +- .../suggestions/SuggestionsInterface.java | 22 +- .../photos/transform/TransformInterface.java | 4 +- .../flickr/photos/upload/UploadInterface.java | 18 +- .../flickr/photosets/PhotosetsInterface.java | 45 +- .../comments/PhotosetsCommentsInterface.java | 31 +- .../flickr/places/PlacesInterface.java | 64 +- .../flickr/prefs/PrefsInterface.java | 26 +- .../reflection/ReflectionInterface.java | 23 +- .../flickr/stats/StatsInterface.java | 19 +- .../java/com/flickr4java/flickr/tags/Tag.java | 5 + .../flickr/tags/TagsInterface.java | 25 +- .../flickr/test/TestInterface.java | 24 +- .../flickr4java/flickr/uploader/Uploader.java | 11 +- .../flickr/urls/UrlsInterface.java | 31 +- .../flickr/util/FileAuthStore.java | 8 +- .../flickr/test/BlogsInterfaceTest.java | 12 +- .../flickr/test/CommonsInterfaceTest.java | 18 +- .../flickr/test/GalleriesInterfaceTest.java | 8 +- .../flickr/test/MachinetagsInterfaceTest.java | 14 +- .../flickr/test/PandaInterfaceTest.java | 8 +- .../flickr/test/PhotosInterfaceTest.java | 24 - .../flickr/test/PlacesInterfaceTest.java | 47 +- .../flickr/test/ReflectionInterfaceTest.java | 18 +- .../flickr/test/TagsInterfaceTest.java | 2 +- .../flickr/test/TestInterfaceTest.java | 10 +- 57 files changed, 515 insertions(+), 1339 deletions(-) delete mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java.bak diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java.bak b/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java.bak deleted file mode 100644 index 500d10f5..00000000 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java.bak +++ /dev/null @@ -1,605 +0,0 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -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.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.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.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; - -import java.util.Set; - -/** - * Main entry point for the Flickr4Java API. This class is used to acquire Interface classes which wrap the Flickr API. - *

- * - * If you registered API keys, you find them with the shared secret at your list of API - * keys - *

- * - * The user who authenticates himself, can manage this permissions at his list of Third-party - * 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 { - - /** - * The default endpoint host. - */ - public static final String DEFAULT_HOST = "api.flickr.com"; - - /** - * The key used when the API key is stored for passing to the Transport methods. - */ - public static final String API_KEY = "api_key"; - - /** - * Set to true to enable response debugging (print the response stream) - */ - public static boolean debugStream = false; - - /** - * Set to true to enable request debugging (print the request stream, used for "post") - */ - public static boolean debugRequest = false; - - /** - * If set to true, trace messages will be printed to STDOUT. - */ - public static boolean tracing = false; - - private String apiKey; - - private String sharedSecret; - - private Transport 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; - - /** - * @see com.flickr4java.flickr.photos.PhotosInterface#setContentType(String, String) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getContentType() - * @see com.flickr4java.flickr.uploader.UploadMetaData#setContentType(String) - */ - public static final String CONTENTTYPE_PHOTO = "1"; - - /** - * @see com.flickr4java.flickr.photos.PhotosInterface#setContentType(String, String) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getContentType() - * @see com.flickr4java.flickr.uploader.UploadMetaData#setContentType(String) - */ - public static final String CONTENTTYPE_SCREENSHOT = "2"; - - /** - * @see com.flickr4java.flickr.photos.PhotosInterface#setContentType(String, String) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getContentType() - * @see com.flickr4java.flickr.uploader.UploadMetaData#setContentType(String) - */ - public static final String CONTENTTYPE_OTHER = "3"; - - /** - * The lowest accuracy for bounding-box searches. - * - * @see com.flickr4java.flickr.photos.SearchParameters#setAccuracy(int) - */ - public static final int ACCURACY_WORLD = 1; - - /** - * @see com.flickr4java.flickr.photos.SearchParameters#setAccuracy(int) - */ - public static final int ACCURACY_COUNTRY = 3; - - /** - * @see com.flickr4java.flickr.photos.SearchParameters#setAccuracy(int) - */ - public static final int ACCURACY_REGION = 6; - - /** - * @see com.flickr4java.flickr.photos.SearchParameters#setAccuracy(int) - */ - public static final int ACCURACY_CITY = 11; - - /** - * The highest accuracy for bounding-box searches. - * - * @see com.flickr4java.flickr.photos.SearchParameters#setAccuracy(int) - */ - public static final int ACCURACY_STREET = 16; - - /** - * @see com.flickr4java.flickr.photos.PhotosInterface#setSafetyLevel(String, String, Boolean) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getSafetyLevel() - * @see com.flickr4java.flickr.uploader.UploadMetaData#setSafetyLevel(String) - * @see com.flickr4java.flickr.photos.SearchParameters#setSafeSearch(String) - */ - public static final String SAFETYLEVEL_SAFE = "1"; - - /** - * @see com.flickr4java.flickr.photos.PhotosInterface#setSafetyLevel(String, String, Boolean) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getSafetyLevel() - * @see com.flickr4java.flickr.uploader.UploadMetaData#setSafetyLevel(String) - * @see com.flickr4java.flickr.photos.SearchParameters#setSafeSearch(String) - */ - public static final String SAFETYLEVEL_MODERATE = "2"; - - /** - * @see com.flickr4java.flickr.photos.PhotosInterface#setSafetyLevel(String, String, Boolean) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getSafetyLevel() - * @see com.flickr4java.flickr.uploader.UploadMetaData#setSafetyLevel(String) - * @see com.flickr4java.flickr.photos.SearchParameters#setSafeSearch(String) - */ - public static final String SAFETYLEVEL_RESTRICTED = "3"; - - /** - * @see com.flickr4java.flickr.photosets.PhotosetsInterface#getPhotos(String, Set, int, int, int) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getPrivacy() - * @see com.flickr4java.flickr.prefs.PrefsInterface#getGeoPerms() - */ - public static final int PRIVACY_LEVEL_NO_FILTER = 0; - - /** - * @see com.flickr4java.flickr.photosets.PhotosetsInterface#getPhotos(String, Set, int, int, int) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getPrivacy() - * @see com.flickr4java.flickr.prefs.PrefsInterface#getGeoPerms() - */ - public static final int PRIVACY_LEVEL_PUBLIC = 1; - - /** - * @see com.flickr4java.flickr.photosets.PhotosetsInterface#getPhotos(String, Set, int, int, int) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getPrivacy() - * @see com.flickr4java.flickr.prefs.PrefsInterface#getGeoPerms() - */ - public static final int PRIVACY_LEVEL_FRIENDS = 2; - - /** - * @see com.flickr4java.flickr.photosets.PhotosetsInterface#getPhotos(String, Set, int, int, int) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getPrivacy() - * @see com.flickr4java.flickr.prefs.PrefsInterface#getGeoPerms() - */ - public static final int PRIVACY_LEVEL_FAMILY = 3; - - /** - * @see com.flickr4java.flickr.photosets.PhotosetsInterface#getPhotos(String, Set, int, int, int) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getPrivacy() - * @see com.flickr4java.flickr.prefs.PrefsInterface#getGeoPerms() - */ - public static final int PRIVACY_LEVEL_FRIENDS_FAMILY = 4; - - /** - * @see com.flickr4java.flickr.photosets.PhotosetsInterface#getPhotos(String, Set, int, int, int) - * @see com.flickr4java.flickr.prefs.PrefsInterface#getPrivacy() - * @see com.flickr4java.flickr.prefs.PrefsInterface#getGeoPerms() - */ - public static final int PRIVACY_LEVEL_PRIVATE = 5; - - /** - * Construct a new Flickr gateway instance. - * - * @param apiKey - * The API key, must be non-null - * @param sharedSecret - * @param transport - */ - public Flickr(String apiKey, String sharedSecret, Transport transport) { - setApiKey(apiKey); - setSharedSecret(sharedSecret); - setTransport(transport); - } - - /** - * 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 Transport getTransport() { - return transport; - } - - /** - * Set the Transport which must not be null. - * - * @param transport - */ - public void setTransport(Transport 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 synchronized 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 synchronized 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) { - uploader = new Uploader(apiKey, sharedSecret); - } - 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; - } - -} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java index 7266e481..467c2b4a 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java @@ -140,7 +140,7 @@ public void setProxy(String proxyHost, int proxyPort, String username, String pa * @return The Response */ @Override - public com.flickr4java.flickr.Response get(String path, Map parameters, String sharedSecret) { + public com.flickr4java.flickr.Response get(String path, Map parameters, String apiKey, String sharedSecret) { OAuthRequest request = new OAuthRequest(Verb.GET, API_HOST + path); for (Map.Entry entry : parameters.entrySet()) { @@ -153,9 +153,9 @@ public com.flickr4java.flickr.Response get(String path, Map para RequestContext requestContext = RequestContext.getRequestContext(); Auth auth = requestContext.getAuth(); - if (auth != null){ + if (auth != null) { Token requestToken = new Token(auth.getToken(), auth.getTokenSecret()); - OAuthService service = createOAuthService(parameters, sharedSecret); + OAuthService service = createOAuthService(parameters, apiKey, sharedSecret); service.signRequest(requestToken, request); } @@ -252,7 +252,7 @@ public Response getNonOAuth(String path, Map parameters) { * @return The Response object */ @Override - public com.flickr4java.flickr.Response post(String path, Map parameters, String sharedSecret, boolean multipart) { + public com.flickr4java.flickr.Response post(String path, Map parameters, String apiKey, String sharedSecret, boolean multipart) { OAuthRequest request = new OAuthRequest(Verb.POST, API_HOST + path); @@ -264,10 +264,10 @@ public com.flickr4java.flickr.Response post(String path, Map par RequestContext requestContext = RequestContext.getRequestContext(); Auth auth = requestContext.getAuth(); - if (auth != null){ + if (auth != null) { Token requestToken = new Token(auth.getToken(), auth.getTokenSecret()); - OAuthService service = createOAuthService(parameters, sharedSecret); - service.signRequest(requestToken, request); + OAuthService service = createOAuthService(parameters, apiKey, sharedSecret); + service.signRequest(requestToken, request); } if (multipart) { @@ -318,17 +318,13 @@ public com.flickr4java.flickr.Response post(String path, Map par * @param sharedSecret * @return */ - private OAuthService createOAuthService(Map parameters, String sharedSecret) { - OAuthService serviceBuilder; + private OAuthService createOAuthService(Map parameters, String apiKey, String sharedSecret) { + ServiceBuilder serviceBuilder = new ServiceBuilder().provider(FlickrApi.class).apiKey(apiKey).apiSecret(sharedSecret); if (Flickr.debugRequest) { - serviceBuilder = new ServiceBuilder().provider(FlickrApi.class).apiKey(String.valueOf(parameters.get(Flickr.API_KEY))).apiSecret(sharedSecret) - .debug().build(); - } else { - serviceBuilder = new ServiceBuilder().provider(FlickrApi.class).apiKey(String.valueOf(parameters.get(Flickr.API_KEY))).apiSecret(sharedSecret) - .build(); + serviceBuilder = serviceBuilder.debug(); } - return serviceBuilder; + return serviceBuilder.build(); } /** @@ -407,7 +403,7 @@ private void writeParam(String name, Object value, ByteArrayOutputStream buffer, int res = -1; while ((res = in.read(buf)) != -1) { - buffer.write(buf,0,res); + buffer.write(buf, 0, res); } buffer.write(("\r\n" + "--" + boundary + "\r\n").getBytes(CHARSET_NAME)); } else if (value instanceof byte[]) { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/RESTResponse.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/RESTResponse.java index 719b5c3a..1a2f91b2 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/RESTResponse.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/RESTResponse.java @@ -3,13 +3,13 @@ */ package com.flickr4java.flickr; -import java.util.Collection; -import java.util.List; +import com.flickr4java.flickr.util.XMLUtilities; import org.w3c.dom.Document; import org.w3c.dom.Element; -import com.flickr4java.flickr.util.XMLUtilities; +import java.util.Collection; +import java.util.List; /** * Flickr Response object. diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/RequestContext.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/RequestContext.java index 1ef52e27..aa685997 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/RequestContext.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/RequestContext.java @@ -4,11 +4,11 @@ package com.flickr4java.flickr; +import com.flickr4java.flickr.auth.Auth; + import java.util.ArrayList; import java.util.List; -import com.flickr4java.flickr.auth.Auth; - /** * A thread local variable used to hold contextual information used in requests. To get an instance of this class use RequestContext.getRequestContext(). The * method will return a RequestContext object which is only usable within the current thread. @@ -31,7 +31,7 @@ public class RequestContext { * @return The RequestContext */ public static RequestContext getRequestContext() { - return (RequestContext) threadLocal.get(); + return threadLocal.get(); } public Auth getAuth() { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Response.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/Response.java index eaa9445c..cfc26a6d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Response.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/Response.java @@ -4,11 +4,11 @@ package com.flickr4java.flickr; -import java.util.Collection; - import org.w3c.dom.Document; import org.w3c.dom.Element; +import java.util.Collection; + /** * @author Anthony Eden */ diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java index df8af3c0..21e45ced 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java @@ -1,8 +1,6 @@ package com.flickr4java.flickr; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; +import com.flickr4java.flickr.util.XMLUtilities; import org.apache.axis.message.SOAPBody; import org.apache.axis.message.SOAPEnvelope; @@ -10,7 +8,9 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; -import com.flickr4java.flickr.util.XMLUtilities; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; /** * Flickr SOAP Response object. diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java index 6eaddced..1be455ad 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java @@ -69,11 +69,12 @@ public void setPath(String 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 sharedSecret) 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. @@ -82,11 +83,12 @@ public void setPath(String 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 sharedSecret, boolean multipart) 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. @@ -95,13 +97,14 @@ public void setPath(String 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 sharedSecret) throws FlickrException { + public Response post(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException { - return post(path, parameters, sharedSecret, false); + return post(path, parameters, apiKey, sharedSecret, false); } /** diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java index d13f4e33..b648ccf7 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java @@ -1,20 +1,19 @@ package com.flickr4java.flickr.activity; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.Response; +import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.util.XMLUtilities; + +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.regex.Pattern; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; -import com.flickr4java.flickr.util.XMLUtilities; - /** * Gather activity information belonging to the calling user. * @@ -52,7 +51,6 @@ public ItemList userComments(int perPage, int page) throws FlickrException ItemList items = new ItemList(); Map parameters = new HashMap(); parameters.put("method", METHOD_USER_COMMENTS); - parameters.put(Flickr.API_KEY, apiKey); if (perPage > 0) { parameters.put("per_page", "" + perPage); @@ -62,7 +60,7 @@ public ItemList userComments(int perPage, int page) throws FlickrException parameters.put("page", "" + page); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -96,7 +94,6 @@ public ItemList userPhotos(int perPage, int page, String timeframe) throws ItemList items = new ItemList(); Map parameters = new HashMap(); parameters.put("method", METHOD_USER_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); if (perPage > 0) { parameters.put("per_page", "" + perPage); @@ -114,7 +111,7 @@ public ItemList userPhotos(int perPage, int page, String timeframe) throws } } - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/auth/AuthInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java index 325d9b91..1e203489 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java @@ -4,7 +4,6 @@ package com.flickr4java.flickr.auth; -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -215,7 +214,6 @@ private Map constructNonOAuthParameters(String authToken, String // Use TreeMap so keys are automatically sorted alphabetically Map parameters = new TreeMap(); parameters.put("method", method); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("oauth_token", authToken); // This method call must be signed using Flickr (not OAuth) style signing parameters.put("api_sig", getSignature(sharedSecret, parameters)); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java index e89fcf58..9d26caa2 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java @@ -3,22 +3,21 @@ */ package com.flickr4java.flickr.blogs; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.util.XMLUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * Interface for working with Flickr blog configurations. * @@ -57,9 +56,8 @@ public Collection getServices() throws FlickrException { List list = new ArrayList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_SERVICES); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -89,7 +87,6 @@ public Collection getServices() throws FlickrException { public void postPhoto(Photo photo, String blogId, String blogPassword) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_POST_PHOTO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("blog_id", blogId); parameters.put("photo_id", photo.getId()); @@ -99,7 +96,7 @@ public void postPhoto(Photo photo, String blogId, String blogPassword) throws Fl parameters.put("blog_password", blogPassword); } - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -128,9 +125,8 @@ public Collection getList() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(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/cameras/CamerasInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java index 705d7296..93561fa7 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java @@ -3,7 +3,6 @@ */ package com.flickr4java.flickr.cameras; -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -59,9 +58,8 @@ public CamerasInterface(String apiKey, String sharedSecret, Transport transportA public List getBrands() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_BRANDS); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -92,10 +90,9 @@ public List getBrands() throws FlickrException { public List getBrandModels(String strBrand) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_BRAND_MODELS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("brand", strBrand); - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/collections/CollectionsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java index 6836fe55..304ebd0e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java @@ -1,6 +1,5 @@ package com.flickr4java.flickr.collections; -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -62,9 +61,8 @@ public Collection getInfo(String collectionId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); parameters.put("collection_id", collectionId); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -96,9 +94,8 @@ public List getTree(String collectionId, String userId) throws Flick if (userId != null) { parameters.put("user_id", userId); } - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/commons/CommonsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java index 38680ab7..ebabc201 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java @@ -1,18 +1,17 @@ package com.flickr4java.flickr.commons; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.util.XMLUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + /** * * @author mago @@ -45,9 +44,8 @@ public ArrayList getInstitutions() throws FlickrException { ArrayList institutions = new ArrayList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INSTITUTIONS); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/commons/Institution.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/commons/Institution.java index 6467761d..a9b2bc9e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/commons/Institution.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/commons/Institution.java @@ -53,7 +53,7 @@ public void setDateLaunch(long date) { public void setDateLaunch(String date) { if (date == null || "".equals(date)) return; - setDateLaunch(Long.parseLong(date) * (long) 1000); + setDateLaunch(Long.parseLong(date) * 1000); } public String getSiteUrl() { @@ -80,4 +80,9 @@ public void setFlickrUrl(String flickrUrl) { this.flickrUrl = flickrUrl; } + @Override + public String toString() { + return String.format("Institution [name=%s]", name); + } + } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java index 6795ddd8..8c0bab4a 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java @@ -3,6 +3,14 @@ */ package com.flickr4java.flickr.contacts; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.Response; +import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.util.XMLUtilities; + +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -10,15 +18,6 @@ import java.util.List; import java.util.Map; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; -import com.flickr4java.flickr.util.XMLUtilities; - /** * Interface for working with Flickr contacts. * @@ -55,9 +54,8 @@ public Collection getList() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -105,7 +103,6 @@ public Collection getListRecentlyUploaded(Date lastUpload, String filte Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST_RECENTLY_UPLOADED); - parameters.put(Flickr.API_KEY, apiKey); if (lastUpload != null) { parameters.put("date_lastupload", String.valueOf(lastUpload.getTime() / 1000L)); @@ -114,7 +111,7 @@ public Collection getListRecentlyUploaded(Date lastUpload, String filte parameters.put("filter", filter); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -157,10 +154,9 @@ public Collection getPublicList(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PUBLIC_LIST); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/favorites/FavoritesInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java index f898484b..e4316ae5 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java @@ -3,16 +3,6 @@ */ package com.flickr4java.flickr.favorites; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import org.apache.log4j.Logger; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -22,6 +12,15 @@ import com.flickr4java.flickr.photos.PhotoUtils; import com.flickr4java.flickr.util.StringUtilities; +import org.apache.log4j.Logger; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + /** * Interface for working with Flickr favorites. * @@ -64,10 +63,9 @@ public FavoritesInterface(String apiKey, String sharedSecret, Transport transpor public void add(String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ADD); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -92,7 +90,6 @@ public PhotoList getList(String userId, int perPage, int page, Set parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); if (userId != null) { parameters.put("user_id", userId); @@ -107,7 +104,7 @@ public PhotoList getList(String userId, int perPage, int page, Set getPublicList(String userId, int perPage, int page, Set< Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PUBLIC_LIST); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); @@ -161,7 +157,7 @@ public PhotoList getPublicList(String userId, int perPage, int page, Set< parameters.put("page", String.valueOf(page)); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -188,11 +184,10 @@ public PhotoList getPublicList(String userId, int perPage, int page, Set< public void remove(String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_REMOVE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -210,12 +205,11 @@ public void remove(String photoId) throws FlickrException { public PhotoContext getContext(String photoId, String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_CONTEXT); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("user_id", userId); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(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/galleries/GalleriesInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java index 45911246..69a85018 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java @@ -3,16 +3,6 @@ */ package com.flickr4java.flickr.galleries; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -22,6 +12,15 @@ import com.flickr4java.flickr.photos.PhotoList; import com.flickr4java.flickr.util.XMLUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * @author acaplan * @@ -83,7 +82,6 @@ public GalleriesInterface(String apiKey, String sharedSecret, Transport transpor public List getList(String userId, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); if (perPage > 0) { parameters.put("per_page", String.valueOf(perPage)); @@ -92,7 +90,7 @@ public List getList(String userId, int perPage, int page) throws Flickr parameters.put("page", String.valueOf(page)); } - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -131,12 +129,11 @@ public List getList(String userId, int perPage, int page) throws Flickr public void addPhoto(String strGalleryId, String photoId, String strComment) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ADD_PHOTO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("gallery_id", strGalleryId); parameters.put("photo_id", photoId); parameters.put("comment", strComment); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -145,11 +142,10 @@ public void addPhoto(String strGalleryId, String photoId, String strComment) thr public void editMeta(String strGalleryId, String strTitle, String strDescription) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_EDIT_META); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("title", strTitle); parameters.put("description", strDescription); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -158,12 +154,11 @@ public void editMeta(String strGalleryId, String strTitle, String strDescription public void editPhoto(String strGalleryId, String strPhotoId, String strComment) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_EDIT_PHOTO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("gallery_id", strGalleryId); parameters.put("photo_id", strPhotoId); parameters.put("comment", strComment); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -172,12 +167,11 @@ public void editPhoto(String strGalleryId, String strPhotoId, String strComment) public void editPhotos(String strGalleryId, String strPrimaryPhotoId, String strPhotoIds) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_EDIT_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("gallery_id", strGalleryId); parameters.put("primary_photo_id", strPrimaryPhotoId); parameters.put("photo_ids", strPhotoIds); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -186,10 +180,9 @@ public void editPhotos(String strGalleryId, String strPrimaryPhotoId, String str public Gallery getInfo(String strGalleryId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("gallery_id", strGalleryId); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -226,14 +219,13 @@ public Gallery getInfo(String strGalleryId) throws FlickrException { public Gallery create(String strTitle, String strDescription, String primaryPhotoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_CREATE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("title", strTitle); parameters.put("description", strDescription); if (primaryPhotoId != null) { parameters.put("primary_photo_id ", primaryPhotoId); } - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -270,7 +262,6 @@ public PhotoList getPhotos(String galleryId, Set extras, int perP Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("gallery_id", galleryId); @@ -293,7 +284,7 @@ public PhotoList getPhotos(String galleryId, Set extras, int perP parameters.put("page", String.valueOf(page)); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -346,7 +337,6 @@ public PhotoList getListForPhoto(String photoId, int perPage, int page) t Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST_FOR_PHOTO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); @@ -357,7 +347,7 @@ public PhotoList getListForPhoto(String photoId, int perPage, int page) t parameters.put("page", String.valueOf(page)); } - Response response = transport.get(transport.getPath(), parameters, 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/groups/GroupsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java index 03912ab0..52cfe610 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java @@ -3,21 +3,20 @@ */ package com.flickr4java.flickr.groups; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.Response; +import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.util.XMLUtilities; + +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; -import com.flickr4java.flickr.util.XMLUtilities; - /** * Interface for working with Flickr Groups. * @@ -67,13 +66,12 @@ public Category browse(String catId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_BROWSE); - parameters.put(Flickr.API_KEY, apiKey); if (catId != null) { parameters.put("cat_id", catId); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -124,10 +122,9 @@ public Category browse(String catId) throws FlickrException { public Group getInfo(String groupId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("group_id", groupId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -183,7 +180,6 @@ public Collection search(String text, int perPage, int page) throws Flick GroupList groupList = new GroupList(); Map parameters = new HashMap(); parameters.put("method", METHOD_SEARCH); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("text", text); @@ -194,7 +190,7 @@ public Collection search(String text, int perPage, int page) throws Flick parameters.put("page", String.valueOf(page)); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -230,13 +226,12 @@ public void join(String groupId, Boolean acceptRules) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_JOIN); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("group_id", groupId); if (acceptRules != null) { parameters.put("accept_rules",acceptRules); } - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -256,12 +251,11 @@ public void join(String groupId, Boolean acceptRules) throws FlickrException { public void joinRequest(String groupId,String message, boolean acceptRules) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_JOIN_REQUEST); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("group_id", groupId); parameters.put("message", message); parameters.put("accept_rules", acceptRules); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -279,11 +273,10 @@ public void joinRequest(String groupId,String message, boolean acceptRules) thro public void leave(String groupId, Boolean deletePhotos) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_LEAVE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("group_id", groupId); parameters.put("delete_photos", deletePhotos); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(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/groups/members/MembersInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java index f1ca2270..9fcbec16 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java @@ -1,18 +1,17 @@ package com.flickr4java.flickr.groups.members; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.util.StringUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + /** * Members Interface. * @@ -54,7 +53,6 @@ public MembersList getList(String groupId, Set memberTypes, int MembersList members = new MembersList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("group_id", groupId); @@ -68,7 +66,7 @@ public MembersList getList(String groupId, Set memberTypes, int parameters.put("membertypes", StringUtilities.join(memberTypes, ",")); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/groups/pools/PoolsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java index 216e126c..de308f33 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java @@ -3,18 +3,6 @@ */ package com.flickr4java.flickr.groups.pools; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -26,6 +14,17 @@ import com.flickr4java.flickr.photos.PhotoUtils; import com.flickr4java.flickr.util.StringUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * @author Anthony Eden * @version $Id: PoolsInterface.java,v 1.16 2011/07/02 19:00:59 x-mago Exp $ @@ -65,12 +64,11 @@ public PoolsInterface(String apiKey, String sharedSecret, Transport transport) { public void add(String photoId, String groupId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ADD); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("group_id", groupId); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -91,12 +89,11 @@ public void add(String photoId, String groupId) throws FlickrException { public PhotoContext getContext(String photoId, String groupId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_CONTEXT); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("group_id", groupId); - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -130,9 +127,8 @@ public Collection getGroups() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_GROUPS); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -174,7 +170,6 @@ public PhotoList getPhotos(String groupId, String[] tags, Set ext Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("group_id", groupId); if (tags != null) { @@ -199,7 +194,7 @@ public PhotoList getPhotos(String groupId, String[] tags, Set ext parameters.put(Extras.KEY_EXTRAS, sb.toString()); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -250,12 +245,11 @@ public PhotoList getPhotos(String groupId, String[] tags, int perPage, in public void remove(String photoId, String groupId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_REMOVE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("group_id", groupId); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(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/interestingness/InterestingnessInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java index d0828917..37c3704b 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java @@ -5,17 +5,6 @@ */ package com.flickr4java.flickr.interestingness; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -25,6 +14,16 @@ import com.flickr4java.flickr.photos.PhotoUtils; import com.flickr4java.flickr.util.StringUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +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 till @@ -36,8 +35,6 @@ public class InterestingnessInterface { private static final String KEY_METHOD = "method"; - private static final String KEY_API_KEY = Flickr.API_KEY; - private static final String KEY_DATE = "date"; private static final String KEY_EXTRAS = "extras"; @@ -47,16 +44,17 @@ public class InterestingnessInterface { private static final String KEY_PAGE = "page"; private static final ThreadLocal DATE_FORMATS = new ThreadLocal() { + @Override protected synchronized SimpleDateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd"); } }; - private String apiKey; + private final String apiKey; - private String sharedSecret; + private final String sharedSecret; - private Transport transportAPI; + private final Transport transportAPI; public InterestingnessInterface(String apiKey, String sharedSecret, Transport transportAPI) { this.apiKey = apiKey; @@ -86,7 +84,6 @@ public PhotoList getList(String date, Set extras, int perPage, in PhotoList photos = new PhotoList(); parameters.put(KEY_METHOD, METHOD_GET_LIST); - parameters.put(KEY_API_KEY, apiKey); if (date != null) { parameters.put(KEY_DATE, date); @@ -103,7 +100,7 @@ public PhotoList getList(String date, Set extras, int perPage, in parameters.put(KEY_PAGE, String.valueOf(page)); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -135,7 +132,7 @@ public PhotoList getList(String date, Set extras, int perPage, in public PhotoList getList(Date date, Set extras, int perPage, int page) throws FlickrException { String dateString = null; if (date != null) { - DateFormat df = (DateFormat) DATE_FORMATS.get(); + DateFormat df = DATE_FORMATS.get(); dateString = df.format(date); } return getList(dateString, extras, perPage, page); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java index c2ae6b83..76b83156 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java @@ -1,18 +1,17 @@ package com.flickr4java.flickr.machinetags; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.util.XMLUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + /** * A more precise way to tag and to search photos. * @@ -241,11 +240,11 @@ public class MachinetagsInterface { private static final String METHOD_GET_RECENTVALUES = "flickr.machinetags.getRecentValues"; - private String apiKey; + private final String apiKey; - private String sharedSecret; + private final String sharedSecret; - private Transport transportAPI; + private final Transport transportAPI; public MachinetagsInterface(String apiKey, String sharedSecret, Transport transportAPI) { this.apiKey = apiKey; @@ -268,7 +267,6 @@ public NamespacesList getNamespaces(String predicate, int perPage, in Map parameters = new HashMap(); NamespacesList nsList = new NamespacesList(); parameters.put("method", METHOD_GET_NAMESPACES); - parameters.put(Flickr.API_KEY, apiKey); if (predicate != null) { parameters.put("predicate", predicate); @@ -280,7 +278,7 @@ public NamespacesList getNamespaces(String predicate, int perPage, in parameters.put("page", "" + page); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -317,7 +315,6 @@ public NamespacesList getPairs(String namespace, String predicate, int per Map parameters = new HashMap(); NamespacesList nsList = new NamespacesList(); parameters.put("method", METHOD_GET_PAIRS); - parameters.put(Flickr.API_KEY, apiKey); if (namespace != null) { parameters.put("namespace", namespace); @@ -332,7 +329,7 @@ public NamespacesList getPairs(String namespace, String predicate, int per parameters.put("page", "" + page); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -367,7 +364,6 @@ public NamespacesList getPredicates(String namespace, int perPage, in Map parameters = new HashMap(); NamespacesList nsList = new NamespacesList(); parameters.put("method", METHOD_GET_PREDICATES); - parameters.put(Flickr.API_KEY, apiKey); if (namespace != null) { parameters.put("namespace", namespace); @@ -379,7 +375,7 @@ public NamespacesList getPredicates(String namespace, int perPage, in parameters.put("page", "" + page); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -416,7 +412,6 @@ public NamespacesList getValues(String namespace, String predicate, int p Map parameters = new HashMap(); NamespacesList valuesList = new NamespacesList(); parameters.put("method", METHOD_GET_VALUES); - parameters.put(Flickr.API_KEY, apiKey); if (namespace != null) { parameters.put("namespace", namespace); @@ -431,7 +426,7 @@ public NamespacesList getValues(String namespace, String predicate, int p parameters.put("page", "" + page); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -443,7 +438,10 @@ public NamespacesList getValues(String namespace, String predicate, int p valuesList.setTotal("" + nsNodes.getLength()); for (int i = 0; i < nsNodes.getLength(); i++) { Element element = (Element) nsNodes.item(i); - valuesList.add(parseValue(element)); + Value value = parseValue(element); + value.setNamespace(namespace); + value.setPredicate(predicate); + valuesList.add(value); } return valuesList; } @@ -466,7 +464,6 @@ public NamespacesList getRecentValues(String namespace, String predicate, Map parameters = new HashMap(); NamespacesList valuesList = new NamespacesList(); parameters.put("method", METHOD_GET_RECENTVALUES); - parameters.put(Flickr.API_KEY, apiKey); if (namespace != null) { parameters.put("namespace", namespace); @@ -478,7 +475,7 @@ public NamespacesList getRecentValues(String namespace, String predicate, parameters.put("added_since", Long.toString(addedSince.getTime() / 1000L)); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/machinetags/Value.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/Value.java index f1481b86..c39fda4e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/Value.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/Value.java @@ -60,7 +60,7 @@ public void setFirstAdded(long datePosted) { public void setFirstAdded(String timestamp) { if (timestamp == null || "".equals(timestamp)) return; - setFirstAdded(Long.parseLong(timestamp) * (long) 1000); + setFirstAdded(Long.parseLong(timestamp) * 1000); } public void setLastAdded(Date date) { @@ -74,7 +74,7 @@ public void setLastAdded(long date) { public void setLastAdded(String timestamp) { if (timestamp == null || "".equals(timestamp)) return; - setLastAdded(Long.parseLong(timestamp) * (long) 1000); + setLastAdded(Long.parseLong(timestamp) * 1000); } public void setUsage(String predicates) { @@ -87,4 +87,10 @@ public void setUsage(String predicates) { public void setUsage(int usage) { this.usage = usage; } + + @Override + public String toString() { + + return String.format("%s:%s=%s", namespace, predicate, value); + } } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java index fadc1497..b7b9ce8f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java @@ -1,14 +1,5 @@ package com.flickr4java.flickr.panda; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -18,6 +9,14 @@ import com.flickr4java.flickr.util.StringUtilities; import com.flickr4java.flickr.util.XMLUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + /** * Flickr Panda. * @@ -55,9 +54,8 @@ public ArrayList getList() throws FlickrException { ArrayList pandas = new ArrayList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -92,7 +90,6 @@ public ArrayList getList() throws FlickrException { public PhotoList getPhotos(Panda panda, Set extras, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("panda_name", panda.getName()); @@ -106,7 +103,7 @@ public PhotoList getPhotos(Panda panda, Set extras, int perPage, parameters.put("page", Integer.toString(page)); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/PeopleInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java index 52e4309a..51d8294d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java @@ -3,7 +3,6 @@ */ 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; @@ -81,11 +80,10 @@ public PeopleInterface(String apiKey, String sharedSecret, Transport transportAP public User findByEmail(String email) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_FIND_BY_EMAIL); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("find_email", email); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -109,11 +107,10 @@ public User findByEmail(String email) throws FlickrException { public User findByUsername(String username) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_FIND_BY_USERNAME); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("username", username); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -137,11 +134,10 @@ public User findByUsername(String username) throws FlickrException { public User getInfo(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -191,11 +187,10 @@ public Collection getPublicGroups(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PUBLIC_GROUPS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -239,7 +234,6 @@ public PhotoList getPublicPhotos(String userId, Set extras, int p Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PUBLIC_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); @@ -254,7 +248,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, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -283,9 +277,8 @@ public PhotoList getPublicPhotos(String userId, Set extras, int p public User getUploadStatus() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_UPLOAD_STATUS); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -310,7 +303,6 @@ public PhotoList getPhotos(String userId, String safeSearch, Date minUplo Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); if (safeSearch != null) { @@ -344,7 +336,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, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -368,7 +360,6 @@ public PhotoList getPhotosOf(String userId, String ownerId, Set e Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PHOTOS_OF); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); if (ownerId != null) { @@ -384,7 +375,7 @@ public PhotoList getPhotosOf(String userId, String ownerId, Set e parameters.put("page", "" + page); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -495,10 +486,9 @@ public GroupList getGroups(String userId) throws FlickrException { GroupList groupList = new GroupList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_GROUPS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/photos/PhotoUtils.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java index f90dacd6..ec3c6b5b 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java @@ -1,15 +1,15 @@ package com.flickr4java.flickr.photos; -import java.util.ArrayList; -import java.util.List; +import com.flickr4java.flickr.people.User; +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. diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java index 267f57c0..3cd2ccb6 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java @@ -3,7 +3,6 @@ */ package com.flickr4java.flickr.photos; -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.REST; import com.flickr4java.flickr.RequestContext; @@ -145,12 +144,11 @@ public synchronized GeoInterface getGeoInterface() { public void addTags(String photoId, String[] tags) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ADD_TAGS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("tags", StringUtilities.join(tags, " ", true)); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -167,12 +165,11 @@ public void addTags(String photoId, String[] tags) throws FlickrException { public void delete(String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_DELETE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); // Note: This method requires an HTTP POST request. - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -194,11 +191,10 @@ public List getAllContexts(String photoId) throws FlickrException { List list = new ArrayList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_ALL_CONTEXTS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -235,7 +231,6 @@ public PhotoList getContactsPhotos(int count, boolean justFriends, boolea Map parameters = new HashMap(); parameters.put("method", METHOD_GET_CONTACTS_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); if (count > 0) { parameters.put("count", Integer.toString(count)); @@ -250,7 +245,7 @@ public PhotoList getContactsPhotos(int count, boolean justFriends, boolea parameters.put("include_self", "1"); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -297,7 +292,6 @@ public PhotoList getContactsPublicPhotos(String userId, Set extra Map parameters = new HashMap(); parameters.put("method", METHOD_GET_CONTACTS_PUBLIC_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); @@ -326,7 +320,7 @@ public PhotoList getContactsPublicPhotos(String userId, Set extra parameters.put(Extras.KEY_EXTRAS, sb.toString()); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -356,11 +350,10 @@ public PhotoList getContactsPublicPhotos(String userId, Set extra public PhotoContext getContext(String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_CONTEXT); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -405,7 +398,6 @@ public Collection getCounts(Date[] dates, Date[] takenDates) throws Map parameters = new HashMap(); parameters.put("method", METHOD_GET_COUNTS); - parameters.put(Flickr.API_KEY, apiKey); if (dates == null && takenDates == null) { throw new IllegalArgumentException("You must provide a value for either dates or takenDates"); @@ -427,7 +419,7 @@ public Collection getCounts(Date[] dates, Date[] takenDates) throws parameters.put("taken_dates", StringUtilities.join(takenDateList, ",")); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -461,14 +453,13 @@ public Collection getCounts(Date[] dates, Date[] takenDates) throws public Collection getExif(String photoId, String secret) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_EXIF); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); if (secret != null) { parameters.put("secret", secret); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -503,7 +494,6 @@ public Collection getFavorites(String photoId, int perPage, int page) thro Map parameters = new HashMap(); parameters.put("method", METHOD_GET_FAVORITES); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); @@ -515,7 +505,7 @@ public Collection getFavorites(String photoId, int perPage, int page) thro parameters.put("page", Integer.toString(page)); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -551,14 +541,13 @@ public Collection getFavorites(String photoId, int perPage, int page) thro public Photo getInfo(String photoId, String secret) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); if (secret != null) { parameters.put("secret", secret); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -584,7 +573,6 @@ public PhotoList getNotInSet(int perPage, int page) throws FlickrExceptio Map parameters = new HashMap(); parameters.put("method", PhotosInterface.METHOD_GET_NOT_IN_SET); - parameters.put(Flickr.API_KEY, apiKey); RequestContext requestContext = RequestContext.getRequestContext(); @@ -600,7 +588,7 @@ public PhotoList getNotInSet(int perPage, int page) throws FlickrExceptio parameters.put("page", Integer.toString(page)); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -631,11 +619,10 @@ public PhotoList getNotInSet(int perPage, int page) throws FlickrExceptio public Permissions getPerms(String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PERMS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -667,7 +654,6 @@ public Permissions getPerms(String photoId) throws FlickrException { public PhotoList getRecent(Set extras, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_RECENT); - parameters.put(Flickr.API_KEY, apiKey); if (extras != null && !extras.isEmpty()) { parameters.put(Extras.KEY_EXTRAS, StringUtilities.join(extras, ",")); @@ -679,7 +665,7 @@ public PhotoList getRecent(Set extras, int perPage, int page) thr parameters.put("page", Integer.toString(page)); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -723,11 +709,10 @@ public Collection getSizes(String photoId, boolean sign) throws FlickrExce Map parameters = new HashMap(); parameters.put("method", METHOD_GET_SIZES); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -760,7 +745,6 @@ public Collection getSizes(String photoId, boolean sign) throws FlickrExce public PhotoList getUntagged(int perPage, int page) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_UNTAGGED); - parameters.put(Flickr.API_KEY, apiKey); if (perPage > 0) { parameters.put("per_page", Integer.toString(perPage)); @@ -769,7 +753,7 @@ public PhotoList getUntagged(int perPage, int page) throws FlickrExceptio parameters.put("page", Integer.toString(page)); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -820,7 +804,6 @@ public PhotoList getWithGeoData(Date minUploadDate, Date maxUploadDate, D Set extras, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_WITH_GEO_DATA); - parameters.put(Flickr.API_KEY, apiKey); if (minUploadDate != null) { parameters.put("min_upload_date", Long.toString(minUploadDate.getTime() / 1000L)); @@ -850,7 +833,7 @@ public PhotoList getWithGeoData(Date minUploadDate, Date maxUploadDate, D parameters.put("page", Integer.toString(page)); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -901,7 +884,6 @@ public PhotoList getWithoutGeoData(Date minUploadDate, Date maxUploadDate Set extras, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_WITHOUT_GEO_DATA); - parameters.put(Flickr.API_KEY, apiKey); if (minUploadDate != null) { parameters.put("min_upload_date", Long.toString(minUploadDate.getTime() / 1000L)); @@ -931,7 +913,7 @@ public PhotoList getWithoutGeoData(Date minUploadDate, Date maxUploadDate parameters.put("page", Integer.toString(page)); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -962,7 +944,6 @@ public PhotoList getWithoutGeoData(Date minUploadDate, Date maxUploadDate public PhotoList recentlyUpdated(Date minDate, Set extras, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_RECENTLY_UPDATED); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("min_date", Long.toString(minDate.getTime() / 1000L)); @@ -976,7 +957,7 @@ public PhotoList recentlyUpdated(Date minDate, Set extras, int pe parameters.put("page", Integer.toString(page)); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -997,11 +978,10 @@ public PhotoList recentlyUpdated(Date minDate, Set extras, int pe public void removeTag(String tagId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_REMOVE_TAG); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("tag_id", tagId); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -1024,7 +1004,6 @@ public PhotoList search(SearchParameters params, int perPage, int page) t Map parameters = new HashMap(); parameters.put("method", METHOD_SEARCH); - parameters.put(Flickr.API_KEY, apiKey); parameters.putAll(params.getAsParameters()); @@ -1035,7 +1014,7 @@ public PhotoList search(SearchParameters params, int perPage, int page) t parameters.put("page", "" + page); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -1070,7 +1049,6 @@ public PhotoList searchInterestingness(SearchParameters params, int perPa Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INTERESTINGNESS); - parameters.put(Flickr.API_KEY, apiKey); parameters.putAll(params.getAsParameters()); @@ -1081,7 +1059,7 @@ public PhotoList searchInterestingness(SearchParameters params, int perPa parameters.put("page", Integer.toString(page)); } - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -1130,12 +1108,11 @@ public PhotoList searchInterestingness(SearchParameters params, int perPa public void setContentType(String photoId, String contentType) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SET_CONTENTTYPE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("content_type", contentType); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -1159,7 +1136,6 @@ public void setContentType(String photoId, String contentType) throws FlickrExce public void setDates(String photoId, Date datePosted, Date dateTaken, String dateTakenGranularity) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SET_DATES); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); @@ -1175,7 +1151,7 @@ public void setDates(String photoId, Date datePosted, Date dateTaken, String dat parameters.put("date_taken_granularity", dateTakenGranularity); } - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -1197,13 +1173,12 @@ public void setDates(String photoId, Date datePosted, Date dateTaken, String dat public void setMeta(String photoId, String title, String description) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SET_META); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("title", title); parameters.put("description", description); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -1223,7 +1198,6 @@ public void setMeta(String photoId, String title, String description) throws Fli public void setPerms(String photoId, Permissions permissions) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SET_PERMS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("is_public", permissions.isPublicFlag() ? "1" : "0"); @@ -1232,7 +1206,7 @@ public void setPerms(String photoId, Permissions permissions) throws FlickrExcep parameters.put("perm_comment", Integer.toString(permissions.getComment())); parameters.put("perm_addmeta", Integer.toString(permissions.getAddmeta())); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -1258,7 +1232,6 @@ public void setPerms(String photoId, Permissions permissions) throws FlickrExcep public void setSafetyLevel(String photoId, String safetyLevel, Boolean hidden) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SET_SAFETYLEVEL); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); @@ -1270,7 +1243,7 @@ public void setSafetyLevel(String photoId, String safetyLevel, Boolean hidden) t parameters.put("hidden", hidden.booleanValue() ? "1" : "0"); } - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -1290,12 +1263,11 @@ public void setSafetyLevel(String photoId, String safetyLevel, Boolean hidden) t public void setTags(String photoId, String[] tags) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SET_TAGS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("tags", StringUtilities.join(tags, " ", true)); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(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/photos/comments/CommentsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java index ff3c4a2a..9e6bae28 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java @@ -1,16 +1,5 @@ package com.flickr4java.flickr.photos.comments; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -21,6 +10,16 @@ import com.flickr4java.flickr.util.StringUtilities; import com.flickr4java.flickr.util.XMLUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * Work on Comments. * @@ -65,13 +64,12 @@ public CommentsInterface(String apiKey, String sharedSecret, Transport transport public String addComment(String photoId, String commentText) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ADD_COMMENT); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("comment_text", commentText); // Note: This method requires an HTTP POST request. - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -91,12 +89,11 @@ public String addComment(String photoId, String commentText) throws FlickrExcept public void deleteComment(String commentId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_DELETE_COMMENT); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("comment_id", commentId); // Note: This method requires an HTTP POST request. - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -118,13 +115,12 @@ public void deleteComment(String commentId) throws FlickrException { public void editComment(String commentId, String commentText) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_EDIT_COMMENT); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("comment_id", commentId); parameters.put("comment_text", commentText); // Note: This method requires an HTTP POST request. - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -145,10 +141,9 @@ public void editComment(String commentId, String commentText) throws FlickrExcep public List getList(String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -218,7 +213,6 @@ public PhotoList getRecentForContacts(Date lastComment, ArrayList PhotoList photos = new PhotoList(); Map parameters = new HashMap(); parameters.put("method", PhotosInterface.METHOD_GET_NOT_IN_SET); - parameters.put(Flickr.API_KEY, apiKey); if (lastComment != null) { parameters.put("last_comment", String.valueOf(lastComment.getTime() / 1000L)); @@ -239,7 +233,7 @@ public PhotoList getRecentForContacts(Date lastComment, ArrayList parameters.put("page", Integer.toString(page)); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/photos/geo/GeoInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java index d275aeb3..cc6334e4 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java @@ -1,13 +1,5 @@ package com.flickr4java.flickr.photos.geo; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -18,6 +10,13 @@ import com.flickr4java.flickr.util.StringUtilities; import com.flickr4java.flickr.util.XMLUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + /** * Access to the flickr.photos.geo methods. * @@ -69,10 +68,9 @@ public GeoInterface(String apiKey, String sharedSecret, Transport transport) { public GeoData getLocation(String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LOCATION); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -107,10 +105,9 @@ public GeoData getLocation(String photoId) throws FlickrException { public GeoPermissions getPerms(String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PERMS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -137,11 +134,10 @@ public GeoPermissions getPerms(String photoId) throws FlickrException { public void removeLocation(String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_REMOVE_LOCATION); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); // Note: This method requires an HTTP POST request. - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); // This method has no specific response - It returns an empty sucess response // if it completes without error. if (response.isError()) { @@ -165,7 +161,6 @@ public void removeLocation(String photoId) throws FlickrException { public void setLocation(String photoId, GeoData location) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SET_LOCATION); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("lat", String.valueOf(location.getLatitude())); @@ -176,7 +171,7 @@ public void setLocation(String photoId, GeoData location) throws FlickrException } // Note: This method requires an HTTP POST request. - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); // This method has no specific response - It returns an empty sucess response // if it completes without error. if (response.isError()) { @@ -198,7 +193,6 @@ public void setLocation(String photoId, GeoData location) throws FlickrException public void setPerms(String photoId, GeoPermissions perms) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SET_PERMS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("is_public", perms.isPublic() ? "1" : "0"); parameters.put("is_contact", perms.isContact() ? "1" : "0"); @@ -206,7 +200,7 @@ public void setPerms(String photoId, GeoPermissions perms) throws FlickrExceptio parameters.put("is_family", perms.isFamily() ? "1" : "0"); // Note: This method requires an HTTP POST request. - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); // This method has no specific response - It returns an empty sucess response // if it completes without error. if (response.isError()) { @@ -231,7 +225,6 @@ public void setPerms(String photoId, GeoPermissions perms) throws FlickrExceptio public void batchCorrectLocation(GeoData location, String placeId, String woeId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_BATCH_CORRECT_LOCATION); - parameters.put(Flickr.API_KEY, apiKey); if (placeId != null) { parameters.put("place_id", placeId); @@ -244,7 +237,7 @@ public void batchCorrectLocation(GeoData location, String placeId, String woeId) parameters.put("accuracy", Integer.toString(location.getAccuracy())); // Note: This method requires an HTTP POST request. - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); // This method has no specific response - It returns an empty sucess response // if it completes without error. if (response.isError()) { @@ -265,7 +258,6 @@ public void batchCorrectLocation(GeoData location, String placeId, String woeId) public void correctLocation(String photoId, String placeId, String woeId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_CORRECT_LOCATION); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); if (placeId != null) { @@ -276,7 +268,7 @@ public void correctLocation(String photoId, String placeId, String woeId) throws } // Note: This method requires an HTTP POST request. - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); // This method has no specific response - It returns an empty sucess response // if it completes without error. if (response.isError()) { @@ -299,7 +291,6 @@ public PhotoList photosForLocation(GeoData location, Set extras, Map parameters = new HashMap(); PhotoList photos = new PhotoList(); parameters.put("method", METHOD_PHOTOS_FOR_LOCATION); - parameters.put(Flickr.API_KEY, apiKey); if (extras.size() > 0) { parameters.put("extras", StringUtilities.join(extras, ",")); @@ -313,7 +304,7 @@ public PhotoList photosForLocation(GeoData location, Set extras, parameters.put("lat", Float.toString(location.getLatitude())); parameters.put("lon", Float.toString(location.getLongitude())); parameters.put("accuracy", Integer.toString(location.getAccuracy())); - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -347,13 +338,12 @@ public PhotoList photosForLocation(GeoData location, Set extras, public void setContext(String photoId, int context) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SET_CONTEXT); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("context", "" + context); // Note: This method requires an HTTP POST request. - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); // This method has no specific response - It returns an empty sucess response // if it completes without error. if (response.isError()) { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java index 21c4d940..3c34198e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java @@ -4,20 +4,19 @@ package com.flickr4java.flickr.photos.licenses; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.Response; +import com.flickr4java.flickr.Transport; + +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; - /** * Interface for working with copyright licenses. * @@ -52,9 +51,8 @@ public LicensesInterface(String apiKey, String sharedSecret, Transport transport public Collection getInfo() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -86,12 +84,11 @@ public Collection getInfo() throws FlickrException { public void setLicense(String photoId, int licenseId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SET_LICENSE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("license_id", Integer.toString(licenseId)); // Note: This method requires an HTTP POST request. - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(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/photos/notes/NotesInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java index bf6fa16d..e29c23f2 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java @@ -4,18 +4,17 @@ package com.flickr4java.flickr.photos.notes; -import java.awt.Rectangle; -import java.util.HashMap; -import java.util.Map; - -import org.w3c.dom.Element; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.photos.Note; +import org.w3c.dom.Element; + +import java.awt.Rectangle; +import java.util.HashMap; +import java.util.Map; + /** * @author Anthony Eden */ @@ -51,7 +50,6 @@ public NotesInterface(String apiKey, String sharedSecret, Transport transportAPI public Note add(String photoId, Note note) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ADD); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); Rectangle bounds = note.getBounds(); @@ -66,7 +64,7 @@ public Note add(String photoId, Note note) throws FlickrException { parameters.put("note_text", text); } - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -86,11 +84,10 @@ public Note add(String photoId, Note note) throws FlickrException { public void delete(String noteId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_DELETE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("note_id", noteId); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -106,7 +103,6 @@ public void delete(String noteId) throws FlickrException { public void edit(Note note) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_EDIT); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("note_id", note.getId()); Rectangle bounds = note.getBounds(); @@ -121,7 +117,7 @@ public void edit(Note note) throws FlickrException { parameters.put("note_text", text); } - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(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/photos/people/PeopleInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java index a26d7155..915b76e3 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java @@ -3,20 +3,19 @@ */ package com.flickr4java.flickr.photos.people; -import java.awt.Rectangle; -import java.util.HashMap; -import java.util.Map; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.people.User; import com.flickr4java.flickr.people.UserList; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.awt.Rectangle; +import java.util.HashMap; +import java.util.Map; + /** * @author acaplan * @@ -56,7 +55,6 @@ public PeopleInterface(String apiKey, String sharedSecret, Transport transportAP public void add(String photoId, String userId, Rectangle bounds) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ADD); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("user_id", userId); @@ -67,7 +65,7 @@ public void add(String photoId, String userId, Rectangle bounds) throws FlickrEx parameters.put("person_h", bounds.height); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -83,12 +81,11 @@ public void add(String photoId, String userId, Rectangle bounds) throws FlickrEx public void delete(String photoId, String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_DELETE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("user_id", userId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -104,12 +101,11 @@ public void delete(String photoId, String userId) throws FlickrException { public void deleteCoords(String photoId, String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_DELETE_COORDS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("user_id", userId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -126,7 +122,6 @@ public void deleteCoords(String photoId, String userId) throws FlickrException { public void editCoords(String photoId, String userId, Rectangle bounds) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_EDIT_COORDS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("user_id", userId); @@ -135,7 +130,7 @@ public void editCoords(String photoId, String userId, Rectangle bounds) throws F parameters.put("person_w", bounds.width); parameters.put("person_h", bounds.height); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -144,11 +139,10 @@ public void editCoords(String photoId, String userId, Rectangle bounds) throws F public UserList getList(String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/photos/suggestions/SuggestionsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java index e0f5afa1..167d88a9 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java @@ -3,17 +3,16 @@ */ package com.flickr4java.flickr.photos.suggestions; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.w3c.dom.Element; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; +import org.w3c.dom.Element; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * @author acaplan * @@ -57,10 +56,9 @@ public void removeSuggestion(String suggestionId) throws FlickrException { private void act(String suggestionId, String method) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", method); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("suggestion_id", suggestionId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -69,7 +67,6 @@ private void act(String suggestionId, String method) throws FlickrException { public void suggestLocation(String photoId, double lat, double lon, int accuracy, String woe_id, String place_id, String note) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SUGGEST_LOCATION); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("lat", lat); parameters.put("lon", lon); @@ -86,7 +83,7 @@ public void suggestLocation(String photoId, double lat, double lon, int accuracy parameters.put("note", note); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -95,11 +92,10 @@ public void suggestLocation(String photoId, double lat, double lon, int accuracy public List getList(String photoId, String statusId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("status_id", statusId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/photos/transform/TransformInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java index a15bfc78..18c3ff01 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java @@ -4,7 +4,6 @@ package com.flickr4java.flickr.photos.transform; -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -43,12 +42,11 @@ public TransformInterface(String apiKey, String sharedSecret, Transport transpor public void rotate(String photoId, int degrees) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ROTATE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("degrees", String.valueOf(degrees)); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(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/photos/upload/UploadInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java index 3ffa9ad5..edc62ed7 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java @@ -1,5 +1,12 @@ package com.flickr4java.flickr.photos.upload; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.Response; +import com.flickr4java.flickr.Transport; + +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -7,14 +14,6 @@ import java.util.Map; import java.util.Set; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; - /** * Checks the status of asynchronous photo upload tickets. * @@ -47,7 +46,6 @@ public UploadInterface(String apiKey, String sharedSecret, Transport transport) public List checkTickets(Set tickets) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_CHECK_TICKETS); - parameters.put(Flickr.API_KEY, apiKey); StringBuffer sb = new StringBuffer(); Iterator it = tickets.iterator(); @@ -64,7 +62,7 @@ public List checkTickets(Set tickets) throws FlickrException { } parameters.put("tickets", sb.toString()); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(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/photosets/PhotosetsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java index 3d71acfa..2e06352d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java @@ -87,12 +87,11 @@ public PhotosetsInterface(String apiKey, String sharedSecret, Transport transpor public void addPhoto(String photosetId, String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ADD_PHOTO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_id", photoId); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -113,13 +112,12 @@ public void addPhoto(String photosetId, String photoId) throws FlickrException { public Photoset create(String title, String description, String primaryPhotoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_CREATE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("title", title); parameters.put("description", description); parameters.put("primary_photo_id", primaryPhotoId); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -140,11 +138,10 @@ public Photoset create(String title, String description, String primaryPhotoId) public void delete(String photosetId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_DELETE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -164,7 +161,6 @@ public void delete(String photosetId) throws FlickrException { public void editMeta(String photosetId, String title, String description) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_EDIT_META); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("title", title); @@ -172,7 +168,7 @@ public void editMeta(String photosetId, String title, String description) throws parameters.put("description", description); } - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -192,13 +188,12 @@ public void editMeta(String photosetId, String title, String description) throws public void editPhotos(String photosetId, String primaryPhotoId, String[] photoIds) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_EDIT_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("primary_photo_id", primaryPhotoId); parameters.put("photo_ids", StringUtilities.join(photoIds, ",")); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -219,12 +214,11 @@ public void editPhotos(String photosetId, String primaryPhotoId, String[] photoI public PhotoContext getContext(String photoId, String photosetId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_CONTEXT); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("photoset_id", photosetId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -262,11 +256,10 @@ public PhotoContext getContext(String photoId, String photosetId) throws FlickrE public Photoset getInfo(String photosetId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -330,7 +323,6 @@ public Photosets getList(String userId) throws FlickrException { public Photosets getList(String userId, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); if (userId != null) { parameters.put("user_id", userId); @@ -344,7 +336,7 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce parameters.put("page", String.valueOf(page)); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -396,7 +388,6 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce public int getPhotosetCount(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); if (userId != null) { parameters.put("user_id", userId); @@ -406,7 +397,7 @@ public int getPhotosetCount(String userId) throws FlickrException { parameters.put("per_page", String.valueOf(1)); parameters.put("page", String.valueOf(1)); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -444,7 +435,6 @@ public PhotoList getPhotos(String photosetId, Set extras, int pri PhotoList photos = new PhotoList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); @@ -464,7 +454,7 @@ public PhotoList getPhotos(String photosetId, Set extras, int pri parameters.put(Extras.KEY_EXTRAS, StringUtilities.join(extras, ",")); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -523,11 +513,10 @@ public PhotoList getPhotos(String photosetId, int perPage, int page) thro public void orderSets(String[] photosetIds) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ORDER_SETS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_ids", StringUtilities.join(photosetIds, ",")); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -545,12 +534,11 @@ public void orderSets(String[] photosetIds) throws FlickrException { public void removePhoto(String photosetId, String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_REMOVE_PHOTO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_id", photoId); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -568,12 +556,11 @@ public void removePhoto(String photosetId, String photoId) throws FlickrExceptio public void removePhotos(String photosetId, String photoIds) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_REMOVE_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_ids", photoIds); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -591,12 +578,11 @@ public void removePhotos(String photosetId, String photoIds) throws FlickrExcept public void reorderPhotos(String photosetId, String photoIds) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_REORDER_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_ids", photoIds); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -614,12 +600,11 @@ public void reorderPhotos(String photosetId, String photoIds) throws FlickrExcep public void setPrimaryPhoto(String photosetId, String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SET_PRIMARY_PHOTO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_id", photoId); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(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/photosets/comments/PhotosetsCommentsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java index e18ad839..4b58cf69 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java @@ -1,21 +1,20 @@ package com.flickr4java.flickr.photosets.comments; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.photos.comments.Comment; import com.flickr4java.flickr.util.XMLUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * Access to the flickr.photosets.comments methods. * @@ -56,13 +55,12 @@ public PhotosetsCommentsInterface(String apiKey, String sharedSecret, Transport public String addComment(String photosetId, String commentText) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ADD_COMMENT); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("comment_text", commentText); // Note: This method requires an HTTP POST request. - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -82,12 +80,11 @@ public String addComment(String photosetId, String commentText) throws FlickrExc public void deleteComment(String commentId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_DELETE_COMMENT); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("comment_id", commentId); // Note: This method requires an HTTP POST request. - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -106,13 +103,12 @@ public void deleteComment(String commentId) throws FlickrException { public void editComment(String commentId, String commentText) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_EDIT_COMMENT); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("comment_id", commentId); parameters.put("comment_text", commentText); // Note: This method requires an HTTP POST request. - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -132,11 +128,10 @@ public void editComment(String commentId, String commentText) throws FlickrExcep public List getList(String photosetId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/places/PlacesInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java index ca8be1a5..8ae6acb6 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java @@ -1,15 +1,5 @@ package com.flickr4java.flickr.places; -import java.text.DateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -18,6 +8,15 @@ import com.flickr4java.flickr.util.StringUtilities; import com.flickr4java.flickr.util.XMLUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + /** * Lookup Flickr Places. *

@@ -158,11 +157,10 @@ public PlacesList find(String query) throws FlickrException { Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_FIND); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("query", query); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -237,13 +235,12 @@ public PlacesList findByLatLon(double latitude, double longitude, int acc Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_FIND_BY_LATLON); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("lat", "" + Double.toString(latitude)); parameters.put("lon", "" + Double.toString(longitude)); parameters.put("accuracy", "" + Integer.toString(accuracy)); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -280,7 +277,6 @@ public PlacesList getChildrenWithPhotosPublic(String placeId, String woeI Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_GET_CHILDREN_WITH_PHOTOS_PUBLIC); - parameters.put(Flickr.API_KEY, apiKey); if (placeId != null) { parameters.put("place_id", placeId); @@ -289,7 +285,7 @@ public PlacesList getChildrenWithPhotosPublic(String placeId, String woeI parameters.put("woe_id", woeId); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -323,7 +319,6 @@ public PlacesList getChildrenWithPhotosPublic(String placeId, String woeI public Location getInfo(String placeId, String woeId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); - parameters.put(Flickr.API_KEY, apiKey); if (placeId != null) { parameters.put("place_id", placeId); @@ -332,7 +327,7 @@ public Location getInfo(String placeId, String woeId) throws FlickrException { parameters.put("woe_id", woeId); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -354,11 +349,10 @@ public Location getInfo(String placeId, String woeId) throws FlickrException { public Location getInfoByUrl(String url) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO_BY_URL); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("url", url); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -379,9 +373,8 @@ public Location getInfoByUrl(String url) throws FlickrException { public ArrayList getPlaceTypes() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PLACETYPES); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -421,7 +414,6 @@ public ArrayList getShapeHistory(String placeId, String woeId) throws F ArrayList shapeList = new ArrayList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_SHAPEHISTORY); - parameters.put(Flickr.API_KEY, apiKey); if (placeId != null) { parameters.put("place_id", placeId); @@ -430,7 +422,7 @@ public ArrayList getShapeHistory(String placeId, String woeId) throws F parameters.put("woe_id", woeId); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -459,7 +451,6 @@ public PlacesList getTopPlacesList(int placeType, Date date, String place Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_GET_TOP_PLACES_LIST); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type", intPlaceTypeToString(placeType)); if (placeId != null) { @@ -472,7 +463,7 @@ public PlacesList getTopPlacesList(int placeType, Date date, String place parameters.put("date", ((DateFormat) SearchParameters.DATE_FORMATS.get()).format(date)); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -517,12 +508,11 @@ public PlacesList placesForBoundingBox(int placeType, String bbox) throws Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_PLACES_FOR_BOUNDINGBOX); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type", intPlaceTypeToString(placeType)); parameters.put("bbox", bbox); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -560,7 +550,6 @@ public PlacesList placesForContacts(int placeType, String placeId, String Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_PLACES_FOR_CONTACTS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type", intPlaceTypeToString(placeType)); if (placeId != null) { @@ -576,7 +565,7 @@ public PlacesList placesForContacts(int placeType, String placeId, String parameters.put("contacts", contacts); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -631,7 +620,6 @@ public PlacesList placesForTags(int placeTypeId, String woeId, String pla Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_PLACES_FOR_TAGS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type_id", Integer.toString(placeTypeId)); if (woeId != null) { @@ -668,7 +656,7 @@ public PlacesList placesForTags(int placeTypeId, String woeId, String pla parameters.put("max_taken_date", ((DateFormat) SearchParameters.MYSQL_DATE_FORMATS.get()).format(maxTakenDate)); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -713,7 +701,6 @@ public PlacesList placesForUser(int placeType, String woeId, String place Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_PLACES_FOR_USER); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type", intPlaceTypeToString(placeType)); if (placeId != null) { @@ -738,7 +725,7 @@ public PlacesList placesForUser(int placeType, String woeId, String place parameters.put("max_taken_date", ((DateFormat) SearchParameters.MYSQL_DATE_FORMATS.get()).format(maxTakenDate)); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -767,11 +754,10 @@ public PlacesList placesForUser(int placeType, String woeId, String place public Location resolvePlaceId(String placeId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_RESOLVE_PLACE_ID); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_id", placeId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -795,11 +781,10 @@ public Location resolvePlaceId(String placeId) throws FlickrException { public Location resolvePlaceURL(String flickrPlacesUrl) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_RESOLVE_PLACE_URL); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("url", flickrPlacesUrl); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -834,7 +819,6 @@ public ArrayList tagsForPlace(String woeId, String placeId, Date minUploadD Map parameters = new HashMap(); ArrayList tagsList = new ArrayList(); parameters.put("method", METHOD_TAGS_FOR_PLACE); - parameters.put(Flickr.API_KEY, apiKey); if (woeId != null) { parameters.put("woe_id", woeId); @@ -855,7 +839,7 @@ public ArrayList tagsForPlace(String woeId, String placeId, Date minUploadD parameters.put("max_taken_date", ((DateFormat) SearchParameters.MYSQL_DATE_FORMATS.get()).format(maxTakenDate)); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/prefs/PrefsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java index 1c51b0d2..a9d10c8b 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java @@ -3,16 +3,15 @@ */ package com.flickr4java.flickr.prefs; -import java.util.HashMap; -import java.util.Map; - -import org.w3c.dom.Element; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; +import org.w3c.dom.Element; + +import java.util.HashMap; +import java.util.Map; + /** * Requesting preferences for the current authenticated user. * @@ -62,9 +61,8 @@ public PrefsInterface(String apiKey, String sharedSecret, Transport transportAPI public String getContentType() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_CONTENT_TYPE); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -88,9 +86,8 @@ public String getContentType() throws FlickrException { public int getGeoPerms() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_GEO_PERMS); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -115,9 +112,8 @@ public int getGeoPerms() throws FlickrException { public boolean getHidden() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_HIDDEN); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -138,9 +134,8 @@ public boolean getHidden() throws FlickrException { public String getSafetyLevel() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_SAFETY_LEVEL); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -164,9 +159,8 @@ public String getSafetyLevel() throws FlickrException { public int getPrivacy() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PRIVACY); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/reflection/ReflectionInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java index f062bc24..3838cc52 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java @@ -3,21 +3,20 @@ */ 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.w3c.dom.Element; +import org.w3c.dom.NodeList; + import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; -import com.flickr4java.flickr.util.XMLUtilities; - /** * Interface for testing the complete implementation of all Flickr-methods. *

@@ -64,11 +63,10 @@ public ReflectionInterface(String apiKey, String sharedSecret, Transport transpo public Method getMethodInfo(String methodName) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_METHOD_INFO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("method_name", methodName); - Response response = transport.get(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -183,9 +181,8 @@ public Method getMethodInfo(String methodName) throws FlickrException { public Collection getMethods() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_METHODS); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transport.get(transport.getPath(), parameters, 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/stats/StatsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java index d3351615..bbfe07bf 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java @@ -1,6 +1,5 @@ package com.flickr4java.flickr.stats; -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.FlickrRuntimeException; import com.flickr4java.flickr.Response; @@ -141,9 +140,8 @@ public Stats getCollectionStats(String collectionId, Date date) throws FlickrExc public List getCSVFiles() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_CSV_FILES); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -324,7 +322,6 @@ public PhotoList getPopularPhotos(Date date, StatsSort sort, int perPage, Map parameters = new HashMap(); parameters.put("method", METHOD_GET_POPULAR_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); if (date != null) { parameters.put("date", String.valueOf(date.getTime() / 1000L)); } @@ -333,7 +330,7 @@ public PhotoList getPopularPhotos(Date date, StatsSort sort, int perPage, } addPaginationParameters(parameters, perPage, page); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -354,12 +351,11 @@ public PhotoList getPopularPhotos(Date date, StatsSort sort, int perPage, public Totals getTotalViews(Date date) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_TOTAL_VIEWS); - parameters.put(Flickr.API_KEY, apiKey); if (date != null) { parameters.put("date", String.valueOf(date.getTime() / 1000L)); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -372,14 +368,13 @@ public Totals getTotalViews(Date date) throws FlickrException { private DomainList getDomains(String method, String idKey, String idValue, Date date, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", method); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("date", String.valueOf(date.getTime() / 1000L)); if (idValue != null) { parameters.put(idKey, idValue); } addPaginationParameters(parameters, perPage, page); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -414,14 +409,13 @@ private ReferrerList getReferrers(String method, String domain, String idKey, St Map parameters = new HashMap(); parameters.put("method", method); parameters.put("domain", domain); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("date", String.valueOf(date.getTime() / 1000L)); if (idValue != null) { parameters.put(idKey, idValue); } addPaginationParameters(parameters, perPage, page); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -456,13 +450,12 @@ private ReferrerList parseReferrers(Response response) { private Stats getStats(String method, String idKey, String idValue, Date date) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", method); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("date", String.valueOf(date.getTime() / 1000L)); if (idValue != null) { parameters.put(idKey, idValue); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/tags/Tag.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/Tag.java index 9f8fb4b5..ae389c5c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/Tag.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/Tag.java @@ -114,4 +114,9 @@ public int hashCode() { private boolean areEqual(Object x, Object y) { return x == null ? y == null : x.equals(y); } + + @Override + public String toString() { + return String.format("Tag [value=%s, count=%s]", value, count); + } } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java index 3ed1e8f6..74062ae1 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java @@ -3,7 +3,6 @@ */ package com.flickr4java.flickr.tags; -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -87,11 +86,10 @@ public ClusterList getClusters(String searchTag) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_CLUSTERS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("tag", searchTag); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -128,12 +126,11 @@ public PhotoList getClusterPhotos(String tag, String clusterId) throws Fl PhotoList photos = new PhotoList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_CLUSTER_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("tag", tag); parameters.put("cluster_id", clusterId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -168,12 +165,11 @@ public Collection getHotList(String period, int count) throws Flickr Map parameters = new HashMap(); parameters.put("method", METHOD_GET_HOT_LIST); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("period", period); parameters.put("count", "" + count); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -207,11 +203,10 @@ public Photo getListPhoto(String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST_PHOTO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -253,11 +248,10 @@ public Collection getListUser(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST_USER); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -292,11 +286,10 @@ public Collection getListUserPopular(String userId) throws FlickrException Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST_USER_POPULAR); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -348,13 +341,12 @@ public Collection getListUserRaw(String tagVal) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST_USER_RAW); - parameters.put(Flickr.API_KEY, apiKey); if (tagVal != null) { parameters.put("tag", tagVal); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -394,11 +386,10 @@ public RelatedTagsList getRelated(String tag) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_RELATED); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("tag", tag); - Response response = transportAPI.get(transportAPI.getPath(), parameters, 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/test/TestInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/test/TestInterface.java index b58cc7d4..ddde5d40 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/test/TestInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/test/TestInterface.java @@ -3,19 +3,18 @@ */ package com.flickr4java.flickr.test; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.Response; +import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.people.User; import org.w3c.dom.Element; import org.w3c.dom.Text; import org.xml.sax.SAXException; -import com.flickr4java.flickr.Flickr; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; -import com.flickr4java.flickr.people.User; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; /** * Interface for testing Flickr connectivity. @@ -53,10 +52,9 @@ public TestInterface(String apiKey, String sharedSecret, Transport transportAPI) 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, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -73,9 +71,8 @@ public Collection echo(Map params) throws FlickrExcepti public User login() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_LOGIN); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -97,9 +94,8 @@ public User login() throws FlickrException { public void null_() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_NULL); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transport.get(transport.getPath(), parameters, 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/uploader/Uploader.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java index b114e872..122e6eb2 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java @@ -4,7 +4,6 @@ package com.flickr4java.flickr.uploader; -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.FlickrRuntimeException; import com.flickr4java.flickr.REST; @@ -192,7 +191,7 @@ public String replace(File file, String flickrId, boolean async) throws FlickrEx * @throws FlickrException */ private UploaderResponse postPhoto(Map parameters, String path) throws FlickrException { - UploaderResponse response = (UploaderResponse) transport.post(path, parameters, sharedSecret, true); + UploaderResponse response = (UploaderResponse) transport.post(path, parameters, apiKey, sharedSecret, true); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -224,8 +223,6 @@ private String getResponseString(boolean async, UploaderResponse response) { private Map setUploadParameters(UploadMetaData metaData) { Map parameters = new TreeMap(); - parameters.put(Flickr.API_KEY, apiKey); - String title = metaData.getTitle(); if (title != null) { parameters.put("title", title); @@ -270,7 +267,6 @@ private Map setUploadParameters(UploadMetaData metaData) { private Map setReplaceParameters(String flickrId, boolean async) { Map parameters = new TreeMap(); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("async", async ? "1" : "0"); parameters.put("photo_id", flickrId); @@ -278,9 +274,8 @@ private Map setReplaceParameters(String flickrId, boolean async) } /** - * 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} 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 */ diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java index 5554f03e..e991fa8c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java @@ -3,13 +3,6 @@ */ package com.flickr4java.flickr.urls; -import java.util.HashMap; -import java.util.Map; - -import org.w3c.dom.Element; -import org.w3c.dom.Text; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -18,6 +11,12 @@ import com.flickr4java.flickr.people.User; import com.flickr4java.flickr.util.XMLUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.Text; + +import java.util.HashMap; +import java.util.Map; + /** * Interface for testing Flickr connectivity. * @@ -68,11 +67,10 @@ public UrlsInterface(String apiKey, String sharedSecret, Transport transportAPI) public String getGroup(String groupId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_GROUP); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("group_id", groupId); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -92,11 +90,10 @@ public String getGroup(String groupId) throws FlickrException { public String getUserPhotos(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_USER_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -116,11 +113,10 @@ public String getUserPhotos(String userId) throws FlickrException { public String getUserProfile(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_USER_PROFILE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -140,11 +136,10 @@ public String getUserProfile(String userId) throws FlickrException { public Group lookupGroup(String url) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_LOOKUP_GROUP); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("url", url); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -168,11 +163,10 @@ public Group lookupGroup(String url) throws FlickrException { public String lookupUser(String url) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_LOOKUP_USER); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("url", url); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -194,10 +188,9 @@ public Gallery lookupGallery(String galleryId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_LOOKUP_GALLERY); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("url", galleryId); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.post(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/FileAuthStore.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java index cbbbbea6..6b358f2f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java @@ -3,6 +3,10 @@ */ package com.flickr4java.flickr.util; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.auth.Auth; +import com.flickr4java.flickr.people.User; + import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -13,10 +17,6 @@ import java.util.HashMap; import java.util.Map; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.auth.Auth; -import com.flickr4java.flickr.people.User; - /** * * Implements a filesystem based storage system for Auth instances. One ".auth" file is maintained per Auth instance stored. diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java index 5e9f7570..4b76a6fe 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java @@ -6,17 +6,17 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import java.util.Collection; -import java.util.Iterator; - -import org.junit.Ignore; -import org.junit.Test; - import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.blogs.Blog; import com.flickr4java.flickr.blogs.BlogsInterface; import com.flickr4java.flickr.blogs.Service; +import org.junit.Ignore; +import org.junit.Test; + +import java.util.Collection; +import java.util.Iterator; + /** * @author Anthony Eden */ diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java index 45db54f6..3caeca96 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java @@ -6,14 +6,14 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import java.util.List; - -import org.junit.Test; - import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.commons.CommonsInterface; import com.flickr4java.flickr.commons.Institution; +import org.junit.Test; + +import java.util.List; + /** * @author mago * @version $Id: CommonsInterfaceTest.java,v 1.1 2009/06/30 18:48:59 x-mago Exp $ @@ -27,11 +27,11 @@ public void testGetInstitutions() throws FlickrException { assertNotNull(list); boolean museumFound = false; for (Institution inst : list) { - if (inst.getName().equals("Brooklyn Museum")) { - assertEquals(1211958000000L, inst.getDateLaunch().getTime()); - assertEquals("http://www.brooklynmuseum.org/", inst.getSiteUrl()); - assertEquals("http://www.brooklynmuseum.org/flickr_commons.php", inst.getLicenseUrl()); - assertEquals("http://flickr.com/photos/brooklyn_museum/", inst.getFlickrUrl()); + if (inst.getName().equals("The British Library")) { + assertEquals(1386975388000L, inst.getDateLaunch().getTime()); + assertEquals("www.bl.uk", inst.getSiteUrl()); + assertEquals("http://www.bl.uk/aboutus/terms/copyright/index.html", inst.getLicenseUrl()); + assertEquals("http://flickr.com/photos/britishlibrary/", inst.getFlickrUrl()); museumFound = true; } } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java index 01a01655..07635601 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java @@ -7,15 +7,15 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; -import java.util.List; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.galleries.GalleriesInterface; +import com.flickr4java.flickr.galleries.Gallery; import org.junit.After; import org.junit.Ignore; import org.junit.Test; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.galleries.GalleriesInterface; -import com.flickr4java.flickr.galleries.Gallery; +import java.util.List; /** * @author acaplan diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java index 45b39a56..a55d6ebf 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java @@ -2,10 +2,6 @@ import static org.junit.Assert.assertTrue; -import java.util.Calendar; - -import org.junit.Test; - import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.machinetags.MachinetagsInterface; import com.flickr4java.flickr.machinetags.Namespace; @@ -14,6 +10,10 @@ import com.flickr4java.flickr.machinetags.Predicate; import com.flickr4java.flickr.machinetags.Value; +import org.junit.Test; + +import java.util.Calendar; + /** * @author mago * @version $Id: MachinetagsInterfaceTest.java,v 1.2 2009/06/21 19:55:15 x-mago Exp $ @@ -30,7 +30,7 @@ public void testGetNamespaces() throws FlickrException { assertTrue(list.size() > 3); boolean contentFound = false; for (int i = 0; i < list.size(); i++) { - Namespace ns = (Namespace) list.get(i); + Namespace ns = list.get(i); if (ns.getValue().equals("content")) { contentFound = true; } @@ -98,10 +98,10 @@ public void testGetRecentValues() throws FlickrException { Calendar addedSince = Calendar.getInstance(); addedSince.add(Calendar.YEAR, -5); NamespacesList list = machinetagsInterface.getRecentValues(namespace, predicate, addedSince.getTime()); - assertTrue(list.size() > 3); + assertTrue(list.size() >= 3); boolean contentFound = false; for (Value value : list) { - if (value.getValue().equals("porcelain")) { + if (value.getValue().equals("mixed_media")) { contentFound = true; } } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java index 27e98162..537c57df 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java @@ -5,16 +5,16 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import java.util.ArrayList; - -import org.junit.Test; - import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.panda.Panda; import com.flickr4java.flickr.panda.PandaInterface; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photos.PhotoList; +import org.junit.Test; + +import java.util.ArrayList; + /** * @author mago * @version $Id: PandaInterfaceTest.java,v 1.1 2009/06/18 21:56:43 x-mago Exp $ diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java index ede328e4..0eef55b1 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java @@ -366,30 +366,6 @@ public void testGetLargeImage() throws FlickrException, IOException { ImageIO.write(image, "jpg", largeFile); } - @Test - public void testGetLarge1600Image() throws FlickrException, IOException { - PhotosInterface iface = flickr.getPhotosInterface(); - String photoId = testProperties.getPhotoId(); - Photo photo = iface.getInfo(photoId, null); - BufferedImage image = iface.getImage(photo, Size.LARGE_1600); - assertNotNull(image); - assertNotNull(image.getWidth()); - assertNotNull(image.getHeight()); - ImageIO.write(image, "jpg", largeFile); - } - - @Test - public void testGetLarge2048Image() throws FlickrException, IOException { - PhotosInterface iface = flickr.getPhotosInterface(); - String photoId = testProperties.getPhotoId(); - Photo photo = iface.getInfo(photoId, null); - BufferedImage image = iface.getImage(photo, Size.LARGE_2048); - assertNotNull(image); - assertNotNull(image.getWidth()); - assertNotNull(image.getHeight()); - ImageIO.write(image, "jpg", largeFile); - } - @Test public void testGetPhoto() throws FlickrException { PhotosInterface iface = flickr.getPhotosInterface(); diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java index 0c79ac97..0be83e85 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java @@ -4,12 +4,6 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; - -import org.junit.Test; - import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.places.Location; @@ -19,6 +13,12 @@ import com.flickr4java.flickr.places.PlacesList; import com.flickr4java.flickr.tags.Tag; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + /** * Tests for the PlacesInterface. * @@ -33,7 +33,7 @@ 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 = (Place) list.get(0); + Place place = list.get(0); assertEquals("zot2ouJXUbKOJRM", place.getPlaceId()); assertEquals("/Germany/Berlin/Berlin", place.getPlaceUrl()); assertEquals(Place.TYPE_LOCALITY, place.getPlaceType()); @@ -47,17 +47,17 @@ public void testFind() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); PlacesList list = placesInterface.find("Alabama"); assertTrue(list.getTotal() == 3); - Place place = (Place) list.get(0); + Place place = list.get(0); assertEquals("KSb302RTUb74OxqL", place.getPlaceId()); assertEquals("/United+States/Alabama", place.getPlaceUrl()); assertEquals(Place.TYPE_REGION, place.getPlaceType()); - place = (Place) list.get(1); + 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 = (Place) list.get(2); + place = list.get(2); assertEquals("3BCBV2pQV70Ei4_4", place.getPlaceId()); assertEquals("/South+Africa/North-west/Alabama", place.getPlaceUrl()); assertEquals(Place.TYPE_LOCALITY, place.getPlaceType()); @@ -68,14 +68,14 @@ public void testFind2() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); PlacesList list = placesInterface.find("Europe"); assertTrue(list.getTotal() == 2); - Place place = (Place) list.get(0); + Place place = list.get(0); assertEquals("6dCBhRRTVrJiB5xOrg", place.getPlaceId()); assertEquals("/6dCBhRRTVrJiB5xOrg", place.getPlaceUrl()); assertEquals(Place.TYPE_CONTINENT, place.getPlaceType()); - place = (Place) list.get(1); + place = list.get(1); assertEquals("SmLXwKZUV7JlnVvxUA", place.getPlaceId()); - assertEquals("/France/Ile-de-France/Paris/Europe", place.getPlaceUrl()); + assertEquals("/France/%C3%8Ele-de-France/Paris/Europe", place.getPlaceUrl()); assertEquals(Place.TYPE_NEIGHBOURHOOD, place.getPlaceType()); } @@ -101,7 +101,7 @@ public void testGetChildrenWithPhotosPublic() throws FlickrException { PlacesList list = placesInterface.getChildrenWithPhotosPublic(placeId, woeId); boolean presidioFound = false; for (int i = 0; i < list.size(); i++) { - Place place = (Place) list.get(i); + Place place = list.get(i); // System.out.println(place.getName()); if (place.getPlaceId().equals("uSdaoQpTUb.eNcX1Jg")) { assertEquals("Presidio, San Francisco, CA, US, United States", place.getName()); @@ -139,7 +139,7 @@ public void testGetPlaceTypes() throws FlickrException { boolean neighbourhoodFound = false; boolean regionFound = false; for (int i = 0; i < placeTypes.size(); i++) { - PlaceType placeType = (PlaceType) placeTypes.get(i); + PlaceType placeType = placeTypes.get(i); if (placeType.getPlaceTypeName().equals("neighbourhood") && placeType.getPlaceTypeId() == 22) { neighbourhoodFound = true; } @@ -167,7 +167,7 @@ public void testPlacesForBoundingBox() throws FlickrException { int placeType = Place.TYPE_LOCALITY; PlacesList places = placesInterface.placesForBoundingBox(placeType, bbox); assertTrue((places.size() > 0)); - Place place = (Place) places.get(0); + Place place = places.get(0); assertEquals(sfWoeId, place.getWoeId()); assertEquals("7.MJR8tTVrIO1EgB", place.getPlaceId()); assertEquals("/United+States/California/San+Francisco", place.getPlaceUrl()); @@ -185,7 +185,7 @@ public void testPlacesForContacts() throws FlickrException { PlacesList places = placesInterface.placesForContacts(placeType, placeId, woeId, threshold, contacts); assertTrue((places.size() > 0)); for (int i = 0; i < places.size(); i++) { - Place place = (Place) places.get(i); + Place place = places.get(i); assertTrue(place.getPhotoCount() > 0); // System.out.println(place.getName() + " " + place.getPlaceUrl()); } @@ -210,7 +210,7 @@ public void testPlacesForTags() throws FlickrException { PlacesList places = placesInterface.placesForTags(placeTypeId, sfWoeId, placeId, threshold, tags, tagMode, machineTags, machineTagMode, minUploadDate.getTime(), maxUploadDate.getTime(), minTakenDate.getTime(), maxTakenDate.getTime()); assertTrue((places.size() == 1)); - Place place = (Place) places.get(0); + Place place = places.get(0); assertEquals("NsbUWfBTUb4mbyVu", place.getPlaceId()); assertEquals(Place.TYPE_REGION, place.getPlaceType()); assertEquals("/United+States/California", place.getPlaceUrl()); @@ -227,8 +227,8 @@ public void testPlacesForUser() throws FlickrException { Calendar maxUploadDate = Calendar.getInstance(); Calendar minTakenDate = Calendar.getInstance(); Calendar maxTakenDate = Calendar.getInstance(); - minUploadDate.roll(Calendar.YEAR, -3); - minTakenDate.roll(Calendar.YEAR, -3); + minUploadDate.roll(Calendar.YEAR, -5); + minTakenDate.roll(Calendar.YEAR, -5); PlacesList places = placesInterface.placesForUser(placeType, woeId, placeId, threshold, minUploadDate.getTime(), maxUploadDate.getTime(), minTakenDate.getTime(), maxTakenDate.getTime()); assertTrue((places.size() > 0)); @@ -245,17 +245,16 @@ public void testTagsForPlace() throws FlickrException { Calendar maxUploadDate = Calendar.getInstance(); Calendar minTakenDate = Calendar.getInstance(); Calendar maxTakenDate = Calendar.getInstance(); - minUploadDate.roll(Calendar.YEAR, -3); - minTakenDate.roll(Calendar.YEAR, -3); + minUploadDate.roll(Calendar.YEAR, -5); + minTakenDate.roll(Calendar.YEAR, -5); ArrayList tags = placesInterface.tagsForPlace(sfWoeId, placeId, minUploadDate.getTime(), maxUploadDate.getTime(), minTakenDate.getTime(), maxTakenDate.getTime()); assertTrue((tags.size() > 0)); boolean calFound = false; for (Tag tag : tags) { - if (tag.getValue().equals("california") && tag.getCount() > 140000) { + if (tag.getValue().equals("usa") && tag.getCount() > 100000) { calFound = true; } - // System.out.println(tag.getValue() + " " + tag.getCount()); } assertTrue(calFound); } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java index f898c01c..8beb0393 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java @@ -9,11 +9,6 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import java.util.Collection; -import java.util.Iterator; - -import org.junit.Test; - import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.reflection.Argument; @@ -21,6 +16,11 @@ import com.flickr4java.flickr.reflection.Method; import com.flickr4java.flickr.reflection.ReflectionInterface; +import org.junit.Test; + +import java.util.Collection; +import java.util.Iterator; + /** * @author Anthony Eden */ @@ -38,7 +38,7 @@ public void testGetMethodInfo_public() throws FlickrException { assertFalse(method.needsLogin()); assertNotNull(method.getArguments()); - assertEquals(6, method.getArguments().size()); + assertEquals(7, method.getArguments().size()); Collection args = method.getArguments(); Iterator argsIterator = args.iterator(); @@ -55,6 +55,10 @@ public void testGetMethodInfo_public() throws FlickrException { 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()); @@ -121,7 +125,7 @@ public void testGetMethods() throws FlickrException { boolean foundGetLocation = false; while (methodsIterator.hasNext()) { - String methodName = (String) methodsIterator.next(); + String methodName = methodsIterator.next(); if ("flickr.photos.addTags".equals(methodName)) { foundAddTags = true; } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java index f816458b..38921e45 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java @@ -45,7 +45,7 @@ public void testGetClusterPhotos() throws FlickrException { TagsInterface iface = flickr.getTagsInterface(); PhotoList photos = iface.getClusterPhotos("ducati", "999-1098-848"); - assertTrue(photos.getTotal() == 24); + assertEquals(23, photos.getTotal()); } @Test diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java index 11ff54b7..9e040837 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java @@ -4,15 +4,15 @@ import static org.junit.Assert.assertNotNull; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.people.User; import org.junit.Test; import org.w3c.dom.Element; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.people.User; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; /** * @author Anthony Eden From bf02333cf1ced848256c5905b09d965788be28bb Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Apr 2014 11:06:33 +0100 Subject: [PATCH 014/239] Update to version 2.7 --- Flickr4Java/build.gradle | 2 +- Flickr4Java/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index db4e8db2..607b651e 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'maven' -version = '2.4' +version = '2.7' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index d711d342..ce306886 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.6-SNAPSHOT + 2.7-SNAPSHOT jar flickr4java From afcfe567672ff1680ea3712f6e0daf41d2099030 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Apr 2014 13:16:29 +0100 Subject: [PATCH 015/239] Fix failing tests now that we're using HTTPS --- .../flickr/test/GalleriesInterfaceTest.java | 1 - .../flickr4java/flickr/test/GroupsInterfaceTest.java | 10 +++++----- .../flickr4java/flickr/test/PeopleInterfaceTest.java | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java index 84c49de5..07635601 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java @@ -28,7 +28,6 @@ public void tearDown() { flickr = null; } - @Ignore @Test public void testGetList() throws FlickrException { GalleriesInterface iface = flickr.getGalleriesInterface(); diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java index 36e04ff2..d4d24320 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java @@ -6,10 +6,6 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import java.util.Collection; - -import org.junit.Test; - import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.groups.Category; import com.flickr4java.flickr.groups.Group; @@ -17,6 +13,10 @@ import com.flickr4java.flickr.groups.GroupsInterface; import com.flickr4java.flickr.groups.Subcategory; +import org.junit.Test; + +import java.util.Collection; + /** * @author Anthony Eden */ @@ -73,7 +73,7 @@ public void testGetInfo() throws FlickrException { assertEquals("34427469792@N01", group.getId()); assertEquals("FlickrCentral", group.getName()); assertTrue(group.getMembers() > 0); - assertTrue(group.getBuddyIconUrl().startsWith("https://farm")); + assertTrue(group.getSecureBuddyIconUrl().startsWith("https://farm")); // System.out.println("group members: " + group.getMembers()); } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java index 6ccc1b5f..2cf470d2 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java @@ -58,7 +58,7 @@ public void testGetInfo() throws FlickrException { assertTrue(person.getMobileurl().startsWith("https://m.flickr.com/photostream.gne")); 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.getBuddyIconUrl().startsWith("https://")); + assertTrue(person.getSecureBuddyIconUrl().startsWith("https://")); } @Test From b3627952076f0c2cbc79bee152472984032dc047 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Apr 2014 14:58:45 +0100 Subject: [PATCH 016/239] Update to version 2.7 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b641128b..a6f798c3 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr - 2.5 + 2.7 It's hosted on [JCenter](https://bintray.com/bintray/jcenter), you may need to [download their settings.xml](https://bintray.com/repo/downloadMavenRepoSettingsFile/downloadSettings?repoPath=%2Fbintray%2Fjcenter) to get access to their repo. From efa48a9c872fd29b0b6e18ee93b39d311f008018 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Apr 2014 15:00:32 +0100 Subject: [PATCH 017/239] Update to version 2.6 (2.7 was set by mistake) --- Flickr4Java/build.gradle | 2 +- Flickr4Java/pom.xml | 2 +- README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index 607b651e..76e536f2 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'maven' -version = '2.7' +version = '2.6' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index ce306886..d711d342 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.7-SNAPSHOT + 2.6-SNAPSHOT jar flickr4java diff --git a/README.md b/README.md index a6f798c3..bec57da9 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr - 2.7 + 2.6 It's hosted on [JCenter](https://bintray.com/bintray/jcenter), you may need to [download their settings.xml](https://bintray.com/repo/downloadMavenRepoSettingsFile/downloadSettings?repoPath=%2Fbintray%2Fjcenter) to get access to their repo. From 6ad88ff6ce6681cba230e813b82b7c4615df11d4 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Apr 2014 15:10:47 +0100 Subject: [PATCH 018/239] Fix failing test --- .../java/com/flickr4java/flickr/test/PlacesInterfaceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java index 0be83e85..882353ce 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java @@ -75,7 +75,7 @@ public void testFind2() throws FlickrException { place = list.get(1); assertEquals("SmLXwKZUV7JlnVvxUA", place.getPlaceId()); - assertEquals("/France/%C3%8Ele-de-France/Paris/Europe", place.getPlaceUrl()); + assertEquals("/France/Ile-de-France/Paris/Europe", place.getPlaceUrl()); assertEquals(Place.TYPE_NEIGHBOURHOOD, place.getPlaceType()); } From 3a979a69918998ff8f0a3eef13ebf7a43cda480e Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Apr 2014 15:38:43 +0100 Subject: [PATCH 019/239] Make test more robust --- .../com/flickr4java/flickr/test/PlacesInterfaceTest.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java index 882353ce..2db305ee 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java @@ -250,13 +250,6 @@ public void testTagsForPlace() throws FlickrException { ArrayList tags = placesInterface.tagsForPlace(sfWoeId, placeId, minUploadDate.getTime(), maxUploadDate.getTime(), minTakenDate.getTime(), maxTakenDate.getTime()); assertTrue((tags.size() > 0)); - boolean calFound = false; - for (Tag tag : tags) { - if (tag.getValue().equals("usa") && tag.getCount() > 100000) { - calFound = true; - } - } - assertTrue(calFound); } private void placeAssertions(Location location) { From a228aba9d8a090ced5e07e64b4180c4b311fd5da Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Apr 2014 15:42:00 +0100 Subject: [PATCH 020/239] [maven-release-plugin] prepare release flickr4java-2.6 --- Flickr4Java/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index d711d342..e3590b64 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.6-SNAPSHOT + 2.6 jar flickr4java @@ -78,7 +78,7 @@ scm:git:https://github.com/callmeal/Flickr4Java.git scm:git:git@github.com:callmeal/Flickr4Java.git https://github.com/callmeal/Flickr4Java - HEAD + flickr4java-2.6 From d73db84eb0ba9551fec57780810caf2fbe1de21e Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Apr 2014 15:42:04 +0100 Subject: [PATCH 021/239] [maven-release-plugin] prepare for next development iteration --- Flickr4Java/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index e3590b64..ce306886 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.6 + 2.7-SNAPSHOT jar flickr4java @@ -78,7 +78,7 @@ scm:git:https://github.com/callmeal/Flickr4Java.git scm:git:git@github.com:callmeal/Flickr4Java.git https://github.com/callmeal/Flickr4Java - flickr4java-2.6 + HEAD From b89697eeb13d85f2d55ce2cb909f33bd2adbdbda Mon Sep 17 00:00:00 2001 From: Jonathan Willis Date: Mon, 14 Apr 2014 11:25:52 -0400 Subject: [PATCH 022/239] Implemented contact list navigation, group restrictions and blasts. --- .../flickr/contacts/ContactList.java | 11 ++ .../flickr/contacts/ContactsInterface.java | 8 +- .../com/flickr4java/flickr/groups/Blast.java | 50 +++++++ .../com/flickr4java/flickr/groups/Group.java | 64 ++++++++- .../flickr/groups/Restriction.java | 134 ++++++++++++++++++ 5 files changed, 263 insertions(+), 4 deletions(-) create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactList.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Blast.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Restriction.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactList.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactList.java new file mode 100644 index 00000000..eba3d747 --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactList.java @@ -0,0 +1,11 @@ +package com.flickr4java.flickr.contacts; + +import com.flickr4java.flickr.SearchResultList; + + +public class ContactList extends SearchResultList { + + // (avoid compiler warning) + private static final long serialVersionUID = -4735611134085303463L; + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java index 8c0bab4a..d899cbb7 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java @@ -50,8 +50,8 @@ public ContactsInterface(String apiKey, String sharedSecret, Transport transport * @return The Collection of Contact objects */ public Collection getList() throws FlickrException { - List contacts = new ArrayList(); - + ContactList contacts = new ContactList(); + Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); @@ -61,6 +61,10 @@ public Collection getList() throws FlickrException { } Element contactsElement = response.getPayload(); + contacts.setPage(contactsElement.getAttribute("page")); + contacts.setPages(contactsElement.getAttribute("pages")); + contacts.setPerPage(contactsElement.getAttribute("perpage")); + contacts.setTotal(contactsElement.getAttribute("total")); NodeList contactNodes = contactsElement.getElementsByTagName("contact"); for (int i = 0; i < contactNodes.getLength(); i++) { Element contactElement = (Element) contactNodes.item(i); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Blast.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Blast.java new file mode 100644 index 00000000..9ac0696a --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Blast.java @@ -0,0 +1,50 @@ +package com.flickr4java.flickr.groups; + +public class Blast { + + private String dateBlastAdded; + + private String userId; + + private String blast; + + /** + * Unix timestamp formatted date + * + * @return date blast was added + */ + public String getDateBlastAdded() { + return dateBlastAdded; + } + + public void setDateBlastAdded(String dateBlastAdded) { + this.dateBlastAdded = dateBlastAdded; + } + + /** + * Blaster's user_id + * + * @return user_id + */ + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + /** + * Text of the blast + * + * @return blast text + */ + public String getBlast() { + return blast; + } + + public void setBlast(String blast) { + this.blast = blast; + } + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java index 5401f40c..2db11141 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java @@ -19,6 +19,10 @@ public class Group implements BuddyIconable { private String name; private int members; + + private int poolCount; + + private int topicCount; private String privacy; @@ -29,6 +33,10 @@ public class Group implements BuddyIconable { private String description; private Throttle throttle; + + private Blast blast; + + private Restriction restriction; private String lang; @@ -87,6 +95,42 @@ public void setMembers(String members) { System.out.println("trace: Group.setMembers(String) encountered a number format " + "exception. members set to 0"); } } + public int getPoolCount() { + return poolCount; + } + + public void setPoolCount(int poolCount) { + this.poolCount = poolCount; + } + + public void setPoolCount(String poolCount) { + try { + if (poolCount != null) + setPoolCount(Integer.parseInt(poolCount)); + } catch (NumberFormatException nfe) { + setPoolCount(0); + if (Flickr.tracing) + System.out.println("trace: Group.setPoolCount(String) encountered a number format " + "exception. poolCount set to 0"); + } + } + public int getTopicCount() { + return topicCount; + } + + public void setTopicCount(int topicCount) { + this.topicCount = topicCount; + } + + public void setTopicCount(String topicCount) { + try { + if (topicCount != null) + setTopicCount(Integer.parseInt(topicCount)); + } catch (NumberFormatException nfe) { + setPoolCount(0); + if (Flickr.tracing) + System.out.println("trace: Group.setTopicCount(String) encountered a number format " + "exception. topicCount set to 0"); + } + } /** * @deprecated @@ -188,7 +232,7 @@ public int getPhotoCount() { } /** - * @deprecated + * * @param photoCount */ public void setPhotoCount(int photoCount) { @@ -196,7 +240,7 @@ public void setPhotoCount(int photoCount) { } /** - * @deprecated + * * @param photoCount */ public void setPhotoCount(String photoCount) { @@ -313,6 +357,22 @@ public Throttle getThrottle() { public void setThrottle(Throttle throttle) { this.throttle = throttle; } + + public Blast getBlast() { + return blast; + } + + public void setBlast(Blast blast) { + this.blast = blast; + } + + public Restriction getRestriction() { + return restriction; + } + + public void setRestriction(Restriction restriction) { + this.restriction = restriction; + } /** * @return the invitationOnly diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Restriction.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Restriction.java new file mode 100644 index 00000000..ddd95c6d --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Restriction.java @@ -0,0 +1,134 @@ +package com.flickr4java.flickr.groups; + +public class Restriction { + + private Boolean photosOk; + + private Boolean videosOk; + + private Boolean imagesOk; + + private Boolean screensOk; + + private Boolean artOk; + + private Boolean safeOk; + + private Boolean moderateOk; + + private Boolean restrictedOk; + + private Boolean hasGeo; + + /** + * + * + * @return Are Photos allowed in the group + */ + public Boolean isPhotosOk() { + return photosOk; + } + + public void setIsPhotosOk(Boolean value) { + this.photosOk = value; + } + + /** + * + * + * @return Are Videos allowed in the group + */ + public Boolean isVideosOk() { + return videosOk; + } + + public void setIsVideosOk(Boolean value) { + this.videosOk = value; + + } + + /** + * + * + * @return Are Images allowed in the group + */ + public Boolean isImagesOk() { + return imagesOk; + } + + public void setIsImagesOk(Boolean value) { + this.imagesOk = value; + } + /** + * + * @return Are Screens allowed in the group + */ + public Boolean isScreensOk() { + return screensOk; + } + + public void setIsScreensOk(Boolean value) { + this.screensOk = value; + } + + /** + * + * @return Are art allowed in the group + */ + public Boolean isArtOk() { + return artOk; + } + + public void setIsArtOk(Boolean value) { + this.artOk = value; + } + + /** + * + * @return Are Safe rated images allowed in the group + */ + public Boolean isSafeOk() { + return safeOk; + } + + public void setIsSafeOk(Boolean value) { + this.safeOk = value; + } + /** + * + * @return Are Moderate rated images allowed in the group + */ + public Boolean isModerateOk() { + return moderateOk; + } + + public void setIsModerateOk(Boolean value) { + this.moderateOk = value; + } + + /** + * + * @return Are Restricted rated images allowed in the group + */ + public Boolean isRestrictedOk() { + return restrictedOk; + } + + public void setIsRestrictedOk(Boolean value) { + this.restrictedOk = value; + } + + /** + * + * @return Are Geo-tagged images allowed in the group + */ + public Boolean isHasGeo() { + return hasGeo; + } + + public void setIsHasGeo(Boolean value) { + this.hasGeo = value; + } + + +} From e610076c3bd2898ca8430e9f4ee3f8e4409d8e82 Mon Sep 17 00:00:00 2001 From: Jonathan Willis Date: Mon, 14 Apr 2014 11:34:09 -0400 Subject: [PATCH 023/239] Implemented group.discussions and group topics. --- .../java/com/flickr4java/flickr/Flickr.java | 16 ++ .../flickr/groups/GroupsInterface.java | 33 +++ .../groups/discuss/GroupDiscussInterface.java | 245 ++++++++++++++++++ .../flickr/groups/discuss/Reply.java | 90 +++++++ .../flickr/groups/discuss/ReplyList.java | 12 + .../flickr/groups/discuss/ReplyObject.java | 26 ++ .../flickr/groups/discuss/Topic.java | 134 ++++++++++ .../flickr/groups/discuss/TopicList.java | 65 +++++ 8 files changed, 621 insertions(+) create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/Reply.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyList.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyObject.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/Topic.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/TopicList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java index 270c1d2f..171a9a1e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java @@ -14,6 +14,7 @@ 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; @@ -154,6 +155,8 @@ public class Flickr { private StatsInterface statsInterface; private CamerasInterface cameraInterface; + + private GroupDiscussInterface discussionInterface; /** * @see com.flickr4java.flickr.photos.PhotosInterface#setContentType(String, String) @@ -611,5 +614,18 @@ public CamerasInterface getCamerasInterface() { } return cameraInterface; } + + /** + * 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/main/java/com/flickr4java/flickr/groups/GroupsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java index 52cfe610..9a002747 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java @@ -140,6 +140,8 @@ public Group getInfo(String groupId) throws FlickrException { group.setDescription(XMLUtilities.getChildValue(groupElement, "description")); group.setMembers(XMLUtilities.getChildValue(groupElement, "members")); group.setPrivacy(XMLUtilities.getChildValue(groupElement, "privacy")); + group.setPoolCount(XMLUtilities.getChildValue(groupElement, "pool_count")); + group.setTopicCount(XMLUtilities.getChildValue(groupElement, "topic_count")); NodeList throttleNodes = groupElement.getElementsByTagName("throttle"); int n = throttleNodes.getLength(); @@ -159,6 +161,37 @@ public Group getInfo(String groupId) throws FlickrException { } else if (n > 1) { System.err.println("WARNING: more than one throttle element in group"); } + + NodeList restrictionNodes = groupElement.getElementsByTagName("restrictions"); + n = restrictionNodes.getLength(); + if (n == 1) { + Element restrictionElement = (Element) restrictionNodes.item(0); + Restriction restriction = new Restriction(); + group.setRestriction(restriction); + restriction.setIsPhotosOk("1".equals(restrictionElement.getAttribute("photos_ok"))); + restriction.setIsVideosOk("1".equals(restrictionElement.getAttribute("videos_ok"))); + restriction.setIsImagesOk("1".equals(restrictionElement.getAttribute("images_ok"))); + restriction.setIsScreensOk("1".equals(restrictionElement.getAttribute("screens_ok"))); + restriction.setIsArtOk("1".equals(restrictionElement.getAttribute("art_ok"))); + restriction.setIsSafeOk("1".equals(restrictionElement.getAttribute("safe_ok"))); + restriction.setIsModerateOk("1".equals(restrictionElement.getAttribute("moderate_ok"))); + restriction.setIsRestrictedOk("1".equals(restrictionElement.getAttribute("restricted_ok"))); + restriction.setIsHasGeo("1".equals(restrictionElement.getAttribute("has_geo"))); + } else if (n > 1) { + System.err.println("WARNING: more than one throttle element in group"); + } + NodeList blastNodes = groupElement.getElementsByTagName("blast"); + n = blastNodes.getLength(); + if (n == 1) { + Element blastElement = (Element) blastNodes.item(0); + Blast blast = new Blast(); + group.setBlast(blast); + blast.setUserId(blastElement.getAttribute("user_id")); + blast.setDateBlastAdded(blastElement.getAttribute("date_blast_added")); + blast.setBlast(XMLUtilities.getChildValue(groupElement,"blast")); + } else if (n > 1) { + System.err.println("WARNING: more than one throttle element in group"); + } return group; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java new file mode 100644 index 00000000..fa66a668 --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java @@ -0,0 +1,245 @@ +package com.flickr4java.flickr.groups.discuss; + +import java.util.HashMap; +import java.util.Map; + +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.Response; +import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.util.XMLUtilities; + + +public class GroupDiscussInterface { + + /** + * Group.Discuss Interface. + * + * @author Jonathan Willis + */ + public static final String METHOD_TOPICS_GET_LIST = "flickr.groups.discuss.topics.getList"; + public static final String METHOD_TOPICS_GET_INFO = "flickr.groups.discuss.topics.getInfo"; + + public static final String METHOD_REPLIES_GET_LIST = "flickr.groups.discuss.replies.getList"; + public static final String METHOD_REPLIES_GET_INFO = "flickr.groups.discuss.topics.getInfo"; + + private String apiKey; + + private String sharedSecret; + + private Transport transportAPI; + + public GroupDiscussInterface(String apiKey, String sharedSecret, Transport transportAPI) { + this.apiKey = apiKey; + this.sharedSecret = sharedSecret; + this.transportAPI = transportAPI; + } + + /** + * 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}. + * @param perPage + * Number of records per page. + * @param page + * Result-section. + * @return A group topic list + * @throws FlickrException + * @see API Documentation + */ + public TopicList getTopicsList(String groupId, int perPage, int page) throws FlickrException { + TopicList topicList = new TopicList(); + Map parameters = new HashMap(); + parameters.put("method", METHOD_TOPICS_GET_LIST); + parameters.put(Flickr.API_KEY, apiKey); + + parameters.put("group_id", groupId); + + if (perPage > 0) { + parameters.put("per_page", "" + perPage); + } + if (page > 0) { + parameters.put("page", "" + page); + } + + + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + if (response.isError()) { + throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); + } + + Element topicElements = response.getPayload(); + topicList.setPage(topicElements.getAttribute("page")); + topicList.setPages(topicElements.getAttribute("pages")); + topicList.setPerPage(topicElements.getAttribute("perpage")); + topicList.setTotal(topicElements.getAttribute("total")); + topicList.setGroupId(topicElements.getAttribute("group_id")); + topicList.setIconServer(Integer.parseInt(topicElements.getAttribute("iconserver"))); + topicList.setIconFarm(Integer.parseInt(topicElements.getAttribute("iconfarm"))); + topicList.setName(topicElements.getAttribute("name")); + topicList.setMembers(Integer.parseInt(topicElements.getAttribute("members"))); + topicList.setPrivacy(Integer.parseInt(topicElements.getAttribute("privacy"))); + topicList.setLanguage(topicElements.getAttribute("lang")); + topicList.setIsPoolModerated("1".equals(topicElements.getAttribute("ispoolmoderated"))); + + NodeList topicNodes = topicElements.getElementsByTagName("topic"); + for (int i = 0; i < topicNodes.getLength(); i++) { + Element element = (Element) topicNodes.item(i); + topicList.add(parseTopic(element)); + } + return topicList; + } + + /** + * Get info for a given topic + * + * @param topicId + * Unique identifier of a topic for a given group {@link Topic}. + * @return A group topic + * @throws FlickrException + * @see API Documentation + */ + public Topic getTopicInfo(String topicId) throws FlickrException { + Map parameters = new HashMap(); + parameters.put("method", METHOD_TOPICS_GET_INFO); + parameters.put(Flickr.API_KEY, apiKey); + parameters.put("topic_id", topicId); + + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + if (response.isError()) { + throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); + } + + Element topicElement = response.getPayload(); + + return parseTopic(topicElement); + } + + + /** + * Get list of replies + * + * @param topicId + * Unique identifier of a topic for a given group {@link Topic}. + * @return A reply object + * @throws FlickrException + * @see API Documentation + */ + public ReplyObject getReplyList(String topicId, int perPage, int page) throws FlickrException { + ReplyList reply = new ReplyList(); + TopicList topic = new TopicList(); + Map parameters = new HashMap(); + parameters.put("method", METHOD_REPLIES_GET_LIST); + parameters.put(Flickr.API_KEY, apiKey); + + parameters.put("topic_id", topicId); + + if (perPage > 0) { + parameters.put("per_page", "" + perPage); + } + if (page > 0) { + parameters.put("page", "" + page); + } + + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + if (response.isError()) { + throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); + } + + Element replyElements = response.getPayload(); + ReplyObject ro = new ReplyObject(); + NodeList replyNodes = replyElements.getElementsByTagName("reply"); + for (int i = 0; i < replyNodes.getLength(); i++) { + Element replyNodeElement = (Element) replyNodes.item(i); + //Element replyElement = XMLUtilities.getChild(replyNodeElement, "reply"); + reply.add(parseReply(replyNodeElement)); + ro.setReplyList(reply); + + } + NodeList topicNodes = replyElements.getElementsByTagName("topic"); + for (int i = 0; i < topicNodes.getLength(); i++) { + Element replyNodeElement = (Element) replyNodes.item(i); + //Element topicElement = XMLUtilities.getChild(replyNodeElement, "topic"); + topic.add(parseTopic(replyNodeElement)); + ro.setTopicList(topic); + } + + return ro; + } + + + /** + * Get info for a given topic reply + * + * @param topicId + * Unique identifier of a topic for a given group {@link Topic}. + * @param replyId + * Unique identifier of a reply for a given topic {@link Reply}. + * @return A group topic + * @throws FlickrException + * @see API Documentation + */ + public Reply getReplyInfo(String topicId, String replyId) throws FlickrException { + Map parameters = new HashMap(); + parameters.put("method", METHOD_REPLIES_GET_INFO); + parameters.put(Flickr.API_KEY, apiKey); + parameters.put("topic_id", topicId); + parameters.put("reply_id", replyId); + + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + if (response.isError()) { + throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); + } + + Element replyElement = response.getPayload(); + + return parseReply(replyElement); + } + + private Topic parseTopic(Element tElement) { + Topic topic = new Topic(); + topic.setAuthorId(tElement.getAttribute("author")); + topic.setAuthorname(tElement.getAttribute("authorname")); + topic.setIsCanDelete("1".equals(tElement.getAttribute("can_delete"))); + topic.setIsCanEdit("1".equals(tElement.getAttribute("can_edit"))); + topic.setIsCanReply("1".equals(tElement.getAttribute("can_reply"))); + if(!tElement.getAttribute("count_replies").equals("")){ + topic.setCountReplies(Integer.parseInt(tElement.getAttribute("count_replies"))); + } + topic.setDatecreate(tElement.getAttribute("datecreate")); + topic.setDatelastpost(tElement.getAttribute("datelastpost")); + topic.setIconfarm(Integer.parseInt(tElement.getAttribute("iconfarm"))); + topic.setIconserver(Integer.parseInt(tElement.getAttribute("iconserver"))); + topic.setIsLocked("1".equals(tElement.getAttribute("is_locked"))); + topic.setMessage(XMLUtilities.getChildValue(tElement, "message")); + topic.setRole(tElement.getAttribute("role")); + topic.setIsSticky("1".equals(tElement.getAttribute("is_sticky"))); + topic.setSubject(tElement.getAttribute("subject")); + topic.setTopicId(tElement.getAttribute("id")); + topic.setIsPro("1".equals(tElement.getAttribute("is_pro"))); + topic.setLastReply(tElement.getAttribute("last_reply")); + return topic; + } + + private Reply parseReply(Element rElement) { + Reply reply = new Reply(); + reply.setAuthorId(rElement.getAttribute("author")); + reply.setAuthorname(rElement.getAttribute("authorname")); + reply.setIsCanDelete("1".equals(rElement.getAttribute("can_delete"))); + reply.setIsCanEdit("1".equals(rElement.getAttribute("can_edit"))); + reply.setDatecreate(rElement.getAttribute("datecreate")); + reply.setLastEdit(rElement.getAttribute("lastedit")); + reply.setIconfarm(Integer.parseInt(rElement.getAttribute("iconfarm"))); + reply.setIconserver(Integer.parseInt(rElement.getAttribute("iconserver"))); + reply.setMessage(XMLUtilities.getChildValue(rElement, "message")); + reply.setRole(rElement.getAttribute("role")); + reply.setReplyId(rElement.getAttribute("id")); + reply.setIsPro("1".equals(rElement.getAttribute("is_pro"))); + return reply; + } + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/Reply.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/Reply.java new file mode 100644 index 00000000..d21f60c1 --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/Reply.java @@ -0,0 +1,90 @@ +package com.flickr4java.flickr.groups.discuss; + +public class Reply { + + private String replyId; + private String authorId; + private String authorname; + private String role; + private int iconserver; + private int iconfarm; + private boolean canEdit; + private boolean canDelete; + private String datecreate; + private String message; + private String lastEdit; + private boolean isPro; + + public String getReplyId() { + return replyId; + } + public void setReplyId(String replyId) { + this.replyId = replyId; + } + public String getAuthorId() { + return authorId; + } + public void setAuthorId(String authorId) { + this.authorId = authorId; + } + public String getAuthorname() { + return authorname; + } + public void setAuthorname(String authorname) { + this.authorname = authorname; + } + public int getIconserver() { + return iconserver; + } + public void setIconserver(int iconserver) { + this.iconserver = iconserver; + } + public String getRole() { + return role; + } + public void setRole(String role) { + this.role = role; + } + public int getIconfarm() { + return iconfarm; + } + public void setIconfarm(int iconfarm) { + this.iconfarm = iconfarm; + } + public boolean isCanEdit() { + return canEdit; + } + public void setIsCanEdit(boolean canEdit) { + this.canEdit = canEdit; + } + public boolean isCanDelete() { + return canDelete; + } + public void setIsCanDelete(boolean canDelete) { + this.canDelete = canDelete; + } + public String getDatecreate() { + return datecreate; + } + public void setDatecreate(String datecreate) { + this.datecreate = datecreate; + } + public String getMessage() { + return message; + } + public void setMessage(String message) { + this.message = message; + } + public String getLastEdit() { + return lastEdit; + } + public void setLastEdit(String lastEdit) { + this.lastEdit = lastEdit; + } + public boolean isPro() { + return isPro; + } + public void setIsPro(boolean isPro) { + this.isPro = isPro; + } +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyList.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyList.java new file mode 100644 index 00000000..5a47fb61 --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyList.java @@ -0,0 +1,12 @@ +package com.flickr4java.flickr.groups.discuss; + +import java.util.ArrayList; + +public class ReplyList extends ArrayList { + + /** + * + */ + private static final long serialVersionUID = 2830506892011990291L; + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyObject.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyObject.java new file mode 100644 index 00000000..4a7460bc --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyObject.java @@ -0,0 +1,26 @@ +package com.flickr4java.flickr.groups.discuss; + +import java.util.ArrayList; + +public class ReplyObject { + + private ArrayList topicList = new ArrayList(); + private ArrayList replyList = new ArrayList(); + + public ArrayList getTopicList() { + return topicList; + } + public void setTopicList(ArrayList topicList) { + this.topicList = topicList; + } + public ArrayList getReplyList() { + return replyList; + } + public void setReplyList(ArrayList replyList) { + this.replyList = replyList; + } + + + + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/Topic.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/Topic.java new file mode 100644 index 00000000..451810c9 --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/Topic.java @@ -0,0 +1,134 @@ +package com.flickr4java.flickr.groups.discuss; + +public class Topic { + + private String topicId; + private String subject; + private String authorId; + private String authorname; + private String role; + private int iconserver; + private int iconfarm; + private int countReplies; + private boolean canEdit; + private boolean canDelete; + private boolean canReply; + private boolean isSticky; + private boolean isLocked; + private String datecreate; + private String datelastpost; + private String message; + private String lastReply = ""; + private boolean isPro; + + public String getTopicId() { + return topicId; + } + public void setTopicId(String topicId) { + this.topicId = topicId; + } + public String getSubject() { + return subject; + } + public void setSubject(String subject) { + this.subject = subject; + } + public String getAuthorId() { + return authorId; + } + public void setAuthorId(String authorId) { + this.authorId = authorId; + } + public String getAuthorname() { + return authorname; + } + public void setAuthorname(String authorname) { + this.authorname = authorname; + } + public String getRole() { + return role; + } + public void setRole(String role) { + this.role = role; + } + public int getIconserver() { + return iconserver; + } + public void setIconserver(int iconserver) { + this.iconserver = iconserver; + } + public int getIconfarm() { + return iconfarm; + } + public void setIconfarm(int iconfarm) { + this.iconfarm = iconfarm; + } + + public boolean isCanEdit() { + return canEdit; + } + public void setIsCanEdit(boolean canEdit) { + this.canEdit = canEdit; + } + public boolean isCanDelete() { + return canDelete; + } + public void setIsCanDelete(boolean canDelete) { + this.canDelete = canDelete; + } + public boolean isCanReply() { + return canReply; + } + public void setIsCanReply(boolean canReply) { + this.canReply = canReply; + } + public boolean isSticky() { + return isSticky; + } + public void setIsSticky(boolean isSticky) { + this.isSticky = isSticky; + } + public boolean isLocked() { + return isLocked; + } + public void setIsLocked(boolean isLocked) { + this.isLocked = isLocked; + } + public String getDatecreate() { + return datecreate; + } + public void setDatecreate(String datecreate) { + this.datecreate = datecreate; + } + public String getDatelastpost() { + return datelastpost; + } + public void setDatelastpost(String datelastpost) { + this.datelastpost = datelastpost; + } + public String getMessage() { + return message; + } + public void setMessage(String message) { + this.message = message; + } + public int getCountReplies() { + return countReplies; + } + public void setCountReplies(int countReplies) { + this.countReplies = countReplies; + } + public String getLastReply() { + return lastReply; + } + public void setLastReply(String lastReply) { + this.lastReply = lastReply; + } + public boolean isPro() { + return isPro; + } + public void setIsPro(boolean isPro) { + this.isPro = isPro; + } + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/TopicList.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/TopicList.java new file mode 100644 index 00000000..17e94ab3 --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/TopicList.java @@ -0,0 +1,65 @@ +package com.flickr4java.flickr.groups.discuss; + +import com.flickr4java.flickr.SearchResultList; + +public class TopicList extends SearchResultList { + private static final long serialVersionUID = 617037681128L; + private String groupId; + private int iconServer; + private int iconFarm; + private String name; + private int members; + private int privacy; + private String language; + private boolean isPoolModerated; + + public int getIconServer() { + return iconServer; + } + public void setIconServer(int iconServer) { + this.iconServer = iconServer; + } + public String getGroupId() { + return groupId; + } + public void setGroupId(String groupId) { + this.groupId = groupId; + } + public int getIconFarm() { + return iconFarm; + } + public void setIconFarm(int iconFarm) { + this.iconFarm = iconFarm; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public int getMembers() { + return members; + } + public void setMembers(int members) { + this.members = members; + } + public int getPrivacy() { + return privacy; + } + public void setPrivacy(int privacy) { + this.privacy = privacy; + } + public String getLanguage() { + return language; + } + public void setLanguage(String language) { + this.language = language; + } + public boolean isPoolModerated() { + return isPoolModerated; + } + public void setIsPoolModerated(boolean isPoolModerated) { + this.isPoolModerated = isPoolModerated; + } + +} From b04f4686aa37e781a129fe60acbffc13f81b72ae Mon Sep 17 00:00:00 2001 From: Jonathan Willis Date: Mon, 14 Apr 2014 11:38:39 -0400 Subject: [PATCH 024/239] Implemented poolinterface additional properties. --- .../flickr/groups/pools/PoolsInterface.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java index 5778d9f8..45512baa 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java @@ -7,6 +7,7 @@ import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.groups.Group; +import com.flickr4java.flickr.groups.GroupList; import com.flickr4java.flickr.photos.Extras; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photos.PhotoContext; @@ -123,7 +124,7 @@ public PhotoContext getContext(String photoId, String groupId) throws FlickrExce * @throws FlickrException */ public Collection getGroups() throws FlickrException { - List groups = new ArrayList(); + GroupList groups = new GroupList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_GROUPS); @@ -133,6 +134,10 @@ public Collection getGroups() throws FlickrException { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } Element groupsElement = response.getPayload(); + groups.setPage(groupsElement.getAttribute("page")); + groups.setPages(groupsElement.getAttribute("pages")); + groups.setPerPage(groupsElement.getAttribute("perpage")); + groups.setTotal(groupsElement.getAttribute("total")); NodeList groupNodes = groupsElement.getElementsByTagName("group"); for (int i = 0; i < groupNodes.getLength(); i++) { Element groupElement = (Element) groupNodes.item(i); @@ -141,6 +146,9 @@ public Collection getGroups() throws FlickrException { group.setName(groupElement.getAttribute("name")); group.setAdmin("1".equals(groupElement.getAttribute("admin"))); group.setPrivacy(groupElement.getAttribute("privacy")); + group.setIconServer(groupElement.getAttribute("iconserver")); + group.setIconFarm(groupElement.getAttribute("iconfarm")); + group.setPhotoCount(groupElement.getAttribute("photos")); groups.add(group); } return groups; From 41cbafa451b8137a16300fe43bac83e0998929a4 Mon Sep 17 00:00:00 2001 From: Jonathan Willis Date: Mon, 14 Apr 2014 12:16:11 -0400 Subject: [PATCH 025/239] Changed UserList to PersonTag, for better accuracy. --- .../flickr/people/PeopleInterface.java | 88 ++++++++++- .../flickr4java/flickr/people/PersonTag.java | 145 ++++++++++++++++++ .../flickr/people/PersonTagList.java | 37 +++++ .../flickr/people/PhotoLimits.java | 38 +++++ .../flickr4java/flickr/people/TimeZone.java | 35 +++++ .../com/flickr4java/flickr/people/User.java | 103 ++++++++++++- .../flickr/people/VideoLimits.java | 37 +++++ .../flickr/photos/people/PeopleInterface.java | 26 +++- 8 files changed, 492 insertions(+), 17 deletions(-) create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/people/PersonTag.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/people/PersonTagList.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/people/PhotoLimits.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/people/TimeZone.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/people/VideoLimits.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java index 51d8294d..3e542f87 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java @@ -3,6 +3,7 @@ */ 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; @@ -54,6 +55,8 @@ 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; @@ -80,6 +83,7 @@ public PeopleInterface(String apiKey, String sharedSecret, Transport transportAP public User findByEmail(String email) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_FIND_BY_EMAIL); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("find_email", email); @@ -107,6 +111,7 @@ public User findByEmail(String email) throws FlickrException { public User findByUsername(String username) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_FIND_BY_USERNAME); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("username", username); @@ -134,10 +139,11 @@ public User findByUsername(String username) throws FlickrException { public User getInfo(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); + parameters.put(Flickr.API_KEY, apiKey); 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()); } @@ -165,6 +171,15 @@ 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.setOffset(tzElement.getAttribute("offset")); + } return user; } @@ -187,10 +202,11 @@ public Collection getPublicGroups(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PUBLIC_GROUPS); + parameters.put(Flickr.API_KEY, apiKey); 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()); } @@ -234,6 +250,7 @@ public PhotoList getPublicPhotos(String userId, Set extras, int p Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PUBLIC_PHOTOS); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); @@ -248,7 +265,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()); } @@ -277,8 +294,9 @@ public PhotoList getPublicPhotos(String userId, Set extras, int p public User getUploadStatus() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_UPLOAD_STATUS); + parameters.put(Flickr.API_KEY, apiKey); - 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()); } @@ -291,9 +309,22 @@ public User getUploadStatus() throws FlickrException { Element bandwidthElement = XMLUtilities.getChild(userElement, "bandwidth"); user.setBandwidthMax(bandwidthElement.getAttribute("max")); user.setBandwidthUsed(bandwidthElement.getAttribute("used")); + user.setIsBandwidthUnlimited("1".equals(bandwidthElement.getAttribute("unlimited"))); 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; } @@ -303,6 +334,7 @@ public PhotoList getPhotos(String userId, String safeSearch, Date minUplo Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PHOTOS); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); if (safeSearch != null) { @@ -336,7 +368,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()); } @@ -360,6 +392,7 @@ public PhotoList getPhotosOf(String userId, String ownerId, Set e Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PHOTOS_OF); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); if (ownerId != null) { @@ -375,7 +408,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()); } @@ -465,11 +498,12 @@ public void editCoords(String photoId, String userId, Rectangle bounds) throws F } /** + * Get a list of people in a given photo. * * @param photoId * @throws FlickrException */ - public UserList getList(String photoId) throws FlickrException { + public PersonTagList getList(String photoId) throws FlickrException { // Delegating this to photos.people.PeopleInterface - Naming standard would be to use PeopleInterface but having 2 the same name can cause issues com.flickr4java.flickr.photos.people.PeopleInterface pi = new com.flickr4java.flickr.photos.people.PeopleInterface(apiKey, sharedSecret, transportAPI); @@ -486,9 +520,10 @@ public GroupList getGroups(String userId) throws FlickrException { GroupList groupList = new GroupList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_GROUPS); + parameters.put(Flickr.API_KEY, apiKey); 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()); } @@ -511,5 +546,42 @@ public GroupList getGroups(String userId) throws FlickrException { 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); + parameters.put(Flickr.API_KEY, apiKey); + + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + if (response.isError()) { + throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); + } + Element userElement = response.getPayload(); + User user = new User(); + user.setId(userElement.getAttribute("nsid")); + NodeList photoNodes = userElement.getElementsByTagName("photos"); + for (int i = 0; i < photoNodes.getLength(); i++) { + Element plElement = (Element) photoNodes.item(i); + PhotoLimits pl = new PhotoLimits(); + user.setPhotoLimits(pl); + pl.setMaxDisplay(plElement.getAttribute("maxdisplaypx")); + pl.setMaxUpload(plElement.getAttribute("maxupload")); + } + NodeList videoNodes = userElement.getElementsByTagName("videos"); + for (int i = 0; i < videoNodes.getLength(); i++) { + Element vlElement = (Element) videoNodes.item(i); + VideoLimits vl = new VideoLimits(); + user.setPhotoLimits(vl); + vl.setMaxDuration(vlElement.getAttribute("maxduration")); + vl.setMaxUpload(vlElement.getAttribute("maxupload")); + } + return user; + } } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PersonTag.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PersonTag.java new file mode 100644 index 00000000..428f023c --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PersonTag.java @@ -0,0 +1,145 @@ +package com.flickr4java.flickr.people; + +public class PersonTag { + + private String id; + + private String username; + + private String realName; + + private int iconFarm; + + private int iconServer; + + private String pathAlias; + + private String addedById; + + private int x; + + private int y; + + private int w; + + private int h; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + + public int getIconFarm() { + return iconFarm; + } + + public void setIconFarm(int iconFarm) { + this.iconFarm = iconFarm; + } + + public int getIconServer() { + return iconServer; + } + + public void setIconServer(int iconServer) { + this.iconServer = iconServer; + } + + /** + * @return the user_id of the user who added the person + */ + public String getAddedById() { + return addedById; + } + + /** + * @param addedById the user_id who added the person + */ + public void setAddedById(String addedById) { + this.addedById = addedById; + } + + /** + * @return the x coordinate of the bounding box around the person + */ + public int getX() { + return x; + } + + /** + * @param x the x to set the coordinate of the bounding box around the person + */ + public void setX(int x) { + this.x = x; + } + + /** + * @return the y coordinate of the bounding box around the person + */ + public int getY() { + return y; + } + + /** + * @param y the y to set the coordinate of the bounding box around the person + */ + public void setY(int y) { + this.y = y; + } + + /** + * @return the w coordinate of the bounding box around the person + */ + public int getW() { + return w; + } + + /** + * @param w the w to set the coordinate of the bounding box around the person + */ + public void setW(int w) { + this.w = w; + } + + /** + * @return the h coordinate of the bounding box around the person + */ + public int getH() { + return h; + } + + /** + * @param h the h to set the coordinate of the bounding box around the person + */ + public void setH(int h) { + this.h = h; + } + + public String getPathAlias() { + return pathAlias; + } + + public void setPathAlias(String pathAlias) { + this.pathAlias = pathAlias; + } + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PersonTagList.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PersonTagList.java new file mode 100644 index 00000000..6e88157f --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PersonTagList.java @@ -0,0 +1,37 @@ +package com.flickr4java.flickr.people; + +import java.util.ArrayList; + +public class PersonTagList extends ArrayList { + + /** + * + */ + private static final long serialVersionUID = -1841985011941978229L; + + private int total; + private int height; + private int width; + + public int getTotal() { + return total; + } + public void setTotal(int total) { + this.total = total; + } + public int getHeight() { + return height; + } + public void setHeight(int height) { + this.height = height; + } + public int getWidth() { + return width; + } + public void setWidth(int width) { + this.width = width; + } + + + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PhotoLimits.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PhotoLimits.java new file mode 100644 index 00000000..0f46e3c0 --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PhotoLimits.java @@ -0,0 +1,38 @@ +package com.flickr4java.flickr.people; + +public class PhotoLimits { + + + private String maxDisplay; + private String maxUpload; + + /** + * Maximum photo display pixels + * + * @return String max pixels + */ + + public String getMaxDisplay(){ + return maxDisplay; + } + + public void setMaxDisplay(String maxDisplay){ + this.maxDisplay = maxDisplay; + } + + /** + * Maximum photo upload + * + * @return String upload capacity + */ + + + public String getMaxUpload(){ + return maxUpload; + } + + public void setMaxUpload(String maxUpload){ + this.maxUpload = maxUpload; + } + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/TimeZone.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/TimeZone.java new file mode 100644 index 00000000..5bda5b48 --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/TimeZone.java @@ -0,0 +1,35 @@ +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/people/User.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java index 9e3e68b1..52cb85f3 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java @@ -43,6 +43,8 @@ protected synchronized SimpleDateFormat initialValue() { private String location; + private TimeZone timeZone; + private Date photosFirstDate; private Date photosFirstDateTaken; @@ -58,6 +60,18 @@ 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; @@ -76,6 +90,11 @@ protected synchronized SimpleDateFormat initialValue() { private boolean revFamily; private String pathAlias; + + private PhotoLimits photoLimits; + + private VideoLimits videoLimits; + public User() { } @@ -148,8 +167,14 @@ public void setRealName(String realName) { this.realName = realName; } - public String getLocation() { - return location; + + public TimeZone getTimeZone() { + return timeZone; + } + + + public TimeZone setTimeZone(TimeZone string) { + return this.timeZone = string; } /** @@ -165,6 +190,10 @@ public String getLocation() { public String getBuddyIconUrl() { return UrlUtilities.createBuddyIconUrl(iconFarm, iconServer, id); } + + public String getLocation() { + return location; + } /** * Construct the BuddyIconUrl using {@code https} scheme. @@ -432,4 +461,74 @@ public String getPathAlias() { public void setPathAlias(String pathAlias) { this.pathAlias = pathAlias; } + /** + * @return PhotoLimits class instance + */ + public PhotoLimits getPhotoLimits() { + return photoLimits; + } + + public void setPhotoLimits(PhotoLimits photoLimits) { + this.photoLimits = photoLimits; + } + /** + * @return VideoLimits class instance + */ + public VideoLimits getVideoLimits() { + return videoLimits; + } + + public void setPhotoLimits(VideoLimits videoLimits) { + this.videoLimits = videoLimits; + } + public Boolean isBandwidthUnlimited(){ + return bandwidthUnlimited; + } + public void setIsBandwidthUnlimited(Boolean bandwidthUnlimited){ + this.bandwidthUnlimited = bandwidthUnlimited; + } + + public String getSetsCreated() { + return setsCreated; + } + + public void setSetsCreated(String setsCreated) { + this.setsCreated = setsCreated; + } + + public String getSetsRemaining() { + return setsRemaining; + } + + public void setSetsRemaining(String setsRemaining) { + this.setsRemaining = setsRemaining; + } + + public String getVideosUploaded() { + return videosUploaded; + } + + public void setVideosUploaded(String videosUploaded) { + this.videosUploaded = videosUploaded; + } + + public String getVideosRemaining() { + return videosRemaining; + } + + public void setVideosRemaining(String videosRemaining) { + this.videosRemaining = videosRemaining; + } + + public String getVideosSizeMax() { + return videoSizeMax; + } + + public void setVideoSizeMax(String videoSizeMax) { + this.videoSizeMax = videoSizeMax; + } + + + + } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/VideoLimits.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/VideoLimits.java new file mode 100644 index 00000000..b99c6403 --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/VideoLimits.java @@ -0,0 +1,37 @@ +package com.flickr4java.flickr.people; + +public class VideoLimits { + + private String maxDuration; + private String maxUpload; + + /** + * Maximum photo display pixels + * + * @return String max pixels + */ + + public String getMaxDuration(){ + return maxDuration; + } + + public void setMaxDuration(String maxDuration){ + this.maxDuration = maxDuration; + } + + /** + * Maximum photo upload + * + * @return String upload capacity + */ + + + public String getMaxUpload(){ + return maxUpload; + } + + public void setMaxUpload(String maxUpload){ + this.maxUpload = maxUpload; + } + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java index 915b76e3..45db9dc9 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java @@ -6,6 +6,8 @@ import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.people.PersonTag; +import com.flickr4java.flickr.people.PersonTagList; import com.flickr4java.flickr.people.User; import com.flickr4java.flickr.people.UserList; @@ -136,7 +138,7 @@ public void editCoords(String photoId, String userId, Rectangle bounds) throws F } } - public UserList getList(String photoId) throws FlickrException { + public PersonTagList getList(String photoId) throws FlickrException{ Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); @@ -149,20 +151,30 @@ public UserList getList(String photoId) throws FlickrException { // @TODO this isn't a complete list ... Element usersElement = response.getPayload(); - UserList ul = new UserList(); + PersonTagList pt = new PersonTagList(); + pt.setTotal(Integer.parseInt(usersElement.getAttribute("total"))); + pt.setHeight(Integer.parseInt(usersElement.getAttribute("photo_height"))); + pt.setWidth(Integer.parseInt(usersElement.getAttribute("photo_width"))); NodeList usernodes = usersElement.getElementsByTagName("person"); for (int i = 0; i < usernodes.getLength(); i++) { Element userElement = (Element) usernodes.item(i); - User user = new User(); + PersonTag user = new PersonTag(); user.setId(userElement.getAttribute("nsid")); user.setUsername(userElement.getAttribute("username")); - user.setIconFarm(userElement.getAttribute("iconfarm")); - user.setIconServer(userElement.getAttribute("iconserver")); + user.setIconFarm(Integer.parseInt(userElement.getAttribute("iconfarm"))); + user.setIconServer(Integer.parseInt(userElement.getAttribute("iconserver"))); user.setRealName(userElement.getAttribute("realname")); - ul.add(user); + user.setAddedById(userElement.getAttribute("added_by")); + user.setPathAlias(userElement.getAttribute("path_alias")); + if(!userElement.getAttribute("x").equals("")){ + user.setX(Integer.parseInt(userElement.getAttribute("x"))); + user.setY(Integer.parseInt(userElement.getAttribute("y"))); + user.setW(Integer.parseInt(userElement.getAttribute("w"))); + user.setH(Integer.parseInt(userElement.getAttribute("h"))); + } } - return ul; + return pt; } } From fb7a3d871276f907e9fc9bdbd5c8a7081fee2e48 Mon Sep 17 00:00:00 2001 From: Jonathan Willis Date: Mon, 14 Apr 2014 12:35:36 -0400 Subject: [PATCH 026/239] Changed getAllContexts return tyoe to PhotoAllContext for better accuracy. Implemented unimplemented photo objects. --- .../com/flickr4java/flickr/photos/Photo.java | 46 +++++++++++ .../flickr/photos/PhotoAllContext.java | 21 +++++ .../flickr4java/flickr/photos/PhotoSet.java | 78 +++++++++++++++++++ .../flickr/photos/PhotoSetList.java | 14 ++++ .../flickr4java/flickr/photos/PhotoUtils.java | 57 ++++++++++++-- .../flickr/photos/PhotosInterface.java | 56 +++++++++---- .../com/flickr4java/flickr/photos/Pool.java | 57 ++++++++++++++ .../flickr4java/flickr/photos/PoolList.java | 12 +++ .../flickr4java/flickr/photos/SizeList.java | 41 ++++++++++ .../com/flickr4java/flickr/photos/Usage.java | 38 +++++++++ .../flickr/photos/people/PeopleInterface.java | 2 - 11 files changed, 399 insertions(+), 23 deletions(-) create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoAllContext.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoSet.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoSetList.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Pool.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PoolList.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SizeList.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Usage.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java index 4f686d6c..7eead37e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java @@ -132,6 +132,8 @@ protected synchronized SimpleDateFormat initialValue() { private Permissions permissions; private Editability editability; + + private Editability publicEditability; private int comments; @@ -168,12 +170,20 @@ protected synchronized SimpleDateFormat initialValue() { private int originalWidth; private int originalHeight; + + private PhotoUrl photoUrl; + + private Usage usage; + + private boolean hasPeople; /** * Stats on views, comments and favorites. Only set on {@link StatsInterface#getPopularPhotos} call. */ private Stats stats; + + public Photo() { } @@ -1149,4 +1159,40 @@ public int hashCode() { private boolean areEqual(Object x, Object y) { return x == null ? y == null : x.equals(y); } + + public PhotoUrl getPhotoUrl() { + return photoUrl; + } + + public void setPhotoUrl(PhotoUrl photoUrl) { + this.photoUrl = photoUrl; + + } + + public Usage getUsage() { + return usage; + } + + public void setUsage(Usage usage) { + this.usage = usage; + + } + + public Editability getPublicEditability() { + return publicEditability; + } + + public void setPublicEditability(Editability publicEditability) { + this.publicEditability = publicEditability; + } + + public boolean isHasPeople() { + return hasPeople; + } + + public void setIsHasPeople(boolean hasPeople) { + this.hasPeople = hasPeople; + } + + } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoAllContext.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoAllContext.java new file mode 100644 index 00000000..d3c08308 --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoAllContext.java @@ -0,0 +1,21 @@ +package com.flickr4java.flickr.photos; + +public class PhotoAllContext { + + private PhotoSetList photoSetList = new PhotoSetList(); + private PoolList poolList = new PoolList(); + + public PhotoSetList getPhotoSetList() { + return photoSetList; + } + public void setPhotoSetList(PhotoSetList photoSetList) { + this.photoSetList = photoSetList; + } + public PoolList getPoolList() { + return poolList; + } + public void setPoolList(PoolList poolList) { + this.poolList = poolList; + } + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoSet.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoSet.java new file mode 100644 index 00000000..05cc09b1 --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoSet.java @@ -0,0 +1,78 @@ +package com.flickr4java.flickr.photos; + +public class PhotoSet { + + private String title; + private String id; + private String primary; + private String secret; + private String server; + private String farm; + private int viewCount; + private int commentCount; + private int countPhoto; + private int countVideo; + + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getPrimary() { + return primary; + } + public void setPrimary(String primary) { + this.primary = primary; + } + public String getSecret() { + return secret; + } + public void setSecret(String secret) { + this.secret = secret; + } + public String getServer() { + return server; + } + public void setServer(String server) { + this.server = server; + } + public String getFarm() { + return farm; + } + public void setFarm(String farm) { + this.farm = farm; + } + public int getViewCount() { + return viewCount; + } + public void setViewCount(int viewCount) { + this.viewCount = viewCount; + } + public int getCountPhoto() { + return countPhoto; + } + public void setCountPhoto(int countPhoto) { + this.countPhoto = countPhoto; + } + public int getCommentCount() { + return commentCount; + } + public void setCommentCount(int commentCount) { + this.commentCount = commentCount; + } + public int getCountVideo() { + return countVideo; + } + public void setCountVideo(int countVideo) { + this.countVideo = countVideo; + } + + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoSetList.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoSetList.java new file mode 100644 index 00000000..b1e6f08b --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoSetList.java @@ -0,0 +1,14 @@ +package com.flickr4java.flickr.photos; + +import java.util.ArrayList; + +public class PhotoSetList extends ArrayList { + + /** + * + */ + private static final long serialVersionUID = -6749839441338939904L; + + + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java index ec3c6b5b..d07d506d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java @@ -1,15 +1,15 @@ package com.flickr4java.flickr.photos; -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; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.w3c.dom.Text; -import java.util.ArrayList; -import java.util.List; +import com.flickr4java.flickr.people.User; +import com.flickr4java.flickr.tags.Tag; +import com.flickr4java.flickr.util.XMLUtilities; /** * Utilitiy-methods to transfer requested XML to Photo-objects. @@ -78,6 +78,13 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme photo.setMedia(photoElement.getAttribute("media")); photo.setMediaStatus(photoElement.getAttribute("media_status")); photo.setPathAlias(photoElement.getAttribute("pathalias")); + + Element peopleElement = (Element) photoElement.getElementsByTagName("people").item(0); + if(peopleElement != null){ + photo.setIsHasPeople("1".equals(peopleElement.getAttribute("haspeople"))); + }else{ + photo.setIsHasPeople(false); + } // If the attributes active that contain the image-urls, // Size-objects created from them, which are used to override @@ -244,13 +251,18 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme photo.setDateTaken(photoElement.getAttribute("datetaken")); } - NodeList permissionsNodes = photoElement.getElementsByTagName("permissions"); - if (permissionsNodes.getLength() > 0) { - Element permissionsElement = (Element) permissionsNodes.item(0); + + try { + Element permissionsElement = (Element) photoElement.getElementsByTagName("permissions").item(0); Permissions permissions = new Permissions(); permissions.setComment(permissionsElement.getAttribute("permcomment")); permissions.setAddmeta(permissionsElement.getAttribute("permaddmeta")); + photo.setPermissions(permissions); + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { + // nop } + try { Element editabilityElement = (Element) photoElement.getElementsByTagName("editability").item(0); @@ -262,6 +274,31 @@ 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(); + publicEditability.setComment("1".equals(publicEditabilityElement.getAttribute("cancomment"))); + publicEditability.setAddmeta("1".equals(publicEditabilityElement.getAttribute("canaddmeta"))); + photo.setPublicEditability(publicEditability); + } catch (IndexOutOfBoundsException e) { + } 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"))); + usage.setIsCanPrint("1".equals(usageElement.getAttribute("canprint"))); + photo.setUsage(usage); + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { + // nop + } try { Element commentsElement = (Element) photoElement.getElementsByTagName("comments").item(0); @@ -334,12 +371,16 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme for (int i = 0; i < urlNodes.getLength(); i++) { Element urlElement = (Element) urlNodes.item(i); PhotoUrl photoUrl = new PhotoUrl(); + photo.setPhotoUrl(photoUrl); photoUrl.setType(urlElement.getAttribute("type")); photoUrl.setUrl(XMLUtilities.getValue(urlElement)); if (photoUrl.getType().equals("photopage")) { photo.setUrl(photoUrl.getUrl()); + urls.add(photoUrl.getUrl()); } + } + photo.setUrls(urls); } catch (IndexOutOfBoundsException e) { } catch (NullPointerException e) { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java index 3cd2ccb6..acfca617 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java @@ -184,11 +184,14 @@ public void delete(String photoId) throws FlickrException { * * @param photoId * The photo to return information for. - * @return a list of {@link PhotoPlace} objects + * @return a list of {@link PhotoContext} objects * @throws FlickrException */ - public List getAllContexts(String photoId) throws FlickrException { - List list = new ArrayList(); + public PhotoAllContext getAllContexts(String photoId) throws FlickrException { + PhotoSetList setList = new PhotoSetList(); + PoolList poolList = new PoolList(); + PhotoAllContext allContext = new PhotoAllContext(); + Map parameters = new HashMap(); parameters.put("method", METHOD_GET_ALL_CONTEXTS); @@ -198,16 +201,39 @@ public List getAllContexts(String photoId) throws FlickrException { if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } + 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); + } + } + + return allContext; - Collection coll = response.getPayloadCollection(); - for (Element el : coll) { - String id = el.getAttribute("id"); - String title = el.getAttribute("title"); - String kind = el.getTagName(); - - list.add(new PhotoPlace(kind, id, title)); - } - return list; } /** @@ -631,6 +657,7 @@ public Permissions getPerms(String photoId) throws FlickrException { permissions.setId(permissionsElement.getAttribute("id")); permissions.setPublicFlag("1".equals(permissionsElement.getAttribute("ispublic"))); permissions.setFamilyFlag("1".equals(permissionsElement.getAttribute("isfamily"))); + permissions.setFriendFlag("1".equals(permissionsElement.getAttribute("isFriend"))); permissions.setComment(permissionsElement.getAttribute("permcomment")); permissions.setAddmeta(permissionsElement.getAttribute("permaddmeta")); return permissions; @@ -705,7 +732,7 @@ public Collection getSizes(String photoId) throws FlickrException { * @throws FlickrException */ public Collection getSizes(String photoId, boolean sign) throws FlickrException { - List sizes = new ArrayList(); + SizeList sizes = new SizeList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_SIZES); @@ -717,6 +744,9 @@ public Collection getSizes(String photoId, boolean sign) throws FlickrExce throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } Element sizesElement = response.getPayload(); + sizes.setIsCanBlog("1".equals(sizesElement.getAttribute("canblog"))); + sizes.setIsCanDownload("1".equals(sizesElement.getAttribute("candownload"))); + sizes.setIsCanPrint("1".equals(sizesElement.getAttribute("canprint"))); NodeList sizeNodes = sizesElement.getElementsByTagName("size"); for (int i = 0; i < sizeNodes.getLength(); i++) { Element sizeElement = (Element) sizeNodes.item(i); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Pool.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Pool.java new file mode 100644 index 00000000..3c2f1e29 --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Pool.java @@ -0,0 +1,57 @@ +package com.flickr4java.flickr.photos; + +public class Pool { + + private String title; + private String id; + private String url; + private String iconServer; + private String iconFarm; + private int memberCount; + private int poolCount; + + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getUrl() { + return url; + } + public void setUrl(String url) { + this.url = url; + } + public String getIconServer() { + return iconServer; + } + public void setIconServer(String iconServer) { + this.iconServer = iconServer; + } + public String getIconFarm() { + return iconFarm; + } + public void setIconFarm(String iconFarm) { + this.iconFarm = iconFarm; + } + public int getMemberCount() { + return memberCount; + } + public void setMemberCount(int memberCount) { + this.memberCount = memberCount; + } + public int getPoolCount() { + return poolCount; + } + public void setPoolCount(int poolCount) { + this.poolCount = poolCount; + } + + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PoolList.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PoolList.java new file mode 100644 index 00000000..6de3b4fe --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PoolList.java @@ -0,0 +1,12 @@ +package com.flickr4java.flickr.photos; + +import java.util.ArrayList; + +public class PoolList extends ArrayList { + + /** + * + */ + private static final long serialVersionUID = -6749839441338939904L; + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SizeList.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SizeList.java new file mode 100644 index 00000000..533c456f --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SizeList.java @@ -0,0 +1,41 @@ +package com.flickr4java.flickr.photos; + +import java.util.ArrayList; + + + +public class SizeList extends ArrayList { + + /** + * @author Jonathan Willis + */ + private static final long serialVersionUID = -4735611134085303463L; + + private boolean canBlog; + private boolean canPrint; + private boolean canDownload; + + public boolean isCanBlog() { + return canBlog; + } + public void setIsCanBlog(boolean canBlog) { + this.canBlog = canBlog; + } + + public boolean isCanPrint() { + return canPrint; + } + public void setIsCanPrint(boolean canPrint) { + this.canPrint = canPrint; + } + + public boolean isCanDownload() { + return canDownload; + } + public void setIsCanDownload(boolean canDownload) { + this.canDownload = canDownload; + } + + + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Usage.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Usage.java new file mode 100644 index 00000000..f289c7ab --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Usage.java @@ -0,0 +1,38 @@ +package com.flickr4java.flickr.photos; + +public class Usage { + + private boolean canBlog; + private boolean canPrint; + private boolean canDownload; + private boolean canShare; + + public boolean isCanBlog() { + return canBlog; + } + public void setIsCanBlog(boolean canBlog) { + this.canBlog = canBlog; + } + + public boolean isCanPrint() { + return canPrint; + } + public void setIsCanPrint(boolean canPrint) { + this.canPrint = canPrint; + } + + public boolean isCanDownload() { + return canDownload; + } + public void setIsCanDownload(boolean canDownload) { + this.canDownload = canDownload; + } + public boolean isCanShare() { + return canShare; + } + public void setIsCanShare(boolean canShare) { + this.canShare = canShare; + } + + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java index 45db9dc9..001c633c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java @@ -8,8 +8,6 @@ import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.people.PersonTag; import com.flickr4java.flickr.people.PersonTagList; -import com.flickr4java.flickr.people.User; -import com.flickr4java.flickr.people.UserList; import org.w3c.dom.Element; import org.w3c.dom.NodeList; From 96d1a453c572b336248da39bb8c02132ea287761 Mon Sep 17 00:00:00 2001 From: Jonathan Willis Date: Mon, 14 Apr 2014 12:44:11 -0400 Subject: [PATCH 027/239] Added id paremeter. --- .../flickr/photos/geo/GeoInterface.java | 1 + .../flickr/photos/geo/GeoPermissions.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java index cc6334e4..47420178 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java @@ -119,6 +119,7 @@ public GeoPermissions getPerms(String photoId) throws FlickrException { perms.setContact("1".equals(permsElement.getAttribute("iscontact"))); perms.setFriend("1".equals(permsElement.getAttribute("isfriend"))); perms.setFamily("1".equals(permsElement.getAttribute("isfamily"))); + perms.setId(permsElement.getAttribute("id")); // I ignore the id attribute. should be the same as the given // photo id. return perms; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoPermissions.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoPermissions.java index 0de1f3aa..72e7d6e4 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoPermissions.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoPermissions.java @@ -16,6 +16,8 @@ public class GeoPermissions { private boolean friend; private boolean family; + + private String id; /** * @return true if contacts may see the geo data @@ -84,4 +86,18 @@ public boolean isPublic() { public void setPublic(boolean enable) { this.pub = enable; } + + /** + * @return the the photo_id + */ + public String getId() { + return id; + } + + /** + * @param id the photo_id + */ + public void setId(String id) { + this.id = id; + } } From 0ea5cd7e3ad97ec56cb8f720bd5eb5383a5e2e88 Mon Sep 17 00:00:00 2001 From: Jonathan Willis Date: Mon, 14 Apr 2014 12:52:39 -0400 Subject: [PATCH 028/239] Implemented shapeInterface and shapeData in PlacesInterface --- .../java/com/flickr4java/flickr/Flickr.java | 17 +++- .../flickr/photos/suggestions/Suggestion.java | 58 +++++++++++++ .../photos/suggestions/SuggestionList.java | 34 ++++++++ .../suggestions/SuggestionsInterface.java | 82 ++++++++++++++--- .../flickr4java/flickr/places/Location.java | 62 +++++++++++++ .../flickr/places/PlacesInterface.java | 87 ++++++++++++++++--- .../flickr4java/flickr/places/PlacesList.java | 22 ++++- .../flickr4java/flickr/places/ShapeData.java | 85 ++++++++++++++++++ .../flickr/places/ShapeDataList.java | 53 +++++++++++ 9 files changed, 476 insertions(+), 24 deletions(-) create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/Suggestion.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionList.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/places/ShapeData.java create mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/places/ShapeDataList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java index 171a9a1e..2b3a4855 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java @@ -26,6 +26,7 @@ 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; @@ -156,6 +157,8 @@ public class Flickr { private CamerasInterface cameraInterface; + private SuggestionsInterface suggestionsInterface; + private GroupDiscussInterface discussionInterface; /** @@ -615,11 +618,23 @@ public CamerasInterface getCamerasInterface() { 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) { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/Suggestion.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/Suggestion.java new file mode 100644 index 00000000..2acb2c1c --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/Suggestion.java @@ -0,0 +1,58 @@ +package com.flickr4java.flickr.photos.suggestions; + +import com.flickr4java.flickr.places.Location; + +public class Suggestion { + + private String suggestionId; + private String photoId; + private String dateSuggested; + private String suggestorId; + private String suggestorUsername; + private String note; + private Location location; + + public String getSuggestionId() { + return suggestionId; + } + public void setSuggestionId(String suggestionId) { + this.suggestionId = suggestionId; + } + public String getPhotoId() { + return photoId; + } + public void setPhotoId(String photoId) { + this.photoId = photoId; + } + public String getDateSuggested() { + return dateSuggested; + } + public void setDateSuggested(String dateSuggested) { + this.dateSuggested = dateSuggested; + } + public String getSuggestorId() { + return suggestorId; + } + public void setSuggestorId(String suggestorId) { + this.suggestorId = suggestorId; + } + public String getSuggestorUsername() { + return suggestorUsername; + } + public void setSuggestorUsername(String suggestorUsername) { + this.suggestorUsername = suggestorUsername; + } + public String getNote() { + return note; + } + public void setNote(String note) { + this.note = note; + } + public Location getLocation() { + return location; + } + public void setLocation(Location location) { + this.location = location; + } + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionList.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionList.java new file mode 100644 index 00000000..40cb9a1e --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionList.java @@ -0,0 +1,34 @@ +package com.flickr4java.flickr.photos.suggestions; + +import java.util.ArrayList; + +public class SuggestionList extends ArrayList{ + + /** + * + */ + private static final long serialVersionUID = -791184866429373856L; + private int total; + private int perPage; + private int page; + + public int getTotal() { + return total; + } + public void setTotal(int total) { + this.total = total; + } + public int getPerPage() { + return perPage; + } + public void setPerPage(int perPage) { + this.perPage = perPage; + } + public int getPage() { + return page; + } + public void setPage(int page) { + this.page = page; + } + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java index 167d88a9..a1f176ec 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java @@ -3,16 +3,23 @@ */ package com.flickr4java.flickr.photos.suggestions; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; - -import org.w3c.dom.Element; - import java.util.HashMap; import java.util.List; import java.util.Map; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.Response; +import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.groups.Group; +import com.flickr4java.flickr.groups.GroupList; +import com.flickr4java.flickr.places.Location; +import com.flickr4java.flickr.places.Place; +import com.flickr4java.flickr.util.XMLUtilities; + /** * @author acaplan * @@ -56,6 +63,7 @@ public void removeSuggestion(String suggestionId) throws FlickrException { private void act(String suggestionId, String method) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", method); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("suggestion_id", suggestionId); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); @@ -67,6 +75,7 @@ private void act(String suggestionId, String method) throws FlickrException { public void suggestLocation(String photoId, double lat, double lon, int accuracy, String woe_id, String place_id, String note) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SUGGEST_LOCATION); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("lat", lat); parameters.put("lon", lon); @@ -89,20 +98,73 @@ public void suggestLocation(String photoId, double lat, double lon, int accuracy } } - public List getList(String photoId, String statusId) throws FlickrException { + public SuggestionList getList(String photoId) throws FlickrException { + SuggestionList suggestionList = new SuggestionList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); - parameters.put("status_id", statusId); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } - Element suggestions = response.getPayload(); + Element suggestionsElement = response.getPayload(); + + suggestionList.setPage(XMLUtilities.getIntAttribute(suggestionsElement, "page")); + suggestionList.setPerPage(XMLUtilities.getIntAttribute(suggestionsElement, "perpage")); + suggestionList.setTotal(XMLUtilities.getIntAttribute(suggestionsElement, "total")); + + NodeList suggestionNodes = suggestionsElement.getElementsByTagName("suggestion"); + for (int i = 0; i < suggestionNodes.getLength(); i++) { + Element suggestionElement = (Element) suggestionNodes.item(i); + Suggestion suggestion = new Suggestion(); + suggestion.setSuggestionId(suggestionElement.getAttribute("id")); + suggestion.setPhotoId(suggestionElement.getAttribute("photo_id")); + suggestion.setDateSuggested(suggestionElement.getAttribute("date_suggested")); + suggestion.setNote(XMLUtilities.getChild(suggestionElement, "note").getTextContent()); + + Element suggestedElement = XMLUtilities.getChild(suggestionElement, "suggested_by"); + suggestion.setSuggestorUsername(suggestedElement.getAttribute("username")); + suggestion.setSuggestorId(suggestedElement.getAttribute("nsid")); + + Element locationElement = XMLUtilities.getChild(suggestionElement, "location"); + Location location = new Location(); + location.setLatitude(Double.parseDouble(locationElement.getAttribute("latitude"))); + location.setLongitude(Double.parseDouble(locationElement.getAttribute("longitude"))); + location.setWoeId(locationElement.getAttribute("woeid")); + location.setAccuracy(Integer.parseInt(locationElement.getAttribute("accuracy"))); + + Element regionElement = XMLUtilities.getChild(locationElement, "region"); + if(regionElement != null){ + Place placeReg = new Place(); + placeReg.setPlaceId(regionElement.getAttribute("place_id")); + placeReg.setWoeId(regionElement.getAttribute("woeid")); + location.setRegion(placeReg); + } + + Element countryElement = XMLUtilities.getChild(locationElement, "country"); + if(countryElement != null){ + Place placeCtry = new Place(); + placeCtry.setPlaceId(countryElement.getAttribute("place_id")); + placeCtry.setWoeId(countryElement.getAttribute("woeid")); + location.setCountry(placeCtry); + } + + Element countyElement = XMLUtilities.getChild(locationElement, "county"); + if(countyElement != null){ + Place placeCnty = new Place(); + placeCnty.setPlaceId(countyElement.getAttribute("place_id")); + placeCnty.setWoeId(countyElement.getAttribute("woeid")); + location.setCounty(placeCnty); + } + + suggestion.setLocation(location); + suggestionList.add(suggestion); + } + return suggestionList; - return null; } } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/Location.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/Location.java index ae8ce402..588328cd 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/Location.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/Location.java @@ -20,6 +20,8 @@ public class Location { private Place locality = null; + private int accuracy = 0; + private Place county = null; private Place region = null; @@ -31,6 +33,16 @@ public class Location { private double longitude = 0.0; private int placeType = 0; + + private String timezone; + + private String name; + + private String woeName; + + private boolean hasShapeData; + + private ShapeData shapeData; public Location() { } @@ -134,4 +146,54 @@ public void setPlaceType(int placeType) { this.placeType = placeType; } + public int getAccuracy() { + return accuracy; + } + + public void setAccuracy(int accuracy) { + this.accuracy = accuracy; + } + + public String getTimezone() { + return timezone; + } + + public void setTimezone(String timezone) { + this.timezone = timezone; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getWoeName() { + return woeName; + } + + public void setWoeName(String woeName) { + this.woeName = woeName; + } + + public boolean isHasShapeData() { + return hasShapeData; + } + + public void setIsHasShapeData(boolean hasShapeData) { + this.hasShapeData = hasShapeData; + } + + public ShapeData getShapedata() { + return shapeData; + } + + public void setShapedata(ShapeData shapeData) { + this.shapeData = shapeData; + } + + + } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java index 8ae6acb6..5abb2889 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java @@ -1,5 +1,15 @@ package com.flickr4java.flickr.places; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -8,15 +18,6 @@ import com.flickr4java.flickr.util.StringUtilities; import com.flickr4java.flickr.util.XMLUtilities; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import java.text.DateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - /** * Lookup Flickr Places. *

@@ -157,6 +158,7 @@ public PlacesList find(String query) throws FlickrException { Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_FIND); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("query", query); @@ -235,6 +237,7 @@ public PlacesList findByLatLon(double latitude, double longitude, int acc Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_FIND_BY_LATLON); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("lat", "" + Double.toString(latitude)); parameters.put("lon", "" + Double.toString(longitude)); @@ -277,6 +280,7 @@ public PlacesList getChildrenWithPhotosPublic(String placeId, String woeI Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_GET_CHILDREN_WITH_PHOTOS_PUBLIC); + parameters.put(Flickr.API_KEY, apiKey); if (placeId != null) { parameters.put("place_id", placeId); @@ -319,6 +323,7 @@ public PlacesList getChildrenWithPhotosPublic(String placeId, String woeI public Location getInfo(String placeId, String woeId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); + parameters.put(Flickr.API_KEY, apiKey); if (placeId != null) { parameters.put("place_id", placeId); @@ -349,6 +354,7 @@ public Location getInfo(String placeId, String woeId) throws FlickrException { public Location getInfoByUrl(String url) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO_BY_URL); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("url", url); @@ -373,6 +379,7 @@ public Location getInfoByUrl(String url) throws FlickrException { public ArrayList getPlaceTypes() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PLACETYPES); + parameters.put(Flickr.API_KEY, apiKey); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { @@ -410,10 +417,11 @@ public ArrayList getPlaceTypes() throws FlickrException { * @return A list of shapes * @throws FlickrException */ - public ArrayList getShapeHistory(String placeId, String woeId) throws FlickrException { - ArrayList shapeList = new ArrayList(); + public ShapeDataList getShapeHistory(String placeId, String woeId) throws FlickrException { + ShapeDataList shapeList = new ShapeDataList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_SHAPEHISTORY); + parameters.put(Flickr.API_KEY, apiKey); if (placeId != null) { parameters.put("place_id", placeId); @@ -426,7 +434,30 @@ public ArrayList getShapeHistory(String placeId, String woeId) throws F if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } - // Element shapeElement = response.getPayload(); + Element shapeElements = response.getPayload(); + shapeList.setTotal(Integer.parseInt(shapeElements.getAttribute("total"))); + shapeList.setWoeId(shapeElements.getAttribute("woe_id")); + shapeList.setPlaceId(shapeElements.getAttribute("place_id")); + shapeList.setPlaceType(shapeElements.getAttribute("place_type")); + shapeList.setPlaceTypeId(Integer.parseInt(shapeElements.getAttribute("place_type_id"))); + NodeList shapeNodes = shapeElements.getElementsByTagName("shape"); + for (int i = 0; i < shapeNodes.getLength(); i++) { + Element shapeElement = (Element) shapeNodes.item(i); + ShapeData data = new ShapeData(); + data.setAlpha( Double.parseDouble(shapeElement.getAttribute("alpha")) ); + data.setCountEdges(Integer.parseInt(shapeElement.getAttribute("count_edges"))); + data.setCountPoints(Integer.parseInt(shapeElement.getAttribute("count_points"))); + data.setCreated(shapeElement.getAttribute("created")); + data.setIsDonutHole("1".equals(shapeElement.getAttribute("is_donuthole"))); + data.setHasDonuthole("1".equals(shapeElement.getAttribute("has_donuthole"))); + + Element polyElement = XMLUtilities.getChild(shapeElement , "polylines"); + data.setPolyline(XMLUtilities.getChildValue(polyElement, "polyline")); + Element urlElement = XMLUtilities.getChild(shapeElement, "urls"); + data.setShapefile(XMLUtilities.getChildValue(urlElement, "shapefile")); + shapeList.add(data); + } + return shapeList; } @@ -451,6 +482,7 @@ public PlacesList getTopPlacesList(int placeType, Date date, String place Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_GET_TOP_PLACES_LIST); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type", intPlaceTypeToString(placeType)); if (placeId != null) { @@ -508,6 +540,7 @@ public PlacesList placesForBoundingBox(int placeType, String bbox) throws Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_PLACES_FOR_BOUNDINGBOX); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type", intPlaceTypeToString(placeType)); parameters.put("bbox", bbox); @@ -522,6 +555,8 @@ public PlacesList placesForBoundingBox(int placeType, String bbox) throws placesList.setPages("1"); placesList.setPerPage("" + placesNodes.getLength()); placesList.setTotal("" + placesNodes.getLength()); + placesList.setBBox(placesElement.getAttribute("bbox")); + placesList.setPlaceType(placesElement.getAttribute("place_type")); for (int i = 0; i < placesNodes.getLength(); i++) { Element placeElement = (Element) placesNodes.item(i); placesList.add(parsePlace(placeElement)); @@ -550,6 +585,7 @@ public PlacesList placesForContacts(int placeType, String placeId, String Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_PLACES_FOR_CONTACTS); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type", intPlaceTypeToString(placeType)); if (placeId != null) { @@ -620,6 +656,7 @@ public PlacesList placesForTags(int placeTypeId, String woeId, String pla Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_PLACES_FOR_TAGS); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type_id", Integer.toString(placeTypeId)); if (woeId != null) { @@ -701,6 +738,7 @@ public PlacesList placesForUser(int placeType, String woeId, String place Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_PLACES_FOR_USER); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type", intPlaceTypeToString(placeType)); if (placeId != null) { @@ -754,6 +792,7 @@ public PlacesList placesForUser(int placeType, String woeId, String place public Location resolvePlaceId(String placeId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_RESOLVE_PLACE_ID); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_id", placeId); @@ -781,6 +820,7 @@ public Location resolvePlaceId(String placeId) throws FlickrException { public Location resolvePlaceURL(String flickrPlacesUrl) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_RESOLVE_PLACE_URL); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("url", flickrPlacesUrl); @@ -819,6 +859,7 @@ public ArrayList tagsForPlace(String woeId, String placeId, Date minUploadD Map parameters = new HashMap(); ArrayList tagsList = new ArrayList(); parameters.put("method", METHOD_TAGS_FOR_PLACE); + parameters.put(Flickr.API_KEY, apiKey); if (woeId != null) { parameters.put("woe_id", woeId); @@ -868,6 +909,10 @@ private Location parseLocation(Element locationElement) { location.setWoeId(locationElement.getAttribute("woeid")); location.setLatitude(locationElement.getAttribute("latitude")); location.setLongitude(locationElement.getAttribute("longitude")); + location.setTimezone(locationElement.getAttribute("timezone")); + location.setName(locationElement.getAttribute("name")); + 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)); @@ -879,6 +924,24 @@ private Location parseLocation(Element locationElement) { } location.setRegion(parseLocationPlace(regionElement, Place.TYPE_REGION)); location.setCountry(parseLocationPlace(countryElement, Place.TYPE_COUNTRY)); + + ShapeData data = new ShapeData(); + + Element shapeElement = XMLUtilities.getChild(locationElement, "shapedata"); + data.setAlpha( Double.parseDouble(shapeElement.getAttribute("alpha")) ); + data.setCountEdges(Integer.parseInt(shapeElement.getAttribute("count_edges"))); + data.setCountPoints(Integer.parseInt(shapeElement.getAttribute("count_points"))); + data.setCreated(shapeElement.getAttribute("created")); + data.setIsDonutHole("1".equals(shapeElement.getAttribute("is_donuthole"))); + data.setHasDonuthole("1".equals(shapeElement.getAttribute("has_donuthole"))); + + Element polyElement = XMLUtilities.getChild(locationElement, "polylines"); + data.setPolyline(XMLUtilities.getChildValue(polyElement, "polyline")); + Element urlElement = XMLUtilities.getChild(locationElement, "urls"); + data.setShapefile(XMLUtilities.getChildValue(urlElement, "shapefile")); + + location.setShapedata(data); + return location; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesList.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesList.java index b3f9cb59..959c7afb 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesList.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesList.java @@ -10,7 +10,27 @@ */ public class PlacesList extends SearchResultList { private static final long serialVersionUID = -6773614467896936754L; - + private String bBox; + private String placeType; + public PlacesList() { } + + public String getBBox() { + return bBox; + } + + public void setBBox(String bBox) { + this.bBox = bBox; + } + + public String getPlaceType() { + return placeType; + } + + public void setPlaceType(String placeType) { + this.placeType = placeType; + } + + } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/ShapeData.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/ShapeData.java new file mode 100644 index 00000000..1394685b --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/ShapeData.java @@ -0,0 +1,85 @@ +package com.flickr4java.flickr.places; + +public class ShapeData { + + private String created; + + private double alpha; + + private int countPoints; + + private int countEdges; + + private boolean hasDonuthole; + + private boolean isDonutHole; + + private String polyline; + + private String shapefile; + + public String getCreated() { + return created; + } + + public void setCreated(String created) { + this.created = created; + } + + public double getAlpha() { + return alpha; + } + + public void setAlpha(double alpha) { + this.alpha = alpha; + } + + public int getCountPoints() { + return countPoints; + } + + public void setCountPoints(int countPoints) { + this.countPoints = countPoints; + } + + public int getCountEdges() { + return countEdges; + } + + public void setCountEdges(int countEdges) { + this.countEdges = countEdges; + } + + public boolean isHasDonuthole() { + return hasDonuthole; + } + + public void setHasDonuthole(boolean hasDonuthole) { + this.hasDonuthole = hasDonuthole; + } + + public boolean isDonutHole() { + return isDonutHole; + } + + public void setIsDonutHole(boolean isDonutHole) { + this.isDonutHole = isDonutHole; + } + + public String getPolyline() { + return polyline; + } + + public void setPolyline(String polyline) { + this.polyline = polyline; + } + + public String getShapefile() { + return shapefile; + } + + public void setShapefile(String shapefile) { + this.shapefile = shapefile; + } + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/ShapeDataList.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/ShapeDataList.java new file mode 100644 index 00000000..fb96d8e4 --- /dev/null +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/ShapeDataList.java @@ -0,0 +1,53 @@ +package com.flickr4java.flickr.places; + +import java.util.ArrayList; + +public class ShapeDataList extends ArrayList{ + + /** + * + */ + private static final long serialVersionUID = 3405746186476466870L; + + private int total; + private String woeId; + private String placeId; + private String placeType; + private int placeTypeId; + + + public int getPlaceTypeId() { + return placeTypeId; + } + + public void setPlaceTypeId(int placeTypeId) { + this.placeTypeId = placeTypeId; + } + public int getTotal() { + return total; + } + public void setTotal(int total) { + this.total = total; + } + public String getWoeId() { + return woeId; + } + public void setWoeId(String woeId) { + this.woeId = woeId; + } + public String getPlaceId() { + return placeId; + } + public void setPlaceId(String placeId) { + this.placeId = placeId; + } + + public String getPlaceType() { + return placeType; + } + + public void setPlaceType(String placeType) { + this.placeType = placeType; + } + +} From 2f26563c3102e87f9732ac46294476db5e2295c4 Mon Sep 17 00:00:00 2001 From: Jonathan Willis Date: Mon, 14 Apr 2014 12:57:56 -0400 Subject: [PATCH 029/239] Implemented photosets unimplimented properties --- .../flickr/photosets/Photoset.java | 82 +++++++++++++++++++ .../flickr/photosets/Photosets.java | 36 ++++++++ .../flickr/photosets/PhotosetsInterface.java | 43 +++++++++- 3 files changed, 159 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photoset.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photoset.java index aa6ebab7..fb39b772 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photoset.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photoset.java @@ -30,10 +30,26 @@ public class Photoset { private String farm; private int photoCount; + + private int videoCount; + + private int viewCount; + + private int commentCount; + + private String dateCreate; + + private String dateUpdate; private String title; private String description; + + private boolean isVisible; + + private boolean canComment; + + private boolean needsInterstitial; public Photoset() { @@ -135,4 +151,70 @@ public void setDescription(String description) { this.description = description; } + public int getVideoCount() { + return videoCount; + } + + public void setVideoCount(int videoCount) { + this.videoCount = videoCount; + } + + public int getViewCount() { + return viewCount; + } + + public void setViewCount(int viewCount) { + this.viewCount = viewCount; + } + + public int getCommentCount() { + return commentCount; + } + + public void setCommentCount(int commentCount) { + this.commentCount = commentCount; + } + + public String getDateCreate() { + return dateCreate; + } + + public void setDateCreate(String dateCreate) { + this.dateCreate = dateCreate; + } + + public String getDateUpdate() { + return dateUpdate; + } + + public void setDateUpdate(String dateUpdate) { + this.dateUpdate = dateUpdate; + } + + public boolean isVisible() { + return isVisible; + } + + public void setIsVisible(boolean isVisible) { + this.isVisible = isVisible; + } + + + + public boolean isNeedsInterstitial() { + return needsInterstitial; + } + + public void setIsNeedsInterstitial(boolean needsInterstitial) { + this.needsInterstitial = needsInterstitial; + } + + public boolean isCanComment() { + return canComment; + } + + public void setIsCanComment(boolean canComment) { + this.canComment = canComment; + } + } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photosets.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photosets.java index 0371cb2a..74f995ac 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photosets.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photosets.java @@ -12,6 +12,10 @@ */ public class Photosets { + private int total; + private int perPage; + private int page; + private int pages; private boolean canCreate; private Collection photosets; @@ -36,4 +40,36 @@ public void setPhotosets(Collection photosets) { this.photosets = photosets; } + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public int getPerPage() { + return perPage; + } + + public void setPerPage(int perPage) { + this.perPage = perPage; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public int getPage() { + return page; + } + + public void setPage(int page) { + this.page = page; + } + } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java index 2e06352d..5ce01118 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java @@ -87,6 +87,7 @@ public PhotosetsInterface(String apiKey, String sharedSecret, Transport transpor public void addPhoto(String photosetId, String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ADD_PHOTO); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_id", photoId); @@ -112,6 +113,7 @@ public void addPhoto(String photosetId, String photoId) throws FlickrException { public Photoset create(String title, String description, String primaryPhotoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_CREATE); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("title", title); parameters.put("description", description); @@ -138,6 +140,7 @@ public Photoset create(String title, String description, String primaryPhotoId) public void delete(String photosetId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_DELETE); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); @@ -161,6 +164,7 @@ public void delete(String photosetId) throws FlickrException { public void editMeta(String photosetId, String title, String description) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_EDIT_META); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("title", title); @@ -188,6 +192,7 @@ public void editMeta(String photosetId, String title, String description) throws public void editPhotos(String photosetId, String primaryPhotoId, String[] photoIds) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_EDIT_PHOTOS); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("primary_photo_id", primaryPhotoId); @@ -214,6 +219,7 @@ public void editPhotos(String photosetId, String primaryPhotoId, String[] photoI public PhotoContext getContext(String photoId, String photosetId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_CONTEXT); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("photoset_id", photosetId); @@ -256,6 +262,7 @@ public PhotoContext getContext(String photoId, String photosetId) throws FlickrE public Photoset getInfo(String photosetId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); @@ -283,7 +290,14 @@ public Photoset getInfo(String photosetId) throws FlickrException { photoset.setSecret(photosetElement.getAttribute("secret")); photoset.setServer(photosetElement.getAttribute("server")); photoset.setFarm(photosetElement.getAttribute("farm")); - photoset.setPhotoCount(photosetElement.getAttribute("photos")); + photoset.setPhotoCount(photosetElement.getAttribute("count_photos")); + photoset.setVideoCount(Integer.parseInt(photosetElement.getAttribute("count_videos"))); + photoset.setViewCount(Integer.parseInt(photosetElement.getAttribute("count_views"))); + photoset.setCommentCount(Integer.parseInt(photosetElement.getAttribute("count_comments"))); + photoset.setDateCreate(photosetElement.getAttribute("date_create")); + photoset.setDateUpdate(photosetElement.getAttribute("date_update")); + + photoset.setIsCanComment("1".equals(photosetElement.getAttribute("can_comment"))); photoset.setTitle(XMLUtilities.getChildValue(photosetElement, "title")); photoset.setDescription(XMLUtilities.getChildValue(photosetElement, "description")); @@ -323,6 +337,7 @@ public Photosets getList(String userId) throws FlickrException { public Photosets getList(String userId, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); + parameters.put(Flickr.API_KEY, apiKey); if (userId != null) { parameters.put("user_id", userId); @@ -342,6 +357,11 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce } Photosets photosetsObject = new Photosets(); Element photosetsElement = response.getPayload(); + photosetsObject.setCanCreate(XMLUtilities.getBooleanAttribute(photosetsElement, "cancreate")); + photosetsObject.setPage(XMLUtilities.getIntAttribute(photosetsElement, "page")); + photosetsObject.setPages(XMLUtilities.getIntAttribute(photosetsElement, "pages")); + photosetsObject.setPerPage(XMLUtilities.getIntAttribute(photosetsElement, "perpage")); + photosetsObject.setTotal(XMLUtilities.getIntAttribute(photosetsElement, "total")); List photosets = new ArrayList(); NodeList photosetElements = photosetsElement.getElementsByTagName("photoset"); for (int i = 0; i < photosetElements.getLength(); i++) { @@ -364,7 +384,18 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce photoset.setServer(photosetElement.getAttribute("server")); photoset.setFarm(photosetElement.getAttribute("farm")); photoset.setPhotoCount(photosetElement.getAttribute("photos")); - + photoset.setVideoCount(Integer.parseInt(photosetElement.getAttribute("videos"))); + photoset.setViewCount(Integer.parseInt(photosetElement.getAttribute("count_views"))); + photoset.setCommentCount(Integer.parseInt(photosetElement.getAttribute("count_comments"))); + photoset.setDateCreate(photosetElement.getAttribute("date_create")); + photoset.setDateUpdate(photosetElement.getAttribute("date_update")); + + photoset.setIsCanComment("1".equals(photosetElement.getAttribute("can_comment"))); + photoset.setIsNeedsInterstitial("1".equals(photosetElement.getAttribute("needs_interstitial"))); + photoset.setIsVisible("1".equals(photosetElement.getAttribute("visibility_can_see_set"))); + photoset.setDescription(XMLUtilities.getChildValue(photosetElement, "description")); + + photoset.setTitle(XMLUtilities.getChildValue(photosetElement, "title")); photoset.setDescription(XMLUtilities.getChildValue(photosetElement, "description")); @@ -372,6 +403,7 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce } photosetsObject.setPhotosets(photosets); + return photosetsObject; } @@ -388,6 +420,7 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce public int getPhotosetCount(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); + parameters.put(Flickr.API_KEY, apiKey); if (userId != null) { parameters.put("user_id", userId); @@ -435,6 +468,7 @@ public PhotoList getPhotos(String photosetId, Set extras, int pri PhotoList photos = new PhotoList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PHOTOS); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); @@ -513,6 +547,7 @@ public PhotoList getPhotos(String photosetId, int perPage, int page) thro public void orderSets(String[] photosetIds) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ORDER_SETS); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_ids", StringUtilities.join(photosetIds, ",")); @@ -534,6 +569,7 @@ public void orderSets(String[] photosetIds) throws FlickrException { public void removePhoto(String photosetId, String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_REMOVE_PHOTO); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_id", photoId); @@ -556,6 +592,7 @@ public void removePhoto(String photosetId, String photoId) throws FlickrExceptio public void removePhotos(String photosetId, String photoIds) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_REMOVE_PHOTOS); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_ids", photoIds); @@ -578,6 +615,7 @@ public void removePhotos(String photosetId, String photoIds) throws FlickrExcept public void reorderPhotos(String photosetId, String photoIds) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_REORDER_PHOTOS); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_ids", photoIds); @@ -600,6 +638,7 @@ public void reorderPhotos(String photosetId, String photoIds) throws FlickrExcep public void setPrimaryPhoto(String photosetId, String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SET_PRIMARY_PHOTO); + parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_id", photoId); From 357dfd0b8ac9cdd93e3170d0961510baa8211a50 Mon Sep 17 00:00:00 2001 From: Jonathan Willis Date: Mon, 14 Apr 2014 12:58:53 -0400 Subject: [PATCH 030/239] Edited test to use PersonTagList insted of UserList --- .../java/com/flickr4java/flickr/test/PeopleInterfaceTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java index 2cf470d2..b22af4c4 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java @@ -10,6 +10,8 @@ import com.flickr4java.flickr.groups.Group; import com.flickr4java.flickr.groups.GroupList; import com.flickr4java.flickr.people.PeopleInterface; +import com.flickr4java.flickr.people.PersonTag; +import com.flickr4java.flickr.people.PersonTagList; import com.flickr4java.flickr.people.User; import com.flickr4java.flickr.people.UserList; import com.flickr4java.flickr.photos.Photo; @@ -106,7 +108,7 @@ public void testGetPhotosOf() throws FlickrException { public void testAddDelete() throws FlickrException { PeopleInterface iface = flickr.getPeopleInterface(); iface.add(testProperties.getPhotoId(), testProperties.getNsid(), null); - UserList usrs = iface.getList(testProperties.getPhotoId()); + PersonTagList usrs = iface.getList(testProperties.getPhotoId()); assertNotNull(usrs); assertEquals(1, usrs.size()); iface.delete(testProperties.getPhotoId(), testProperties.getNsid()); From 9fa1eecf835fd9e749bfd5c104ef905365230b66 Mon Sep 17 00:00:00 2001 From: Jonathan Willis Date: Mon, 14 Apr 2014 14:19:17 -0400 Subject: [PATCH 031/239] Removed api_key parameter from interface files --- .../groups/discuss/GroupDiscussInterface.java | 4 ---- .../flickr/people/PeopleInterface.java | 14 ++------------ .../suggestions/SuggestionsInterface.java | 5 ++--- .../flickr/photosets/PhotosetsInterface.java | 17 +---------------- .../flickr/places/PlacesInterface.java | 15 --------------- 5 files changed, 5 insertions(+), 50 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java index fa66a668..69c3cfa5 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java @@ -55,7 +55,6 @@ public TopicList getTopicsList(String groupId, int perPage, int page) thr TopicList topicList = new TopicList(); Map parameters = new HashMap(); parameters.put("method", METHOD_TOPICS_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("group_id", groupId); @@ -106,7 +105,6 @@ public TopicList getTopicsList(String groupId, int perPage, int page) thr public Topic getTopicInfo(String topicId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_TOPICS_GET_INFO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("topic_id", topicId); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); @@ -134,7 +132,6 @@ public ReplyObject getReplyList(String topicId, int perPage, int page) throws F TopicList topic = new TopicList(); Map parameters = new HashMap(); parameters.put("method", METHOD_REPLIES_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("topic_id", topicId); @@ -186,7 +183,6 @@ public ReplyObject getReplyList(String topicId, int perPage, int page) throws F public Reply getReplyInfo(String topicId, String replyId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_REPLIES_GET_INFO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("topic_id", topicId); parameters.put("reply_id", replyId); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java index 3e542f87..9ee2c8f0 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java @@ -83,7 +83,6 @@ public PeopleInterface(String apiKey, String sharedSecret, Transport transportAP public User findByEmail(String email) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_FIND_BY_EMAIL); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("find_email", email); @@ -111,8 +110,7 @@ public User findByEmail(String email) throws FlickrException { public User findByUsername(String username) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_FIND_BY_USERNAME); - parameters.put(Flickr.API_KEY, apiKey); - + parameters.put("username", username); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); @@ -139,8 +137,7 @@ public User findByUsername(String username) throws FlickrException { public User getInfo(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); - parameters.put(Flickr.API_KEY, apiKey); - + parameters.put("user_id", userId); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); @@ -202,7 +199,6 @@ public Collection getPublicGroups(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PUBLIC_GROUPS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); @@ -250,7 +246,6 @@ public PhotoList getPublicPhotos(String userId, Set extras, int p Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PUBLIC_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); @@ -294,7 +289,6 @@ public PhotoList getPublicPhotos(String userId, Set extras, int p public User getUploadStatus() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_UPLOAD_STATUS); - parameters.put(Flickr.API_KEY, apiKey); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { @@ -334,7 +328,6 @@ public PhotoList getPhotos(String userId, String safeSearch, Date minUplo Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); if (safeSearch != null) { @@ -392,7 +385,6 @@ public PhotoList getPhotosOf(String userId, String ownerId, Set e Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PHOTOS_OF); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); if (ownerId != null) { @@ -520,7 +512,6 @@ public GroupList getGroups(String userId) throws FlickrException { GroupList groupList = new GroupList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_GROUPS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); @@ -556,7 +547,6 @@ public GroupList getGroups(String userId) throws FlickrException { public User getLimits() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIMITS); - parameters.put(Flickr.API_KEY, apiKey); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java index a1f176ec..5f783c3a 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java @@ -63,7 +63,6 @@ public void removeSuggestion(String suggestionId) throws FlickrException { private void act(String suggestionId, String method) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", method); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("suggestion_id", suggestionId); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); @@ -75,7 +74,7 @@ private void act(String suggestionId, String method) throws FlickrException { public void suggestLocation(String photoId, double lat, double lon, int accuracy, String woe_id, String place_id, String note) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SUGGEST_LOCATION); - parameters.put(Flickr.API_KEY, apiKey); + parameters.put("photo_id", photoId); parameters.put("lat", lat); parameters.put("lon", lon); @@ -102,7 +101,7 @@ public SuggestionList getList(String photoId) throws FlickrException SuggestionList suggestionList = new SuggestionList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); + parameters.put("photo_id", photoId); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java index 5ce01118..355865e6 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java @@ -87,7 +87,6 @@ public PhotosetsInterface(String apiKey, String sharedSecret, Transport transpor public void addPhoto(String photosetId, String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_ADD_PHOTO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_id", photoId); @@ -113,7 +112,6 @@ public void addPhoto(String photosetId, String photoId) throws FlickrException { public Photoset create(String title, String description, String primaryPhotoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_CREATE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("title", title); parameters.put("description", description); @@ -140,7 +138,6 @@ public Photoset create(String title, String description, String primaryPhotoId) public void delete(String photosetId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_DELETE); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); @@ -164,7 +161,6 @@ public void delete(String photosetId) throws FlickrException { public void editMeta(String photosetId, String title, String description) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_EDIT_META); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("title", title); @@ -192,7 +188,6 @@ public void editMeta(String photosetId, String title, String description) throws public void editPhotos(String photosetId, String primaryPhotoId, String[] photoIds) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_EDIT_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("primary_photo_id", primaryPhotoId); @@ -219,7 +214,6 @@ public void editPhotos(String photosetId, String primaryPhotoId, String[] photoI public PhotoContext getContext(String photoId, String photosetId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_CONTEXT); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("photoset_id", photosetId); @@ -262,7 +256,6 @@ public PhotoContext getContext(String photoId, String photosetId) throws FlickrE public Photoset getInfo(String photosetId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); @@ -337,7 +330,6 @@ public Photosets getList(String userId) throws FlickrException { public Photosets getList(String userId, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); if (userId != null) { parameters.put("user_id", userId); @@ -420,7 +412,6 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce public int getPhotosetCount(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); if (userId != null) { parameters.put("user_id", userId); @@ -468,7 +459,6 @@ public PhotoList getPhotos(String photosetId, Set extras, int pri PhotoList photos = new PhotoList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); @@ -546,8 +536,7 @@ public PhotoList getPhotos(String photosetId, int perPage, int page) thro */ public void orderSets(String[] photosetIds) throws FlickrException { Map parameters = new HashMap(); - parameters.put("method", METHOD_ORDER_SETS); - parameters.put(Flickr.API_KEY, apiKey); + parameters.put("method", METHOD_ORDER_SETS);; parameters.put("photoset_ids", StringUtilities.join(photosetIds, ",")); @@ -569,7 +558,6 @@ public void orderSets(String[] photosetIds) throws FlickrException { public void removePhoto(String photosetId, String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_REMOVE_PHOTO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_id", photoId); @@ -592,7 +580,6 @@ public void removePhoto(String photosetId, String photoId) throws FlickrExceptio public void removePhotos(String photosetId, String photoIds) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_REMOVE_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_ids", photoIds); @@ -615,7 +602,6 @@ public void removePhotos(String photosetId, String photoIds) throws FlickrExcept public void reorderPhotos(String photosetId, String photoIds) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_REORDER_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_ids", photoIds); @@ -638,7 +624,6 @@ public void reorderPhotos(String photosetId, String photoIds) throws FlickrExcep public void setPrimaryPhoto(String photosetId, String photoId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_SET_PRIMARY_PHOTO); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("photo_id", photoId); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java index 5abb2889..d1262e8d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java @@ -158,7 +158,6 @@ public PlacesList find(String query) throws FlickrException { Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_FIND); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("query", query); @@ -237,7 +236,6 @@ public PlacesList findByLatLon(double latitude, double longitude, int acc Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_FIND_BY_LATLON); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("lat", "" + Double.toString(latitude)); parameters.put("lon", "" + Double.toString(longitude)); @@ -280,7 +278,6 @@ public PlacesList getChildrenWithPhotosPublic(String placeId, String woeI Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_GET_CHILDREN_WITH_PHOTOS_PUBLIC); - parameters.put(Flickr.API_KEY, apiKey); if (placeId != null) { parameters.put("place_id", placeId); @@ -323,7 +320,6 @@ public PlacesList getChildrenWithPhotosPublic(String placeId, String woeI public Location getInfo(String placeId, String woeId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); - parameters.put(Flickr.API_KEY, apiKey); if (placeId != null) { parameters.put("place_id", placeId); @@ -354,7 +350,6 @@ public Location getInfo(String placeId, String woeId) throws FlickrException { public Location getInfoByUrl(String url) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO_BY_URL); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("url", url); @@ -379,7 +374,6 @@ public Location getInfoByUrl(String url) throws FlickrException { public ArrayList getPlaceTypes() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PLACETYPES); - parameters.put(Flickr.API_KEY, apiKey); Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { @@ -421,7 +415,6 @@ public ShapeDataList getShapeHistory(String placeId, String woeId) th ShapeDataList shapeList = new ShapeDataList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_SHAPEHISTORY); - parameters.put(Flickr.API_KEY, apiKey); if (placeId != null) { parameters.put("place_id", placeId); @@ -482,7 +475,6 @@ public PlacesList getTopPlacesList(int placeType, Date date, String place Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_GET_TOP_PLACES_LIST); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type", intPlaceTypeToString(placeType)); if (placeId != null) { @@ -540,7 +532,6 @@ public PlacesList placesForBoundingBox(int placeType, String bbox) throws Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_PLACES_FOR_BOUNDINGBOX); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type", intPlaceTypeToString(placeType)); parameters.put("bbox", bbox); @@ -585,7 +576,6 @@ public PlacesList placesForContacts(int placeType, String placeId, String Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_PLACES_FOR_CONTACTS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type", intPlaceTypeToString(placeType)); if (placeId != null) { @@ -656,7 +646,6 @@ public PlacesList placesForTags(int placeTypeId, String woeId, String pla Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_PLACES_FOR_TAGS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type_id", Integer.toString(placeTypeId)); if (woeId != null) { @@ -738,7 +727,6 @@ public PlacesList placesForUser(int placeType, String woeId, String place Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_PLACES_FOR_USER); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type", intPlaceTypeToString(placeType)); if (placeId != null) { @@ -792,7 +780,6 @@ public PlacesList placesForUser(int placeType, String woeId, String place public Location resolvePlaceId(String placeId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_RESOLVE_PLACE_ID); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_id", placeId); @@ -820,7 +807,6 @@ public Location resolvePlaceId(String placeId) throws FlickrException { public Location resolvePlaceURL(String flickrPlacesUrl) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_RESOLVE_PLACE_URL); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("url", flickrPlacesUrl); @@ -859,7 +845,6 @@ public ArrayList tagsForPlace(String woeId, String placeId, Date minUploadD Map parameters = new HashMap(); ArrayList tagsList = new ArrayList(); parameters.put("method", METHOD_TAGS_FOR_PLACE); - parameters.put(Flickr.API_KEY, apiKey); if (woeId != null) { parameters.put("woe_id", woeId); From c94835a172c329d5112113feeaa82a1a1303e031 Mon Sep 17 00:00:00 2001 From: boncey Date: Tue, 29 Apr 2014 08:53:56 +0100 Subject: [PATCH 032/239] Correct maven artifactId --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bec57da9..785351f7 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java - flickr + flickr4java 2.6 From b9f8aa6a0f557fc65608f8e536b4f49727c43791 Mon Sep 17 00:00:00 2001 From: boncey Date: Tue, 29 Apr 2014 09:21:43 +0100 Subject: [PATCH 033/239] Fix auth signing request (still requires API key) --- .../flickr/auth/AuthInterface.java | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java index 1e203489..be232c4d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java @@ -4,6 +4,7 @@ package com.flickr4java.flickr.auth; +import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -171,7 +172,13 @@ public Auth checkToken(Token accessToken) throws FlickrException { */ public Auth checkToken(String authToken, String tokenSecret) throws FlickrException { - Map parameters = constructNonOAuthParameters(authToken, METHOD_CHECK_TOKEN); + // Use TreeMap so keys are automatically sorted alphabetically + Map parameters = new TreeMap(); + parameters.put("method", METHOD_CHECK_TOKEN); + parameters.put("oauth_token", authToken); + parameters.put(Flickr.API_KEY, apiKey); + // This method call must be signed using Flickr (not OAuth) style signing + parameters.put("api_sig", getSignature(sharedSecret, parameters)); Response response = transportAPI.getNonOAuth(transportAPI.getPath(), parameters); if (response.isError()) { @@ -193,7 +200,12 @@ public Auth checkToken(String authToken, String tokenSecret) throws FlickrExcept */ public Token exchangeAuthToken(String authToken) throws FlickrException { - Map parameters = constructNonOAuthParameters(authToken, METHOD_EXCHANGE_TOKEN); + // Use TreeMap so keys are automatically sorted alphabetically + Map parameters = new TreeMap(); + parameters.put("method", METHOD_EXCHANGE_TOKEN); + parameters.put(Flickr.API_KEY, apiKey); + // This method call must be signed using Flickr (not OAuth) style signing + parameters.put("api_sig", getSignature(sharedSecret, parameters)); Response response = transportAPI.getNonOAuth(transportAPI.getPath(), parameters); if (response.isError()) { @@ -205,21 +217,6 @@ public Token exchangeAuthToken(String authToken) throws FlickrException { return accessToken; } - /** - * - * @param authToken - * @param method - */ - private Map constructNonOAuthParameters(String authToken, String method) { - // Use TreeMap so keys are automatically sorted alphabetically - Map parameters = new TreeMap(); - parameters.put("method", method); - parameters.put("oauth_token", authToken); - // This method call must be signed using Flickr (not OAuth) style signing - parameters.put("api_sig", getSignature(sharedSecret, parameters)); - return parameters; - } - /** * * @param response From 2c9bff30f1e2e901257c76a35fae42d66b4a20db Mon Sep 17 00:00:00 2001 From: Sam Wilson Date: Tue, 13 May 2014 18:29:13 +0800 Subject: [PATCH 034/239] Some information, and an interactive tool, for setting up the integration tests. --- Flickr4Java/BUILDING.md | 40 +++++++++++ Flickr4Java/BUILDING.txt | 17 ----- Flickr4Java/build.gradle | 7 ++ .../com/flickr4java/flickr/test/Setup.java | 68 +++++++++++++++++++ 4 files changed, 115 insertions(+), 17 deletions(-) create mode 100644 Flickr4Java/BUILDING.md delete mode 100644 Flickr4Java/BUILDING.txt create mode 100644 Flickr4Java/src/test/java/com/flickr4java/flickr/test/Setup.java diff --git a/Flickr4Java/BUILDING.md b/Flickr4Java/BUILDING.md new file mode 100644 index 00000000..562324e7 --- /dev/null +++ b/Flickr4Java/BUILDING.md @@ -0,0 +1,40 @@ +# Building and Testing Flickr4Java + +## Building + +Flickr4Java uses [Gradle](http://www.gradle.org). +Run gradle tasks from the directory that contains the `build.gradle` file. + +The following tasks are available: + +* Clean up: `gradle clean` +* Compile (inc examples): `gradle compileJava` +* Compile & test: `gradle build` +* Create docs: `gradle javadoc` +* Create docs jar: `gradle javadocJar` +* Create src jar: `gradle sourcesJar` +* Generate Eclipse project files: `gradle cleanEclipse eclipse` +* Generate Idea project files: `gradle cleanIdea idea` +* Show dependencies (libs etc): `gradle dependencies` + +## Testing + +Most of the tests are integration tests, and require hitting the actual Flickr +API service with DELETE permissions. The safest and easiest way to do this is to +set up a test user account, the following photos etc.: + +1. At least one photo in one album +2. At least one collection with title and description, containing at least one album + (the ID of the collection can be retrieved manually via the + [API explorer](https://www.flickr.com/services/api/explore/flickr.collections.getTree) + and be added as `collectionid` in `src/test/resources/setup.properties`) +3. *[List is incomplete]* + +To test: + +1. Copy `src/test/resources/setup.properties.example` to `src/test/resources/setup.properties` +2. Run `gradle compiletestjava -q` — compile all sources +3. Run `gradle setuptests -q` — this will prompt for authorisation and update the above `setup.properties` file +4. Run `gradle test` + +(The `-q` above just hides some of the more verbose output; it can be left out.) diff --git a/Flickr4Java/BUILDING.txt b/Flickr4Java/BUILDING.txt deleted file mode 100644 index ec8c3b45..00000000 --- a/Flickr4Java/BUILDING.txt +++ /dev/null @@ -1,17 +0,0 @@ -Build uses gradle (http://www.gradle.org) - -Clean up: gradle clean -Compile (inc examples): gradle compileJava -Compile & test: gradle build -Create docs: gradle javadoc -Create docs jar: gradle javadocJar -Create src jar: gradle sourcesJar - -NOTE: Copy src/test/resources/setup.properties.example to src/test/resources/setup.properties and fill out appropriately to run the integration tests - -To generate Eclipse project files: gradle cleanEclipse eclipse -To generate Idea project files: gradle cleanIdea idea - -To show dependencies (libs etc): gradle dependencies - - diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index 76e536f2..306a10c2 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -2,6 +2,7 @@ apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'maven' +apply plugin: 'application' version = '2.6' group = 'com.flickr4java.flickr' @@ -32,6 +33,12 @@ dependencies { testCompile group: 'junit', name: 'junit', version: '4.11' } +task setupTests(type:JavaExec, dependsOn:classes) { + standardInput = System.in + main = 'com.flickr4java.flickr.test.Setup' + classpath = sourceSets.test.runtimeClasspath +} + //create a javadoc jar for maven repo task javadocJar(type: Jar, dependsOn: javadoc) { classifier = 'javadoc' diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Setup.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Setup.java new file mode 100644 index 00000000..a110a36e --- /dev/null +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Setup.java @@ -0,0 +1,68 @@ +package com.flickr4java.flickr.test; + +import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.REST; +import com.flickr4java.flickr.auth.Auth; +import com.flickr4java.flickr.auth.AuthInterface; +import com.flickr4java.flickr.auth.Permission; +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 { + + 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) { + e.printStackTrace(); + } + } + + public Setup() throws IOException, FlickrException { + String propertiesFile = "src/test/resources/setup.properties"; + Properties properties = new Properties(); + properties.load(new FileInputStream(propertiesFile)); + + Flickr flickr = new Flickr(properties.getProperty("apiKey"), properties.getProperty("secret"), new REST()); + Flickr.debugStream = false; + AuthInterface authInterface = flickr.getAuthInterface(); + + Scanner scanner = new Scanner(System.in); + + Token requestToken = authInterface.getRequestToken(); + + 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:"); + System.out.print(">> "); + + String tokenKey = scanner.nextLine().trim(); + + Token accessToken = authInterface.getAccessToken(requestToken, new Verifier(tokenKey)); + System.out.println("Authentication success"); + + Auth auth = authInterface.checkToken(accessToken); + + properties.setProperty("token", accessToken.getToken()); + properties.setProperty("tokensecret", accessToken.getSecret()); + 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("(These have been saved to the properties file.)"); + System.out.println("Realname: " + auth.getUser().getRealName()); + System.out.println("Username: " + auth.getUser().getUsername()); + System.out.println("Permission: " + auth.getPermission().getType()); + } +} From 1cb7dbe3a6e6a2eb92228a4e11937b07b31855d8 Mon Sep 17 00:00:00 2001 From: Leandro Doctors Date: Thu, 15 May 2014 19:47:13 +0200 Subject: [PATCH 035/239] BugFix: Resource leak: 'scanner' is never closed --- Flickr4Java/src/examples/java/AuthExample.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Flickr4Java/src/examples/java/AuthExample.java b/Flickr4Java/src/examples/java/AuthExample.java index d4c53b6e..c7960e8e 100644 --- a/Flickr4Java/src/examples/java/AuthExample.java +++ b/Flickr4Java/src/examples/java/AuthExample.java @@ -53,6 +53,7 @@ public static void auth() throws IOException, FlickrException { System.out.print(">>"); String tokenKey = scanner.nextLine(); + scanner.close(); Token requestToken = authInterface.getAccessToken(token, new Verifier(tokenKey)); System.out.println("Authentication success"); From a3bdf5fda28aa304f26e7280d9fb7721fea10ee8 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 18 May 2014 16:55:57 +0100 Subject: [PATCH 036/239] Fix incorrect mapping of method and map topic methods in completenesstest.properties --- .../groups/discuss/GroupDiscussInterface.java | 93 +++++++++---------- .../resources/completenesstest.properties | 4 + 2 files changed, 49 insertions(+), 48 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java index 69c3cfa5..a491ecd0 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java @@ -1,36 +1,36 @@ package com.flickr4java.flickr.groups.discuss; -import java.util.HashMap; -import java.util.Map; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.util.XMLUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.HashMap; +import java.util.Map; public class GroupDiscussInterface { - /** - * Group.Discuss Interface. - * - * @author Jonathan Willis - */ + /** + * Group.Discuss Interface. + * + * @author Jonathan Willis + */ public static final String METHOD_TOPICS_GET_LIST = "flickr.groups.discuss.topics.getList"; + public static final String METHOD_TOPICS_GET_INFO = "flickr.groups.discuss.topics.getInfo"; - + public static final String METHOD_REPLIES_GET_LIST = "flickr.groups.discuss.replies.getList"; - public static final String METHOD_REPLIES_GET_INFO = "flickr.groups.discuss.topics.getInfo"; - private String apiKey; + public static final String METHOD_REPLIES_GET_INFO = "flickr.groups.discuss.replies.getInfo"; + + private final String apiKey; - private String sharedSecret; + private final String sharedSecret; - private Transport transportAPI; + private final Transport transportAPI; public GroupDiscussInterface(String apiKey, String sharedSecret, Transport transportAPI) { this.apiKey = apiKey; @@ -39,7 +39,7 @@ public GroupDiscussInterface(String apiKey, String sharedSecret, Transport trans } /** - * Get a list of topics from a group. + * 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}. @@ -52,7 +52,7 @@ public GroupDiscussInterface(String apiKey, String sharedSecret, Transport trans * @see API Documentation */ public TopicList getTopicsList(String groupId, int perPage, int page) throws FlickrException { - TopicList topicList = new TopicList(); + TopicList topicList = new TopicList(); Map parameters = new HashMap(); parameters.put("method", METHOD_TOPICS_GET_LIST); @@ -64,13 +64,12 @@ public TopicList getTopicsList(String groupId, int perPage, int page) thr if (page > 0) { parameters.put("page", "" + page); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } - + Element topicElements = response.getPayload(); topicList.setPage(topicElements.getAttribute("page")); topicList.setPages(topicElements.getAttribute("pages")); @@ -84,7 +83,7 @@ public TopicList getTopicsList(String groupId, int perPage, int page) thr topicList.setPrivacy(Integer.parseInt(topicElements.getAttribute("privacy"))); topicList.setLanguage(topicElements.getAttribute("lang")); topicList.setIsPoolModerated("1".equals(topicElements.getAttribute("ispoolmoderated"))); - + NodeList topicNodes = topicElements.getElementsByTagName("topic"); for (int i = 0; i < topicNodes.getLength(); i++) { Element element = (Element) topicNodes.item(i); @@ -92,9 +91,9 @@ public TopicList getTopicsList(String groupId, int perPage, int page) thr } return topicList; } - + /** - * Get info for a given topic + * Get info for a given topic * * @param topicId * Unique identifier of a topic for a given group {@link Topic}. @@ -111,13 +110,12 @@ public Topic getTopicInfo(String topicId) throws FlickrException { if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } - + Element topicElement = response.getPayload(); - + return parseTopic(topicElement); } - /** * Get list of replies * @@ -127,9 +125,9 @@ public Topic getTopicInfo(String topicId) throws FlickrException { * @throws FlickrException * @see API Documentation */ - public ReplyObject getReplyList(String topicId, int perPage, int page) throws FlickrException { - ReplyList reply = new ReplyList(); - TopicList topic = new TopicList(); + public ReplyObject getReplyList(String topicId, int perPage, int page) throws FlickrException { + ReplyList reply = new ReplyList(); + TopicList topic = new TopicList(); Map parameters = new HashMap(); parameters.put("method", METHOD_REPLIES_GET_LIST); @@ -146,31 +144,30 @@ public ReplyObject getReplyList(String topicId, int perPage, int page) throws F if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } - + Element replyElements = response.getPayload(); ReplyObject ro = new ReplyObject(); NodeList replyNodes = replyElements.getElementsByTagName("reply"); for (int i = 0; i < replyNodes.getLength(); i++) { - Element replyNodeElement = (Element) replyNodes.item(i); - //Element replyElement = XMLUtilities.getChild(replyNodeElement, "reply"); - reply.add(parseReply(replyNodeElement)); - ro.setReplyList(reply); - + Element replyNodeElement = (Element) replyNodes.item(i); + // Element replyElement = XMLUtilities.getChild(replyNodeElement, "reply"); + reply.add(parseReply(replyNodeElement)); + ro.setReplyList(reply); + } NodeList topicNodes = replyElements.getElementsByTagName("topic"); for (int i = 0; i < topicNodes.getLength(); i++) { - Element replyNodeElement = (Element) replyNodes.item(i); - //Element topicElement = XMLUtilities.getChild(replyNodeElement, "topic"); + Element replyNodeElement = (Element) replyNodes.item(i); + // Element topicElement = XMLUtilities.getChild(replyNodeElement, "topic"); topic.add(parseTopic(replyNodeElement)); ro.setTopicList(topic); } - + return ro; } - - + /** - * Get info for a given topic reply + * Get info for a given topic reply * * @param topicId * Unique identifier of a topic for a given group {@link Topic}. @@ -190,12 +187,12 @@ public Reply getReplyInfo(String topicId, String replyId) throws FlickrException if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } - + Element replyElement = response.getPayload(); - + return parseReply(replyElement); } - + private Topic parseTopic(Element tElement) { Topic topic = new Topic(); topic.setAuthorId(tElement.getAttribute("author")); @@ -203,8 +200,8 @@ private Topic parseTopic(Element tElement) { topic.setIsCanDelete("1".equals(tElement.getAttribute("can_delete"))); topic.setIsCanEdit("1".equals(tElement.getAttribute("can_edit"))); topic.setIsCanReply("1".equals(tElement.getAttribute("can_reply"))); - if(!tElement.getAttribute("count_replies").equals("")){ - topic.setCountReplies(Integer.parseInt(tElement.getAttribute("count_replies"))); + if (!tElement.getAttribute("count_replies").equals("")) { + topic.setCountReplies(Integer.parseInt(tElement.getAttribute("count_replies"))); } topic.setDatecreate(tElement.getAttribute("datecreate")); topic.setDatelastpost(tElement.getAttribute("datelastpost")); @@ -237,5 +234,5 @@ private Reply parseReply(Element rElement) { reply.setIsPro("1".equals(rElement.getAttribute("is_pro"))); return reply; } - + } diff --git a/Flickr4Java/src/test/resources/completenesstest.properties b/Flickr4Java/src/test/resources/completenesstest.properties index 126a0017..cec8b791 100644 --- a/Flickr4Java/src/test/resources/completenesstest.properties +++ b/Flickr4Java/src/test/resources/completenesstest.properties @@ -25,4 +25,8 @@ flickr.test.null = com.flickr4java.flickr.test.TestInterface.null_ # all methods of flickr.photosets.comments are in PhotosetsComments flickr.photosets.comments.* = com.flickr4java.flickr.photosets.comments.PhotosetsCommentsInterface.* flickr.auth.oauth.* = com.flickr4java.flickr.auth.AuthInterface.* +flickr.groups.discuss.topics.getList = com.flickr4java.flickr.groups.discuss.GroupDiscussInterface.getTopicsList +flickr.groups.discuss.topics.getInfo = com.flickr4java.flickr.groups.discuss.GroupDiscussInterface.getTopicInfo +flickr.groups.discuss.replies.getList = com.flickr4java.flickr.groups.discuss.GroupDiscussInterface.getReplyList +flickr.groups.discuss.replies.getInfo = com.flickr4java.flickr.groups.discuss.GroupDiscussInterface.getReplyInfo From 72a21046384ef878f0ecb42509ee206a73c9d787 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 18 May 2014 17:34:03 +0100 Subject: [PATCH 037/239] Fix failing tests and make less fussy --- .../java/com/flickr4java/flickr/test/PlacesInterfaceTest.java | 2 +- .../java/com/flickr4java/flickr/test/TagsInterfaceTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java index 2db305ee..481cbd2b 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java @@ -75,7 +75,7 @@ public void testFind2() throws FlickrException { place = list.get(1); assertEquals("SmLXwKZUV7JlnVvxUA", place.getPlaceId()); - assertEquals("/France/Ile-de-France/Paris/Europe", place.getPlaceUrl()); + assertEquals("/France/%C3%8Ele-de-France/Paris/Europe", place.getPlaceUrl()); assertEquals(Place.TYPE_NEIGHBOURHOOD, place.getPlaceType()); } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java index 38921e45..b27c2e5a 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java @@ -45,7 +45,7 @@ public void testGetClusterPhotos() throws FlickrException { TagsInterface iface = flickr.getTagsInterface(); PhotoList photos = iface.getClusterPhotos("ducati", "999-1098-848"); - assertEquals(23, photos.getTotal()); + assertTrue(photos.getTotal() >= 20); } @Test From c00ae7146d851d9c60926394d72b663b30ca94dc Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 18 May 2014 17:34:42 +0100 Subject: [PATCH 038/239] Remove XML attributes that are no longer returned by the API --- .../flickr/places/PlacesInterface.java | 74 +++++++------------ 1 file changed, 28 insertions(+), 46 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java index d1262e8d..9a9ae812 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java @@ -1,15 +1,5 @@ package com.flickr4java.flickr.places; -import java.text.DateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -18,6 +8,15 @@ import com.flickr4java.flickr.util.StringUtilities; import com.flickr4java.flickr.util.XMLUtilities; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + /** * Lookup Flickr Places. *

@@ -412,7 +411,7 @@ public ArrayList getPlaceTypes() throws FlickrException { * @throws FlickrException */ public ShapeDataList getShapeHistory(String placeId, String woeId) throws FlickrException { - ShapeDataList shapeList = new ShapeDataList(); + ShapeDataList shapeList = new ShapeDataList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_SHAPEHISTORY); @@ -435,22 +434,22 @@ public ShapeDataList getShapeHistory(String placeId, String woeId) th shapeList.setPlaceTypeId(Integer.parseInt(shapeElements.getAttribute("place_type_id"))); NodeList shapeNodes = shapeElements.getElementsByTagName("shape"); for (int i = 0; i < shapeNodes.getLength(); i++) { - Element shapeElement = (Element) shapeNodes.item(i); - ShapeData data = new ShapeData(); - data.setAlpha( Double.parseDouble(shapeElement.getAttribute("alpha")) ); - data.setCountEdges(Integer.parseInt(shapeElement.getAttribute("count_edges"))); - data.setCountPoints(Integer.parseInt(shapeElement.getAttribute("count_points"))); - data.setCreated(shapeElement.getAttribute("created")); - data.setIsDonutHole("1".equals(shapeElement.getAttribute("is_donuthole"))); - data.setHasDonuthole("1".equals(shapeElement.getAttribute("has_donuthole"))); - - Element polyElement = XMLUtilities.getChild(shapeElement , "polylines"); - data.setPolyline(XMLUtilities.getChildValue(polyElement, "polyline")); - Element urlElement = XMLUtilities.getChild(shapeElement, "urls"); - data.setShapefile(XMLUtilities.getChildValue(urlElement, "shapefile")); - shapeList.add(data); - } - + Element shapeElement = (Element) shapeNodes.item(i); + ShapeData data = new ShapeData(); + data.setAlpha(Double.parseDouble(shapeElement.getAttribute("alpha"))); + data.setCountEdges(Integer.parseInt(shapeElement.getAttribute("count_edges"))); + data.setCountPoints(Integer.parseInt(shapeElement.getAttribute("count_points"))); + data.setCreated(shapeElement.getAttribute("created")); + data.setIsDonutHole("1".equals(shapeElement.getAttribute("is_donuthole"))); + data.setHasDonuthole("1".equals(shapeElement.getAttribute("has_donuthole"))); + + Element polyElement = XMLUtilities.getChild(shapeElement, "polylines"); + data.setPolyline(XMLUtilities.getChildValue(polyElement, "polyline")); + Element urlElement = XMLUtilities.getChild(shapeElement, "urls"); + data.setShapefile(XMLUtilities.getChildValue(urlElement, "shapefile")); + shapeList.add(data); + } + return shapeList; } @@ -642,7 +641,7 @@ public PlacesList placesForContacts(int placeType, String placeId, String * @throws FlickrException */ 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{ + String machineTagMode, Date minUploadDate, Date maxUploadDate, Date minTakenDate, Date maxTakenDate) throws FlickrException { Map parameters = new HashMap(); PlacesList placesList = new PlacesList(); parameters.put("method", METHOD_PLACES_FOR_TAGS); @@ -909,24 +908,7 @@ private Location parseLocation(Element locationElement) { } location.setRegion(parseLocationPlace(regionElement, Place.TYPE_REGION)); location.setCountry(parseLocationPlace(countryElement, Place.TYPE_COUNTRY)); - - ShapeData data = new ShapeData(); - - Element shapeElement = XMLUtilities.getChild(locationElement, "shapedata"); - data.setAlpha( Double.parseDouble(shapeElement.getAttribute("alpha")) ); - data.setCountEdges(Integer.parseInt(shapeElement.getAttribute("count_edges"))); - data.setCountPoints(Integer.parseInt(shapeElement.getAttribute("count_points"))); - data.setCreated(shapeElement.getAttribute("created")); - data.setIsDonutHole("1".equals(shapeElement.getAttribute("is_donuthole"))); - data.setHasDonuthole("1".equals(shapeElement.getAttribute("has_donuthole"))); - - Element polyElement = XMLUtilities.getChild(locationElement, "polylines"); - data.setPolyline(XMLUtilities.getChildValue(polyElement, "polyline")); - Element urlElement = XMLUtilities.getChild(locationElement, "urls"); - data.setShapefile(XMLUtilities.getChildValue(urlElement, "shapefile")); - - location.setShapedata(data); - + return location; } From 677d95aefd5d6dbdbce4af97136d429d897e6b77 Mon Sep 17 00:00:00 2001 From: Sam Wilson Date: Mon, 19 May 2014 15:51:20 +0800 Subject: [PATCH 039/239] Some more information about setting up integration tests, and some fixes to a few tests. --- Flickr4Java/BUILDING.md | 42 +++++++++++++------ .../flickr/test/FavoritesInterfaceTest.java | 2 +- .../flickr/test/PeopleInterfaceTest.java | 10 ++--- .../flickr/test/PhotosInterfaceTest.java | 21 +++++++--- 4 files changed, 51 insertions(+), 24 deletions(-) diff --git a/Flickr4Java/BUILDING.md b/Flickr4Java/BUILDING.md index 562324e7..9a6c422a 100644 --- a/Flickr4Java/BUILDING.md +++ b/Flickr4Java/BUILDING.md @@ -19,22 +19,38 @@ The following tasks are available: ## Testing -Most of the tests are integration tests, and require hitting the actual Flickr -API service with DELETE permissions. The safest and easiest way to do this is to -set up a test user account, the following photos etc.: - -1. At least one photo in one album -2. At least one collection with title and description, containing at least one album - (the ID of the collection can be retrieved manually via the - [API explorer](https://www.flickr.com/services/api/explore/flickr.collections.getTree) - and be added as `collectionid` in `src/test/resources/setup.properties`) -3. *[List is incomplete]* - To test: 1. Copy `src/test/resources/setup.properties.example` to `src/test/resources/setup.properties` 2. Run `gradle compiletestjava -q` — compile all sources -3. Run `gradle setuptests -q` — this will prompt for authorisation and update the above `setup.properties` file -4. Run `gradle test` +3. Run `gradle setuptests -q` — this will prompt for authorisation + and update the `setup.properties` file with the test user's details +4. Run `gradle test` — can be run as `gradle -Dtest.single=NameOfTest test` to + run only one test (because the full suite can take quite a while) (The `-q` above just hides some of the more verbose output; it can be left out.) + +Most of the tests are integration tests and require hitting the actual Flickr +API service with DELETE permissions. The safest and easiest way to do this is to +set up a test user account with the following: + +1. At least one photo with a location set, in at least one album, with exactly 3 tags. + Add this photo's ID as `photoid` and `geo.write.photoid` in `setup.properties`. +2. At least one collection with title and description, containing at least one album + (the ID of the collection should be retrieved manually via the + [API explorer](https://www.flickr.com/services/api/explore/flickr.collections.getTree) + and be added as `collectionid` in `setup.properties`). +3. At least one comment on another user's photo. +4. Following at least one other user. +5. At least one favorite. +6. Allows 'anyone' "to see your stuff on a map". +7. A member of at least one group, whose ID is saved as `testgroupid`. +8. A gallery, containing at least one photo. +9. An "[own Flickr address](https://www.flickr.com/profile_url.gne)" set to `username` (see below). +10. *[List is incomplete]* + +The last few keys in the `setup.properties` need to be as follows: + +* Set the following keys in `setup.properties` to match your test user: + `nsid`, `username`, `displayname`, and `email`. +* Point `imagefile` to a test image that will be uploaded (and then deleted). diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java index acc05682..dfaffef7 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java @@ -45,7 +45,7 @@ public void testGetPublicList() throws FlickrException { FavoritesInterface iface = flickr.getFavoritesInterface(); Collection favorites = iface.getPublicList(testProperties.getNsid(), 0, 0, null); assertNotNull(favorites); - assertTrue(favorites.size() > 1); + assertTrue(favorites.size() > 0); } @Test diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java index 2cf470d2..94be5744 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java @@ -31,13 +31,13 @@ public void testFindByEmail() throws FlickrException { User person = iface.findByEmail(testProperties.getEmail()); assertNotNull(person); assertEquals(person.getId(), testProperties.getNsid()); - assertEquals(person.getUsername(), testProperties.getDisplayname()); + assertEquals(person.getUsername(), testProperties.getUsername()); } @Test public void testFindByUsername() throws FlickrException { PeopleInterface iface = flickr.getPeopleInterface(); - User person = iface.findByUsername(testProperties.getDisplayname()); + User person = iface.findByUsername(testProperties.getUsername()); assertNotNull(person); assertEquals(testProperties.getNsid(), person.getId()); assertEquals(testProperties.getUsername(), person.getUsername()); @@ -54,7 +54,7 @@ public void testGetInfo() throws FlickrException { User person = iface.getInfo(testProperties.getNsid()); assertNotNull(person); assertEquals(testProperties.getNsid(), person.getId()); - assertEquals(testProperties.getDisplayname(), person.getUsername()); + assertEquals(testProperties.getDisplayname(), person.getRealName()); assertTrue(person.getMobileurl().startsWith("https://m.flickr.com/photostream.gne")); 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())); @@ -91,7 +91,7 @@ public void testGetPhotos() throws FlickrException { PeopleInterface iface = flickr.getPeopleInterface(); PhotoList photos = iface.getPhotos(testProperties.getNsid(), null, null, null, null, null, null, null, null, 15, 1); assertNotNull(photos); - assertTrue(photos.size() > 1); + assertTrue(photos.size() > 0); } @Test @@ -99,7 +99,7 @@ public void testGetPhotosOf() throws FlickrException { PeopleInterface iface = flickr.getPeopleInterface(); PhotoList photos = iface.getPhotosOf(testProperties.getNsid(), null, null, 10, 1); assertNotNull(photos); - assertTrue(photos.size() > 1); + assertTrue(photos.size() > 0); } @Test diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java index 0eef55b1..868c13f7 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java @@ -66,13 +66,23 @@ public void teardown() { public void testAddAndRemoveTags() throws FlickrException { PhotosInterface iface = flickr.getPhotosInterface(); String photoId = testProperties.getPhotoId(); + Photo photo = iface.getInfo(photoId, null); + + // Find number of existing tags + int preCount = photo.getTags().size(); + int postCount = preCount + 1; + + // Add a tag String[] tagsToAdd = { "test" }; iface.addTags(photoId, tagsToAdd); - Photo photo = iface.getInfo(photoId, null); + + // Check that it was added + photo = iface.getInfo(photoId, null); Collection tags = photo.getTags(); assertNotNull(tags); - assertEquals(4, tags.size()); + assertEquals(postCount, tags.size()); + // Get the added tag's ID String tagId = null; for (Tag tag : tags) { if (tag.getValue().equals("test")) { @@ -81,11 +91,12 @@ public void testAddAndRemoveTags() throws FlickrException { } } + // Remove and check that it was removed iface.removeTag(tagId); photo = iface.getInfo(photoId, null); tags = photo.getTags(); assertNotNull(tags); - assertEquals(3, tags.size()); + assertEquals(preCount, tags.size()); } @Test @@ -110,7 +121,7 @@ public void testGetInfo() throws FlickrException { User owner = photo.getOwner(); assertEquals(testProperties.getNsid(), owner.getId()); - assertEquals(testProperties.getDisplayname(), owner.getUsername()); + assertEquals(testProperties.getUsername(), owner.getUsername()); List tags = (List) photo.getTags(); assertEquals("green", (tags.get(0)).getValue()); @@ -325,7 +336,7 @@ public void testGetThumbnailImage() throws FlickrException, IOException { Photo photo = iface.getInfo(photoId, null); BufferedImage image = iface.getImage(photo, Size.THUMB); assertNotNull(image); - assertEquals(67, image.getWidth()); + assertTrue(67==image.getWidth() || 68==image.getWidth()); assertEquals(100, image.getHeight()); ImageIO.write(image, "jpg", thumbnailFile); } From 17eb40e0befea63252a810d2c2706f0eb47882aa Mon Sep 17 00:00:00 2001 From: vermgit Date: Wed, 21 May 2014 09:33:23 +0200 Subject: [PATCH 040/239] Send api_key when using no authentication --- Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java index bd8291df..de3899f7 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java @@ -158,6 +158,8 @@ public com.flickr4java.flickr.Response get(String path, Map para Token requestToken = new Token(auth.getToken(), auth.getTokenSecret()); OAuthService service = createOAuthService(parameters, apiKey, sharedSecret); service.signRequest(requestToken, request); + } else { + request.addQuerystringParameter("api_key", apiKey); } if (Flickr.debugRequest) { From 371a31b4937d1069996dccb5cdaf2ef8acf5ff0d Mon Sep 17 00:00:00 2001 From: "kyparikh@gmail.com" Date: Sat, 24 May 2014 01:56:47 -0400 Subject: [PATCH 041/239] Support for Video; Uploader fix. Added support for newer Video files ( mobileMp4, hd_MP4). ( For HD video original_video is sometimes not set only HD MP4 is set by flickr). set filename for upload (so video upload will work and title will get defaulted by flickr). Added working UploadPhoto.java to add files not uploaded already. --- .../src/examples/java/UploadPhoto.java | 868 ++++++++++++++++++ .../java/com/flickr4java/flickr/REST.java | 33 +- .../com/flickr4java/flickr/Transport.java | 5 + .../flickr/galleries/GalleriesInterface.java | 4 +- .../flickr/people/PeopleInterface.java | 2 +- .../com/flickr4java/flickr/photos/Photo.java | 56 +- .../flickr4java/flickr/photos/PhotoUtils.java | 14 +- .../flickr/photos/PhotosInterface.java | 16 +- .../com/flickr4java/flickr/photos/Size.java | 13 +- .../flickr/photosets/Photoset.java | 2 +- .../flickr/uploader/UploadMetaData.java | 30 +- .../flickr4java/flickr/uploader/Uploader.java | 14 +- .../flickr/util/FileAuthStore.java | 24 +- 13 files changed, 1055 insertions(+), 26 deletions(-) create mode 100644 Flickr4Java/src/examples/java/UploadPhoto.java diff --git a/Flickr4Java/src/examples/java/UploadPhoto.java b/Flickr4Java/src/examples/java/UploadPhoto.java new file mode 100644 index 00000000..28fed8b3 --- /dev/null +++ b/Flickr4Java/src/examples/java/UploadPhoto.java @@ -0,0 +1,868 @@ +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. + * + * @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 flickr_debug = false; + private boolean setorigfilenametag = true; + private boolean replace_spaces = false; + + private int privacy = -1; + + HashMap all_sets_map = new HashMap(); + HashMap> set_name_to_id = 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("")) + set_username(); + if(nsid == null || nsid.equals("")) + set_nsid(); + + } + + private void set_username() 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 api_key + // as the parameter to the call which is not authenticated. + + if(auth == null) { + // Get nsid using flickr.people.findByUsername + PeopleInterface people_i = flickr.getPeopleInterface(); + User u = people_i.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 set_nsid() 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[] all_auths = authStore.retrieveAll(); + for(int i = 0 ; i < all_auths.length; i++) { + if(username.equals(all_auths[i].getUser().getUsername())) { + nsid = all_auths[i].getUser().getId(); + return; + } + } + + // For this to work: REST.java or PeopleInterface needs to change to pass api_key + // as the parameter to the call which is not authenticated. + + // Get nsid using flickr.people.findByUsername + PeopleInterface people_i = flickr.getPeopleInterface(); + User u = people_i.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 token_secret) throws IOException, SAXException, FlickrException { + RequestContext rc = RequestContext.getRequestContext(); + Auth auth = null; + + if(authToken != null && !authToken.equals("") && token_secret != null && !token_secret.equals("")) { + auth = constructAuth(authToken, token_secret, 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(replace_spaces && fname[i] == ' ') + fname[i] = '_'; + } + return new String(fname); + } + + public String uploadfile(String filename, String inp_title) 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(inp_title != null && !inp_title.equals("")) { + title = inp_title; + logger.debug(" title : " + inp_title ); + 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 get_photosets_info() { + + PhotosetsInterface pi = flickr.getPhotosetsInterface(); + try { + int sets_page = 1; + while (true) { + Photosets photosets = pi.getList(nsid, 500, sets_page); + Collection sets_coll = photosets.getPhotosets(); + Iterator sets_iter = sets_coll.iterator(); + while (sets_iter.hasNext()) { + Photoset set = sets_iter.next(); + all_sets_map.put(set.getId(), set); + + // 2 or more sets can in theory have the same name. !!! + ArrayList set_idarr = set_name_to_id.get(set.getTitle()); + if(set_idarr == null) { + set_idarr = new ArrayList(); + set_idarr.add(new String(set.getId())); + set_name_to_id.put(set.getTitle(), set_idarr); + } + else { + set_idarr.add(new String(set.getId())); + } + } + + if (sets_coll.size() < 500) { + break; + } + sets_page++; + } + logger.debug(" Sets retrieved: " + all_sets_map.size()); + // all_sets_retrieved = true; + // Print dups if any. + + Set keys = set_name_to_id.keySet(); + Iterator iter = keys.iterator(); + while(iter.hasNext()) { + String name = iter.next(); + ArrayList set_idarr = set_name_to_id.get(name); + if(set_idarr != null && set_idarr.size() > 1) { + System.out.println("There is more than 1 set with this name : " + set_name_to_id.get(name)); + for(int j = 0; j < set_idarr.size(); j++) { + System.out.println(" id: " + set_idarr.get(j)); + } + } + } + + } catch (FlickrException e) { + e.printStackTrace(); + } + } + + private String setid = null; + private String basefilename = null; + private PhotoList photos = new PhotoList(); + private HashMap file_photos = 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 api_key = null; // args[0]; + String shared_secret = null; // args[1]; + + Properties properties = new Properties(); + InputStream in = null; + try { + in = UploadPhoto.class.getResourceAsStream("/setup.properties"); + if(in != null) { + properties.load(in); + api_key = properties.getProperty("apiKey"); + shared_secret = properties.getProperty("secret"); + if(api_key != null && shared_secret != 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 uploadfile_args = new ArrayList(); + ArrayList option_args = new ArrayList(); + + // Flickr.debugRequest = true; // keep it false else entire file will be in stdout. + + // Flickr.debugStream = true; + + String authsDir_str = System.getProperty("user.home") + File.separatorChar + ".flickrAuth"; + + String nsid = null; + String user_name = null; + String access_token = null; // Optional entry. + String token_secret = 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) + user_name = args[++i]; + break; + case "-apiKey": if(i < args.length) + api_key = args[++i]; + break; + + case "-secret": if(i < args.length) + shared_secret = args[++i]; + break; + case "-notags" : if(i < args.length) + settagname = false; + break; + + case "-a" : if(i < args.length) + access_token = args[++i]; + break; + case "-t" : if(i < args.length) + token_secret = args[++i]; + break; + case "-s" : if(i < args.length) + setName = args[++i]; + break; + case "-option": + if(i < args.length) + option_args.add(args[++i]); + break; + default : if(setName != null) + uploadfile_args.add(args[i]); + else { + Usage(); + System.exit(1); + } + } + } + + if(api_key == null || shared_secret == null || + (user_name == null && nsid == null) || (setName == null ) || + (uploadfile_args.size() == 0) ) { + Usage(); + System.exit(1); + } + + UploadPhoto bf = new UploadPhoto(api_key, nsid, shared_secret, new File(authsDir_str), user_name); + for(i = 0; i < option_args.size(); i++) { + bf.add_option( option_args.get(i)); + } + bf.setSetorigfilenametag(settagname); + bf.setAuth(access_token, user_name, token_secret ); + + if(!bf.can_upload()) + System.exit(1); + + bf.getPrivacy(); + + bf.get_photosets_info(); + + if(setName != null && !setName.equals("")) { + + bf.get_set_photos(setName); + } + + // String photoid; + + for( i = 0; i < uploadfile_args.size(); i++) { + String filename = uploadfile_args.get(i); + + File f = new File(filename); + if(f.isDirectory()) { + String[] filelist = f.list(new UploadFilenameFilter()); + logger.debug("Processing directory : " + uploadfile_args.get(i) ); + for(int j = 0; j < filelist.length; j++) { + bf.process_file_arg( uploadfile_args.get(i) + File.separatorChar + filelist[j], setName); + } + } + else { + bf.process_file_arg( filename, setName); + } + } + } + + private static final String[] photo_suffixes = { + "jpg" + ,"jpeg" + ,"png" + ,"gif" + ,"bmp" + ,"tif","tiff" }; + + private static final String[] video_suffixes = { + "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(is_valid_suffix(name)) + return true; + else + return false; + } + + } + + private static boolean is_valid_suffix(String basefilename) { + if(basefilename.lastIndexOf('.') <= 0) { + return false; + } + String suffix = basefilename.substring(basefilename.lastIndexOf('.')+1).toLowerCase(); + for(int i = 0; i < photo_suffixes.length; i++) { + if(photo_suffixes[i].equals(suffix)) + return true; + } + for(int i = 0; i < video_suffixes.length; i++) { + if(video_suffixes[i].equals(suffix)) + return true; + } + logger.debug(basefilename + " does not have a valid suffix, skipped."); + return false; + } + + private void process_file_arg(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 file_uploaded = check_if_loaded(filename); + + if(! file_uploaded) { + if(!is_valid_suffix(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) { + add_photo_to_set( photoid, setName); + } + logger.info("Upload of " + filename + " finished at: " + smp.format(new Date()) + "\n"); + + } else { + logger.info(" File: " + filename + " has already been loaded on " + get_uploaded_time(filename) ); + } + } + + private void add_option(String opt) { + + switch(opt) { + case "replace_spaces": replace_spaces = 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 can_upload() { + 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 check_if_loaded(String filename) { + + String title; + if(basefilename.lastIndexOf('.') > 0) + title = basefilename.substring(0, basefilename.lastIndexOf('.') ); + else + return false; + + if(file_photos.containsKey(title)) + return true; + + return false; + } + + private String get_uploaded_time(String filename) { + + String title = ""; + if(basefilename.lastIndexOf('.') > 0) + title = basefilename.substring(0, basefilename.lastIndexOf('.') ); + + if(file_photos.containsKey(title)) { + Photo p = file_photos.get(title); + if(p.getDatePosted() != null) { + return(smp.format(p.getDatePosted())); + } + } + + return ""; + } + + private void get_set_photos(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 set_idarr ; + set_idarr = set_name_to_id.get(setName); + if(set_idarr != null) { + setid = set_idarr.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 tmp_set = pi.getPhotos(setid, extras, Flickr.PRIVACY_LEVEL_NO_FILTER, 500, setPage); + + int tmp_set_size = tmp_set.size(); + photos.addAll(tmp_set); + if (tmp_set_size < 500) { + break; + } + setPage++; + } + for(int i = 0; i < photos.size(); i++) { + file_photos.put(photos.get(i).getTitle(), photos.get(i)); + } + if(flickr_debug) { + logger.debug("Set title: " + setName + " id: " + setid + " found"); + logger.debug(" Photos in Set already loaded: " + photos.size() ); + } + } + } + + public void add_photo_to_set(String photoid, String setName) throws Exception { + + ArrayList set_idarr ; + + // all_set_maps. + + PhotosetsInterface psets_i = flickr.getPhotosetsInterface(); + + Photoset set = null; + + if(setid == null) { + // In case it is a new photo-set. + set_idarr = set_name_to_id.get(setName); + if(set_idarr == null) { + // set_idarr should be null since we checked it get_set_photos. + // Create the new set. + // set the setid . + + String description = ""; + set = psets_i.create(setName, description, photoid); + setid = set.getId(); + + set_idarr = new ArrayList(); + set_idarr.add(new String(setid)); + set_name_to_id.put(setName, set_idarr); + + all_sets_map.put(set.getId(), set); + } + } + else { + set = all_sets_map.get(setid); + psets_i.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(); + file_photos.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 index bd8291df..8a6753d9 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java @@ -11,6 +11,7 @@ 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; @@ -159,6 +160,12 @@ public com.flickr4java.flickr.Response get(String path, Map para 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()); @@ -174,6 +181,9 @@ public com.flickr4java.flickr.Response get(String path, Map para 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); @@ -348,7 +358,7 @@ private void buildMultipartRequest(Map parameters, OAuthRequest request.addHeader("Content-Type", "multipart/form-data; boundary=" + getMultipartBoundary()); for (Map.Entry entry : parameters.entrySet()) { String key = entry.getKey(); - if (!key.equals("photo")) { + if (!key.equals("photo") && !key.equals("filename") && !key.equals("filemimetype")) { request.addQuerystringParameter(key, String.valueOf(entry.getValue())); } } @@ -379,10 +389,19 @@ private byte[] buildMultipartBody(Map parameters, String boundar 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(); - writeParam(key, entry.getValue(), buffer, boundary); + if(!key.equals("filename") && !key.equals("filemimetype")) + writeParam(key, entry.getValue(), buffer, boundary, filename, filemimetype); } } catch (IOException e) { throw new FlickrRuntimeException(e); @@ -395,10 +414,10 @@ private byte[] buildMultipartBody(Map parameters, String boundar return buffer.toByteArray(); } - private void writeParam(String name, Object value, ByteArrayOutputStream buffer, String boundary) throws IOException { + 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=\"image.jpg\";\r\n").getBytes(CHARSET_NAME)); - buffer.write(("Content-Type: image/jpeg" + "\r\n\r\n").getBytes(CHARSET_NAME)); + 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]; @@ -408,8 +427,8 @@ private void writeParam(String name, Object value, ByteArrayOutputStream buffer, } buffer.write(("\r\n" + "--" + boundary + "\r\n").getBytes(CHARSET_NAME)); } else if (value instanceof byte[]) { - buffer.write(("Content-Disposition: form-data; name=\"" + name + "\"; filename=\"image.jpg\";\r\n").getBytes(CHARSET_NAME)); - buffer.write(("Content-Type: image/jpeg" + "\r\n\r\n").getBytes(CHARSET_NAME)); + 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 { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java index ab8b6649..5e818cc9 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java @@ -20,6 +20,11 @@ public abstract class Transport { 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; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java index 69a85018..37ba31cd 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java @@ -304,7 +304,7 @@ public PhotoList getPhotos(String galleryId, Set extras, int perP User owner = new User(); owner.setId(photoElement.getAttribute("owner")); photo.setOwner(owner); - photo.setUrl("http://flickr.com/photos/" + owner.getId() + "/" + photo.getId()); + photo.setUrl("https://flickr.com/photos/" + owner.getId() + "/" + photo.getId()); photo.setServer(photoElement.getAttribute("server")); photo.setFarm(photoElement.getAttribute("farm")); photo.setTitle(photoElement.getAttribute("title")); @@ -367,7 +367,7 @@ public PhotoList getListForPhoto(String photoId, int perPage, int page) t User owner = new User(); owner.setId(photoElement.getAttribute("owner")); photo.setOwner(owner); - photo.setUrl("http://flickr.com/photos/" + owner.getId() + "/" + photo.getId()); + photo.setUrl("https://flickr.com/photos/" + owner.getId() + "/" + photo.getId()); photo.setServer(photoElement.getAttribute("server")); photo.setFarm(photoElement.getAttribute("farm")); photo.setTitle(photoElement.getAttribute("title")); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java index 9ee2c8f0..52e3c036 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java @@ -420,7 +420,7 @@ public PhotoList getPhotosOf(String userId, String ownerId, Set e User owner = new User(); owner.setId(photoElement.getAttribute("owner")); photo.setOwner(owner); - photo.setUrl("http://flickr.com/photos/" + owner.getId() + "/" + photo.getId()); + photo.setUrl("https://flickr.com/photos/" + owner.getId() + "/" + photo.getId()); photo.setServer(photoElement.getAttribute("server")); photo.setTitle(photoElement.getAttribute("title")); photo.setPublicFlag("1".equals(photoElement.getAttribute("ispublic"))); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java index 7eead37e..2bdd9a54 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java @@ -93,6 +93,10 @@ protected synchronized SimpleDateFormat initialValue() { private Size videoOriginal; + private Size mobileMp4; + + private Size hd_MP4; + private String id; private User owner; @@ -824,6 +828,22 @@ public String getVideoOriginalUrl() { } } + public String getMobileMP4Url() { + if (mobileMp4 == null) { + return ""; + } else { + return mobileMp4.getSource(); + } + } + + public String getHD_MP4Url() { + if (hd_MP4 == null) { + return ""; + } else { + return hd_MP4.getSource(); + } + } + /** * Get an image using the specified URL suffix. * @@ -938,7 +958,7 @@ private StringBuffer getOriginalBaseImageUrl() throws FlickrException, NullPoint private StringBuffer _getBaseImageUrl() { StringBuffer buffer = new StringBuffer(); - buffer.append("http://farm"); + buffer.append("https://farm"); buffer.append(getFarm()); buffer.append(".static.flickr.com/"); buffer.append(getServer()); @@ -1045,6 +1065,12 @@ public void setSizes(Collection sizes) { } else if (size.getLabel() == Size.VIDEO_ORIGINAL) { videoOriginal = size; } + else if (size.getLabel() == Size.Mobile_MP4) { + mobileMp4 = size; + } + else if (size.getLabel() == Size.HD_MP4) { + hd_MP4 = size; + } } } @@ -1108,6 +1134,34 @@ public Size getVideoOriginalSize() { return videoOriginal; } + /** + * @return the mobileMp4 + */ + public Size getMobileMp4() { + return mobileMp4; + } + + /** + * @param mobileMp4 the mobileMp4 to set + */ + public void setMobileMp4(Size mobileMp4) { + this.mobileMp4 = mobileMp4; + } + + /** + * @return the hd_MP4 + */ + public Size getHD_MP4() { + return hd_MP4; + } + + /** + * @param hd_MP4 the hd_MP4 to set + */ + public void setHd_MP4(Size hd_MP4) { + this.hd_MP4 = hd_MP4; + } + /** * @return the pathAlias */ diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java index d07d506d..f6c4501e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java @@ -167,8 +167,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().equals("")) { - 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"); @@ -181,7 +185,7 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme owner.setId(getAttribute("owner", photoElement, defaultElement)); owner.setUsername(getAttribute("ownername", photoElement, defaultElement)); photo.setOwner(owner); - photo.setUrl("http://flickr.com/photos/" + owner.getId() + "/" + photo.getId()); + photo.setUrl("https://flickr.com/photos/" + owner.getId() + "/" + photo.getId()); } else { User owner = new User(); owner.setId(ownerElement.getAttribute("nsid")); @@ -200,14 +204,14 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme owner.setRealName(ownerElement.getAttribute("realname")); owner.setLocation(ownerElement.getAttribute("location")); photo.setOwner(owner); - photo.setUrl("http://flickr.com/photos/" + owner.getId() + "/" + photo.getId()); + photo.setUrl("https://flickr.com/photos/" + owner.getId() + "/" + photo.getId()); } } catch (IndexOutOfBoundsException e) { User owner = new User(); owner.setId(photoElement.getAttribute("owner")); owner.setUsername(photoElement.getAttribute("ownername")); photo.setOwner(owner); - photo.setUrl("http://flickr.com/photos/" + owner.getId() + "/" + photo.getId()); + photo.setUrl("https://flickr.com/photos/" + owner.getId() + "/" + photo.getId()); } try { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java index acfca617..8dd10f22 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java @@ -657,7 +657,7 @@ public Permissions getPerms(String photoId) throws FlickrException { permissions.setId(permissionsElement.getAttribute("id")); permissions.setPublicFlag("1".equals(permissionsElement.getAttribute("ispublic"))); permissions.setFamilyFlag("1".equals(permissionsElement.getAttribute("isfamily"))); - permissions.setFriendFlag("1".equals(permissionsElement.getAttribute("isFriend"))); + permissions.setFriendFlag("1".equals(permissionsElement.getAttribute("isfriend"))); permissions.setComment(permissionsElement.getAttribute("permcomment")); permissions.setAddmeta(permissionsElement.getAttribute("permaddmeta")); return permissions; @@ -1368,7 +1368,19 @@ public InputStream getImageAsStream(Photo photo, int size) throws FlickrExceptio urlStr = photo.getMedium640Url(); } else if (size == Size.MEDIUM_800) { urlStr = photo.getMedium800Url(); - } else { + } else if (size == Size.VIDEO_ORIGINAL) { + urlStr = photo.getVideoOriginalUrl(); + } else if (size == Size.VIDEO_PLAYER) { + 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.getHD_MP4Url(); + } else { throw new FlickrException("0", "Unknown Photo-size"); } URL url = new URL(urlStr); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java index d136d79e..5c9dbaac 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java @@ -165,6 +165,17 @@ public class Size { * @see com.flickr4java.flickr.photos.PhotosInterface#getImageAsStream(Photo, int) */ public static final int VIDEO_ORIGINAL = 14; + /** + * Video, the original for mobiles. + * + * @see com.flickr4java.flickr.photos.Size#getLabel() + * @see com.flickr4java.flickr.photos.Size#setLabel(int) + * @see com.flickr4java.flickr.photos.PhotosInterface#getImage(Photo, int) + * @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; @@ -203,7 +214,7 @@ public int getLabel() { } private final List lstSizes = Arrays.asList("Thumbnail", "Square", "Small", "Medium", "Large", "Original", "Square Large", "Small 320", - "Medium 640", "Medium 800", "Large 1600", "Large 2048", "Site MP4", "Video Player", "Video Original"); + "Medium 640", "Medium 800", "Large 1600", "Large 2048", "Site MP4", "Video Player", "Video Original", "Mobile MP4", "HD MP4"); /** * Set the String-representation of size. diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photoset.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photoset.java index fb39b772..b0066d78 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photoset.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photoset.java @@ -66,7 +66,7 @@ public void setId(String id) { public String getUrl() { if (url == null) { StringBuffer sb = new StringBuffer(); - sb.append("http://www.flickr.com/photos/"); + sb.append("https://www.flickr.com/photos/"); sb.append(getOwner().getId()); sb.append("/sets/"); sb.append(getId()); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java index d0342b85..42652b22 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java @@ -14,6 +14,10 @@ */ public class UploadMetaData { + private String filename = null; + + private String filemimetype = null; + private String title; private String description; @@ -157,7 +161,31 @@ public UploadMetaData setSafetyLevel(String safetyLevel) { return this; } - public boolean isAsync() { + /** + * @return the filename + */ + public String getFilename() { + return filename; + } + + /** + * @param filename the filename to set + */ + public UploadMetaData setFilename(String filename) { + this.filename = filename; + + return this; + } + + public String getFilemimetype() { + return filemimetype; + } + + public void setFilemimetype(String filemimetype) { + this.filemimetype = filemimetype; + } + + public boolean isAsync() { return async; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java index 122e6eb2..a2092bd1 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java @@ -41,7 +41,6 @@ public class Uploader { * */ private static final String SERVICES_REPLACE_PATH = "/services/replace/"; - /** * */ @@ -62,7 +61,7 @@ public class Uploader { public Uploader(String apiKey, String sharedSecret) { this.apiKey = apiKey; this.sharedSecret = sharedSecret; - this.transport = new REST(); + this.transport = new REST(Transport.UPLOAD_API_HOST); this.transport.setResponseClass(UploaderResponse.class); } @@ -223,6 +222,17 @@ private String getResponseString(boolean async, UploaderResponse response) { 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); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java index 6b358f2f..03392247 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java @@ -27,11 +27,14 @@ public class FileAuthStore implements AuthStore { private Map auths; + private Map auths_by_user; // Separate HashMap due to retrieveAll. private File authStoreDir; public FileAuthStore(File authStoreDir) throws FlickrException { this.auths = new HashMap(); + this.auths_by_user = new HashMap(); + this.authStoreDir = authStoreDir; if (!authStoreDir.exists()) @@ -65,7 +68,11 @@ private void load() throws FlickrException { } if (authInst != null) { this.auths.put(authInst.getUser().getId(), authInst); + + // Also store by user-name since it is generally easier to remember. + this.auths_by_user.put(authInst.getUser().getUsername(), authInst); } + authStream.close(); } } } catch (IOException e) { @@ -80,6 +87,7 @@ private void load() throws FlickrException { */ public void store(Auth token) throws IOException { this.auths.put(token.getUser().getId(), token); + this.auths_by_user.put(token.getUser().getUsername(), token); String filename = token.getUser().getId() + ".auth"; File outFile = new File(this.authStoreDir, filename); @@ -89,16 +97,20 @@ public void store(Auth token) throws IOException { authStream.writeObject(token); authStream.flush(); authStream.close(); - } /* * (non-Javadoc) + * Retrieve via flickr user id or username. * * @see com.flickr4java.flickr.util.AuthStore#retrieve(java.lang.String) */ public Auth retrieve(String nsid) { - return this.auths.get(nsid); + Auth auth = this.auths.get(nsid); + if(auth != null) + return auth; + else + return this.auths_by_user.get(nsid); } /* @@ -117,6 +129,7 @@ public Auth[] retrieveAll() { */ public void clearAll() { this.auths.clear(); + this.auths_by_user.clear(); File[] auths = this.authStoreDir.listFiles(new AuthFilenameFilter()); for (int i = 0; i < auths.length; i++) { auths[i].delete(); @@ -129,7 +142,12 @@ public void clearAll() { * @see com.flickr4java.flickr.util.AuthStore#clear(java.lang.String) */ public void clear(String nsid) { - this.auths.remove(nsid); + Auth a = this.auths.get(nsid); + if(a != null) { + this.auths_by_user.remove(a.getUser().getUsername()); + } + this.auths.remove(nsid); + this.auths_by_user.remove(nsid); // in case username is passed. File auth = new File(this.authStoreDir, nsid + ".auth"); if (auth.exists()) auth.delete(); From 048e16f3097e2ad92e93108d654e13f91eb66e59 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 29 Jun 2014 11:04:57 +0100 Subject: [PATCH 042/239] Cleaner implementation of setting API_KEY when request doesn't need authorisation --- Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java index de3899f7..62f6254b 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java @@ -159,7 +159,11 @@ public com.flickr4java.flickr.Response get(String path, Map para OAuthService service = createOAuthService(parameters, apiKey, sharedSecret); service.signRequest(requestToken, request); } else { - request.addQuerystringParameter("api_key", apiKey); + // 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) { From eee3eb1910fa8684f227425e94f7cf9bf6c0e78f Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 30 Jun 2014 19:51:35 +0100 Subject: [PATCH 043/239] Remove release plugin and build source jar by default --- Flickr4Java/pom.xml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index ce306886..4e56c570 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -51,13 +51,18 @@ - maven-release-plugin - 2.4.1 - - false - release - true - + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + verify + + jar-no-fork + + + From 01bb743c1ad35886c79d606daefbcd8b04826ce1 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 30 Jun 2014 19:58:30 +0100 Subject: [PATCH 044/239] Release version 2.8 --- Flickr4Java/build.gradle | 2 +- Flickr4Java/pom.xml | 2 +- README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index 306a10c2..c1f8424d 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.6' +version = '2.8' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 4e56c570..6e035c13 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.7-SNAPSHOT + 2.8 jar flickr4java diff --git a/README.md b/README.md index 785351f7..7013ec5b 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr4java - 2.6 + 2.8 It's hosted on [JCenter](https://bintray.com/bintray/jcenter), you may need to [download their settings.xml](https://bintray.com/repo/downloadMavenRepoSettingsFile/downloadSettings?repoPath=%2Fbintray%2Fjcenter) to get access to their repo. From 5e3a86773b5ccf4cfd059efc046c7bcafa66f5ef Mon Sep 17 00:00:00 2001 From: boncey Date: Tue, 1 Jul 2014 17:41:15 +0100 Subject: [PATCH 045/239] Update pom to 2.9-SNAPSHOT for next release --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 6e035c13..18b36f97 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.8 + 2.9-SNAPSHOT jar flickr4java From bf2a77d2b45cd9e955d13f54e8e1136cba6bcf89 Mon Sep 17 00:00:00 2001 From: "kyparikh@gmail.com" Date: Fri, 4 Jul 2014 08:50:51 -0400 Subject: [PATCH 046/239] As per Darren changed variables names to camelCase and added comment to examples program UploadPhoto.java that it needs Java 1.7 ( rest of the changes were done in Pull request: #89). --- .../src/examples/java/UploadPhoto.java | 281 +++++++++--------- .../java/com/flickr4java/flickr/REST.java | 20 +- .../com/flickr4java/flickr/photos/Photo.java | 44 +-- .../flickr/photos/PhotosInterface.java | 6 +- .../com/flickr4java/flickr/photos/Size.java | 2 +- .../flickr/uploader/UploadMetaData.java | 8 +- .../flickr4java/flickr/uploader/Uploader.java | 8 +- .../flickr/util/FileAuthStore.java | 16 +- 8 files changed, 191 insertions(+), 194 deletions(-) diff --git a/Flickr4Java/src/examples/java/UploadPhoto.java b/Flickr4Java/src/examples/java/UploadPhoto.java index 28fed8b3..2a2d1f57 100644 --- a/Flickr4Java/src/examples/java/UploadPhoto.java +++ b/Flickr4Java/src/examples/java/UploadPhoto.java @@ -70,6 +70,9 @@ * * 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 */ @@ -85,14 +88,14 @@ public class UploadPhoto { private final Flickr flickr; private AuthStore authStore; - public boolean flickr_debug = false; - private boolean setorigfilenametag = true; - private boolean replace_spaces = false; + public boolean flickrDebug = false; + private boolean setOrigFilenameTag = true; + private boolean replaceSpaces = false; private int privacy = -1; - HashMap all_sets_map = new HashMap(); - HashMap> set_name_to_id = new HashMap>(); + 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 { @@ -108,13 +111,13 @@ public UploadPhoto(String apiKey, String nsid, String sharedSecret, File authsDi // If one of them is not filled in, find and populate it. if(username == null || username.equals("")) - set_username(); + setUserName(); if(nsid == null || nsid.equals("")) - set_nsid(); + setNsid(); } - private void set_username() throws FlickrException { + private void setUserName() throws FlickrException { if(nsid != null && !nsid.equals("")) { Auth auth = null; if (authStore != null) { @@ -123,13 +126,13 @@ private void set_username() throws FlickrException { username = auth.getUser().getUsername(); } } - // For this to work: REST.java or PeopleInterface needs to change to pass api_key + // 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 people_i = flickr.getPeopleInterface(); - User u = people_i.getInfo(nsid); + PeopleInterface peopleInterf = flickr.getPeopleInterface(); + User u = peopleInterf.getInfo(nsid); if(u != null) { username = u.getUsername(); } @@ -143,7 +146,7 @@ private void set_username() throws FlickrException { * @throws FlickrException */ - private void set_nsid() throws FlickrException { + private void setNsid() throws FlickrException { if(username != null && !username.equals("")) { Auth auth = null; @@ -158,20 +161,20 @@ private void set_nsid() throws FlickrException { if(auth != null) return; - Auth[] all_auths = authStore.retrieveAll(); - for(int i = 0 ; i < all_auths.length; i++) { - if(username.equals(all_auths[i].getUser().getUsername())) { - nsid = all_auths[i].getUser().getId(); + 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 api_key + // 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 people_i = flickr.getPeopleInterface(); - User u = people_i.findByUsername(username); + PeopleInterface peopleInterf = flickr.getPeopleInterface(); + User u = peopleInterf.findByUsername(username); if(u != null) { nsid = u.getId(); } @@ -231,12 +234,12 @@ private Auth constructAuth(String authToken, String tokenSecret, String username return auth; } - public void setAuth(String authToken, String username, String token_secret) throws IOException, SAXException, FlickrException { + 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("") && token_secret != null && !token_secret.equals("")) { - auth = constructAuth(authToken, token_secret, username); + if(authToken != null && !authToken.equals("") && tokenSecret != null && !tokenSecret.equals("")) { + auth = constructAuth(authToken, tokenSecret, username); rc.setAuth(auth); } else { @@ -269,13 +272,13 @@ private String makeSafeFilename(String input) { fname[i] = replace; } } - if(replace_spaces && fname[i] == ' ') + if(replaceSpaces && fname[i] == ' ') fname[i] = '_'; } return new String(fname); } - public String uploadfile(String filename, String inp_title) throws Exception { + public String uploadfile(String filename, String inpTitle) throws Exception { String photoId; RequestContext rc = RequestContext.getRequestContext(); @@ -317,8 +320,8 @@ public String uploadfile(String filename, String inp_title) throws Exception { 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) { + 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); @@ -341,9 +344,9 @@ else if(suffix.equalsIgnoreCase("mov")) { logger.debug(" File : " + filename ); logger.debug(" basefilename : " + basefilename ); - if(inp_title != null && !inp_title.equals("")) { - title = inp_title; - logger.debug(" title : " + inp_title ); + if(inpTitle != null && !inpTitle.equals("")) { + title = inpTitle; + logger.debug(" title : " + inpTitle ); metaData.setTitle(title); } // flickr defaults the title field from file name. @@ -352,7 +355,7 @@ else if(suffix.equalsIgnoreCase("mov")) { // 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) { + if(setOrigFilenameTag) { List tags = new ArrayList(); String tmp = basefilename; basefilename = makeSafeFilename(basefilename); @@ -402,49 +405,49 @@ else if(suffix.equalsIgnoreCase("mov")) { return(photoId); } - public void get_photosets_info() { + public void getPhotosetsInfo() { PhotosetsInterface pi = flickr.getPhotosetsInterface(); try { - int sets_page = 1; + int setsPage = 1; while (true) { - Photosets photosets = pi.getList(nsid, 500, sets_page); - Collection sets_coll = photosets.getPhotosets(); - Iterator sets_iter = sets_coll.iterator(); - while (sets_iter.hasNext()) { - Photoset set = sets_iter.next(); - all_sets_map.put(set.getId(), set); + 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 set_idarr = set_name_to_id.get(set.getTitle()); - if(set_idarr == null) { - set_idarr = new ArrayList(); - set_idarr.add(new String(set.getId())); - set_name_to_id.put(set.getTitle(), set_idarr); + ArrayList setIdarr = setNameToId.get(set.getTitle()); + if(setIdarr == null) { + setIdarr = new ArrayList(); + setIdarr.add(new String(set.getId())); + setNameToId.put(set.getTitle(), setIdarr); } else { - set_idarr.add(new String(set.getId())); + setIdarr.add(new String(set.getId())); } } - if (sets_coll.size() < 500) { + if (setsColl.size() < 500) { break; } - sets_page++; + setsPage++; } - logger.debug(" Sets retrieved: " + all_sets_map.size()); + logger.debug(" Sets retrieved: " + allSetsMap.size()); // all_sets_retrieved = true; // Print dups if any. - Set keys = set_name_to_id.keySet(); + Set keys = setNameToId.keySet(); Iterator iter = keys.iterator(); while(iter.hasNext()) { String name = iter.next(); - ArrayList set_idarr = set_name_to_id.get(name); - if(set_idarr != null && set_idarr.size() > 1) { - System.out.println("There is more than 1 set with this name : " + set_name_to_id.get(name)); - for(int j = 0; j < set_idarr.size(); j++) { - System.out.println(" id: " + set_idarr.get(j)); + 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)); } } } @@ -457,7 +460,7 @@ public void get_photosets_info() { private String setid = null; private String basefilename = null; private PhotoList photos = new PhotoList(); - private HashMap file_photos = new HashMap(); + 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}"); @@ -468,23 +471,23 @@ private static void Usage() { } /** - * @return the setorigfilenametag + * @return the setOrigFilenameTag */ public boolean isSetorigfilenametag() { - return setorigfilenametag; + return setOrigFilenameTag; } /** - * @param setorigfilenametag the setorigfilenametag to set + * @param setOrigFilenameTag the setOrigFilenameTag to set */ - public void setSetorigfilenametag(boolean setorigfilenametag) { - this.setorigfilenametag = setorigfilenametag; + public void setSetorigfilenametag(boolean setOrigFilenameTag) { + this.setOrigFilenameTag = setOrigFilenameTag; } public static void main(String[] args) throws Exception { - String api_key = null; // args[0]; - String shared_secret = null; // args[1]; + String apiKey = null; // args[0]; + String sharedSecret = null; // args[1]; Properties properties = new Properties(); InputStream in = null; @@ -492,9 +495,9 @@ public static void main(String[] args) throws Exception { in = UploadPhoto.class.getResourceAsStream("/setup.properties"); if(in != null) { properties.load(in); - api_key = properties.getProperty("apiKey"); - shared_secret = properties.getProperty("secret"); - if(api_key != null && shared_secret != null) + 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) { @@ -510,19 +513,19 @@ public static void main(String[] args) throws Exception { System.exit(1); } - ArrayList uploadfile_args = new ArrayList(); - ArrayList option_args = new ArrayList(); + 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 authsDir_str = System.getProperty("user.home") + File.separatorChar + ".flickrAuth"; + String authsDirStr = System.getProperty("user.home") + File.separatorChar + ".flickrAuth"; String nsid = null; - String user_name = null; - String access_token = null; // Optional entry. - String token_secret = null; // Optional entry. + 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. @@ -541,34 +544,34 @@ public static void main(String[] args) throws Exception { nsid = args[++i]; break; case "-u": if(i < args.length) - user_name = args[++i]; + username = args[++i]; break; case "-apiKey": if(i < args.length) - api_key = args[++i]; + apiKey = args[++i]; break; case "-secret": if(i < args.length) - shared_secret = args[++i]; + sharedSecret = args[++i]; break; case "-notags" : if(i < args.length) settagname = false; break; case "-a" : if(i < args.length) - access_token = args[++i]; + accessToken = args[++i]; break; case "-t" : if(i < args.length) - token_secret = args[++i]; + tokenSecret = args[++i]; break; case "-s" : if(i < args.length) setName = args[++i]; break; case "-option": if(i < args.length) - option_args.add(args[++i]); + optionArgs.add(args[++i]); break; default : if(setName != null) - uploadfile_args.add(args[i]); + uploadfileArgs.add(args[i]); else { Usage(); System.exit(1); @@ -576,52 +579,52 @@ public static void main(String[] args) throws Exception { } } - if(api_key == null || shared_secret == null || - (user_name == null && nsid == null) || (setName == null ) || - (uploadfile_args.size() == 0) ) { + if(apiKey == null || sharedSecret == null || + (username == null && nsid == null) || (setName == null ) || + (uploadfileArgs.size() == 0) ) { Usage(); System.exit(1); } - UploadPhoto bf = new UploadPhoto(api_key, nsid, shared_secret, new File(authsDir_str), user_name); - for(i = 0; i < option_args.size(); i++) { - bf.add_option( option_args.get(i)); + 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(access_token, user_name, token_secret ); + bf.setAuth(accessToken, username, tokenSecret ); - if(!bf.can_upload()) + if(!bf.canUpload()) System.exit(1); bf.getPrivacy(); - bf.get_photosets_info(); + bf.getPhotosetsInfo(); if(setName != null && !setName.equals("")) { - bf.get_set_photos(setName); + bf.getSetPhotos(setName); } // String photoid; - for( i = 0; i < uploadfile_args.size(); i++) { - String filename = uploadfile_args.get(i); + 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 : " + uploadfile_args.get(i) ); + logger.debug("Processing directory : " + uploadfileArgs.get(i) ); for(int j = 0; j < filelist.length; j++) { - bf.process_file_arg( uploadfile_args.get(i) + File.separatorChar + filelist[j], setName); + bf.processFileArg( uploadfileArgs.get(i) + File.separatorChar + filelist[j], setName); } } else { - bf.process_file_arg( filename, setName); + bf.processFileArg( filename, setName); } } } - private static final String[] photo_suffixes = { + private static final String[] photoSuffixes = { "jpg" ,"jpeg" ,"png" @@ -629,7 +632,7 @@ public static void main(String[] args) throws Exception { ,"bmp" ,"tif","tiff" }; - private static final String[] video_suffixes = { + private static final String[] videoSuffixes = { "3gp","3gp","avi","mov","mp4","mpg","mpeg","wmv","ogg","ogv","m2v"}; static class UploadFilenameFilter implements FilenameFilter { @@ -638,7 +641,7 @@ static class UploadFilenameFilter implements FilenameFilter { // for videos and photos separately. public boolean accept(File dir, String name) { - if(is_valid_suffix(name)) + if(isValidSuffix(name)) return true; else return false; @@ -646,24 +649,24 @@ public boolean accept(File dir, String name) { } - private static boolean is_valid_suffix(String basefilename) { + 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 < photo_suffixes.length; i++) { - if(photo_suffixes[i].equals(suffix)) + for(int i = 0; i < photoSuffixes.length; i++) { + if(photoSuffixes[i].equals(suffix)) return true; } - for(int i = 0; i < video_suffixes.length; i++) { - if(video_suffixes[i].equals(suffix)) + 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 process_file_arg(String filename, String setName) throws Exception { + private void processFileArg(String filename, String setName) throws Exception { String photoid; if(filename.equals("")) { System.out.println("filename must be entered for uploadfile " ); @@ -674,10 +677,10 @@ private void process_file_arg(String filename, String setName) throws Exception else basefilename = filename; - boolean file_uploaded = check_if_loaded(filename); + boolean fileUploaded = checkIfLoaded(filename); - if(! file_uploaded) { - if(!is_valid_suffix(basefilename)) { + if(! fileUploaded) { + if(!isValidSuffix(basefilename)) { System.out.println(" File: " + basefilename + " is not a supported filetype for flickr (invalid suffix)"); return; } @@ -693,19 +696,19 @@ private void process_file_arg(String filename, String setName) throws Exception photoid = uploadfile(filename, null); // Add to Set. Create set if it does not exist. if(photoid != null) { - add_photo_to_set( photoid, setName); + 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 " + get_uploaded_time(filename) ); + logger.info(" File: " + filename + " has already been loaded on " + getUploadedTime(filename) ); } } - private void add_option(String opt) { + private void addOption(String opt) { switch(opt) { - case "replace_spaces": replace_spaces = true; + case "replaceSpaces": replaceSpaces = true; break; case "notags": setSetorigfilenametag(false); @@ -718,7 +721,7 @@ private void add_option(String opt) { } - private boolean can_upload() { + private boolean canUpload() { RequestContext rc = RequestContext.getRequestContext(); Auth auth = null; auth = rc.getAuth(); @@ -742,7 +745,7 @@ private boolean can_upload() { * @param filename * @return */ - private boolean check_if_loaded(String filename) { + private boolean checkIfLoaded(String filename) { String title; if(basefilename.lastIndexOf('.') > 0) @@ -750,20 +753,20 @@ private boolean check_if_loaded(String filename) { else return false; - if(file_photos.containsKey(title)) + if(filePhotos.containsKey(title)) return true; return false; } - private String get_uploaded_time(String filename) { + private String getUploadedTime(String filename) { String title = ""; if(basefilename.lastIndexOf('.') > 0) title = basefilename.substring(0, basefilename.lastIndexOf('.') ); - if(file_photos.containsKey(title)) { - Photo p = file_photos.get(title); + if(filePhotos.containsKey(title)) { + Photo p = filePhotos.get(title); if(p.getDatePosted() != null) { return(smp.format(p.getDatePosted())); } @@ -772,13 +775,13 @@ private String get_uploaded_time(String filename) { return ""; } - private void get_set_photos(String setName) throws FlickrException { + 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 set_idarr ; - set_idarr = set_name_to_id.get(setName); - if(set_idarr != null) { - setid = set_idarr.get(0); + ArrayList setIdarr ; + setIdarr = setNameToId.get(setName); + if(setIdarr != null) { + setid = setIdarr.get(0); PhotosetsInterface pi = flickr.getPhotosetsInterface(); Set extras = new HashSet(); @@ -797,57 +800,57 @@ private void get_set_photos(String setName) throws FlickrException { int setPage = 1; while (true) { - PhotoList tmp_set = pi.getPhotos(setid, extras, Flickr.PRIVACY_LEVEL_NO_FILTER, 500, setPage); + PhotoList tmpSet = pi.getPhotos(setid, extras, Flickr.PRIVACY_LEVEL_NO_FILTER, 500, setPage); - int tmp_set_size = tmp_set.size(); - photos.addAll(tmp_set); - if (tmp_set_size < 500) { + int tmpSetSize = tmpSet.size(); + photos.addAll(tmpSet); + if (tmpSetSize < 500) { break; } setPage++; } for(int i = 0; i < photos.size(); i++) { - file_photos.put(photos.get(i).getTitle(), photos.get(i)); + filePhotos.put(photos.get(i).getTitle(), photos.get(i)); } - if(flickr_debug) { + if(flickrDebug) { logger.debug("Set title: " + setName + " id: " + setid + " found"); logger.debug(" Photos in Set already loaded: " + photos.size() ); } } } - public void add_photo_to_set(String photoid, String setName) throws Exception { + public void addPhotoToSet(String photoid, String setName) throws Exception { - ArrayList set_idarr ; + ArrayList setIdarr ; // all_set_maps. - PhotosetsInterface psets_i = flickr.getPhotosetsInterface(); + PhotosetsInterface psetsInterface = flickr.getPhotosetsInterface(); Photoset set = null; if(setid == null) { // In case it is a new photo-set. - set_idarr = set_name_to_id.get(setName); - if(set_idarr == null) { - // set_idarr should be null since we checked it get_set_photos. + 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 = psets_i.create(setName, description, photoid); + set = psetsInterface.create(setName, description, photoid); setid = set.getId(); - set_idarr = new ArrayList(); - set_idarr.add(new String(setid)); - set_name_to_id.put(setName, set_idarr); + setIdarr = new ArrayList(); + setIdarr.add(new String(setid)); + setNameToId.put(setName, setIdarr); - all_sets_map.put(set.getId(), set); + allSetsMap.put(set.getId(), set); } } else { - set = all_sets_map.get(setid); - psets_i.addPhoto(setid , photoid); + set = allSetsMap.get(setid); + psetsInterface.addPhoto(setid , photoid); } // Add to photos . @@ -861,7 +864,7 @@ public void add_photo_to_set(String photoid, String setName) throws Exception { title = basefilename.substring(0, basefilename.lastIndexOf('.') ); else title = p.getTitle(); - file_photos.put(title, p); + 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 index a7f71281..256fdf23 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java @@ -166,12 +166,6 @@ public com.flickr4java.flickr.Response get(String path, Map para request.addQuerystringParameter(Flickr.API_KEY, apiKey); } } - 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()); @@ -399,15 +393,15 @@ private byte[] buildMultipartBody(Map parameters, String boundar if(filename == null) filename = "image.jpg"; - String filemimetype = (String) parameters.get("filemimetype"); - if(filemimetype == null) - filemimetype = "image/jpeg"; + 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); + writeParam(key, entry.getValue(), buffer, boundary, filename, fileMimeType); } } catch (IOException e) { throw new FlickrRuntimeException(e); @@ -420,10 +414,10 @@ private byte[] buildMultipartBody(Map parameters, String boundar return buffer.toByteArray(); } - private void writeParam(String name, Object value, ByteArrayOutputStream buffer, String boundary, String filename, String filemimetype) throws IOException { + 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)); + buffer.write(("Content-Type: " + fileMimeType + "\r\n\r\n").getBytes(CHARSET_NAME)); InputStream in = (InputStream) value; byte[] buf = new byte[512]; @@ -434,7 +428,7 @@ private void writeParam(String name, Object value, ByteArrayOutputStream buffer, 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(("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 { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java index 2bdd9a54..dfb6aae5 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java @@ -93,9 +93,9 @@ protected synchronized SimpleDateFormat initialValue() { private Size videoOriginal; - private Size mobileMp4; + private Size mobileMP4; - private Size hd_MP4; + private Size hdMP4; private String id; @@ -828,19 +828,19 @@ public String getVideoOriginalUrl() { } } - public String getMobileMP4Url() { - if (mobileMp4 == null) { + public String getMobileMp4Url() { + if (mobileMP4 == null) { return ""; } else { - return mobileMp4.getSource(); + return mobileMP4.getSource(); } } - public String getHD_MP4Url() { - if (hd_MP4 == null) { + public String getHdMp4Url() { + if (hdMP4 == null) { return ""; } else { - return hd_MP4.getSource(); + return hdMP4.getSource(); } } @@ -1065,11 +1065,11 @@ public void setSizes(Collection sizes) { } else if (size.getLabel() == Size.VIDEO_ORIGINAL) { videoOriginal = size; } - else if (size.getLabel() == Size.Mobile_MP4) { - mobileMp4 = size; + else if (size.getLabel() == Size.MOBILE_MP4) { + mobileMP4 = size; } else if (size.getLabel() == Size.HD_MP4) { - hd_MP4 = size; + hdMP4 = size; } } } @@ -1135,31 +1135,31 @@ public Size getVideoOriginalSize() { } /** - * @return the mobileMp4 + * @return the mobileMP4 */ public Size getMobileMp4() { - return mobileMp4; + return mobileMP4; } /** - * @param mobileMp4 the mobileMp4 to set + * @param mobileMP4 the mobileMP4 to set */ - public void setMobileMp4(Size mobileMp4) { - this.mobileMp4 = mobileMp4; + public void setMobileMp4(Size mobileMP4) { + this.mobileMP4 = mobileMP4; } /** - * @return the hd_MP4 + * @return the hdMP4 */ - public Size getHD_MP4() { - return hd_MP4; + public Size getHdMp4() { + return hdMP4; } /** - * @param hd_MP4 the hd_MP4 to set + * @param hdMP4 the hdMP4 to set */ - public void setHd_MP4(Size hd_MP4) { - this.hd_MP4 = hd_MP4; + public void setHdMp4(Size hdMP4) { + this.hdMP4 = hdMP4; } /** diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java index 8dd10f22..7155ac81 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java @@ -1375,11 +1375,11 @@ public InputStream getImageAsStream(Photo photo, int size) throws FlickrExceptio } else if (size == Size.SITE_MP4) { urlStr = photo.getSiteMP4Url(); } - else if(size == Size.Mobile_MP4) { - urlStr = photo.getMobileMP4Url(); + else if(size == Size.MOBILE_MP4) { + urlStr = photo.getMobileMp4Url(); } else if(size == Size.HD_MP4) { - urlStr = photo.getHD_MP4Url(); + urlStr = photo.getHdMp4Url(); } else { throw new FlickrException("0", "Unknown Photo-size"); } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java index 5c9dbaac..13e0646c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java @@ -173,7 +173,7 @@ public class Size { * @see com.flickr4java.flickr.photos.PhotosInterface#getImage(Photo, int) * @see com.flickr4java.flickr.photos.PhotosInterface#getImageAsStream(Photo, int) */ - public static final int Mobile_MP4 = 15; + public static final int MOBILE_MP4 = 15; public static final int HD_MP4 = 16; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java index 42652b22..9cd0e64f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java @@ -16,7 +16,7 @@ public class UploadMetaData { private String filename = null; - private String filemimetype = null; + private String fileMimeType = null; private String title; @@ -178,11 +178,11 @@ public UploadMetaData setFilename(String filename) { } public String getFilemimetype() { - return filemimetype; + return fileMimeType; } - public void setFilemimetype(String filemimetype) { - this.filemimetype = filemimetype; + public void setFilemimetype(String fileMimeType) { + this.fileMimeType = fileMimeType; } public boolean isAsync() { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java index a2092bd1..b2df03a0 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java @@ -227,11 +227,11 @@ private Map setUploadParameters(UploadMetaData metaData) { 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"; + String fileMimeType = metaData.getFilemimetype(); + if(fileMimeType == null || fileMimeType.equals("")) + fileMimeType = "image/jpeg"; - parameters.put("filemimetype", filemimetype); + parameters.put("filemimetype", fileMimeType); String title = metaData.getTitle(); if (title != null) { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java index 03392247..df2ae861 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java @@ -27,13 +27,13 @@ public class FileAuthStore implements AuthStore { private Map auths; - private Map auths_by_user; // Separate HashMap due to retrieveAll. + private Map authsByUser; // Separate HashMap due to retrieveAll. private File authStoreDir; public FileAuthStore(File authStoreDir) throws FlickrException { this.auths = new HashMap(); - this.auths_by_user = new HashMap(); + this.authsByUser = new HashMap(); this.authStoreDir = authStoreDir; @@ -70,7 +70,7 @@ private void load() throws FlickrException { this.auths.put(authInst.getUser().getId(), authInst); // Also store by user-name since it is generally easier to remember. - this.auths_by_user.put(authInst.getUser().getUsername(), authInst); + this.authsByUser.put(authInst.getUser().getUsername(), authInst); } authStream.close(); } @@ -87,7 +87,7 @@ private void load() throws FlickrException { */ public void store(Auth token) throws IOException { this.auths.put(token.getUser().getId(), token); - this.auths_by_user.put(token.getUser().getUsername(), token); + this.authsByUser.put(token.getUser().getUsername(), token); String filename = token.getUser().getId() + ".auth"; File outFile = new File(this.authStoreDir, filename); @@ -110,7 +110,7 @@ public Auth retrieve(String nsid) { if(auth != null) return auth; else - return this.auths_by_user.get(nsid); + return this.authsByUser.get(nsid); } /* @@ -129,7 +129,7 @@ public Auth[] retrieveAll() { */ public void clearAll() { this.auths.clear(); - this.auths_by_user.clear(); + this.authsByUser.clear(); File[] auths = this.authStoreDir.listFiles(new AuthFilenameFilter()); for (int i = 0; i < auths.length; i++) { auths[i].delete(); @@ -144,10 +144,10 @@ public void clearAll() { public void clear(String nsid) { Auth a = this.auths.get(nsid); if(a != null) { - this.auths_by_user.remove(a.getUser().getUsername()); + this.authsByUser.remove(a.getUser().getUsername()); } this.auths.remove(nsid); - this.auths_by_user.remove(nsid); // in case username is passed. + this.authsByUser.remove(nsid); // in case username is passed. File auth = new File(this.authStoreDir, nsid + ".auth"); if (auth.exists()) auth.delete(); From 0c611497c806d298634ea41796a3c54253894ee1 Mon Sep 17 00:00:00 2001 From: boncey Date: Thu, 10 Jul 2014 21:57:42 +0100 Subject: [PATCH 047/239] Preparations for uploading to Maven Central --- Flickr4Java/pom.xml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 18b36f97..1a231d55 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -7,6 +7,33 @@ 2.9-SNAPSHOT jar flickr4java + Java API For Flickr. Fork of FlickrJ. + https://github.com/callmeal/Flickr4Java + + + + Apache License, Version 1.1 + http://www.apache.org/licenses/LICENSE-1.1.txt + repo + + + + + + boncey + Darren Greaves + + developer + + + + callmeal + Allan + + developer + + + 1.6 @@ -64,6 +91,11 @@ + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + From 437e56b8abd225bc00722ba546fd5c41242c501e Mon Sep 17 00:00:00 2001 From: boncey Date: Thu, 10 Jul 2014 22:05:09 +0100 Subject: [PATCH 048/239] More preparations for uploading to Maven Central --- Flickr4Java/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 1a231d55..7df2cac6 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -10,6 +10,12 @@ Java API For Flickr. Fork of FlickrJ. https://github.com/callmeal/Flickr4Java + + org.sonatype.oss + oss-parent + 7 + + Apache License, Version 1.1 From 5ead0bb0738708288a0933ea1db061f6a2545e2d Mon Sep 17 00:00:00 2001 From: boncey Date: Thu, 10 Jul 2014 23:09:15 +0100 Subject: [PATCH 049/239] Update failing tests and make more robust --- .../src/examples/java/AuthExample.java | 3 ++- .../flickr/test/GroupsInterfaceTest.java | 2 +- .../flickr/test/PeopleInterfaceTest.java | 17 ++++++------ .../flickr/test/PhotosInterfaceTest.java | 26 +++++++++---------- .../flickr/test/PhotosetsInterfaceTest.java | 2 +- .../flickr/test/PlacesInterfaceTest.java | 6 ++--- 6 files changed, 29 insertions(+), 27 deletions(-) diff --git a/Flickr4Java/src/examples/java/AuthExample.java b/Flickr4Java/src/examples/java/AuthExample.java index c7960e8e..226a5151 100644 --- a/Flickr4Java/src/examples/java/AuthExample.java +++ b/Flickr4Java/src/examples/java/AuthExample.java @@ -46,7 +46,7 @@ public static void auth() throws IOException, FlickrException { Token token = authInterface.getRequestToken(); System.out.println("token: " + token); - String url = authInterface.getAuthorizationUrl(token, Permission.READ); + String url = authInterface.getAuthorizationUrl(token, 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:"); @@ -62,6 +62,7 @@ public static void auth() throws IOException, FlickrException { // 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("nsid: " + auth.getUser().getId()); System.out.println("Realname: " + auth.getUser().getRealName()); System.out.println("Username: " + auth.getUser().getUsername()); diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java index d4d24320..2ac30513 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java @@ -115,6 +115,6 @@ public void testJoinLeave() throws FlickrException { iface.leave(TEST_JOIN_GROUP, false); group = iface.getInfo(TEST_JOIN_GROUP); int cntAfterLeave = group.getMembers(); - assertTrue("Member count decreasted by 1", cntAfterLeave == cntBeforeJoin); + assertTrue("Member count decreased by 1", cntAfterLeave == cntBeforeJoin); } } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java index 17f213af..8e41d704 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java @@ -13,7 +13,6 @@ import com.flickr4java.flickr.people.PersonTag; import com.flickr4java.flickr.people.PersonTagList; import com.flickr4java.flickr.people.User; -import com.flickr4java.flickr.people.UserList; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photos.PhotoList; @@ -107,14 +106,16 @@ public void testGetPhotosOf() throws FlickrException { @Test public void testAddDelete() throws FlickrException { PeopleInterface iface = flickr.getPeopleInterface(); - iface.add(testProperties.getPhotoId(), testProperties.getNsid(), null); PersonTagList usrs = iface.getList(testProperties.getPhotoId()); - assertNotNull(usrs); - assertEquals(1, usrs.size()); - iface.delete(testProperties.getPhotoId(), testProperties.getNsid()); - usrs = iface.getList(testProperties.getPhotoId()); - assertNotNull(usrs); - assertEquals(0, usrs.size()); + int size = usrs.size(); + try { + iface.add(testProperties.getPhotoId(), testProperties.getNsid(), null); + } finally { + iface.delete(testProperties.getPhotoId(), testProperties.getNsid()); + usrs = iface.getList(testProperties.getPhotoId()); + assertNotNull(usrs); + assertEquals(size, usrs.size()); + } } @Test diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java index 868c13f7..1e5c32e1 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java @@ -336,7 +336,7 @@ public void testGetThumbnailImage() throws FlickrException, IOException { Photo photo = iface.getInfo(photoId, null); BufferedImage image = iface.getImage(photo, Size.THUMB); assertNotNull(image); - assertTrue(67==image.getWidth() || 68==image.getWidth()); + assertTrue(67 == image.getWidth() || 68 == image.getWidth()); assertEquals(100, image.getHeight()); ImageIO.write(image, "jpg", thumbnailFile); } @@ -504,19 +504,19 @@ public void testSetSizes() { p.setOriginalSecret("osecret"); p.setFarm("1"); - assertEquals("http://farm1.static.flickr.com/server/id_secret_m.jpg", p.getSmallUrl()); - assertEquals("http://farm1.static.flickr.com/server/id_secret_s.jpg", p.getSmallSquareUrl()); - assertEquals("http://farm1.static.flickr.com/server/id_secret_t.jpg", p.getThumbnailUrl()); - assertEquals("http://farm1.static.flickr.com/server/id_secret.jpg", p.getMediumUrl()); - assertEquals("http://farm1.static.flickr.com/server/id_secret_b.jpg", p.getLargeUrl()); - assertEquals("http://farm1.static.flickr.com/server/id_secret_q.jpg", p.getSquareLargeUrl()); - assertEquals("http://farm1.static.flickr.com/server/id_secret_n.jpg", p.getSmall320Url()); - assertEquals("http://farm1.static.flickr.com/server/id_secret_z.jpg", p.getMedium640Url()); - assertEquals("http://farm1.static.flickr.com/server/id_secret_c.jpg", p.getMedium800Url()); - assertEquals("http://farm1.static.flickr.com/server/id_secret_h.jpg", p.getLarge1600Url()); - assertEquals("http://farm1.static.flickr.com/server/id_secret_k.jpg", p.getLarge2048Url()); + 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()); try { - assertEquals("http://farm1.static.flickr.com/server/id_osecret_o.jpg", p.getOriginalUrl()); + assertEquals("https://farm1.static.flickr.com/server/id_osecret_o.jpg", p.getOriginalUrl()); } catch (FlickrException ex) { } // setSizes() to override the generated URLs. diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java index 0931614f..25b0249f 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java @@ -122,7 +122,7 @@ public void testGetPhotos() throws FlickrException { PhotoList photos = iface.getPhotos(testProperties.getPhotosetId(), 10, 1); assertNotNull(photos); assertTrue(photos.size() >= 1); - assertEquals(testProperties.getDisplayname(), photos.get(0).getOwner().getUsername()); + assertEquals(testProperties.getUsername(), photos.get(0).getOwner().getUsername()); assertEquals(testProperties.getNsid(), photos.get(0).getOwner().getId()); } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java index 481cbd2b..697e7b72 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java @@ -75,7 +75,7 @@ public void testFind2() throws FlickrException { place = list.get(1); assertEquals("SmLXwKZUV7JlnVvxUA", place.getPlaceId()); - assertEquals("/France/%C3%8Ele-de-France/Paris/Europe", place.getPlaceUrl()); + assertEquals("/France/Ile-de-France/Paris/Europe", place.getPlaceUrl()); assertEquals(Place.TYPE_NEIGHBOURHOOD, place.getPlaceType()); } @@ -103,8 +103,8 @@ public void testGetChildrenWithPhotosPublic() throws FlickrException { for (int i = 0; i < list.size(); i++) { Place place = list.get(i); // System.out.println(place.getName()); - if (place.getPlaceId().equals("uSdaoQpTUb.eNcX1Jg")) { - assertEquals("Presidio, San Francisco, CA, US, United States", place.getName()); + if (place.getPlaceId().equals("7bgsk3lTWrhSWp2fUQ")) { + assertEquals("Fisherman's Wharf, San Francisco, CA, US, United States", place.getName()); presidioFound = true; } } From 16ea43b0178a3899ae307512f5a1d79acefec793 Mon Sep 17 00:00:00 2001 From: boncey Date: Thu, 10 Jul 2014 23:22:09 +0100 Subject: [PATCH 050/239] More preparations for uploading to Maven Central --- Flickr4Java/pom.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 7df2cac6..a2d44627 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -102,6 +102,19 @@ maven-javadoc-plugin 2.9.1 + + org.apache.maven.plugins + maven-gpg-plugin + + + sign-artifacts + verify + + sign + + + + From 30e2e8851c6c530f547fc8c2412dd1b06543f428 Mon Sep 17 00:00:00 2001 From: boncey Date: Thu, 10 Jul 2014 23:32:48 +0100 Subject: [PATCH 051/239] More preparations for uploading to Maven Central --- Flickr4Java/pom.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index a2d44627..6fbe36b3 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -73,6 +73,20 @@ + + + + org.apache.maven.plugins + maven-release-plugin + 2.1 + + forked-path + false + ${arguments} -Psonatype-oss-release + + + + org.apache.maven.plugins From e6f752a30db91b010475734d4f77eb7ed9e81110 Mon Sep 17 00:00:00 2001 From: boncey Date: Fri, 11 Jul 2014 20:56:41 +0100 Subject: [PATCH 052/239] [maven-release-plugin] prepare release flickr4java-2.9 --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 6fbe36b3..b17629bc 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.9-SNAPSHOT + 2.9 jar flickr4java Java API For Flickr. Fork of FlickrJ. From a585bb5b4e1b2b213b8f6cf800c0afa96e8bd4c1 Mon Sep 17 00:00:00 2001 From: boncey Date: Fri, 11 Jul 2014 20:56:45 +0100 Subject: [PATCH 053/239] [maven-release-plugin] prepare for next development iteration --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index b17629bc..b6c24b9d 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.9 + 2.10-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 58cdec6a3a42c06a4d66f9ba5b0163cd94b7dca9 Mon Sep 17 00:00:00 2001 From: boncey Date: Fri, 11 Jul 2014 21:19:32 +0100 Subject: [PATCH 054/239] Set path to pom for release plugin --- Flickr4Java/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index b6c24b9d..308165de 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -83,6 +83,7 @@ forked-path false ${arguments} -Psonatype-oss-release + Flickr4Java/pom.xml From 38d35f5eca5ef75d909e830d5d33813802676a19 Mon Sep 17 00:00:00 2001 From: boncey Date: Fri, 11 Jul 2014 21:24:41 +0100 Subject: [PATCH 055/239] More preparations for uploading to Maven Central --- Flickr4Java/pom.xml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 308165de..88a7a89e 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -151,13 +151,6 @@ https://github.com/callmeal/Flickr4Java HEAD - - - bintray-boncey-Flickr4Java-Flickr4Java - boncey-Flickr4Java-Flickr4Java - https://api.bintray.com/maven/boncey/Flickr4Java/Flickr4Java - - release From 5b35b3c4dacd2db33ee4639fd0dc637ab0c4937a Mon Sep 17 00:00:00 2001 From: boncey Date: Fri, 11 Jul 2014 21:37:57 +0100 Subject: [PATCH 056/239] Update to build 2.9 --- Flickr4Java/build.gradle | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index c1f8424d..44fd725c 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.8' +version = '2.9' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/README.md b/README.md index 7013ec5b..a97c0e8f 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr4java - 2.8 + 2.9 It's hosted on [JCenter](https://bintray.com/bintray/jcenter), you may need to [download their settings.xml](https://bintray.com/repo/downloadMavenRepoSettingsFile/downloadSettings?repoPath=%2Fbintray%2Fjcenter) to get access to their repo. From dd5183905e4d738c6edda990be4086ab4a313c82 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 11:20:06 +0100 Subject: [PATCH 057/239] Fix use of gpg plugin so it only prompts on a release --- Flickr4Java/pom.xml | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 88a7a89e..b0a177e9 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -117,19 +117,6 @@ maven-javadoc-plugin 2.9.1 - - org.apache.maven.plugins - maven-gpg-plugin - - - sign-artifacts - verify - - sign - - - - @@ -181,5 +168,32 @@ + + release-sign-artifacts + + + performRelease + true + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.1 + + + sign-artifacts + verify + + sign + + + + + + + From 5f87a1890ee32d645f8e231d7825dcec99c72b49 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 11:20:30 +0100 Subject: [PATCH 058/239] Use log4j instead of printing to stdout/stderr --- .../java/com/flickr4java/flickr/Flickr.java | 41 +++---- .../com/flickr4java/flickr/SOAPResponse.java | 17 ++- .../com/flickr4java/flickr/groups/Group.java | 58 ++++++---- .../flickr/groups/GroupsInterface.java | 107 ++++++++++-------- .../flickr/groups/pools/PoolsInterface.java | 17 +-- .../flickr/photosets/PhotosetsInterface.java | 17 +-- .../reflection/ReflectionInterface.java | 13 ++- .../com/flickr4java/flickr/util/Base64.java | 29 ++--- .../flickr/test/PhotosetsInterfaceTest.java | 5 +- .../flickr/test/PoolsInterfaceTest.java | 36 ++++-- 10 files changed, 197 insertions(+), 143 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java index 2b3a4855..114b0010 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java @@ -78,11 +78,6 @@ public class Flickr { */ public static boolean debugRequest = false; - /** - * If set to true, trace messages will be printed to STDOUT. - */ - public static boolean tracing = false; - private String apiKey; private String sharedSecret; @@ -156,9 +151,9 @@ public class Flickr { private StatsInterface statsInterface; private CamerasInterface cameraInterface; - + private SuggestionsInterface suggestionsInterface; - + private GroupDiscussInterface discussionInterface; /** @@ -617,30 +612,30 @@ public CamerasInterface getCamerasInterface() { } return cameraInterface; } - + /** * Get the SuggestionsInterface. * * @return The SuggestionsInterface */ - public SuggestionsInterface getSuggestionsInterface() { - if (suggestionsInterface == null) { - suggestionsInterface = new SuggestionsInterface(apiKey, sharedSecret, transport); - } - return suggestionsInterface; + public SuggestionsInterface getSuggestionsInterface() { + if (suggestionsInterface == null) { + suggestionsInterface = new SuggestionsInterface(apiKey, sharedSecret, transport); } - + return suggestionsInterface; + } + /** - * Get the GroupDiscussInterface. - * - * @return The GroupDiscussInterface - */ - + * Get the GroupDiscussInterface. + * + * @return The GroupDiscussInterface + */ + public GroupDiscussInterface getDiscussionInterface() { - if (discussionInterface == null) { - discussionInterface= new GroupDiscussInterface(apiKey, sharedSecret, transport); - } - return discussionInterface; + if (discussionInterface == null) { + discussionInterface = new GroupDiscussInterface(apiKey, sharedSecret, transport); + } + return discussionInterface; } } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java index 21e45ced..7097a635 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java @@ -5,6 +5,7 @@ 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; @@ -19,30 +20,33 @@ */ public class SOAPResponse implements Response { + private static Logger _log = Logger.getLogger(SOAPResponse.class); + private List payload; private String errorCode; private String errorMessage; - private SOAPEnvelope envelope; + 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) { - System.out.println("SOAP RESPONSE.parse"); - System.out.println(body.getAsString()); + _log.debug("SOAP RESPONSE.parse"); + _log.debug(body.getAsString()); } SOAPFault fault = (SOAPFault) body.getFault(); if (fault != null) { - System.err.println("FAULT: " + fault.getAsString()); + _log.warn("FAULT: " + fault.getAsString()); errorCode = fault.getFaultCode(); errorMessage = fault.getFaultString(); } else { @@ -63,6 +67,7 @@ public String getStat() { return null; } + @Override public Element getPayload() { if (payload.isEmpty()) { throw new RuntimeException("SOAP response payload has no elements"); @@ -70,18 +75,22 @@ public Element getPayload() { 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/groups/Group.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java index 2db11141..5e395dc5 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java @@ -3,10 +3,11 @@ */ package com.flickr4java.flickr.groups; -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.util.BuddyIconable; import com.flickr4java.flickr.util.UrlUtilities; +import org.apache.log4j.Logger; + /** * Class representing a Flickr Group. * @@ -14,14 +15,16 @@ */ public class Group implements BuddyIconable { + private static Logger _log = Logger.getLogger(Group.class); + private String id; private String name; private int members; - + private int poolCount; - + private int topicCount; private String privacy; @@ -33,9 +36,9 @@ public class Group implements BuddyIconable { private String description; private Throttle throttle; - + private Blast blast; - + private Restriction restriction; private String lang; @@ -91,10 +94,10 @@ public void setMembers(String members) { setMembers(Integer.parseInt(members)); } catch (NumberFormatException nfe) { setMembers(0); - if (Flickr.tracing) - System.out.println("trace: Group.setMembers(String) encountered a number format " + "exception. members set to 0"); + _log.trace("Group.setMembers(String) encountered a number format exception. members set to 0"); } } + public int getPoolCount() { return poolCount; } @@ -109,10 +112,10 @@ public void setPoolCount(String poolCount) { setPoolCount(Integer.parseInt(poolCount)); } catch (NumberFormatException nfe) { setPoolCount(0); - if (Flickr.tracing) - System.out.println("trace: Group.setPoolCount(String) encountered a number format " + "exception. poolCount set to 0"); + _log.trace("Group.setPoolCount(String) encountered a number format exception. poolCount set to 0"); } } + public int getTopicCount() { return topicCount; } @@ -127,8 +130,7 @@ public void setTopicCount(String topicCount) { setTopicCount(Integer.parseInt(topicCount)); } catch (NumberFormatException nfe) { setPoolCount(0); - if (Flickr.tracing) - System.out.println("trace: Group.setTopicCount(String) encountered a number format " + "exception. topicCount set to 0"); + _log.trace("Group.setTopicCount(String) encountered a number format exception. topicCount set to 0"); } } @@ -136,6 +138,7 @@ public void setTopicCount(String topicCount) { * @deprecated * @return the online-state */ + @Deprecated public int getOnline() { return online; } @@ -144,6 +147,7 @@ public int getOnline() { * @deprecated * @param online */ + @Deprecated public void setOnline(int online) { this.online = online; } @@ -152,14 +156,14 @@ public void setOnline(int online) { * @deprecated * @param online */ + @Deprecated public void setOnline(String online) { try { if (online != null) setOnline(Integer.parseInt(online)); } catch (NumberFormatException nfe) { setOnline(0); - if (Flickr.tracing) - System.out.println("trace: Group.setOnline(String) encountered a number format " + "exception. online set to 0"); + _log.trace("Group.setOnline(String) encountered a number format exception. online set to 0"); } } @@ -167,6 +171,7 @@ public void setOnline(String online) { * @deprecated * @return chatId */ + @Deprecated public String getChatId() { return chatId; } @@ -175,6 +180,7 @@ public String getChatId() { * @deprecated * @param chatId */ + @Deprecated public void setChatId(String chatId) { this.chatId = chatId; } @@ -183,6 +189,7 @@ public void setChatId(String chatId) { * @deprecated * @return the number of users in chat */ + @Deprecated public int getInChat() { return inChat; } @@ -191,6 +198,7 @@ public int getInChat() { * @deprecated * @param inChat */ + @Deprecated public void setInChat(int inChat) { this.inChat = inChat; } @@ -199,15 +207,14 @@ public void setInChat(int inChat) { * @deprecated * @param inChat */ + @Deprecated public void setInChat(String inChat) { try { if (inChat != null) setInChat(Integer.parseInt(inChat)); } catch (NumberFormatException nfe) { setInChat(0); - if (Flickr.tracing) { - System.out.println("trace: Group.setInChat(String) encountered a number format " + "exception. InChat set to 0"); - } + _log.trace("Group.setInChat(String) encountered a number format exception. InChat set to 0"); } } @@ -232,7 +239,7 @@ public int getPhotoCount() { } /** - * + * * @param photoCount */ public void setPhotoCount(int photoCount) { @@ -249,9 +256,7 @@ public void setPhotoCount(String photoCount) { setPhotoCount(Integer.parseInt(photoCount)); } catch (NumberFormatException nfe) { setPhotoCount(0); - if (Flickr.tracing) { - System.out.println("trace: Group.setPhotoCount(String) encountered a number format " + "exception. PhotoCount set to 0"); - } + _log.trace("Group.setPhotoCount(String) encountered a number format exception. PhotoCount set to 0"); } } } @@ -260,6 +265,7 @@ public void setPhotoCount(String photoCount) { * @deprecated * @return boolean */ + @Deprecated public boolean isEighteenPlus() { return eighteenPlus; } @@ -268,6 +274,7 @@ public boolean isEighteenPlus() { * @deprecated * @param eighteenPlus */ + @Deprecated public void setEighteenPlus(boolean eighteenPlus) { this.eighteenPlus = eighteenPlus; } @@ -296,28 +303,34 @@ public void setPoolModerated(boolean poolModerated) { this.poolModerated = poolModerated; } + @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)); @@ -333,6 +346,7 @@ public void setIconServer(String iconServer) { * @return The BuddyIconUrl * @deprecated use {@link #getSecureBuddyIconUrl() } */ + @Override @Deprecated public String getBuddyIconUrl() { return UrlUtilities.createBuddyIconUrl(iconFarm, iconServer, id); @@ -357,7 +371,7 @@ public Throttle getThrottle() { public void setThrottle(Throttle throttle) { this.throttle = throttle; } - + public Blast getBlast() { return blast; } @@ -365,7 +379,7 @@ public Blast getBlast() { public void setBlast(Blast blast) { this.blast = blast; } - + public Restriction getRestriction() { return restriction; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java index 9a002747..30b83eb9 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java @@ -8,6 +8,7 @@ import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.util.XMLUtilities; +import org.apache.log4j.Logger; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -25,6 +26,8 @@ */ public class GroupsInterface { + private static Logger _log = Logger.getLogger(GroupsInterface.class); + public static final String METHOD_BROWSE = "flickr.groups.browse"; public static final String METHOD_GET_ACTIVE_LIST = "flickr.groups.getActiveList"; @@ -39,11 +42,11 @@ public class GroupsInterface { public static final String METHOD_LEAVE = "flickr.groups.leave"; - private String apiKey; + private final String apiKey; - private String sharedSecret; + private final String sharedSecret; - private Transport transportAPI; + private final Transport transportAPI; public GroupsInterface(String apiKey, String sharedSecret, Transport transportAPI) { this.apiKey = apiKey; @@ -60,6 +63,7 @@ public GroupsInterface(String apiKey, String sharedSecret, Transport transportAP * @throws FlickrException * @deprecated Flickr returns just empty results */ + @Deprecated public Category browse(String catId) throws FlickrException { List subcategories = new ArrayList(); List groups = new ArrayList(); @@ -159,38 +163,38 @@ public Group getInfo(String groupId) throws FlickrException { throttle.setRemaining(Integer.parseInt(remainingStr)); } } else if (n > 1) { - System.err.println("WARNING: more than one throttle element in group"); + _log.warn("WARNING: more than one throttle element in group"); } - + NodeList restrictionNodes = groupElement.getElementsByTagName("restrictions"); n = restrictionNodes.getLength(); if (n == 1) { - Element restrictionElement = (Element) restrictionNodes.item(0); - Restriction restriction = new Restriction(); - group.setRestriction(restriction); - restriction.setIsPhotosOk("1".equals(restrictionElement.getAttribute("photos_ok"))); - restriction.setIsVideosOk("1".equals(restrictionElement.getAttribute("videos_ok"))); - restriction.setIsImagesOk("1".equals(restrictionElement.getAttribute("images_ok"))); - restriction.setIsScreensOk("1".equals(restrictionElement.getAttribute("screens_ok"))); - restriction.setIsArtOk("1".equals(restrictionElement.getAttribute("art_ok"))); - restriction.setIsSafeOk("1".equals(restrictionElement.getAttribute("safe_ok"))); - restriction.setIsModerateOk("1".equals(restrictionElement.getAttribute("moderate_ok"))); - restriction.setIsRestrictedOk("1".equals(restrictionElement.getAttribute("restricted_ok"))); - restriction.setIsHasGeo("1".equals(restrictionElement.getAttribute("has_geo"))); + Element restrictionElement = (Element) restrictionNodes.item(0); + Restriction restriction = new Restriction(); + group.setRestriction(restriction); + restriction.setIsPhotosOk("1".equals(restrictionElement.getAttribute("photos_ok"))); + restriction.setIsVideosOk("1".equals(restrictionElement.getAttribute("videos_ok"))); + restriction.setIsImagesOk("1".equals(restrictionElement.getAttribute("images_ok"))); + restriction.setIsScreensOk("1".equals(restrictionElement.getAttribute("screens_ok"))); + restriction.setIsArtOk("1".equals(restrictionElement.getAttribute("art_ok"))); + restriction.setIsSafeOk("1".equals(restrictionElement.getAttribute("safe_ok"))); + restriction.setIsModerateOk("1".equals(restrictionElement.getAttribute("moderate_ok"))); + restriction.setIsRestrictedOk("1".equals(restrictionElement.getAttribute("restricted_ok"))); + restriction.setIsHasGeo("1".equals(restrictionElement.getAttribute("has_geo"))); } else if (n > 1) { - System.err.println("WARNING: more than one throttle element in group"); + _log.warn("WARNING: more than one throttle element in group"); } NodeList blastNodes = groupElement.getElementsByTagName("blast"); n = blastNodes.getLength(); if (n == 1) { - Element blastElement = (Element) blastNodes.item(0); - Blast blast = new Blast(); - group.setBlast(blast); - blast.setUserId(blastElement.getAttribute("user_id")); - blast.setDateBlastAdded(blastElement.getAttribute("date_blast_added")); - blast.setBlast(XMLUtilities.getChildValue(groupElement,"blast")); + Element blastElement = (Element) blastNodes.item(0); + Blast blast = new Blast(); + group.setBlast(blast); + blast.setUserId(blastElement.getAttribute("user_id")); + blast.setDateBlastAdded(blastElement.getAttribute("date_blast_added")); + blast.setBlast(XMLUtilities.getChildValue(groupElement, "blast")); } else if (n > 1) { - System.err.println("WARNING: more than one throttle element in group"); + _log.warn("WARNING: more than one throttle element in group"); } return group; @@ -245,14 +249,15 @@ public Collection search(String text, int perPage, int page) throws Flick /** * Join a group as a public member. - * - * Note: if a group has rules - the client must display the rules to the user and the - * user must accept them prior to joining the group. The acceptRules parameter indicates - * that the user has accepted those rules. - * - * @param groupId - the id of the group to join - * @param acceptRules - if a group has rules, true indicates the user has accepted the rules - * + * + * Note: if a group has rules - the client must display the rules to the user and the user must accept them prior to joining the group. The acceptRules + * parameter indicates that the user has accepted those rules. + * + * @param groupId + * - the id of the group to join + * @param acceptRules + * - if a group has rules, true indicates the user has accepted the rules + * * @see flickr.groups.join */ public void join(String groupId, Boolean acceptRules) throws FlickrException { @@ -261,7 +266,7 @@ public void join(String groupId, Boolean acceptRules) throws FlickrException { parameters.put("method", METHOD_JOIN); parameters.put("group_id", groupId); if (acceptRules != null) { - parameters.put("accept_rules",acceptRules); + parameters.put("accept_rules", acceptRules); } Response response = transportAPI.post(transportAPI.getPath(), parameters, apiKey, sharedSecret); @@ -272,16 +277,18 @@ public void join(String groupId, Boolean acceptRules) throws FlickrException { /** * Request to join a group. - * - * Note: if a group has rules, the client must display the rules to the user and the user must - * accept them (which is indicated by passing a true value to acceptRules) prior to making the - * join request. - * - * @param groupId - groupId parameter - * @param message - (required) message to group administrator - * @param acceptRules - (required) parameter indicating user has accepted groups rules + * + * Note: if a group has rules, the client must display the rules to the user and the user must accept them (which is indicated by passing a true value to + * acceptRules) prior to making the join request. + * + * @param groupId + * - groupId parameter + * @param message + * - (required) message to group administrator + * @param acceptRules + * - (required) parameter indicating user has accepted groups rules */ - public void joinRequest(String groupId,String message, boolean acceptRules) throws FlickrException { + public void joinRequest(String groupId, String message, boolean acceptRules) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_JOIN_REQUEST); parameters.put("group_id", groupId); @@ -296,12 +303,14 @@ public void joinRequest(String groupId,String message, boolean acceptRules) thro /** * Leave a group. - * - * @see lickr.groups.leave for - * a description of the various behaviors possible when a user leaves a group. - * - * @param groupId - the id of the group to leave - * @param deletePhotos - delete photos by this user from group + * + * @see lickr.groups.leave for a description of the various behaviors possible + * when a user leaves a group. + * + * @param groupId + * - the id of the group to leave + * @param deletePhotos + * - delete photos by this user from group */ public void leave(String groupId, Boolean deletePhotos) throws FlickrException { Map parameters = new HashMap(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java index 45512baa..65ae548e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java @@ -15,14 +15,13 @@ import com.flickr4java.flickr.photos.PhotoUtils; import com.flickr4java.flickr.util.StringUtilities; +import org.apache.log4j.Logger; import org.w3c.dom.Element; import org.w3c.dom.NodeList; -import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.Set; @@ -32,6 +31,8 @@ */ public class PoolsInterface { + private static Logger _log = Logger.getLogger(PoolsInterface.class); + public static final String METHOD_ADD = "flickr.groups.pools.add"; public static final String METHOD_GET_CONTEXT = "flickr.groups.pools.getContext"; @@ -42,11 +43,11 @@ public class PoolsInterface { public static final String METHOD_REMOVE = "flickr.groups.pools.remove"; - private String apiKey; + private final String apiKey; - private String sharedSecret; + private final String sharedSecret; - private Transport transport; + private final Transport transport; public PoolsInterface(String apiKey, String sharedSecret, Transport transport) { this.apiKey = apiKey; @@ -110,8 +111,8 @@ public PhotoContext getContext(String photoId, String groupId) throws FlickrExce Photo photo = new Photo(); photo.setId(element.getAttribute("id")); photoContext.setNextPhoto(photo); - } else { - System.err.println("unsupported element name: " + elementName); + } else if (!elementName.equals("count")) { + _log.warn("unsupported element name: " + elementName); } } return photoContext; @@ -124,7 +125,7 @@ public PhotoContext getContext(String photoId, String groupId) throws FlickrExce * @throws FlickrException */ public Collection getGroups() throws FlickrException { - GroupList groups = new GroupList(); + GroupList groups = new GroupList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_GROUPS); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java index 355865e6..53dc91c6 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java @@ -16,6 +16,7 @@ import com.flickr4java.flickr.util.StringUtilities; import com.flickr4java.flickr.util.XMLUtilities; +import org.apache.log4j.Logger; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -34,6 +35,8 @@ */ public class PhotosetsInterface { + private static Logger _log = Logger.getLogger(PhotosetsInterface.class); + public static final String METHOD_ADD_PHOTO = "flickr.photosets.addPhoto"; public static final String METHOD_CREATE = "flickr.photosets.create"; @@ -237,7 +240,7 @@ public PhotoContext getContext(String photoId, String photosetId) throws FlickrE } else if (elementName.equals("count")) { // TODO: process this information } else { - System.err.println("unsupported element name: " + elementName); + _log.warn("unsupported element name: " + elementName); } } return photoContext; @@ -289,7 +292,7 @@ public Photoset getInfo(String photosetId) throws FlickrException { photoset.setCommentCount(Integer.parseInt(photosetElement.getAttribute("count_comments"))); photoset.setDateCreate(photosetElement.getAttribute("date_create")); photoset.setDateUpdate(photosetElement.getAttribute("date_update")); - + photoset.setIsCanComment("1".equals(photosetElement.getAttribute("can_comment"))); photoset.setTitle(XMLUtilities.getChildValue(photosetElement, "title")); @@ -381,13 +384,12 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce photoset.setCommentCount(Integer.parseInt(photosetElement.getAttribute("count_comments"))); photoset.setDateCreate(photosetElement.getAttribute("date_create")); photoset.setDateUpdate(photosetElement.getAttribute("date_update")); - + photoset.setIsCanComment("1".equals(photosetElement.getAttribute("can_comment"))); photoset.setIsNeedsInterstitial("1".equals(photosetElement.getAttribute("needs_interstitial"))); photoset.setIsVisible("1".equals(photosetElement.getAttribute("visibility_can_see_set"))); photoset.setDescription(XMLUtilities.getChildValue(photosetElement, "description")); - - + photoset.setTitle(XMLUtilities.getChildValue(photosetElement, "title")); photoset.setDescription(XMLUtilities.getChildValue(photosetElement, "description")); @@ -395,7 +397,7 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce } photosetsObject.setPhotosets(photosets); - + return photosetsObject; } @@ -536,7 +538,8 @@ public PhotoList getPhotos(String photosetId, int perPage, int page) thro */ public void orderSets(String[] photosetIds) throws FlickrException { Map parameters = new HashMap(); - parameters.put("method", METHOD_ORDER_SETS);; + parameters.put("method", METHOD_ORDER_SETS); + ; parameters.put("photoset_ids", StringUtilities.join(photosetIds, ",")); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java index 3838cc52..09b94741 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java @@ -8,6 +8,7 @@ import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.util.XMLUtilities; +import org.apache.log4j.Logger; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -26,15 +27,17 @@ */ public class ReflectionInterface { + private static Logger _log = Logger.getLogger(ReflectionInterface.class); + public static final String METHOD_GET_METHOD_INFO = "flickr.reflection.getMethodInfo"; public static final String METHOD_GET_METHODS = "flickr.reflection.getMethods"; - private String apiKey; + private final String apiKey; - private String sharedSecret; + private final String sharedSecret; - private Transport transport; + private final Transport transport; /** * Construct a ReflectionInterface. @@ -111,7 +114,7 @@ public Method getMethodInfo(String methodName) throws FlickrException { // // if (argumentsElement == null) { - // System.err.println("getMethodInfo: Using workaround for arguments array"); + _log.debug("getMethodInfo: Using workaround for arguments array"); Element parent = (Element) methodElement.getParentNode(); Element child = XMLUtilities.getChild(parent, "arguments"); if (child != null) { @@ -150,7 +153,7 @@ public Method getMethodInfo(String methodName) throws FlickrException { // // if (errorsElement == null) { - // System.err.println("getMethodInfo: Using workaround for errors array"); + _log.debug("getMethodInfo: Using workaround for errors array"); Element parent = (Element) methodElement.getParentNode(); Element child = XMLUtilities.getChild(parent, "errors"); if (child != null) { diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/Base64.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/util/Base64.java index 20f40d35..af8b2112 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/Base64.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/util/Base64.java @@ -57,6 +57,8 @@ 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 @@ -73,6 +75,9 @@ * @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; @@ -91,8 +96,6 @@ public final class Base64 { static private final byte PAD = (byte) '='; - static private final boolean fDebug = false; - static private byte[] base64Alphabet = new byte[BASELENGTH]; static private byte[] lookUpBase64Alphabet = new byte[LOOKUPLENGTH]; @@ -216,8 +219,8 @@ public static synchronized byte[] encode(byte[] binaryData) { int encodedIndex = 0; int dataIndex = 0; int i = 0; - if (fDebug) { - System.out.println("number of triplets = " + numberTriplets); + if (_log.isDebugEnabled()) { + _log.debug("number of triplets = " + numberTriplets); } for (i = 0; i < numberTriplets; i++) { @@ -226,8 +229,8 @@ public static synchronized byte[] encode(byte[] binaryData) { b2 = binaryData[dataIndex + 1]; b3 = binaryData[dataIndex + 2]; - if (fDebug) { - System.out.println("b1= " + b1 + ", b2= " + b2 + ", b3= " + b3); + if (_log.isDebugEnabled()) { + _log.debug("b1= " + b1 + ", b2= " + b2 + ", b3= " + b3); } l = (byte) (b2 & 0x0f); @@ -240,10 +243,10 @@ public static synchronized byte[] encode(byte[] binaryData) { byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); encodedData[encodedIndex] = lookUpBase64Alphabet[val1]; - if (fDebug) { - System.out.println("val2 = " + val2); - System.out.println("k4 = " + (k << 4)); - System.out.println("vak = " + (val2 | (k << 4))); + 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)]; @@ -257,9 +260,9 @@ public static synchronized byte[] encode(byte[] binaryData) { if (fewerThan24bits == EIGHTBIT) { b1 = binaryData[dataIndex]; k = (byte) (b1 & 0x03); - if (fDebug) { - System.out.println("b1=" + b1); - System.out.println("b1<<2 = " + (b1 >> 2)); + 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]; diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java index 25b0249f..66d7948f 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java @@ -14,6 +14,7 @@ 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; @@ -26,6 +27,8 @@ */ public class PhotosetsInterfaceTest extends Flickr4JavaTest { + private static Logger _log = Logger.getLogger(PhotosetsInterfaceTest.class); + private Photoset testSet; private List setPics; @@ -95,7 +98,7 @@ public void testGetContext() throws FlickrException { public void testGetInfo() throws FlickrException { PhotosetsInterface iface = flickr.getPhotosetsInterface(); Photoset photoset = iface.getInfo(testProperties.getPhotosetId()); - System.err.println(photoset.getUrl()); + _log.debug(photoset.getUrl()); assertNotNull(photoset); assertNotNull(photoset.getPrimaryPhoto()); assertTrue(photoset.getPhotoCount() >= 1); diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java index 28d6f081..9ad6e8d2 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java @@ -6,14 +6,15 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import java.util.Collection; - -import org.junit.Test; - import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.groups.Group; import com.flickr4java.flickr.groups.pools.PoolsInterface; import com.flickr4java.flickr.photos.Photo; +import com.flickr4java.flickr.photos.PhotoContext; + +import org.junit.Test; + +import java.util.Collection; /** * @author Anthony Eden @@ -22,16 +23,15 @@ public class PoolsInterfaceTest extends Flickr4JavaTest { @Test public void testAddAndRemove() throws FlickrException { + PoolsInterface iface = flickr.getPoolsInterface(); String photoId = testProperties.getPhotoId(); String groupId = testProperties.getTestGroupId(); - PoolsInterface iface = flickr.getPoolsInterface(); - iface.add(photoId, groupId); - iface.remove(photoId, groupId); - } - - @Test - public void testGetContext() { + try { + iface.add(photoId, groupId); + } finally { + iface.remove(photoId, groupId); + } } @Test @@ -51,4 +51,18 @@ public void testGetPhotos() throws FlickrException { assertEquals(0, photos.size()); } + @Test + public void testGetContext() throws FlickrException { + String groupId = testProperties.getTestGroupId(); + String photoId = testProperties.getPhotoId(); + PoolsInterface iface = flickr.getPoolsInterface(); + + try { + iface.add(photoId, groupId); + PhotoContext photoContext = iface.getContext(photoId, groupId); + assertNotNull(photoContext); + } finally { + iface.remove(photoId, groupId); + } + } } From c30e886b7a536609a176f1d06895f75eb2a9c94e Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 11:31:35 +0100 Subject: [PATCH 059/239] Fix error in 'maven-release-plugin' entry in pom --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index b0a177e9..983a8af1 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -82,7 +82,7 @@ forked-path false - ${arguments} -Psonatype-oss-release + -Psonatype-oss-release Flickr4Java/pom.xml From 7073ef6d32c5af00b695fa94b0e82eb160dca58f Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 11:33:58 +0100 Subject: [PATCH 060/239] [maven-release-plugin] prepare release flickr4java-2.10 --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 983a8af1..255d7892 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.10-SNAPSHOT + 2.10 jar flickr4java Java API For Flickr. Fork of FlickrJ. From e27c489334fd528c4b7b9cf70e5b9d2a97793bd4 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 11:34:01 +0100 Subject: [PATCH 061/239] [maven-release-plugin] prepare for next development iteration --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 255d7892..13438414 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.10 + 2.11-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From e9da944a28e3aac2a821b93f49c0b739f3cae129 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 12:27:52 +0100 Subject: [PATCH 062/239] Prepare for new release --- Flickr4Java/build.gradle | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index 44fd725c..22900b6a 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.9' +version = '2.10' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/README.md b/README.md index a97c0e8f..dc0935cc 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr4java - 2.9 + 2.10 It's hosted on [JCenter](https://bintray.com/bintray/jcenter), you may need to [download their settings.xml](https://bintray.com/repo/downloadMavenRepoSettingsFile/downloadSettings?repoPath=%2Fbintray%2Fjcenter) to get access to their repo. From 427856da351c75e4991f3207ce57adc0b007f835 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 12:32:34 +0100 Subject: [PATCH 063/239] Correct version from aborted release --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 13438414..983a8af1 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.11-SNAPSHOT + 2.10-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 977c64640e15283af5f45f12cb6ea70a20f4a8a6 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 12:35:29 +0100 Subject: [PATCH 064/239] [maven-release-plugin] prepare release flickr4java-2.10 --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 983a8af1..255d7892 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.10-SNAPSHOT + 2.10 jar flickr4java Java API For Flickr. Fork of FlickrJ. From bc9e4c3116a344999212388bf403cf240417095c Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 12:42:02 +0100 Subject: [PATCH 065/239] Correct version from another aborted release --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 255d7892..983a8af1 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.10 + 2.10-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 263c78ed199292e2e7a7be99fef46aa4db3fa648 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 12:45:42 +0100 Subject: [PATCH 066/239] [maven-release-plugin] prepare release flickr4java-2.10 --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 983a8af1..255d7892 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.10-SNAPSHOT + 2.10 jar flickr4java Java API For Flickr. Fork of FlickrJ. From 465cbd3ed82263886b9db2b31fb8ce6a2cb593a6 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 12:45:45 +0100 Subject: [PATCH 067/239] [maven-release-plugin] prepare for next development iteration --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 255d7892..13438414 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.10 + 2.11-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 434df7ab4b870d897123d4a82a3eed67a6c70580 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 12:57:52 +0100 Subject: [PATCH 068/239] Correct entries in pom to get it to upload to bintray --- Flickr4Java/pom.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 13438414..9b40684b 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -82,7 +82,7 @@ forked-path false - -Psonatype-oss-release + ${arguments} -Psonatype-oss-release Flickr4Java/pom.xml @@ -138,6 +138,13 @@ https://github.com/callmeal/Flickr4Java HEAD + + + bintray-boncey-Flickr4Java-Flickr4Java + boncey-Flickr4Java-Flickr4Java + https://api.bintray.com/maven/boncey/Flickr4Java/Flickr4Java + + release From 10abb1bdf5293d777e69b57beeaeeaa75241c110 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 12:59:23 +0100 Subject: [PATCH 069/239] Correct version from another aborted release --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 9b40684b..98752b03 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.11-SNAPSHOT + 2.10-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 9d7efad06c2b91d0c8eac935e2d712947388b7da Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 13:02:30 +0100 Subject: [PATCH 070/239] [maven-release-plugin] prepare release flickr4java-2.10 --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 98752b03..cf3da617 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.10-SNAPSHOT + 2.10 jar flickr4java Java API For Flickr. Fork of FlickrJ. From b84db5357b5206caf8337f6663370914bf104bda Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 12 Jul 2014 13:02:33 +0100 Subject: [PATCH 071/239] [maven-release-plugin] prepare for next development iteration --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index cf3da617..9b40684b 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.10 + 2.11-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 384f283bc363d5cb632d370ae7fe2d96bd3317a0 Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sat, 12 Jul 2014 17:46:22 +0100 Subject: [PATCH 072/239] Add details about Maven Central --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dc0935cc..648cfdd3 100644 --- a/README.md +++ b/README.md @@ -42,4 +42,5 @@ An API key is required to use this API. You can [request one on Flickr](http:// 2.10 -It's hosted on [JCenter](https://bintray.com/bintray/jcenter), you may need to [download their settings.xml](https://bintray.com/repo/downloadMavenRepoSettingsFile/downloadSettings?repoPath=%2Fbintray%2Fjcenter) to get access to their repo. +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). + From 68fe7b3b66a840e98eb81a60038bc54d65a0c531 Mon Sep 17 00:00:00 2001 From: George Perry Date: Thu, 31 Jul 2014 22:52:59 -0700 Subject: [PATCH 073/239] PhotosetInterface.getInfo() should be a GET request and not a POST request --- .../com/flickr4java/flickr/photosets/PhotosetsInterface.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java index 53dc91c6..0546ce65 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java @@ -262,7 +262,7 @@ public Photoset getInfo(String photosetId) throws FlickrException { parameters.put("photoset_id", photosetId); - 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()); } From 3e48dce31404fb79c6ceecdb35d6b93ae306f330 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 3 Aug 2014 16:33:52 +0100 Subject: [PATCH 074/239] Use 'get' instead of 'post' for methods that don't require authentication Fix tests so they correctly pick up incorrect usage --- .../flickr/blogs/BlogsInterface.java | 8 ++--- .../flickr/urls/UrlsInterface.java | 18 ++++++------ .../flickr/test/BlogsInterfaceTest.java | 2 +- .../flickr/test/Flickr4JavaTest.java | 29 +++++++++++++++---- .../flickr/test/PhotosetsInterfaceTest.java | 5 ++++ .../flickr/test/PlacesInterfaceTest.java | 2 -- .../flickr/test/UrlsInterfaceTest.java | 8 +++++ 7 files changed, 51 insertions(+), 21 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java index 9d26caa2..e42c0a69 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java @@ -32,11 +32,11 @@ 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 Transport transportAPI; public BlogsInterface(String apiKey, String sharedSecret, Transport transport) { this.apiKey = apiKey; @@ -57,7 +57,7 @@ public Collection getServices() throws FlickrException { 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()); } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java index e991fa8c..93a39bb1 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java @@ -36,11 +36,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 Transport transport; /** * Construct a UrlsInterface. @@ -70,7 +70,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()); } @@ -93,7 +93,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()); } @@ -116,7 +116,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()); } @@ -139,7 +139,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()); } @@ -166,7 +166,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()); } @@ -190,7 +190,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/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java index 4b76a6fe..8536b1c9 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java @@ -37,7 +37,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/Flickr4JavaTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java index ff95a820..797b51ed 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java @@ -3,8 +3,6 @@ */ package com.flickr4java.flickr.test; -import org.junit.Before; - import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.REST; @@ -12,6 +10,8 @@ import com.flickr4java.flickr.auth.Auth; import com.flickr4java.flickr.auth.Permission; +import org.junit.Before; + /** * @author acaplan * @@ -22,10 +22,11 @@ public class Flickr4JavaTest { protected TestProperties testProperties; + /** + * @throws FlickrException + */ @Before public void setUp() throws FlickrException { - // Flickr.debugStream = true; - testProperties = new TestProperties(); REST rest = new REST(); @@ -33,8 +34,17 @@ public void setUp() throws FlickrException { flickr = new Flickr(testProperties.getApiKey(), testProperties.getSecret(), rest); + setAuth(Permission.READ); + } + + /** + * Set auth parameters for API calls that need it. + * + * @param perms + */ + protected void setAuth(Permission perms) { Auth auth = new Auth(); - auth.setPermission(Permission.READ); + auth.setPermission(perms); auth.setToken(testProperties.getToken()); auth.setTokenSecret(testProperties.getTokenSecret()); @@ -42,4 +52,13 @@ public void setUp() throws FlickrException { 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/PhotosetsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java index 66d7948f..d39bc869 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java @@ -7,6 +7,7 @@ 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; @@ -48,6 +49,8 @@ public void setUp() throws FlickrException { @After public void tearDown() throws FlickrException { + setAuth(Permission.DELETE); + PhotosetsInterface iface = flickr.getPhotosetsInterface(); iface.delete(testSet.getId()); } @@ -96,6 +99,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()); diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java index 697e7b72..54a7ae79 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java @@ -35,7 +35,6 @@ public void testFindByLonLat() throws FlickrException { 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); @@ -75,7 +74,6 @@ public void testFind2() throws FlickrException { place = list.get(1); assertEquals("SmLXwKZUV7JlnVvxUA", place.getPlaceId()); - assertEquals("/France/Ile-de-France/Paris/Europe", place.getPlaceUrl()); assertEquals(Place.TYPE_NEIGHBOURHOOD, place.getPlaceType()); } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java index 8b37a9b4..f6cb3cc2 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java @@ -11,6 +11,7 @@ import com.flickr4java.flickr.groups.Group; import com.flickr4java.flickr.urls.UrlsInterface; +import org.junit.Before; import org.junit.Test; /** @@ -18,6 +19,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(); From 1b876f713519c9007677c862120a69484c31f6eb Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 3 Aug 2014 16:35:25 +0100 Subject: [PATCH 075/239] Up version number in README and gradle build --- Flickr4Java/build.gradle | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index 22900b6a..36ca6006 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.10' +version = '2.11' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/README.md b/README.md index 648cfdd3..1f0c8fb7 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr4java - 2.10 + 2.11 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). From 8783d198a3661af6d66fa3237a92e6f4b8dca697 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 3 Aug 2014 16:43:04 +0100 Subject: [PATCH 076/239] [maven-release-plugin] prepare release flickr4java-2.11 --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 9b40684b..2f40a7cb 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.11-SNAPSHOT + 2.11 jar flickr4java Java API For Flickr. Fork of FlickrJ. From 6ec77d3a7ea5fd3e50e2702fdf8808acda4543e1 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 3 Aug 2014 16:43:08 +0100 Subject: [PATCH 077/239] [maven-release-plugin] prepare for next development iteration --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 2f40a7cb..fda52765 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.11 + 2.12-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 2c83ce43fb7d3a97ef7c28bc7644ce980bf009c0 Mon Sep 17 00:00:00 2001 From: Daniel Lakey Date: Thu, 28 Aug 2014 11:19:02 +0200 Subject: [PATCH 078/239] Reinstated "views" element --- .../src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java index f6c4501e..8e33f492 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java @@ -78,6 +78,7 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme 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){ From c1e805ffc439deae9c87dc2b7a12d0eea3af6d9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szab=C3=B3=20B=C3=A1lint?= Date: Thu, 9 Oct 2014 10:59:13 +0200 Subject: [PATCH 079/239] Fix SAXParseException on REST.get call #105 --- Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java index 256fdf23..4483f6df 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java @@ -177,7 +177,7 @@ public com.flickr4java.flickr.Response get(String path, Map para com.flickr4java.flickr.Response response = null; synchronized (mutex) { - String strXml = scribeResponse.getBody(); + String strXml = scribeResponse.getBody().trim(); if (Flickr.debugStream) { logger.debug(strXml); } @@ -300,7 +300,7 @@ public com.flickr4java.flickr.Response post(String path, Map par try { com.flickr4java.flickr.Response response = null; synchronized (mutex) { - String strXml = scribeResponse.getBody(); + String strXml = scribeResponse.getBody().trim(); if (Flickr.debugStream) { logger.debug(strXml); } From 8717b7b76e097ead61dfbc181d6eca3b76f38baa Mon Sep 17 00:00:00 2001 From: hytgbn Date: Wed, 22 Oct 2014 23:45:00 -0700 Subject: [PATCH 080/239] Add Place information into Photo --- .../com/flickr4java/flickr/photos/Photo.java | 40 +++++++++++++++++++ .../flickr4java/flickr/photos/PhotoUtils.java | 37 +++++++++++++++++ .../com/flickr4java/flickr/places/Place.java | 6 +++ 3 files changed, 83 insertions(+) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java index dfb6aae5..e93f5cbe 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java @@ -5,6 +5,7 @@ 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; @@ -181,6 +182,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. */ @@ -1248,5 +1257,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/PhotoUtils.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java index f6c4501e..9442fed4 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java @@ -8,6 +8,7 @@ import org.w3c.dom.Text; import com.flickr4java.flickr.people.User; +import com.flickr4java.flickr.places.Place; import com.flickr4java.flickr.tags.Tag; import com.flickr4java.flickr.util.XMLUtilities; @@ -416,6 +417,42 @@ 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) { + } + return photo; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/Place.java b/Flickr4Java/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/Flickr4Java/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; } From 83665c7d5fe15a970d1545cbf205bb5851389756 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Nov 2014 15:15:50 +0000 Subject: [PATCH 081/239] Add mention of log4j dependency --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1f0c8fb7..277d8523 100644 --- a/README.md +++ b/README.md @@ -23,11 +23,14 @@ __Please note:__ this library is not thread safe. ### 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 with JDK 1.5 and JDK 1.6. The default distribution is built with JDK 1.5 (it builds and runs fine under 1.6 and 1.7 too though). 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 + +- [scribe-java (v.1.3.2 onwards)](https://github.com/fernandezpablo85/scribe-java/wiki/Getting-Started) (required for the OAuth functionality). +- [log4j](http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log4j-1.2.17.zip) (runtime dependency for logging) ### Download From e93942540bb04f91060684d7dc790a73fce163a3 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Nov 2014 16:24:41 +0000 Subject: [PATCH 082/239] Add support for 'primary_photo_extras' in 'flickr.photosets.getList' --- .../flickr/photosets/PhotosetsInterface.java | 34 +++++++++++++++++-- .../flickr/test/PhotosetsInterfaceTest.java | 12 +++++-- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java index 0546ce65..5dc6e853 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java @@ -313,7 +313,23 @@ public Photoset getInfo(String photosetId) throws FlickrException { * @throws FlickrException */ 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 + */ + public Photosets getList(String userId, String primaryPhotoExtras) throws FlickrException { + return getList(userId, 0, 0, primaryPhotoExtras); } /** @@ -327,10 +343,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 */ - 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 +364,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 +390,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 diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java index d39bc869..13d75cdc 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java @@ -20,6 +20,7 @@ import org.junit.Before; import org.junit.Test; +import java.util.Collection; import java.util.Collections; import java.util.List; @@ -118,10 +119,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 From 14e0f6f42cd1c2b81eb358eb04db8dfb536891df Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Nov 2014 16:30:21 +0000 Subject: [PATCH 083/239] Fix failing test that relies on Flickr data --- .../com/flickr4java/flickr/test/MachinetagsInterfaceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java index a55d6ebf..ad644391 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java @@ -96,7 +96,7 @@ public void testGetRecentValues() throws FlickrException { String namespace = "ceramics"; String predicate = "material"; 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; From f13d22a6e9cbb72af53470cc4e0d234ead934d8e Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Nov 2014 16:46:18 +0000 Subject: [PATCH 084/239] Fix failing test after API change --- .../flickr/test/ReflectionInterfaceTest.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java index 8beb0393..81496bd4 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java +++ b/Flickr4Java/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()); From d2aab102455a2caf21b6e7aeccbd6ccc44d564a3 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Nov 2014 17:26:26 +0000 Subject: [PATCH 085/239] Ensure tests pass even if user doesn't have delete token --- .../flickr/test/GroupsInterfaceTest.java | 38 ++++++++---- .../flickr4java/flickr/test/UploaderTest.java | 59 +++++++++++++++---- 2 files changed, 72 insertions(+), 25 deletions(-) diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java index 2ac30513..19d00fdc 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java @@ -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); @@ -102,19 +100,33 @@ public void testSearchPage() throws FlickrException { @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/UploaderTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UploaderTest.java index b970c5b1..e268e992 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UploaderTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UploaderTest.java @@ -4,20 +4,20 @@ 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; +import org.junit.Test; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; + /** * @author Anthony Eden */ @@ -49,7 +49,15 @@ public void testUploadByteArray() throws IOException, FlickrException { metaData.setTitle("óöä"); String photoId = uploader.upload(out.toByteArray(), metaData); assertNotNull(photoId); - pint.delete(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; + } + } } finally { IOUtilities.close(in); IOUtilities.close(out); @@ -77,7 +85,16 @@ public void testUploadInputStream() throws IOException, FlickrException { metaData.setTitle("óöä"); String photoId = uploader.upload(in, metaData); assertNotNull(photoId); - pint.delete(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; + } + } + } finally { IOUtilities.close(in); } @@ -119,7 +136,16 @@ public void testReplaceInputStream() throws IOException, FlickrException { throw e; } } - pint.delete(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; + } + } + } finally { IOUtilities.close(replaceIS); } @@ -161,7 +187,16 @@ public void testReplaceByteArray() throws IOException, FlickrException { } } - pint.delete(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; + } + } + } finally { IOUtilities.close(in); } From 4c3b8ca14de5ff326532833d429e622a46f8ee33 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Nov 2014 17:37:09 +0000 Subject: [PATCH 086/239] Update example in README to match code changes --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 277d8523..6479c9b9 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,10 @@ 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); + Collection results = testInterface.echo(Collections.EMPTY_MAP); __Please note:__ this library is not thread safe. From bc2fcf7a813b21dad2be02071edc6f3f8f352cb6 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Nov 2014 18:06:37 +0000 Subject: [PATCH 087/239] Always set API key for unsigned requests --- .../main/java/com/flickr4java/flickr/test/TestInterface.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/test/TestInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/test/TestInterface.java index ddde5d40..7dc67ae6 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/test/TestInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/test/TestInterface.java @@ -3,6 +3,7 @@ */ 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; @@ -10,7 +11,6 @@ import org.w3c.dom.Element; import org.w3c.dom.Text; -import org.xml.sax.SAXException; import java.util.Collection; import java.util.HashMap; @@ -52,6 +52,7 @@ public TestInterface(String apiKey, String sharedSecret, Transport transportAPI) 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,7 +66,6 @@ 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 */ public User login() throws FlickrException { From 7f74bbc536b3530dda008eb80ed1a4056b9d44d1 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Nov 2014 18:19:00 +0000 Subject: [PATCH 088/239] Update due to API changes --- .../src/examples/java/UploadPhoto.java | 1226 ++++++++--------- 1 file changed, 603 insertions(+), 623 deletions(-) diff --git a/Flickr4Java/src/examples/java/UploadPhoto.java b/Flickr4Java/src/examples/java/UploadPhoto.java index 2a2d1f57..31377618 100644 --- a/Flickr4Java/src/examples/java/UploadPhoto.java +++ b/Flickr4Java/src/examples/java/UploadPhoto.java @@ -6,28 +6,27 @@ 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.photos.Size; import com.flickr4java.flickr.photosets.Photoset; +import com.flickr4java.flickr.photosets.Photosets; import com.flickr4java.flickr.photosets.PhotosetsInterface; +// import com.flickr4java.flickr.util.IOUtilities; +import com.flickr4java.flickr.prefs.PrefsInterface; +// import com.flickr4java.flickr.photos.PhotosInterface; +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.flickr4java.flickr.people.PeopleInterface; -import com.flickr4java.flickr.people.User; +import org.apache.log4j.Logger; 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; @@ -35,14 +34,15 @@ // import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.text.SimpleDateFormat; // 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.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Properties; // import java.util.Map; import java.util.Scanner; @@ -51,27 +51,18 @@ // 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 java.util.Set; // 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. + * 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). + * 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 */ @@ -80,27 +71,33 @@ public class UploadPhoto { private static final Logger logger = Logger.getLogger(UploadPhoto.class); - private String nsid; - private String username; + 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; + + public boolean flickrDebug = false; + + private boolean setOrigFilenameTag = true; + private boolean replaceSpaces = false; - private int privacy = -1; + 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; @@ -108,79 +105,79 @@ public UploadPhoto(String apiKey, String nsid, String sharedSecret, File authsDi 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(); + 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(); - } - } - } - } + 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. + * 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 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(); @@ -201,31 +198,32 @@ private void authorize() throws IOException, SAXException, FlickrException { 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("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 - */ + + /** + * 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") ); + 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. + // from saved file. user.setId(nsid); user.setUsername((username)); user.setRealName(""); @@ -237,32 +235,31 @@ private Auth constructAuth(String authToken, String tokenSecret, String username 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); - } - } + + 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(); + PrefsInterface prefi = flickr.getPrefsInterface(); + privacy = prefi.getPrivacy(); - return(privacy); + return (privacy); } - private String makeSafeFilename(String input) { + private String makeSafeFilename(String input) { byte[] fname = input.getBytes(); byte[] bad = new byte[] { '\\', '/', '"', '*' }; byte replace = '_'; @@ -272,16 +269,16 @@ private String makeSafeFilename(String input) { fname[i] = replace; } } - if(replaceSpaces && fname[i] == ' ') - fname[i] = '_'; + if (replaceSpaces && fname[i] == ' ') + fname[i] = '_'; } return new String(fname); } public String uploadfile(String filename, String inpTitle) throws Exception { - String photoId; + String photoId; - RequestContext rc = RequestContext.getRequestContext(); + RequestContext rc = RequestContext.getRequestContext(); if (this.authStore != null) { Auth auth = this.authStore.retrieve(this.nsid); @@ -292,104 +289,90 @@ public String uploadfile(String filename, String inpTitle) throws Exception { } } - //PhotosetsInterface pi = flickr.getPhotosetsInterface(); + // 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" ); - } - } + /** + * 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; + // ByteArrayOutputStream out = null; try { // in = new FileInputStream(imageFile); // out = new ByteArrayOutputStream(); - + // int b = -1; - /** - while ((b = in.read()) != -1) { - out.write((byte) b); - } - **/ + /** + * 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); - } - **/ + /** + * 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 @@ -399,93 +382,97 @@ else if(suffix.equalsIgnoreCase("mov")) { logger.debug(" File : " + filename + " uploaded: photoId = " + photoId); } finally { - + } - return(photoId); + 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)); - } - } - } + 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(); + e.printStackTrace(); } } private String setid = null; + private String basefilename = null; - private PhotoList photos = new PhotoList(); - private HashMap filePhotos = new HashMap(); - private static void Usage() { + 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); - } + 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; + } /** - * @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 { - + * @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]; @@ -493,379 +480,372 @@ public static void main(String[] args) throws Exception { 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"); + 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(); + e.printStackTrace(); + } finally { + if (in != null) + in.close(); } if (args.length < 5) { - Usage(); - System.exit(1); - } - - ArrayList uploadfileArgs = new ArrayList(); - ArrayList optionArgs = new ArrayList(); + 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.debugRequest = true; // keep it false else entire file will be in stdout. - // Flickr.debugStream = true; + // Flickr.debugStream = true; - String authsDirStr = System.getProperty("user.home") + File.separatorChar + ".flickrAuth"; + 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. - + 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++) { 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); } - **/ - - 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); - } - } + + UploadPhoto bf = new UploadPhoto(apiKey, nsid, sharedSecret, new File(authsDirStr), username); + for (i = 0; i < optionArgs.size(); i++) { + bf.addOption(optionArgs.get(i)); } - - if(apiKey == null || sharedSecret == null || - (username == null && nsid == null) || (setName == null ) || - (uploadfileArgs.size() == 0) ) { - Usage(); - System.exit(1); + 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); } - - UploadPhoto bf = new UploadPhoto(apiKey, nsid, sharedSecret, new File(authsDirStr), username); - for(i = 0; i < optionArgs.size(); i++) { - bf.addOption( optionArgs.get(i)); + + // 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); + } } - 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"}; - + + 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. + // 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; + 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; + 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) ); - } + 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) { + private void addOption(String opt) { - switch(opt) { - case "replaceSpaces": replaceSpaces = true; - break; + 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"); - } - } + 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; - } + 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); - } + /** + * 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); + } + } +} From fc69fc2ffb289700af89bde5ac0580c51c90fb3f Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Nov 2014 18:19:25 +0000 Subject: [PATCH 089/239] Ensure 'tokensecret' is set in example --- Flickr4Java/src/examples/java/ActivityExample.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Flickr4Java/src/examples/java/ActivityExample.java b/Flickr4Java/src/examples/java/ActivityExample.java index 9350cf8a..1bb9beef 100644 --- a/Flickr4Java/src/examples/java/ActivityExample.java +++ b/Flickr4Java/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; From c4d303f8d529f374136eaa8161ba4650d27da6a6 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Nov 2014 18:22:08 +0000 Subject: [PATCH 090/239] Update version numbers in anticipation of a release --- Flickr4Java/build.gradle | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index 36ca6006..4e1413d6 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.11' +version = '2.12' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/README.md b/README.md index 6479c9b9..74e930b1 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr4java - 2.11 + 2.12 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). From ef028ac3bda5f912cfaab9db547665308b0afc2f Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Nov 2014 18:52:37 +0000 Subject: [PATCH 091/239] [maven-release-plugin] prepare release flickr4java-2.12 --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index fda52765..4e103c32 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.12-SNAPSHOT + 2.12 jar flickr4java Java API For Flickr. Fork of FlickrJ. From 58360274ff5c8efee899a59a64c3f73ac6ece6b1 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Nov 2014 18:52:41 +0000 Subject: [PATCH 092/239] [maven-release-plugin] prepare for next development iteration --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 4e103c32..83d7eed4 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.12 + 2.13-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From c2ec9c67af068f72972c4f50d6d0a2ae376509da Mon Sep 17 00:00:00 2001 From: hytgbn Date: Mon, 8 Dec 2014 00:19:00 -0800 Subject: [PATCH 093/239] Fix getAccessToken to throw exception after attempting maxGetTokenRetires times. --- .../main/java/com/flickr4java/flickr/auth/AuthInterface.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java index be232c4d..2c7f2fc4 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java @@ -128,7 +128,7 @@ public Token getAccessToken(Token oAuthRequestToken, Verifier verifier) { accessToken = service.getAccessToken(oAuthRequestToken, verifier); success = true; } catch (OAuthException e) { - if (i == maxGetTokenRetries) { + if (i == maxGetTokenRetries - 1) { logger.error(String.format("OAuthService.getAccessToken failing after %d tries, re-throwing exception", i), e); throw e; } else { From 238753b84c98507db7fb46d611a049a03ff32fa9 Mon Sep 17 00:00:00 2001 From: nobbes Date: Wed, 31 Dec 2014 13:10:49 +0100 Subject: [PATCH 094/239] FlickrCrawler added Example FlickrCrawler was added. --- Flickr4Java/src/examples/java/FlickrCrawler | 110 ++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 Flickr4Java/src/examples/java/FlickrCrawler diff --git a/Flickr4Java/src/examples/java/FlickrCrawler b/Flickr4Java/src/examples/java/FlickrCrawler new file mode 100644 index 00000000..88843735 --- /dev/null +++ b/Flickr4Java/src/examples/java/FlickrCrawler @@ -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()); + } + 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() + " skiped!"); + 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) { + // set you own key and secret + String apikey = "apikey"; + String secret = "secret"; + + Flickr flickr = new Flickr(apikey, secret, new REST()); + + // Set the wanted search parameters (I'm not using real variables in the example) + SearchParameters searchParameters = new SearchParameters(); + searchParameters.setAccuracy(1); + if (args.length == 0) { + System.out.println("Parameter are needed as for searching. Example: FlickrCrawler.java sunset"); + return; + } + String s[] = args; + + StringBuilder tagsBuilder = new StringBuilder(); + for (String tmp : s) { + tagsBuilder.append(" " + tmp); + } + path = "pics" + File.separator + tagsBuilder.toString().substring(1); + + new File(path).mkdirs(); + searchParameters.setTags(s); + + + 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(); + } + } + } +} From 7332cdee311e9fee3725650759a78cb64a83168e Mon Sep 17 00:00:00 2001 From: nobbes Date: Wed, 31 Dec 2014 14:16:26 +0100 Subject: [PATCH 095/239] too long filenames fixed --- Flickr4Java/src/examples/java/FlickrCrawler | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Flickr4Java/src/examples/java/FlickrCrawler b/Flickr4Java/src/examples/java/FlickrCrawler index 88843735..513b80ab 100644 --- a/Flickr4Java/src/examples/java/FlickrCrawler +++ b/Flickr4Java/src/examples/java/FlickrCrawler @@ -32,6 +32,10 @@ public class FlickrCrawler { 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; } From 41b2b58d2b33376cf6680ba36fff2e6dbba17ad8 Mon Sep 17 00:00:00 2001 From: nobbes Date: Wed, 31 Dec 2014 15:25:56 +0100 Subject: [PATCH 096/239] Some little changes --- Flickr4Java/src/examples/java/FlickrCrawler | 38 ++++++++++----------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/Flickr4Java/src/examples/java/FlickrCrawler b/Flickr4Java/src/examples/java/FlickrCrawler index 513b80ab..88f45de1 100644 --- a/Flickr4Java/src/examples/java/FlickrCrawler +++ b/Flickr4Java/src/examples/java/FlickrCrawler @@ -1,3 +1,5 @@ +package com.company; + import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.REST; @@ -13,12 +15,11 @@ 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\... + * - 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 { @@ -40,13 +41,14 @@ public class FlickrCrawler { } 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() + " skiped!"); + System.out.println(p.getTitle() + "\t" + p.getLargeUrl() + " skipped!"); return false; } @@ -69,39 +71,35 @@ public class FlickrCrawler { } public static void main(String[] args) { - // set you own key and secret + 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()); - - // Set the wanted search parameters (I'm not using real variables in the example) SearchParameters searchParameters = new SearchParameters(); searchParameters.setAccuracy(1); - if (args.length == 0) { - System.out.println("Parameter are needed as for searching. Example: FlickrCrawler.java sunset"); - return; - } - String s[] = args; StringBuilder tagsBuilder = new StringBuilder(); - for (String tmp : s) { + for (String tmp : args) { tagsBuilder.append(" " + tmp); } path = "pics" + File.separator + tagsBuilder.toString().substring(1); new File(path).mkdirs(); - searchParameters.setTags(s); - + 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; - + if (list.isEmpty()) + break; + Iterator itr = list.iterator(); while (itr.hasNext()) { saveImage(flickr, (Photo) itr.next()); From 0408059615bfa8da071c2e54268e3004ce62d6a4 Mon Sep 17 00:00:00 2001 From: Jonathon Hare Date: Sun, 18 Jan 2015 11:33:58 +0000 Subject: [PATCH 097/239] add support for is_getty, is_commons and in_gallery --- .../flickr/photos/SearchParameters.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java index 94955fd8..fa5b5402 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java @@ -70,6 +70,12 @@ public class SearchParameters { 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 @@ -563,6 +569,21 @@ public Map getAsParameters() { 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 (extras != null && !extras.isEmpty()) { parameters.put("extras", StringUtilities.join(extras, ",")); } @@ -639,4 +660,27 @@ 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; + } } From 32d47d10889201249d252bf85140237ffcb0e90a Mon Sep 17 00:00:00 2001 From: robfrank Date: Mon, 18 May 2015 15:31:48 +0200 Subject: [PATCH 098/239] #120 removed log4j.properties --- .../src/main/resources/log4j.properties | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 Flickr4Java/src/main/resources/log4j.properties 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 From 835e4034a558a105016d293e6ab634f6c619b9bf Mon Sep 17 00:00:00 2001 From: Linus Date: Fri, 3 Jul 2015 22:22:05 -0700 Subject: [PATCH 099/239] Update Size.java --- .../src/main/java/com/flickr4java/flickr/photos/Size.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java index 13e0646c..52366abb 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java @@ -260,7 +260,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 +277,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)); } } From 19761c76c668afb4c8b07e51be69ed8c4c3d43a3 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 2 Aug 2015 17:41:22 +0100 Subject: [PATCH 100/239] Make some of the tests less fragile --- .../flickr/test/BlogsInterfaceTest.java | 2 - .../flickr/test/PlacesInterfaceTest.java | 49 +++++++------------ 2 files changed, 17 insertions(+), 34 deletions(-) diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java index 8536b1c9..8d800f43 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java @@ -2,7 +2,6 @@ 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 diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java index 54a7ae79..946bea6c 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java @@ -34,49 +34,33 @@ public void testFindByLonLat() throws FlickrException { 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(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 { + 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 { + public void testFindEurope() 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(Place.TYPE_NEIGHBOURHOOD, place.getPlaceType()); } + @SuppressWarnings("deprecation") @Test public void testResolvePlaceId() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); @@ -84,6 +68,7 @@ public void testResolvePlaceId() throws FlickrException { placeAssertions(location); } + @SuppressWarnings("deprecation") @Test public void testResolvePlaceUrl() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); @@ -166,10 +151,10 @@ 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 @@ -254,15 +239,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()); From f1911cd099e23dd9d6cb6274d82d0793c8f3e1f7 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 2 Aug 2015 18:10:20 +0100 Subject: [PATCH 101/239] Fix line endings --- .../java/com/flickr4java/flickr/REST.java | 931 +++++++++--------- 1 file changed, 465 insertions(+), 466 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java index 4483f6df..7198fe7e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java @@ -1,466 +1,465 @@ -/* - * 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().trim(); - 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().trim(); - 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; - } -} +/* + * 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().trim(); + 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().trim(); + 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; + } +} From 23c22915ce345049c188f67572bdd8c764e9e216 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 2 Aug 2015 18:10:42 +0100 Subject: [PATCH 102/239] Set HTTPS proxy settings --- Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java index 7198fe7e..72a1aa11 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java @@ -114,6 +114,8 @@ 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); } /** From 46f4efbf9000794f424c0718ebe3e15b83052f33 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 2 Aug 2015 18:21:23 +0100 Subject: [PATCH 103/239] #122 Add support for 'privacy_filter' when searching --- .../flickr/photos/SearchParameters.java | 38 +++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java index fa5b5402..89d647f8 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java @@ -55,6 +55,8 @@ public class SearchParameters { private int accuracy = 0; + private int privacyFilter = 0; + private String safeSearch; private String[] machineTags; @@ -70,11 +72,11 @@ public class SearchParameters { 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() { @@ -139,6 +141,30 @@ 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 & family + *
  • 5 completely private photos + *
+ */ + public void setPrivacyFilter(int privacyFilter) { + this.privacyFilter = privacyFilter; + } + public String getGroupId() { return groupId; } @@ -366,6 +392,7 @@ public void setSort(int order) { * @return A placeId * @see com.flickr4java.flickr.places.PlacesInterface#resolvePlaceId(String) */ + @SuppressWarnings("javadoc") public String getPlaceId() { return placeId; } @@ -385,6 +412,7 @@ public String getPlaceId() { * @see com.flickr4java.flickr.places.Place#getPlaceId() * @see com.flickr4java.flickr.places.Location#getPlaceId() */ + @SuppressWarnings("javadoc") public void setPlaceId(String placeId) { this.placeId = placeId; } @@ -584,6 +612,10 @@ public Map getAsParameters() { 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, ",")); } From 62839b40f8764a715be2aa2deec8738a5170586c Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 2 Aug 2015 18:53:53 +0100 Subject: [PATCH 104/239] Fix for parsing size info when fetching photos. Fix #99 --- .../flickr4java/flickr/photos/PhotoUtils.java | 86 +++++++++++-------- 1 file changed, 52 insertions(+), 34 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java index 698338b8..62dd35c6 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java @@ -1,16 +1,16 @@ 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.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.places.Place; -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. @@ -74,18 +74,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, @@ -97,6 +97,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"); @@ -104,6 +106,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"); @@ -111,6 +115,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"); @@ -118,6 +124,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"); @@ -125,6 +133,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"); @@ -132,6 +142,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"); @@ -139,6 +151,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"); @@ -146,6 +160,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"); @@ -153,6 +169,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"); @@ -160,6 +178,8 @@ 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); } if (sizes.size() > 0) { @@ -169,12 +189,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"); @@ -257,7 +277,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(); @@ -268,7 +287,6 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme } catch (NullPointerException e) { // nop } - try { Element editabilityElement = (Element) photoElement.getElementsByTagName("editability").item(0); @@ -280,7 +298,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(); @@ -291,11 +309,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"))); @@ -384,9 +402,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) { @@ -423,8 +441,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme 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) { + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { } try { @@ -432,8 +450,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme 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) { + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { } try { @@ -441,8 +459,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme 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) { + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { } try { @@ -450,8 +468,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme 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) { + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { } return photo; From 7534591e3a48f568c3a250649d74f2b0872d133d Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 2 Aug 2015 18:57:16 +0100 Subject: [PATCH 105/239] Fix incorrect label for 'Large Square' photos. Fix #116 --- .../main/java/com/flickr4java/flickr/photos/Size.java | 9 +++++---- .../com/flickr4java/flickr/test/PhotosInterfaceTest.java | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java index 52366abb..77660e01 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java @@ -165,6 +165,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,7 +175,7 @@ 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; @@ -213,7 +214,7 @@ public int getLabel() { return label; } - private final List lstSizes = Arrays.asList("Thumbnail", "Square", "Small", "Medium", "Large", "Original", "Square Large", "Small 320", + 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"); /** @@ -260,7 +261,7 @@ public void setWidth(int width) { public void setWidth(String width) { - if (!(width == null || "".equals(width))) { // checking both null and empty + if (!(width == null || "".equals(width))) { // checking both null and empty setWidth(Integer.parseInt(width)); } } @@ -277,7 +278,7 @@ public void setHeight(int height) { public void setHeight(String height) { - if (!(height == null || "".equals(height))) { // checking both null and empty + if (!(height == null || "".equals(height))) { // checking both null and empty setHeight(Integer.parseInt(height)); } } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java index 1e5c32e1..9b28da3d 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java @@ -434,7 +434,7 @@ public void testSetSizes() { size.setUrl("urlLargePage"); sizes.add(size); size = new Size(); - size.setLabel("Square Large"); + size.setLabel("Large Square"); size.setWidth("150"); size.setHeight("150"); size.setSource("urlSquareLarge"); From 7cf3a6a579482e0a002b0660caa29b1433d48ada Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 2 Aug 2015 19:09:41 +0100 Subject: [PATCH 106/239] Read 'description' from 'flickr.people.getInfo' response. Fix #139 --- .../flickr/people/PeopleInterface.java | 77 ++++++----- .../com/flickr4java/flickr/people/User.java | 126 ++++++++++-------- 2 files changed, 111 insertions(+), 92 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java index 52e3c036..c6e0e1e8 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java @@ -3,7 +3,6 @@ */ 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; @@ -30,7 +29,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,7 +54,7 @@ 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; @@ -72,9 +71,9 @@ 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 @@ -99,9 +98,9 @@ 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 @@ -110,7 +109,7 @@ public User findByEmail(String email) throws FlickrException { 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,9 +125,9 @@ 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 @@ -137,10 +136,10 @@ public User findByUsername(String username) throws FlickrException { 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 +156,7 @@ 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.setRealName(XMLUtilities.getChildValue(userElement, "realname")); user.setLocation(XMLUtilities.getChildValue(userElement, "location")); user.setMbox_sha1sum(XMLUtilities.getChildValue(userElement, "mbox_sha1sum")); @@ -168,7 +168,7 @@ 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); @@ -183,12 +183,12 @@ 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 @@ -202,7 +202,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 +226,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 @@ -260,7 +260,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,9 +280,9 @@ 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 */ @@ -290,7 +290,7 @@ 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 +307,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 +360,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 +399,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,7 +432,7 @@ 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 @@ -448,7 +447,7 @@ public void add(String photoId, String userId, Rectangle bounds) throws FlickrEx /** * Delete the person from the photo - * + * * @param photoId * @param userId * @throws FlickrException @@ -462,7 +461,7 @@ 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 @@ -476,7 +475,7 @@ public void deleteCoords(String photoId, String userId) throws FlickrException { /** * Edit the co-ordinates that the user shows in - * + * * @param photoId * @param userId * @param bounds @@ -491,7 +490,7 @@ public void editCoords(String photoId, String userId, Rectangle bounds) throws F /** * Get a list of people in a given photo. - * + * * @param photoId * @throws FlickrException */ @@ -503,7 +502,7 @@ public PersonTagList getList(String photoId) throws FlickrException { } /** - * + * * @param userId * @throws FlickrException */ @@ -514,7 +513,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()); } @@ -537,18 +536,18 @@ public GroupList getGroups(String userId) throws FlickrException { 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/User.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java index 52cb85f3..f7bc72c0 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java @@ -31,6 +31,8 @@ protected synchronized SimpleDateFormat initialValue() { private String username; + private String description; + private boolean admin; private boolean pro; @@ -44,7 +46,7 @@ protected synchronized SimpleDateFormat initialValue() { private String location; private TimeZone timeZone; - + private Date photosFirstDate; private Date photosFirstDateTaken; @@ -60,17 +62,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 +92,10 @@ protected synchronized SimpleDateFormat initialValue() { private boolean revFamily; private String pathAlias; - + private PhotoLimits photoLimits; - + private VideoLimits videoLimits; - public User() { } @@ -115,6 +116,20 @@ 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 boolean isAdmin() { return admin; } @@ -131,28 +146,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 +188,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 +205,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 +227,6 @@ public String getSecureBuddyIconUrl() { return UrlUtilities.createSecureBuddyIconUrl(iconFarm, iconServer, id); } - public void setLocation(String location) { this.location = location; } @@ -461,6 +480,7 @@ public String getPathAlias() { public void setPathAlias(String pathAlias) { this.pathAlias = pathAlias; } + /** * @return PhotoLimits class instance */ @@ -471,6 +491,7 @@ public PhotoLimits getPhotoLimits() { public void setPhotoLimits(PhotoLimits photoLimits) { this.photoLimits = photoLimits; } + /** * @return VideoLimits class instance */ @@ -481,54 +502,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; + } - } From 4c009889ef6d9242df2d5507c23ab2ef7aead2c0 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 2 Aug 2015 19:30:31 +0100 Subject: [PATCH 107/239] Read fields 'ignored contact friend family' from 'flickr.people.getInfo' response. Fix #142 --- .../flickr/people/PeopleInterface.java | 5 ++ .../com/flickr4java/flickr/people/User.java | 53 ++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java index c6e0e1e8..ae7205ca 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java @@ -157,6 +157,11 @@ public User getInfo(String userId) throws FlickrException { 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")); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java index f7bc72c0..762e4cf4 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java @@ -33,6 +33,16 @@ protected synchronized SimpleDateFormat initialValue() { private String description; + private String gender; + + private boolean ignored; + + private boolean contact; + + private boolean friend; + + private boolean family; + private boolean admin; private boolean pro; @@ -124,12 +134,53 @@ public String getDescription() { } /** - * @param description the description to set + * @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; } From cc269ff7c48fe8a85ccb0f6a25a45425872127d1 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 2 Aug 2015 19:37:21 +0100 Subject: [PATCH 108/239] Better handle missing elements of Place data. Fix #144 --- .../flickr/places/PlacesInterface.java | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java index 9a9ae812..719ecfec 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java @@ -898,14 +898,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 +907,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; } From 82bd4510a2852616b40b886ad74f9803e2f0d381 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 2 Aug 2015 19:47:41 +0100 Subject: [PATCH 109/239] Use 'HttpsURLConnection' when fetching the image stream. Fix #146 --- .../flickr/photos/PhotosInterface.java | 92 +++++++++---------- 1 file changed, 45 insertions(+), 47 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java index 7155ac81..008ae835 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java @@ -18,11 +18,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; @@ -188,10 +188,10 @@ public void delete(String photoId) throws FlickrException { * @throws FlickrException */ 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 +203,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; } @@ -732,7 +732,7 @@ public Collection getSizes(String photoId) throws FlickrException { * @throws FlickrException */ public Collection getSizes(String photoId, boolean sign) throws FlickrException { - SizeList sizes = new SizeList(); + SizeList sizes = new SizeList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_SIZES); @@ -1369,22 +1369,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()); @@ -1429,7 +1427,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()); From fb6ca584b39e8f61d2f0389aa35b3a0e194d70d7 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 2 Aug 2015 19:53:09 +0100 Subject: [PATCH 110/239] Update version numbers in anticipation of a release --- Flickr4Java/build.gradle | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index 4e1413d6..34496821 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.12' +version = '2.13' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/README.md b/README.md index 74e930b1..720cd437 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr4java - 2.12 + 2.13 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). From a5a65a3d28543679c4eeef7ea05361b2a8df38bd Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 2 Aug 2015 20:06:08 +0100 Subject: [PATCH 111/239] Fix stupid default javadoc lint on Java 8. See http://stackoverflow.com/questions/15886209/maven-is-not-working-in-java-8-when-javadoc-tags-are-incomplete --- Flickr4Java/pom.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 83d7eed4..9c40b5ed 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -116,6 +116,17 @@ org.apache.maven.plugins maven-javadoc-plugin 2.9.1 + + + attach-javadocs + + jar + + + -Xdoclint:none + + + From 6694031cccad280a3ce33a054a2e65327d1898aa Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 2 Aug 2015 20:08:43 +0100 Subject: [PATCH 112/239] [maven-release-plugin] prepare release flickr4java-2.13 --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 9c40b5ed..1930ec6c 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.13-SNAPSHOT + 2.13 jar flickr4java Java API For Flickr. Fork of FlickrJ. From 7936df2e02891d299e3e9e262277f5049b043841 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 2 Aug 2015 20:08:46 +0100 Subject: [PATCH 113/239] [maven-release-plugin] prepare for next development iteration --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 1930ec6c..7e4c18c9 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.13 + 2.14-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 8f49e404038600217ef81ee3d9526d454ec9c9dc Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Aug 2015 18:15:47 +0100 Subject: [PATCH 114/239] Mention 'develop' branch in README --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 720cd437..8e86dfac 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,10 @@ For example, to send a test ping to the Flickr service: __Please note:__ this library is not thread safe. +### Development and contributing + +Please fork from the `develop` branch as that will make merging in easier. + ### Requirements This API has been tested with JDK 1.5 and JDK 1.6. The default distribution is built with JDK 1.5 (it builds and runs fine under 1.6 and 1.7 too though). From e4e3b671c609fa455ade640bb848f6d110b3e57f Mon Sep 17 00:00:00 2001 From: boncey Date: Thu, 31 Dec 2015 15:59:10 +0000 Subject: [PATCH 115/239] Make some of the tests less fragile --- .../flickr/test/MembersInterfaceTest.java | 14 +++++++------- .../flickr/test/PhotosInterfaceTest.java | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java index d61a9b77..480b4bb1 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java @@ -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/PhotosInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java index 9b28da3d..2cf52724 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java @@ -336,7 +336,7 @@ public void testGetThumbnailImage() throws FlickrException, IOException { Photo photo = iface.getInfo(photoId, null); BufferedImage image = iface.getImage(photo, Size.THUMB); assertNotNull(image); - assertTrue(67 == image.getWidth() || 68 == image.getWidth()); + assertTrue(66 == image.getWidth() || 67 == image.getWidth() || 68 == image.getWidth()); assertEquals(100, image.getHeight()); ImageIO.write(image, "jpg", thumbnailFile); } From 4aa21d2f413e5169d5f99c5fcd818bb567af9b73 Mon Sep 17 00:00:00 2001 From: boncey Date: Thu, 31 Dec 2015 16:00:02 +0000 Subject: [PATCH 116/239] Get timezone_id from people.getInfo response. Fix #152 --- .../flickr/people/PeopleInterface.java | 1 + .../flickr4java/flickr/people/TimeZone.java | 29 +++++++++++++++++-- .../flickr/test/PeopleInterfaceTest.java | 4 +++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java index ae7205ca..9d37eadd 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java @@ -180,6 +180,7 @@ public User getInfo(String userId) throws FlickrException { TimeZone tz = new TimeZone(); user.setTimeZone(tz); tz.setLabel(tzElement.getAttribute("label")); + tz.setTimeZoneId(tzElement.getAttribute("timezone_id")); tz.setOffset(tzElement.getAttribute("offset")); } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/TimeZone.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/TimeZone.java index 5bda5b48..8ec092a4 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/TimeZone.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/TimeZone.java @@ -2,14 +2,16 @@ public class TimeZone { - private String label; + private String label; private String offset; + private String timeZoneId; + /** * Time Zone text * - * @return timezone + * @return the label */ public String getLabel() { return label; @@ -24,6 +26,14 @@ public void setLabel(String label) { * * @return timezone offset value */ + public String getOffset() { + return offset; + } + + /** + * @deprecated typo in method name, use {@link #getOffset()}. + */ + @Deprecated public String geOffset() { return offset; } @@ -31,5 +41,18 @@ public String geOffset() { 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/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java index 8e41d704..c0ded6ba 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java @@ -60,6 +60,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 From 6985a766f58286df20d1aabb42a53304916b22cc Mon Sep 17 00:00:00 2001 From: boncey Date: Thu, 31 Dec 2015 16:17:21 +0000 Subject: [PATCH 117/239] Update version numbers in anticipation of a release --- Flickr4Java/build.gradle | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index 34496821..a492c6c8 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.13' +version = '2.14' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/README.md b/README.md index 8e86dfac..70cfe891 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr4java - 2.13 + 2.14 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). From eb0d016baa7e736701f450b3b658f603e963bd8d Mon Sep 17 00:00:00 2001 From: boncey Date: Thu, 31 Dec 2015 16:26:24 +0000 Subject: [PATCH 118/239] [maven-release-plugin] prepare release flickr4java-2.14 --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 7e4c18c9..8d75cbd2 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.14-SNAPSHOT + 2.14 jar flickr4java Java API For Flickr. Fork of FlickrJ. From a73565dfd6ef3cb8d6271ed1755cbb743d8679de Mon Sep 17 00:00:00 2001 From: boncey Date: Thu, 31 Dec 2015 16:26:30 +0000 Subject: [PATCH 119/239] [maven-release-plugin] prepare for next development iteration --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 8d75cbd2..7e420bbd 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.14 + 2.15-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 5b868b235afa4ffbba9075d35dc4c1908404fe09 Mon Sep 17 00:00:00 2001 From: haswell Date: Fri, 8 Jan 2016 17:37:53 +0200 Subject: [PATCH 120/239] added 'getSizes' feature on photo object #155 --- .../com/flickr4java/flickr/photos/Photo.java | 10 + .../flickr/test/PhotosInterfaceTest.java | 252 ++++++++++-------- 2 files changed, 154 insertions(+), 108 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java index e93f5cbe..eb96424e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java @@ -21,6 +21,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; @@ -1083,6 +1084,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; } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java index 2cf52724..e6bd3619 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java @@ -51,6 +51,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 +69,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 { @@ -390,113 +521,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("Large Square"); - 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"); @@ -520,7 +544,7 @@ public void testSetSizes() { } 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 +564,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); + } + } } From 984e62cb1ce9a6f7c7add04912fe5902f7df3004 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 10 Jan 2016 17:18:24 +0000 Subject: [PATCH 121/239] Update version numbers in anticipation of a release --- Flickr4Java/build.gradle | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index a492c6c8..79830a7f 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.14' +version = '2.15' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/README.md b/README.md index 70cfe891..781e25b6 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr4java - 2.14 + 2.15 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). From 11e9068d5ee60c072445d9b11a452424b4fa320e Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 10 Jan 2016 17:22:50 +0000 Subject: [PATCH 122/239] [maven-release-plugin] prepare release flickr4java-2.15 --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 7e420bbd..705249d5 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.15-SNAPSHOT + 2.15 jar flickr4java Java API For Flickr. Fork of FlickrJ. From 70e982b44e73c1298a6c91723fbf67c62f3fe409 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 10 Jan 2016 17:22:56 +0000 Subject: [PATCH 123/239] [maven-release-plugin] prepare for next development iteration --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 705249d5..1b9ad407 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.15 + 2.16-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 5af91b211faf50aff4a77d73280f5a77a87f3df6 Mon Sep 17 00:00:00 2001 From: jjhesk Date: Wed, 3 Feb 2016 21:21:52 +0800 Subject: [PATCH 124/239] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 781e25b6..a96e4a5b 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,10 @@ For example, to send a test ping to the Flickr service: __Please note:__ this library is not thread safe. +###Setup for gradle +```gradle + compile 'com.aetrion.flickr:flickrapi:1.1' + ``` ### Development and contributing From 39f93cb79c54178a8abf0930ce3492777928d00c Mon Sep 17 00:00:00 2001 From: artikulant Date: Tue, 9 Feb 2016 20:04:39 +0100 Subject: [PATCH 125/239] added getter SearchParameters#getExtras() --- .../java/com/flickr4java/flickr/photos/SearchParameters.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java index 89d647f8..b425f257 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java @@ -314,6 +314,10 @@ public String getMachineTagMode() { 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. From 1a3fab1befd310b0ebfbff75336f0f6eac8ef940 Mon Sep 17 00:00:00 2001 From: Franck Arnulfo Date: Tue, 23 Feb 2016 11:35:32 +0100 Subject: [PATCH 126/239] Create ISSUE_TEMPLATE.md --- ISSUE_TEMPLATE.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 ISSUE_TEMPLATE.md diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..59a92eda --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,19 @@ +### 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 a 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 From 8aedd78adc568d1a294e6b36e64b32c3bfcab94c Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 14 Mar 2016 12:19:04 +0000 Subject: [PATCH 127/239] A few tweaks to the ISSUE_TEMPLATE --- ISSUE_TEMPLATE.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 59a92eda..527794c3 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -7,7 +7,7 @@ Describe your issue here. ### Steps to reproduce Tell us how to reproduce this issue. -Please provide a working code. +Please provide working code. ### Expected behaviour Tell us what should happen @@ -16,4 +16,7 @@ Tell us what should happen Tell us what happens instead ### Log +``` Please copy paste the log here if available + +``` From 8908227acce2ee848d4fbc3cf2c6ae700b1fd035 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 14 Mar 2016 12:24:51 +0000 Subject: [PATCH 128/239] Update version numbers in anticipation of a release --- Flickr4Java/build.gradle | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index 79830a7f..b8eb444c 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.15' +version = '2.16' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/README.md b/README.md index a96e4a5b..a40f2c0f 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr4java - 2.15 + 2.16 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). From 186bb4f852fb054fa0ef6efb7abfbb73e6e59dc7 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 14 Mar 2016 12:28:49 +0000 Subject: [PATCH 129/239] [maven-release-plugin] prepare release flickr4java-2.16 --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 1b9ad407..c05918d9 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.16-SNAPSHOT + 2.16 jar flickr4java Java API For Flickr. Fork of FlickrJ. From cd84f9dc72529a1b982221440d3ea115dec0b8ca Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 14 Mar 2016 12:28:55 +0000 Subject: [PATCH 130/239] [maven-release-plugin] prepare for next development iteration --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index c05918d9..d62e70ea 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.16 + 2.17-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From c109a5e8341d691f08219ae0831691343b3aca23 Mon Sep 17 00:00:00 2001 From: artikulant Date: Wed, 30 Mar 2016 10:26:29 +0200 Subject: [PATCH 131/239] PeopleInterfase#getGroups(String userId) doesn't set the fields members and poolCount of the Group objects in the returned GroupList --- .../java/com/flickr4java/flickr/people/PeopleInterface.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java index 9d37eadd..a2522cfc 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java @@ -537,6 +537,8 @@ 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; From f7721eb7c302070aacd5e48fa78229e4b46b9410 Mon Sep 17 00:00:00 2001 From: Bryan Date: Mon, 21 Nov 2016 16:34:48 +0800 Subject: [PATCH 132/239] Updated Search Parameters to take in double. Flickr API allows value of radius to be less than 1, i.e 0.1 --- .../java/com/flickr4java/flickr/photos/SearchParameters.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java index b425f257..790ae384 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java @@ -67,7 +67,7 @@ public class SearchParameters { private String longitude; - private int radius = -1; + private double radius = -1; private String radiusUnits; @@ -660,7 +660,7 @@ public void setLatitude(String lat) { latitude = lat; } - public void setRadius(int r) { + public void setRadius(double r) { radius = r; } From 5803d7f0c4c961db9a9c4c5678b33db7e3ddda63 Mon Sep 17 00:00:00 2001 From: boncey Date: Thu, 24 Nov 2016 11:43:09 +0000 Subject: [PATCH 133/239] Allow optional override of setup.properties Can now specify on command line as `mvn -DsetupPropertiesPath=.../f4j.setup.properties clean install`. If not specified falls back to old behaviour. --- Flickr4Java/pom.xml | 12 ++++++++++++ .../com/flickr4java/flickr/test/TestProperties.java | 12 ++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index d62e70ea..b566f924 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -98,6 +98,18 @@ ${javaVersion} + + org.apache.maven.plugins + maven-surefire-plugin + 2.19.1 + + ${javaVersion} + ${javaVersion} + + ${setupPropertiesPath} + + + org.apache.maven.plugins maven-source-plugin diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestProperties.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestProperties.java index 627d7d36..3be8f124 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestProperties.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestProperties.java @@ -5,6 +5,8 @@ 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; @@ -22,7 +24,6 @@ public class TestProperties { /** * Logger for log4j. */ - @SuppressWarnings("unused") private static Logger _log = Logger.getLogger(TestProperties.class); private String host; @@ -105,8 +106,15 @@ private void populate(Properties properties) { private Properties load() { Properties properties = new Properties(); InputStream in = null; + String setupPropertiesPath = System.getenv("SETUP_PROPERTIES_PATH"); + try { - in = getClass().getResourceAsStream("/setup.properties"); + if (setupPropertiesPath != null) { + _log.info("Using properties file at " + setupPropertiesPath); + in = new FileInputStream(new File(setupPropertiesPath)); + } else { + in = getClass().getResourceAsStream("/setup.properties"); + } properties.load(in); } catch (IOException e) { throw new FlickrRuntimeException("Problem loading setup.properties", e); From 148749ffbbd205d9a26ee30cfd89da88ddfeaa47 Mon Sep 17 00:00:00 2001 From: Hugo Laloge Date: Wed, 22 Feb 2017 19:38:35 +0100 Subject: [PATCH 134/239] Add missing throws in REST class --- Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java index 72a1aa11..35d115ff 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java @@ -143,7 +143,7 @@ public void setProxy(String proxyHost, int proxyPort, String username, String pa * @return The Response */ @Override - public com.flickr4java.flickr.Response get(String path, Map parameters, String apiKey, String sharedSecret) { + public com.flickr4java.flickr.Response get(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException { OAuthRequest request = new OAuthRequest(Verb.GET, getScheme() + "://" + getHost() + path); for (Map.Entry entry : parameters.entrySet()) { @@ -213,7 +213,7 @@ public com.flickr4java.flickr.Response get(String path, Map para * @return The Response */ @Override - public Response getNonOAuth(String path, Map parameters) { + public Response getNonOAuth(String path, Map parameters) throws FlickrException { InputStream in = null; try { URL url = UrlUtilities.buildUrl(getScheme(), getHost(), getPort(), path, parameters); @@ -264,7 +264,7 @@ public Response getNonOAuth(String path, Map parameters) { * @return The Response object */ @Override - public com.flickr4java.flickr.Response post(String path, Map parameters, String apiKey, String sharedSecret, boolean multipart) { + public com.flickr4java.flickr.Response post(String path, Map parameters, String apiKey, String sharedSecret, boolean multipart) throws FlickrException { OAuthRequest request = new OAuthRequest(Verb.POST, getScheme() + "://" + getHost() + path); From 4e85ac0c34395275e6b470a42d7b18a5ad5113a1 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Jul 2017 18:53:33 +0100 Subject: [PATCH 135/239] Remove SOAP dependency It was incomplete and relied on version 1.4 of Axis which had some vulnerabilities. https://nvd.nist.gov/vuln/detail/CVE-2014-3596 https://nvd.nist.gov/vuln/detail/CVE-2012-5784 --- Flickr4Java/.gitignore | 1 + Flickr4Java/pom.xml | 5 - .../com/flickr4java/flickr/SOAPResponse.java | 98 ------------------- .../com/flickr4java/flickr/Transport.java | 4 +- 4 files changed, 2 insertions(+), 106 deletions(-) delete mode 100644 Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java diff --git a/Flickr4Java/.gitignore b/Flickr4Java/.gitignore index 71df0227..0acb4470 100644 --- a/Flickr4Java/.gitignore +++ b/Flickr4Java/.gitignore @@ -1,3 +1,4 @@ +.idea target .gradle build/ diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index b566f924..b05fedbf 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -53,11 +53,6 @@ scribe 1.3.5 - - org.apache.axis - axis - 1.4 - log4j log4j 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/Transport.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java index 5e818cc9..63f3c96f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java @@ -7,7 +7,7 @@ /** * 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. + * REST, SOAP and XML-RPC. Flickr4Java currently implements the REST transport. * * @author Matt Ray * @author Anthony Eden @@ -16,8 +16,6 @@ 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"; /** From 3a63f64b026b7a8e9e1ccca7ab470ec18d6efd47 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Jul 2017 19:29:53 +0100 Subject: [PATCH 136/239] Fix failing test --- .../java/com/flickr4java/flickr/test/PlacesInterfaceTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java index 946bea6c..8394124e 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java @@ -210,8 +210,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)); From 487cfb8dcf70a48d52ac3f0968a85443ece2ad19 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Jul 2017 19:34:28 +0100 Subject: [PATCH 137/239] Update version numbers in anticipation of a release --- Flickr4Java/build.gradle | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index b8eb444c..1468f83b 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.16' +version = '2.17' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/README.md b/README.md index a40f2c0f..cc820cef 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr4java - 2.16 + 2.17 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). From 6420925918348d2318bd8c04031b05f255769f99 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Jul 2017 19:39:36 +0100 Subject: [PATCH 138/239] [maven-release-plugin] prepare release flickr4java-2.17 --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index b05fedbf..3cececa0 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.17-SNAPSHOT + 2.17 jar flickr4java Java API For Flickr. Fork of FlickrJ. From 463537e58bb9961fecfad859a75be211e8c72b56 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Jul 2017 19:39:41 +0100 Subject: [PATCH 139/239] [maven-release-plugin] prepare for next development iteration --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 3cececa0..6ab49656 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.17 + 2.18-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 9fff6ad3feacdd688a31a4937360fdfd3bdc7cd2 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 9 Jul 2017 21:43:40 +0100 Subject: [PATCH 140/239] Update GitHub URLs --- Flickr4Java/pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 6ab49656..939dc5be 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -8,7 +8,7 @@ jar flickr4java Java API For Flickr. Fork of FlickrJ. - https://github.com/callmeal/Flickr4Java + https://github.com/boncey/Flickr4Java org.sonatype.oss @@ -151,9 +151,9 @@ - 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 From aa8910e20c922c49154ca9e92f89ed7f82143442 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 8 Oct 2017 15:56:36 +0100 Subject: [PATCH 141/239] Fix change of radius to double --- .../flickr/photos/SearchParameters.java | 1448 +++++++++-------- 1 file changed, 726 insertions(+), 722 deletions(-) diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java index 790ae384..9be4ae8a 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java @@ -1,722 +1,726 @@ -/* - * 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 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 & 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 &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; - } - - 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) - */ - @SuppressWarnings("javadoc") - 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() - */ - @SuppressWarnings("javadoc") - 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"); - } - - 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 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; - } - - 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; - } -} +/* + * 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 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 & 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 &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; + } + + 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) + */ + @SuppressWarnings("javadoc") + 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() + */ + @SuppressWarnings("javadoc") + 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; + } +} From 032f8bdabcee7041b563cc2efd9f90c972ad817e Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 11 Nov 2017 12:27:24 +0000 Subject: [PATCH 142/239] Add Maven reporting plugin --- Flickr4Java/pom.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 939dc5be..8e98dca4 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -221,4 +221,13 @@ + + + + org.apache.maven.plugins + maven-surefire-report-plugin + 2.20.1 + + + From a2503337d77a236da0f78e3e7e9b6195c2e13313 Mon Sep 17 00:00:00 2001 From: boncey Date: Wed, 27 Jun 2018 18:58:00 +0100 Subject: [PATCH 143/239] Move to Java 1.8 --- Flickr4Java/pom.xml | 4 +--- README.md | 6 +----- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 8e98dca4..24d037a5 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -42,7 +42,7 @@ - 1.6 + 1.8 1.2.17 4.11 @@ -98,8 +98,6 @@ maven-surefire-plugin 2.19.1 - ${javaVersion} - ${javaVersion} ${setupPropertiesPath} diff --git a/README.md b/README.md index cc820cef..374f72fb 100644 --- a/README.md +++ b/README.md @@ -26,13 +26,9 @@ __Please note:__ this library is not thread safe. compile 'com.aetrion.flickr:flickrapi:1.1' ``` -### Development and contributing - -Please fork from the `develop` branch as that will make merging in easier. - ### Requirements -This API has been tested with JDK 1.5 and JDK 1.6. 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/). From cd5a9da3fa7385382fbb30fd8bcd58244c17bd7a Mon Sep 17 00:00:00 2001 From: boncey Date: Wed, 27 Jun 2018 18:58:40 +0100 Subject: [PATCH 144/239] Add Search example and fix for #278 --- .../src/examples/java/SearchExample.java | 94 +++++++++++++++++++ .../com/flickr4java/flickr/photos/Photo.java | 3 +- 2 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 Flickr4Java/src/examples/java/SearchExample.java diff --git a/Flickr4Java/src/examples/java/SearchExample.java b/Flickr4Java/src/examples/java/SearchExample.java new file mode 100644 index 00000000..a1808010 --- /dev/null +++ b/Flickr4Java/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/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java index eb96424e..f814d80c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java +++ b/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java @@ -832,7 +832,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(); } From 5e20f28754dc9380df2416cbd427f0d8f2bdc812 Mon Sep 17 00:00:00 2001 From: boncey Date: Wed, 27 Jun 2018 22:16:26 +0100 Subject: [PATCH 145/239] Make test more robust --- .../com/flickr4java/flickr/test/PhotosetsInterfaceTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java index 13d75cdc..fa85bce7 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java +++ b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java @@ -74,18 +74,19 @@ public void testEditMeta() { @Test public void testEditPhotos() throws FlickrException { + PhotosetsInterface iface = flickr.getPhotosetsInterface(); + 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()])); Photoset ps = iface.getInfo(testSet.getId()); assertNotNull(ps); assertEquals(testProperties.getPhotoId(), ps.getPrimaryPhoto().getId()); - assertEquals(4, ps.getPhotoCount()); + assertTrue(ps.getPhotoCount() > 2); } @Test From e10b48481259eee361e0a7e17481e07185af419e Mon Sep 17 00:00:00 2001 From: boncey Date: Wed, 27 Jun 2018 22:16:41 +0100 Subject: [PATCH 146/239] Update version numbers in anticipation of a release --- Flickr4Java/build.gradle | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index 1468f83b..4e394ca5 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.17' +version = '2.18' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/README.md b/README.md index 374f72fb..f1b01a5e 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr4java - 2.17 + 2.18 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). From 4283ee32dd3fb80e6ffa366cbfef6cb7693c767b Mon Sep 17 00:00:00 2001 From: boncey Date: Fri, 29 Jun 2018 19:32:53 +0100 Subject: [PATCH 147/239] Revert version numbers until after release completes --- Flickr4Java/build.gradle | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index 4e394ca5..1468f83b 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.18' +version = '2.17' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/README.md b/README.md index f1b01a5e..374f72fb 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr4java - 2.18 + 2.17 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). From 6911ca14c1340405fe28ac96c6f9f71848de877f Mon Sep 17 00:00:00 2001 From: boncey Date: Fri, 29 Jun 2018 20:43:21 +0100 Subject: [PATCH 148/239] Remove incorrect entry in pom --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 24d037a5..f1ee76bf 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -77,7 +77,7 @@ forked-path false - ${arguments} -Psonatype-oss-release + -Psonatype-oss-release Flickr4Java/pom.xml From 7618f265a406bf89b2658fdcd2c6d1559003394e Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 30 Jun 2018 10:30:33 +0100 Subject: [PATCH 149/239] Add back 'arguments' entry to pom --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index f1ee76bf..24d037a5 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -77,7 +77,7 @@ forked-path false - -Psonatype-oss-release + ${arguments} -Psonatype-oss-release Flickr4Java/pom.xml From 4493d283362d53d21e8315af334d6e8950077663 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 30 Jun 2018 10:48:34 +0100 Subject: [PATCH 150/239] [maven-release-plugin] prepare release flickr4java-2.18 --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 24d037a5..66016a28 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.18-SNAPSHOT + 2.18 jar flickr4java Java API For Flickr. Fork of FlickrJ. From 8e37cbc242a1239d1653c4fa831a22db2552c436 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 30 Jun 2018 10:48:41 +0100 Subject: [PATCH 151/239] [maven-release-plugin] prepare for next development iteration --- Flickr4Java/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml index 66016a28..c756e52f 100644 --- a/Flickr4Java/pom.xml +++ b/Flickr4Java/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.18 + 2.19-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From c4a405037083eed9f9234d18c03822e66c1cdf81 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 30 Jun 2018 10:53:50 +0100 Subject: [PATCH 152/239] Update version number to 2.18 --- Flickr4Java/build.gradle | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flickr4Java/build.gradle b/Flickr4Java/build.gradle index 1468f83b..4e394ca5 100644 --- a/Flickr4Java/build.gradle +++ b/Flickr4Java/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.17' +version = '2.18' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/README.md b/README.md index 374f72fb..f1b01a5e 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr4java - 2.17 + 2.18 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). From 960e75f9f835f79f2e4dd60abc5cb207aad7930c Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 30 Jun 2018 11:22:10 +0100 Subject: [PATCH 153/239] Flatten directory structure --- Flickr4Java/.gitignore => .gitignore | 0 Flickr4Java/BUILDING.md => BUILDING.md | 0 Flickr4Java/CHANGELOG.txt => CHANGELOG.txt | 0 Flickr4Java/CONTRIB.md => CONTRIB.md | 0 Flickr4Java/LICENSE-apache.txt => LICENSE-apache.txt | 0 Flickr4Java/LICENSE.txt => LICENSE.txt | 0 Flickr4Java/build.gradle => build.gradle | 0 {Flickr4Java/config => config}/Flickr4JavaFormatter.xml | 0 {Flickr4Java/doc => doc}/flickr-photo-sizes.xml | 0 {Flickr4Java/doc => doc}/flickr-video-sizes.xml | 0 {Flickr4Java/doc => doc}/photo-sizes | 0 {Flickr4Java/doc => doc}/video-sizes | 0 Flickr4Java/pom.xml => pom.xml | 0 {Flickr4Java/src => src}/examples/java/ActivityExample.java | 0 {Flickr4Java/src => src}/examples/java/AuthExample.java | 0 {Flickr4Java/src => src}/examples/java/Backup.java | 0 {Flickr4Java/src => src}/examples/java/FlickrCrawler | 0 {Flickr4Java/src => src}/examples/java/SearchExample.java | 0 {Flickr4Java/src => src}/examples/java/UploadPhoto.java | 0 .../src => src}/examples/resources/setup.properties.example | 0 .../src => src}/main/java/com/flickr4java/flickr/Flickr.java | 0 .../main/java/com/flickr4java/flickr/FlickrException.java | 0 .../main/java/com/flickr4java/flickr/FlickrRuntimeException.java | 0 .../src => src}/main/java/com/flickr4java/flickr/Parameter.java | 0 .../main/java/com/flickr4java/flickr/ProxyAuthenticator.java | 0 .../src => src}/main/java/com/flickr4java/flickr/REST.java | 0 .../main/java/com/flickr4java/flickr/RESTResponse.java | 0 .../main/java/com/flickr4java/flickr/RequestContext.java | 0 .../src => src}/main/java/com/flickr4java/flickr/Response.java | 0 .../main/java/com/flickr4java/flickr/SearchResultList.java | 0 .../src => src}/main/java/com/flickr4java/flickr/Transport.java | 0 .../java/com/flickr4java/flickr/activity/ActivityInterface.java | 0 .../main/java/com/flickr4java/flickr/activity/Event.java | 0 .../main/java/com/flickr4java/flickr/activity/Item.java | 0 .../main/java/com/flickr4java/flickr/activity/ItemList.java | 0 .../src => src}/main/java/com/flickr4java/flickr/auth/Auth.java | 0 .../main/java/com/flickr4java/flickr/auth/AuthInterface.java | 0 .../main/java/com/flickr4java/flickr/auth/Permission.java | 0 .../src => src}/main/java/com/flickr4java/flickr/blogs/Blog.java | 0 .../main/java/com/flickr4java/flickr/blogs/BlogsInterface.java | 0 .../main/java/com/flickr4java/flickr/blogs/Service.java | 0 .../main/java/com/flickr4java/flickr/cameras/Brand.java | 0 .../main/java/com/flickr4java/flickr/cameras/Camera.java | 0 .../java/com/flickr4java/flickr/cameras/CamerasInterface.java | 0 .../main/java/com/flickr4java/flickr/cameras/Details.java | 0 .../main/java/com/flickr4java/flickr/collections/Collection.java | 0 .../com/flickr4java/flickr/collections/CollectionsInterface.java | 0 .../java/com/flickr4java/flickr/commons/CommonsInterface.java | 0 .../main/java/com/flickr4java/flickr/commons/Institution.java | 0 .../main/java/com/flickr4java/flickr/contacts/Contact.java | 0 .../main/java/com/flickr4java/flickr/contacts/ContactList.java | 0 .../java/com/flickr4java/flickr/contacts/ContactsInterface.java | 0 .../main/java/com/flickr4java/flickr/contacts/OnlineStatus.java | 0 .../java/com/flickr4java/flickr/favorites/FavoritesInterface.java | 0 .../java/com/flickr4java/flickr/galleries/GalleriesInterface.java | 0 .../main/java/com/flickr4java/flickr/galleries/Gallery.java | 0 .../main/java/com/flickr4java/flickr/galleries/GalleryList.java | 0 .../main/java/com/flickr4java/flickr/groups/Blast.java | 0 .../main/java/com/flickr4java/flickr/groups/Category.java | 0 .../main/java/com/flickr4java/flickr/groups/Group.java | 0 .../main/java/com/flickr4java/flickr/groups/GroupList.java | 0 .../main/java/com/flickr4java/flickr/groups/GroupsInterface.java | 0 .../main/java/com/flickr4java/flickr/groups/Restriction.java | 0 .../main/java/com/flickr4java/flickr/groups/Subcategory.java | 0 .../main/java/com/flickr4java/flickr/groups/Throttle.java | 0 .../flickr4java/flickr/groups/discuss/GroupDiscussInterface.java | 0 .../main/java/com/flickr4java/flickr/groups/discuss/Reply.java | 0 .../java/com/flickr4java/flickr/groups/discuss/ReplyList.java | 0 .../java/com/flickr4java/flickr/groups/discuss/ReplyObject.java | 0 .../main/java/com/flickr4java/flickr/groups/discuss/Topic.java | 0 .../java/com/flickr4java/flickr/groups/discuss/TopicList.java | 0 .../main/java/com/flickr4java/flickr/groups/members/Member.java | 0 .../com/flickr4java/flickr/groups/members/MembersInterface.java | 0 .../java/com/flickr4java/flickr/groups/members/MembersList.java | 0 .../java/com/flickr4java/flickr/groups/pools/PoolsInterface.java | 0 .../flickr/interestingness/InterestingnessInterface.java | 0 .../com/flickr4java/flickr/machinetags/MachinetagsInterface.java | 0 .../main/java/com/flickr4java/flickr/machinetags/Namespace.java | 0 .../java/com/flickr4java/flickr/machinetags/NamespacesList.java | 0 .../main/java/com/flickr4java/flickr/machinetags/Pair.java | 0 .../main/java/com/flickr4java/flickr/machinetags/Predicate.java | 0 .../main/java/com/flickr4java/flickr/machinetags/Value.java | 0 .../src => src}/main/java/com/flickr4java/flickr/panda/Panda.java | 0 .../main/java/com/flickr4java/flickr/panda/PandaInterface.java | 0 .../main/java/com/flickr4java/flickr/people/PeopleInterface.java | 0 .../main/java/com/flickr4java/flickr/people/PersonTag.java | 0 .../main/java/com/flickr4java/flickr/people/PersonTagList.java | 0 .../main/java/com/flickr4java/flickr/people/PhotoLimits.java | 0 .../main/java/com/flickr4java/flickr/people/TimeZone.java | 0 .../src => src}/main/java/com/flickr4java/flickr/people/User.java | 0 .../main/java/com/flickr4java/flickr/people/UserList.java | 0 .../main/java/com/flickr4java/flickr/people/VideoLimits.java | 0 .../main/java/com/flickr4java/flickr/photos/Editability.java | 0 .../src => src}/main/java/com/flickr4java/flickr/photos/Exif.java | 0 .../main/java/com/flickr4java/flickr/photos/Extras.java | 0 .../main/java/com/flickr4java/flickr/photos/GeoData.java | 0 .../main/java/com/flickr4java/flickr/photos/Media.java | 0 .../src => src}/main/java/com/flickr4java/flickr/photos/Note.java | 0 .../main/java/com/flickr4java/flickr/photos/Permissions.java | 0 .../main/java/com/flickr4java/flickr/photos/Photo.java | 0 .../main/java/com/flickr4java/flickr/photos/PhotoAllContext.java | 0 .../main/java/com/flickr4java/flickr/photos/PhotoContext.java | 0 .../main/java/com/flickr4java/flickr/photos/PhotoList.java | 0 .../main/java/com/flickr4java/flickr/photos/PhotoPlace.java | 0 .../main/java/com/flickr4java/flickr/photos/PhotoSet.java | 0 .../main/java/com/flickr4java/flickr/photos/PhotoSetList.java | 0 .../main/java/com/flickr4java/flickr/photos/PhotoUrl.java | 0 .../main/java/com/flickr4java/flickr/photos/PhotoUtils.java | 0 .../main/java/com/flickr4java/flickr/photos/Photocount.java | 0 .../main/java/com/flickr4java/flickr/photos/PhotosInterface.java | 0 .../src => src}/main/java/com/flickr4java/flickr/photos/Pool.java | 0 .../main/java/com/flickr4java/flickr/photos/PoolList.java | 0 .../main/java/com/flickr4java/flickr/photos/SearchParameters.java | 0 .../src => src}/main/java/com/flickr4java/flickr/photos/Size.java | 0 .../main/java/com/flickr4java/flickr/photos/SizeList.java | 0 .../main/java/com/flickr4java/flickr/photos/Usage.java | 0 .../main/java/com/flickr4java/flickr/photos/comments/Comment.java | 0 .../com/flickr4java/flickr/photos/comments/CommentsInterface.java | 0 .../main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java | 0 .../java/com/flickr4java/flickr/photos/geo/GeoPermissions.java | 0 .../main/java/com/flickr4java/flickr/photos/licenses/License.java | 0 .../com/flickr4java/flickr/photos/licenses/LicensesInterface.java | 0 .../java/com/flickr4java/flickr/photos/notes/NotesInterface.java | 0 .../com/flickr4java/flickr/photos/people/PeopleInterface.java | 0 .../com/flickr4java/flickr/photos/suggestions/Suggestion.java | 0 .../com/flickr4java/flickr/photos/suggestions/SuggestionList.java | 0 .../flickr/photos/suggestions/SuggestionsInterface.java | 0 .../flickr4java/flickr/photos/transform/TransformInterface.java | 0 .../main/java/com/flickr4java/flickr/photos/upload/Ticket.java | 0 .../com/flickr4java/flickr/photos/upload/UploadInterface.java | 0 .../main/java/com/flickr4java/flickr/photosets/Photoset.java | 0 .../main/java/com/flickr4java/flickr/photosets/Photosets.java | 0 .../java/com/flickr4java/flickr/photosets/PhotosetsInterface.java | 0 .../flickr/photosets/comments/PhotosetsCommentsInterface.java | 0 .../main/java/com/flickr4java/flickr/places/Location.java | 0 .../main/java/com/flickr4java/flickr/places/Place.java | 0 .../main/java/com/flickr4java/flickr/places/PlaceType.java | 0 .../main/java/com/flickr4java/flickr/places/PlacesInterface.java | 0 .../main/java/com/flickr4java/flickr/places/PlacesList.java | 0 .../main/java/com/flickr4java/flickr/places/ShapeData.java | 0 .../main/java/com/flickr4java/flickr/places/ShapeDataList.java | 0 .../main/java/com/flickr4java/flickr/prefs/PrefsInterface.java | 0 .../main/java/com/flickr4java/flickr/push/PushInterface.java | 0 .../main/java/com/flickr4java/flickr/reflection/Argument.java | 0 .../main/java/com/flickr4java/flickr/reflection/Error.java | 0 .../main/java/com/flickr4java/flickr/reflection/Method.java | 0 .../com/flickr4java/flickr/reflection/ReflectionInterface.java | 0 .../src => src}/main/java/com/flickr4java/flickr/stats/Csv.java | 0 .../main/java/com/flickr4java/flickr/stats/Domain.java | 0 .../main/java/com/flickr4java/flickr/stats/DomainList.java | 0 .../main/java/com/flickr4java/flickr/stats/Referrer.java | 0 .../main/java/com/flickr4java/flickr/stats/ReferrerList.java | 0 .../src => src}/main/java/com/flickr4java/flickr/stats/Stats.java | 0 .../main/java/com/flickr4java/flickr/stats/StatsInterface.java | 0 .../main/java/com/flickr4java/flickr/stats/StatsSort.java | 0 .../main/java/com/flickr4java/flickr/stats/Totals.java | 0 .../main/java/com/flickr4java/flickr/tags/Cluster.java | 0 .../main/java/com/flickr4java/flickr/tags/ClusterList.java | 0 .../main/java/com/flickr4java/flickr/tags/HotlistTag.java | 0 .../main/java/com/flickr4java/flickr/tags/RelatedTagsList.java | 0 .../src => src}/main/java/com/flickr4java/flickr/tags/Tag.java | 0 .../src => src}/main/java/com/flickr4java/flickr/tags/TagRaw.java | 0 .../main/java/com/flickr4java/flickr/tags/TagsInterface.java | 0 .../main/java/com/flickr4java/flickr/test/TestInterface.java | 0 .../main/java/com/flickr4java/flickr/uploader/UploadMetaData.java | 0 .../main/java/com/flickr4java/flickr/uploader/Uploader.java | 0 .../java/com/flickr4java/flickr/uploader/UploaderResponse.java | 0 .../main/java/com/flickr4java/flickr/urls/UrlsInterface.java | 0 .../main/java/com/flickr4java/flickr/util/AuthStore.java | 0 .../src => src}/main/java/com/flickr4java/flickr/util/Base64.java | 0 .../main/java/com/flickr4java/flickr/util/BuddyIconable.java | 0 .../main/java/com/flickr4java/flickr/util/ByteUtilities.java | 0 .../main/java/com/flickr4java/flickr/util/DebugInputStream.java | 0 .../main/java/com/flickr4java/flickr/util/DebugOutputStream.java | 0 .../main/java/com/flickr4java/flickr/util/FileAuthStore.java | 0 .../main/java/com/flickr4java/flickr/util/IOUtilities.java | 0 .../main/java/com/flickr4java/flickr/util/ImageUtilities.java | 0 .../main/java/com/flickr4java/flickr/util/StringUtilities.java | 0 .../main/java/com/flickr4java/flickr/util/UrlUtilities.java | 0 .../main/java/com/flickr4java/flickr/util/XMLUtilities.java | 0 .../java/com/flickr4java/flickr/test/ActivityInterfaceTest.java | 0 .../test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java | 0 .../test/java/com/flickr4java/flickr/test/AuthUtilitiesTest.java | 0 .../test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java | 0 .../java/com/flickr4java/flickr/test/CamerasInterfaceTest.java | 0 .../com/flickr4java/flickr/test/CollectionsInterfaceTest.java | 0 .../java/com/flickr4java/flickr/test/CommentsInterfaceTest.java | 0 .../java/com/flickr4java/flickr/test/CommonsInterfaceTest.java | 0 .../test/java/com/flickr4java/flickr/test/CompletenessTest.java | 0 .../java/com/flickr4java/flickr/test/ContactsInterfaceTest.java | 0 .../java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java | 0 .../test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java | 0 .../java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java | 0 .../test/java/com/flickr4java/flickr/test/GeoInterfaceTest.java | 0 .../java/com/flickr4java/flickr/test/GroupsInterfaceTest.java | 0 .../com/flickr4java/flickr/test/InterestingnessInterfaceTest.java | 0 .../java/com/flickr4java/flickr/test/LicensesInterfaceTest.java | 0 .../com/flickr4java/flickr/test/MachinetagsInterfaceTest.java | 0 .../java/com/flickr4java/flickr/test/MembersInterfaceTest.java | 0 .../test/java/com/flickr4java/flickr/test/NotesInterfaceTest.java | 0 .../test/java/com/flickr4java/flickr/test/ObjectTest.java | 0 .../test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java | 0 .../java/com/flickr4java/flickr/test/PeopleInterfaceTest.java | 0 .../java/com/flickr4java/flickr/test/PhotosInterfaceTest.java | 0 .../java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java | 0 .../java/com/flickr4java/flickr/test/PlacesInterfaceTest.java | 0 .../test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java | 0 .../test/java/com/flickr4java/flickr/test/PrefsInterfaceTest.java | 0 .../java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java | 0 .../src => src}/test/java/com/flickr4java/flickr/test/Setup.java | 0 .../test/java/com/flickr4java/flickr/test/StatsInterfaceTest.java | 0 .../test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java | 0 .../test/java/com/flickr4java/flickr/test/TestInterfaceTest.java | 0 .../test/java/com/flickr4java/flickr/test/TestProperties.java | 0 .../test/java/com/flickr4java/flickr/test/UploaderTest.java | 0 .../test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java | 0 .../src => src}/test/resources/completenesstest.properties | 0 {Flickr4Java/src => src}/test/resources/setup.properties.example | 0 218 files changed, 0 insertions(+), 0 deletions(-) rename Flickr4Java/.gitignore => .gitignore (100%) rename Flickr4Java/BUILDING.md => BUILDING.md (100%) rename Flickr4Java/CHANGELOG.txt => CHANGELOG.txt (100%) rename Flickr4Java/CONTRIB.md => CONTRIB.md (100%) rename Flickr4Java/LICENSE-apache.txt => LICENSE-apache.txt (100%) rename Flickr4Java/LICENSE.txt => LICENSE.txt (100%) rename Flickr4Java/build.gradle => build.gradle (100%) rename {Flickr4Java/config => config}/Flickr4JavaFormatter.xml (100%) rename {Flickr4Java/doc => doc}/flickr-photo-sizes.xml (100%) rename {Flickr4Java/doc => doc}/flickr-video-sizes.xml (100%) rename {Flickr4Java/doc => doc}/photo-sizes (100%) rename {Flickr4Java/doc => doc}/video-sizes (100%) rename Flickr4Java/pom.xml => pom.xml (100%) rename {Flickr4Java/src => src}/examples/java/ActivityExample.java (100%) rename {Flickr4Java/src => src}/examples/java/AuthExample.java (100%) rename {Flickr4Java/src => src}/examples/java/Backup.java (100%) rename {Flickr4Java/src => src}/examples/java/FlickrCrawler (100%) rename {Flickr4Java/src => src}/examples/java/SearchExample.java (100%) rename {Flickr4Java/src => src}/examples/java/UploadPhoto.java (100%) rename {Flickr4Java/src => src}/examples/resources/setup.properties.example (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/Flickr.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/FlickrException.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/FlickrRuntimeException.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/Parameter.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/ProxyAuthenticator.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/REST.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/RESTResponse.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/RequestContext.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/Response.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/SearchResultList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/Transport.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/activity/ActivityInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/activity/Event.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/activity/Item.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/activity/ItemList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/auth/Auth.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/auth/AuthInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/auth/Permission.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/blogs/Blog.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/blogs/Service.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/cameras/Brand.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/cameras/Camera.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/cameras/Details.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/collections/Collection.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/commons/CommonsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/commons/Institution.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/contacts/Contact.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/contacts/ContactList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/galleries/Gallery.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/galleries/GalleryList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/Blast.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/Category.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/Group.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/GroupList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/GroupsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/Restriction.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/Subcategory.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/Throttle.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/discuss/Reply.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/discuss/ReplyList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/discuss/ReplyObject.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/discuss/Topic.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/discuss/TopicList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/members/Member.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/members/MembersList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/machinetags/Namespace.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/machinetags/NamespacesList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/machinetags/Pair.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/machinetags/Predicate.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/machinetags/Value.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/panda/Panda.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/panda/PandaInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/people/PeopleInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/people/PersonTag.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/people/PersonTagList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/people/PhotoLimits.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/people/TimeZone.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/people/User.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/people/UserList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/people/VideoLimits.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/Editability.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/Exif.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/Extras.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/GeoData.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/Media.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/Note.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/Permissions.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/Photo.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/PhotoAllContext.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/PhotoContext.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/PhotoList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/PhotoPlace.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/PhotoSet.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/PhotoSetList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/PhotoUrl.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/PhotoUtils.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/Photocount.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/PhotosInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/Pool.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/PoolList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/SearchParameters.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/Size.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/SizeList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/Usage.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/comments/Comment.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/geo/GeoPermissions.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/licenses/License.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/suggestions/Suggestion.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/upload/Ticket.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photosets/Photoset.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photosets/Photosets.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/places/Location.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/places/Place.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/places/PlaceType.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/places/PlacesInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/places/PlacesList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/places/ShapeData.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/places/ShapeDataList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/push/PushInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/reflection/Argument.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/reflection/Error.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/reflection/Method.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/stats/Csv.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/stats/Domain.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/stats/DomainList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/stats/Referrer.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/stats/ReferrerList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/stats/Stats.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/stats/StatsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/stats/StatsSort.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/stats/Totals.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/tags/Cluster.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/tags/ClusterList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/tags/HotlistTag.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/tags/Tag.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/tags/TagRaw.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/tags/TagsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/test/TestInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/uploader/Uploader.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/urls/UrlsInterface.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/util/AuthStore.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/util/Base64.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/util/BuddyIconable.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/util/ByteUtilities.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/util/DebugInputStream.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/util/DebugOutputStream.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/util/FileAuthStore.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/util/IOUtilities.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/util/ImageUtilities.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/util/StringUtilities.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/util/UrlUtilities.java (100%) rename {Flickr4Java/src => src}/main/java/com/flickr4java/flickr/util/XMLUtilities.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/ActivityInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/AuthUtilitiesTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/CollectionsInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/CompletenessTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/GeoInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/LicensesInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/NotesInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/ObjectTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/PrefsInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/Setup.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/StatsInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/TestProperties.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/UploaderTest.java (100%) rename {Flickr4Java/src => src}/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java (100%) rename {Flickr4Java/src => src}/test/resources/completenesstest.properties (100%) rename {Flickr4Java/src => src}/test/resources/setup.properties.example (100%) diff --git a/Flickr4Java/.gitignore b/.gitignore similarity index 100% rename from Flickr4Java/.gitignore rename to .gitignore 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/LICENSE-apache.txt similarity index 100% rename from Flickr4Java/LICENSE-apache.txt rename to LICENSE-apache.txt diff --git a/Flickr4Java/LICENSE.txt b/LICENSE.txt similarity index 100% rename from Flickr4Java/LICENSE.txt rename to LICENSE.txt diff --git a/Flickr4Java/build.gradle b/build.gradle similarity index 100% rename from Flickr4Java/build.gradle rename to build.gradle 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 100% rename from Flickr4Java/pom.xml rename to pom.xml diff --git a/Flickr4Java/src/examples/java/ActivityExample.java b/src/examples/java/ActivityExample.java similarity index 100% rename from Flickr4Java/src/examples/java/ActivityExample.java rename to src/examples/java/ActivityExample.java diff --git a/Flickr4Java/src/examples/java/AuthExample.java b/src/examples/java/AuthExample.java similarity index 100% rename from Flickr4Java/src/examples/java/AuthExample.java rename to src/examples/java/AuthExample.java diff --git a/Flickr4Java/src/examples/java/Backup.java b/src/examples/java/Backup.java similarity index 100% rename from Flickr4Java/src/examples/java/Backup.java rename to src/examples/java/Backup.java diff --git a/Flickr4Java/src/examples/java/FlickrCrawler b/src/examples/java/FlickrCrawler similarity index 100% rename from Flickr4Java/src/examples/java/FlickrCrawler rename to src/examples/java/FlickrCrawler diff --git a/Flickr4Java/src/examples/java/SearchExample.java b/src/examples/java/SearchExample.java similarity index 100% rename from Flickr4Java/src/examples/java/SearchExample.java rename to src/examples/java/SearchExample.java diff --git a/Flickr4Java/src/examples/java/UploadPhoto.java b/src/examples/java/UploadPhoto.java similarity index 100% rename from Flickr4Java/src/examples/java/UploadPhoto.java rename to src/examples/java/UploadPhoto.java 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/Flickr.java b/src/main/java/com/flickr4java/flickr/Flickr.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java rename to src/main/java/com/flickr4java/flickr/Flickr.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/FlickrException.java b/src/main/java/com/flickr4java/flickr/FlickrException.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/FlickrException.java rename to src/main/java/com/flickr4java/flickr/FlickrException.java 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/Flickr4Java/src/main/java/com/flickr4java/flickr/Parameter.java b/src/main/java/com/flickr4java/flickr/Parameter.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/Parameter.java rename to src/main/java/com/flickr4java/flickr/Parameter.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/ProxyAuthenticator.java b/src/main/java/com/flickr4java/flickr/ProxyAuthenticator.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/ProxyAuthenticator.java rename to src/main/java/com/flickr4java/flickr/ProxyAuthenticator.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java rename to src/main/java/com/flickr4java/flickr/REST.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/RESTResponse.java b/src/main/java/com/flickr4java/flickr/RESTResponse.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/RESTResponse.java rename to src/main/java/com/flickr4java/flickr/RESTResponse.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/RequestContext.java b/src/main/java/com/flickr4java/flickr/RequestContext.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/RequestContext.java rename to src/main/java/com/flickr4java/flickr/RequestContext.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Response.java b/src/main/java/com/flickr4java/flickr/Response.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/Response.java rename to src/main/java/com/flickr4java/flickr/Response.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/SearchResultList.java b/src/main/java/com/flickr4java/flickr/SearchResultList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/SearchResultList.java rename to src/main/java/com/flickr4java/flickr/SearchResultList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java b/src/main/java/com/flickr4java/flickr/Transport.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java rename to src/main/java/com/flickr4java/flickr/Transport.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java rename to src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/auth/Auth.java rename to src/main/java/com/flickr4java/flickr/auth/Auth.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java rename to src/main/java/com/flickr4java/flickr/auth/AuthInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/auth/Permission.java rename to src/main/java/com/flickr4java/flickr/auth/Permission.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/Blog.java rename to src/main/java/com/flickr4java/flickr/blogs/Blog.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java rename to src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java rename to src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/collections/Collection.java rename to src/main/java/com/flickr4java/flickr/collections/Collection.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java rename to src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java rename to src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/Contact.java rename to src/main/java/com/flickr4java/flickr/contacts/Contact.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java rename to src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java rename to src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java rename to src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java rename to src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Category.java rename to src/main/java/com/flickr4java/flickr/groups/Category.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java rename to src/main/java/com/flickr4java/flickr/groups/Group.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java rename to src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Subcategory.java rename to src/main/java/com/flickr4java/flickr/groups/Subcategory.java 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 100% 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 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 100% 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 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 100% 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 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java rename to src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java rename to src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/Pair.java rename to src/main/java/com/flickr4java/flickr/machinetags/Pair.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java rename to src/main/java/com/flickr4java/flickr/panda/PandaInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java rename to src/main/java/com/flickr4java/flickr/people/PeopleInterface.java 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/Flickr4Java/src/main/java/com/flickr4java/flickr/people/TimeZone.java b/src/main/java/com/flickr4java/flickr/people/TimeZone.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/people/TimeZone.java rename to src/main/java/com/flickr4java/flickr/people/TimeZone.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java rename to src/main/java/com/flickr4java/flickr/people/User.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Editability.java rename to src/main/java/com/flickr4java/flickr/photos/Editability.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Exif.java rename to src/main/java/com/flickr4java/flickr/photos/Exif.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Extras.java rename to src/main/java/com/flickr4java/flickr/photos/Extras.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Note.java rename to src/main/java/com/flickr4java/flickr/photos/Note.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Permissions.java rename to src/main/java/com/flickr4java/flickr/photos/Permissions.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java rename to src/main/java/com/flickr4java/flickr/photos/Photo.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoContext.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoContext.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoList.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoList.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photocount.java rename to src/main/java/com/flickr4java/flickr/photos/Photocount.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java rename to src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java rename to src/main/java/com/flickr4java/flickr/photos/SearchParameters.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java rename to src/main/java/com/flickr4java/flickr/photos/Size.java 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% 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 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photoset.java rename to src/main/java/com/flickr4java/flickr/photosets/Photoset.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photosets.java rename to src/main/java/com/flickr4java/flickr/photosets/Photosets.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java rename to src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java 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 100% 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 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/places/Place.java rename to src/main/java/com/flickr4java/flickr/places/Place.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java rename to src/main/java/com/flickr4java/flickr/places/PlacesInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java rename to src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/push/PushInterface.java rename to src/main/java/com/flickr4java/flickr/push/PushInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Argument.java rename to src/main/java/com/flickr4java/flickr/reflection/Argument.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Error.java rename to src/main/java/com/flickr4java/flickr/reflection/Error.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Method.java rename to src/main/java/com/flickr4java/flickr/reflection/Method.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java rename to src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Csv.java rename to src/main/java/com/flickr4java/flickr/stats/Csv.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Domain.java rename to src/main/java/com/flickr4java/flickr/stats/Domain.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Referrer.java rename to src/main/java/com/flickr4java/flickr/stats/Referrer.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Stats.java rename to src/main/java/com/flickr4java/flickr/stats/Stats.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java rename to src/main/java/com/flickr4java/flickr/stats/StatsInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Totals.java rename to src/main/java/com/flickr4java/flickr/stats/Totals.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/HotlistTag.java rename to src/main/java/com/flickr4java/flickr/tags/HotlistTag.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java rename to src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/Tag.java rename to src/main/java/com/flickr4java/flickr/tags/Tag.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java rename to src/main/java/com/flickr4java/flickr/tags/TagsInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/test/TestInterface.java rename to src/main/java/com/flickr4java/flickr/test/TestInterface.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java rename to src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java b/src/main/java/com/flickr4java/flickr/uploader/Uploader.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java rename to src/main/java/com/flickr4java/flickr/uploader/Uploader.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java rename to src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java rename to src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java 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/Base64.java b/src/main/java/com/flickr4java/flickr/util/Base64.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/Base64.java rename to src/main/java/com/flickr4java/flickr/util/Base64.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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/ByteUtilities.java rename to src/main/java/com/flickr4java/flickr/util/ByteUtilities.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/DebugInputStream.java rename to src/main/java/com/flickr4java/flickr/util/DebugInputStream.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java rename to src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java rename to src/main/java/com/flickr4java/flickr/util/FileAuthStore.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/IOUtilities.java rename to src/main/java/com/flickr4java/flickr/util/IOUtilities.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/ImageUtilities.java rename to src/main/java/com/flickr4java/flickr/util/ImageUtilities.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/StringUtilities.java rename to src/main/java/com/flickr4java/flickr/util/StringUtilities.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java rename to src/main/java/com/flickr4java/flickr/util/UrlUtilities.java 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 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/XMLUtilities.java rename to src/main/java/com/flickr4java/flickr/util/XMLUtilities.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java b/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java rename to src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java 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/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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Setup.java b/src/test/java/com/flickr4java/flickr/test/Setup.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/Setup.java rename to src/test/java/com/flickr4java/flickr/test/Setup.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestProperties.java b/src/test/java/com/flickr4java/flickr/test/TestProperties.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestProperties.java rename to src/test/java/com/flickr4java/flickr/test/TestProperties.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UploaderTest.java b/src/test/java/com/flickr4java/flickr/test/UploaderTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/UploaderTest.java rename to src/test/java/com/flickr4java/flickr/test/UploaderTest.java 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 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java 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/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 From 48ab4ee7613666259d59a5f54556e3469b190ef8 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 1 Jul 2018 09:07:52 +0100 Subject: [PATCH 154/239] Refactored tests to not contact Flickr --- README.md | 3 + .../java/com/flickr4java/flickr/Flickr.java | 46 +- .../java/com/flickr4java/flickr/IFlickr.java | 126 + .../java/com/flickr4java/flickr/REST.java | 9 + .../flickr/uploader/IUploader.java | 20 + .../flickr4java/flickr/uploader/Uploader.java | 25 +- .../flickr/test/CommentsInterfaceTest.java | 15 +- .../flickr/test/FavoritesInterfaceTest.java | 13 +- .../flickr/test/Flickr4JavaTest.java | 21 +- .../flickr/test/GroupsInterfaceTest.java | 4 +- .../test/InterestingnessInterfaceTest.java | 9 - .../flickr/test/PeopleInterfaceTest.java | 7 +- .../flickr/test/PhotosInterfaceTest.java | 63 +- .../flickr/test/PhotosetsInterfaceTest.java | 12 +- .../flickr/test/PlacesInterfaceTest.java | 10 - .../flickr/test/ReflectionInterfaceTest.java | 32 - .../flickr4java/flickr/test/UploaderTest.java | 218 +- .../FileTestProperties.java} | 72 +- .../flickr/test/util/FlickrStub.java | 490 ++++ .../flickr/test/{ => util}/Setup.java | 2 +- .../flickr/test/util/StubTestProperties.java | 112 + .../flickr/test/util/TestProperties.java | 45 + .../test/util/TestPropertiesFactory.java | 54 + .../flickr/test/util/TransportStub.java | 89 + .../get/flickr.activity.userComments.xml | 11 + .../get/flickr.activity.userPhotos.xml | 19 + .../payloads/get/flickr.blogs.getServices.xml | 10 + .../get/flickr.cameras.getBrandModels.xml | 2487 +++++++++++++++++ .../payloads/get/flickr.cameras.getBrands.xml | 47 + .../get/flickr.collections.getInfo.xml | 21 + .../get/flickr.collections.getTree.xml | 9 + .../get/flickr.commons.getInstitutions.xml | 933 +++++++ .../payloads/get/flickr.contacts.getList.xml | 6 + .../get/flickr.contacts.getPublicList.xml | 6 + .../payloads/get/flickr.favorites.getList.xml | 7 + .../get/flickr.favorites.getPublicList.xml | 7 + .../payloads/get/flickr.groups.getInfo.xml | 41 + .../get/flickr.groups.members.getList.xml | 55 + .../get/flickr.groups.pools.getContext.xml | 6 + .../get/flickr.groups.pools.getGroups.xml | 8 + .../get/flickr.groups.pools.getPhotos.xml | 4 + .../payloads/get/flickr.groups.search.xml | 105 + .../get/flickr.interestingness.getList.xml | 12 + .../get/flickr.machinetags.getNamespaces.xml | 21 + .../get/flickr.machinetags.getPairs.xml | 19 + .../get/flickr.machinetags.getPredicates.xml | 14 + .../flickr.machinetags.getRecentValues.xml | 61 + .../get/flickr.machinetags.getValues.xml | 61 + .../payloads/get/flickr.panda.getList.xml | 8 + .../payloads/get/flickr.panda.getPhotos.xml | 4 + .../get/flickr.people.findByEmail.xml | 6 + .../get/flickr.people.findByUsername.xml | 6 + .../payloads/get/flickr.people.getGroups.xml | 8 + .../payloads/get/flickr.people.getInfo.xml | 20 + .../payloads/get/flickr.people.getPhotos.xml | 20 + .../get/flickr.people.getPhotosOf.xml | 7 + .../get/flickr.people.getPublicGroups.xml | 7 + .../get/flickr.people.getPublicPhotos.xml | 6 + .../get/flickr.people.getUploadStatus.xml | 11 + .../get/flickr.photos.comments.getList.xml | 8 + .../get/flickr.photos.geo.getLocation.xml | 11 + .../get/flickr.photos.geo.getPerms.xml | 4 + .../get/flickr.photos.getContactsPhotos.xml | 10 + .../flickr.photos.getContactsPublicPhotos.xml | 10 + .../payloads/get/flickr.photos.getContext.xml | 6 + .../payloads/get/flickr.photos.getCounts.xml | 6 + .../payloads/get/flickr.photos.getExif.xml | 187 ++ .../payloads/get/flickr.photos.getInfo.xml | 32 + .../get/flickr.photos.getNotInSet.xml | 105 + .../payloads/get/flickr.photos.getPerms.xml | 4 + .../payloads/get/flickr.photos.getRecent.xml | 105 + .../payloads/get/flickr.photos.getSizes.xml | 14 + .../get/flickr.photos.getUntagged.xml | 105 + .../get/flickr.photos.licenses.getInfo.xml | 16 + .../payloads/get/flickr.photos.people.add.xml | 3 + .../get/flickr.photos.people.delete.xml | 3 + .../get/flickr.photos.people.getList.xml | 4 + .../payloads/get/flickr.photos.search.xml | 38 + .../get/flickr.photosets.getContext.xml | 6 + .../payloads/get/flickr.photosets.getInfo.xml | 7 + .../payloads/get/flickr.photosets.getList.xml | 30 + .../get/flickr.photosets.getPhotos.xml | 14 + .../payloads/get/flickr.places.find.xml | 11 + .../get/flickr.places.findByLatLon.xml | 6 + ...ckr.places.getChildrenWithPhotosPublic.xml | 83 + .../payloads/get/flickr.places.getInfo.xml | 17 + .../get/flickr.places.getInfoByUrl.xml | 17 + .../get/flickr.places.getPlaceTypes.xml | 11 + .../get/flickr.places.getTopPlacesList.xml | 6 + .../flickr.places.placesForBoundingBox.xml | 6 + .../get/flickr.places.placesForContacts.xml | 51 + .../get/flickr.places.placesForTags.xml | 6 + .../get/flickr.places.placesForUser.xml | 7 + .../get/flickr.places.resolvePlaceId.xml | 9 + .../get/flickr.places.resolvePlaceURL.xml | 9 + .../get/flickr.places.tagsForPlace.xml | 105 + .../get/flickr.prefs.getContentType.xml | 4 + .../payloads/get/flickr.prefs.getGeoPerms.xml | 4 + .../payloads/get/flickr.prefs.getHidden.xml | 4 + .../get/flickr.prefs.getSafetyLevel.xml | 4 + .../get/flickr.reflection.getMethodInfo.xml | 24 + .../get/flickr.reflection.getMethods.xml | 227 ++ .../get/flickr.tags.getClusterPhotos.xml | 27 + .../payloads/get/flickr.tags.getClusters.xml | 47 + .../payloads/get/flickr.tags.getHotList.xml | 25 + .../payloads/get/flickr.tags.getListPhoto.xml | 10 + .../payloads/get/flickr.tags.getListUser.xml | 137 + .../get/flickr.tags.getListUserPopular.xml | 17 + .../get/flickr.tags.getListUserRaw.xml | 397 +++ .../payloads/get/flickr.tags.getRelated.xml | 37 + .../payloads/get/flickr.urls.getGroup.xml | 4 + .../get/flickr.urls.getUserPhotos.xml | 4 + .../get/flickr.urls.getUserProfile.xml | 4 + .../get/flickr.urls.lookupGallery.xml | 10 + .../payloads/get/flickr.urls.lookupGroup.xml | 6 + .../payloads/get/flickr.urls.lookupUser.xml | 6 + .../payloads/post/flickr.blogs.getList.xml | 6 + .../payloads/post/flickr.favorites.add.xml | 3 + .../post/flickr.favorites.getContext.xml | 6 + .../payloads/post/flickr.favorites.remove.xml | 3 + .../post/flickr.galleries.getInfo.xml | 12 + .../post/flickr.galleries.getList.xml | 9 + .../payloads/post/flickr.groups.join.xml | 4 + .../payloads/post/flickr.groups.leave.xml | 4 + .../payloads/post/flickr.groups.pools.add.xml | 3 + .../post/flickr.groups.pools.remove.xml | 3 + .../payloads/post/flickr.photos.addTags.xml | 6 + .../flickr.photos.comments.addComment.xml | 6 + .../flickr.photos.comments.deleteComment.xml | 3 + .../flickr.photos.comments.editComment.xml | 3 + .../payloads/post/flickr.photos.delete.xml | 4 + .../post/flickr.photos.geo.removeLocation.xml | 3 + .../post/flickr.photos.geo.setLocation.xml | 3 + .../payloads/post/flickr.photos.removeTag.xml | 3 + .../post/flickr.photos.setContentType.xml | 3 + .../payloads/post/flickr.photos.setMeta.xml | 7 + .../post/flickr.photos.setSafetyLevel.xml | 3 + .../payloads/post/flickr.photos.setTags.xml | 3 + .../post/flickr.photosets.addPhoto.xml | 3 + .../payloads/post/flickr.photosets.create.xml | 4 + .../payloads/post/flickr.photosets.delete.xml | 3 + .../post/flickr.photosets.editPhotos.xml | 3 + .../post/flickr.photosets.orderSets.xml | 3 + .../post/flickr.photosets.removePhoto.xml | 3 + .../payloads/post/flickr.test.echo.xml | 16 + .../payloads/post/flickr.test.login.xml | 6 + src/test/resources/payloads/post/upload.xml | 4 + 147 files changed, 7494 insertions(+), 291 deletions(-) create mode 100644 src/main/java/com/flickr4java/flickr/IFlickr.java create mode 100644 src/main/java/com/flickr4java/flickr/uploader/IUploader.java rename src/test/java/com/flickr4java/flickr/test/{TestProperties.java => util/FileTestProperties.java} (81%) create mode 100644 src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java rename src/test/java/com/flickr4java/flickr/test/{ => util}/Setup.java (98%) create mode 100644 src/test/java/com/flickr4java/flickr/test/util/StubTestProperties.java create mode 100644 src/test/java/com/flickr4java/flickr/test/util/TestProperties.java create mode 100644 src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java create mode 100644 src/test/java/com/flickr4java/flickr/test/util/TransportStub.java create mode 100644 src/test/resources/payloads/get/flickr.activity.userComments.xml create mode 100644 src/test/resources/payloads/get/flickr.activity.userPhotos.xml create mode 100644 src/test/resources/payloads/get/flickr.blogs.getServices.xml create mode 100644 src/test/resources/payloads/get/flickr.cameras.getBrandModels.xml create mode 100644 src/test/resources/payloads/get/flickr.cameras.getBrands.xml create mode 100644 src/test/resources/payloads/get/flickr.collections.getInfo.xml create mode 100644 src/test/resources/payloads/get/flickr.collections.getTree.xml create mode 100644 src/test/resources/payloads/get/flickr.commons.getInstitutions.xml create mode 100644 src/test/resources/payloads/get/flickr.contacts.getList.xml create mode 100644 src/test/resources/payloads/get/flickr.contacts.getPublicList.xml create mode 100644 src/test/resources/payloads/get/flickr.favorites.getList.xml create mode 100644 src/test/resources/payloads/get/flickr.favorites.getPublicList.xml create mode 100644 src/test/resources/payloads/get/flickr.groups.getInfo.xml create mode 100644 src/test/resources/payloads/get/flickr.groups.members.getList.xml create mode 100644 src/test/resources/payloads/get/flickr.groups.pools.getContext.xml create mode 100644 src/test/resources/payloads/get/flickr.groups.pools.getGroups.xml create mode 100644 src/test/resources/payloads/get/flickr.groups.pools.getPhotos.xml create mode 100644 src/test/resources/payloads/get/flickr.groups.search.xml create mode 100644 src/test/resources/payloads/get/flickr.interestingness.getList.xml create mode 100644 src/test/resources/payloads/get/flickr.machinetags.getNamespaces.xml create mode 100644 src/test/resources/payloads/get/flickr.machinetags.getPairs.xml create mode 100644 src/test/resources/payloads/get/flickr.machinetags.getPredicates.xml create mode 100644 src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml create mode 100644 src/test/resources/payloads/get/flickr.machinetags.getValues.xml create mode 100644 src/test/resources/payloads/get/flickr.panda.getList.xml create mode 100644 src/test/resources/payloads/get/flickr.panda.getPhotos.xml create mode 100644 src/test/resources/payloads/get/flickr.people.findByEmail.xml create mode 100644 src/test/resources/payloads/get/flickr.people.findByUsername.xml create mode 100644 src/test/resources/payloads/get/flickr.people.getGroups.xml create mode 100644 src/test/resources/payloads/get/flickr.people.getInfo.xml create mode 100644 src/test/resources/payloads/get/flickr.people.getPhotos.xml create mode 100644 src/test/resources/payloads/get/flickr.people.getPhotosOf.xml create mode 100644 src/test/resources/payloads/get/flickr.people.getPublicGroups.xml create mode 100644 src/test/resources/payloads/get/flickr.people.getPublicPhotos.xml create mode 100644 src/test/resources/payloads/get/flickr.people.getUploadStatus.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.comments.getList.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.geo.getLocation.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.geo.getPerms.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.getContactsPhotos.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.getContactsPublicPhotos.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.getContext.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.getCounts.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.getExif.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.getInfo.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.getNotInSet.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.getPerms.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.getRecent.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.getSizes.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.getUntagged.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.licenses.getInfo.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.people.add.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.people.delete.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.people.getList.xml create mode 100644 src/test/resources/payloads/get/flickr.photos.search.xml create mode 100644 src/test/resources/payloads/get/flickr.photosets.getContext.xml create mode 100644 src/test/resources/payloads/get/flickr.photosets.getInfo.xml create mode 100644 src/test/resources/payloads/get/flickr.photosets.getList.xml create mode 100644 src/test/resources/payloads/get/flickr.photosets.getPhotos.xml create mode 100644 src/test/resources/payloads/get/flickr.places.find.xml create mode 100644 src/test/resources/payloads/get/flickr.places.findByLatLon.xml create mode 100644 src/test/resources/payloads/get/flickr.places.getChildrenWithPhotosPublic.xml create mode 100644 src/test/resources/payloads/get/flickr.places.getInfo.xml create mode 100644 src/test/resources/payloads/get/flickr.places.getInfoByUrl.xml create mode 100644 src/test/resources/payloads/get/flickr.places.getPlaceTypes.xml create mode 100644 src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml create mode 100644 src/test/resources/payloads/get/flickr.places.placesForBoundingBox.xml create mode 100644 src/test/resources/payloads/get/flickr.places.placesForContacts.xml create mode 100644 src/test/resources/payloads/get/flickr.places.placesForTags.xml create mode 100644 src/test/resources/payloads/get/flickr.places.placesForUser.xml create mode 100644 src/test/resources/payloads/get/flickr.places.resolvePlaceId.xml create mode 100644 src/test/resources/payloads/get/flickr.places.resolvePlaceURL.xml create mode 100644 src/test/resources/payloads/get/flickr.places.tagsForPlace.xml create mode 100644 src/test/resources/payloads/get/flickr.prefs.getContentType.xml create mode 100644 src/test/resources/payloads/get/flickr.prefs.getGeoPerms.xml create mode 100644 src/test/resources/payloads/get/flickr.prefs.getHidden.xml create mode 100644 src/test/resources/payloads/get/flickr.prefs.getSafetyLevel.xml create mode 100644 src/test/resources/payloads/get/flickr.reflection.getMethodInfo.xml create mode 100644 src/test/resources/payloads/get/flickr.reflection.getMethods.xml create mode 100644 src/test/resources/payloads/get/flickr.tags.getClusterPhotos.xml create mode 100644 src/test/resources/payloads/get/flickr.tags.getClusters.xml create mode 100644 src/test/resources/payloads/get/flickr.tags.getHotList.xml create mode 100644 src/test/resources/payloads/get/flickr.tags.getListPhoto.xml create mode 100644 src/test/resources/payloads/get/flickr.tags.getListUser.xml create mode 100644 src/test/resources/payloads/get/flickr.tags.getListUserPopular.xml create mode 100644 src/test/resources/payloads/get/flickr.tags.getListUserRaw.xml create mode 100644 src/test/resources/payloads/get/flickr.tags.getRelated.xml create mode 100644 src/test/resources/payloads/get/flickr.urls.getGroup.xml create mode 100644 src/test/resources/payloads/get/flickr.urls.getUserPhotos.xml create mode 100644 src/test/resources/payloads/get/flickr.urls.getUserProfile.xml create mode 100644 src/test/resources/payloads/get/flickr.urls.lookupGallery.xml create mode 100644 src/test/resources/payloads/get/flickr.urls.lookupGroup.xml create mode 100644 src/test/resources/payloads/get/flickr.urls.lookupUser.xml create mode 100644 src/test/resources/payloads/post/flickr.blogs.getList.xml create mode 100644 src/test/resources/payloads/post/flickr.favorites.add.xml create mode 100644 src/test/resources/payloads/post/flickr.favorites.getContext.xml create mode 100644 src/test/resources/payloads/post/flickr.favorites.remove.xml create mode 100644 src/test/resources/payloads/post/flickr.galleries.getInfo.xml create mode 100644 src/test/resources/payloads/post/flickr.galleries.getList.xml create mode 100644 src/test/resources/payloads/post/flickr.groups.join.xml create mode 100644 src/test/resources/payloads/post/flickr.groups.leave.xml create mode 100644 src/test/resources/payloads/post/flickr.groups.pools.add.xml create mode 100644 src/test/resources/payloads/post/flickr.groups.pools.remove.xml create mode 100644 src/test/resources/payloads/post/flickr.photos.addTags.xml create mode 100644 src/test/resources/payloads/post/flickr.photos.comments.addComment.xml create mode 100644 src/test/resources/payloads/post/flickr.photos.comments.deleteComment.xml create mode 100644 src/test/resources/payloads/post/flickr.photos.comments.editComment.xml create mode 100644 src/test/resources/payloads/post/flickr.photos.delete.xml create mode 100644 src/test/resources/payloads/post/flickr.photos.geo.removeLocation.xml create mode 100644 src/test/resources/payloads/post/flickr.photos.geo.setLocation.xml create mode 100644 src/test/resources/payloads/post/flickr.photos.removeTag.xml create mode 100644 src/test/resources/payloads/post/flickr.photos.setContentType.xml create mode 100644 src/test/resources/payloads/post/flickr.photos.setMeta.xml create mode 100644 src/test/resources/payloads/post/flickr.photos.setSafetyLevel.xml create mode 100644 src/test/resources/payloads/post/flickr.photos.setTags.xml create mode 100644 src/test/resources/payloads/post/flickr.photosets.addPhoto.xml create mode 100644 src/test/resources/payloads/post/flickr.photosets.create.xml create mode 100644 src/test/resources/payloads/post/flickr.photosets.delete.xml create mode 100644 src/test/resources/payloads/post/flickr.photosets.editPhotos.xml create mode 100644 src/test/resources/payloads/post/flickr.photosets.orderSets.xml create mode 100644 src/test/resources/payloads/post/flickr.photosets.removePhoto.xml create mode 100644 src/test/resources/payloads/post/flickr.test.echo.xml create mode 100644 src/test/resources/payloads/post/flickr.test.login.xml create mode 100644 src/test/resources/payloads/post/upload.xml diff --git a/README.md b/README.md index f1b01a5e..0a2e38b0 100644 --- a/README.md +++ b/README.md @@ -52,3 +52,6 @@ An API key is required to use this API. You can [request one on Flickr](http:// 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). +### 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. diff --git a/src/main/java/com/flickr4java/flickr/Flickr.java b/src/main/java/com/flickr4java/flickr/Flickr.java index 114b0010..64322287 100644 --- a/src/main/java/com/flickr4java/flickr/Flickr.java +++ b/src/main/java/com/flickr4java/flickr/Flickr.java @@ -38,6 +38,7 @@ import com.flickr4java.flickr.tags.TagsInterface; import com.flickr4java.flickr.test.TestInterface; import com.flickr4java.flickr.uploader.Uploader; +import com.flickr4java.flickr.uploader.UploaderResponse; import com.flickr4java.flickr.urls.UrlsInterface; import java.util.Set; @@ -56,7 +57,7 @@ * @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. @@ -291,6 +292,7 @@ public Flickr(String apiKey, String sharedSecret, Transport transport) { * * @return The API key */ + @Override public String getApiKey() { return apiKey; } @@ -301,6 +303,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 +311,7 @@ public void setApiKey(String apiKey) { this.apiKey = apiKey; } + @Override public void setAuth(Auth auth) { this.auth = auth; } @@ -317,6 +321,7 @@ public void setAuth(Auth auth) { * * @return The Auth-object */ + @Override public Auth getAuth() { return auth; } @@ -326,6 +331,7 @@ public Auth getAuth() { * * @return The Shared-Secret */ + @Override public String getSharedSecret() { return sharedSecret; } @@ -336,6 +342,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,6 +355,7 @@ public void setSharedSecret(String sharedSecret) { * * @return The Tranport interface */ + @Override public Transport getTransport() { return transport; } @@ -357,6 +365,7 @@ public Transport getTransport() { * * @param transport */ + @Override public void setTransport(Transport transport) { if (transport == null) { throw new IllegalArgumentException("Transport must not be null"); @@ -369,6 +378,7 @@ public void setTransport(Transport transport) { * * @return The AuthInterface */ + @Override public AuthInterface getAuthInterface() { if (authInterface == null) { authInterface = new AuthInterface(apiKey, sharedSecret, transport); @@ -381,6 +391,7 @@ public AuthInterface getAuthInterface() { * * @return The ActivityInterface */ + @Override public ActivityInterface getActivityInterface() { if (activityInterface == null) { activityInterface = new ActivityInterface(apiKey, sharedSecret, transport); @@ -388,6 +399,7 @@ public ActivityInterface getActivityInterface() { return activityInterface; } + @Override public synchronized BlogsInterface getBlogsInterface() { if (blogsInterface == null) { blogsInterface = new BlogsInterface(apiKey, sharedSecret, transport); @@ -395,6 +407,7 @@ public synchronized BlogsInterface getBlogsInterface() { return blogsInterface; } + @Override public CommentsInterface getCommentsInterface() { if (commentsInterface == null) { commentsInterface = new CommentsInterface(apiKey, sharedSecret, transport); @@ -402,6 +415,7 @@ public CommentsInterface getCommentsInterface() { return commentsInterface; } + @Override public CommonsInterface getCommonsInterface() { if (commonsInterface == null) { commonsInterface = new CommonsInterface(apiKey, sharedSecret, transport); @@ -409,6 +423,7 @@ public CommonsInterface getCommonsInterface() { return commonsInterface; } + @Override public ContactsInterface getContactsInterface() { if (contactsInterface == null) { contactsInterface = new ContactsInterface(apiKey, sharedSecret, transport); @@ -416,6 +431,7 @@ public ContactsInterface getContactsInterface() { return contactsInterface; } + @Override public FavoritesInterface getFavoritesInterface() { if (favoritesInterface == null) { favoritesInterface = new FavoritesInterface(apiKey, sharedSecret, transport); @@ -423,6 +439,7 @@ public FavoritesInterface getFavoritesInterface() { return favoritesInterface; } + @Override public GeoInterface getGeoInterface() { if (geoInterface == null) { geoInterface = new GeoInterface(apiKey, sharedSecret, transport); @@ -430,6 +447,7 @@ public GeoInterface getGeoInterface() { return geoInterface; } + @Override public GroupsInterface getGroupsInterface() { if (groupsInterface == null) { groupsInterface = new GroupsInterface(apiKey, sharedSecret, transport); @@ -440,6 +458,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 +466,7 @@ public synchronized InterestingnessInterface getInterestingnessInterface() { return interestingnessInterface; } + @Override public LicensesInterface getLicensesInterface() { if (licensesInterface == null) { licensesInterface = new LicensesInterface(apiKey, sharedSecret, transport); @@ -454,6 +474,7 @@ public LicensesInterface getLicensesInterface() { return licensesInterface; } + @Override public MachinetagsInterface getMachinetagsInterface() { if (machinetagsInterface == null) { machinetagsInterface = new MachinetagsInterface(apiKey, sharedSecret, transport); @@ -461,6 +482,7 @@ public MachinetagsInterface getMachinetagsInterface() { return machinetagsInterface; } + @Override public MembersInterface getMembersInterface() { if (membersInterface == null) { membersInterface = new MembersInterface(apiKey, sharedSecret, transport); @@ -468,6 +490,7 @@ public MembersInterface getMembersInterface() { return membersInterface; } + @Override public NotesInterface getNotesInterface() { if (notesInterface == null) { notesInterface = new NotesInterface(apiKey, sharedSecret, transport); @@ -475,6 +498,7 @@ public NotesInterface getNotesInterface() { return notesInterface; } + @Override public PandaInterface getPandaInterface() { if (pandaInterface == null) { pandaInterface = new PandaInterface(apiKey, sharedSecret, transport); @@ -482,6 +506,7 @@ public PandaInterface getPandaInterface() { return pandaInterface; } + @Override public PoolsInterface getPoolsInterface() { if (poolsInterface == null) { poolsInterface = new PoolsInterface(apiKey, sharedSecret, transport); @@ -489,6 +514,7 @@ public PoolsInterface getPoolsInterface() { return poolsInterface; } + @Override public PeopleInterface getPeopleInterface() { if (peopleInterface == null) { peopleInterface = new PeopleInterface(apiKey, sharedSecret, transport); @@ -496,6 +522,7 @@ public PeopleInterface getPeopleInterface() { return peopleInterface; } + @Override public PhotosInterface getPhotosInterface() { if (photosInterface == null) { photosInterface = new PhotosInterface(apiKey, sharedSecret, transport); @@ -503,6 +530,7 @@ public PhotosInterface getPhotosInterface() { return photosInterface; } + @Override public PhotosetsCommentsInterface getPhotosetsCommentsInterface() { if (photosetsCommentsInterface == null) { photosetsCommentsInterface = new PhotosetsCommentsInterface(apiKey, sharedSecret, transport); @@ -510,6 +538,7 @@ public PhotosetsCommentsInterface getPhotosetsCommentsInterface() { return photosetsCommentsInterface; } + @Override public PhotosetsInterface getPhotosetsInterface() { if (photosetsInterface == null) { photosetsInterface = new PhotosetsInterface(apiKey, sharedSecret, transport); @@ -517,6 +546,7 @@ public PhotosetsInterface getPhotosetsInterface() { return photosetsInterface; } + @Override public CollectionsInterface getCollectionsInterface() { if (collectionsInterface == null) { collectionsInterface = new CollectionsInterface(apiKey, sharedSecret, transport); @@ -524,6 +554,7 @@ public CollectionsInterface getCollectionsInterface() { return collectionsInterface; } + @Override public PlacesInterface getPlacesInterface() { if (placesInterface == null) { placesInterface = new PlacesInterface(apiKey, sharedSecret, transport); @@ -531,6 +562,7 @@ public PlacesInterface getPlacesInterface() { return placesInterface; } + @Override public PrefsInterface getPrefsInterface() { if (prefsInterface == null) { prefsInterface = new PrefsInterface(apiKey, sharedSecret, transport); @@ -538,6 +570,7 @@ public PrefsInterface getPrefsInterface() { return prefsInterface; } + @Override public ReflectionInterface getReflectionInterface() { if (reflectionInterface == null) { reflectionInterface = new ReflectionInterface(apiKey, sharedSecret, transport); @@ -550,6 +583,7 @@ public ReflectionInterface getReflectionInterface() { * * @return The TagsInterface */ + @Override public TagsInterface getTagsInterface() { if (tagsInterface == null) { tagsInterface = new TagsInterface(apiKey, sharedSecret, transport); @@ -557,6 +591,7 @@ public TagsInterface getTagsInterface() { return tagsInterface; } + @Override public TestInterface getTestInterface() { if (testInterface == null) { testInterface = new TestInterface(apiKey, sharedSecret, transport); @@ -564,6 +599,7 @@ public TestInterface getTestInterface() { return testInterface; } + @Override public TransformInterface getTransformInterface() { if (transformInterface == null) { transformInterface = new TransformInterface(apiKey, sharedSecret, transport); @@ -571,6 +607,7 @@ public TransformInterface getTransformInterface() { return transformInterface; } + @Override public UploadInterface getUploadInterface() { if (uploadInterface == null) { uploadInterface = new UploadInterface(apiKey, sharedSecret, transport); @@ -578,6 +615,7 @@ public UploadInterface getUploadInterface() { return uploadInterface; } + @Override public Uploader getUploader() { if (uploader == null) { uploader = new Uploader(apiKey, sharedSecret); @@ -585,6 +623,7 @@ public Uploader getUploader() { return uploader; } + @Override public UrlsInterface getUrlsInterface() { if (urlsInterface == null) { urlsInterface = new UrlsInterface(apiKey, sharedSecret, transport); @@ -592,6 +631,7 @@ public UrlsInterface getUrlsInterface() { return urlsInterface; } + @Override public GalleriesInterface getGalleriesInterface() { if (galleriesInterface == null) { galleriesInterface = new GalleriesInterface(apiKey, sharedSecret, transport); @@ -599,6 +639,7 @@ public GalleriesInterface getGalleriesInterface() { return galleriesInterface; } + @Override public StatsInterface getStatsInterface() { if (statsInterface == null) { statsInterface = new StatsInterface(apiKey, sharedSecret, transport); @@ -606,6 +647,7 @@ public StatsInterface getStatsInterface() { return statsInterface; } + @Override public CamerasInterface getCamerasInterface() { if (cameraInterface == null) { cameraInterface = new CamerasInterface(apiKey, sharedSecret, transport); @@ -618,6 +660,7 @@ public CamerasInterface getCamerasInterface() { * * @return The SuggestionsInterface */ + @Override public SuggestionsInterface getSuggestionsInterface() { if (suggestionsInterface == null) { suggestionsInterface = new SuggestionsInterface(apiKey, sharedSecret, transport); @@ -631,6 +674,7 @@ public SuggestionsInterface getSuggestionsInterface() { * @return The GroupDiscussInterface */ + @Override public GroupDiscussInterface getDiscussionInterface() { if (discussionInterface == null) { discussionInterface = new GroupDiscussInterface(apiKey, sharedSecret, transport); 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..3e25530a --- /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); + + Transport getTransport(); + + void setTransport(Transport 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/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java index 35d115ff..29d8a771 100644 --- a/src/main/java/com/flickr4java/flickr/REST.java +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -464,4 +464,13 @@ public void setConnectTimeoutMs(Integer connectTimeoutMs) { public void setReadTimeoutMs(Integer readTimeoutMs) { this.readTimeoutMs = readTimeoutMs; } + + // Generate responses for offline tests +// private void dumpResponseToFile(Object flickrMethod, String strXml, String httpMethod) throws IOException { +// String filename = String.format("%s.xml", flickrMethod); +// Path filePath = Paths.get("src/test/resources/payloads/" + httpMethod, filename); +// Files.write(filePath, strXml.getBytes()); +// logger.info(String.format("Writing payload to file '%s'", filePath)); +// } + } 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/Uploader.java b/src/main/java/com/flickr4java/flickr/uploader/Uploader.java index b2df03a0..2bca5f7c 100644 --- a/src/main/java/com/flickr4java/flickr/uploader/Uploader.java +++ b/src/main/java/com/flickr4java/flickr/uploader/Uploader.java @@ -36,7 +36,7 @@ * @author Anthony Eden * @version $Id: Uploader.java,v 1.12 2009/12/15 20:57:49 x-mago Exp $ */ -public class Uploader { +public class Uploader implements IUploader { /** * */ @@ -54,15 +54,26 @@ public class Uploader { /** * 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 = new REST(Transport.UPLOAD_API_HOST); - this.transport.setResponseClass(UploaderResponse.class); + this.transport = transport; } /** @@ -75,6 +86,7 @@ public Uploader(String apiKey, String sharedSecret) { * @return photoId or ticketId * @throws FlickrException */ + @Override public String upload(byte[] data, UploadMetaData metaData) throws FlickrException { Map parameters = setUploadParameters(metaData); parameters.put("photo", data); @@ -94,6 +106,7 @@ public String upload(byte[] data, UploadMetaData metaData) throws FlickrExceptio * @return photoId or ticketId * @throws FlickrException */ + @Override public String upload(File file, UploadMetaData metaData) throws FlickrException { InputStream in = null; @@ -115,6 +128,7 @@ public String upload(File file, UploadMetaData metaData) throws FlickrException * @return photoId or ticketId * @throws FlickrException */ + @Override public String upload(InputStream in, UploadMetaData metaData) throws FlickrException { Map parameters = setUploadParameters(metaData); parameters.put("photo", in); @@ -131,6 +145,7 @@ public String upload(InputStream in, UploadMetaData metaData) throws FlickrExcep * @return photoId or ticketId * @throws FlickrException */ + @Override public String replace(InputStream in, String flickrId, boolean async) throws FlickrException { Map parameters = setReplaceParameters(flickrId, async); parameters.put("photo", in); @@ -149,6 +164,7 @@ public String replace(InputStream in, String flickrId, boolean async) throws Fli * @return photoId or ticketId * @throws FlickrException */ + @Override public String replace(byte[] data, String flickrId, boolean async) throws FlickrException { Map parameters = setReplaceParameters(flickrId, async); @@ -168,6 +184,7 @@ public String replace(byte[] data, String flickrId, boolean async) throws Flickr * @return photoId or ticketId * @throws FlickrException */ + @Override public String replace(File file, String flickrId, boolean async) throws FlickrException { InputStream in = null; diff --git a/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java index 217ef87f..a72fa253 100644 --- a/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java @@ -46,7 +46,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 +55,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/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java index dfaffef7..fb0d8d7f 100644 --- a/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java @@ -58,19 +58,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 index 797b51ed..89f5c189 100644 --- a/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java +++ b/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java @@ -5,11 +5,14 @@ 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; /** @@ -18,7 +21,7 @@ */ public class Flickr4JavaTest { - protected Flickr flickr = null; + protected IFlickr flickr; protected TestProperties testProperties; @@ -27,14 +30,18 @@ public class Flickr4JavaTest { */ @Before public void setUp() throws FlickrException { - testProperties = new TestProperties(); + testProperties = TestPropertiesFactory.getTestProperties(); - REST rest = new REST(); - rest.setHost(testProperties.getHost()); + if (testProperties.isRealFlickr()) { + REST rest = new REST(); + rest.setHost(testProperties.getHost()); - flickr = new Flickr(testProperties.getApiKey(), testProperties.getSecret(), rest); + flickr = new Flickr(testProperties.getApiKey(), testProperties.getSecret(), rest); - setAuth(Permission.READ); + setAuth(Permission.READ); + } else { + flickr = new FlickrStub(); + } } /** diff --git a/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java index 19d00fdc..8246a4b1 100644 --- a/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java @@ -90,11 +90,11 @@ 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); } diff --git a/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java index 2a6e171b..ad6dd059 100644 --- a/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java @@ -53,15 +53,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/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java index c0ded6ba..2952ff75 100644 --- a/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java @@ -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 diff --git a/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java index e6bd3619..fa95e5ae 100644 --- a/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java @@ -2,11 +2,6 @@ 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 com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.people.User; @@ -20,13 +15,9 @@ 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; @@ -36,6 +27,11 @@ import java.util.List; import java.util.Set; +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 * @version $Id: PhotosInterfaceTest.java,v 1.20 2009/07/23 21:49:35 x-mago Exp $ @@ -211,7 +207,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; @@ -402,8 +397,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"); } @@ -421,16 +414,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()); @@ -451,13 +439,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 @@ -465,11 +448,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(66 == image.getWidth() || 67 == image.getWidth() || 68 == image.getWidth()); - assertEquals(100, image.getHeight()); - ImageIO.write(image, "jpg", thumbnailFile); + assertNotNull(photo); + assertEquals(photoId, photo.getId()); } @Test @@ -477,11 +457,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 @@ -489,11 +466,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 @@ -501,11 +475,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 diff --git a/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java index fa85bce7..998e00c4 100644 --- a/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java @@ -76,12 +76,8 @@ public void testEditPhotos() throws FlickrException { PhotosetsInterface iface = flickr.getPhotosetsInterface(); - List reordered = setPics; - reordered.add(testProperties.getPhotoId()); - Collections.reverse(reordered); - 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); @@ -139,8 +135,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 @@ -161,13 +157,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/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java index 8394124e..70c8dec5 100644 --- a/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java @@ -50,16 +50,6 @@ public void testFindAlabama() throws FlickrException { assertEquals(Place.TYPE_REGION, place.getPlaceType()); } - @Test - public void testFindEurope() throws FlickrException { - PlacesInterface placesInterface = flickr.getPlacesInterface(); - PlacesList list = placesInterface.find("Europe"); - Place place = list.get(0); - assertEquals("6dCBhRRTVrJiB5xOrg", place.getPlaceId()); - assertEquals("/6dCBhRRTVrJiB5xOrg", place.getPlaceUrl()); - assertEquals(Place.TYPE_CONTINENT, place.getPlaceType()); - } - @SuppressWarnings("deprecation") @Test public void testResolvePlaceId() throws FlickrException { diff --git a/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java index 81496bd4..e97823a1 100644 --- a/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java @@ -74,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/src/test/java/com/flickr4java/flickr/test/UploaderTest.java b/src/test/java/com/flickr4java/flickr/test/UploaderTest.java index e268e992..2b53823c 100644 --- a/src/test/java/com/flickr4java/flickr/test/UploaderTest.java +++ b/src/test/java/com/flickr4java/flickr/test/UploaderTest.java @@ -7,9 +7,8 @@ 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; +import com.flickr4java.flickr.uploader.Uploader; import org.junit.Test; import java.io.ByteArrayOutputStream; @@ -25,84 +24,84 @@ 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); + if (testProperties.isRealFlickr()) { + try (InputStream in = new FileInputStream(imageFile); ByteArrayOutputStream out = new ByteArrayOutputStream()) { + int b; + 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); + 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(); - // check correct handling of escaped value - metaData.setTitle("óöä"); - String photoId = uploader.upload(out.toByteArray(), metaData); + String photoId = uploader.upload("".getBytes(), 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; - } - } - } 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); - 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; + 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; + } } } - - } finally { - IOUtilities.close(in); + } else { + UploadMetaData metaData = buildPrivatePhotoMetadata(); + String photoId = uploader.upload("".getBytes(), metaData); + assertNotNull(photoId); } } /** * Test photo replace using an InputStream. - * + * * @throws IOException * @throws FlickrException */ @@ -111,100 +110,97 @@ 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); - } + if (testProperties.isRealFlickr()) { + String photoId; + try (InputStream uploadIS = new FileInputStream(imageFile)) { - InputStream replaceIS = null; - try { - replaceIS = new FileInputStream(imageFile); + // Upload a photo, which we'll replace, then delete + UploadMetaData metaData = buildPrivatePhotoMetadata(); + photoId = uploader.upload(uploadIS, metaData); + } - 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 (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; + 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; + } } } - - } finally { - IOUtilities.close(replaceIS); + } else { + UploadMetaData metaData = buildPrivatePhotoMetadata(); + String photoId = uploader.upload("".getBytes(), metaData); + assertNotNull(photoId); } } /** * 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); + if (testProperties.isRealFlickr()) { + try (InputStream in = new FileInputStream(imageFile); ByteArrayOutputStream out = new ByteArrayOutputStream()) { + int b; + while ((b = in.read()) != -1) { + out.write((byte) b); + } - 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; + // 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; + } } - } - 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; + 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; + } } } - - } finally { - IOUtilities.close(in); + } else { + UploadMetaData metaData = buildPrivatePhotoMetadata(); + String photoId = uploader.upload("".getBytes(), metaData); + assertNotNull(photoId); } } /** * Build {@link UploadMetaData} with public set to false so uploaded photos are private. - * + * * @return */ private UploadMetaData buildPrivatePhotoMetadata() { diff --git a/src/test/java/com/flickr4java/flickr/test/TestProperties.java b/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java similarity index 81% rename from src/test/java/com/flickr4java/flickr/test/TestProperties.java rename to src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java index 3be8f124..19e42ca1 100644 --- a/src/test/java/com/flickr4java/flickr/test/TestProperties.java +++ b/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java @@ -1,7 +1,6 @@ -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; @@ -19,12 +18,12 @@ * * @author Darren Greaves Copyright (c) 2012 Darren Greaves. */ -public class TestProperties { +public class FileTestProperties implements TestProperties { /** * Logger for log4j. */ - private static Logger _log = Logger.getLogger(TestProperties.class); + private static Logger _log = Logger.getLogger(FileTestProperties.class); private String host; @@ -64,13 +63,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 @@ -103,102 +113,104 @@ private void populate(Properties properties) { Collections.sort(this.photosetPhotos); } - private Properties load() { - Properties properties = new Properties(); - InputStream in = null; - String setupPropertiesPath = System.getenv("SETUP_PROPERTIES_PATH"); - - try { - if (setupPropertiesPath != null) { - _log.info("Using properties file at " + setupPropertiesPath); - in = new FileInputStream(new File(setupPropertiesPath)); - } else { - 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..febd6ac9 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java @@ -0,0 +1,490 @@ +/* + * Copyright (c) 2005 Aetrion LLC. + */ +package com.flickr4java.flickr.test.util; + +import com.flickr4java.flickr.IFlickr; +import com.flickr4java.flickr.Transport; +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 Transport 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 Transport getTransport() { + return transport; + } + + /** + * Set the Transport which must not be null. + * + * @param transport + */ + public void setTransport(Transport 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 synchronized 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 synchronized 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) { + Transport 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/src/test/java/com/flickr4java/flickr/test/Setup.java b/src/test/java/com/flickr4java/flickr/test/util/Setup.java similarity index 98% rename from src/test/java/com/flickr4java/flickr/test/Setup.java rename to src/test/java/com/flickr4java/flickr/test/util/Setup.java index a110a36e..9c543b86 100644 --- a/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; 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..d665a006 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java @@ -0,0 +1,54 @@ +package com.flickr4java.flickr.test.util; + +import org.apache.log4j.Logger; + +import java.io.File; +import java.nio.file.Paths; +import java.util.Optional; + +public class TestPropertiesFactory { + + /** + * Logger for log4j. + */ + private static Logger _log = Logger.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; + String setupPropertiesPath = System.getenv("SETUP_PROPERTIES_PATH"); + + try { + if (setupPropertiesPath != null) { + _log.debug("Using properties file at " + setupPropertiesPath); + File properties = new File(setupPropertiesPath); + fileOptional = properties.exists() ? Optional.of(properties) : Optional.empty(); + } else { + _log.debug("Using properties file /setup.properties from classpath"); + File properties = Paths.get(this.getClass().getResource("/setup.properties").toURI()).toFile(); + fileOptional = properties.exists() ? Optional.of(properties) : Optional.empty(); + } + } 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..8584b350 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java @@ -0,0 +1,89 @@ +package com.flickr4java.flickr.test.util; + +import com.flickr4java.flickr.FlickrRuntimeException; +import com.flickr4java.flickr.RESTResponse; +import com.flickr4java.flickr.Response; +import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.uploader.UploaderResponse; +import org.apache.log4j.Logger; +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 Transport { + + private static final Logger _log = Logger.getLogger(TransportStub.class); + + 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, boolean multipart) { + if (multipart) { + return loadMulitpartResponseFromFile("upload", "post"); + } else { + return loadResponseFromFile(parameters.get("method"), "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/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..769ce37f --- /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..b61cf7f2 --- /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..56d47966 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.cameras.getBrandModels.xml @@ -0,0 +1,2487 @@ + + + + + Canon EOS 5D Mark III +

+ 22.3 + 3.2 + CompactFlash, Secure Digital, SDHC, SDXC +
+ + https://farm8.staticflickr.com/7184/cameras/72157622292089908_model_small_99bff53988.jpg + https://farm8.staticflickr.com/7184/cameras/72157622292089908_model_large_497d3698ba.jpg + + + + Canon EOS 6D +
+ 20.2 + 3 + Secure Digital, SDXC, SDHC +
+ + https://farm9.staticflickr.com/8083/cameras/72157607012320362_model_small_aa23f6b999.jpg + https://farm9.staticflickr.com/8083/cameras/72157607012320362_model_large_ceb47a4e39.jpg + +
+ + Canon EOS 5D Mark II +
+ 21.1 + 3 + CompactFlash (CF) Card +
+ + https://farm4.staticflickr.com/3154/cameras/72157607348761901_model_small_a874952616.jpg + https://farm4.staticflickr.com/3154/cameras/72157607348761901_model_large_97198e11ef.jpg + +
+ + Canon EOS 7D MARK II + + https://farm8.staticflickr.com/7467/cameras/72157644861391679_model_small_68f69eec3f.jpg + https://farm8.staticflickr.com/7467/cameras/72157644861391679_model_large_12fcf1403e.jpg + + + + CANON EOS 5D MARK IV + + + Canon EOS 70D +
+ 20.2 + 3 + Secure Digital, SDXC, SDHC +
+ + https://farm8.staticflickr.com/7440/cameras/72157633273873695_model_small_e17b51707b.jpg + https://farm8.staticflickr.com/7440/cameras/72157633273873695_model_large_0ac43738dc.jpg + +
+ + Canon EOS REBEL T3i +
+ 18 + 3 + Secure Digital, SDXC, SDHC +
+ + https://farm6.staticflickr.com/5035/cameras/72157625858229685_model_small_82002d6bd6.jpg + https://farm6.staticflickr.com/5035/cameras/72157625858229685_model_large_7c02ddbfe1.jpg + +
+ + Canon EOS 7D +
+ 18 + 3 + CompactFlash (CF) Card +
+ + https://farm4.staticflickr.com/3487/cameras/72157602280763141_model_small_d6e5af0712.jpg + https://farm4.staticflickr.com/3487/cameras/72157602280763141_model_large_1f77f7e0f2.jpg + +
+ + Canon EOS 80D + + https://farm8.staticflickr.com/7021/cameras/72157664130845639_model_small_0888c8b51d.jpg + https://farm8.staticflickr.com/7021/cameras/72157664130845639_model_large_4404988642.jpg + + + + Canon EOS 60D +
+ 18 + 3 + Secure Digital, SDHC, SDXC +
+ + https://farm6.staticflickr.com/5249/cameras/72157624493316109_model_small_93c8e25107.jpg + https://farm6.staticflickr.com/5249/cameras/72157624493316109_model_large_c07377e8d4.jpg + +
+ + Canon EOS 700D + + https://farm4.staticflickr.com/3828/cameras/72157632461630521_model_small_7db5f3e1ea.jpg + https://farm4.staticflickr.com/3828/cameras/72157632461630521_model_large_ebdc3e28a2.jpg + + + + Canon EOS 750D + + https://farm6.staticflickr.com/5746/cameras/72157632205837729_model_small_42e58fa967.jpg + https://farm6.staticflickr.com/5746/cameras/72157632205837729_model_large_8cb7ba6c52.jpg + + + + Canon EOS REBEL T2i +
+ 18 + 3 + SDXC, Secure Digital, SDHC +
+ + https://farm4.staticflickr.com/3369/cameras/72157623502347808_model_small_d6f54d07c8.jpg + https://farm4.staticflickr.com/3369/cameras/72157623502347808_model_large_692b09d10c.jpg + +
+ + Canon EOS REBEL T3 +
+ 12.2 + 2.7 + SDHC Memory Card +
+ + https://farm6.staticflickr.com/5280/cameras/72157625983689520_model_small_fbd9eb7715.jpg + https://farm6.staticflickr.com/5280/cameras/72157625983689520_model_large_f244f70fb6.jpg + +
+ + Canon EOS Rebel T6 + + https://farm5.staticflickr.com/4762/cameras/72157665871654952_model_small_3fb73b6dcf.jpg + https://farm5.staticflickr.com/4762/cameras/72157665871654952_model_large_fe071c3051.jpg + + + + Canon EOS REBEL T5i +
+ 18 + 3 + Secure Digital, SDHC, SDXC +
+ + https://farm3.staticflickr.com/2854/cameras/72157633291340568_model_small_a29265b941.jpg + https://farm3.staticflickr.com/2854/cameras/72157633291340568_model_large_6aa43d9736.jpg + +
+ + Canon EOS REBEL T5 +
+ 3 +
+ + https://farm8.staticflickr.com/7531/cameras/72157642353970835_model_small_b3f1ecb638.jpg + https://farm8.staticflickr.com/7531/cameras/72157642353970835_model_large_359a3f62ee.jpg + +
+ + Canon EOS 6D Mark II + + https://farm1.staticflickr.com/819/cameras/72157662779818774_model_small_b1ed20e0a1.jpg + https://farm1.staticflickr.com/819/cameras/72157662779818774_model_large_c2d76f60af.jpg + + + + Canon EOS REBEL T1i +
+ 15.1 + 3 + Secure Digital, SDHC +
+ + https://farm3.staticflickr.com/2456/cameras/72157617313528954_model_small_aa0037849d.jpg + https://farm3.staticflickr.com/2456/cameras/72157617313528954_model_large_1fd8120fef.jpg + +
+ + Canon EOS-1D X +
+ 18.1 + 3.2 + CompactFlash (CF) Card +
+ + https://farm9.staticflickr.com/8174/cameras/72157629220288179_model_small_4807a929c8.jpg + https://farm9.staticflickr.com/8174/cameras/72157629220288179_model_large_9b2a9a4024.jpg + +
+ + Canon EOS Digital Rebel XSi +
+ 12.2 + 3 + Secure Digital, SDHC +
+ + https://farm3.staticflickr.com/2372/cameras/72157604225656701_model_small_c76252f106.jpg + https://farm3.staticflickr.com/2372/cameras/72157604225656701_model_large_dedb412bb3.jpg + +
+ + Canon EOS Digital Rebel XTi +
+ 1 + 2.5 + CompactFlash (CF) Card +
+ + https://farm1.staticflickr.com/119/cameras/68_model_small_201afafc2f.jpg + https://farm1.staticflickr.com/119/cameras/68_model_large_5fbbd26c3c.jpg + +
+ + Canon EOS REBEL T4i +
+ 18 + 3 + Secure Digital, SDXC, SDHC +
+ + https://farm9.staticflickr.com/8170/cameras/72157630136654636_model_small_7aa6948e95.jpg + https://farm9.staticflickr.com/8170/cameras/72157630136654636_model_large_9f1336ca57.jpg + +
+ + Canon EOS-1D X Mark II + + https://farm8.staticflickr.com/7369/cameras/72157663262267976_model_small_fe1274e6b7.jpg + https://farm8.staticflickr.com/7369/cameras/72157663262267976_model_large_a69c5c58dd.jpg + + + + Canon EOS 5D +
+ 12.8 + 2.5 + CompactFlash (CF) Card +
+ + https://farm1.staticflickr.com/111/cameras/130_model_small_9dbbe5a2b2.jpg + https://farm1.staticflickr.com/111/cameras/130_model_large_b8df029b89.jpg + +
+ + Canon EOS 1200D + + https://farm6.staticflickr.com/5608/cameras/72157640939372033_model_small_c1a3cb597a.jpg + https://farm6.staticflickr.com/5608/cameras/72157640939372033_model_large_52555f6708.jpg + + + + Canon EOS 50D +
+ 15.1 + 3 + CompactFlash (CF) Card +
+ + https://farm4.staticflickr.com/3236/cameras/72157606814096380_model_small_acfeba1dae.jpg + https://farm4.staticflickr.com/3236/cameras/72157606814096380_model_large_320ea78949.jpg + +
+ + Canon EOS 40D +
+ 10.1 + 3 + CompactFlash (CF) Card +
+ + https://farm2.staticflickr.com/1311/cameras/13483_model_small_bc865d9a17.jpg + https://farm2.staticflickr.com/1311/cameras/13483_model_large_9d618a4965.jpg + +
+ + Canon EOS Digital Rebel XS +
+ 10.1 + 2.5 + Secure Digital, SDHC +
+ + https://farm4.staticflickr.com/3290/cameras/72157605582107524_model_small_f8c3eacc3e.jpg + https://farm4.staticflickr.com/3290/cameras/72157605582107524_model_large_f2dd3c1f2b.jpg + +
+ + Canon EOS 100D + + https://farm1.staticflickr.com/651/cameras/72157623555354732_model_small_4ee35cfeb3.jpg + https://farm1.staticflickr.com/651/cameras/72157623555354732_model_large_b5dc69964d.jpg + + + + Canon PowerShot SX60 HS + + https://farm4.staticflickr.com/3700/cameras/72157647824755152_model_small_e23090b5f4.jpg + https://farm4.staticflickr.com/3700/cameras/72157647824755152_model_large_7e7e4f80c6.jpg + + + + Canon EOS 760D + + https://farm6.staticflickr.com/5762/cameras/72157651752742028_model_small_299d7bef9a.jpg + https://farm6.staticflickr.com/5762/cameras/72157651752742028_model_large_c8b8060b16.jpg + + + + Canon EOS Digital Rebel XT +
+ 8 + 1.8 + CompactFlash (CF) Card +
+ + https://farm1.staticflickr.com/110/cameras/31_model_small_7143654004.jpg + https://farm1.staticflickr.com/110/cameras/31_model_large_f11b305bdd.jpg + +
+ + Canon EOS 77D + + + Canon EOS 5DS R + + https://farm4.staticflickr.com/3817/cameras/72157650665459092_model_small_70265a1860.jpg + https://farm4.staticflickr.com/3817/cameras/72157650665459092_model_large_0272a7ab99.jpg + + + + Canon PowerShot G7 X Mark II + + + Canon PowerShot SX50 HS +
+ 12.1 + 2.8 + Secure Digital, SDXC, SDHC +
+ + https://farm9.staticflickr.com/8089/cameras/72157631606498503_model_small_e5db6a3484.jpg + https://farm9.staticflickr.com/8089/cameras/72157631606498503_model_large_17cd9b1f8e.jpg + +
+ + Canon EOS 20D +
+ 8.3 + 1.8 + CompactFlash (CF) Card +
+ + https://farm1.staticflickr.com/111/cameras/44_model_small_2cb85e48f5.jpg + https://farm1.staticflickr.com/111/cameras/44_model_large_eb72aa76ed.jpg + +
+ + Canon EOS-1D Mark IV +
+ 16.1 + 3 + SDHC Memory Card, CompactFlash, Secure Digital (SD) Card, Microdrive +
+ + https://farm3.staticflickr.com/2777/cameras/72157603810225532_model_small_e8a45a1b36.jpg + https://farm3.staticflickr.com/2777/cameras/72157603810225532_model_large_9785d9733c.jpg + +
+ + Canon EOS REBEL SL1 + + https://farm4.staticflickr.com/3786/cameras/72157633336811707_model_small_9f40643ac4.jpg + https://farm4.staticflickr.com/3786/cameras/72157633336811707_model_large_2d70d20249.jpg + + + + Canon EOS 30D +
+ 8.2 + 2.5 + CompactFlash (CF) Card +
+ + https://farm1.staticflickr.com/111/cameras/9_model_small_e4b4d029e2.jpg + https://farm1.staticflickr.com/111/cameras/9_model_large_b17d8c82c3.jpg + +
+ + Canon EOS 1Ds Mark III +
+ 21.1 + 3 + CompactFlash (CF) Card +
+ + https://farm3.staticflickr.com/2079/cameras/72157601586629334_model_small_071161b82f.jpg + https://farm3.staticflickr.com/2079/cameras/72157601586629334_model_large_9bfa056618.jpg + +
+ + Canon EOS 5Ds + + https://farm1.staticflickr.com/283/cameras/72157603423041122_model_small_7066489740.jpg + https://farm1.staticflickr.com/283/cameras/72157603423041122_model_large_ca4d89355b.jpg + + + + Canon PowerShot G7 X + + https://farm4.staticflickr.com/3676/cameras/72157645338335022_model_small_7ec3d31a3c.jpg + https://farm4.staticflickr.com/3676/cameras/72157645338335022_model_large_c815303a07.jpg + + + + Canon PowerShot SX530 HS + + https://farm8.staticflickr.com/7048/cameras/72157648098386118_model_small_7b16d1c3a6.jpg + https://farm8.staticflickr.com/7048/cameras/72157648098386118_model_large_aaf7999ccb.jpg + + + + Canon EOS M3 + + + Canon PowerShot SX720 HS + + + Canon EOS M +
+ 18 + 3 + Secure Digital, SDXC, SDHC +
+ + https://farm8.staticflickr.com/7421/cameras/72157630734034208_model_small_92bbea491c.jpg + https://farm8.staticflickr.com/7421/cameras/72157630734034208_model_large_2a60438278.jpg + +
+ + Canon PowerShot SX40 HS +
+ 12.1 + 2.7 + Secure Digital (SD) Card +
+ + https://farm8.staticflickr.com/7157/cameras/72157627707836876_model_small_d58fd3c6ff.jpg + https://farm8.staticflickr.com/7157/cameras/72157627707836876_model_large_9edd7fd023.jpg + +
+ + Canon PowerShot SX710 HS + + https://farm6.staticflickr.com/5816/cameras/72157649863292917_model_small_4e5f4385ba.jpg + https://farm6.staticflickr.com/5816/cameras/72157649863292917_model_large_9af0e169f3.jpg + + + + Canon EOS Rebel T7i + + + Canon PowerShot G16 +
+ 3 +
+ + https://farm6.staticflickr.com/5038/cameras/72157633994515034_model_small_4563648ebb.jpg + https://farm6.staticflickr.com/5038/cameras/72157633994515034_model_large_8458a45884.jpg + +
+ + Canon EOS Digital Rebel +
+ 6.3 + 1.8 + CompactFlash, Microdrive +
+ + https://farm1.staticflickr.com/99/cameras/4_model_small_0d320aed75.jpg + https://farm1.staticflickr.com/99/cameras/4_model_large_2a7e545a1e.jpg + +
+ + Canon EOS M5 + + https://farm5.staticflickr.com/4520/cameras/72157668584224581_model_small_7ccab5572f.jpg + https://farm5.staticflickr.com/4520/cameras/72157668584224581_model_large_fde021b1e9.jpg + + + + Canon PowerShot G12 +
+ 10 + 2.8 +
+ + https://farm6.staticflickr.com/5003/cameras/72157624839718693_model_small_81c526286d.jpg + https://farm6.staticflickr.com/5003/cameras/72157624839718693_model_large_b6d975e7d6.jpg + +
+ + Canon EOS 1D Mark III +
+ 10.1 + 3 + CompactFlash (CF) Card +
+ + https://farm1.staticflickr.com/222/cameras/72157600288628059_model_small_4cdfcb3773.jpg + https://farm1.staticflickr.com/222/cameras/72157600288628059_model_large_97180e7aa5.jpg + +
+ + Canon EOS 1Ds Mark II +
+ 16.7 + 2 + CompactFlash, Secure Digital, MultiMediaCard +
+ + https://farm1.staticflickr.com/121/cameras/156_model_small_a56b80a67f.jpg + https://farm1.staticflickr.com/121/cameras/156_model_large_e6b1f8216a.jpg + +
+ + Canon PowerShot SD1100 IS +
+ 8 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm3.staticflickr.com/2186/cameras/72157603983956398_model_small_b6d51a8150.jpg + https://farm3.staticflickr.com/2186/cameras/72157603983956398_model_large_c4d1e89f8d.jpg + +
+ + Canon EOS M6 + + https://farm5.staticflickr.com/4552/cameras/72157676311863712_model_small_35cc29dfba.jpg + https://farm5.staticflickr.com/4552/cameras/72157676311863712_model_large_2a969ea6f8.jpg + + + + Canon PowerShot G15 +
+ 12.1 + 3 + Secure Digital, SDXC, SDHC +
+ + https://farm9.staticflickr.com/8073/cameras/72157631669626016_model_small_b412b6f89a.jpg + https://farm9.staticflickr.com/8073/cameras/72157631669626016_model_large_aee995637e.jpg + +
+ + Canon PowerShot G10 +
+ 14.7 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3226/cameras/72157607254728807_model_small_c7595d237f.jpg + https://farm4.staticflickr.com/3226/cameras/72157607254728807_model_large_62ddda0838.jpg + +
+ + Canon PowerShot SX510 HS +
+ 3 +
+ + https://farm4.staticflickr.com/3720/cameras/72157633170380529_model_small_267d868489.jpg + https://farm4.staticflickr.com/3720/cameras/72157633170380529_model_large_1196f12423.jpg + +
+ + Canon PowerShot G9 +
+ 12.1 + 3 + MultiMediaCard, Secure Digital, SDHC +
+ + https://farm2.staticflickr.com/1189/cameras/72157601586583928_model_small_71f71758a6.jpg + https://farm2.staticflickr.com/1189/cameras/72157601586583928_model_large_3df7faed63.jpg + +
+ + Canon PowerShot SX610 HS + + https://farm8.staticflickr.com/7492/cameras/72157648049359450_model_small_3e6493e3ac.jpg + https://farm8.staticflickr.com/7492/cameras/72157648049359450_model_large_bf8a8110d6.jpg + + + + Canon PowerShot SX620 HS + + + Canon PowerShot G9 X Mark II + + + Canon PowerShot S5 IS +
+ 8 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
+ + https://farm2.staticflickr.com/1288/cameras/72157600292972439_model_small_d10462f983.jpg + https://farm2.staticflickr.com/1288/cameras/72157600292972439_model_large_33a048b67b.jpg + +
+ + Canon PowerShot SX520 HS +
+ 3 +
+ + https://farm1.staticflickr.com/416/cameras/72157646860530030_model_small_c287cae292.jpg + https://farm1.staticflickr.com/416/cameras/72157646860530030_model_large_2e679b44dd.jpg + +
+ + Canon PowerShot S95 +
+ 10 + 3 + SD/SDHC +
+ + https://farm5.staticflickr.com/4087/cameras/72157624762166562_model_small_fdc8df7c28.jpg + https://farm5.staticflickr.com/4087/cameras/72157624762166562_model_large_85e6ab9d4f.jpg + +
+ + Canon PowerShot SX730 HS + + https://farm5.staticflickr.com/4527/cameras/72157673805378274_model_small_544878b8ee.jpg + https://farm5.staticflickr.com/4527/cameras/72157673805378274_model_large_13e4637fe9.jpg + + + + Canon PowerShot S3 IS +
+ 6 + 2 + Secure Digital, MultiMediaCard +
+ + https://farm1.staticflickr.com/103/cameras/115_model_small_ec10d60f7a.jpg + https://farm1.staticflickr.com/103/cameras/115_model_large_9ffdcf70bf.jpg + +
+ + Canon PowerShot G9 X + + https://farm5.staticflickr.com/4569/cameras/72157654193429816_model_small_4ef5d73fbb.jpg + https://farm5.staticflickr.com/4569/cameras/72157654193429816_model_large_199f1a72bc.jpg + + + + Canon PowerShot SD1000 +
+ 7.1 + 2.5 + SDHC Memory Card, MultiMediaCard, Secure Digital (SD) Card +
+ + https://farm1.staticflickr.com/234/cameras/72157600291596369_model_small_9cf1a0b9c6.jpg + https://farm1.staticflickr.com/234/cameras/72157600291596369_model_large_9782e6ca80.jpg + +
+ + Canon PowerShot SX30 IS +
+ 14.1 + 2.7 +
+ + https://farm6.staticflickr.com/5249/cameras/72157624846412507_model_small_3ba18a5885.jpg + https://farm6.staticflickr.com/5249/cameras/72157624846412507_model_large_478b8f73b5.jpg + +
+ + Canon EOS 1D Mark II +
+ 8.2 + 2.5 + CompactFlash, Secure Digital (SD) Card, Microdrive +
+ + https://farm1.staticflickr.com/117/cameras/12_model_small_1242e67975.jpg + https://farm1.staticflickr.com/117/cameras/12_model_large_dfa80dabd0.jpg + +
+ + Canon PowerShot SX700 HS +
+ 3 +
+ + https://farm9.staticflickr.com/8574/cameras/72157641922172003_model_small_335e01dc78.jpg + https://farm9.staticflickr.com/8574/cameras/72157641922172003_model_large_c62a48d7c0.jpg + +
+ + Canon EOS 10D +
+ 6.3 + 1.8 + CompactFlash (CF) Card +
+ + https://farm1.staticflickr.com/105/cameras/81_model_small_4b6d829266.jpg + https://farm1.staticflickr.com/105/cameras/81_model_large_7082fc8590.jpg + +
+ + Canon PowerShot G1 X Mark II + + https://farm6.staticflickr.com/5619/cameras/72157640985213904_model_small_8d1b938d77.jpg + https://farm6.staticflickr.com/5619/cameras/72157640985213904_model_large_8454c17833.jpg + + + + Canon PowerShot S100 + + + Canon PowerShot SX260 HS +
+ 12.1 + 3 + Secure Digital (SD) Card, Secure Digital High Capacity (SDHC) Card, Secure Digital Extended Capacity (SDXC) +
+ + https://farm9.staticflickr.com/8333/cameras/72157629555712731_model_small_c08bd90398.jpg + https://farm9.staticflickr.com/8333/cameras/72157629555712731_model_large_cf014452fb.jpg + +
+ + Canon PowerShot SD1300 IS +
+ 12.1 + 2.7 + SDHC Memory Card +
+ + https://farm6.staticflickr.com/5032/cameras/72157623495818996_model_small_a77640cee0.jpg + https://farm6.staticflickr.com/5032/cameras/72157623495818996_model_large_23f998fc01.jpg + +
+ + Canon PowerShot A590 IS +
+ 8 + 2.5 + MMCplus +
+ + https://farm4.staticflickr.com/3059/cameras/72157603914408544_model_small_70f463f26f.jpg + https://farm4.staticflickr.com/3059/cameras/72157603914408544_model_large_914d992355.jpg + +
+ + Canon PowerShot S120 +
+ 3 +
+ + https://farm6.staticflickr.com/5509/cameras/72157632858905716_model_small_09c906f983.jpg + https://farm6.staticflickr.com/5509/cameras/72157632858905716_model_large_85a885e1ce.jpg + +
+ + Canon PowerShot G11 +
+ 10 + 2.8 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm3.staticflickr.com/2539/cameras/72157621971543189_model_small_1644edb612.jpg + https://farm3.staticflickr.com/2539/cameras/72157621971543189_model_large_bdefce42a8.jpg + +
+ + Canon PowerShot SX280 HS + + https://farm6.staticflickr.com/5596/cameras/72157633352455718_model_small_d946c5d9ca.jpg + https://farm6.staticflickr.com/5596/cameras/72157633352455718_model_large_0bc3ebbc33.jpg + + + + Canon PowerShot SX170 IS +
+ 3 +
+ + https://farm6.staticflickr.com/5619/cameras/72157635427421420_model_small_2ddc739862.jpg + https://farm6.staticflickr.com/5619/cameras/72157635427421420_model_large_6530dd3eac.jpg + +
+ + Canon PowerShot SX400 IS + + https://farm6.staticflickr.com/5807/cameras/72157647167111895_model_small_d02bbe89d7.jpg + https://farm6.staticflickr.com/5807/cameras/72157647167111895_model_large_cfbf3da591.jpg + + + + Canon PowerShot SD600 +
+ 6 + 2.5 + Secure Digital, MultiMediaCard +
+ + https://farm1.staticflickr.com/100/cameras/147_model_small_d4e6885dd1.jpg + https://farm1.staticflickr.com/100/cameras/147_model_large_7542357b7b.jpg + +
+ + Canon PowerShot SD1200 IS +
+ 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3303/cameras/72157615858002250_model_small_d297c2dd76.jpg + https://farm4.staticflickr.com/3303/cameras/72157615858002250_model_large_18e94049dd.jpg + +
+ + Canon PowerShot SD750 +
+ 7.1 + 3 + Secure Digital, MultiMediaCard, SDHC +
+ + https://farm1.staticflickr.com/221/cameras/72157600292482502_model_small_16de7e5ce6.jpg + https://farm1.staticflickr.com/221/cameras/72157600292482502_model_large_25b3e8c05d.jpg + +
+ + Canon PowerShot SX130 IS +
+ 12.1 + 3 + SDHX +
+ + https://farm6.staticflickr.com/5079/cameras/72157624843263664_model_small_466ca9648e.jpg + https://farm6.staticflickr.com/5079/cameras/72157624843263664_model_large_0cdf8d446b.jpg + +
+ + Canon PowerShot SX500 IS +
+ 16 + 3 + Secure Digital, SDHC +
+ + https://farm3.staticflickr.com/2826/cameras/72157631426644668_model_small_3db39a01f5.jpg + https://farm3.staticflickr.com/2826/cameras/72157631426644668_model_large_3d45443eaf.jpg + +
+ + Canon PowerShot SX240 HS + + + Canon PowerShot SX210 IS +
+ 14.1 + 3 +
+ + https://farm6.staticflickr.com/5169/cameras/72157623514846576_model_small_102da06252.jpg + https://farm6.staticflickr.com/5169/cameras/72157623514846576_model_large_ff33eaebcd.jpg + +
+ + Canon PowerShot S90 +
+ 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm3.staticflickr.com/2790/cameras/72157622037248671_model_small_599abbeea4.jpg + https://farm3.staticflickr.com/2790/cameras/72157622037248671_model_large_a3e2203efb.jpg + +
+ + Canon PowerShot SX160 IS + + + Canon EOS 1D Mark II N +
+ 8.2 + 2.5 + CompactFlash, Secure Digital (SD) Card, Microdrive +
+ + https://farm1.staticflickr.com/122/cameras/792_model_small_79b90ff356.jpg + https://farm1.staticflickr.com/122/cameras/792_model_large_ae86ccf632.jpg + +
+ + Canon PowerShot G1 X +
+ 14.3 + 3 + Secure Digital, SDHC, SDXC +
+ + https://farm9.staticflickr.com/8314/cameras/72157628828372835_model_small_198698201c.jpg + https://farm9.staticflickr.com/8314/cameras/72157628828372835_model_large_a3c965c325.jpg + +
+ + Canon PowerShot S110 + + + Canon PowerShot SD780 IS +
+ 12.1 + 2.5 + SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3540/cameras/72157615260423184_model_small_bc5565c8b7.jpg + https://farm4.staticflickr.com/3540/cameras/72157615260423184_model_large_f0a803b0fc.jpg + +
+ + Canon PowerShot S2 IS +
+ 5 + 1.8 + Secure Digital (SD) Card +
+ + https://farm1.staticflickr.com/99/cameras/73_model_small_54db2b6032.jpg + https://farm1.staticflickr.com/99/cameras/73_model_large_b8912b2c1e.jpg + +
+ + Canon PowerShot SX20 IS +
+ 12.1 + 2.5 + MultiMediaCard (MMC) +
+ + https://farm3.staticflickr.com/2724/cameras/72157622054003161_model_small_fa47de9a45.jpg + https://farm3.staticflickr.com/2724/cameras/72157622054003161_model_large_84bc659ebc.jpg + +
+ + Canon PowerShot SD870 IS +
+ 8 + 3 + Secure Digital, MultiMediaCard, SDHC +
+ + https://farm2.staticflickr.com/1022/cameras/72157601661637005_model_small_8e99150a47.jpg + https://farm2.staticflickr.com/1022/cameras/72157601661637005_model_large_778c7a6f7f.jpg + +
+ + Canon PowerShot A2300 +
+ 16 + 2.7 + Secure Digital, SDHC, SDXC +
+ + https://farm9.staticflickr.com/8495/cameras/72157629682877859_model_small_0e76052de3.jpg + https://farm9.staticflickr.com/8495/cameras/72157629682877859_model_large_512c829f1c.jpg + +
+ + Canon PowerShot A2500 +
+ 2.7 +
+ + https://farm6.staticflickr.com/5530/cameras/72157633211759483_model_small_fdf71aaa57.jpg + https://farm6.staticflickr.com/5530/cameras/72157633211759483_model_large_068f77cbc8.jpg + +
+ + Canon PowerShot SX230 HS + + https://farm7.staticflickr.com/6029/cameras/72157626107421899_model_small_fe96996285.jpg + https://farm7.staticflickr.com/6029/cameras/72157626107421899_model_large_3b15049271.jpg + + + + Canon PowerShot SX200 IS +
+ 12.1 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3382/cameras/72157615327177137_model_small_c923617fcf.jpg + https://farm4.staticflickr.com/3382/cameras/72157615327177137_model_large_e2585949a3.jpg + +
+ + Canon PowerShot SX10 IS +
+ 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3368/cameras/72157607394786554_model_small_cd7b8479c5.jpg + https://farm4.staticflickr.com/3368/cameras/72157607394786554_model_large_472ea85a5a.jpg + +
+ + Canon PowerShot SD1400 IS +
+ 12 +
+ + https://farm7.staticflickr.com/6023/cameras/72157623403735861_model_small_7b6eef712c.jpg + https://farm7.staticflickr.com/6023/cameras/72157623403735861_model_large_6377095b94.jpg + +
+ + Canon PowerShot A520 +
+ 4 + 1.8 + MultiMediaCard, Secure Digital (SD) Card +
+ + https://farm1.staticflickr.com/108/cameras/113_model_small_3c4e2b476c.jpg + https://farm1.staticflickr.com/108/cameras/113_model_large_a8ae50aaa2.jpg + +
+ + Canon PowerShot SX150 IS +
+ 14.1 + 3 + Secure Digital (SD) Card +
+ + https://farm9.staticflickr.com/8040/cameras/72157627401052221_model_small_27ede7c032.jpg + https://farm9.staticflickr.com/8040/cameras/72157627401052221_model_large_a88fcd5700.jpg + +
+ + Canon PowerShot SX600 HS +
+ 3 +
+ + https://farm4.staticflickr.com/3735/cameras/72157642221879684_model_small_dc7d3c59ee.jpg + https://farm4.staticflickr.com/3735/cameras/72157642221879684_model_large_206c3e1651.jpg + +
+ + Canon EOS M100 + + https://farm5.staticflickr.com/4552/cameras/72157683011558521_model_small_c108ba4596.jpg + https://farm5.staticflickr.com/4552/cameras/72157683011558521_model_large_6958cc8184.jpg + + + + Canon PowerShot SD800 IS +
+ 7.1 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
+ + https://farm1.staticflickr.com/100/cameras/3506_model_small_baa4b8be11.jpg + https://farm1.staticflickr.com/100/cameras/3506_model_large_9fba9d5611.jpg + +
+ + Canon PowerShot A2200 +
+ 14.1 +
+ + https://farm6.staticflickr.com/5278/cameras/72157626006484232_model_small_32fb85f79e.jpg + https://farm6.staticflickr.com/5278/cameras/72157626006484232_model_large_7de50bc2d5.jpg + +
+ + Canon PowerShot A710 IS +
+ 7.1 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
+ + https://farm1.staticflickr.com/100/cameras/928_model_small_687bc868ed.jpg + https://farm1.staticflickr.com/100/cameras/928_model_large_863d565f23.jpg + +
+ + Canon PowerShot SD850 IS +
+ 8 + 2.5 + Secure Digital, MultiMediaCard +
+ + https://farm2.staticflickr.com/1001/cameras/72157600316000762_model_small_a83286a964.jpg + https://farm2.staticflickr.com/1001/cameras/72157600316000762_model_large_1970b12f6c.jpg + +
+ + Canon PowerShot ELPH 100 HS + + https://farm7.staticflickr.com/6058/cameras/72157626077723737_model_small_422bc9313f.jpg + https://farm7.staticflickr.com/6058/cameras/72157626077723737_model_large_e95bc5563a.jpg + + + + Canon PowerShot SX120 IS +
+ 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm3.staticflickr.com/2594/cameras/72157622008716929_model_small_7acbfb860f.jpg + https://farm3.staticflickr.com/2594/cameras/72157622008716929_model_large_730372a5d9.jpg + +
+ + Canon PowerShot A560 +
+ 7.1 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
+ + https://farm1.staticflickr.com/201/cameras/72157600291685735_model_small_c81b932be3.jpg + https://farm1.staticflickr.com/201/cameras/72157600291685735_model_large_6bcd9d3efc.jpg + +
+ + Canon PowerShot A540 +
+ 6 + 2.5 + MultiMediaCard, Secure Digital +
+ + https://farm1.staticflickr.com/109/cameras/21_model_small_4595d398d7.jpg + https://farm1.staticflickr.com/109/cameras/21_model_large_511e5c2f88.jpg + +
+ + Canon PowerShot SX110 IS +
+ 9 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3319/cameras/72157607097240125_model_small_89b9359b0a.jpg + https://farm4.staticflickr.com/3319/cameras/72157607097240125_model_large_37bf0a0285.jpg + +
+ + Canon PowerShot SD630 +
+ 6 + 3 + MultiMediaCard, Secure Digital (SD) Card +
+ + https://farm1.staticflickr.com/100/cameras/380_model_small_ced61150f3.jpg + https://farm1.staticflickr.com/100/cameras/380_model_large_aa27b87301.jpg + +
+ + Canon PowerShot A70 + + https://farm2.staticflickr.com/1396/cameras/331_model_small_fd6c5d9f6e.jpg + https://farm2.staticflickr.com/1396/cameras/331_model_large_2a908d5d29.jpg + + + + Canon PowerShot A620 +
+ 7.1 + 2 + Secure Digital, MultiMediaCard +
+ + https://farm1.staticflickr.com/107/cameras/134_model_small_92eeb17022.jpg + https://farm1.staticflickr.com/107/cameras/134_model_large_d1c1e2d3df.jpg + +
+ + Canon EOS 1DS +
+ 11.1 + 2 + CompactFlash +
+ + https://farm1.staticflickr.com/115/cameras/541_model_small_8bf11ebe60.jpg + https://farm1.staticflickr.com/115/cameras/541_model_large_f104299b9c.jpg + +
+ + Canon PowerShot SD400 +
+ 5 + 2 + Secure Digital (SD) Card +
+ + https://farm1.staticflickr.com/101/cameras/30_model_small_ba4763b423.jpg + https://farm1.staticflickr.com/101/cameras/30_model_large_464f18fc8a.jpg + +
+ + Canon PowerShot A720 IS +
+ 8 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
+ + https://farm2.staticflickr.com/1342/cameras/72157601700908638_model_small_ffa204741b.jpg + https://farm2.staticflickr.com/1342/cameras/72157601700908638_model_large_c5f41eec0b.jpg + +
+ + Canon PowerShot SD450 +
+ 5 + 2.5 + Secure Digital, MultiMediaCard +
+ + https://farm1.staticflickr.com/114/cameras/64_model_small_fa1065b7b6.jpg + https://farm1.staticflickr.com/114/cameras/64_model_large_35994d68f5.jpg + +
+ + Canon PowerShot A95 +
+ 5 + 1.8 + CompactFlash +
+ + https://farm1.staticflickr.com/107/cameras/58_model_small_1e7955211c.jpg + https://farm1.staticflickr.com/107/cameras/58_model_large_2f415e825f.jpg + +
+ + Canon EOS 650D + + https://farm6.staticflickr.com/5681/cameras/72157658988031402_model_small_84fd539622.jpg + https://farm6.staticflickr.com/5681/cameras/72157658988031402_model_large_3b9e33f1d9.jpg + + + + Canon PowerShot SD550 +
+ 7.1 + 2.5 + Secure Digital, MultiMediaCard +
+ + https://farm1.staticflickr.com/122/cameras/482_model_small_f8b4bfe6d8.jpg + https://farm1.staticflickr.com/122/cameras/482_model_large_033233faac.jpg + +
+ + Canon PowerShot A570 IS +
+ 7.1 + 2.5 + MultiMediaCard, Secure Digital, SDHC +
+ + https://farm9.staticflickr.com/8031/cameras/72157600291595413_model_small_4f322f47a2.jpg + https://farm9.staticflickr.com/8031/cameras/72157600291595413_model_large_d7bed7b9d9.jpg + +
+ + Canon PowerShot A3100 IS +
+ 12 +
+
+ + Canon PowerShot SX220 HS + + https://farm6.staticflickr.com/5620/cameras/72157626120402661_model_small_2d8ae30536.jpg + https://farm6.staticflickr.com/5620/cameras/72157626120402661_model_large_16f4ed2c3f.jpg + + + + Canon PowerShot SD700 IS +
+ 6 + 2.5 + Secure Digital, MultiMediaCard +
+ + https://farm1.staticflickr.com/122/cameras/432_model_small_08e9751d7e.jpg + https://farm1.staticflickr.com/122/cameras/432_model_large_137b141680.jpg + +
+ + Canon PowerShot A3300 IS +
+ 16 + 3 + Secure Digital (SD) Card +
+ + https://farm9.staticflickr.com/8313/cameras/72157626169050894_model_small_9024e25b64.jpg + https://farm9.staticflickr.com/8313/cameras/72157626169050894_model_large_11c60be00c.jpg + +
+ + Canon PowerShot A610 +
+ 5 + 2 + Secure Digital, MultiMediaCard +
+ + https://farm1.staticflickr.com/107/cameras/295_model_small_ec60d819ec.jpg + https://farm1.staticflickr.com/107/cameras/295_model_large_b9f67ef906.jpg + +
+ + Canon PowerShot G2 +
+ 4 + 1.8 + CompactFlash (CF) Card +
+ + https://farm9.staticflickr.com/8310/cameras/42_model_small_53424d7981.jpg + https://farm9.staticflickr.com/8310/cameras/42_model_large_e48879fba0.jpg + +
+ + Canon PowerShot SD960 IS +
+ 12.1 + 2.8 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3542/cameras/72157615260434668_model_small_068dd2b166.jpg + https://farm4.staticflickr.com/3542/cameras/72157615260434668_model_large_bddd57f961.jpg + +
+ + Canon PowerShot SX100 IS +
+ 8 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
+ + https://farm3.staticflickr.com/2400/cameras/72157602254956013_model_small_c7fc8218ed.jpg + https://farm3.staticflickr.com/2400/cameras/72157602254956013_model_large_ca3276f712.jpg + +
+ + Canon PowerShot SD790 IS +
+ 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm3.staticflickr.com/2234/cameras/72157604206177666_model_small_61519d019b.jpg + https://farm3.staticflickr.com/2234/cameras/72157604206177666_model_large_fe0abf6ac8.jpg + +
+ + Canon PowerShot A630 +
+ 8 + 2.5 + MultiMediaCard, Secure Digital, SDHC +
+ + https://farm1.staticflickr.com/118/cameras/880_model_small_f621539dd2.jpg + https://farm1.staticflickr.com/118/cameras/880_model_large_f447184173.jpg + +
+ + Canon PowerShot A4000 IS +
+ 16 + 3 + Secure Digital, SDHC, SDXC +
+ + https://farm9.staticflickr.com/8234/cameras/72157629690121413_model_small_c3674f9a04.jpg + https://farm9.staticflickr.com/8234/cameras/72157629690121413_model_large_fd69104134.jpg + +
+ + Canon PowerShot G5 + + + Canon PowerShot A1100 IS +
+ 12.1 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3403/cameras/72157614912551863_model_small_6c2707008a.jpg + https://farm4.staticflickr.com/3403/cameras/72157614912551863_model_large_3870e9c623.jpg + +
+ + Canon PowerShot ELPH 110 HS +
+ 3 +
+ + https://farm9.staticflickr.com/8491/cameras/72157629310448342_model_small_cd14d2b324.jpg + https://farm9.staticflickr.com/8491/cameras/72157629310448342_model_large_d505d94f18.jpg + +
+ + Canon PowerShot A1000 IS +
+ 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3474/cameras/72157607149127437_model_small_ea9ae41258.jpg + https://farm4.staticflickr.com/3474/cameras/72157607149127437_model_large_c274e4a031.jpg + +
+ + Canon PowerShot A430 +
+ 4 + 1.8 + MultiMediaCard, Secure Digital (SD) Card +
+ + https://farm1.staticflickr.com/122/cameras/7_model_small_b345a26c77.jpg + https://farm1.staticflickr.com/122/cameras/7_model_large_377848c90e.jpg + +
+ + Canon PowerShot S400 + + https://farm2.staticflickr.com/1314/cameras/533_model_small_d595a3f690.jpg + https://farm2.staticflickr.com/1314/cameras/533_model_large_9c8688c05a.jpg + + + + Canon PowerShot A80 + + + Canon PowerShot S500 +
+ 5 + 1.5 + Secure Digital (SD) Card +
+ + https://farm1.staticflickr.com/113/cameras/311_model_small_8f0b9890f5.jpg + https://farm1.staticflickr.com/113/cameras/311_model_large_7d733573e9.jpg + +
+ + Canon PowerShot SD770 IS +
+ 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3223/cameras/72157604597339286_model_small_4e767448d9.jpg + https://farm4.staticflickr.com/3223/cameras/72157604597339286_model_large_c7c345de36.jpg + +
+ + Canon PowerShot G3 +
+ 4 + 1.8 + CompactFlash (CF) Card +
+ + https://farm9.staticflickr.com/8321/cameras/168_model_small_f86db7018f.jpg + https://farm9.staticflickr.com/8321/cameras/168_model_large_bf37ba94b6.jpg + +
+ + Canon PowerShot SD500 +
+ 7.1 + 2 + Secure Digital (SD) Card +
+ + https://farm1.staticflickr.com/111/cameras/413_model_small_cde2faea24.jpg + https://farm1.staticflickr.com/111/cameras/413_model_large_9eff7352b6.jpg + +
+ + Canon PowerShot A480 +
+ 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3652/cameras/72157613371182459_model_small_8f00044538.jpg + https://farm4.staticflickr.com/3652/cameras/72157613371182459_model_large_6f9d21111d.jpg + +
+ + Canon PowerShot Pro1 +
+ 8 + 2 + CompactFlash +
+ + https://farm1.staticflickr.com/118/cameras/279_model_small_e6281ed159.jpg + https://farm1.staticflickr.com/118/cameras/279_model_large_ac13e907a7.jpg + +
+ + Canon PowerShot A400 + + + Canon PowerShot SD900 +
+ 10 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
+ + https://farm1.staticflickr.com/109/cameras/2705_model_small_e4e7c5e7df.jpg + https://farm1.staticflickr.com/109/cameras/2705_model_large_af0d96d561.jpg + +
+ + Canon PowerShot SD110 + + + Canon EOS M2 + + https://farm1.staticflickr.com/681/cameras/72157638486651333_model_small_dd694f802b.jpg + https://farm1.staticflickr.com/681/cameras/72157638486651333_model_large_ee0838b78e.jpg + + + + Canon PowerShot A550 +
+ 7.1 + 2 + MultiMediaCard, Secure Digital, SDHC +
+ + https://farm1.staticflickr.com/252/cameras/72157600289383418_model_small_0ee0a7e545.jpg + https://farm1.staticflickr.com/252/cameras/72157600289383418_model_large_b029991d3d.jpg + +
+ + Canon PowerShot SD950 IS +
+ 12.1 + 2.5 + MultiMediaCard, Secure Digital +
+ + https://farm3.staticflickr.com/2068/cameras/72157602219148731_model_small_d208e9a3b0.jpg + https://farm3.staticflickr.com/2068/cameras/72157602219148731_model_large_95eacd033f.jpg + +
+ + Canon PowerShot SD200 + + + Canon PowerShot SD300 +
+ 4 + 2 + Secure Digital (SD) Card +
+ + https://farm1.staticflickr.com/109/cameras/192_model_small_dc3c6ec0b9.jpg + https://farm1.staticflickr.com/109/cameras/192_model_large_d808fc3fb6.jpg + +
+ + Canon IXUS 220HS + + + Canon PowerShot A470 +
+ 7.1 + 2.5 + Secure Digital (SD) Card +
+ + https://farm3.staticflickr.com/2099/cameras/72157604008953746_model_small_ab3a0c68fb.jpg + https://farm3.staticflickr.com/2099/cameras/72157604008953746_model_large_5b25b77672.jpg + +
+ + Canon PowerShot D10 +
+ 12.1 + 2.5 + Secure Digital (SD) Card +
+ + https://farm4.staticflickr.com/3488/cameras/72157616911061933_model_small_e0ca711a7f.jpg + https://farm4.staticflickr.com/3488/cameras/72157616911061933_model_large_cc00846c64.jpg + +
+ + Canon PowerShot A75 +
+ 3.2 + 1.8 + CompactFlash +
+ + https://farm1.staticflickr.com/114/cameras/53_model_small_1358fa386c.jpg + https://farm1.staticflickr.com/114/cameras/53_model_large_83792310b4.jpg + +
+ + Canon PowerShot S50 + + + Canon PowerShot A510 +
+ 3.2 + 1.8 + MultiMediaCard, Secure Digital +
+ + https://farm2.staticflickr.com/1436/cameras/103_model_small_b132094ab0.jpg + https://farm2.staticflickr.com/1436/cameras/103_model_large_f8b0f7772c.jpg + +
+ + Canon PowerShot A530 +
+ 5 + 1.8 + MultiMediaCard, Secure Digital +
+ + https://farm1.staticflickr.com/117/cameras/303_model_small_85ec2a9970.jpg + https://farm1.staticflickr.com/117/cameras/303_model_large_90dd997c32.jpg + +
+ + Canon EOS D60 + + + Canon PowerShot A640 +
+ 10 + 2.5 + MultiMediaCard, Secure Digital, SDHC +
+ + https://farm1.staticflickr.com/114/cameras/1317_model_small_82221e6d98.jpg + https://farm1.staticflickr.com/114/cameras/1317_model_large_5c7290e792.jpg + +
+ + Canon PowerShot ELPH 300HS +
+ 12.1 + 2.7 + MultiMediaCard, Secure Digital, SDXC, SDHC +
+ + https://farm9.staticflickr.com/8309/cameras/72157626177410605_model_small_384a9a5bf2.jpg + https://farm9.staticflickr.com/8309/cameras/72157626177410605_model_large_ac6be593a2.jpg + +
+ + Canon EOS 1D + + + Canon PowerShot A85 +
+ 4 + 1.8 + CompactFlash (CF) Card +
+ + https://farm2.staticflickr.com/1389/cameras/123_model_small_64e30bc0c3.jpg + https://farm2.staticflickr.com/1389/cameras/123_model_large_6a55c4cc59.jpg + +
+ + Canon PowerShot S45 +
+ 4 + 1.8 + CompactFlash (CF) Card +
+ + https://farm9.staticflickr.com/8175/cameras/373_model_small_f2002e4d4c.jpg + https://farm9.staticflickr.com/8175/cameras/373_model_large_8d345e31a2.jpg + +
+ + Canon PowerShot S30 +
+ 3.2 + 1.8 + CompactFlash (CF) Card +
+ + https://farm9.staticflickr.com/8173/cameras/681_model_small_b801bc3de5.jpg + https://farm9.staticflickr.com/8173/cameras/681_model_large_fc4c035a37.jpg + +
+ + Canon PowerShot G1 + + + Canon PowerShot G7 +
+ 10 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
+ + https://farm1.staticflickr.com/122/cameras/24369_model_small_cc7df00614.jpg + https://farm1.staticflickr.com/122/cameras/24369_model_large_e18440c1ed.jpg + +
+ + Canon PowerShot SD880 IS +
+ 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3347/cameras/72157607803563543_model_small_f054e019cf.jpg + https://farm4.staticflickr.com/3347/cameras/72157607803563543_model_large_b23b35ef33.jpg + +
+ + Canon PowerShot S200 + + + Canon PowerShot A40 + + + Canon PowerShot G6 +
+ 7.1 + 2 + CompactFlash (CF) Card +
+ + https://farm1.staticflickr.com/120/cameras/306_model_small_10710a51a3.jpg + https://farm1.staticflickr.com/120/cameras/306_model_large_1cbfb40949.jpg + +
+ + Canon PowerShot A650 IS +
+ 12.1 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
+ + https://farm2.staticflickr.com/1226/cameras/72157601891740240_model_small_935ab686ff.jpg + https://farm2.staticflickr.com/1226/cameras/72157601891740240_model_large_010a6f6998.jpg + +
+ + Canon PowerShot SD990 IS +
+ 14.7 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3461/cameras/72157607826378076_model_small_570b3e63da.jpg + https://farm4.staticflickr.com/3461/cameras/72157607826378076_model_large_57edfd2df8.jpg + +
+ + Canon PowerShot A495 + + https://farm6.staticflickr.com/5314/cameras/72157623248701455_model_small_866f79da99.jpg + https://farm6.staticflickr.com/5314/cameras/72157623248701455_model_large_d76121e78f.jpg + + + + Canon PowerShot A490 +
+ 10 +
+
+ + Canon PowerShot S70 +
+ 7.1 + 1.8 + CompactFlash +
+ + https://farm1.staticflickr.com/110/cameras/70_model_small_74b4f1d550.jpg + https://farm1.staticflickr.com/110/cameras/70_model_large_f9711ed374.jpg + +
+ + Canon PowerShot S430 + + + Canon EOS D30 + + + Canon PowerShot ELPH 300 HS +
+ 12 +
+ + https://farm7.staticflickr.com/6004/cameras/72157626133707081_model_small_fd24fe9a5f.jpg + https://farm7.staticflickr.com/6004/cameras/72157626133707081_model_large_5789bb40d6.jpg + +
+ + Canon PowerShot SX1 IS +
+ 10 + 2.8 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3580/cameras/72157607398275267_model_small_506f6616ce.jpg + https://farm4.staticflickr.com/3580/cameras/72157607398275267_model_large_533d29fcab.jpg + +
+ + Canon PowerShot A460 +
+ 5 + 2 + MultiMediaCard, Secure Digital, SDHC +
+ + https://farm1.staticflickr.com/228/cameras/72157600289350296_model_small_7fbe5bacab.jpg + https://farm1.staticflickr.com/228/cameras/72157600289350296_model_large_4a22860b7c.jpg + +
+ + Canon PowerShot S230 + + + Canon PowerShot S1 IS +
+ 3.2 + 1.5 + CompactFlash +
+ + https://farm1.staticflickr.com/116/cameras/445_model_small_a6791e4c0a.jpg + https://farm1.staticflickr.com/116/cameras/445_model_large_7499eb1668.jpg + +
+ + Canon PowerShot A3000 IS + + https://farm7.staticflickr.com/6015/cameras/72157623337752577_model_small_ff326581e0.jpg + https://farm7.staticflickr.com/6015/cameras/72157623337752577_model_large_fa3577dc49.jpg + + + + Canon PowerShot A1200 +
+ 12.1 + 2.7 + SD/SDHC/SDXC +
+ + https://farm8.staticflickr.com/7178/cameras/72157626100347637_model_small_98281cf6c9.jpg + https://farm8.staticflickr.com/7178/cameras/72157626100347637_model_large_5815e8dea2.jpg + +
+ + Canon PowerShot A700 +
+ 6 + 2.5 + MultiMediaCard, Secure Digital +
+ + https://farm1.staticflickr.com/118/cameras/24_model_small_82f9fe11cf.jpg + https://farm1.staticflickr.com/118/cameras/24_model_large_9a1ac4b633.jpg + +
+ + Canon PowerShot SD100 + + + Canon PowerShot S60 +
+ 5 + 1.8 + CompactFlash (CF) Card +
+ + https://farm1.staticflickr.com/121/cameras/319_model_small_b6503c5e8f.jpg + https://farm1.staticflickr.com/121/cameras/319_model_large_a74142fbbb.jpg + +
+ + Canon PowerShot SD30 +
+ 5 + 1.8 + Secure Digital, MultiMediaCard +
+ + https://farm1.staticflickr.com/100/cameras/329_model_small_ca1aa2959e.jpg + https://farm1.staticflickr.com/100/cameras/329_model_large_ab5abc906b.jpg + +
+ + Canon PowerShot A580 +
+ 8 + 2.5 + MMCplus +
+ + https://farm3.staticflickr.com/2017/cameras/72157604000068487_model_small_11826b37d5.jpg + https://farm3.staticflickr.com/2017/cameras/72157604000068487_model_large_57e09b15a2.jpg + +
+ + Canon PowerShot A60 + + + Canon PowerShot SD890 IS +
+ 10 + 2.5 + MultiMediaCard, Secure Digital, SDHC +
+ + https://farm4.staticflickr.com/3213/cameras/72157604325182497_model_small_37aa89e826.jpg + https://farm4.staticflickr.com/3213/cameras/72157604325182497_model_large_80e15aacfd.jpg + +
+ + Canon PowerShot A410 +
+ 3.2 + 1.5 + MultiMediaCard, Secure Digital +
+ + https://farm1.staticflickr.com/113/cameras/18_model_small_4e47ea423d.jpg + https://farm1.staticflickr.com/113/cameras/18_model_large_dc8a8ee8b3.jpg + +
+ + Canon PowerShot SD10 +
+ 4 + 1.5 + Secure Digital, MultiMediaCard +
+ + https://farm1.staticflickr.com/102/cameras/345_model_small_727b7fb8a6.jpg + https://farm1.staticflickr.com/102/cameras/345_model_large_0640966e76.jpg + +
+ + Canon PowerShot S80 +
+ 8 + 2.5 + Secure Digital, MultiMediaCard +
+ + https://farm1.staticflickr.com/121/cameras/162_model_small_e1565c67c9.jpg + https://farm1.staticflickr.com/121/cameras/162_model_large_571ee7b4bd.jpg + +
+ + Canon PowerShot A310 + + + Canon PowerShot S40 + + + Canon PowerShot A2000 IS +
+ 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm9.staticflickr.com/8038/cameras/72157607272610511_model_small_ffc16364ec.jpg + https://farm9.staticflickr.com/8038/cameras/72157607272610511_model_large_c3440fdc55.jpg + +
+ + Canon IXUS 300 HS + + https://farm7.staticflickr.com/6011/cameras/72157624136191544_model_small_c8c1f1020d.jpg + https://farm7.staticflickr.com/6011/cameras/72157624136191544_model_large_0d9be374a0.jpg + + + + Canon PowerShot A20 + + + Canon PowerShot S300 + + + Canon PowerShot E1 +
+ 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm4.staticflickr.com/3664/cameras/72157607584729571_model_small_19dc0473cb.jpg + https://farm4.staticflickr.com/3664/cameras/72157607584729571_model_large_ef505b6354.jpg + +
+ + Canon PowerShot A200 + + + Canon PowerShot A2100 IS +
+ 12.1 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm3.staticflickr.com/2719/cameras/72157615813690609_model_small_85a05a0580.jpg + https://farm3.staticflickr.com/2719/cameras/72157615813690609_model_large_5c483e0981.jpg + +
+ + Canon PowerShot A50 + + + Canon PowerShot SD980 IS +
+ 12.1 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm3.staticflickr.com/2594/cameras/72157622084783391_model_small_1558771e45.jpg + https://farm3.staticflickr.com/2594/cameras/72157622084783391_model_large_05e2884fe1.jpg + +
+ + Canon PowerShot A420 + + + Canon PowerShot SD940 IS +
+ 12.1 + 2.7 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm3.staticflickr.com/2669/cameras/72157622084755657_model_small_1eaf6702b9.jpg + https://farm3.staticflickr.com/2669/cameras/72157622084755657_model_large_b543294bc4.jpg + +
+ + Canon PowerShot S410 +
+ 4 + 1.5 + CompactFlash (CF) Card +
+ + https://farm1.staticflickr.com/112/cameras/49_model_small_a82d562b14.jpg + https://farm1.staticflickr.com/112/cameras/49_model_large_f7c124120b.jpg + +
+ + Canon PowerShot A300 + + + Canon PowerShot SD3500 IS +
+ 14.1 +
+
+ + Canon PowerShot SD20 +
+ 5 + 1.5 + Secure Digital (SD) Card +
+ + https://farm1.staticflickr.com/101/cameras/1056_model_small_0fe1cb84e6.jpg + https://farm1.staticflickr.com/101/cameras/1056_model_large_c3b3853158.jpg + +
+ + Canon PowerShot S20 + + + Canon PowerShot S330 + + + Canon PowerShot S10 + + + Canon PowerShot A10 + + + Canon PowerShot A450 + + + Canon PowerShot Pro90 IS +
+ 3.2 + 1.8 + CompactFlash (CF) Card +
+ + https://farm1.staticflickr.com/101/cameras/1792_model_small_6ca66ff1ac.jpg + https://farm1.staticflickr.com/101/cameras/1792_model_large_2654c5d5de.jpg + +
+ + Canon PowerShot SD970 IS +
+ 12.1 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
+ + https://farm3.staticflickr.com/2674/cameras/72157616347164661_model_small_3f4b234723.jpg + https://farm3.staticflickr.com/2674/cameras/72157616347164661_model_large_886fd1e530.jpg + +
+ + Canon PowerShot SD40 +
+ 7.1 + 1.8 + Secure Digital, MultiMediaCard, SDHC +
+ + https://farm1.staticflickr.com/120/cameras/50047_model_small_07b3b7b4c4.jpg + https://farm1.staticflickr.com/120/cameras/50047_model_large_21ac845732.jpg + +
+ + Canon PowerShot TX1 +
+ 7.1 + 1.8 + MultiMediaCard, Secure Digital, SDHC +
+ + https://farm1.staticflickr.com/195/cameras/72157600293208250_model_small_264ea2a837.jpg + https://farm1.staticflickr.com/195/cameras/72157600293208250_model_large_d7a965d3fb.jpg + +
+ + Canon PowerShot A100 + + + Canon HV20 +
+ 2.7 +
+ + https://farm3.staticflickr.com/2081/cameras/72157600292920852_model_small_08ffbdf604.jpg + https://farm3.staticflickr.com/2081/cameras/72157600292920852_model_large_3175d743e7.jpg + +
+ + Canon PowerShot A30 + + + Canon Optura 300 + + + Canon Optura 20 + + + Canon ZR70 MC + + + Canon ZR200 +
+ 2.4 +
+ + https://farm1.staticflickr.com/104/cameras/834_model_small_32d5d5661c.jpg + https://farm1.staticflickr.com/104/cameras/834_model_large_0e0c1b4558.jpg + +
+ + Canon DC10 +
+ 2.5 +
+ + https://farm2.staticflickr.com/1147/cameras/1556_model_small_4687e277f0.jpg + https://farm2.staticflickr.com/1147/cameras/1556_model_large_22f4d11350.jpg + +
+ + Canon PowerShot SD430 Wireless +
+ 5 + 2 + Secure Digital, MultiMediaCard +
+ + https://farm1.staticflickr.com/108/cameras/414_model_small_ecb3329329.jpg + https://farm1.staticflickr.com/108/cameras/414_model_large_a004c60da3.jpg + +
+ + Canon Optura 600 +
+ 2.5 +
+ + https://farm1.staticflickr.com/116/cameras/2644_model_small_2b31ee6a72.jpg + https://farm1.staticflickr.com/116/cameras/2644_model_large_c99852498a.jpg + +
+ + Canon HV10 +
+ 2.7 +
+ + https://farm1.staticflickr.com/101/cameras/4250_model_small_0587b2f1d4.jpg + https://farm1.staticflickr.com/101/cameras/4250_model_large_485d09c770.jpg + +
+ + Canon Optura 200 MC + + + Canon ZR85 +
+ 2.5 +
+ + https://farm1.staticflickr.com/118/cameras/2031_model_small_23f714666e.jpg + https://farm1.staticflickr.com/118/cameras/2031_model_large_b853e28789.jpg + +
+ + Canon Elura 70 + + + Canon DC100 +
+ 2.7 +
+ + https://farm1.staticflickr.com/116/cameras/2732_model_small_36ae667f4a.jpg + https://farm1.staticflickr.com/116/cameras/2732_model_large_068d35c572.jpg + +
+ + Canon ZR90 + + + Canon Elura 60 + + https://farm1.staticflickr.com/113/cameras/3243_model_small_7171eda644.jpg + https://farm1.staticflickr.com/113/cameras/3243_model_large_4b80555830.jpg + + + + Canon ZR65 MC + + + Canon ZR700 +
+ 2.7 +
+ + https://farm1.staticflickr.com/113/cameras/6046_model_small_f41b4b4d4e.jpg + https://farm1.staticflickr.com/113/cameras/6046_model_large_6c3b8985db.jpg + +
+ + Canon ZR850 +
+ 2.7 +
+ + https://farm2.staticflickr.com/1149/cameras/72157600292491412_model_small_bd46421c08.jpg + https://farm2.staticflickr.com/1149/cameras/72157600292491412_model_large_5f38b568a4.jpg + +
+ + Canon GL2 + + + Canon Elura 85 + + + Canon ZR600 +
+ 2.7 +
+ + https://farm1.staticflickr.com/112/cameras/1901_model_small_5e8b8ace02.jpg + https://farm1.staticflickr.com/112/cameras/1901_model_large_00bb945fd0.jpg + +
+ + Canon Optura Xi + + https://farm1.staticflickr.com/113/cameras/2327_model_small_4adaf0cbba.jpg + https://farm1.staticflickr.com/113/cameras/2327_model_large_afb3324063.jpg + + + + Canon DC40 +
+ 2.7 +
+ + https://farm1.staticflickr.com/101/cameras/2604_model_small_be408cc63c.jpg + https://farm1.staticflickr.com/101/cameras/2604_model_large_42c1d7eeed.jpg + +
+ + Canon Elura 100 +
+ 2.7 +
+ + https://farm1.staticflickr.com/120/cameras/3454_model_small_c33c5c12df.jpg + https://farm1.staticflickr.com/120/cameras/3454_model_large_2c7745a2c9.jpg + +
+ + Canon Elura 40 MC + + + Canon Elura 50 + + + Canon Optura 40 +
+ 2.5 +
+ + https://farm2.staticflickr.com/1262/cameras/1766_model_small_f8791abed7.jpg + https://farm2.staticflickr.com/1262/cameras/1766_model_large_dd791c27a3.jpg + +
+ + Canon ZR400 +
+ 2.4 +
+ + https://farm1.staticflickr.com/118/cameras/2427_model_small_ef31cd0754.jpg + https://farm1.staticflickr.com/118/cameras/2427_model_large_8dea31956f.jpg + +
+ + Canon Elura 65 + + + Canon DC20 +
+ 2.5 +
+ + https://farm1.staticflickr.com/165/cameras/2706_model_small_c33b9358b4.jpg + https://farm1.staticflickr.com/165/cameras/2706_model_large_dc34c957f5.jpg + +
+ + Canon Optura 50 +
+ 2.5 +
+ + https://farm1.staticflickr.com/121/cameras/2715_model_small_dc3a2c41df.jpg + https://farm1.staticflickr.com/121/cameras/2715_model_large_dcd9166601.jpg + +
+ + Canon Optura 30 + + + Canon Elura 80 +
+ 2.5 +
+ + https://farm2.staticflickr.com/1054/cameras/3699_model_small_44534ffb98.jpg + https://farm2.staticflickr.com/1054/cameras/3699_model_large_c50d67a3b0.jpg + +
+ + Canon ZR300 +
+ 2.4 +
+ + https://farm1.staticflickr.com/117/cameras/4573_model_small_cdec1cc747.jpg + https://farm1.staticflickr.com/117/cameras/4573_model_large_6603ffbb98.jpg + +
+ + Canon Elura 90 + + + Canon Optura 400 +
+ 2.5 +
+ + https://farm1.staticflickr.com/117/cameras/7708_model_small_6893d5c98d.jpg + https://farm1.staticflickr.com/117/cameras/7708_model_large_7046065dd5.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..c2d2118f --- /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..eb372733 --- /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..adb2b1b9 --- /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..7c746d84 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.commons.getInstitutions.xml @@ -0,0 +1,933 @@ + + + + + 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/ + + + + Liberaal Archief - 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/ + + + + Directorate General of Press and Information + + 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/ + + + + Netherlands Institute of Military History + + http://www.defensie.nl/organisatie/cdc/inhoud/eenheden/nimh + http://nimh-beeldbank.defensie.nl/images/stories/intro/Rights_statement_NIMH_Flickr_the_Commons.pdf + http://flickr.com/photos/nimhimages/ + + + + 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/ + + + + CDHS + + 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/ + + + + SALTOnline + + http://saltonline.org/en/anasayfa + http://saltonline.org/en/#!/en/798/right-statement/ + http://flickr.com/photos/saltonline/ + + + + Tasmanian Archive and Heritage Office 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 Library of Sweden + + http://www.kb.se/ + http://www.kb.se/english/services/reprographic/Flickr-Commons/ + http://flickr.com/photos/95520404@N07/ + + + + National Archives of Estonia + + http://www.ra.ee/ + http://rahvusarhiiv.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/ + + + + Mississippi Department of Archives and History + + http://mdah.state.ms.us + http://mdah.state.ms.us/arrec/copyright.php + http://flickr.com/photos/mississippi-dept-of-archives-and-history/ + + + + 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 Sogn og Fjordane + + 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.htm#flickr + 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..66d03ec2 --- /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..bffb7f61 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.groups.getInfo.xml @@ -0,0 +1,41 @@ + + + + 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. + + 278047 + 10049968 + 12621 + 3 + + Submission rate to the FlickrCentral pool has been restored to its former 1 per day limit. The total number of pictures in the pool is controlled by a bot, and older images (but not the oldest) are removed to make room for newer stuff. + + + + \ 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..c5ee6dcd --- /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..a825ea1c --- /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..43bd4af8 --- /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..f2f27e59 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.interestingness.getList.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ 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..b331f5ac --- /dev/null +++ b/src/test/resources/payloads/get/flickr.machinetags.getPredicates.xml @@ -0,0 +1,14 @@ + + + + age + all + flickrprivacy + flickrsafesearch + groups + location + projects + realestate + synonyms + + \ 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..386b938e --- /dev/null +++ b/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml @@ -0,0 +1,61 @@ + + + + mixed_media + dfggdf + dfgdfg + puppy + porcelain + fur + table + fruit + counter + bag + terra_cotta + stoneware + none, + camera + small_child + dog + earthenware + silver_leaf + paint + glaze + glass + digital_image + other + black_clay + kiln-cast_glass + wood + leather_pillow + slipware + trails + hiking + boys + marley + hill + grass_hill + grass + cyrus + mn + flower + boy + kiln_cast_glass + cast_iron + bus + chocolate + booy + _wood + charcoal + nylon_flocking + clover + nature + porcelain_slip + limoges_porcelain + royal_copenhagen_porcelain + resin + human_flesh + t_material + clay_and_brick + + \ 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..eabb28e9 --- /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..d3e72d49 --- /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..3e240a66 --- /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 + 227 + 94 + + + \ 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..16f429fd --- /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..453bc6c4 --- /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..079822b0 --- /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..6c3e3b48 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.comments.getList.xml @@ -0,0 +1,8 @@ + + + + green too + This is an edited comment for the java flickr api + This is a test for the flickr java api + + \ 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..5f7af2c2 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.geo.getLocation.xml @@ -0,0 +1,11 @@ + + + + + Al-Mith'ab + Hota Bani Tamim + Riyadh + 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..875e7d44 --- /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..315bedb1 --- /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..a95fe45f --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getContext.xml @@ -0,0 +1,6 @@ + + +227 + + + \ 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..f1de0733 --- /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..f374d149 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getExif.xml @@ -0,0 +1,187 @@ + + + + + 1.01 + + + inches + + + 240 + 240 dpi + + + 240 + 240 dpi + + + inches + + + inches + + + (Binary data 9083 bytes, use -b option to extract) + + + 6ec563ec53e8134661386ad9612f591b + + + 2 + + + Darren Greaves + + + Canon + + + Canon EOS 20D + + + inches + + + 2011:04:03 11:47:32 + + + Darren Greaves + + + 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 + + + 0 + 0 EV + + + 1.8 + + + Multi-segment + + + Off, Did not fire + + + 28.0 mm + 28 mm + + + 212 + + + 3959.322034 + 3959.32203389831 dpi + + + 3959.322034 + 3959.32203389831 dpi + + + inches + + + Normal + + + Auto + + + Auto + + + Standard + + + High + + + Normal + + + Hard + + + JPEG (old-style) + + + inches + + + 9984 + + + 9083 + + + Image::ExifTool 8.15 + + + 1.1.0 + + + 0 + + + 212 + + + 28.0 mm + + + 65535 + + + Darren Greaves + + + Darren Greaves + + + 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..87794077 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getInfo.xml @@ -0,0 +1,32 @@ + + + + + Robot + Description + + + + + + + 1 + + + + green + grn + grngrn + + + Al-Mith'ab + Hota Bani Tamim + Riyadh + 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..919058bc --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..7e4972fc --- /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..5da8b401 --- /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..a292b4c5 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getSizes.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ 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..300eaee9 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getUntagged.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..8b93d2b3 --- /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..dd8d1063 --- /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..1e4187c4 --- /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..f44dfef2 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photosets.getList.xml @@ -0,0 +1,30 @@ + + + + + PhotosetsInterfaceTest + JUnit test, should be deleted + + + + test + + + + + PhotosetsInterfaceTest + JUnit test, should be deleted + + + + 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..5fce5134 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.getInfo.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.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..5fce5134 --- /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.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.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..34f142fb --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml @@ -0,0 +1,6 @@ + + + + United States + + \ 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..049f2034 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.tagsForPlace.xml @@ -0,0 +1,105 @@ + + + + unitedstates + usa + us + nikon + urban + night + missiondistrict + travel + northerncalifornia + water + unitedstatesofamerica + ocean + nature + mission + view + united + treasureisland + oceanbeach + traffic + lights + lightstream + motion + westcoast + longexposure + light + trees + tourist + window + tourism + lens + macro + moon + love + marinadistrict + mobilephone + leica + north + seagull + musician + town + wedding + luckysnapshot + mediumformat + neighborhood + union + lines + twin + long + underground + toy + treasure + powell + warblers + twilight + manual + life + mechanical + lego + unidos + ngc + marriage + medium + metro + wide + travelphotography + whitecrownedsparrow + mamiyac330s + unis + lexingtonstreet + negative + velvia + westin + urbanscene + legography + turtle + toys + nopeople + minifigures + originalphotography + traveldestinations + legographer + toyphotography + nrhp + traintracks + nashvillewarbler + townhall + oreothlypisruficapilla + orangecrownedwarbler + oreothlypiscelata + onasill + lonelyplanet + minifigure + minifig + rathaus + olympic + macroflowerlovers + macromonday + macrolen + municipio + mniotiltavaria + + \ 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..023aad45 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getClusterPhotos.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..1e22c5ab --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getHotList.xml @@ -0,0 +1,25 @@ + + + + feb23 + whitenight + whitenightmelbourne + farligt + avstand + facedowntuesday + encuentros + whenigrowup + dp3merrill + whitenightmelb + fdt + northplatterealestate + fencefriday + benchmonday + genomskinlig + myvalentine + tva + dp3 + happyvalentines + leicammonochrom + + \ 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..2197022b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getListUser.xml @@ -0,0 +1,137 @@ + + + + + 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=1005 + filmdev:recipe=1094 + filmdev:recipe=1112 + filmdev:recipe=1336 + filmdev:recipe=1358 + filmdev:recipe=1389 + filmdev:recipe=1405 + filmdev:recipe=1413 + filmdev:recipe=1421 + filmdev:recipe=1429 + filmdev:recipe=1611 + filmdev:recipe=1633 + filmdev:recipe=1655 + filmdev:recipe=1688 + filmdev:recipe=1699 + filmdev:recipe=1710 + filmdev:recipe=1721 + filmdev:recipe=1732 + filmdev:recipe=1754 + filmdev:recipe=1776 + filmdev:recipe=1787 + filmdev:recipe=1798 + filmdev:recipe=1809 + filmdev:recipe=1831 + filmdev:recipe=1842 + filmdev:recipe=1853 + filmdev:recipe=1864 + filmdev:recipe=1866 + filmdev:recipe=1886 + filmdev:recipe=2299 + filmdev:recipe=2307 + filmdev:recipe=2315 + filmdev:recipe=2347 + filmdev:recipe=2355 + filmdev:recipe=2523 + filmdev:recipe=2539 + filmdev:recipe=3889 + filmdev:recipe=3911 + filmdev:recipe=4127 + filmdev:recipe=4149 + filmdev:recipe=6417 + filmdev:recipe=9083 + filmdev:recipe=965 + filmdev:recipe=973 + filmdev:recipe=981 + filmdev:recipe=989 + filmdev:recipe=997 + 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..a893f05f --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getListUserPopular.xml @@ -0,0 +1,17 @@ + + + + + developer:brand=foma + developer:name=fomafomauniversaldeveloper + film:brand=kodak + film:iso=25 + film:name=kodakprofessionalortho655625 + filmdev:recipe=6417 + fomafomauniversaldeveloper + green + kodakprofessionalortho6556 + london + + + \ 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..22afa007 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getListUserRaw.xml @@ -0,0 +1,397 @@ + + + + + + 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=1005 + + + filmdev:recipe=1094 + + + filmdev:recipe=1112 + + + filmdev:recipe=1336 + + + filmdev:recipe=1358 + + + filmdev:recipe=1389 + + + filmdev:recipe=1405 + + + filmdev:recipe=1413 + + + filmdev:recipe=1421 + + + filmdev:recipe=1429 + + + filmdev:recipe=1611 + + + filmdev:recipe=1633 + + + filmdev:recipe=1655 + + + filmdev:recipe=1688 + + + filmdev:recipe=1699 + + + filmdev:recipe=1710 + + + filmdev:recipe=1721 + + + filmdev:recipe=1732 + + + filmdev:recipe=1754 + + + filmdev:recipe=1776 + + + filmdev:recipe=1787 + + + filmdev:recipe=1798 + + + filmdev:recipe=1809 + + + filmdev:recipe=1831 + + + filmdev:recipe=1842 + + + filmdev:recipe=1853 + + + filmdev:recipe=1864 + + + filmdev:recipe=1866 + + + filmdev:recipe=1886 + + + filmdev:recipe=2299 + + + filmdev:recipe=2307 + + + filmdev:recipe=2315 + + + filmdev:recipe=2347 + + + filmdev:recipe=2355 + + + filmdev:recipe=2523 + + + filmdev:recipe=2539 + + + filmdev:recipe=3889 + + + filmdev:recipe=3911 + + + filmdev:recipe=4127 + + + filmdev:recipe=4149 + + + filmdev:recipe=6417 + + + filmdev:recipe=9083 + + + filmdev:recipe=965 + + + filmdev:recipe=973 + + + filmdev:recipe=981 + + + filmdev:recipe=989 + + + filmdev:recipe=997 + + + 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 + + + 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..374ebaab --- /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..d0457061 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.favorites.getContext.xml @@ -0,0 +1,6 @@ + + +14 + + + \ 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..5a1bd209 --- /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..bbb978c7 --- /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..c0da42d8 --- /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..92dde257 --- /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..4185a939 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.test.echo.xml @@ -0,0 +1,16 @@ + + +flickr.test.echo +test +20f26bfcb5a2b46a2c11fd1210d3b420 +1356028145 +CDKIJMigpfmKk6rcHyBxVqwEtV8= +72157628704501859-025864ab0471c9bc +20f26bfcb5a2b46a2c11fd1210d3b420 +1530378332 +HMAC-SHA1 +1.0 +1 +CDKIJMigpfmKk6rcHyBxVqwEtV8= +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 From b88b0ddccf833dfe87cd93ced82e1666186221d0 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 2 Jul 2018 22:05:49 +0100 Subject: [PATCH 155/239] [maven-release-plugin] prepare release flickr4java-2.19 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c756e52f..ec81e38b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.19-SNAPSHOT + 2.19 jar flickr4java Java API For Flickr. Fork of FlickrJ. From dfe866d0a00da1c6442011b6ace2de7df58f99dc Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 2 Jul 2018 22:30:40 +0100 Subject: [PATCH 156/239] [maven-release-plugin] rollback the release of flickr4java-2.19 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ec81e38b..c756e52f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.19 + 2.19-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 75d692d93a78db6246cb868b120c5e36874c8e03 Mon Sep 17 00:00:00 2001 From: boncey Date: Wed, 4 Jul 2018 11:10:52 +0100 Subject: [PATCH 157/239] Minor code tidy up --- src/examples/java/{FlickrCrawler => FlickrCrawler.java} | 2 -- src/main/java/com/flickr4java/flickr/Flickr.java | 1 - 2 files changed, 3 deletions(-) rename src/examples/java/{FlickrCrawler => FlickrCrawler.java} (99%) diff --git a/src/examples/java/FlickrCrawler b/src/examples/java/FlickrCrawler.java similarity index 99% rename from src/examples/java/FlickrCrawler rename to src/examples/java/FlickrCrawler.java index 88f45de1..e9739d53 100644 --- a/src/examples/java/FlickrCrawler +++ b/src/examples/java/FlickrCrawler.java @@ -1,5 +1,3 @@ -package com.company; - import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.REST; diff --git a/src/main/java/com/flickr4java/flickr/Flickr.java b/src/main/java/com/flickr4java/flickr/Flickr.java index 64322287..4daf8c78 100644 --- a/src/main/java/com/flickr4java/flickr/Flickr.java +++ b/src/main/java/com/flickr4java/flickr/Flickr.java @@ -38,7 +38,6 @@ import com.flickr4java.flickr.tags.TagsInterface; import com.flickr4java.flickr.test.TestInterface; import com.flickr4java.flickr.uploader.Uploader; -import com.flickr4java.flickr.uploader.UploaderResponse; import com.flickr4java.flickr.urls.UrlsInterface; import java.util.Set; From f5783d7dd41a067ecc0e7a8e79fa31ef96c240e8 Mon Sep 17 00:00:00 2001 From: boncey Date: Thu, 5 Jul 2018 21:47:05 +0100 Subject: [PATCH 158/239] Move from Log4J to SLF4J Log4J has a vulnerability (CVE-2017-5645) and no longer seems to be maintained. --- pom.xml | 9 ++++---- src/examples/java/UploadPhoto.java | 21 +++---------------- .../java/com/flickr4java/flickr/REST.java | 7 +++---- .../flickr/auth/AuthInterface.java | 6 +++--- .../flickr/cameras/CamerasInterface.java | 6 +++--- .../flickr/collections/Collection.java | 6 +++--- .../collections/CollectionsInterface.java | 6 +++--- .../flickr/favorites/FavoritesInterface.java | 6 +++--- .../com/flickr4java/flickr/groups/Group.java | 6 +++--- .../flickr/groups/GroupsInterface.java | 6 +++--- .../flickr/groups/pools/PoolsInterface.java | 6 +++--- .../flickr/photosets/PhotosetsInterface.java | 6 +++--- .../reflection/ReflectionInterface.java | 6 +++--- .../com/flickr4java/flickr/stats/Csv.java | 5 +++-- .../com/flickr4java/flickr/stats/Domain.java | 5 +++-- .../flickr4java/flickr/stats/Referrer.java | 5 +++-- .../com/flickr4java/flickr/stats/Stats.java | 5 +++-- .../flickr/stats/StatsInterface.java | 6 +++--- .../com/flickr4java/flickr/stats/Totals.java | 5 +++-- .../com/flickr4java/flickr/util/Base64.java | 5 +++-- .../flickr/test/PhotosetsInterfaceTest.java | 18 +++++++--------- .../flickr/test/util/FileTestProperties.java | 6 +++--- .../test/util/TestPropertiesFactory.java | 5 +++-- .../flickr/test/util/TransportStub.java | 5 +++-- 24 files changed, 78 insertions(+), 89 deletions(-) diff --git a/pom.xml b/pom.xml index c756e52f..cd4c28cc 100644 --- a/pom.xml +++ b/pom.xml @@ -43,8 +43,8 @@ 1.8 - 1.2.17 4.11 + 1.7.25 @@ -54,10 +54,9 @@ 1.3.5
- log4j - log4j - ${log4jVersion} - + org.slf4j + slf4j-api + ${slf4j.version} junit diff --git a/src/examples/java/UploadPhoto.java b/src/examples/java/UploadPhoto.java index 31377618..a1ccb88b 100644 --- a/src/examples/java/UploadPhoto.java +++ b/src/examples/java/UploadPhoto.java @@ -2,7 +2,6 @@ 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; @@ -11,31 +10,25 @@ 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.Photosets; import com.flickr4java.flickr.photosets.PhotosetsInterface; -// import com.flickr4java.flickr.util.IOUtilities; import com.flickr4java.flickr.prefs.PrefsInterface; -// import com.flickr4java.flickr.photos.PhotosInterface; 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 org.apache.log4j.Logger; import org.scribe.model.Token; import org.scribe.model.Verifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; -// 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.text.SimpleDateFormat; -// import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -44,17 +37,9 @@ import java.util.Iterator; import java.util.List; 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 java.util.Set; -// 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 @@ -69,7 +54,7 @@ public class UploadPhoto { - private static final Logger logger = Logger.getLogger(UploadPhoto.class); + private static final Logger logger = LoggerFactory.getLogger(UploadPhoto.class); private String nsid; diff --git a/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java index 29d8a771..f42beabd 100644 --- a/src/main/java/com/flickr4java/flickr/REST.java +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -8,14 +8,14 @@ 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.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -23,7 +23,6 @@ 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; @@ -42,7 +41,7 @@ */ public class REST extends Transport { - private static final Logger logger = Logger.getLogger(REST.class); + private static final Logger logger = LoggerFactory.getLogger(REST.class); public static final String PATH = "/services/rest/"; diff --git a/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java index 2c7f2fc4..955d1838 100644 --- a/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java +++ b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java @@ -11,14 +11,14 @@ 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 org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Element; import java.io.UnsupportedEncodingException; @@ -49,7 +49,7 @@ public class AuthInterface { private final Transport transportAPI; - private final static Logger logger = Logger.getLogger(AuthInterface.class); + private final static Logger logger = LoggerFactory.getLogger(AuthInterface.class); private int maxGetTokenRetries = 3; diff --git a/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java b/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java index 93561fa7..ea125885 100644 --- a/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java +++ b/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java @@ -7,8 +7,8 @@ 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; @@ -32,7 +32,7 @@ public class CamerasInterface { * Logger for log4j. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(CamerasInterface.class); + private static Logger _log = LoggerFactory.getLogger(CamerasInterface.class); private final String apiKey; diff --git a/src/main/java/com/flickr4java/flickr/collections/Collection.java b/src/main/java/com/flickr4java/flickr/collections/Collection.java index 974bfe42..c28384a8 100644 --- a/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; @@ -21,7 +21,7 @@ public class Collection { * Logger for log4j. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Collection.class); + private static Logger _log = LoggerFactory.getLogger(Collection.class); private String id; diff --git a/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java b/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java index 304ebd0e..790afaa7 100644 --- a/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; @@ -32,7 +32,7 @@ public class CollectionsInterface { * Logger for log4j. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(CollectionsInterface.class); + private static Logger _log = LoggerFactory.getLogger(CollectionsInterface.class); private final String apiKey; diff --git a/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java b/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java index e4316ae5..f0bc58ef 100644 --- a/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java +++ b/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java @@ -11,8 +11,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; @@ -29,7 +29,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"; diff --git a/src/main/java/com/flickr4java/flickr/groups/Group.java b/src/main/java/com/flickr4java/flickr/groups/Group.java index 5e395dc5..534b0107 100644 --- a/src/main/java/com/flickr4java/flickr/groups/Group.java +++ b/src/main/java/com/flickr4java/flickr/groups/Group.java @@ -5,8 +5,8 @@ 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 +15,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/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java b/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java index 30b83eb9..29cc6eea 100644 --- a/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java @@ -7,8 +7,8 @@ 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; @@ -26,7 +26,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"; diff --git a/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java b/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java index 65ae548e..9f6ebec5 100644 --- a/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java @@ -14,8 +14,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 +31,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"; diff --git a/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java b/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java index 5dc6e853..4509d193 100644 --- a/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java +++ b/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java @@ -15,8 +15,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 +35,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"; diff --git a/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java b/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java index 09b94741..cd68ae7a 100644 --- a/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java +++ b/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java @@ -7,8 +7,8 @@ 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 +27,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"; diff --git a/src/main/java/com/flickr4java/flickr/stats/Csv.java b/src/main/java/com/flickr4java/flickr/stats/Csv.java index d853787c..1248e83d 100644 --- a/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; @@ -16,7 +17,7 @@ public class Csv { * Logger for log4j. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Csv.class); + private static Logger _log = LoggerFactory.getLogger(Csv.class); private String href; diff --git a/src/main/java/com/flickr4java/flickr/stats/Domain.java b/src/main/java/com/flickr4java/flickr/stats/Domain.java index b4addf83..db107626 100644 --- a/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. @@ -14,7 +15,7 @@ public class Domain { * Logger for log4j. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Domain.class); + private static Logger _log = LoggerFactory.getLogger(Domain.class); public Domain() { } diff --git a/src/main/java/com/flickr4java/flickr/stats/Referrer.java b/src/main/java/com/flickr4java/flickr/stats/Referrer.java index c808422e..62b9f47b 100644 --- a/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. @@ -14,7 +15,7 @@ public class Referrer { * Logger for log4j. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Referrer.class); + private static Logger _log = LoggerFactory.getLogger(Referrer.class); public Referrer() { } diff --git a/src/main/java/com/flickr4java/flickr/stats/Stats.java b/src/main/java/com/flickr4java/flickr/stats/Stats.java index 3541d3eb..4ce1b6cd 100644 --- a/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. @@ -14,7 +15,7 @@ public class Stats { * Logger for log4j. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Stats.class); + private static Logger _log = LoggerFactory.getLogger(Stats.class); private int views; diff --git a/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java b/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java index bbfe07bf..3fd9e928 100644 --- a/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java +++ b/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java @@ -8,8 +8,8 @@ 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; @@ -34,7 +34,7 @@ public class StatsInterface { * Logger for log4j. */ @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"; diff --git a/src/main/java/com/flickr4java/flickr/stats/Totals.java b/src/main/java/com/flickr4java/flickr/stats/Totals.java index b5d17555..4130d0be 100644 --- a/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. @@ -14,7 +15,7 @@ public class Totals { * Logger for log4j. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Totals.class); + private static Logger _log = LoggerFactory.getLogger(Totals.class); private int total; diff --git a/src/main/java/com/flickr4java/flickr/util/Base64.java b/src/main/java/com/flickr4java/flickr/util/Base64.java index af8b2112..707fb8ae 100644 --- a/src/main/java/com/flickr4java/flickr/util/Base64.java +++ b/src/main/java/com/flickr4java/flickr/util/Base64.java @@ -57,7 +57,8 @@ package com.flickr4java.flickr.util; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * 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 @@ -76,7 +77,7 @@ */ public final class Base64 { - private static Logger _log = Logger.getLogger(Base64.class); + private static Logger _log = LoggerFactory.getLogger(Base64.class); static private final int BASELENGTH = 255; diff --git a/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java index 998e00c4..a33f4175 100644 --- a/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java @@ -1,11 +1,5 @@ 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; @@ -14,22 +8,26 @@ 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.Collection; -import java.util.Collections; 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; diff --git a/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java b/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java index 19e42ca1..bc39b9de 100644 --- a/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java +++ b/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java @@ -1,8 +1,8 @@ package com.flickr4java.flickr.test.util; import com.flickr4java.flickr.FlickrRuntimeException; - -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileInputStream; @@ -23,7 +23,7 @@ public class FileTestProperties implements TestProperties { /** * Logger for log4j. */ - private static Logger _log = Logger.getLogger(FileTestProperties.class); + private static Logger _log = LoggerFactory.getLogger(FileTestProperties.class); private String host; diff --git a/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java b/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java index d665a006..94da3764 100644 --- a/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java +++ b/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java @@ -1,6 +1,7 @@ package com.flickr4java.flickr.test.util; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; import java.nio.file.Paths; @@ -11,7 +12,7 @@ public class TestPropertiesFactory { /** * Logger for log4j. */ - private static Logger _log = Logger.getLogger(TestPropertiesFactory.class); + private static Logger _log = LoggerFactory.getLogger(TestPropertiesFactory.class); public static TestProperties getTestProperties() { diff --git a/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java b/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java index 8584b350..c5c91887 100644 --- a/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java +++ b/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java @@ -5,7 +5,8 @@ import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.uploader.UploaderResponse; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.xml.sax.InputSource; @@ -21,7 +22,7 @@ public class TransportStub extends Transport { - private static final Logger _log = Logger.getLogger(TransportStub.class); + private static final Logger _log = LoggerFactory.getLogger(TransportStub.class); private final DocumentBuilder builder; From ea7ad475698ca0ad117bc5a4dce2078d729454ba Mon Sep 17 00:00:00 2001 From: qduc159 Date: Sat, 25 Aug 2018 22:01:01 +0700 Subject: [PATCH 159/239] Get LARGE_1600 and LARGE_2048 size --- .../flickr4java/flickr/photos/PhotoUtils.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java b/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java index 62dd35c6..6e0ca7c4 100644 --- a/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java @@ -182,6 +182,24 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme 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) { photo.setSizes(sizes); } From 495e150a93215d767d058e4029646b59d28bccba Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 21:28:06 +0100 Subject: [PATCH 160/239] Enable auto publish to bintray --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cd4c28cc..b601e87c 100644 --- a/pom.xml +++ b/pom.xml @@ -157,7 +157,7 @@ bintray-boncey-Flickr4Java-Flickr4Java boncey-Flickr4Java-Flickr4Java - https://api.bintray.com/maven/boncey/Flickr4Java/Flickr4Java + https://api.bintray.com/maven/boncey/Flickr4Java/Flickr4Java?publish=1 From 9c4caddc9b0f739a6ff548cd6c643434ec94c3f1 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 21:34:01 +0100 Subject: [PATCH 161/239] [maven-release-plugin] prepare release flickr4java-2.19 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b601e87c..d5c6da51 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.19-SNAPSHOT + 2.19 jar flickr4java Java API For Flickr. Fork of FlickrJ. From e6aa2ebe90a6de4cb172b0fbb7d654158b0eb083 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 21:34:12 +0100 Subject: [PATCH 162/239] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d5c6da51..1b9886b4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.19 + 2.20-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 2e8abab26a08e775687a06f5cf2bb1e0bac2fbf3 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 21:42:49 +0100 Subject: [PATCH 163/239] Fix auto publish to bintray URL --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1b9886b4..bd36ceda 100644 --- a/pom.xml +++ b/pom.xml @@ -157,7 +157,7 @@ bintray-boncey-Flickr4Java-Flickr4Java boncey-Flickr4Java-Flickr4Java - https://api.bintray.com/maven/boncey/Flickr4Java/Flickr4Java?publish=1 + https://api.bintray.com/maven/boncey/Flickr4Java/Flickr4Java;publish=1 From cb992edb21a888ab64d29d0f8e5beffc92dc8998 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 21:45:02 +0100 Subject: [PATCH 164/239] Undo aborted release --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bd36ceda..621a9673 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.20-SNAPSHOT + 2.19-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 8303f2a00f1f457f856c087ff08b350c77ea2456 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 21:45:50 +0100 Subject: [PATCH 165/239] [maven-release-plugin] prepare release flickr4java-2.19 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 621a9673..0551b475 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.19-SNAPSHOT + 2.19 jar flickr4java Java API For Flickr. Fork of FlickrJ. From 9e61e658453ef4d52c7d878ef0a2da4d0374e8ed Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 21:58:17 +0100 Subject: [PATCH 166/239] Undo aborted release --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0551b475..621a9673 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.19 + 2.19-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 8f1390ca6612ba84ccddacf1df141931eb5aad7e Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 21:59:29 +0100 Subject: [PATCH 167/239] [maven-release-plugin] prepare release flickr4java-2.19 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 621a9673..0551b475 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.19-SNAPSHOT + 2.19 jar flickr4java Java API For Flickr. Fork of FlickrJ. From 4037ee63aa3019360cc9ed9ed1287ff14b15d434 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 22:05:37 +0100 Subject: [PATCH 168/239] Undo aborted release --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0551b475..621a9673 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.19 + 2.19-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From a8d3f3c0d05e57f60dcba731a93eca91af85e78f Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 22:06:53 +0100 Subject: [PATCH 169/239] [maven-release-plugin] prepare release flickr4java-2.19 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 621a9673..0551b475 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.19-SNAPSHOT + 2.19 jar flickr4java Java API For Flickr. Fork of FlickrJ. From 063d3f5d2dfec923a2dd1dd40624ead9816eaeec Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 22:07:01 +0100 Subject: [PATCH 170/239] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0551b475..bd36ceda 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.19 + 2.20-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 8e70ae12a47ca9e76400a50119c4b42aa0f9f911 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 22:26:55 +0100 Subject: [PATCH 171/239] Undo aborted release --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bd36ceda..621a9673 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.20-SNAPSHOT + 2.19-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 4927f5a44b3d552313039a386e3255c3e70e34b5 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 22:27:39 +0100 Subject: [PATCH 172/239] [maven-release-plugin] prepare release flickr4java-2.19 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 621a9673..0551b475 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.19-SNAPSHOT + 2.19 jar flickr4java Java API For Flickr. Fork of FlickrJ. From 8eb7608aba4a9c4e57686a007ebc4a8bb9912984 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 22:27:47 +0100 Subject: [PATCH 173/239] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0551b475..bd36ceda 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.19 + 2.20-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From 8e62bbc2c4c189f215f66f4bcdd10b994cb6cf77 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 Sep 2018 22:39:16 +0100 Subject: [PATCH 174/239] Update version numbers for a release --- README.md | 2 +- build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0a2e38b0..dde7936b 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// com.flickr4java flickr4java - 2.18 + 2.19 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). diff --git a/build.gradle b/build.gradle index 4e394ca5..b831994d 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.18' +version = '2.19' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' From b10f7c3c3c54ccab9aae9653ad6a7dd88b553259 Mon Sep 17 00:00:00 2001 From: boncey Date: Thu, 31 Jan 2019 22:17:39 +0000 Subject: [PATCH 175/239] Upgrade to latest version of Scribe --- pom.xml | 7 +- src/examples/java/AuthExample.java | 23 ++--- src/examples/java/Backup.java | 16 ++-- src/examples/java/UploadPhoto.java | 14 +-- .../flickr/FlickrRuntimeException.java | 18 ++++ .../java/com/flickr4java/flickr/REST.java | 90 ++++++++----------- .../com/flickr4java/flickr/Transport.java | 2 +- .../flickr/auth/AuthInterface.java | 77 +++++++++------- .../flickr/test/AuthInterfaceTest.java | 24 ++--- .../flickr4java/flickr/test/util/Setup.java | 21 +++-- 10 files changed, 156 insertions(+), 136 deletions(-) diff --git a/pom.xml b/pom.xml index bd36ceda..2dc35622 100644 --- a/pom.xml +++ b/pom.xml @@ -45,13 +45,14 @@ 1.8 4.11 1.7.25 + 6.2.0 - org.scribe - scribe - 1.3.5 + com.github.scribejava + scribejava-apis + ${scribe.version} org.slf4j diff --git a/src/examples/java/AuthExample.java b/src/examples/java/AuthExample.java index 226a5151..4d15c5f4 100644 --- a/src/examples/java/AuthExample.java +++ b/src/examples/java/AuthExample.java @@ -5,14 +5,15 @@ 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.OAuth1AccessToken; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.Token; 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 +27,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 +44,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 +56,14 @@ public static void auth() throws IOException, FlickrException { String tokenKey = scanner.nextLine(); scanner.close(); - Token requestToken = authInterface.getAccessToken(token, new Verifier(tokenKey)); + OAuth1AccessToken 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/src/examples/java/Backup.java b/src/examples/java/Backup.java index cf888ebe..23671183 100644 --- a/src/examples/java/Backup.java +++ b/src/examples/java/Backup.java @@ -14,8 +14,9 @@ import com.flickr4java.flickr.util.AuthStore; import com.flickr4java.flickr.util.FileAuthStore; -import org.scribe.model.Token; -import org.scribe.model.Verifier; +import com.github.scribejava.core.model.OAuth1AccessToken; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.Token; import org.xml.sax.SAXException; import java.io.BufferedInputStream; @@ -29,6 +30,7 @@ import java.util.Iterator; import java.util.Map; import java.util.Scanner; +import java.util.concurrent.ExecutionException; /** * A simple program to backup all of a users private and public photos in a photoset aware manner. If photos are classified in multiple photosets, they will be @@ -57,11 +59,11 @@ public Backup(String apiKey, String nsid, String sharedSecret, File authsDir) th } } - private void authorize() throws IOException, SAXException, FlickrException { + private void authorize() throws IOException, SAXException, FlickrException, ExecutionException, InterruptedException { 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 +71,9 @@ private void authorize() throws IOException, SAXException, FlickrException { String tokenKey = new Scanner(System.in).nextLine(); - Token requestToken = authInterface.getAccessToken(accessToken, new Verifier(tokenKey)); + OAuth1AccessToken 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/UploadPhoto.java b/src/examples/java/UploadPhoto.java index a1ccb88b..240b99e1 100644 --- a/src/examples/java/UploadPhoto.java +++ b/src/examples/java/UploadPhoto.java @@ -18,8 +18,9 @@ import com.flickr4java.flickr.uploader.Uploader; import com.flickr4java.flickr.util.AuthStore; import com.flickr4java.flickr.util.FileAuthStore; -import org.scribe.model.Token; -import org.scribe.model.Verifier; +import com.github.scribejava.core.model.OAuth1AccessToken; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.Token; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; @@ -39,6 +40,7 @@ import java.util.Properties; import java.util.Scanner; import java.util.Set; +import java.util.concurrent.ExecutionException; /** * 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 @@ -163,9 +165,9 @@ private void setNsid() throws FlickrException { } } - private void authorize() throws IOException, SAXException, FlickrException { + private void authorize() throws IOException, ExecutionException, InterruptedException { AuthInterface authInterface = flickr.getAuthInterface(); - Token accessToken = authInterface.getRequestToken(); + 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); @@ -177,7 +179,7 @@ private void authorize() throws IOException, SAXException, FlickrException { Scanner scanner = new Scanner(System.in); String tokenKey = scanner.nextLine(); - Token requestToken = authInterface.getAccessToken(accessToken, new Verifier(tokenKey)); + OAuth1AccessToken requestToken = authInterface.getAccessToken(accessToken, tokenKey); Auth auth = authInterface.checkToken(requestToken); RequestContext.getRequestContext().setAuth(auth); @@ -217,7 +219,7 @@ private Auth constructAuth(String authToken, String tokenSecret, String username return auth; } - public void setAuth(String authToken, String username, String tokenSecret) throws IOException, SAXException, FlickrException { + public void setAuth(String authToken, String username, String tokenSecret) throws IOException, ExecutionException, InterruptedException { RequestContext rc = RequestContext.getRequestContext(); Auth auth = null; diff --git a/src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java b/src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java index e109307b..e9554c61 100644 --- a/src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java +++ b/src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java @@ -10,6 +10,10 @@ public class FlickrRuntimeException extends RuntimeException { private static final long serialVersionUID = 1303207981175254196L; + private String errorCode; + + private String errorMessage; + public FlickrRuntimeException() { } @@ -24,4 +28,18 @@ public FlickrRuntimeException(Throwable rootCause) { public FlickrRuntimeException(String message, Throwable rootCause) { super(message, rootCause); } + + public FlickrRuntimeException(String errorCode, String errorMessage) { + super(errorCode + ": " + errorMessage); + this.errorCode = errorCode; + this.errorMessage = errorMessage; + } + + public String getErrorCode() { + return errorCode; + } + + public String getErrorMessage() { + return errorMessage; + } } diff --git a/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java index f42beabd..35ed864e 100644 --- a/src/main/java/com/flickr4java/flickr/REST.java +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -8,12 +8,12 @@ import com.flickr4java.flickr.util.DebugInputStream; import com.flickr4java.flickr.util.IOUtilities; import com.flickr4java.flickr.util.UrlUtilities; -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 com.github.scribejava.apis.FlickrApi; +import com.github.scribejava.core.builder.ServiceBuilder; +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; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -31,7 +31,8 @@ import java.net.URL; import java.util.Map; import java.util.Map.Entry; -import java.util.concurrent.TimeUnit; +import java.util.UUID; +import java.util.concurrent.ExecutionException; /** * Transport implementation using the REST interface. @@ -155,9 +156,9 @@ public com.flickr4java.flickr.Response get(String path, Map para RequestContext requestContext = RequestContext.getRequestContext(); Auth auth = requestContext.getAuth(); + OAuth1AccessToken requestToken = new OAuth1AccessToken(auth.getToken(), auth.getTokenSecret()); + OAuth10aService service = createOAuthService(apiKey, sharedSecret); 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 @@ -171,11 +172,11 @@ public com.flickr4java.flickr.Response get(String path, Map para logger.debug("GET: " + request.getCompleteUrl()); } setTimeouts(request); - org.scribe.model.Response scribeResponse = request.send(); try { + com.github.scribejava.core.model.Response scribeResponse = service.execute(request); - com.flickr4java.flickr.Response response = null; + com.flickr4java.flickr.Response f4jResponse; synchronized (mutex) { String strXml = scribeResponse.getBody().trim(); if (Flickr.debugStream) { @@ -185,17 +186,11 @@ public com.flickr4java.flickr.Response get(String path, Map para throw new FlickrRuntimeException(strXml); } Document document = builder.parse(new InputSource(new StringReader(strXml))); - response = (com.flickr4java.flickr.Response) responseClass.newInstance(); - response.parse(document); + f4jResponse = (com.flickr4java.flickr.Response) responseClass.newInstance(); + f4jResponse.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) { + return f4jResponse; + } catch (IllegalAccessException | InstantiationException | SAXException | IOException | InterruptedException | ExecutionException e) { throw new FlickrRuntimeException(e); } } @@ -212,7 +207,7 @@ public com.flickr4java.flickr.Response get(String path, Map para * @return The Response */ @Override - public Response getNonOAuth(String path, Map parameters) throws FlickrException { + public Response getNonOAuth(String path, Map parameters) { InputStream in = null; try { URL url = UrlUtilities.buildUrl(getScheme(), getHost(), getPort(), path, parameters); @@ -240,13 +235,7 @@ public Response getNonOAuth(String path, Map parameters) throws 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) { + } catch (IllegalAccessException | SAXException | IOException | InstantiationException e) { throw new FlickrRuntimeException(e); } finally { IOUtilities.close(in); @@ -275,16 +264,17 @@ public com.flickr4java.flickr.Response post(String path, Map par RequestContext requestContext = RequestContext.getRequestContext(); Auth auth = requestContext.getAuth(); + OAuth1AccessToken requestToken = new OAuth1AccessToken(auth.getToken(), auth.getTokenSecret()); + OAuth10aService service = createOAuthService(apiKey, sharedSecret); 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())); + // TODO Try addMultipartPayload instead, might be simpler + request.setPayload(buildMultipartBody(parameters, getMultipartBoundary())); } if (proxyAuth) { @@ -295,10 +285,11 @@ public com.flickr4java.flickr.Response post(String path, Map par logger.debug("POST: " + request.getCompleteUrl()); } - org.scribe.model.Response scribeResponse = request.send(); +// org.scribe.model.Response scribeResponse = request.send(); try { - com.flickr4java.flickr.Response response = null; + com.github.scribejava.core.model.Response scribeResponse = service.execute(request); + com.flickr4java.flickr.Response response; synchronized (mutex) { String strXml = scribeResponse.getBody().trim(); if (Flickr.debugStream) { @@ -312,30 +303,24 @@ public com.flickr4java.flickr.Response post(String path, Map par 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) { + } catch (IllegalAccessException | InterruptedException | ExecutionException | InstantiationException | IOException | SAXException 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); + private OAuth10aService createOAuthService(String apiKey, String sharedSecret) { + ServiceBuilder serviceBuilder = new ServiceBuilder(apiKey).apiKey(apiKey).apiSecret(sharedSecret); + if (Flickr.debugRequest) { serviceBuilder = serviceBuilder.debug(); } - return serviceBuilder.build(); + return serviceBuilder.build(FlickrApi.instance()); } /** @@ -369,7 +354,7 @@ private void buildMultipartRequest(Map parameters, OAuthRequest * @return */ private String getMultipartBoundary() { - return "---------------------------7d273f7a0d3"; + return "---------------------------" + UUID.randomUUID(); } public boolean isProxyAuth() { @@ -448,12 +433,13 @@ private void setTimeouts(HttpURLConnection conn) { } private void setTimeouts(OAuthRequest request) { - if (connectTimeoutMs != null) { - request.setConnectTimeout(connectTimeoutMs, TimeUnit.MILLISECONDS); - } - if (readTimeoutMs != null) { - request.setReadTimeout(readTimeoutMs, TimeUnit.MILLISECONDS); - } + // TODO Can't figure out how to do this in new Scribe +// if (connectTimeoutMs != null) { +// request.setConnectTimeout(connectTimeoutMs, TimeUnit.MILLISECONDS); +// } +// if (readTimeoutMs != null) { +// request.setReadTimeout(readTimeoutMs, TimeUnit.MILLISECONDS); +// } } public void setConnectTimeoutMs(Integer connectTimeoutMs) { diff --git a/src/main/java/com/flickr4java/flickr/Transport.java b/src/main/java/com/flickr4java/flickr/Transport.java index 63f3c96f..84751798 100644 --- a/src/main/java/com/flickr4java/flickr/Transport.java +++ b/src/main/java/com/flickr4java/flickr/Transport.java @@ -134,7 +134,7 @@ public Response post(String path, Map parameters, String apiKey, * @return The Response * @throws FlickrException */ - public abstract Response getNonOAuth(String path, Map parameters) throws FlickrException; + public abstract Response getNonOAuth(String path, Map parameters) throws FlickrRuntimeException; public void setResponseClass(Class responseClass) { if (responseClass == null) { diff --git a/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java index 955d1838..83219e1f 100644 --- a/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java +++ b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java @@ -6,26 +6,29 @@ 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.people.User; import com.flickr4java.flickr.util.ByteUtilities; import com.flickr4java.flickr.util.XMLUtilities; -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.OAuth1AccessToken; +import com.github.scribejava.core.model.OAuth1RequestToken; +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. @@ -70,9 +73,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() throws InterruptedException, ExecutionException, IOException { return getRequestToken(null); } @@ -82,15 +85,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 +108,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 OAuth1AccessToken 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; + OAuth1AccessToken accessToken = null; boolean success = false; for (int i = 0; i < maxGetTokenRetries && !success; i++) { try { accessToken = service.getAccessToken(oAuthRequestToken, verifier); success = true; - } catch (OAuthException e) { + } 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 { @@ -156,9 +166,8 @@ public Token getAccessToken(Token oAuthRequestToken, Verifier verifier) { * @return The Auth object * @throws FlickrException */ - public Auth checkToken(Token accessToken) throws FlickrException { - - return checkToken(accessToken.getToken(), accessToken.getSecret()); + public Auth checkToken(OAuth1AccessToken accessToken) { + return checkToken(accessToken.getToken(), accessToken.getTokenSecret()); } /** @@ -170,7 +179,7 @@ public Auth checkToken(Token accessToken) throws FlickrException { * @throws FlickrException * @see "http://www.flickr.com/services/api/flickr.auth.oauth.checkToken.html" */ - public Auth checkToken(String authToken, String tokenSecret) throws FlickrException { + public Auth checkToken(String authToken, String tokenSecret) { // Use TreeMap so keys are automatically sorted alphabetically Map parameters = new TreeMap(); @@ -182,7 +191,7 @@ public Auth checkToken(String authToken, String tokenSecret) throws FlickrExcept Response response = transportAPI.getNonOAuth(transportAPI.getPath(), parameters); if (response.isError()) { - throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); + throw new FlickrRuntimeException(response.getErrorCode(), response.getErrorMessage()); } Auth auth = constructAuth(response, authToken, tokenSecret); @@ -198,7 +207,7 @@ public Auth checkToken(String authToken, String tokenSecret) throws FlickrExcept * @throws FlickrException * @see "http://www.flickr.com/services/api/flickr.auth.oauth.getAccessToken.html" */ - public Token exchangeAuthToken(String authToken) throws FlickrException { + public OAuth1RequestToken exchangeAuthToken(String authToken) { // Use TreeMap so keys are automatically sorted alphabetically Map parameters = new TreeMap(); @@ -209,10 +218,10 @@ public Token exchangeAuthToken(String authToken) throws FlickrException { Response response = transportAPI.getNonOAuth(transportAPI.getPath(), parameters); if (response.isError()) { - throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); + throw new FlickrRuntimeException(response.getErrorCode(), response.getErrorMessage()); } - Token accessToken = constructToken(response); + OAuth1RequestToken accessToken = constructToken(response); return accessToken; } @@ -244,12 +253,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/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java index 89acc27b..e11e1db1 100644 --- a/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java @@ -13,16 +13,19 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Scanner; +import java.util.concurrent.ExecutionException; +import com.github.scribejava.core.model.OAuth1AccessToken; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.Token; 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; import com.flickr4java.flickr.auth.AuthInterface; import com.flickr4java.flickr.auth.Permission; +import org.junit.rules.Verifier; /** * @author Anthony Eden @@ -32,15 +35,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 { 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 +69,16 @@ public void testAuthFlow() throws FlickrException, IOException, URISyntaxExcepti assertNotNull(code); - Verifier verifier = new Verifier(code); - Token accessToken = authInterface.getAccessToken(requestToken, verifier); + OAuth1AccessToken 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 +96,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/src/test/java/com/flickr4java/flickr/test/util/Setup.java b/src/test/java/com/flickr4java/flickr/test/util/Setup.java index 9c543b86..79f36fbe 100644 --- a/src/test/java/com/flickr4java/flickr/test/util/Setup.java +++ b/src/test/java/com/flickr4java/flickr/test/util/Setup.java @@ -1,18 +1,19 @@ package com.flickr4java.flickr.test.util; import com.flickr4java.flickr.Flickr; -import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.REST; import com.flickr4java.flickr.auth.Auth; import com.flickr4java.flickr.auth.AuthInterface; import com.flickr4java.flickr.auth.Permission; +import com.github.scribejava.core.model.OAuth1AccessToken; +import com.github.scribejava.core.model.OAuth1RequestToken; + 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; +import java.util.concurrent.ExecutionException; public class Setup { @@ -20,14 +21,12 @@ 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 | ExecutionException | InterruptedException e) { e.printStackTrace(); } } - public Setup() throws IOException, FlickrException { + public Setup() throws IOException, ExecutionException, InterruptedException { String propertiesFile = "src/test/resources/setup.properties"; Properties properties = new Properties(); properties.load(new FileInputStream(propertiesFile)); @@ -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)); + OAuth1AccessToken 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()); From 5bea3c29c7b241561763f038c72db65845cab192 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 4 Feb 2019 12:27:38 +0100 Subject: [PATCH 176/239] Use scribe for multipart requests --- .../flickr/FlickrRuntimeException.java | 18 -- .../java/com/flickr4java/flickr/REST.java | 289 ++++++++---------- .../com/flickr4java/flickr/Transport.java | 20 +- .../flickr/auth/AuthInterface.java | 13 +- .../flickr4java/flickr/uploader/Payload.java | 66 ++++ .../flickr/uploader/UploadMetaData.java | 80 ++++- .../flickr4java/flickr/uploader/Uploader.java | 171 ++--------- .../flickr/test/AuthInterfaceTest.java | 4 +- .../flickr4java/flickr/test/UploaderTest.java | 98 +++--- .../flickr4java/flickr/test/util/Setup.java | 5 +- .../flickr/test/util/TransportStub.java | 21 +- 11 files changed, 367 insertions(+), 418 deletions(-) create mode 100644 src/main/java/com/flickr4java/flickr/uploader/Payload.java diff --git a/src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java b/src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java index e9554c61..e109307b 100644 --- a/src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java +++ b/src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java @@ -10,10 +10,6 @@ public class FlickrRuntimeException extends RuntimeException { private static final long serialVersionUID = 1303207981175254196L; - private String errorCode; - - private String errorMessage; - public FlickrRuntimeException() { } @@ -28,18 +24,4 @@ public FlickrRuntimeException(Throwable rootCause) { public FlickrRuntimeException(String message, Throwable rootCause) { super(message, rootCause); } - - public FlickrRuntimeException(String errorCode, String errorMessage) { - super(errorCode + ": " + errorMessage); - this.errorCode = errorCode; - this.errorMessage = errorMessage; - } - - public String getErrorCode() { - return errorCode; - } - - public String getErrorMessage() { - return errorMessage; - } } diff --git a/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java index 35ed864e..e761f5b5 100644 --- a/src/main/java/com/flickr4java/flickr/REST.java +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -4,12 +4,15 @@ 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.Base64; import com.flickr4java.flickr.util.DebugInputStream; import com.flickr4java.flickr.util.IOUtilities; import com.flickr4java.flickr.util.UrlUtilities; 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; @@ -23,14 +26,13 @@ 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.HashMap; import java.util.Map; -import java.util.Map.Entry; import java.util.UUID; import java.util.concurrent.ExecutionException; @@ -44,7 +46,7 @@ public class REST extends Transport { private static final Logger logger = LoggerFactory.getLogger(REST.class); - public static final String PATH = "/services/rest/"; + private static final String PATH = "/services/rest/"; private static final String CHARSET_NAME = "UTF-8"; @@ -143,9 +145,9 @@ public void setProxy(String proxyHost, int proxyPort, String username, String pa * @return The Response */ @Override - public com.flickr4java.flickr.Response get(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException { + public com.flickr4java.flickr.Response get(String path, Map parameters, String apiKey, String sharedSecret) { - OAuthRequest request = new OAuthRequest(Verb.GET, getScheme() + "://" + getHost() + path); + OAuthRequest request = new OAuthRequest(Verb.GET, buildUrl(path)); for (Map.Entry entry : parameters.entrySet()) { request.addQuerystringParameter(entry.getKey(), String.valueOf(entry.getValue())); } @@ -156,9 +158,9 @@ public com.flickr4java.flickr.Response get(String path, Map para RequestContext requestContext = RequestContext.getRequestContext(); Auth auth = requestContext.getAuth(); - OAuth1AccessToken requestToken = new OAuth1AccessToken(auth.getToken(), auth.getTokenSecret()); OAuth10aService service = createOAuthService(apiKey, sharedSecret); if (auth != null) { + OAuth1AccessToken requestToken = new OAuth1AccessToken(auth.getToken(), auth.getTokenSecret()); service.signRequest(requestToken, request); } else { // For calls that do not require authorization e.g. flickr.people.findByUsername which could be the @@ -171,112 +173,82 @@ public com.flickr4java.flickr.Response get(String path, Map para if (Flickr.debugRequest) { logger.debug("GET: " + request.getCompleteUrl()); } - setTimeouts(request); try { - com.github.scribejava.core.model.Response scribeResponse = service.execute(request); - - com.flickr4java.flickr.Response f4jResponse; - synchronized (mutex) { - String strXml = scribeResponse.getBody().trim(); - if (Flickr.debugStream) { - logger.debug(strXml); - } - if (strXml.startsWith("oauth_problem=")) { - throw new FlickrRuntimeException(strXml); - } - Document document = builder.parse(new InputSource(new StringReader(strXml))); - f4jResponse = (com.flickr4java.flickr.Response) responseClass.newInstance(); - f4jResponse.parse(document); - } - return f4jResponse; + return handleResponse(request, service); } catch (IllegalAccessException | InstantiationException | SAXException | IOException | InterruptedException | ExecutionException 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. - * + * Invoke an HTTP POST request on a remote host. + * * @param path * The request path * @param parameters - * The parameters - * @return The Response + * The parameters (collection of Parameter objects) + * @return The Response object */ @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(); + public com.flickr4java.flickr.Response post(String path, Map parameters, String apiKey, String sharedSecret) { - if (Flickr.debugStream) { - in = new DebugInputStream(conn.getInputStream(), System.out); - } else { - in = conn.getInputStream(); - } + OAuthRequest request = new OAuthRequest(Verb.POST, buildUrl(path)); - Response response = null; - synchronized (mutex) { - Document document = builder.parse(in); - response = (Response) responseClass.newInstance(); - response.parse(document); - } - return response; - } catch (IllegalAccessException | SAXException | IOException | InstantiationException e) { + buildNormalPostRequest(parameters, request); + + OAuth10aService service = createAndSignRequest(apiKey, sharedSecret, request); + + try { + return handleResponse(request, service); + } catch (IllegalAccessException | InterruptedException | ExecutionException | InstantiationException | IOException | 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 + * @param metaData * The parameters (collection of Parameter objects) + * @param payload * @return The Response object */ @Override - public com.flickr4java.flickr.Response post(String path, Map parameters, String apiKey, String sharedSecret, boolean multipart) throws FlickrException { + public com.flickr4java.flickr.Response postMultiPart(String path, UploadMetaData metaData, Payload payload, String apiKey, String sharedSecret) { - OAuthRequest request = new OAuthRequest(Verb.POST, getScheme() + "://" + getHost() + path); + OAuthRequest request = new OAuthRequest(Verb.POST, buildUrl(path)); + Map uploadParameters = new HashMap<>(metaData.getUploadParameters()); - if (multipart) { - buildMultipartRequest(parameters, request); - } else { - buildNormalPostRequest(parameters, request); + buildMultipartRequest(uploadParameters, request); + + OAuth10aService service = createAndSignRequest(apiKey, sharedSecret, request); + + // Ensure all parameters (including oauth) are added to payload so signature matches + uploadParameters.putAll(request.getOauthParameters()); + + request.addMultipartPayload(String.format("form-data; name=\"photo\"; filename=\"%s\"", metaData.getFilename()), metaData.getFilemimetype(), payload.getPayload()); + uploadParameters.entrySet().forEach(e -> + request.addMultipartPayload(String.format("form-data; name=\"%s\"", e.getKey()), null, e.getValue().getBytes())); + + try { + return handleResponse(request, service); + } catch (IllegalAccessException | InterruptedException | ExecutionException | InstantiationException | IOException | SAXException e) { + throw new FlickrRuntimeException(e); } + } + private OAuth10aService createAndSignRequest(String apiKey, String sharedSecret, OAuthRequest request) { RequestContext requestContext = RequestContext.getRequestContext(); Auth auth = requestContext.getAuth(); - OAuth1AccessToken requestToken = new OAuth1AccessToken(auth.getToken(), auth.getTokenSecret()); OAuth10aService service = createOAuthService(apiKey, sharedSecret); if (auth != null) { + OAuth1AccessToken requestToken = new OAuth1AccessToken(auth.getToken(), auth.getTokenSecret()); service.signRequest(requestToken, request); } - if (multipart) { - // Ensure all parameters (including oauth) are added to payload so signature matches - parameters.putAll(request.getOauthParameters()); - // TODO Try addMultipartPayload instead, might be simpler - request.setPayload(buildMultipartBody(parameters, getMultipartBoundary())); - } - if (proxyAuth) { request.addHeader("Proxy-Authorization", "Basic " + getProxyCredentials()); } @@ -285,26 +257,76 @@ public com.flickr4java.flickr.Response post(String path, Map par logger.debug("POST: " + request.getCompleteUrl()); } -// org.scribe.model.Response scribeResponse = request.send(); + 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, InstantiationException, IllegalAccessException { + com.github.scribejava.core.model.Response scribeResponse = service.execute(request); + + Response f4jResponse; + synchronized (mutex) { + String strXml = scribeResponse.getBody().trim(); + if (Flickr.debugStream) { + logger.debug(strXml); + } + if (strXml.startsWith("oauth_problem=")) { + throw new FlickrRuntimeException(strXml); + } + Document document = builder.parse(new InputSource(new StringReader(strXml))); + f4jResponse = (Response) responseClass.newInstance(); + f4jResponse.parse(document); + } + 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 { - com.github.scribejava.core.model.Response scribeResponse = service.execute(request); - com.flickr4java.flickr.Response response; + 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; synchronized (mutex) { - String strXml = scribeResponse.getBody().trim(); - 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(); + Document document = builder.parse(in); + response = (Response) responseClass.newInstance(); response.parse(document); } return response; - } catch (IllegalAccessException | InterruptedException | ExecutionException | InstantiationException | IOException | SAXException e) { + } catch (IllegalAccessException | SAXException | IOException | InstantiationException e) { throw new FlickrRuntimeException(e); + } finally { + IOUtilities.close(in); } } @@ -314,7 +336,14 @@ public com.flickr4java.flickr.Response post(String path, Map par * @return */ private OAuth10aService createOAuthService(String apiKey, String sharedSecret) { - ServiceBuilder serviceBuilder = new ServiceBuilder(apiKey).apiKey(apiKey).apiSecret(sharedSecret); + JDKHttpClientConfig config = JDKHttpClientConfig.defaultConfig(); + if (connectTimeoutMs != null) { + config.setConnectTimeout(connectTimeoutMs); + } + if (readTimeoutMs != null) { + config.setReadTimeout(readTimeoutMs); + } + ServiceBuilder serviceBuilder = new ServiceBuilder(apiKey).apiKey(apiKey).apiSecret(sharedSecret).httpClientConfig(config); if (Flickr.debugRequest) { serviceBuilder = serviceBuilder.debug(); @@ -335,24 +364,19 @@ private void buildNormalPostRequest(Map parameters, OAuthRequest } /** - * - * @param parameters + * @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())); - } + private void buildMultipartRequest(Map parameters, OAuthRequest request) { + String multipartBoundary = getMultipartBoundary(); + request.initMultipartBoundary(multipartBoundary); + + request.addHeader("Content-Type", "multipart/form-data; boundary=" + multipartBoundary); + for (Map.Entry entry : parameters.entrySet()) { + request.addQuerystringParameter(entry.getKey(), entry.getValue()); } } - /** - * - * @return - */ private String getMultipartBoundary() { return "---------------------------" + UUID.randomUUID(); } @@ -370,59 +394,6 @@ 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); @@ -432,16 +403,6 @@ private void setTimeouts(HttpURLConnection conn) { } } - private void setTimeouts(OAuthRequest request) { - // TODO Can't figure out how to do this in new Scribe -// if (connectTimeoutMs != null) { -// request.setConnectTimeout(connectTimeoutMs, TimeUnit.MILLISECONDS); -// } -// if (readTimeoutMs != null) { -// request.setReadTimeout(readTimeoutMs, TimeUnit.MILLISECONDS); -// } - } - public void setConnectTimeoutMs(Integer connectTimeoutMs) { this.connectTimeoutMs = connectTimeoutMs; } diff --git a/src/main/java/com/flickr4java/flickr/Transport.java b/src/main/java/com/flickr4java/flickr/Transport.java index 84751798..93115924 100644 --- a/src/main/java/com/flickr4java/flickr/Transport.java +++ b/src/main/java/com/flickr4java/flickr/Transport.java @@ -3,11 +3,15 @@ */ 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. + * 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 @@ -103,24 +107,22 @@ public void setScheme(String scheme) { * @return The Response object * @throws FlickrException */ - public abstract Response post(String path, Map parameters, String apiKey, String sharedSecret, boolean multipart) throws FlickrException; + public abstract Response post(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException; /** - * Invoke an HTTP POST request on a remote host. - * + * 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 */ - public Response post(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException { - - return post(path, parameters, apiKey, sharedSecret, false); - } + 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. diff --git a/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java index 83219e1f..ce869069 100644 --- a/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java +++ b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java @@ -152,9 +152,6 @@ public OAuth1AccessToken getAccessToken(OAuth1RequestToken oAuthRequestToken, St } } - assert accessToken != null; - assert success; - return accessToken; } @@ -166,7 +163,7 @@ public OAuth1AccessToken getAccessToken(OAuth1RequestToken oAuthRequestToken, St * @return The Auth object * @throws FlickrException */ - public Auth checkToken(OAuth1AccessToken accessToken) { + public Auth checkToken(OAuth1AccessToken accessToken) throws FlickrException { return checkToken(accessToken.getToken(), accessToken.getTokenSecret()); } @@ -179,7 +176,7 @@ public Auth checkToken(OAuth1AccessToken accessToken) { * @throws FlickrException * @see "http://www.flickr.com/services/api/flickr.auth.oauth.checkToken.html" */ - public Auth checkToken(String authToken, String tokenSecret) { + public Auth checkToken(String authToken, String tokenSecret) throws FlickrException { // Use TreeMap so keys are automatically sorted alphabetically Map parameters = new TreeMap(); @@ -191,7 +188,7 @@ public Auth checkToken(String authToken, String tokenSecret) { Response response = transportAPI.getNonOAuth(transportAPI.getPath(), parameters); if (response.isError()) { - throw new FlickrRuntimeException(response.getErrorCode(), response.getErrorMessage()); + throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } Auth auth = constructAuth(response, authToken, tokenSecret); @@ -207,7 +204,7 @@ public Auth checkToken(String authToken, String tokenSecret) { * @throws FlickrException * @see "http://www.flickr.com/services/api/flickr.auth.oauth.getAccessToken.html" */ - public OAuth1RequestToken exchangeAuthToken(String authToken) { + public OAuth1RequestToken exchangeAuthToken(String authToken) throws FlickrException { // Use TreeMap so keys are automatically sorted alphabetically Map parameters = new TreeMap(); @@ -218,7 +215,7 @@ public OAuth1RequestToken exchangeAuthToken(String authToken) { Response response = transportAPI.getNonOAuth(transportAPI.getPath(), parameters); if (response.isError()) { - throw new FlickrRuntimeException(response.getErrorCode(), response.getErrorMessage()); + throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } OAuth1RequestToken accessToken = constructToken(response); 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/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java b/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java index 9cd0e64f..1c76e1f6 100644 --- a/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java +++ b/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java @@ -4,7 +4,11 @@ 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 +18,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 +34,7 @@ public class UploadMetaData { private boolean familyFlag; - private boolean async = false; + private boolean async; private Boolean hidden; @@ -38,6 +42,8 @@ public class UploadMetaData { private String contentType; + private String photoId; + public String getTitle() { return title; } @@ -190,7 +196,7 @@ public boolean isAsync() { } /** - * Switch the Uploader behaviour - sychronous or asyncrounous. + * Switch the Uploader behaviour - synchronous or asynchronous. *

* * The default is sychronous. @@ -204,4 +210,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 index 2bca5f7c..e25a2f1d 100644 --- a/src/main/java/com/flickr4java/flickr/uploader/Uploader.java +++ b/src/main/java/com/flickr4java/flickr/uploader/Uploader.java @@ -5,21 +5,12 @@ 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. @@ -37,13 +28,9 @@ * @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; @@ -88,12 +75,8 @@ public Uploader(String apiKey, String sharedSecret, Transport transport) { */ @Override 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); + Payload payload = new Payload(data); + return sendUploadRequest(metaData, payload); } /** @@ -108,16 +91,8 @@ public String upload(byte[] data, UploadMetaData metaData) throws FlickrExceptio */ @Override 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); - } + Payload payload = new Payload(file); + return sendUploadRequest(metaData, payload); } /** @@ -130,12 +105,8 @@ public String upload(File file, UploadMetaData metaData) throws FlickrException */ @Override 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); + Payload payload = new Payload(in); + return sendUploadRequest(metaData, payload); } /** @@ -147,12 +118,8 @@ public String upload(InputStream in, UploadMetaData metaData) throws FlickrExcep */ @Override 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); + Payload payload = new Payload(in, flickrId); + return sendReplaceRequest(async, payload); } /** @@ -166,13 +133,8 @@ public String replace(InputStream in, String flickrId, boolean async) throws Fli */ @Override 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); + Payload payload = new Payload(data, flickrId); + return sendReplaceRequest(async, payload); } /** @@ -186,118 +148,37 @@ public String replace(byte[] data, String flickrId, boolean async) throws Flickr */ @Override 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); - } + Payload payload = new Payload(file, flickrId); + return sendReplaceRequest(async, payload); } - /** - * 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); + 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 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; + return getResponseString(metaData.isAsync(), response); } - /** - * - * @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()); + 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()); } - 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; + return getResponseString(async, response); } /** + * Get the photo or ticket id from the response. * - * @param flickrId * @param async + * @param response * @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; + private String getResponseString(boolean async, UploaderResponse response) { + return async ? response.getTicketId() : response.getPhotoId(); } /** diff --git a/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java index e11e1db1..6b31bfe4 100644 --- a/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java @@ -17,7 +17,6 @@ import com.github.scribejava.core.model.OAuth1AccessToken; import com.github.scribejava.core.model.OAuth1RequestToken; -import com.github.scribejava.core.model.Token; import org.junit.Ignore; import org.junit.Test; @@ -25,7 +24,6 @@ import com.flickr4java.flickr.auth.Auth; import com.flickr4java.flickr.auth.AuthInterface; import com.flickr4java.flickr.auth.Permission; -import org.junit.rules.Verifier; /** * @author Anthony Eden @@ -35,7 +33,7 @@ public class AuthInterfaceTest extends Flickr4JavaTest { @Test @Ignore // Ignored as test is interactive so would fail a build - public void testAuthFlow() throws IOException, URISyntaxException, ExecutionException, InterruptedException { + public void testAuthFlow() throws IOException, URISyntaxException, ExecutionException, InterruptedException, FlickrException { AuthInterface authInterface = flickr.getAuthInterface(); diff --git a/src/test/java/com/flickr4java/flickr/test/UploaderTest.java b/src/test/java/com/flickr4java/flickr/test/UploaderTest.java index 2b53823c..fd5fb1e7 100644 --- a/src/test/java/com/flickr4java/flickr/test/UploaderTest.java +++ b/src/test/java/com/flickr4java/flickr/test/UploaderTest.java @@ -2,26 +2,24 @@ package com.flickr4java.flickr.test; -import static org.junit.Assert.assertNotNull; - 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.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; +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. * @@ -35,25 +33,21 @@ public void testUploadByteArray() throws IOException, FlickrException { PhotosInterface pint = flickr.getPhotosInterface(); if (testProperties.isRealFlickr()) { - try (InputStream in = new FileInputStream(imageFile); ByteArrayOutputStream out = new ByteArrayOutputStream()) { - int b; - 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); - 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; - } + + 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(); @@ -142,9 +136,10 @@ public void testReplaceInputStream() throws IOException, FlickrException { } } } else { - UploadMetaData metaData = buildPrivatePhotoMetadata(); - String photoId = uploader.upload("".getBytes(), metaData); - assertNotNull(photoId); + try (InputStream replaceIS = new ByteArrayInputStream("".getBytes())) { + String photoId = uploader.replace(replaceIS, DUMMY_PHOTO_ID, false); + assertNotNull(photoId); + } } } @@ -161,39 +156,32 @@ public void testReplaceByteArray() throws IOException, FlickrException { PhotosInterface pint = flickr.getPhotosInterface(); if (testProperties.isRealFlickr()) { - try (InputStream in = new FileInputStream(imageFile); ByteArrayOutputStream out = new ByteArrayOutputStream()) { - int b; - 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); + // Upload a photo, which we'll replace, then delete + UploadMetaData metaData = buildPrivatePhotoMetadata(); + String photoId = uploader.upload(Files.readAllBytes(imageFile.toPath()), 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; - } + 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; - } + 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); + String photoId = uploader.replace("".getBytes(), DUMMY_PHOTO_ID, false); assertNotNull(photoId); } } diff --git a/src/test/java/com/flickr4java/flickr/test/util/Setup.java b/src/test/java/com/flickr4java/flickr/test/util/Setup.java index 79f36fbe..48d0e341 100644 --- a/src/test/java/com/flickr4java/flickr/test/util/Setup.java +++ b/src/test/java/com/flickr4java/flickr/test/util/Setup.java @@ -1,6 +1,7 @@ package com.flickr4java.flickr.test.util; import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.REST; import com.flickr4java.flickr.auth.Auth; import com.flickr4java.flickr.auth.AuthInterface; @@ -21,12 +22,12 @@ public static void main(String[] args) { System.out.println("Flickr4Java: Set up integration test environment"); try { new Setup(); - } catch (IOException | ExecutionException | InterruptedException e) { + } catch (IOException | ExecutionException | InterruptedException | FlickrException e) { e.printStackTrace(); } } - public Setup() throws IOException, ExecutionException, InterruptedException { + public Setup() throws IOException, ExecutionException, InterruptedException, FlickrException { String propertiesFile = "src/test/resources/setup.properties"; Properties properties = new Properties(); properties.load(new FileInputStream(propertiesFile)); diff --git a/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java b/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java index c5c91887..0a8a54f6 100644 --- a/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java +++ b/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java @@ -1,9 +1,8 @@ package com.flickr4java.flickr.test.util; -import com.flickr4java.flickr.FlickrRuntimeException; -import com.flickr4java.flickr.RESTResponse; -import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.*; +import com.flickr4java.flickr.uploader.Payload; +import com.flickr4java.flickr.uploader.UploadMetaData; import com.flickr4java.flickr.uploader.UploaderResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,6 +17,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.HashMap; import java.util.Map; public class TransportStub extends Transport { @@ -41,12 +41,13 @@ public Response get(String path, Map parameters, String apiKey, } @Override - public Response post(String path, Map parameters, String apiKey, String sharedSecret, boolean multipart) { - if (multipart) { - return loadMulitpartResponseFromFile("upload", "post"); - } else { - return loadResponseFromFile(parameters.get("method"), "post"); - } + 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 From c7826fb8a875535f0857435c5502fb29f2d10109 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 4 Feb 2019 14:24:29 +0100 Subject: [PATCH 177/239] Clean up unused code --- .../com/flickr4java/flickr/auth/AuthInterface.java | 10 +++++----- .../com/flickr4java/flickr/test/AuthInterfaceTest.java | 4 ++-- .../java/com/flickr4java/flickr/test/util/Setup.java | 9 ++++----- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java index ce869069..39aec409 100644 --- a/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java +++ b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java @@ -15,8 +15,8 @@ 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.OAuth1AccessToken; 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; @@ -75,7 +75,7 @@ public AuthInterface(String apiKey, String sharedSecret, Transport transport) { * * @return the {@link OAuth1RequestToken}, store this for when the user returns from the Flickr website. */ - public OAuth1RequestToken getRequestToken() throws InterruptedException, ExecutionException, IOException { + public OAuth1RequestToken getRequestToken() { return getRequestToken(null); } @@ -124,14 +124,14 @@ public String getAuthorizationUrl(OAuth1RequestToken oAuthRequestToken, Permissi * @param verifier */ @SuppressWarnings("boxing") - public OAuth1AccessToken getAccessToken(OAuth1RequestToken oAuthRequestToken, String verifier) { + 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/ - OAuth1AccessToken accessToken = null; + OAuth1Token accessToken = null; boolean success = false; for (int i = 0; i < maxGetTokenRetries && !success; i++) { try { @@ -163,7 +163,7 @@ public OAuth1AccessToken getAccessToken(OAuth1RequestToken oAuthRequestToken, St * @return The Auth object * @throws FlickrException */ - public Auth checkToken(OAuth1AccessToken accessToken) throws FlickrException { + public Auth checkToken(OAuth1Token accessToken) throws FlickrException { return checkToken(accessToken.getToken(), accessToken.getTokenSecret()); } diff --git a/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java index 6b31bfe4..abe9b2b7 100644 --- a/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java @@ -15,8 +15,8 @@ import java.util.Scanner; import java.util.concurrent.ExecutionException; -import com.github.scribejava.core.model.OAuth1AccessToken; import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.OAuth1Token; import org.junit.Ignore; import org.junit.Test; @@ -67,7 +67,7 @@ public void testAuthFlow() throws IOException, URISyntaxException, ExecutionExce assertNotNull(code); - OAuth1AccessToken accessToken = authInterface.getAccessToken(requestToken, code); + OAuth1Token accessToken = authInterface.getAccessToken(requestToken, code); assertNotNull(accessToken); assertNotNull(accessToken.getToken()); diff --git a/src/test/java/com/flickr4java/flickr/test/util/Setup.java b/src/test/java/com/flickr4java/flickr/test/util/Setup.java index 48d0e341..3db87122 100644 --- a/src/test/java/com/flickr4java/flickr/test/util/Setup.java +++ b/src/test/java/com/flickr4java/flickr/test/util/Setup.java @@ -6,15 +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.OAuth1AccessToken; 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 java.util.concurrent.ExecutionException; public class Setup { @@ -22,12 +21,12 @@ public static void main(String[] args) { System.out.println("Flickr4Java: Set up integration test environment"); try { new Setup(); - } catch (IOException | ExecutionException | InterruptedException | FlickrException e) { + } catch (IOException | FlickrException e) { e.printStackTrace(); } } - public Setup() throws IOException, ExecutionException, InterruptedException, FlickrException { + public Setup() throws IOException, FlickrException { String propertiesFile = "src/test/resources/setup.properties"; Properties properties = new Properties(); properties.load(new FileInputStream(propertiesFile)); @@ -48,7 +47,7 @@ public Setup() throws IOException, ExecutionException, InterruptedException, Fli String tokenKey = scanner.nextLine().trim(); - OAuth1AccessToken accessToken = authInterface.getAccessToken(requestToken, tokenKey); + OAuth1Token accessToken = authInterface.getAccessToken(requestToken, tokenKey); System.out.println("Authentication success"); Auth auth = authInterface.checkToken(accessToken); From e72bf4965fb0202d33e6dc448cc0c712fad4788e Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 4 Feb 2019 15:39:58 +0100 Subject: [PATCH 178/239] Fix references to log4j --- .../java/com/flickr4java/flickr/cameras/CamerasInterface.java | 2 +- .../java/com/flickr4java/flickr/collections/Collection.java | 2 +- .../flickr4java/flickr/collections/CollectionsInterface.java | 2 +- src/main/java/com/flickr4java/flickr/stats/Csv.java | 2 +- src/main/java/com/flickr4java/flickr/stats/Domain.java | 2 +- src/main/java/com/flickr4java/flickr/stats/Referrer.java | 2 +- src/main/java/com/flickr4java/flickr/stats/Stats.java | 2 +- src/main/java/com/flickr4java/flickr/stats/StatsInterface.java | 2 +- src/main/java/com/flickr4java/flickr/stats/Totals.java | 2 +- .../com/flickr4java/flickr/test/util/FileTestProperties.java | 2 +- .../com/flickr4java/flickr/test/util/TestPropertiesFactory.java | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java b/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java index ea125885..b9f87aab 100644 --- a/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java +++ b/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java @@ -29,7 +29,7 @@ public class CamerasInterface { private static final String METHOD_GET_BRAND_MODELS = "flickr.cameras.getBrandModels"; /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") private static Logger _log = LoggerFactory.getLogger(CamerasInterface.class); diff --git a/src/main/java/com/flickr4java/flickr/collections/Collection.java b/src/main/java/com/flickr4java/flickr/collections/Collection.java index c28384a8..2a54c18f 100644 --- a/src/main/java/com/flickr4java/flickr/collections/Collection.java +++ b/src/main/java/com/flickr4java/flickr/collections/Collection.java @@ -18,7 +18,7 @@ public class Collection { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") private static Logger _log = LoggerFactory.getLogger(Collection.class); diff --git a/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java b/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java index 790afaa7..ca6cc101 100644 --- a/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java +++ b/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java @@ -29,7 +29,7 @@ public class CollectionsInterface { private static final String METHOD_GET_TREE = "flickr.collections.getTree"; /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") private static Logger _log = LoggerFactory.getLogger(CollectionsInterface.class); diff --git a/src/main/java/com/flickr4java/flickr/stats/Csv.java b/src/main/java/com/flickr4java/flickr/stats/Csv.java index 1248e83d..9bfeb51f 100644 --- a/src/main/java/com/flickr4java/flickr/stats/Csv.java +++ b/src/main/java/com/flickr4java/flickr/stats/Csv.java @@ -14,7 +14,7 @@ public class Csv { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") private static Logger _log = LoggerFactory.getLogger(Csv.class); diff --git a/src/main/java/com/flickr4java/flickr/stats/Domain.java b/src/main/java/com/flickr4java/flickr/stats/Domain.java index db107626..299f1edb 100644 --- a/src/main/java/com/flickr4java/flickr/stats/Domain.java +++ b/src/main/java/com/flickr4java/flickr/stats/Domain.java @@ -12,7 +12,7 @@ public class Domain { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") private static Logger _log = LoggerFactory.getLogger(Domain.class); diff --git a/src/main/java/com/flickr4java/flickr/stats/Referrer.java b/src/main/java/com/flickr4java/flickr/stats/Referrer.java index 62b9f47b..e64ac8c8 100644 --- a/src/main/java/com/flickr4java/flickr/stats/Referrer.java +++ b/src/main/java/com/flickr4java/flickr/stats/Referrer.java @@ -12,7 +12,7 @@ public class Referrer { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") private static Logger _log = LoggerFactory.getLogger(Referrer.class); diff --git a/src/main/java/com/flickr4java/flickr/stats/Stats.java b/src/main/java/com/flickr4java/flickr/stats/Stats.java index 4ce1b6cd..cd66ddc8 100644 --- a/src/main/java/com/flickr4java/flickr/stats/Stats.java +++ b/src/main/java/com/flickr4java/flickr/stats/Stats.java @@ -12,7 +12,7 @@ public class Stats { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") private static Logger _log = LoggerFactory.getLogger(Stats.class); diff --git a/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java b/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java index 3fd9e928..d1abbf9d 100644 --- a/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java +++ b/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java @@ -31,7 +31,7 @@ public class StatsInterface { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") private static Logger _log = LoggerFactory.getLogger(StatsInterface.class); diff --git a/src/main/java/com/flickr4java/flickr/stats/Totals.java b/src/main/java/com/flickr4java/flickr/stats/Totals.java index 4130d0be..d1f8cbd4 100644 --- a/src/main/java/com/flickr4java/flickr/stats/Totals.java +++ b/src/main/java/com/flickr4java/flickr/stats/Totals.java @@ -12,7 +12,7 @@ public class Totals { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") private static Logger _log = LoggerFactory.getLogger(Totals.class); diff --git a/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java b/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java index bc39b9de..31470ac2 100644 --- a/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java +++ b/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java @@ -21,7 +21,7 @@ public class FileTestProperties implements TestProperties { /** - * Logger for log4j. + * Logger. */ private static Logger _log = LoggerFactory.getLogger(FileTestProperties.class); diff --git a/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java b/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java index 94da3764..6fcbf76d 100644 --- a/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java +++ b/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java @@ -10,7 +10,7 @@ public class TestPropertiesFactory { /** - * Logger for log4j. + * Logger. */ private static Logger _log = LoggerFactory.getLogger(TestPropertiesFactory.class); From dc18b3109e74594d7cd1676dcceea0132e4a4d9c Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 4 Feb 2019 15:40:35 +0100 Subject: [PATCH 179/239] Update library versions --- README.md | 17 +++++++++-------- build.gradle | 5 ++--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index dde7936b..23e8a025 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,11 @@ For example, to send a test ping to the Flickr service: Flickr f = new Flickr(apiKey, sharedSecret, new REST()); TestInterface testInterface = f.getTestInterface(); Collection results = testInterface.echo(Collections.EMPTY_MAP); + +See `/src/examples/java` for more. __Please note:__ this library is not thread safe. -###Setup for gradle -```gradle - compile 'com.aetrion.flickr:flickrapi:1.1' - ``` - ### Requirements This API has been tested and built with JDK 1.8. @@ -34,14 +31,18 @@ An API key is required to use this API. You can [request one on Flickr](http:// #### Required libraries -- [scribe-java (v.1.3.2 onwards)](https://github.com/fernandezpablo85/scribe-java/wiki/Getting-Started) (required for the OAuth functionality). -- [log4j](http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log4j-1.2.17.zip) (runtime dependency for logging) +- [scribejava-api (v 6.2.0 onwards)](https://github.com/scribejava/scribejava) (required for the OAuth functionality). +- [slf4j](https://www.slf4j.org) (runtime dependency for logging) ### Download [Download the latest version from bintray](https://bintray.com/boncey/Flickr4Java/Flickr4Java). +### Gradle + + compile 'com.flickr4java:flickr4java:2.19' + ### Maven @@ -50,7 +51,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// 2.19 -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. diff --git a/build.gradle b/build.gradle index b831994d..22682508 100644 --- a/build.gradle +++ b/build.gradle @@ -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.2.0' + compile 'org.slf4j:slf4j-api:1.7.25' testCompile group: 'junit', name: 'junit', version: '4.11' } From 0668abf5839f413a1a96a171abc885e8315eac6f Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 4 Feb 2019 15:56:28 +0100 Subject: [PATCH 180/239] Make REST class thread safe --- README.md | 2 +- .../java/com/flickr4java/flickr/REST.java | 115 ++++++++---------- .../flickr/test/util/FlickrStub.java | 4 +- 3 files changed, 51 insertions(+), 70 deletions(-) diff --git a/README.md b/README.md index 23e8a025..dc9c2680 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 diff --git a/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java index e761f5b5..7924831b 100644 --- a/src/main/java/com/flickr4java/flickr/REST.java +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -38,7 +38,7 @@ /** * 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 $ */ @@ -48,18 +48,12 @@ public class REST extends Transport { private 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; @@ -73,19 +67,12 @@ public REST() { 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 + * + * @param host The host endpoint */ public REST(String host) { this(); @@ -94,11 +81,9 @@ public REST(String host) { /** * Construct a new REST transport instance using the specified host and port endpoint. - * - * @param host - * The host endpoint - * @param port - * The port + * + * @param host The host endpoint + * @param port The port */ public REST(String host, int port) { this(); @@ -108,7 +93,7 @@ public REST(String host, int port) { /** * Set a proxy for REST-requests. - * + * * @param proxyHost * @param proxyPort */ @@ -122,7 +107,7 @@ public void setProxy(String proxyHost, int proxyPort) { /** * Set a proxy with authentication for REST-requests. - * + * * @param proxyHost * @param proxyPort * @param username @@ -137,11 +122,9 @@ public void setProxy(String proxyHost, int proxyPort, String username, String pa /** * 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 path The request path + * @param parameters The parameters (collection of Parameter objects) * @return The Response */ @Override @@ -176,7 +159,7 @@ public com.flickr4java.flickr.Response get(String path, Map para try { return handleResponse(request, service); - } catch (IllegalAccessException | InstantiationException | SAXException | IOException | InterruptedException | ExecutionException e) { + } catch (IllegalAccessException | InstantiationException | SAXException | IOException | InterruptedException | ExecutionException | ParserConfigurationException e) { throw new FlickrRuntimeException(e); } } @@ -184,10 +167,8 @@ public com.flickr4java.flickr.Response get(String path, Map para /** * Invoke an HTTP POST request on a remote host. * - * @param path - * The request path - * @param parameters - * The parameters (collection of Parameter objects) + * @param path The request path + * @param parameters The parameters (collection of Parameter objects) * @return The Response object */ @Override @@ -201,7 +182,7 @@ public com.flickr4java.flickr.Response post(String path, Map par try { return handleResponse(request, service); - } catch (IllegalAccessException | InterruptedException | ExecutionException | InstantiationException | IOException | SAXException e) { + } catch (IllegalAccessException | InterruptedException | ExecutionException | InstantiationException | IOException | SAXException | ParserConfigurationException e) { throw new FlickrRuntimeException(e); } } @@ -209,10 +190,8 @@ public com.flickr4java.flickr.Response post(String path, Map par /** * Invoke an HTTP POST request on a remote host. * - * @param path - * The request path - * @param metaData - * The parameters (collection of Parameter objects) + * @param path The request path + * @param metaData The parameters (collection of Parameter objects) * @param payload * @return The Response object */ @@ -235,7 +214,7 @@ public com.flickr4java.flickr.Response postMultiPart(String path, UploadMetaData try { return handleResponse(request, service); - } catch (IllegalAccessException | InterruptedException | ExecutionException | InstantiationException | IOException | SAXException e) { + } catch (IllegalAccessException | InterruptedException | ExecutionException | InstantiationException | IOException | SAXException | ParserConfigurationException e) { throw new FlickrRuntimeException(e); } } @@ -264,34 +243,33 @@ 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, InstantiationException, IllegalAccessException { + private Response handleResponse(OAuthRequest request, OAuth10aService service) throws InterruptedException, ExecutionException, IOException, SAXException, InstantiationException, IllegalAccessException, ParserConfigurationException { com.github.scribejava.core.model.Response scribeResponse = service.execute(request); Response f4jResponse; - synchronized (mutex) { - String strXml = scribeResponse.getBody().trim(); - if (Flickr.debugStream) { - logger.debug(strXml); - } - if (strXml.startsWith("oauth_problem=")) { - throw new FlickrRuntimeException(strXml); - } - Document document = builder.parse(new InputSource(new StringReader(strXml))); - f4jResponse = (Response) responseClass.newInstance(); - f4jResponse.parse(document); + 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))); + f4jResponse = (Response) responseClass.newInstance(); + f4jResponse.parse(document); + 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 + * + * @param path The request path + * @param parameters The parameters * @return The Response */ @Override @@ -317,13 +295,13 @@ public Response getNonOAuth(String path, Map parameters) { } Response response; - synchronized (mutex) { - Document document = builder.parse(in); - response = (Response) responseClass.newInstance(); - response.parse(document); - } + DocumentBuilder builder = getDocumentBuilder(); + Document document = builder.parse(in); + response = (Response) responseClass.newInstance(); + response.parse(document); + return response; - } catch (IllegalAccessException | SAXException | IOException | InstantiationException e) { + } catch (IllegalAccessException | SAXException | IOException | InstantiationException | ParserConfigurationException e) { throw new FlickrRuntimeException(e); } finally { IOUtilities.close(in); @@ -331,7 +309,6 @@ public Response getNonOAuth(String path, Map parameters) { } /** - * * @param sharedSecret * @return */ @@ -353,7 +330,6 @@ private OAuth10aService createOAuthService(String apiKey, String sharedSecret) { } /** - * * @param parameters * @param request */ @@ -364,7 +340,7 @@ private void buildNormalPostRequest(Map parameters, OAuthRequest } /** - * @param parameters + * @param parameters * @param request */ private void buildMultipartRequest(Map parameters, OAuthRequest request) { @@ -387,7 +363,7 @@ public boolean isProxyAuth() { /** * Generates Base64-encoded credentials from locally stored username and password. - * + * * @return credentials */ public String getProxyCredentials() { @@ -411,6 +387,11 @@ 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(Object flickrMethod, String strXml, String httpMethod) throws IOException { // String filename = String.format("%s.xml", flickrMethod); diff --git a/src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java b/src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java index febd6ac9..e46e306a 100644 --- a/src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java +++ b/src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java @@ -236,7 +236,7 @@ public ActivityInterface getActivityInterface() { return activityInterface; } - public synchronized BlogsInterface getBlogsInterface() { + public BlogsInterface getBlogsInterface() { if (blogsInterface == null) { blogsInterface = new BlogsInterface(apiKey, sharedSecret, transport); } @@ -288,7 +288,7 @@ public GroupsInterface getGroupsInterface() { /** * @return the interface to the flickr.interestingness methods */ - public synchronized InterestingnessInterface getInterestingnessInterface() { + public InterestingnessInterface getInterestingnessInterface() { if (interestingnessInterface == null) { interestingnessInterface = new InterestingnessInterface(apiKey, sharedSecret, transport); } From 1894dcf2c770c210dd6cb399bf50eecb1c3b1820 Mon Sep 17 00:00:00 2001 From: boncey Date: Tue, 5 Feb 2019 21:18:41 +0000 Subject: [PATCH 181/239] Make tests more robust --- pom.xml | 6 ++++++ src/examples/java/AuthExample.java | 5 ++--- src/examples/java/Backup.java | 10 +++------- src/examples/java/UploadPhoto.java | 11 ++++------- .../flickr/test/PhotosetsInterfaceTest.java | 3 +-- .../flickr/test/util/TestPropertiesFactory.java | 15 +++++++++------ 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pom.xml b/pom.xml index 2dc35622..d8f5c5f4 100644 --- a/pom.xml +++ b/pom.xml @@ -59,6 +59,12 @@ slf4j-api ${slf4j.version} + + org.slf4j + slf4j-simple + ${slf4j.version} + test + junit junit diff --git a/src/examples/java/AuthExample.java b/src/examples/java/AuthExample.java index 4d15c5f4..b76802bb 100644 --- a/src/examples/java/AuthExample.java +++ b/src/examples/java/AuthExample.java @@ -5,9 +5,8 @@ import com.flickr4java.flickr.auth.AuthInterface; import com.flickr4java.flickr.auth.Permission; import com.flickr4java.flickr.util.IOUtilities; -import com.github.scribejava.core.model.OAuth1AccessToken; import com.github.scribejava.core.model.OAuth1RequestToken; -import com.github.scribejava.core.model.Token; +import com.github.scribejava.core.model.OAuth1Token; import java.io.IOException; import java.io.InputStream; @@ -56,7 +55,7 @@ public static void auth() throws IOException, FlickrException, ExecutionExceptio String tokenKey = scanner.nextLine(); scanner.close(); - OAuth1AccessToken accessToken = authInterface.getAccessToken(requestToken, tokenKey); + OAuth1Token accessToken = authInterface.getAccessToken(requestToken, tokenKey); System.out.println("Authentication success"); Auth auth = authInterface.checkToken(accessToken); diff --git a/src/examples/java/Backup.java b/src/examples/java/Backup.java index 23671183..e86f418f 100644 --- a/src/examples/java/Backup.java +++ b/src/examples/java/Backup.java @@ -13,11 +13,8 @@ import com.flickr4java.flickr.photosets.PhotosetsInterface; import com.flickr4java.flickr.util.AuthStore; import com.flickr4java.flickr.util.FileAuthStore; - -import com.github.scribejava.core.model.OAuth1AccessToken; import com.github.scribejava.core.model.OAuth1RequestToken; -import com.github.scribejava.core.model.Token; -import org.xml.sax.SAXException; +import com.github.scribejava.core.model.OAuth1Token; import java.io.BufferedInputStream; import java.io.File; @@ -30,7 +27,6 @@ import java.util.Iterator; import java.util.Map; import java.util.Scanner; -import java.util.concurrent.ExecutionException; /** * A simple program to backup all of a users private and public photos in a photoset aware manner. If photos are classified in multiple photosets, they will be @@ -59,7 +55,7 @@ public Backup(String apiKey, String nsid, String sharedSecret, File authsDir) th } } - private void authorize() throws IOException, SAXException, FlickrException, ExecutionException, InterruptedException { + private void authorize() throws IOException, FlickrException { AuthInterface authInterface = flickr.getAuthInterface(); OAuth1RequestToken requestToken = authInterface.getRequestToken(); @@ -71,7 +67,7 @@ private void authorize() throws IOException, SAXException, FlickrException, Exec String tokenKey = new Scanner(System.in).nextLine(); - OAuth1AccessToken accessToken = authInterface.getAccessToken(requestToken, tokenKey); + OAuth1Token accessToken = authInterface.getAccessToken(requestToken, tokenKey); Auth auth = authInterface.checkToken(accessToken); RequestContext.getRequestContext().setAuth(auth); diff --git a/src/examples/java/UploadPhoto.java b/src/examples/java/UploadPhoto.java index 240b99e1..bd1181c9 100644 --- a/src/examples/java/UploadPhoto.java +++ b/src/examples/java/UploadPhoto.java @@ -18,12 +18,10 @@ import com.flickr4java.flickr.uploader.Uploader; import com.flickr4java.flickr.util.AuthStore; import com.flickr4java.flickr.util.FileAuthStore; -import com.github.scribejava.core.model.OAuth1AccessToken; import com.github.scribejava.core.model.OAuth1RequestToken; -import com.github.scribejava.core.model.Token; +import com.github.scribejava.core.model.OAuth1Token; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.xml.sax.SAXException; import java.io.File; import java.io.FilenameFilter; @@ -40,7 +38,6 @@ import java.util.Properties; import java.util.Scanner; import java.util.Set; -import java.util.concurrent.ExecutionException; /** * 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 @@ -165,7 +162,7 @@ private void setNsid() throws FlickrException { } } - private void authorize() throws IOException, ExecutionException, InterruptedException { + private void authorize() throws IOException, FlickrException { AuthInterface authInterface = flickr.getAuthInterface(); OAuth1RequestToken accessToken = authInterface.getRequestToken(); @@ -179,7 +176,7 @@ private void authorize() throws IOException, ExecutionException, InterruptedExce Scanner scanner = new Scanner(System.in); String tokenKey = scanner.nextLine(); - OAuth1AccessToken requestToken = authInterface.getAccessToken(accessToken, tokenKey); + OAuth1Token requestToken = authInterface.getAccessToken(accessToken, tokenKey); Auth auth = authInterface.checkToken(requestToken); RequestContext.getRequestContext().setAuth(auth); @@ -219,7 +216,7 @@ private Auth constructAuth(String authToken, String tokenSecret, String username return auth; } - public void setAuth(String authToken, String username, String tokenSecret) throws IOException, ExecutionException, InterruptedException { + public void setAuth(String authToken, String username, String tokenSecret) throws IOException, FlickrException { RequestContext rc = RequestContext.getRequestContext(); Auth auth = null; diff --git a/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java index a33f4175..8de7e511 100644 --- a/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java @@ -74,13 +74,12 @@ public void testEditPhotos() throws FlickrException { PhotosetsInterface iface = flickr.getPhotosetsInterface(); - iface.addPhoto(testSet.getId(), testProperties.getPhotoId()); 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()); - assertTrue(ps.getPhotoCount() > 2); + assertTrue(ps.getPhotoCount() >= 2); } @Test diff --git a/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java b/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java index 6fcbf76d..36a29188 100644 --- a/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java +++ b/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java @@ -4,6 +4,7 @@ import org.slf4j.LoggerFactory; import java.io.File; +import java.net.URL; import java.nio.file.Paths; import java.util.Optional; @@ -31,18 +32,20 @@ public static TestProperties getTestProperties() { } private Optional findPropertyFile() { - Optional fileOptional; + Optional fileOptional = Optional.empty(); String setupPropertiesPath = System.getenv("SETUP_PROPERTIES_PATH"); try { - if (setupPropertiesPath != null) { - _log.debug("Using properties file at " + setupPropertiesPath); + 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 { - _log.debug("Using properties file /setup.properties from classpath"); - File properties = Paths.get(this.getClass().getResource("/setup.properties").toURI()).toFile(); - fileOptional = properties.exists() ? Optional.of(properties) : Optional.empty(); + 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); From a208713d29aa2dfcb4b612d067cbacc75e30c366 Mon Sep 17 00:00:00 2001 From: boncey Date: Tue, 5 Feb 2019 21:33:42 +0000 Subject: [PATCH 182/239] Correct licence issues F4J was forked from flickrj which was licensed under BSD and copyrighted Anthony Eden. Anthony has kindly agreed for that copyright to be set as just the BSD license. The old copyright comments have been removed and the license file updated. This resolves #1. --- LICENSE-apache.txt | 56 --------------- LICENSE.txt | 70 +++++++------------ pom.xml | 8 --- .../java/com/flickr4java/flickr/Flickr.java | 4 +- .../flickr4java/flickr/FlickrException.java | 4 +- .../com/flickr4java/flickr/Parameter.java | 4 +- .../java/com/flickr4java/flickr/REST.java | 4 +- .../com/flickr4java/flickr/RESTResponse.java | 4 +- .../flickr4java/flickr/RequestContext.java | 4 +- .../java/com/flickr4java/flickr/Response.java | 4 +- .../flickr4java/flickr/SearchResultList.java | 4 +- .../com/flickr4java/flickr/Transport.java | 4 +- .../com/flickr4java/flickr/auth/Auth.java | 4 +- .../flickr/auth/AuthInterface.java | 4 +- .../flickr4java/flickr/auth/Permission.java | 4 +- .../com/flickr4java/flickr/blogs/Blog.java | 4 +- .../flickr/blogs/BlogsInterface.java | 4 +- .../flickr4java/flickr/contacts/Contact.java | 4 +- .../flickr/contacts/ContactsInterface.java | 4 +- .../flickr/contacts/OnlineStatus.java | 4 +- .../flickr/favorites/FavoritesInterface.java | 4 +- .../flickr4java/flickr/groups/Category.java | 4 +- .../com/flickr4java/flickr/groups/Group.java | 4 +- .../flickr/groups/GroupsInterface.java | 4 +- .../flickr/groups/Subcategory.java | 4 +- .../flickr/groups/pools/PoolsInterface.java | 4 +- .../flickr/people/PeopleInterface.java | 4 +- .../com/flickr4java/flickr/people/User.java | 4 +- .../flickr/photos/Editability.java | 4 +- .../com/flickr4java/flickr/photos/Exif.java | 4 +- .../com/flickr4java/flickr/photos/Extras.java | 4 +- .../com/flickr4java/flickr/photos/Note.java | 4 +- .../flickr/photos/Permissions.java | 4 +- .../com/flickr4java/flickr/photos/Photo.java | 4 +- .../flickr/photos/PhotoContext.java | 4 +- .../flickr4java/flickr/photos/PhotoList.java | 4 +- .../flickr4java/flickr/photos/PhotoUrl.java | 2 +- .../flickr4java/flickr/photos/Photocount.java | 4 +- .../flickr/photos/PhotosInterface.java | 4 +- .../flickr/photos/SearchParameters.java | 4 +- .../com/flickr4java/flickr/photos/Size.java | 4 +- .../flickr/photos/licenses/License.java | 4 +- .../photos/licenses/LicensesInterface.java | 4 +- .../flickr/photos/notes/NotesInterface.java | 4 +- .../photos/transform/TransformInterface.java | 4 +- .../flickr/photosets/Photoset.java | 4 +- .../flickr/photosets/Photosets.java | 4 +- .../flickr/photosets/PhotosetsInterface.java | 4 +- .../flickr/reflection/Argument.java | 4 +- .../flickr4java/flickr/reflection/Error.java | 4 +- .../flickr4java/flickr/reflection/Method.java | 4 +- .../reflection/ReflectionInterface.java | 4 +- .../flickr/tags/RelatedTagsList.java | 4 +- .../java/com/flickr4java/flickr/tags/Tag.java | 4 +- .../flickr/tags/TagsInterface.java | 4 +- .../flickr/test/TestInterface.java | 4 +- .../flickr/uploader/UploadMetaData.java | 4 +- .../flickr4java/flickr/uploader/Uploader.java | 4 +- .../flickr/uploader/UploaderResponse.java | 4 +- .../flickr/urls/UrlsInterface.java | 4 +- .../flickr/util/ByteUtilities.java | 4 +- .../flickr/util/DebugInputStream.java | 4 +- .../flickr/util/DebugOutputStream.java | 4 +- .../flickr4java/flickr/util/IOUtilities.java | 4 +- .../flickr/util/ImageUtilities.java | 4 +- .../flickr/util/StringUtilities.java | 4 +- .../flickr4java/flickr/util/UrlUtilities.java | 4 +- .../flickr4java/flickr/util/XMLUtilities.java | 4 +- .../flickr/test/AuthInterfaceTest.java | 4 +- .../flickr/test/BlogsInterfaceTest.java | 2 +- .../flickr/test/CommonsInterfaceTest.java | 2 +- .../flickr/test/ContactsInterfaceTest.java | 2 +- .../flickr/test/FavoritesInterfaceTest.java | 2 +- .../flickr/test/GroupsInterfaceTest.java | 2 +- .../flickr/test/MembersInterfaceTest.java | 2 +- .../flickr/test/PandaInterfaceTest.java | 2 +- .../flickr/test/PeopleInterfaceTest.java | 2 +- .../flickr/test/PhotosInterfaceTest.java | 2 +- .../flickr/test/PoolsInterfaceTest.java | 2 +- .../flickr/test/TestInterfaceTest.java | 2 +- .../flickr4java/flickr/test/UploaderTest.java | 2 - .../flickr/test/UrlsInterfaceTest.java | 2 - .../flickr/test/util/FlickrStub.java | 4 +- 83 files changed, 103 insertions(+), 323 deletions(-) delete mode 100644 LICENSE-apache.txt diff --git a/LICENSE-apache.txt b/LICENSE-apache.txt deleted file mode 100644 index 183b52c0..00000000 --- a/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/LICENSE.txt b/LICENSE.txt index bbe3905f..82b96c85 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,45 +1,25 @@ -/*-- - - 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 +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/pom.xml b/pom.xml index d8f5c5f4..b8b068bd 100644 --- a/pom.xml +++ b/pom.xml @@ -16,14 +16,6 @@ 7 - - - Apache License, Version 1.1 - http://www.apache.org/licenses/LICENSE-1.1.txt - repo - - - boncey diff --git a/src/main/java/com/flickr4java/flickr/Flickr.java b/src/main/java/com/flickr4java/flickr/Flickr.java index 4daf8c78..ad4c2a17 100644 --- a/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; diff --git a/src/main/java/com/flickr4java/flickr/FlickrException.java b/src/main/java/com/flickr4java/flickr/FlickrException.java index 40a2b243..56d13c43 100644 --- a/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/src/main/java/com/flickr4java/flickr/Parameter.java b/src/main/java/com/flickr4java/flickr/Parameter.java index 54dd321f..7d0b62d3 100644 --- a/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/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java index 7924831b..b3e3c2e6 100644 --- a/src/main/java/com/flickr4java/flickr/REST.java +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr; import com.flickr4java.flickr.auth.Auth; diff --git a/src/main/java/com/flickr4java/flickr/RESTResponse.java b/src/main/java/com/flickr4java/flickr/RESTResponse.java index 1a2f91b2..e35da74d 100644 --- a/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/src/main/java/com/flickr4java/flickr/RequestContext.java b/src/main/java/com/flickr4java/flickr/RequestContext.java index aa685997..030b0b63 100644 --- a/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/src/main/java/com/flickr4java/flickr/Response.java b/src/main/java/com/flickr4java/flickr/Response.java index cfc26a6d..6b37a11b 100644 --- a/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/src/main/java/com/flickr4java/flickr/SearchResultList.java b/src/main/java/com/flickr4java/flickr/SearchResultList.java index b5ec5e21..61af8d2e 100644 --- a/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/src/main/java/com/flickr4java/flickr/Transport.java b/src/main/java/com/flickr4java/flickr/Transport.java index 93115924..f26e881f 100644 --- a/src/main/java/com/flickr4java/flickr/Transport.java +++ b/src/main/java/com/flickr4java/flickr/Transport.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr; import com.flickr4java.flickr.uploader.Payload; diff --git a/src/main/java/com/flickr4java/flickr/auth/Auth.java b/src/main/java/com/flickr4java/flickr/auth/Auth.java index 32441bbf..44ea9e94 100644 --- a/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/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java index 39aec409..747be969 100644 --- a/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java +++ b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.auth; diff --git a/src/main/java/com/flickr4java/flickr/auth/Permission.java b/src/main/java/com/flickr4java/flickr/auth/Permission.java index 993c43d4..da29fae3 100644 --- a/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; diff --git a/src/main/java/com/flickr4java/flickr/blogs/Blog.java b/src/main/java/com/flickr4java/flickr/blogs/Blog.java index fc93f4e5..80eabc84 100644 --- a/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/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java b/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java index e42c0a69..e97642e4 100644 --- a/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java +++ b/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.blogs; import com.flickr4java.flickr.FlickrException; diff --git a/src/main/java/com/flickr4java/flickr/contacts/Contact.java b/src/main/java/com/flickr4java/flickr/contacts/Contact.java index 0df98fd1..d73fe40f 100644 --- a/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; diff --git a/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java b/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java index d899cbb7..1e93346a 100644 --- a/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java +++ b/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.contacts; import com.flickr4java.flickr.FlickrException; diff --git a/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java b/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java index fa62f54a..3b55706f 100644 --- a/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/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java b/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java index f0bc58ef..8ea40e46 100644 --- a/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java +++ b/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.favorites; import com.flickr4java.flickr.FlickrException; diff --git a/src/main/java/com/flickr4java/flickr/groups/Category.java b/src/main/java/com/flickr4java/flickr/groups/Category.java index c0c32125..7a765271 100644 --- a/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/src/main/java/com/flickr4java/flickr/groups/Group.java b/src/main/java/com/flickr4java/flickr/groups/Group.java index 534b0107..3be27cc6 100644 --- a/src/main/java/com/flickr4java/flickr/groups/Group.java +++ b/src/main/java/com/flickr4java/flickr/groups/Group.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.groups; import com.flickr4java.flickr.util.BuddyIconable; diff --git a/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java b/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java index 29cc6eea..181b3898 100644 --- a/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.groups; import com.flickr4java.flickr.FlickrException; diff --git a/src/main/java/com/flickr4java/flickr/groups/Subcategory.java b/src/main/java/com/flickr4java/flickr/groups/Subcategory.java index 4ea067f3..987852c6 100644 --- a/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/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java b/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java index 9f6ebec5..a32b14b1 100644 --- a/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.groups.pools; import com.flickr4java.flickr.FlickrException; diff --git a/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java b/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java index a2522cfc..efb9293e 100644 --- a/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java +++ b/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.people; import com.flickr4java.flickr.FlickrException; diff --git a/src/main/java/com/flickr4java/flickr/people/User.java b/src/main/java/com/flickr4java/flickr/people/User.java index 762e4cf4..aaf3fbfb 100644 --- a/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; diff --git a/src/main/java/com/flickr4java/flickr/photos/Editability.java b/src/main/java/com/flickr4java/flickr/photos/Editability.java index c378657e..618229df 100644 --- a/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/src/main/java/com/flickr4java/flickr/photos/Exif.java b/src/main/java/com/flickr4java/flickr/photos/Exif.java index 6d56dcb4..97f5ae4b 100644 --- a/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/src/main/java/com/flickr4java/flickr/photos/Extras.java b/src/main/java/com/flickr4java/flickr/photos/Extras.java index 154bdee0..58c63426 100644 --- a/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/src/main/java/com/flickr4java/flickr/photos/Note.java b/src/main/java/com/flickr4java/flickr/photos/Note.java index 53252e11..a4ec3202 100644 --- a/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/src/main/java/com/flickr4java/flickr/photos/Permissions.java b/src/main/java/com/flickr4java/flickr/photos/Permissions.java index 6cf6ed03..06dbe5cf 100644 --- a/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/src/main/java/com/flickr4java/flickr/photos/Photo.java b/src/main/java/com/flickr4java/flickr/photos/Photo.java index f814d80c..bd34981a 100644 --- a/src/main/java/com/flickr4java/flickr/photos/Photo.java +++ b/src/main/java/com/flickr4java/flickr/photos/Photo.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; import com.flickr4java.flickr.FlickrException; diff --git a/src/main/java/com/flickr4java/flickr/photos/PhotoContext.java b/src/main/java/com/flickr4java/flickr/photos/PhotoContext.java index 03622a6a..9ff3bb04 100644 --- a/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/src/main/java/com/flickr4java/flickr/photos/PhotoList.java b/src/main/java/com/flickr4java/flickr/photos/PhotoList.java index 2367e7eb..194f94eb 100644 --- a/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/src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java b/src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java index d4376963..1dfee81c 100644 --- a/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/src/main/java/com/flickr4java/flickr/photos/Photocount.java b/src/main/java/com/flickr4java/flickr/photos/Photocount.java index 4e95e7b3..a4a16d2f 100644 --- a/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/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java b/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java index 008ae835..e21bac88 100644 --- a/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; import com.flickr4java.flickr.FlickrException; diff --git a/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java b/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java index 9be4ae8a..4125584d 100644 --- a/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java +++ b/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; import com.flickr4java.flickr.FlickrException; diff --git a/src/main/java/com/flickr4java/flickr/photos/Size.java b/src/main/java/com/flickr4java/flickr/photos/Size.java index 77660e01..38af87e1 100644 --- a/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; diff --git a/src/main/java/com/flickr4java/flickr/photos/licenses/License.java b/src/main/java/com/flickr4java/flickr/photos/licenses/License.java index 6ee46b8f..15983df1 100644 --- a/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/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java b/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java index 3c34198e..adaefe2c 100644 --- a/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos.licenses; diff --git a/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java b/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java index e29c23f2..d1bfb140 100644 --- a/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos.notes; diff --git a/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java b/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java index 18c3ff01..3fc72030 100644 --- a/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos.transform; diff --git a/src/main/java/com/flickr4java/flickr/photosets/Photoset.java b/src/main/java/com/flickr4java/flickr/photosets/Photoset.java index b0066d78..93e1a1fb 100644 --- a/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/src/main/java/com/flickr4java/flickr/photosets/Photosets.java b/src/main/java/com/flickr4java/flickr/photosets/Photosets.java index 74f995ac..0551c8a4 100644 --- a/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/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java b/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java index 4509d193..d8cb62ef 100644 --- a/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java +++ b/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photosets; import com.flickr4java.flickr.Flickr; diff --git a/src/main/java/com/flickr4java/flickr/reflection/Argument.java b/src/main/java/com/flickr4java/flickr/reflection/Argument.java index 74ccda22..1e57efda 100644 --- a/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/src/main/java/com/flickr4java/flickr/reflection/Error.java b/src/main/java/com/flickr4java/flickr/reflection/Error.java index 75a151ae..1ecef1ef 100644 --- a/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/src/main/java/com/flickr4java/flickr/reflection/Method.java b/src/main/java/com/flickr4java/flickr/reflection/Method.java index 0e28dd3c..00d437af 100644 --- a/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/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java b/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java index cd68ae7a..cb5a840d 100644 --- a/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java +++ b/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.reflection; import com.flickr4java.flickr.FlickrException; diff --git a/src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java b/src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java index 8cd0e984..113d0f4c 100644 --- a/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/src/main/java/com/flickr4java/flickr/tags/Tag.java b/src/main/java/com/flickr4java/flickr/tags/Tag.java index ae389c5c..81354c33 100644 --- a/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/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java b/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java index 74062ae1..20916600 100644 --- a/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java +++ b/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.tags; import com.flickr4java.flickr.FlickrException; diff --git a/src/main/java/com/flickr4java/flickr/test/TestInterface.java b/src/main/java/com/flickr4java/flickr/test/TestInterface.java index 7dc67ae6..a51b4270 100644 --- a/src/main/java/com/flickr4java/flickr/test/TestInterface.java +++ b/src/main/java/com/flickr4java/flickr/test/TestInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.test; import com.flickr4java.flickr.Flickr; diff --git a/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java b/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java index 1c76e1f6..65859260 100644 --- a/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java +++ b/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.uploader; diff --git a/src/main/java/com/flickr4java/flickr/uploader/Uploader.java b/src/main/java/com/flickr4java/flickr/uploader/Uploader.java index e25a2f1d..b13a53ff 100644 --- a/src/main/java/com/flickr4java/flickr/uploader/Uploader.java +++ b/src/main/java/com/flickr4java/flickr/uploader/Uploader.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.uploader; diff --git a/src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java b/src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java index 5d00cf85..07ce5988 100644 --- a/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/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java b/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java index 93a39bb1..5ba2b45e 100644 --- a/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java +++ b/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.urls; import com.flickr4java.flickr.FlickrException; diff --git a/src/main/java/com/flickr4java/flickr/util/ByteUtilities.java b/src/main/java/com/flickr4java/flickr/util/ByteUtilities.java index 05d37ef1..256426e0 100644 --- a/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/src/main/java/com/flickr4java/flickr/util/DebugInputStream.java b/src/main/java/com/flickr4java/flickr/util/DebugInputStream.java index 08207446..b4e7829d 100644 --- a/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/src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java b/src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java index 12e163b2..65b7cd39 100644 --- a/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/src/main/java/com/flickr4java/flickr/util/IOUtilities.java b/src/main/java/com/flickr4java/flickr/util/IOUtilities.java index adb5f146..7c475f2d 100644 --- a/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/src/main/java/com/flickr4java/flickr/util/ImageUtilities.java b/src/main/java/com/flickr4java/flickr/util/ImageUtilities.java index 6adfd9f2..1808ff82 100644 --- a/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/StringUtilities.java b/src/main/java/com/flickr4java/flickr/util/StringUtilities.java index 2abb1417..d10296d0 100644 --- a/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/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java b/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java index 13687b43..37baf300 100644 --- a/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; diff --git a/src/main/java/com/flickr4java/flickr/util/XMLUtilities.java b/src/main/java/com/flickr4java/flickr/util/XMLUtilities.java index bf1da72b..fb104ff6 100644 --- a/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/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java index abe9b2b7..21be6830 100644 --- a/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; diff --git a/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java index 8d800f43..e615da54 100644 --- a/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.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/CommonsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java index 3caeca96..96b58f10 100644 --- a/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/src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java index 1b4e77fe..9e564a1c 100644 --- a/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/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java index fb0d8d7f..6a1880b7 100644 --- a/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; diff --git a/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java index 8246a4b1..362e8b05 100644 --- a/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; diff --git a/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java index 480b4bb1..5a90905b 100644 --- a/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; diff --git a/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java index 537c57df..c013392f 100644 --- a/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/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java index 2952ff75..3c2aeca2 100644 --- a/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; diff --git a/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java index fa95e5ae..f147b223 100644 --- a/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.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/PoolsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java index 9ad6e8d2..32eb42cf 100644 --- a/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/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java index 9e040837..0245df1e 100644 --- a/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 index fd5fb1e7..9687e4a8 100644 --- a/src/test/java/com/flickr4java/flickr/test/UploaderTest.java +++ b/src/test/java/com/flickr4java/flickr/test/UploaderTest.java @@ -1,5 +1,3 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ - package com.flickr4java.flickr.test; import com.flickr4java.flickr.FlickrException; diff --git a/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java index f6cb3cc2..a1ca91f7 100644 --- a/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; diff --git a/src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java b/src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java index e46e306a..9db0bc58 100644 --- a/src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java +++ b/src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.test.util; import com.flickr4java.flickr.IFlickr; From ec55a0da9c488dbefe0caaf9462949c46dcda293 Mon Sep 17 00:00:00 2001 From: boncey Date: Tue, 5 Feb 2019 21:40:07 +0000 Subject: [PATCH 183/239] Use JDK Base64 class --- .../java/com/flickr4java/flickr/REST.java | 4 +- .../com/flickr4java/flickr/util/Base64.java | 404 ------------------ 2 files changed, 2 insertions(+), 406 deletions(-) delete mode 100644 src/main/java/com/flickr4java/flickr/util/Base64.java diff --git a/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java index b3e3c2e6..5734d240 100644 --- a/src/main/java/com/flickr4java/flickr/REST.java +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -4,7 +4,6 @@ import com.flickr4java.flickr.auth.Auth; import com.flickr4java.flickr.uploader.Payload; import com.flickr4java.flickr.uploader.UploadMetaData; -import com.flickr4java.flickr.util.Base64; import com.flickr4java.flickr.util.DebugInputStream; import com.flickr4java.flickr.util.IOUtilities; import com.flickr4java.flickr.util.UrlUtilities; @@ -29,6 +28,7 @@ import java.io.StringReader; import java.net.HttpURLConnection; import java.net.URL; +import java.util.Base64; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -365,7 +365,7 @@ public boolean isProxyAuth() { * @return credentials */ public String getProxyCredentials() { - return new String(Base64.encode((proxyUser + ":" + proxyPassword).getBytes())); + return new String(Base64.getEncoder().encode((proxyUser + ":" + proxyPassword).getBytes())); } private void setTimeouts(HttpURLConnection conn) { diff --git a/src/main/java/com/flickr4java/flickr/util/Base64.java b/src/main/java/com/flickr4java/flickr/util/Base64.java deleted file mode 100644 index 707fb8ae..00000000 --- a/src/main/java/com/flickr4java/flickr/util/Base64.java +++ /dev/null @@ -1,404 +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.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * 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 = LoggerFactory.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; - } -} From b222e053849d1868602561f6d0e1b25566836c7e Mon Sep 17 00:00:00 2001 From: boncey Date: Wed, 6 Feb 2019 18:30:08 +0000 Subject: [PATCH 184/239] Remove thread safety warning (fix #127) --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index dc9c2680..0906172f 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,6 @@ For example, to send a test ping to the Flickr service: See `/src/examples/java` for more. -__Please note:__ this library is not thread safe. - ### Requirements This API has been tested and built with JDK 1.8. From cb9179e97829168d5506a4fa73ad8b0a6ea06bd3 Mon Sep 17 00:00:00 2001 From: boncey Date: Wed, 6 Feb 2019 19:03:56 +0000 Subject: [PATCH 185/239] Move to semantic versioning --- README.md | 4 ++-- build.gradle | 2 +- pom.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0906172f..9910c01a 100644 --- a/README.md +++ b/README.md @@ -39,14 +39,14 @@ An API key is required to use this API. You can [request one on Flickr](http:// ### Gradle - compile 'com.flickr4java:flickr4java:2.19' + compile 'com.flickr4java:flickr4java:3.0.0' ### Maven com.flickr4java flickr4java - 2.19 + 3.0.0 Flickr4Java is available on Maven Central so the above settings should be all you need. diff --git a/build.gradle b/build.gradle index 22682508..d761cb7c 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '2.19' +version = '3.0.0' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' diff --git a/pom.xml b/pom.xml index b8b068bd..7f96718a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 2.20-SNAPSHOT + 3.0.0-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From e4f9da6b630db39eaf7f79f1443501d69776f244 Mon Sep 17 00:00:00 2001 From: boncey Date: Wed, 6 Feb 2019 19:20:57 +0000 Subject: [PATCH 186/239] [maven-release-plugin] prepare release flickr4java-3.0.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7f96718a..9d3c1e74 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.0-SNAPSHOT + 3.0.0 jar flickr4java Java API For Flickr. Fork of FlickrJ. From 2ad76c09eee81079f674f5e1280726633b0a0060 Mon Sep 17 00:00:00 2001 From: boncey Date: Wed, 6 Feb 2019 19:21:07 +0000 Subject: [PATCH 187/239] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9d3c1e74..96b2d30c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.0 + 3.0.1-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From a0b56633d08bec7cb3420dfe9244ff92ed771429 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 23 Feb 2019 10:50:02 +0000 Subject: [PATCH 188/239] Handle bad response from Flickr properly When Flickr gives a bad response back to Scribe (503 error etc) handle this and throw a FlickrException with error code "105" (the standard Flickr error code for "Service currently unavailable"). --- src/main/java/com/flickr4java/flickr/REST.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java index 5734d240..241e2960 100644 --- a/src/main/java/com/flickr4java/flickr/REST.java +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -46,6 +46,11 @@ public class REST extends Transport { 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 = ""; @@ -126,7 +131,7 @@ public void setProxy(String proxyHost, int proxyPort, String username, String pa * @return The Response */ @Override - public com.flickr4java.flickr.Response get(String path, Map parameters, String apiKey, String sharedSecret) { + 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()) { @@ -170,7 +175,7 @@ public com.flickr4java.flickr.Response get(String path, Map para * @return The Response object */ @Override - public com.flickr4java.flickr.Response post(String path, Map parameters, String apiKey, String sharedSecret) { + public com.flickr4java.flickr.Response post(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException { OAuthRequest request = new OAuthRequest(Verb.POST, buildUrl(path)); @@ -194,7 +199,7 @@ public com.flickr4java.flickr.Response post(String path, Map par * @return The Response object */ @Override - public com.flickr4java.flickr.Response postMultiPart(String path, UploadMetaData metaData, Payload payload, String apiKey, String sharedSecret) { + public com.flickr4java.flickr.Response postMultiPart(String path, UploadMetaData metaData, Payload payload, String apiKey, String sharedSecret) throws FlickrException { OAuthRequest request = new OAuthRequest(Verb.POST, buildUrl(path)); Map uploadParameters = new HashMap<>(metaData.getUploadParameters()); @@ -241,9 +246,12 @@ 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, InstantiationException, IllegalAccessException, ParserConfigurationException { + private Response handleResponse(OAuthRequest request, OAuth10aService service) throws InterruptedException, ExecutionException, IOException, SAXException, InstantiationException, IllegalAccessException, ParserConfigurationException, FlickrException { 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())); + } Response f4jResponse; String strXml = scribeResponse.getBody().trim(); if (Flickr.debugStream) { From 2603e5c85f9102d0224b26b541212473a7c171f3 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 23 Feb 2019 11:08:08 +0000 Subject: [PATCH 189/239] [maven-release-plugin] prepare release flickr4java-3.0.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 96b2d30c..771673da 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.1-SNAPSHOT + 3.0.1 jar flickr4java Java API For Flickr. Fork of FlickrJ. From e72949caedee1b667a147c11dc1b96ae9789cd43 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 23 Feb 2019 11:08:16 +0000 Subject: [PATCH 190/239] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 771673da..9d6b4d15 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.1 + 3.0.2-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From f66987ba0e360e5fb7730efbbb8c51f3d978fc25 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 23 Feb 2019 11:11:28 +0000 Subject: [PATCH 191/239] Update version numbers for a release --- README.md | 4 ++-- build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9910c01a..1f0b0d9a 100644 --- a/README.md +++ b/README.md @@ -39,14 +39,14 @@ An API key is required to use this API. You can [request one on Flickr](http:// ### Gradle - compile 'com.flickr4java:flickr4java:3.0.0' + compile 'com.flickr4java:flickr4java:3.0.1' ### Maven com.flickr4java flickr4java - 3.0.0 + 3.0.1 Flickr4Java is available on Maven Central so the above settings should be all you need. diff --git a/build.gradle b/build.gradle index d761cb7c..00a084e4 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '3.0.0' +version = '3.0.1' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' From aba3355630215f4595f04e7a5935a10a046cccd0 Mon Sep 17 00:00:00 2001 From: boncey Date: Fri, 16 Aug 2019 22:07:04 +0100 Subject: [PATCH 192/239] Fix URL for building image links #333 --- .../com/flickr4java/flickr/photos/Photo.java | 2 +- .../flickr4java/flickr/util/UrlUtilities.java | 2 +- .../flickr/test/PhotosInterfaceTest.java | 24 +++++++++---------- .../payloads/get/flickr.places.getInfo.xml | 2 +- .../get/flickr.places.getInfoByUrl.xml | 2 +- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/flickr4java/flickr/photos/Photo.java b/src/main/java/com/flickr4java/flickr/photos/Photo.java index bd34981a..6c385f8d 100644 --- a/src/main/java/com/flickr4java/flickr/photos/Photo.java +++ b/src/main/java/com/flickr4java/flickr/photos/Photo.java @@ -969,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()); diff --git a/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java b/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java index 37baf300..6036208b 100644 --- a/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java +++ b/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java @@ -206,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/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java index f147b223..e7f785a7 100644 --- a/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java @@ -499,19 +499,19 @@ 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. diff --git a/src/test/resources/payloads/get/flickr.places.getInfo.xml b/src/test/resources/payloads/get/flickr.places.getInfo.xml index 5fce5134..fa6fb5e8 100644 --- a/src/test/resources/payloads/get/flickr.places.getInfo.xml +++ b/src/test/resources/payloads/get/flickr.places.getInfo.xml @@ -10,7 +10,7 @@ 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 + http://farm6.staticflickr.com/5201/shapefiles/2487956_20101217_bd77c29997.tar.gz diff --git a/src/test/resources/payloads/get/flickr.places.getInfoByUrl.xml b/src/test/resources/payloads/get/flickr.places.getInfoByUrl.xml index 5fce5134..fa6fb5e8 100644 --- a/src/test/resources/payloads/get/flickr.places.getInfoByUrl.xml +++ b/src/test/resources/payloads/get/flickr.places.getInfoByUrl.xml @@ -10,7 +10,7 @@ 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 + http://farm6.staticflickr.com/5201/shapefiles/2487956_20101217_bd77c29997.tar.gz From 4fceb4813f30812dab7003a881b538085cead929 Mon Sep 17 00:00:00 2001 From: boncey Date: Fri, 16 Aug 2019 22:30:19 +0100 Subject: [PATCH 193/239] Add details on choosing an SLF4J library #304 --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1f0b0d9a..9015277c 100644 --- a/README.md +++ b/README.md @@ -29,8 +29,11 @@ An API key is required to use this API. You can [request one on Flickr](http:// #### Required libraries -- [scribejava-api (v 6.2.0 onwards)](https://github.com/scribejava/scribejava) (required for the OAuth functionality). -- [slf4j](https://www.slf4j.org) (runtime dependency for logging) +- [scribejava-api (v 6.2.0 onwards)](https://github.com/scribejava/scribejava) (required for the OAuth functionality) +- [SLF4J](https://www.slf4j.org) (runtime dependency for logging) + +[See here](https://www.slf4j.org/manual.html#swapping) for details on how to choose and configure an SLF4J logging library. + ### Download From e45b732ff2e46e7bb86ebd265afb2f064935ec41 Mon Sep 17 00:00:00 2001 From: boncey Date: Fri, 23 Aug 2019 18:51:41 +0100 Subject: [PATCH 194/239] [maven-release-plugin] prepare release flickr4java-3.0.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9d6b4d15..2ce3a81a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.2-SNAPSHOT + 3.0.2 jar flickr4java Java API For Flickr. Fork of FlickrJ. From 06b43ba0da6b3d1c5a89a75dafdf28c6898aa098 Mon Sep 17 00:00:00 2001 From: boncey Date: Fri, 23 Aug 2019 18:51:48 +0100 Subject: [PATCH 195/239] [maven-release-plugin] prepare for next development iteration --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2ce3a81a..816d3d19 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.2 + 3.0.3-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. From daa4a90fe9b2e110df6b5a40a0f71f3a801af149 Mon Sep 17 00:00:00 2001 From: boncey Date: Fri, 23 Aug 2019 18:58:40 +0100 Subject: [PATCH 196/239] Update version numbers for a release --- README.md | 4 ++-- build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9015277c..11c5f9e8 100644 --- a/README.md +++ b/README.md @@ -42,14 +42,14 @@ An API key is required to use this API. You can [request one on Flickr](http:// ### Gradle - compile 'com.flickr4java:flickr4java:3.0.1' + compile 'com.flickr4java:flickr4java:3.0.2' ### Maven com.flickr4java flickr4java - 3.0.1 + 3.0.2 Flickr4Java is available on Maven Central so the above settings should be all you need. diff --git a/build.gradle b/build.gradle index 00a084e4..40d26b29 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '3.0.1' +version = '3.0.2' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' From c1fc29e54a97cdec0129733e480a2eb3936f36b2 Mon Sep 17 00:00:00 2001 From: = <=> Date: Mon, 6 Jan 2020 20:41:32 -0500 Subject: [PATCH 197/239] set stats on Photo objects if requested via extras in SearchParameters --- pom.xml | 2 +- .../com/flickr4java/flickr/photos/PhotoUtils.java | 12 ++++++++++++ .../flickr4java/flickr/photos/SearchParameters.java | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 816d3d19..87bf1756 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.3-SNAPSHOT + 3.0.4-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. diff --git a/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java b/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java index 6e0ca7c4..8716d291 100644 --- a/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java @@ -2,6 +2,7 @@ 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; @@ -489,6 +490,17 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme } 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/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java b/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java index 4125584d..c1e37217 100644 --- a/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java +++ b/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java @@ -302,7 +302,7 @@ public String getMachineTagMode() { /** * 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 + * 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 From 3b5fbe265264fa1b6649d80f8afd073a5e843b89 Mon Sep 17 00:00:00 2001 From: Vincent Privat Date: Sun, 19 Apr 2020 14:25:26 +0200 Subject: [PATCH 198/239] Update dependencies, fix javadoc errors, OAuth refactor --- pom.xml | 20 +-- .../java/com/flickr4java/flickr/Flickr.java | 2 +- .../java/com/flickr4java/flickr/REST.java | 99 +++------------ .../com/flickr4java/flickr/Transport.java | 2 +- .../flickr4java/flickr/contacts/Contact.java | 2 +- .../flickr/contacts/ContactsInterface.java | 2 +- .../flickr/favorites/FavoritesInterface.java | 8 +- .../flickr/galleries/GalleriesInterface.java | 2 +- .../groups/discuss/GroupDiscussInterface.java | 2 +- .../machinetags/MachinetagsInterface.java | 22 ++-- .../com/flickr4java/flickr/people/User.java | 2 +- .../flickr/photos/PhotosInterface.java | 4 +- .../flickr/photos/SearchParameters.java | 16 ++- .../flickr/photosets/PhotosetsInterface.java | 2 +- .../flickr/places/PlacesInterface.java | 2 +- .../flickr/tags/TagsInterface.java | 1 - .../flickr/util/OAuthUtilities.java | 114 ++++++++++++++++++ .../flickr/test/CamerasInterfaceTest.java | 4 +- .../flickr/test/CommentsInterfaceTest.java | 1 - .../flickr/test/FavoritesInterfaceTest.java | 1 - .../test/InterestingnessInterfaceTest.java | 1 - .../flickr/test/OAuthUtilitiesTest.java | 73 +++++++++++ .../flickr/test/PhotosInterfaceTest.java | 1 - .../flickr/test/util/FileTestProperties.java | 7 -- .../flickr/test/util/TransportStub.java | 5 - 25 files changed, 246 insertions(+), 149 deletions(-) create mode 100644 src/main/java/com/flickr4java/flickr/util/OAuthUtilities.java create mode 100644 src/test/java/com/flickr4java/flickr/test/OAuthUtilitiesTest.java diff --git a/pom.xml b/pom.xml index 87bf1756..c72ca81d 100644 --- a/pom.xml +++ b/pom.xml @@ -35,9 +35,9 @@ 1.8 - 4.11 - 1.7.25 - 6.2.0 + 4.13 + 1.7.30 + 6.9.0 @@ -71,7 +71,7 @@ org.apache.maven.plugins maven-release-plugin - 2.1 + 2.5.3 forked-path false @@ -85,7 +85,7 @@ org.apache.maven.plugins maven-compiler-plugin - 2.3.2 + 3.8.1 ${javaVersion} ${javaVersion} @@ -94,7 +94,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.19.1 + 2.22.2 ${setupPropertiesPath} @@ -104,7 +104,7 @@ org.apache.maven.plugins maven-source-plugin - 2.2.1 + 3.2.1 attach-sources @@ -118,7 +118,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 2.9.1 + 3.2.0 attach-javadocs @@ -202,7 +202,7 @@ org.apache.maven.plugins maven-gpg-plugin - 1.1 + 1.6 sign-artifacts @@ -222,7 +222,7 @@ org.apache.maven.plugins maven-surefire-report-plugin - 2.20.1 + 2.22.2 diff --git a/src/main/java/com/flickr4java/flickr/Flickr.java b/src/main/java/com/flickr4java/flickr/Flickr.java index ad4c2a17..7d06f5cd 100644 --- a/src/main/java/com/flickr4java/flickr/Flickr.java +++ b/src/main/java/com/flickr4java/flickr/Flickr.java @@ -49,7 +49,7 @@ *

* * 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 $ diff --git a/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java index 241e2960..1e32cd71 100644 --- a/src/main/java/com/flickr4java/flickr/REST.java +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -6,10 +6,8 @@ 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.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; @@ -31,7 +29,6 @@ import java.util.Base64; import java.util.HashMap; import java.util.Map; -import java.util.UUID; import java.util.concurrent.ExecutionException; /** @@ -144,7 +141,7 @@ public com.flickr4java.flickr.Response get(String path, Map para RequestContext requestContext = RequestContext.getRequestContext(); Auth auth = requestContext.getAuth(); - OAuth10aService service = createOAuthService(apiKey, sharedSecret); + OAuth10aService service = OAuthUtilities.createOAuthService(apiKey, sharedSecret, connectTimeoutMs, readTimeoutMs); if (auth != null) { OAuth1AccessToken requestToken = new OAuth1AccessToken(auth.getToken(), auth.getTokenSecret()); service.signRequest(requestToken, request); @@ -162,7 +159,7 @@ public com.flickr4java.flickr.Response get(String path, Map para try { return handleResponse(request, service); - } catch (IllegalAccessException | InstantiationException | SAXException | IOException | InterruptedException | ExecutionException | ParserConfigurationException e) { + } catch (ReflectiveOperationException | SAXException | IOException | InterruptedException | ExecutionException | ParserConfigurationException e) { throw new FlickrRuntimeException(e); } } @@ -177,15 +174,13 @@ public com.flickr4java.flickr.Response get(String path, Map para @Override public com.flickr4java.flickr.Response post(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException { - OAuthRequest request = new OAuthRequest(Verb.POST, buildUrl(path)); - - buildNormalPostRequest(parameters, request); + OAuthRequest request = OAuthUtilities.buildNormalPostRequest(parameters, buildUrl(path)); OAuth10aService service = createAndSignRequest(apiKey, sharedSecret, request); try { return handleResponse(request, service); - } catch (IllegalAccessException | InterruptedException | ExecutionException | InstantiationException | IOException | SAXException | ParserConfigurationException e) { + } catch (ReflectiveOperationException | InterruptedException | ExecutionException | IOException | SAXException | ParserConfigurationException e) { throw new FlickrRuntimeException(e); } } @@ -201,58 +196,41 @@ public com.flickr4java.flickr.Response post(String path, Map par @Override public com.flickr4java.flickr.Response postMultiPart(String path, UploadMetaData metaData, Payload payload, String apiKey, String sharedSecret) throws FlickrException { - OAuthRequest request = new OAuthRequest(Verb.POST, buildUrl(path)); Map uploadParameters = new HashMap<>(metaData.getUploadParameters()); - - buildMultipartRequest(uploadParameters, request); + 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.addMultipartPayload(String.format("form-data; name=\"photo\"; filename=\"%s\"", metaData.getFilename()), metaData.getFilemimetype(), payload.getPayload()); + request.addFileByteArrayBodyPartPayloadInMultipartPayload(metaData.getFilemimetype(), payload.getPayload()); uploadParameters.entrySet().forEach(e -> - request.addMultipartPayload(String.format("form-data; name=\"%s\"", e.getKey()), null, e.getValue().getBytes())); + request.addFileByteArrayBodyPartPayloadInMultipartPayload(null, e.getValue().getBytes())); try { return handleResponse(request, service); - } catch (IllegalAccessException | InterruptedException | ExecutionException | InstantiationException | IOException | SAXException | ParserConfigurationException e) { + } catch (ReflectiveOperationException | InterruptedException | ExecutionException | IOException | SAXException | ParserConfigurationException e) { throw new FlickrRuntimeException(e); } } private OAuth10aService createAndSignRequest(String apiKey, String sharedSecret, OAuthRequest request) { - RequestContext requestContext = RequestContext.getRequestContext(); - Auth auth = requestContext.getAuth(); - OAuth10aService service = createOAuthService(apiKey, sharedSecret); - if (auth != null) { - OAuth1AccessToken requestToken = new OAuth1AccessToken(auth.getToken(), auth.getTokenSecret()); - service.signRequest(requestToken, request); - } - - if (proxyAuth) { - request.addHeader("Proxy-Authorization", "Basic " + getProxyCredentials()); - } - - if (Flickr.debugRequest) { - logger.debug("POST: " + request.getCompleteUrl()); - } - - return service; + 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, InstantiationException, IllegalAccessException, ParserConfigurationException, FlickrException { + 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())); } - Response f4jResponse; String strXml = scribeResponse.getBody().trim(); if (Flickr.debugStream) { logger.debug(strXml); @@ -263,7 +241,7 @@ private Response handleResponse(OAuthRequest request, OAuth10aService service) t DocumentBuilder builder = getDocumentBuilder(); Document document = builder.parse(new InputSource(new StringReader(strXml))); - f4jResponse = (Response) responseClass.newInstance(); + Response f4jResponse = (Response) responseClass.getConstructor().newInstance(); f4jResponse.parse(document); return f4jResponse; @@ -314,55 +292,6 @@ public Response getNonOAuth(String path, Map parameters) { } } - /** - * @param sharedSecret - * @return - */ - private OAuth10aService createOAuthService(String apiKey, String sharedSecret) { - JDKHttpClientConfig config = JDKHttpClientConfig.defaultConfig(); - if (connectTimeoutMs != null) { - config.setConnectTimeout(connectTimeoutMs); - } - if (readTimeoutMs != null) { - config.setReadTimeout(readTimeoutMs); - } - ServiceBuilder serviceBuilder = new ServiceBuilder(apiKey).apiKey(apiKey).apiSecret(sharedSecret).httpClientConfig(config); - - if (Flickr.debugRequest) { - serviceBuilder = serviceBuilder.debug(); - } - - return serviceBuilder.build(FlickrApi.instance()); - } - - /** - * @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) { - String multipartBoundary = getMultipartBoundary(); - request.initMultipartBoundary(multipartBoundary); - - request.addHeader("Content-Type", "multipart/form-data; boundary=" + multipartBoundary); - for (Map.Entry entry : parameters.entrySet()) { - request.addQuerystringParameter(entry.getKey(), entry.getValue()); - } - } - - private String getMultipartBoundary() { - return "---------------------------" + UUID.randomUUID(); - } - public boolean isProxyAuth() { return proxyAuth; } diff --git a/src/main/java/com/flickr4java/flickr/Transport.java b/src/main/java/com/flickr4java/flickr/Transport.java index f26e881f..a0e7a7a9 100644 --- a/src/main/java/com/flickr4java/flickr/Transport.java +++ b/src/main/java/com/flickr4java/flickr/Transport.java @@ -132,7 +132,7 @@ public void setScheme(String scheme) { * @param parameters * The parameters * @return The Response - * @throws FlickrException + * @throws FlickrRuntimeException */ public abstract Response getNonOAuth(String path, Map parameters) throws FlickrRuntimeException; diff --git a/src/main/java/com/flickr4java/flickr/contacts/Contact.java b/src/main/java/com/flickr4java/flickr/contacts/Contact.java index d73fe40f..d8545116 100644 --- a/src/main/java/com/flickr4java/flickr/contacts/Contact.java +++ b/src/main/java/com/flickr4java/flickr/contacts/Contact.java @@ -159,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/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java b/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java index 1e93346a..d8e66d25 100644 --- a/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java +++ b/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java @@ -94,7 +94,7 @@ 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 diff --git a/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java b/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java index 8ea40e46..6b04ed8e 100644 --- a/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java +++ b/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java @@ -75,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 @@ -128,9 +128,9 @@ public PhotoList getList(String userId, int perPage, int page, Setflickr.galleries.getList + * @see flickr.galleries.getList */ public List getList(String userId, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); diff --git a/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java b/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java index a491ecd0..319ab155 100644 --- a/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java @@ -42,7 +42,7 @@ 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 diff --git a/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java b/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java index 76b83156..b1a21f1f 100644 --- a/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java +++ b/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java @@ -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?

    * diff --git a/src/main/java/com/flickr4java/flickr/people/User.java b/src/main/java/com/flickr4java/flickr/people/User.java index aaf3fbfb..02cb8326 100644 --- a/src/main/java/com/flickr4java/flickr/people/User.java +++ b/src/main/java/com/flickr4java/flickr/people/User.java @@ -516,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.) * diff --git a/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java b/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java index e21bac88..a8cff448 100644 --- a/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java @@ -809,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. @@ -889,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. diff --git a/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java b/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java index c1e37217..0b5c850a 100644 --- a/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java +++ b/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java @@ -155,7 +155,7 @@ public int getPrivacyFilter() { *
  • 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 * */ @@ -184,7 +184,7 @@ public void setGroupId(String groupId) { * "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 + * 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 @@ -394,7 +394,6 @@ public void setSort(int order) { * @return A placeId * @see com.flickr4java.flickr.places.PlacesInterface#resolvePlaceId(String) */ - @SuppressWarnings("javadoc") public String getPlaceId() { return placeId; } @@ -406,7 +405,7 @@ public String getPlaceId() { * "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 + * 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 @@ -414,7 +413,6 @@ public String getPlaceId() { * @see com.flickr4java.flickr.places.Place#getPlaceId() * @see com.flickr4java.flickr.places.Location#getPlaceId() */ - @SuppressWarnings("javadoc") public void setPlaceId(String placeId) { this.placeId = placeId; } @@ -427,15 +425,15 @@ public String getWoeId() { * 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() @@ -468,7 +466,7 @@ public String getContacts() { /** * 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) diff --git a/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java b/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java index d8cb62ef..5a4ea41f 100644 --- a/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java +++ b/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java @@ -77,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 diff --git a/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java b/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java index 719ecfec..75789069 100644 --- a/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java +++ b/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java @@ -25,7 +25,7 @@ *

    * *

    - * From: kellan 
    + * From: kellan - kellan@yahoo-inc.com
      * Date: Fri, 11 Jan 2008 15:57:59 -0800
      * Subject: [yws-flickr] Flickr and "Place IDs"
      * 
    diff --git a/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java b/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java
    index 20916600..6be21e2f 100644
    --- a/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java
    +++ b/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java
    @@ -70,7 +70,6 @@ public TagsInterface(String apiKey, String sharedSecret, Transport transportAPI)
     
         /**
          * Search for tag-clusters.
    -     * 

    * *

    * This method does not require authentication. 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/src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java index 864b81af..dd8324e4 100644 --- a/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/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java index a72fa253..7d08f0c5 100644 --- a/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; diff --git a/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java index 6a1880b7..7b391188 100644 --- a/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java @@ -16,7 +16,6 @@ import org.junit.Test; import java.util.Collection; -import java.util.Iterator; /** * @author Anthony Eden diff --git a/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java index ad6dd059..aeffdcd5 100644 --- a/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; 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..ce90bcc0 --- /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").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/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java index e7f785a7..5d2e1db3 100644 --- a/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java @@ -197,7 +197,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" }; diff --git a/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java b/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java index 31470ac2..90457865 100644 --- a/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java +++ b/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java @@ -1,8 +1,6 @@ package com.flickr4java.flickr.test.util; import com.flickr4java.flickr.FlickrRuntimeException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileInputStream; @@ -20,11 +18,6 @@ */ public class FileTestProperties implements TestProperties { - /** - * Logger. - */ - private static Logger _log = LoggerFactory.getLogger(FileTestProperties.class); - private String host; private String apiKey; diff --git a/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java b/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java index 0a8a54f6..368cca1f 100644 --- a/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java +++ b/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java @@ -4,8 +4,6 @@ import com.flickr4java.flickr.uploader.Payload; import com.flickr4java.flickr.uploader.UploadMetaData; import com.flickr4java.flickr.uploader.UploaderResponse; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.xml.sax.InputSource; @@ -17,13 +15,10 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.HashMap; import java.util.Map; public class TransportStub extends Transport { - private static final Logger _log = LoggerFactory.getLogger(TransportStub.class); - private final DocumentBuilder builder; public TransportStub() { From 676a4ba4fc4318cdeb46f6c9fe98567dde2fc3bb Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 2 May 2020 16:33:01 +0100 Subject: [PATCH 199/239] Add source element to fix Javadoc issue --- pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pom.xml b/pom.xml index c72ca81d..93b54005 100644 --- a/pom.xml +++ b/pom.xml @@ -119,6 +119,9 @@ org.apache.maven.plugins maven-javadoc-plugin 3.2.0 + + 8 + attach-javadocs From aef7cf530aaabc678cd7e9a530e8bace757ca546 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 2 May 2020 16:33:22 +0100 Subject: [PATCH 200/239] Reduce Javadoc warnings --- src/examples/java/UploadPhoto.java | 2 +- .../com/flickr4java/flickr/Transport.java | 6 +- .../flickr/activity/ActivityInterface.java | 4 +- .../flickr/auth/AuthInterface.java | 6 +- .../flickr/blogs/BlogsInterface.java | 6 +- .../flickr/cameras/CamerasInterface.java | 4 +- .../collections/CollectionsInterface.java | 4 +- .../flickr/commons/CommonsInterface.java | 2 +- .../flickr/contacts/ContactsInterface.java | 4 +- .../flickr/favorites/FavoritesInterface.java | 4 +- .../flickr/galleries/GalleriesInterface.java | 8 +-- .../flickr/groups/GroupsInterface.java | 4 +- .../groups/discuss/GroupDiscussInterface.java | 8 +-- .../groups/members/MembersInterface.java | 2 +- .../flickr/groups/pools/PoolsInterface.java | 10 ++-- .../InterestingnessInterface.java | 6 +- .../machinetags/MachinetagsInterface.java | 10 ++-- .../flickr/panda/PandaInterface.java | 4 +- .../flickr/people/PeopleInterface.java | 24 ++++---- .../com/flickr4java/flickr/photos/Photo.java | 6 +- .../flickr/photos/PhotosInterface.java | 56 +++++++++---------- .../photos/comments/CommentsInterface.java | 10 ++-- .../flickr/photos/geo/GeoInterface.java | 18 +++--- .../photos/licenses/LicensesInterface.java | 4 +- .../flickr/photos/notes/NotesInterface.java | 4 +- .../flickr/photos/people/PeopleInterface.java | 8 +-- .../flickr/photos/upload/UploadInterface.java | 2 +- .../flickr/photosets/PhotosetsInterface.java | 34 +++++------ .../comments/PhotosetsCommentsInterface.java | 8 +-- .../flickr/places/PlacesInterface.java | 30 +++++----- .../flickr/prefs/PrefsInterface.java | 10 ++-- .../reflection/ReflectionInterface.java | 4 +- .../flickr/stats/StatsInterface.java | 6 +- .../flickr/tags/TagsInterface.java | 12 ++-- .../flickr/test/TestInterface.java | 6 +- .../flickr4java/flickr/uploader/Uploader.java | 12 ++-- .../flickr/urls/UrlsInterface.java | 12 ++-- .../flickr/test/Flickr4JavaTest.java | 2 +- .../flickr4java/flickr/test/UploaderTest.java | 8 +-- 39 files changed, 185 insertions(+), 185 deletions(-) diff --git a/src/examples/java/UploadPhoto.java b/src/examples/java/UploadPhoto.java index bd1181c9..bfaa1f9e 100644 --- a/src/examples/java/UploadPhoto.java +++ b/src/examples/java/UploadPhoto.java @@ -124,7 +124,7 @@ private void setUserName() throws FlickrException { /** * Check local saved copy first ??. If Auth by username is available, then we will not need to make the API call. * - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ private void setNsid() throws FlickrException { diff --git a/src/main/java/com/flickr4java/flickr/Transport.java b/src/main/java/com/flickr4java/flickr/Transport.java index a0e7a7a9..162db44c 100644 --- a/src/main/java/com/flickr4java/flickr/Transport.java +++ b/src/main/java/com/flickr4java/flickr/Transport.java @@ -89,7 +89,7 @@ public void setScheme(String scheme) { * @param apiKey * @param sharedSecret * @return The Response - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public abstract Response get(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException; @@ -103,7 +103,7 @@ public void setScheme(String scheme) { * @param apiKey * @param sharedSecret * @return The Response object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public abstract Response post(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException; @@ -118,7 +118,7 @@ public void setScheme(String scheme) { * @param apiKey * @param sharedSecret * @return The Response object - * @throws FlickrException + * @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; diff --git a/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java b/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java index b648ccf7..0dacaa5a 100644 --- a/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java +++ b/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java @@ -45,7 +45,7 @@ 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(); @@ -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/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java index 747be969..358a1415 100644 --- a/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java +++ b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java @@ -159,7 +159,7 @@ public OAuth1Token getAccessToken(OAuth1RequestToken oAuthRequestToken, String v * @param accessToken * The authentication token * @return The Auth object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Auth checkToken(OAuth1Token accessToken) throws FlickrException { return checkToken(accessToken.getToken(), accessToken.getTokenSecret()); @@ -171,7 +171,7 @@ public Auth checkToken(OAuth1Token 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 { @@ -199,7 +199,7 @@ 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 OAuth1RequestToken exchangeAuthToken(String authToken) throws FlickrException { diff --git a/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java b/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java index e97642e4..d3f11461 100644 --- a/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java +++ b/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java @@ -48,7 +48,7 @@ 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(); @@ -80,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(); @@ -107,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/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java b/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java index b9f87aab..457a9ff8 100644 --- a/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java +++ b/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java @@ -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/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java b/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java index ca6cc101..80856155 100644 --- a/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java +++ b/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java @@ -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/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java b/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java index ebabc201..93927010 100644 --- a/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java +++ b/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java @@ -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/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java b/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java index d8e66d25..90790e6a 100644 --- a/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java +++ b/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java @@ -98,7 +98,7 @@ public Collection getList() throws FlickrException { * 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(); @@ -149,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/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java b/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java index 6b04ed8e..d226c0b1 100644 --- a/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java +++ b/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java @@ -56,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(); @@ -134,7 +134,7 @@ public PhotoList getList(String userId, int perPage, int page, Set getPublicList(String userId, int perPage, int page, Set extras) throws FlickrException { diff --git a/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java b/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java index d7cf1b7e..fbc2974f 100644 --- a/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java +++ b/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java @@ -75,7 +75,7 @@ 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 */ @@ -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/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java b/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java index 181b3898..17848438 100644 --- a/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java @@ -58,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 @@ -209,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/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java b/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java index 319ab155..bccde79d 100644 --- a/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java @@ -48,7 +48,7 @@ public GroupDiscussInterface(String apiKey, String sharedSecret, Transport trans * @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/src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java b/src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java index 9fcbec16..623423cc 100644 --- a/src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java @@ -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/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java b/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java index a32b14b1..2cde3be8 100644 --- a/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java @@ -84,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(); @@ -120,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(); @@ -172,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(); @@ -242,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); @@ -275,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/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java b/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java index 37c3704b..29ccbfee 100644 --- a/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java +++ b/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java @@ -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/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java b/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java index b1a21f1f..0621dbe3 100644 --- a/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java +++ b/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java @@ -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/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java b/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java index b7b9ce8f..126c053f 100644 --- a/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java +++ b/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java @@ -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/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java b/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java index efb9293e..1286b1b7 100644 --- a/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java +++ b/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java @@ -75,7 +75,7 @@ public PeopleInterface(String apiKey, String sharedSecret, Transport transportAP * @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(); @@ -102,7 +102,7 @@ public User findByEmail(String email) throws FlickrException { * @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(); @@ -129,7 +129,7 @@ public User findByUsername(String username) throws FlickrException { * @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(); @@ -196,7 +196,7 @@ public User getInfo(String userId) throws FlickrException { * @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(); @@ -243,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(); @@ -288,7 +288,7 @@ public PhotoList getPublicPhotos(String userId, Set extras, int p * 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(); @@ -440,7 +440,7 @@ public PhotoList getPhotosOf(String userId, String ownerId, Set e * @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 { @@ -454,7 +454,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 { @@ -468,7 +468,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 { @@ -483,7 +483,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 { @@ -496,7 +496,7 @@ 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 { @@ -508,7 +508,7 @@ 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 { diff --git a/src/main/java/com/flickr4java/flickr/photos/Photo.java b/src/main/java/com/flickr4java/flickr/photos/Photo.java index 6c385f8d..cc18d532 100644 --- a/src/main/java/com/flickr4java/flickr/photos/Photo.java +++ b/src/main/java/com/flickr4java/flickr/photos/Photo.java @@ -570,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 { @@ -878,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 { @@ -931,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 { diff --git a/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java b/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java index a8cff448..36e5c90e 100644 --- a/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java @@ -137,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(); @@ -158,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(); @@ -183,7 +183,7 @@ 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(); @@ -248,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(); @@ -303,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 { @@ -369,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(); @@ -472,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(); @@ -560,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(); @@ -590,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(); @@ -638,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(); @@ -674,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(); @@ -709,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); @@ -727,7 +727,7 @@ 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(); @@ -768,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(); @@ -826,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 { @@ -906,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 { @@ -967,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(); @@ -1001,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(); @@ -1025,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(); @@ -1070,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(); @@ -1131,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(); @@ -1159,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(); @@ -1196,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(); @@ -1221,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(); @@ -1255,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(); @@ -1286,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(); @@ -1337,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 { @@ -1404,7 +1404,7 @@ public InputStream getImageAsStream(Photo photo, int size) throws FlickrExceptio * @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 { diff --git a/src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java b/src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java index 9e6bae28..b86947a9 100644 --- a/src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java @@ -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/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java b/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java index 47420178..b7c851ef 100644 --- a/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java @@ -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/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java b/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java index adaefe2c..7975cbb2 100644 --- a/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java @@ -44,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(); @@ -77,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/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java b/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java index d1bfb140..d30f3e20 100644 --- a/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java @@ -77,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(); @@ -96,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/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java b/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java index 001c633c..9d50bb84 100644 --- a/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/src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java b/src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java index edc62ed7..a322daa7 100644 --- a/src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java @@ -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/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java b/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java index 5a4ea41f..ea9f1ab8 100644 --- a/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java +++ b/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java @@ -108,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(); @@ -134,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(); @@ -157,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(); @@ -184,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(); @@ -210,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(); @@ -252,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(); @@ -308,7 +308,7 @@ 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, null); @@ -324,7 +324,7 @@ public Photosets getList(String userId) throws FlickrException { * @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, String primaryPhotoExtras) throws FlickrException { return getList(userId, 0, 0, primaryPhotoExtras); @@ -344,7 +344,7 @@ public Photosets getList(String userId, String primaryPhotoExtras) throws Flickr * @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, String primaryPhotoExtras) throws FlickrException { Map parameters = new HashMap(); @@ -435,7 +435,7 @@ public Photosets getList(String userId, int perPage, int page, String primaryPho * @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(); @@ -481,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(); @@ -547,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); @@ -560,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(); @@ -582,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(); @@ -604,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(); @@ -626,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(); @@ -648,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/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java b/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java index 4b58cf69..651262e0 100644 --- a/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java +++ b/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java @@ -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/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java b/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java index 75789069..d386c63c 100644 --- a/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java +++ b/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java @@ -151,7 +151,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 +229,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 +271,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 +314,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 +344,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 +368,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 +408,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 +468,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 +525,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 +569,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 +638,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 +719,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 +773,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 +800,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 +837,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 { diff --git a/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java b/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java index a9d10c8b..43b6bb6f 100644 --- a/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java +++ b/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java @@ -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/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java b/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java index cb5a840d..002dfbd9 100644 --- a/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java +++ b/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java @@ -59,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(); @@ -177,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/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java b/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java index d1abbf9d..59055b80 100644 --- a/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java +++ b/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java @@ -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/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java b/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java index 6be21e2f..53f2683c 100644 --- a/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java +++ b/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java @@ -116,7 +116,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 { @@ -239,7 +239,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 { @@ -277,7 +277,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 { @@ -314,7 +314,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 { @@ -332,7 +332,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 { @@ -377,7 +377,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/src/main/java/com/flickr4java/flickr/test/TestInterface.java b/src/main/java/com/flickr4java/flickr/test/TestInterface.java index a51b4270..82a3bd5a 100644 --- a/src/main/java/com/flickr4java/flickr/test/TestInterface.java +++ b/src/main/java/com/flickr4java/flickr/test/TestInterface.java @@ -45,7 +45,7 @@ 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(); @@ -64,7 +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 FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public User login() throws FlickrException { Map parameters = new HashMap(); @@ -87,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/Uploader.java b/src/main/java/com/flickr4java/flickr/uploader/Uploader.java index b13a53ff..accc7ce2 100644 --- a/src/main/java/com/flickr4java/flickr/uploader/Uploader.java +++ b/src/main/java/com/flickr4java/flickr/uploader/Uploader.java @@ -69,7 +69,7 @@ public Uploader(String apiKey, String sharedSecret, Transport transport) { * @param metaData * The meta data * @return photoId or ticketId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Override public String upload(byte[] data, UploadMetaData metaData) throws FlickrException { @@ -85,7 +85,7 @@ public String upload(byte[] data, UploadMetaData metaData) throws FlickrExceptio * @param metaData * The meta data * @return photoId or ticketId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Override public String upload(File file, UploadMetaData metaData) throws FlickrException { @@ -99,7 +99,7 @@ public String upload(File file, UploadMetaData metaData) throws FlickrException * @param in * @param metaData * @return photoId or ticketId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Override public String upload(InputStream in, UploadMetaData metaData) throws FlickrException { @@ -112,7 +112,7 @@ public String upload(InputStream in, UploadMetaData metaData) throws FlickrExcep * * @param in * @return photoId or ticketId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Override public String replace(InputStream in, String flickrId, boolean async) throws FlickrException { @@ -127,7 +127,7 @@ public String replace(InputStream in, String flickrId, boolean async) throws Fli * @param flickrId * @param async * @return photoId or ticketId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Override public String replace(byte[] data, String flickrId, boolean async) throws FlickrException { @@ -142,7 +142,7 @@ public String replace(byte[] data, String flickrId, boolean async) throws Flickr * @param flickrId * @param async * @return photoId or ticketId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Override public String replace(File file, String flickrId, boolean async) throws FlickrException { diff --git a/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java b/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java index 5ba2b45e..80948eb5 100644 --- a/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java +++ b/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java @@ -60,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(); @@ -83,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(); @@ -106,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(); @@ -129,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(); @@ -156,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(); @@ -180,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 { diff --git a/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java b/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java index 89f5c189..fc2d5316 100644 --- a/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java +++ b/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java @@ -26,7 +26,7 @@ public class Flickr4JavaTest { protected TestProperties testProperties; /** - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Before public void setUp() throws FlickrException { diff --git a/src/test/java/com/flickr4java/flickr/test/UploaderTest.java b/src/test/java/com/flickr4java/flickr/test/UploaderTest.java index 9687e4a8..be0383a3 100644 --- a/src/test/java/com/flickr4java/flickr/test/UploaderTest.java +++ b/src/test/java/com/flickr4java/flickr/test/UploaderTest.java @@ -22,7 +22,7 @@ public class UploaderTest extends Flickr4JavaTest { * Test photo uploading using a byte array. * * @throws IOException - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Test public void testUploadByteArray() throws IOException, FlickrException { @@ -58,7 +58,7 @@ public void testUploadByteArray() throws IOException, FlickrException { * Test photo upload using an InputStream. * * @throws IOException - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Test public void testUploadInputStream() throws IOException, FlickrException { @@ -95,7 +95,7 @@ public void testUploadInputStream() throws IOException, FlickrException { * Test photo replace using an InputStream. * * @throws IOException - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Test public void testReplaceInputStream() throws IOException, FlickrException { @@ -145,7 +145,7 @@ public void testReplaceInputStream() throws IOException, FlickrException { * Test photo replace using a byte array. * * @throws IOException - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ @Test public void testReplaceByteArray() throws IOException, FlickrException { From fc0a32c38d982a19ed8b16d1116078795690a1b1 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 2 May 2020 18:41:12 +0100 Subject: [PATCH 201/239] Fixes from running functional tests --- README.md | 12 + .../java/com/flickr4java/flickr/REST.java | 4 +- .../flickr/test/MachinetagsInterfaceTest.java | 6 +- .../flickr/test/OAuthUtilitiesTest.java | 2 +- .../flickr4java/flickr/test/UploaderTest.java | 10 +- .../flickr.machinetags.getRecentValues.xml | 560 ++++++++++++++++-- 6 files changed, 528 insertions(+), 66 deletions(-) diff --git a/README.md b/README.md index 11c5f9e8..1fd119c7 100644 --- a/README.md +++ b/README.md @@ -57,3 +57,15 @@ Flickr4Java is available on Maven Central so the above settings should be all yo ### 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/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java index 1e32cd71..c97c4369 100644 --- a/src/main/java/com/flickr4java/flickr/REST.java +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -204,9 +204,9 @@ public com.flickr4java.flickr.Response postMultiPart(String path, UploadMetaData // Ensure all parameters (including oauth) are added to payload so signature matches uploadParameters.putAll(request.getOauthParameters()); - request.addFileByteArrayBodyPartPayloadInMultipartPayload(metaData.getFilemimetype(), payload.getPayload()); + request.addFileByteArrayBodyPartPayloadInMultipartPayload(payload.getPayload(), "photo", metaData.getFilename()); uploadParameters.entrySet().forEach(e -> - request.addFileByteArrayBodyPartPayloadInMultipartPayload(null, e.getValue().getBytes())); + request.addFileByteArrayBodyPartPayloadInMultipartPayload(null, e.getValue().getBytes(), e.getKey())); try { return handleResponse(request, service); diff --git a/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java index ad644391..2e7ada76 100644 --- a/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, -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/src/test/java/com/flickr4java/flickr/test/OAuthUtilitiesTest.java b/src/test/java/com/flickr4java/flickr/test/OAuthUtilitiesTest.java index ce90bcc0..73df6e75 100644 --- a/src/test/java/com/flickr4java/flickr/test/OAuthUtilitiesTest.java +++ b/src/test/java/com/flickr4java/flickr/test/OAuthUtilitiesTest.java @@ -34,7 +34,7 @@ public void testCreateOAuthService() { @Test public void testSignRequest() { // No proxy credentials - OAuth10aService service = new ServiceBuilder("foo").build(FlickrApi.instance()); + 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); diff --git a/src/test/java/com/flickr4java/flickr/test/UploaderTest.java b/src/test/java/com/flickr4java/flickr/test/UploaderTest.java index be0383a3..49555eae 100644 --- a/src/test/java/com/flickr4java/flickr/test/UploaderTest.java +++ b/src/test/java/com/flickr4java/flickr/test/UploaderTest.java @@ -98,7 +98,7 @@ public void testUploadInputStream() throws IOException, FlickrException { * @throws FlickrException if there was a problem connecting to Flickr */ @Test - public void testReplaceInputStream() throws IOException, FlickrException { + public void testReplaceInputStream() throws IOException, FlickrException, InterruptedException { Uploader uploader = flickr.getUploader(); PhotosInterface pint = flickr.getPhotosInterface(); File imageFile = new File(testProperties.getImageFile()); @@ -112,6 +112,9 @@ public void testReplaceInputStream() throws IOException, FlickrException { photoId = uploader.upload(uploadIS, metaData); } + // Fix some odd timing issue + Thread.sleep(1500); + try (InputStream replaceIS = new FileInputStream(imageFile)) { try { @@ -148,7 +151,7 @@ public void testReplaceInputStream() throws IOException, FlickrException { * @throws FlickrException if there was a problem connecting to Flickr */ @Test - public void testReplaceByteArray() throws IOException, FlickrException { + public void testReplaceByteArray() throws IOException, FlickrException, InterruptedException { File imageFile = new File(testProperties.getImageFile()); Uploader uploader = flickr.getUploader(); PhotosInterface pint = flickr.getPhotosInterface(); @@ -159,6 +162,9 @@ public void testReplaceByteArray() throws IOException, FlickrException { 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); diff --git a/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml b/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml index 386b938e..7c5fb029 100644 --- a/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml +++ b/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml @@ -1,61 +1,505 @@ - - mixed_media - dfggdf - dfgdfg - puppy - porcelain - fur - table - fruit - counter - bag - terra_cotta - stoneware - none, - camera - small_child - dog - earthenware - silver_leaf - paint - glaze - glass - digital_image - other - black_clay - kiln-cast_glass - wood - leather_pillow - slipware - trails - hiking - boys - marley - hill - grass_hill - grass - cyrus - mn - flower - boy - kiln_cast_glass - cast_iron - bus - chocolate - booy - _wood - charcoal - nylon_flocking - clover - nature - porcelain_slip - limoges_porcelain - royal_copenhagen_porcelain - resin - human_flesh - t_material - clay_and_brick - + + 12449 + 8040 + 12425 + 12315 + 12488 + 12487 + 12483 + 12486 + 10555 + 12485 + 12484 + 12435 + 12316 + 12481 + 12480 + 12479 + 11313 + 12478 + 12477 + 12476 + 12475 + 12473 + 12472 + 12470 + 12469 + 12434 + 12468 + 12467 + 12466 + 11432 + 12263 + 12465 + 12462 + 12464 + 12072 + 10119 + 10875 + 12461 + 12457 + 10291 + 12460 + 11360 + 12459 + 12450 + 11087 + 10312 + 12262 + 12456 + 12455 + 12454 + 9504 + 12453 + 10716 + 12452 + 11982 + 12451 + 12447 + 10862 + 10840 + 6986 + 10290 + 12403 + 6936 + 10266 + 12445 + 10035 + 10476 + 12443 + 12326 + 12314 + 7309 + 8209 + 10974 + 11394 + 12442 + 6282 + 12441 + 12317 + 12440 + 12439 + 12438 + 7329 + 12327 + 12430 + 12436 + 12429 + 7920 + 12432 + 9089 + 12431 + 6283 + 6354 + 6277 + 9128 + 6472 + 12426 + 12428 + 12424 + 5773 + 12207 + 6279 + 6890 + 10719 + 11315 + 10809 + 10688 + 11634 + 12417 + 12367 + 12423 + 12422 + 11192 + 12420 + 6965 + 12419 + 7565 + 12418 + 9898 + 6284 + 12416 + 12413 + 12415 + 12412 + 12397 + 12411 + 12410 + 12392 + 11461 + 11719 + 10363 + 12409 + 9142 + 12401 + 12408 + 12345 + 12319 + 12407 + 8031 + 12406 + 12405 + 8324 + 12277 + 12404 + 11673 + 12402 + 8174 + 12372 + 12400 + 12360 + 12399 + 12398 + 12396 + 12395 + 12394 + 12393 + 12376 + 12391 + 12390 + 10055 + 12389 + 12388 + 12387 + 12384 + 12383 + 12382 + 12381 + 12380 + 12334 + 9503 + 12379 + 12378 + 12377 + 12226 + 12375 + 12374 + 12371 + 12370 + 12369 + 12368 + 12363 + 12366 + 12365 + 12364 + 11513 + 12362 + 12361 + 12358 + 12359 + 12357 + 12356 + 12355 + 12354 + 12353 + 12352 + 12197 + 12331 + 12117 + 12349 + 12348 + 12346 + 12344 + 12343 + 12308 + 12309 + 12310 + 12342 + 12341 + 12339 + 12338 + 12321 + 12337 + 12320 + 10714 + 12335 + 12328 + 12325 + 12324 + 12323 + 12322 + 12071 + 12318 + 12313 + 12312 + 12311 + 12306 + 12307 + 11638 + 9075 + 8686 + 12305 + 12304 + 12303 + 12302 + 12300 + 12008 + 12299 + 12298 + 12297 + 12295 + 12294 + 12009 + 12293 + 12274 + 12292 + 12291 + 12214 + 12235 + 12290 + 12289 + 9930 + 12288 + 12287 + 12285 + 12196 + 12282 + 12284 + 12283 + 12280 + 12281 + 12278 + 12276 + 12275 + 11659 + 12258 + 12273 + 12272 + 12271 + 10681 + 12270 + 12269 + 12268 + 12267 + 12266 + 12265 + 12264 + 12176 + 12261 + 12260 + 12259 + 12215 + 12255 + 12253 + 12252 + 12250 + 12247 + 12246 + 12243 + 11692 + 12191 + 12223 + 12192 + 12242 + 12241 + 8570 + 11606 + 12240 + 12239 + 10503 + 12019 + 11570 + 12238 + 12218 + 12237 + 12171 + 11717 + 12236 + 12234 + 9499 + 12233 + 12231 + 11833 + 12230 + 12211 + 12216 + 12229 + 12227 + 12225 + 12224 + 12222 + 12198 + 12219 + 12217 + 12213 + 12212 + 12210 + 12204 + 12209 + 12208 + 11628 + 12206 + 12205 + 12203 + 11469 + 12202 + 12200 + 12199 + 12186 + 12195 + 12194 + 12193 + 12190 + 12189 + 12188 + 12187 + 12185 + 12184 + 12183 + 12182 + 12181 + 12180 + 12178 + 12177 + 11840 + 12175 + 12172 + 12174 + 12173 + 11725 + 12170 + 12168 + 12167 + 12166 + 12165 + 6362 + 12164 + 12163 + 12079 + 12160 + 12162 + 12161 + 12159 + 12158 + 12157 + 12156 + 12151 + 12155 + 12154 + 12153 + 12150 + 12149 + 12148 + 12145 + 9302 + 12138 + 12144 + 12143 + 12131 + 12125 + 12142 + 11528 + 11892 + 12141 + 12140 + 12139 + 12137 + 11724 + 11901 + 12136 + 12135 + 12134 + 12133 + 12132 + 12129 + 12115 + 12126 + 12124 + 12123 + 8005 + 11746 + 12112 + 11958 + 11970 + 11991 + 12122 + 11523 + 12121 + 12120 + 12119 + 12116 + 12114 + 12067 + 12109 + 12113 + 12108 + 12107 + 12106 + 12105 + 12104 + 12086 + 12103 + 12102 + 12101 + 12100 + 12099 + 12098 + 12097 + 12096 + 12091 + 12087 + 11758 + 12095 + 12094 + 12092 + 12090 + 11603 + 12053 + 12078 + 12089 + 12084 + 12082 + 12083 + 11660 + 11765 + 11976 + 12081 + 12080 + 12077 + 9853 + 12076 + 12075 + 12073 + 12069 + 12068 + 12066 + 12065 + 12064 + 12063 + 12062 + 12061 + 12060 + 12059 + 12058 + 12054 + 12057 + 12056 + 12055 + 12035 + 12052 + 12051 + 12050 + 11379 + 12048 + 12047 + 12046 + 12045 + 12044 + 12043 + 12042 + 12041 + 12040 + 12039 + 12038 + 12037 + 12036 + 11932 + 11748 + 12034 + 12033 + 12032 + 12031 + \ No newline at end of file From 4fd2c8e383d415fa5758285704aa4b457065603e Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 2 May 2020 18:57:34 +0100 Subject: [PATCH 202/239] Remove pom path override --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 93b54005..a99f2ce5 100644 --- a/pom.xml +++ b/pom.xml @@ -76,7 +76,6 @@ forked-path false ${arguments} -Psonatype-oss-release - Flickr4Java/pom.xml From 79367f5cce2c51e9474e50ebfb89feb2bdc913e0 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 3 May 2020 09:25:52 +0100 Subject: [PATCH 203/239] [maven-release-plugin] prepare release flickr4java-3.0.4 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index a99f2ce5..34815df4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.4-SNAPSHOT + 3.0.4 jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -152,7 +152,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - HEAD + flickr4java-3.0.4 From 1f47372b27a9eb65f9fd2d67cec83bcdc9d76858 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 3 May 2020 09:26:00 +0100 Subject: [PATCH 204/239] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 34815df4..e83408f5 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.4 + 3.0.5-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -152,7 +152,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - flickr4java-3.0.4 + HEAD From 5a75f3f13123b9ea9a6c83c4f36e3fc205e59ec2 Mon Sep 17 00:00:00 2001 From: boncey Date: Sun, 3 May 2020 09:36:29 +0100 Subject: [PATCH 205/239] Release version 3.0.4 --- README.md | 6 +++--- build.gradle | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1fd119c7..20b73ae2 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// #### Required libraries -- [scribejava-api (v 6.2.0 onwards)](https://github.com/scribejava/scribejava) (required for the OAuth functionality) +- [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) [See here](https://www.slf4j.org/manual.html#swapping) for details on how to choose and configure an SLF4J logging library. @@ -42,14 +42,14 @@ An API key is required to use this API. You can [request one on Flickr](http:// ### Gradle - compile 'com.flickr4java:flickr4java:3.0.2' + compile 'com.flickr4java:flickr4java:3.0.4' ### Maven com.flickr4java flickr4java - 3.0.2 + 3.0.4 Flickr4Java is available on Maven Central so the above settings should be all you need. diff --git a/build.gradle b/build.gradle index 40d26b29..068af4b4 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '3.0.2' +version = '3.0.4' group = 'com.flickr4java.flickr' sourceCompatibility = '1.5' @@ -27,7 +27,7 @@ sourceSets { } dependencies { - compile 'com.github.scribejava:scribejava-apis:6.2.0' + 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' } From c4ec4976f21c31754642776fa26b9657826f3f7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Oct 2020 21:16:44 +0000 Subject: [PATCH 206/239] Bump junit from 4.13 to 4.13.1 Bumps [junit](https://github.com/junit-team/junit4) from 4.13 to 4.13.1. - [Release notes](https://github.com/junit-team/junit4/releases) - [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.13.1.md) - [Commits](https://github.com/junit-team/junit4/compare/r4.13...r4.13.1) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e83408f5..ee96c1cd 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ 1.8 - 4.13 + 4.13.1 1.7.30 6.9.0 From f02c65aa5ce82588d62269e562d0d492339b9233 Mon Sep 17 00:00:00 2001 From: boncey Date: Sat, 6 Feb 2021 14:19:56 +0000 Subject: [PATCH 207/239] Remove bintray link as it is shutting down --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index 20b73ae2..028f0253 100644 --- a/README.md +++ b/README.md @@ -35,11 +35,6 @@ An API key is required to use this API. You can [request one on Flickr](http:// [See here](https://www.slf4j.org/manual.html#swapping) for details on how to choose and configure an SLF4J logging library. -### Download - -[Download the latest version from bintray](https://bintray.com/boncey/Flickr4Java/Flickr4Java). - - ### Gradle compile 'com.flickr4java:flickr4java:3.0.4' From ca245c7c5b6e49ef2b5e95e0e6205d21524f9def Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 May 2021 16:30:16 +0100 Subject: [PATCH 208/239] Update test payloads --- pom.xml | 22 +- .../java/com/flickr4java/flickr/REST.java | 40 +- .../flickr/places/PlacesInterface.java | 3 + .../flickr4java/flickr/tags/HotlistTag.java | 2 + .../flickr/tags/TagsInterface.java | 23 +- .../flickr/test/FavoritesInterfaceTest.java | 2 +- .../test/InterestingnessInterfaceTest.java | 8 +- .../flickr/test/PlacesInterfaceTest.java | 28 +- .../get/flickr.activity.userComments.xml | 2 +- .../get/flickr.activity.userPhotos.xml | 4 +- .../get/flickr.cameras.getBrandModels.xml | 2612 +++++++++-------- .../payloads/get/flickr.cameras.getBrands.xml | 44 +- .../get/flickr.collections.getInfo.xml | 26 +- .../get/flickr.collections.getTree.xml | 2 +- .../get/flickr.commons.getInstitutions.xml | 50 +- .../payloads/get/flickr.favorites.getList.xml | 6 +- .../payloads/get/flickr.groups.getInfo.xml | 16 +- .../get/flickr.groups.members.getList.xml | 102 +- .../get/flickr.groups.pools.getGroups.xml | 2 +- .../payloads/get/flickr.groups.search.xml | 152 +- .../get/flickr.interestingness.getList.xml | 112 +- .../get/flickr.machinetags.getPredicates.xml | 17 +- .../flickr.machinetags.getRecentValues.xml | 1004 +++---- .../get/flickr.people.findByUsername.xml | 2 +- .../payloads/get/flickr.people.getGroups.xml | 2 +- .../payloads/get/flickr.people.getInfo.xml | 6 +- .../payloads/get/flickr.people.getPhotos.xml | 32 +- .../get/flickr.people.getPublicGroups.xml | 2 +- .../get/flickr.people.getUploadStatus.xml | 4 +- .../get/flickr.photos.comments.getList.xml | 6 +- .../get/flickr.photos.geo.getLocation.xml | 10 +- .../get/flickr.photos.getContactsPhotos.xml | 10 +- .../flickr.photos.getContactsPublicPhotos.xml | 10 +- .../payloads/get/flickr.photos.getContext.xml | 6 +- .../payloads/get/flickr.photos.getCounts.xml | 2 +- .../payloads/get/flickr.photos.getExif.xml | 58 +- .../payloads/get/flickr.photos.getInfo.xml | 14 +- .../get/flickr.photos.getNotInSet.xml | 191 +- .../payloads/get/flickr.photos.getPerms.xml | 2 +- .../payloads/get/flickr.photos.getRecent.xml | 200 +- .../payloads/get/flickr.photos.getSizes.xml | 21 +- .../get/flickr.photos.getUntagged.xml | 197 +- .../payloads/get/flickr.photos.search.xml | 68 +- .../get/flickr.photosets.getContext.xml | 4 +- .../payloads/get/flickr.photosets.getInfo.xml | 2 +- .../payloads/get/flickr.photosets.getList.xml | 19 +- .../payloads/get/flickr.places.getInfo.xml | 8 +- .../get/flickr.places.getTopPlacesList.xml | 4 +- .../get/flickr.places.tagsForPlace.xml | 200 +- .../get/flickr.tags.getClusterPhotos.xml | 43 +- .../payloads/get/flickr.tags.getHotList.xml | 164 +- .../payloads/get/flickr.tags.getListUser.xml | 42 - .../get/flickr.tags.getListUserPopular.xml | 16 +- .../get/flickr.tags.getListUserRaw.xml | 179 +- .../get/flickr.urls.lookupGallery.xml | 4 +- .../post/flickr.favorites.getContext.xml | 6 +- .../post/flickr.galleries.getInfo.xml | 8 +- .../post/flickr.galleries.getList.xml | 2 +- .../flickr.photos.comments.addComment.xml | 4 +- .../payloads/post/flickr.photosets.create.xml | 2 +- .../payloads/post/flickr.test.echo.xml | 8 +- 61 files changed, 3023 insertions(+), 2814 deletions(-) diff --git a/pom.xml b/pom.xml index ee96c1cd..ce612781 100644 --- a/pom.xml +++ b/pom.xml @@ -75,6 +75,7 @@ forked-path false + ${arguments} -Psonatype-oss-release @@ -96,6 +97,7 @@ 2.22.2 + ${setupPropertiesPath} @@ -155,11 +157,10 @@ HEAD - - bintray-boncey-Flickr4Java-Flickr4Java - boncey-Flickr4Java-Flickr4Java - https://api.bintray.com/maven/boncey/Flickr4Java/Flickr4Java;publish=1 - + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + @@ -188,6 +189,17 @@ + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + true + + ossrh + https://oss.sonatype.org/ + true + + diff --git a/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java index c97c4369..03241713 100644 --- a/src/main/java/com/flickr4java/flickr/REST.java +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -10,6 +10,7 @@ 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; @@ -26,9 +27,13 @@ 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; /** @@ -216,9 +221,9 @@ public com.flickr4java.flickr.Response postMultiPart(String path, UploadMetaData } 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; + OAuth10aService service = OAuthUtilities.createOAuthService(apiKey, sharedSecret, connectTimeoutMs, readTimeoutMs); + OAuthUtilities.signRequest(service, request, proxyAuth ? getProxyCredentials() : null); + return service; } private String buildUrl(String path) { @@ -244,6 +249,9 @@ private Response handleResponse(OAuthRequest request, OAuth10aService service) t Response f4jResponse = (Response) responseClass.getConstructor().newInstance(); f4jResponse.parse(document); + // Enable this method to update the test payloads + // dumpResponseToFile(request, strXml); + return f4jResponse; } @@ -328,11 +336,25 @@ private DocumentBuilder getDocumentBuilder() throws ParserConfigurationException } // Generate responses for offline tests -// private void dumpResponseToFile(Object flickrMethod, String strXml, String httpMethod) throws IOException { -// String filename = String.format("%s.xml", flickrMethod); -// Path filePath = Paths.get("src/test/resources/payloads/" + httpMethod, filename); -// Files.write(filePath, strXml.getBytes()); -// logger.info(String.format("Writing payload to file '%s'", filePath)); -// } + 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; + } + 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/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java b/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java index d386c63c..15d05f0f 100644 --- a/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java +++ b/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java @@ -20,6 +20,9 @@ /** * 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: *

    diff --git a/src/main/java/com/flickr4java/flickr/tags/HotlistTag.java b/src/main/java/com/flickr4java/flickr/tags/HotlistTag.java index c0b07bfc..0432046d 100644 --- a/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/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java b/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java index 53f2683c..709b6ddb 100644 --- a/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java +++ b/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java @@ -17,6 +17,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Optional; import java.util.Map; /** @@ -171,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; } diff --git a/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java index 7b391188..a864f54e 100644 --- a/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java @@ -49,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 { diff --git a/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java index aeffdcd5..af50e997 100644 --- a/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java @@ -28,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()); diff --git a/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java index 70c8dec5..1c3d5576 100644 --- a/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,6 +30,8 @@ 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); @@ -41,6 +44,8 @@ public void testFindByLonLat() throws FlickrException { } @Test + @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"); @@ -52,6 +57,8 @@ public void testFindAlabama() throws FlickrException { @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 @@ -60,6 +67,8 @@ public void testResolvePlaceId() throws FlickrException { @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"); @@ -67,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()); @@ -91,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"; @@ -134,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"; @@ -148,6 +160,8 @@ public void testPlacesForBoundingBox() throws FlickrException { } @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; @@ -165,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; @@ -190,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; diff --git a/src/test/resources/payloads/get/flickr.activity.userComments.xml b/src/test/resources/payloads/get/flickr.activity.userComments.xml index 769ce37f..16f2d28d 100644 --- a/src/test/resources/payloads/get/flickr.activity.userComments.xml +++ b/src/test/resources/payloads/get/flickr.activity.userComments.xml @@ -1,7 +1,7 @@ - + Cheddar Test comment. diff --git a/src/test/resources/payloads/get/flickr.activity.userPhotos.xml b/src/test/resources/payloads/get/flickr.activity.userPhotos.xml index b61cf7f2..7a633f54 100644 --- a/src/test/resources/payloads/get/flickr.activity.userPhotos.xml +++ b/src/test/resources/payloads/get/flickr.activity.userPhotos.xml @@ -1,13 +1,13 @@ - + 2014-05-04 13.56.00 london - + Robot This looks familiar diff --git a/src/test/resources/payloads/get/flickr.cameras.getBrandModels.xml b/src/test/resources/payloads/get/flickr.cameras.getBrandModels.xml index 56d47966..235b9746 100644 --- a/src/test/resources/payloads/get/flickr.cameras.getBrandModels.xml +++ b/src/test/resources/payloads/get/flickr.cameras.getBrandModels.xml @@ -9,10 +9,13 @@ CompactFlash, Secure Digital, SDHC, SDXC - https://farm8.staticflickr.com/7184/cameras/72157622292089908_model_small_99bff53988.jpg - https://farm8.staticflickr.com/7184/cameras/72157622292089908_model_large_497d3698ba.jpg + 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

    @@ -21,8 +24,22 @@ Secure Digital, SDXC, SDHC
    - https://farm9.staticflickr.com/8083/cameras/72157607012320362_model_small_aa23f6b999.jpg - https://farm9.staticflickr.com/8083/cameras/72157607012320362_model_large_ceb47a4e39.jpg + 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 @@ -33,20 +50,17 @@ CompactFlash (CF) Card - https://farm4.staticflickr.com/3154/cameras/72157607348761901_model_small_a874952616.jpg - https://farm4.staticflickr.com/3154/cameras/72157607348761901_model_large_97198e11ef.jpg + https://live.staticflickr.com/cameras/72157607348761901_model_small_a874952616.jpg + https://live.staticflickr.com/cameras/72157607348761901_model_large_97198e11ef.jpg - - Canon EOS 7D MARK II + + Canon EOS Rebel T6 - https://farm8.staticflickr.com/7467/cameras/72157644861391679_model_small_68f69eec3f.jpg - https://farm8.staticflickr.com/7467/cameras/72157644861391679_model_large_12fcf1403e.jpg + https://live.staticflickr.com/cameras/72157665871654952_model_small_3fb73b6dcf.jpg + https://live.staticflickr.com/cameras/72157665871654952_model_large_fe071c3051.jpg - - CANON EOS 5D MARK IV - Canon EOS 70D
    @@ -55,20 +69,15 @@ Secure Digital, SDXC, SDHC
    - https://farm8.staticflickr.com/7440/cameras/72157633273873695_model_small_e17b51707b.jpg - https://farm8.staticflickr.com/7440/cameras/72157633273873695_model_large_0ac43738dc.jpg + https://live.staticflickr.com/cameras/72157633273873695_model_small_e17b51707b.jpg + https://live.staticflickr.com/cameras/72157633273873695_model_large_0ac43738dc.jpg
    - - Canon EOS REBEL T3i -
    - 18 - 3 - Secure Digital, SDXC, SDHC -
    + + Canon EOS 6D Mark II - https://farm6.staticflickr.com/5035/cameras/72157625858229685_model_small_82002d6bd6.jpg - https://farm6.staticflickr.com/5035/cameras/72157625858229685_model_large_7c02ddbfe1.jpg + https://live.staticflickr.com/cameras/72157662779818774_model_small_b1ed20e0a1.jpg + https://live.staticflickr.com/cameras/72157662779818774_model_large_c2d76f60af.jpg @@ -79,15 +88,20 @@ CompactFlash (CF) Card - https://farm4.staticflickr.com/3487/cameras/72157602280763141_model_small_d6e5af0712.jpg - https://farm4.staticflickr.com/3487/cameras/72157602280763141_model_large_1f77f7e0f2.jpg + https://live.staticflickr.com/cameras/72157602280763141_model_small_d6e5af0712.jpg + https://live.staticflickr.com/cameras/72157602280763141_model_large_1f77f7e0f2.jpg - - Canon EOS 80D + + Canon EOS REBEL T3i +
    + 18 + 3 + Secure Digital, SDXC, SDHC +
    - https://farm8.staticflickr.com/7021/cameras/72157664130845639_model_small_0888c8b51d.jpg - https://farm8.staticflickr.com/7021/cameras/72157664130845639_model_large_4404988642.jpg + https://live.staticflickr.com/cameras/72157625858229685_model_small_82002d6bd6.jpg + https://live.staticflickr.com/cameras/72157625858229685_model_large_7c02ddbfe1.jpg
    @@ -98,34 +112,18 @@ Secure Digital, SDHC, SDXC - https://farm6.staticflickr.com/5249/cameras/72157624493316109_model_small_93c8e25107.jpg - https://farm6.staticflickr.com/5249/cameras/72157624493316109_model_large_c07377e8d4.jpg + https://live.staticflickr.com/cameras/72157624493316109_model_small_93c8e25107.jpg + https://live.staticflickr.com/cameras/72157624493316109_model_large_c07377e8d4.jpg - - Canon EOS 700D - - https://farm4.staticflickr.com/3828/cameras/72157632461630521_model_small_7db5f3e1ea.jpg - https://farm4.staticflickr.com/3828/cameras/72157632461630521_model_large_ebdc3e28a2.jpg - + + Canon EOS R Canon EOS 750D - https://farm6.staticflickr.com/5746/cameras/72157632205837729_model_small_42e58fa967.jpg - https://farm6.staticflickr.com/5746/cameras/72157632205837729_model_large_8cb7ba6c52.jpg - - - - Canon EOS REBEL T2i -
    - 18 - 3 - SDXC, Secure Digital, SDHC -
    - - https://farm4.staticflickr.com/3369/cameras/72157623502347808_model_small_d6f54d07c8.jpg - https://farm4.staticflickr.com/3369/cameras/72157623502347808_model_large_692b09d10c.jpg + https://live.staticflickr.com/cameras/72157632205837729_model_small_42e58fa967.jpg + https://live.staticflickr.com/cameras/72157632205837729_model_large_8cb7ba6c52.jpg
    @@ -136,44 +134,74 @@ SDHC Memory Card - https://farm6.staticflickr.com/5280/cameras/72157625983689520_model_small_fbd9eb7715.jpg - https://farm6.staticflickr.com/5280/cameras/72157625983689520_model_large_f244f70fb6.jpg + https://live.staticflickr.com/cameras/72157625983689520_model_small_fbd9eb7715.jpg + https://live.staticflickr.com/cameras/72157625983689520_model_large_f244f70fb6.jpg - - Canon EOS Rebel T6 + + Canon EOS REBEL T5 +
    + 3 +
    - https://farm5.staticflickr.com/4762/cameras/72157665871654952_model_small_3fb73b6dcf.jpg - https://farm5.staticflickr.com/4762/cameras/72157665871654952_model_large_fe071c3051.jpg + https://live.staticflickr.com/cameras/72157642353970835_model_small_b3f1ecb638.jpg + https://live.staticflickr.com/cameras/72157642353970835_model_large_359a3f62ee.jpg
    - - Canon EOS REBEL T5i + + Canon EOS REBEL T2i
    18 3 - Secure Digital, SDHC, SDXC + SDXC, Secure Digital, SDHC
    - https://farm3.staticflickr.com/2854/cameras/72157633291340568_model_small_a29265b941.jpg - https://farm3.staticflickr.com/2854/cameras/72157633291340568_model_large_6aa43d9736.jpg + https://live.staticflickr.com/cameras/72157623502347808_model_small_d6f54d07c8.jpg + https://live.staticflickr.com/cameras/72157623502347808_model_large_692b09d10c.jpg
    - - Canon EOS REBEL T5 + + 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
    - 3 + 18.1 + 3.2 + CompactFlash (CF) Card
    - https://farm8.staticflickr.com/7531/cameras/72157642353970835_model_small_b3f1ecb638.jpg - https://farm8.staticflickr.com/7531/cameras/72157642353970835_model_large_359a3f62ee.jpg + https://live.staticflickr.com/cameras/72157629220288179_model_small_4807a929c8.jpg + https://live.staticflickr.com/cameras/72157629220288179_model_large_9b2a9a4024.jpg
    - - Canon EOS 6D Mark II + + Canon EOS Rebel T7i + + + Canon EOS 77D + + + Canon EOS REBEL T5i +
    + 18 + 3 + Secure Digital, SDHC, SDXC +
    - https://farm1.staticflickr.com/819/cameras/72157662779818774_model_small_b1ed20e0a1.jpg - https://farm1.staticflickr.com/819/cameras/72157662779818774_model_large_c2d76f60af.jpg + https://live.staticflickr.com/cameras/72157633291340568_model_small_a29265b941.jpg + https://live.staticflickr.com/cameras/72157633291340568_model_large_6aa43d9736.jpg
    @@ -184,20 +212,29 @@ Secure Digital, SDHC - https://farm3.staticflickr.com/2456/cameras/72157617313528954_model_small_aa0037849d.jpg - https://farm3.staticflickr.com/2456/cameras/72157617313528954_model_large_1fd8120fef.jpg + https://live.staticflickr.com/cameras/72157617313528954_model_small_aa0037849d.jpg + https://live.staticflickr.com/cameras/72157617313528954_model_large_1fd8120fef.jpg - - Canon EOS-1D X + + Canon EOS Rebel T7 + + + Canon EOS Rebel SL2 + + + Canon EOS 90D + + + Canon EOS 50D
    - 18.1 - 3.2 + 15.1 + 3 CompactFlash (CF) Card
    - https://farm9.staticflickr.com/8174/cameras/72157629220288179_model_small_4807a929c8.jpg - https://farm9.staticflickr.com/8174/cameras/72157629220288179_model_large_9b2a9a4024.jpg + https://live.staticflickr.com/cameras/72157606814096380_model_small_acfeba1dae.jpg + https://live.staticflickr.com/cameras/72157606814096380_model_large_320ea78949.jpg
    @@ -208,20 +245,8 @@ Secure Digital, SDHC - https://farm3.staticflickr.com/2372/cameras/72157604225656701_model_small_c76252f106.jpg - https://farm3.staticflickr.com/2372/cameras/72157604225656701_model_large_dedb412bb3.jpg - - - - Canon EOS Digital Rebel XTi -
    - 1 - 2.5 - CompactFlash (CF) Card -
    - - https://farm1.staticflickr.com/119/cameras/68_model_small_201afafc2f.jpg - https://farm1.staticflickr.com/119/cameras/68_model_large_5fbbd26c3c.jpg + https://live.staticflickr.com/cameras/72157604225656701_model_small_c76252f106.jpg + https://live.staticflickr.com/cameras/72157604225656701_model_large_dedb412bb3.jpg
    @@ -232,48 +257,51 @@ Secure Digital, SDXC, SDHC - https://farm9.staticflickr.com/8170/cameras/72157630136654636_model_small_7aa6948e95.jpg - https://farm9.staticflickr.com/8170/cameras/72157630136654636_model_large_9f1336ca57.jpg + https://live.staticflickr.com/cameras/72157630136654636_model_small_7aa6948e95.jpg + https://live.staticflickr.com/cameras/72157630136654636_model_large_9f1336ca57.jpg - - Canon EOS-1D X Mark II + + Canon EOS Digital Rebel XTi +
    + 1 + 2.5 + CompactFlash (CF) Card +
    - https://farm8.staticflickr.com/7369/cameras/72157663262267976_model_small_fe1274e6b7.jpg - https://farm8.staticflickr.com/7369/cameras/72157663262267976_model_large_a69c5c58dd.jpg + https://live.staticflickr.com/cameras/68_model_small_201afafc2f.jpg + https://live.staticflickr.com/cameras/68_model_large_5fbbd26c3c.jpg
    - - Canon EOS 5D + + Canon EOS Digital Rebel XT
    - 12.8 - 2.5 + 8 + 1.8 CompactFlash (CF) Card
    - https://farm1.staticflickr.com/111/cameras/130_model_small_9dbbe5a2b2.jpg - https://farm1.staticflickr.com/111/cameras/130_model_large_b8df029b89.jpg + https://live.staticflickr.com/cameras/31_model_small_7143654004.jpg + https://live.staticflickr.com/cameras/31_model_large_f11b305bdd.jpg
    - - Canon EOS 1200D + + Canon EOS 5DS R - https://farm6.staticflickr.com/5608/cameras/72157640939372033_model_small_c1a3cb597a.jpg - https://farm6.staticflickr.com/5608/cameras/72157640939372033_model_large_52555f6708.jpg + https://live.staticflickr.com/cameras/72157650665459092_model_small_70265a1860.jpg + https://live.staticflickr.com/cameras/72157650665459092_model_large_0272a7ab99.jpg - - Canon EOS 50D -
    - 15.1 - 3 - CompactFlash (CF) Card -
    + + Canon PowerShot SX60 HS - https://farm4.staticflickr.com/3236/cameras/72157606814096380_model_small_acfeba1dae.jpg - https://farm4.staticflickr.com/3236/cameras/72157606814096380_model_large_320ea78949.jpg + 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
    @@ -282,67 +310,75 @@ CompactFlash (CF) Card
    - https://farm2.staticflickr.com/1311/cameras/13483_model_small_bc865d9a17.jpg - https://farm2.staticflickr.com/1311/cameras/13483_model_large_9d618a4965.jpg + https://live.staticflickr.com/cameras/13483_model_small_bc865d9a17.jpg + https://live.staticflickr.com/cameras/13483_model_large_9d618a4965.jpg
    - - Canon EOS Digital Rebel XS + + 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
    - 10.1 + 12.8 2.5 - Secure Digital, SDHC + CompactFlash (CF) Card
    - https://farm4.staticflickr.com/3290/cameras/72157605582107524_model_small_f8c3eacc3e.jpg - https://farm4.staticflickr.com/3290/cameras/72157605582107524_model_large_f2dd3c1f2b.jpg + https://live.staticflickr.com/cameras/130_model_small_9dbbe5a2b2.jpg + https://live.staticflickr.com/cameras/130_model_large_b8df029b89.jpg
    Canon EOS 100D - https://farm1.staticflickr.com/651/cameras/72157623555354732_model_small_4ee35cfeb3.jpg - https://farm1.staticflickr.com/651/cameras/72157623555354732_model_large_b5dc69964d.jpg - - - - Canon PowerShot SX60 HS - - https://farm4.staticflickr.com/3700/cameras/72157647824755152_model_small_e23090b5f4.jpg - https://farm4.staticflickr.com/3700/cameras/72157647824755152_model_large_7e7e4f80c6.jpg + https://live.staticflickr.com/cameras/72157623555354732_model_small_4ee35cfeb3.jpg + https://live.staticflickr.com/cameras/72157623555354732_model_large_b5dc69964d.jpg - - Canon EOS 760D + + Canon EOS 1200D - https://farm6.staticflickr.com/5762/cameras/72157651752742028_model_small_299d7bef9a.jpg - https://farm6.staticflickr.com/5762/cameras/72157651752742028_model_large_c8b8060b16.jpg + https://live.staticflickr.com/cameras/72157640939372033_model_small_c1a3cb597a.jpg + https://live.staticflickr.com/cameras/72157640939372033_model_large_52555f6708.jpg - - Canon EOS Digital Rebel XT + + Canon EOS Digital Rebel XS
    - 8 - 1.8 - CompactFlash (CF) Card + 10.1 + 2.5 + Secure Digital, SDHC
    - https://farm1.staticflickr.com/110/cameras/31_model_small_7143654004.jpg - https://farm1.staticflickr.com/110/cameras/31_model_large_f11b305bdd.jpg + https://live.staticflickr.com/cameras/72157605582107524_model_small_f8c3eacc3e.jpg + https://live.staticflickr.com/cameras/72157605582107524_model_large_f2dd3c1f2b.jpg
    - - Canon EOS 77D - - - Canon EOS 5DS R + + Canon EOS-1D Mark IV +
    + 16.1 + 3 + SDHC Memory Card, CompactFlash, Secure Digital (SD) Card, Microdrive +
    - https://farm4.staticflickr.com/3817/cameras/72157650665459092_model_small_70265a1860.jpg - https://farm4.staticflickr.com/3817/cameras/72157650665459092_model_large_0272a7ab99.jpg + https://live.staticflickr.com/cameras/72157603810225532_model_small_e8a45a1b36.jpg + https://live.staticflickr.com/cameras/72157603810225532_model_large_9785d9733c.jpg
    - - Canon PowerShot G7 X Mark II + + Canon EOS Rebel T100 Canon PowerShot SX50 HS @@ -352,8 +388,15 @@ Secure Digital, SDXC, SDHC - https://farm9.staticflickr.com/8089/cameras/72157631606498503_model_small_e5db6a3484.jpg - https://farm9.staticflickr.com/8089/cameras/72157631606498503_model_large_17cd9b1f8e.jpg + 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 @@ -364,27 +407,47 @@ CompactFlash (CF) Card - https://farm1.staticflickr.com/111/cameras/44_model_small_2cb85e48f5.jpg - https://farm1.staticflickr.com/111/cameras/44_model_large_eb72aa76ed.jpg + https://live.staticflickr.com/cameras/44_model_small_2cb85e48f5.jpg + https://live.staticflickr.com/cameras/44_model_large_eb72aa76ed.jpg - - Canon EOS-1D Mark IV -
    - 16.1 - 3 - SDHC Memory Card, CompactFlash, Secure Digital (SD) Card, Microdrive -
    + + Canon EOS 5Ds - https://farm3.staticflickr.com/2777/cameras/72157603810225532_model_small_e8a45a1b36.jpg - https://farm3.staticflickr.com/2777/cameras/72157603810225532_model_large_9785d9733c.jpg + https://live.staticflickr.com/cameras/72157603423041122_model_small_7066489740.jpg + https://live.staticflickr.com/cameras/72157603423041122_model_large_ca4d89355b.jpg - - Canon EOS REBEL SL1 + + 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://farm4.staticflickr.com/3786/cameras/72157633336811707_model_small_9f40643ac4.jpg - https://farm4.staticflickr.com/3786/cameras/72157633336811707_model_large_2d70d20249.jpg + https://live.staticflickr.com/cameras/4_model_small_0d320aed75.jpg + https://live.staticflickr.com/cameras/4_model_large_2a7e545a1e.jpg
    @@ -395,10 +458,19 @@ CompactFlash (CF) Card - https://farm1.staticflickr.com/111/cameras/9_model_small_e4b4d029e2.jpg - https://farm1.staticflickr.com/111/cameras/9_model_large_b17d8c82c3.jpg + 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
    @@ -407,98 +479,51 @@ CompactFlash (CF) Card
    - https://farm3.staticflickr.com/2079/cameras/72157601586629334_model_small_071161b82f.jpg - https://farm3.staticflickr.com/2079/cameras/72157601586629334_model_large_9bfa056618.jpg + https://live.staticflickr.com/cameras/72157601586629334_model_small_071161b82f.jpg + https://live.staticflickr.com/cameras/72157601586629334_model_large_9bfa056618.jpg
    - - Canon EOS 5Ds + + Canon PowerShot G16 +
    + 3 +
    - https://farm1.staticflickr.com/283/cameras/72157603423041122_model_small_7066489740.jpg - https://farm1.staticflickr.com/283/cameras/72157603423041122_model_large_ca4d89355b.jpg + https://live.staticflickr.com/cameras/72157633994515034_model_small_4563648ebb.jpg + https://live.staticflickr.com/cameras/72157633994515034_model_large_8458a45884.jpg
    - - Canon PowerShot G7 X - - https://farm4.staticflickr.com/3676/cameras/72157645338335022_model_small_7ec3d31a3c.jpg - https://farm4.staticflickr.com/3676/cameras/72157645338335022_model_large_c815303a07.jpg - - - - Canon PowerShot SX530 HS - - https://farm8.staticflickr.com/7048/cameras/72157648098386118_model_small_7b16d1c3a6.jpg - https://farm8.staticflickr.com/7048/cameras/72157648098386118_model_large_aaf7999ccb.jpg - - - - Canon EOS M3 - - - Canon PowerShot SX720 HS - - - Canon EOS M + + Canon EOS 1D Mark III
    - 18 + 10.1 3 - Secure Digital, SDXC, SDHC + CompactFlash (CF) Card
    - https://farm8.staticflickr.com/7421/cameras/72157630734034208_model_small_92bbea491c.jpg - https://farm8.staticflickr.com/7421/cameras/72157630734034208_model_large_2a60438278.jpg + https://live.staticflickr.com/cameras/72157600288628059_model_small_4cdfcb3773.jpg + https://live.staticflickr.com/cameras/72157600288628059_model_large_97180e7aa5.jpg
    - - Canon PowerShot SX40 HS -
    - 12.1 - 2.7 - Secure Digital (SD) Card -
    + + Canon EOS M6 - https://farm8.staticflickr.com/7157/cameras/72157627707836876_model_small_d58fd3c6ff.jpg - https://farm8.staticflickr.com/7157/cameras/72157627707836876_model_large_9edd7fd023.jpg + 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://farm6.staticflickr.com/5816/cameras/72157649863292917_model_small_4e5f4385ba.jpg - https://farm6.staticflickr.com/5816/cameras/72157649863292917_model_large_9af0e169f3.jpg - - - - Canon EOS Rebel T7i - - - Canon PowerShot G16 -
    - 3 -
    - - https://farm6.staticflickr.com/5038/cameras/72157633994515034_model_small_4563648ebb.jpg - https://farm6.staticflickr.com/5038/cameras/72157633994515034_model_large_8458a45884.jpg - -
    - - Canon EOS Digital Rebel -
    - 6.3 - 1.8 - CompactFlash, Microdrive -
    - - https://farm1.staticflickr.com/99/cameras/4_model_small_0d320aed75.jpg - https://farm1.staticflickr.com/99/cameras/4_model_large_2a7e545a1e.jpg + https://live.staticflickr.com/cameras/72157649863292917_model_small_4e5f4385ba.jpg + https://live.staticflickr.com/cameras/72157649863292917_model_large_9af0e169f3.jpg
    - - Canon EOS M5 + + Canon PowerShot SX730 HS - https://farm5.staticflickr.com/4520/cameras/72157668584224581_model_small_7ccab5572f.jpg - https://farm5.staticflickr.com/4520/cameras/72157668584224581_model_large_fde021b1e9.jpg + https://live.staticflickr.com/cameras/72157673805378274_model_small_544878b8ee.jpg + https://live.staticflickr.com/cameras/72157673805378274_model_large_13e4637fe9.jpg @@ -508,51 +533,20 @@ 2.8 - https://farm6.staticflickr.com/5003/cameras/72157624839718693_model_small_81c526286d.jpg - https://farm6.staticflickr.com/5003/cameras/72157624839718693_model_large_b6d975e7d6.jpg - - - - Canon EOS 1D Mark III -
    - 10.1 - 3 - CompactFlash (CF) Card -
    - - https://farm1.staticflickr.com/222/cameras/72157600288628059_model_small_4cdfcb3773.jpg - https://farm1.staticflickr.com/222/cameras/72157600288628059_model_large_97180e7aa5.jpg - -
    - - Canon EOS 1Ds Mark II -
    - 16.7 - 2 - CompactFlash, Secure Digital, MultiMediaCard -
    - - https://farm1.staticflickr.com/121/cameras/156_model_small_a56b80a67f.jpg - https://farm1.staticflickr.com/121/cameras/156_model_large_e6b1f8216a.jpg + https://live.staticflickr.com/cameras/72157624839718693_model_small_81c526286d.jpg + https://live.staticflickr.com/cameras/72157624839718693_model_large_b6d975e7d6.jpg
    - - Canon PowerShot SD1100 IS + + Canon PowerShot SX40 HS
    - 8 - 2.5 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 12.1 + 2.7 + Secure Digital (SD) Card
    - https://farm3.staticflickr.com/2186/cameras/72157603983956398_model_small_b6d51a8150.jpg - https://farm3.staticflickr.com/2186/cameras/72157603983956398_model_large_c4d1e89f8d.jpg - -
    - - Canon EOS M6 - - https://farm5.staticflickr.com/4552/cameras/72157676311863712_model_small_35cc29dfba.jpg - https://farm5.staticflickr.com/4552/cameras/72157676311863712_model_large_2a969ea6f8.jpg + https://live.staticflickr.com/cameras/72157627707836876_model_small_d58fd3c6ff.jpg + https://live.staticflickr.com/cameras/72157627707836876_model_large_9edd7fd023.jpg @@ -563,77 +557,51 @@ Secure Digital, SDXC, SDHC - https://farm9.staticflickr.com/8073/cameras/72157631669626016_model_small_b412b6f89a.jpg - https://farm9.staticflickr.com/8073/cameras/72157631669626016_model_large_aee995637e.jpg - - - - Canon PowerShot G10 -
    - 14.7 - 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus -
    - - https://farm4.staticflickr.com/3226/cameras/72157607254728807_model_small_c7595d237f.jpg - https://farm4.staticflickr.com/3226/cameras/72157607254728807_model_large_62ddda0838.jpg + https://live.staticflickr.com/cameras/72157631669626016_model_small_b412b6f89a.jpg + https://live.staticflickr.com/cameras/72157631669626016_model_large_aee995637e.jpg
    - - Canon PowerShot SX510 HS + + Canon EOS M
    + 18 3 + Secure Digital, SDXC, SDHC
    - https://farm4.staticflickr.com/3720/cameras/72157633170380529_model_small_267d868489.jpg - https://farm4.staticflickr.com/3720/cameras/72157633170380529_model_large_1196f12423.jpg + https://live.staticflickr.com/cameras/72157630734034208_model_small_92bbea491c.jpg + https://live.staticflickr.com/cameras/72157630734034208_model_large_2a60438278.jpg
    - - Canon PowerShot G9 + + Canon EOS 1Ds Mark II
    - 12.1 - 3 - MultiMediaCard, Secure Digital, SDHC + 16.7 + 2 + CompactFlash, Secure Digital, MultiMediaCard
    - https://farm2.staticflickr.com/1189/cameras/72157601586583928_model_small_71f71758a6.jpg - https://farm2.staticflickr.com/1189/cameras/72157601586583928_model_large_3df7faed63.jpg + https://live.staticflickr.com/cameras/156_model_small_a56b80a67f.jpg + https://live.staticflickr.com/cameras/156_model_large_e6b1f8216a.jpg
    - - Canon PowerShot SX610 HS + + Canon PowerShot G7 X - https://farm8.staticflickr.com/7492/cameras/72157648049359450_model_small_3e6493e3ac.jpg - https://farm8.staticflickr.com/7492/cameras/72157648049359450_model_large_bf8a8110d6.jpg + https://live.staticflickr.com/cameras/72157645338335022_model_small_7ec3d31a3c.jpg + https://live.staticflickr.com/cameras/72157645338335022_model_large_c815303a07.jpg - - Canon PowerShot SX620 HS - - - Canon PowerShot G9 X Mark II - - - Canon PowerShot S5 IS + + Canon PowerShot SD1100 IS
    8 2.5 - Secure Digital, MultiMediaCard, SDHC -
    - - https://farm2.staticflickr.com/1288/cameras/72157600292972439_model_small_d10462f983.jpg - https://farm2.staticflickr.com/1288/cameras/72157600292972439_model_large_33a048b67b.jpg - -
    - - Canon PowerShot SX520 HS -
    - 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm1.staticflickr.com/416/cameras/72157646860530030_model_small_c287cae292.jpg - https://farm1.staticflickr.com/416/cameras/72157646860530030_model_large_2e679b44dd.jpg + https://live.staticflickr.com/cameras/72157603983956398_model_small_b6d51a8150.jpg + https://live.staticflickr.com/cameras/72157603983956398_model_large_c4d1e89f8d.jpg
    @@ -644,34 +612,25 @@ SD/SDHC - https://farm5.staticflickr.com/4087/cameras/72157624762166562_model_small_fdc8df7c28.jpg - https://farm5.staticflickr.com/4087/cameras/72157624762166562_model_large_85e6ab9d4f.jpg - - - - Canon PowerShot SX730 HS - - https://farm5.staticflickr.com/4527/cameras/72157673805378274_model_small_544878b8ee.jpg - https://farm5.staticflickr.com/4527/cameras/72157673805378274_model_large_13e4637fe9.jpg + https://live.staticflickr.com/cameras/72157624762166562_model_small_fdc8df7c28.jpg + https://live.staticflickr.com/cameras/72157624762166562_model_large_85e6ab9d4f.jpg - - Canon PowerShot S3 IS + + Canon PowerShot SX510 HS
    - 6 - 2 - Secure Digital, MultiMediaCard + 3
    - https://farm1.staticflickr.com/103/cameras/115_model_small_ec10d60f7a.jpg - https://farm1.staticflickr.com/103/cameras/115_model_large_9ffdcf70bf.jpg + https://live.staticflickr.com/cameras/72157633170380529_model_small_267d868489.jpg + https://live.staticflickr.com/cameras/72157633170380529_model_large_1196f12423.jpg
    - - Canon PowerShot G9 X + + Canon EOS M100 - https://farm5.staticflickr.com/4569/cameras/72157654193429816_model_small_4ef5d73fbb.jpg - https://farm5.staticflickr.com/4569/cameras/72157654193429816_model_large_199f1a72bc.jpg + https://live.staticflickr.com/cameras/72157683011558521_model_small_c108ba4596.jpg + https://live.staticflickr.com/cameras/72157683011558521_model_large_6958cc8184.jpg @@ -682,41 +641,45 @@ SDHC Memory Card, MultiMediaCard, Secure Digital (SD) Card - https://farm1.staticflickr.com/234/cameras/72157600291596369_model_small_9cf1a0b9c6.jpg - https://farm1.staticflickr.com/234/cameras/72157600291596369_model_large_9782e6ca80.jpg + https://live.staticflickr.com/cameras/72157600291596369_model_small_9cf1a0b9c6.jpg + https://live.staticflickr.com/cameras/72157600291596369_model_large_9782e6ca80.jpg - - Canon PowerShot SX30 IS + + Canon PowerShot G11
    - 14.1 - 2.7 + 10 + 2.8 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm6.staticflickr.com/5249/cameras/72157624846412507_model_small_3ba18a5885.jpg - https://farm6.staticflickr.com/5249/cameras/72157624846412507_model_large_478b8f73b5.jpg + https://live.staticflickr.com/cameras/72157621971543189_model_small_1644edb612.jpg + https://live.staticflickr.com/cameras/72157621971543189_model_large_bdefce42a8.jpg
    - - Canon EOS 1D Mark II + + Canon EOS M6 Mark II + + + Canon PowerShot S120
    - 8.2 - 2.5 - CompactFlash, Secure Digital (SD) Card, Microdrive + 3
    - https://farm1.staticflickr.com/117/cameras/12_model_small_1242e67975.jpg - https://farm1.staticflickr.com/117/cameras/12_model_large_dfa80dabd0.jpg + https://live.staticflickr.com/cameras/72157632858905716_model_small_09c906f983.jpg + https://live.staticflickr.com/cameras/72157632858905716_model_large_85a885e1ce.jpg
    - - Canon PowerShot SX700 HS + + Canon PowerShot SX130 IS
    + 12.1 3 + SDHX
    - https://farm9.staticflickr.com/8574/cameras/72157641922172003_model_small_335e01dc78.jpg - https://farm9.staticflickr.com/8574/cameras/72157641922172003_model_large_c62a48d7c0.jpg + https://live.staticflickr.com/cameras/72157624843263664_model_small_466ca9648e.jpg + https://live.staticflickr.com/cameras/72157624843263664_model_large_0cdf8d446b.jpg
    @@ -727,20 +690,42 @@ CompactFlash (CF) Card - https://farm1.staticflickr.com/105/cameras/81_model_small_4b6d829266.jpg - https://farm1.staticflickr.com/105/cameras/81_model_large_7082fc8590.jpg + https://live.staticflickr.com/cameras/81_model_small_4b6d829266.jpg + https://live.staticflickr.com/cameras/81_model_large_7082fc8590.jpg - - Canon PowerShot G1 X Mark II + + 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://farm6.staticflickr.com/5619/cameras/72157640985213904_model_small_8d1b938d77.jpg - https://farm6.staticflickr.com/5619/cameras/72157640985213904_model_large_8454c17833.jpg + 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
    @@ -749,102 +734,110 @@ Secure Digital (SD) Card, Secure Digital High Capacity (SDHC) Card, Secure Digital Extended Capacity (SDXC)
    - https://farm9.staticflickr.com/8333/cameras/72157629555712731_model_small_c08bd90398.jpg - https://farm9.staticflickr.com/8333/cameras/72157629555712731_model_large_cf014452fb.jpg + https://live.staticflickr.com/cameras/72157629555712731_model_small_c08bd90398.jpg + https://live.staticflickr.com/cameras/72157629555712731_model_large_cf014452fb.jpg
    - - Canon PowerShot SD1300 IS + + Canon PowerShot S3 IS
    - 12.1 - 2.7 - SDHC Memory Card + 6 + 2 + Secure Digital, MultiMediaCard
    - https://farm6.staticflickr.com/5032/cameras/72157623495818996_model_small_a77640cee0.jpg - https://farm6.staticflickr.com/5032/cameras/72157623495818996_model_large_23f998fc01.jpg + https://live.staticflickr.com/cameras/115_model_small_ec10d60f7a.jpg + https://live.staticflickr.com/cameras/115_model_large_9ffdcf70bf.jpg
    - - Canon PowerShot A590 IS + + Canon PowerShot G10
    - 8 - 2.5 - MMCplus + 14.7 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm4.staticflickr.com/3059/cameras/72157603914408544_model_small_70f463f26f.jpg - https://farm4.staticflickr.com/3059/cameras/72157603914408544_model_large_914d992355.jpg + https://live.staticflickr.com/cameras/72157607254728807_model_small_c7595d237f.jpg + https://live.staticflickr.com/cameras/72157607254728807_model_large_62ddda0838.jpg
    - - Canon PowerShot S120 + + Canon PowerShot G9
    + 12.1 3 + MultiMediaCard, Secure Digital, SDHC
    - https://farm6.staticflickr.com/5509/cameras/72157632858905716_model_small_09c906f983.jpg - https://farm6.staticflickr.com/5509/cameras/72157632858905716_model_large_85a885e1ce.jpg + https://live.staticflickr.com/cameras/72157601586583928_model_small_71f71758a6.jpg + https://live.staticflickr.com/cameras/72157601586583928_model_large_3df7faed63.jpg
    - - Canon PowerShot G11 + + Canon PowerShot SX200 IS
    - 10 - 2.8 + 12.1 + 3 Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm3.staticflickr.com/2539/cameras/72157621971543189_model_small_1644edb612.jpg - https://farm3.staticflickr.com/2539/cameras/72157621971543189_model_large_bdefce42a8.jpg + https://live.staticflickr.com/cameras/72157615327177137_model_small_c923617fcf.jpg + https://live.staticflickr.com/cameras/72157615327177137_model_large_e2585949a3.jpg
    - - Canon PowerShot SX280 HS + + Canon PowerShot G1 X Mark II - https://farm6.staticflickr.com/5596/cameras/72157633352455718_model_small_d946c5d9ca.jpg - https://farm6.staticflickr.com/5596/cameras/72157633352455718_model_large_0bc3ebbc33.jpg + https://live.staticflickr.com/cameras/72157640985213904_model_small_8d1b938d77.jpg + https://live.staticflickr.com/cameras/72157640985213904_model_large_8454c17833.jpg - - Canon PowerShot SX170 IS + + Canon PowerShot G1 X
    + 14.3 3 + Secure Digital, SDHC, SDXC
    - https://farm6.staticflickr.com/5619/cameras/72157635427421420_model_small_2ddc739862.jpg - https://farm6.staticflickr.com/5619/cameras/72157635427421420_model_large_6530dd3eac.jpg + https://live.staticflickr.com/cameras/72157628828372835_model_small_198698201c.jpg + https://live.staticflickr.com/cameras/72157628828372835_model_large_a3c965c325.jpg
    - - Canon PowerShot SX400 IS + + Canon PowerShot SX30 IS +
    + 14.1 + 2.7 +
    - https://farm6.staticflickr.com/5807/cameras/72157647167111895_model_small_d02bbe89d7.jpg - https://farm6.staticflickr.com/5807/cameras/72157647167111895_model_large_cfbf3da591.jpg + https://live.staticflickr.com/cameras/72157624846412507_model_small_3ba18a5885.jpg + https://live.staticflickr.com/cameras/72157624846412507_model_large_478b8f73b5.jpg
    - - Canon PowerShot SD600 + + Canon PowerShot SX120 IS
    - 6 - 2.5 - Secure Digital, MultiMediaCard + 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm1.staticflickr.com/100/cameras/147_model_small_d4e6885dd1.jpg - https://farm1.staticflickr.com/100/cameras/147_model_large_7542357b7b.jpg + https://live.staticflickr.com/cameras/72157622008716929_model_small_7acbfb860f.jpg + https://live.staticflickr.com/cameras/72157622008716929_model_large_730372a5d9.jpg
    - - Canon PowerShot SD1200 IS + + Canon PowerShot SX10 IS
    10 2.5 Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm4.staticflickr.com/3303/cameras/72157615858002250_model_small_d297c2dd76.jpg - https://farm4.staticflickr.com/3303/cameras/72157615858002250_model_large_18e94049dd.jpg + https://live.staticflickr.com/cameras/72157607394786554_model_small_cd7b8479c5.jpg + https://live.staticflickr.com/cameras/72157607394786554_model_large_472ea85a5a.jpg
    @@ -855,136 +848,117 @@ Secure Digital, MultiMediaCard, SDHC - https://farm1.staticflickr.com/221/cameras/72157600292482502_model_small_16de7e5ce6.jpg - https://farm1.staticflickr.com/221/cameras/72157600292482502_model_large_25b3e8c05d.jpg + https://live.staticflickr.com/cameras/72157600292482502_model_small_16de7e5ce6.jpg + https://live.staticflickr.com/cameras/72157600292482502_model_large_25b3e8c05d.jpg - - Canon PowerShot SX130 IS + + Canon PowerShot SD1200 IS
    - 12.1 - 3 - SDHX + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm6.staticflickr.com/5079/cameras/72157624843263664_model_small_466ca9648e.jpg - https://farm6.staticflickr.com/5079/cameras/72157624843263664_model_large_0cdf8d446b.jpg + https://live.staticflickr.com/cameras/72157615858002250_model_small_d297c2dd76.jpg + https://live.staticflickr.com/cameras/72157615858002250_model_large_18e94049dd.jpg
    - - Canon PowerShot SX500 IS + + Canon PowerShot S90
    - 16 + 10 3 - Secure Digital, SDHC + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm3.staticflickr.com/2826/cameras/72157631426644668_model_small_3db39a01f5.jpg - https://farm3.staticflickr.com/2826/cameras/72157631426644668_model_large_3d45443eaf.jpg + https://live.staticflickr.com/cameras/72157622037248671_model_small_599abbeea4.jpg + https://live.staticflickr.com/cameras/72157622037248671_model_large_a3e2203efb.jpg
    - - Canon PowerShot SX240 HS - - - Canon PowerShot SX210 IS -
    - 14.1 - 3 -
    + + Canon PowerShot ELPH 100 HS - https://farm6.staticflickr.com/5169/cameras/72157623514846576_model_small_102da06252.jpg - https://farm6.staticflickr.com/5169/cameras/72157623514846576_model_large_ff33eaebcd.jpg + https://live.staticflickr.com/cameras/72157626077723737_model_small_422bc9313f.jpg + https://live.staticflickr.com/cameras/72157626077723737_model_large_e95bc5563a.jpg - - Canon PowerShot S90 + + Canon PowerShot A520
    - 10 - 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 4 + 1.8 + MultiMediaCard, Secure Digital (SD) Card
    - https://farm3.staticflickr.com/2790/cameras/72157622037248671_model_small_599abbeea4.jpg - https://farm3.staticflickr.com/2790/cameras/72157622037248671_model_large_a3e2203efb.jpg + https://live.staticflickr.com/cameras/113_model_small_3c4e2b476c.jpg + https://live.staticflickr.com/cameras/113_model_large_a8ae50aaa2.jpg
    - - Canon PowerShot SX160 IS - - - Canon EOS 1D Mark II N -
    - 8.2 - 2.5 - CompactFlash, Secure Digital (SD) Card, Microdrive -
    + + Canon CanoScan 9000F - https://farm1.staticflickr.com/122/cameras/792_model_small_79b90ff356.jpg - https://farm1.staticflickr.com/122/cameras/792_model_large_ae86ccf632.jpg + https://live.staticflickr.com/cameras/72157624247324882_model_small_a3237917bd.jpg + https://live.staticflickr.com/cameras/72157624247324882_model_large_287ed633f5.jpg - - Canon PowerShot G1 X + + Canon PowerShot SX210 IS
    - 14.3 + 14.1 3 - Secure Digital, SDHC, SDXC
    - https://farm9.staticflickr.com/8314/cameras/72157628828372835_model_small_198698201c.jpg - https://farm9.staticflickr.com/8314/cameras/72157628828372835_model_large_a3c965c325.jpg + https://live.staticflickr.com/cameras/72157623514846576_model_small_102da06252.jpg + https://live.staticflickr.com/cameras/72157623514846576_model_large_ff33eaebcd.jpg
    - - Canon PowerShot S110 - - - Canon PowerShot SD780 IS + + Canon PowerShot SD600
    - 12.1 + 6 2.5 - SDHC, MultiMediaCard, MMCPlus + Secure Digital, MultiMediaCard
    - https://farm4.staticflickr.com/3540/cameras/72157615260423184_model_small_bc5565c8b7.jpg - https://farm4.staticflickr.com/3540/cameras/72157615260423184_model_large_f0a803b0fc.jpg + https://live.staticflickr.com/cameras/147_model_small_d4e6885dd1.jpg + https://live.staticflickr.com/cameras/147_model_large_7542357b7b.jpg
    - - Canon PowerShot S2 IS + + Canon PowerShot SX500 IS
    - 5 - 1.8 - Secure Digital (SD) Card + 16 + 3 + Secure Digital, SDHC
    - https://farm1.staticflickr.com/99/cameras/73_model_small_54db2b6032.jpg - https://farm1.staticflickr.com/99/cameras/73_model_large_b8912b2c1e.jpg + https://live.staticflickr.com/cameras/72157631426644668_model_small_3db39a01f5.jpg + https://live.staticflickr.com/cameras/72157631426644668_model_large_3d45443eaf.jpg
    - - Canon PowerShot SX20 IS + + Canon PowerShot SD1300 IS
    12.1 - 2.5 - MultiMediaCard (MMC) + 2.7 + SDHC Memory Card
    - https://farm3.staticflickr.com/2724/cameras/72157622054003161_model_small_fa47de9a45.jpg - https://farm3.staticflickr.com/2724/cameras/72157622054003161_model_large_84bc659ebc.jpg + https://live.staticflickr.com/cameras/72157623495818996_model_small_a77640cee0.jpg + https://live.staticflickr.com/cameras/72157623495818996_model_large_23f998fc01.jpg
    - - Canon PowerShot SD870 IS + + Canon PowerShot SX110 IS
    - 8 + 9 3 - Secure Digital, MultiMediaCard, SDHC + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm2.staticflickr.com/1022/cameras/72157601661637005_model_small_8e99150a47.jpg - https://farm2.staticflickr.com/1022/cameras/72157601661637005_model_large_778c7a6f7f.jpg + https://live.staticflickr.com/cameras/72157607097240125_model_small_89b9359b0a.jpg + https://live.staticflickr.com/cameras/72157607097240125_model_large_37bf0a0285.jpg
    @@ -995,71 +969,77 @@ Secure Digital, SDHC, SDXC - https://farm9.staticflickr.com/8495/cameras/72157629682877859_model_small_0e76052de3.jpg - https://farm9.staticflickr.com/8495/cameras/72157629682877859_model_large_512c829f1c.jpg + https://live.staticflickr.com/cameras/72157629682877859_model_small_0e76052de3.jpg + https://live.staticflickr.com/cameras/72157629682877859_model_large_512c829f1c.jpg - - Canon PowerShot A2500 + + Canon PowerShot S2 IS
    - 2.7 + 5 + 1.8 + Secure Digital (SD) Card
    - https://farm6.staticflickr.com/5530/cameras/72157633211759483_model_small_fdf71aaa57.jpg - https://farm6.staticflickr.com/5530/cameras/72157633211759483_model_large_068f77cbc8.jpg + https://live.staticflickr.com/cameras/73_model_small_54db2b6032.jpg + https://live.staticflickr.com/cameras/73_model_large_b8912b2c1e.jpg
    - - Canon PowerShot SX230 HS + + Canon PowerShot SX220 HS - https://farm7.staticflickr.com/6029/cameras/72157626107421899_model_small_fe96996285.jpg - https://farm7.staticflickr.com/6029/cameras/72157626107421899_model_large_3b15049271.jpg + https://live.staticflickr.com/cameras/72157626120402661_model_small_2d8ae30536.jpg + https://live.staticflickr.com/cameras/72157626120402661_model_large_16f4ed2c3f.jpg - - Canon PowerShot SX200 IS -
    - 12.1 - 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus -
    + + Canon PowerShot SX400 IS - https://farm4.staticflickr.com/3382/cameras/72157615327177137_model_small_c923617fcf.jpg - https://farm4.staticflickr.com/3382/cameras/72157615327177137_model_large_e2585949a3.jpg + https://live.staticflickr.com/cameras/72157647167111895_model_small_d02bbe89d7.jpg + https://live.staticflickr.com/cameras/72157647167111895_model_large_cfbf3da591.jpg - - Canon PowerShot SX10 IS + + Canon PowerShot SD780 IS
    - 10 + 12.1 2.5 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + SDHC, MultiMediaCard, MMCPlus
    - https://farm4.staticflickr.com/3368/cameras/72157607394786554_model_small_cd7b8479c5.jpg - https://farm4.staticflickr.com/3368/cameras/72157607394786554_model_large_472ea85a5a.jpg + https://live.staticflickr.com/cameras/72157615260423184_model_small_bc5565c8b7.jpg + https://live.staticflickr.com/cameras/72157615260423184_model_large_f0a803b0fc.jpg
    - - Canon PowerShot SD1400 IS + + 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
    - 12 + 16 + 3 + Secure Digital, SDHC, SDXC
    - https://farm7.staticflickr.com/6023/cameras/72157623403735861_model_small_7b6eef712c.jpg - https://farm7.staticflickr.com/6023/cameras/72157623403735861_model_large_6377095b94.jpg + https://live.staticflickr.com/cameras/72157629690121413_model_small_c3674f9a04.jpg + https://live.staticflickr.com/cameras/72157629690121413_model_large_fd69104134.jpg
    - - Canon PowerShot A520 + + Canon PowerShot SX20 IS
    - 4 - 1.8 - MultiMediaCard, Secure Digital (SD) Card + 12.1 + 2.5 + MultiMediaCard (MMC)
    - https://farm1.staticflickr.com/108/cameras/113_model_small_3c4e2b476c.jpg - https://farm1.staticflickr.com/108/cameras/113_model_large_a8ae50aaa2.jpg + https://live.staticflickr.com/cameras/72157622054003161_model_small_fa47de9a45.jpg + https://live.staticflickr.com/cameras/72157622054003161_model_large_84bc659ebc.jpg
    @@ -1070,47 +1050,73 @@ Secure Digital (SD) Card - https://farm9.staticflickr.com/8040/cameras/72157627401052221_model_small_27ede7c032.jpg - https://farm9.staticflickr.com/8040/cameras/72157627401052221_model_large_a88fcd5700.jpg + https://live.staticflickr.com/cameras/72157627401052221_model_small_27ede7c032.jpg + https://live.staticflickr.com/cameras/72157627401052221_model_large_a88fcd5700.jpg - - Canon PowerShot SX600 HS + + Canon PowerShot SD870 IS
    + 8 3 + Secure Digital, MultiMediaCard, SDHC
    - https://farm4.staticflickr.com/3735/cameras/72157642221879684_model_small_dc7d3c59ee.jpg - https://farm4.staticflickr.com/3735/cameras/72157642221879684_model_large_206c3e1651.jpg + https://live.staticflickr.com/cameras/72157601661637005_model_small_8e99150a47.jpg + https://live.staticflickr.com/cameras/72157601661637005_model_large_778c7a6f7f.jpg
    - - Canon EOS M100 + + Canon PowerShot SX280 HS - https://farm5.staticflickr.com/4552/cameras/72157683011558521_model_small_c108ba4596.jpg - https://farm5.staticflickr.com/4552/cameras/72157683011558521_model_large_6958cc8184.jpg + https://live.staticflickr.com/cameras/72157633352455718_model_small_d946c5d9ca.jpg + https://live.staticflickr.com/cameras/72157633352455718_model_large_0bc3ebbc33.jpg - - Canon PowerShot SD800 IS + + Canon PowerShot SD400
    - 7.1 - 2.5 - Secure Digital, MultiMediaCard, SDHC + 5 + 2 + Secure Digital (SD) Card
    - https://farm1.staticflickr.com/100/cameras/3506_model_small_baa4b8be11.jpg - https://farm1.staticflickr.com/100/cameras/3506_model_large_9fba9d5611.jpg + https://live.staticflickr.com/cameras/30_model_small_ba4763b423.jpg + https://live.staticflickr.com/cameras/30_model_large_464f18fc8a.jpg
    - - Canon PowerShot A2200 + + Canon PowerShot A95
    - 14.1 + 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://farm6.staticflickr.com/5278/cameras/72157626006484232_model_small_32fb85f79e.jpg - https://farm6.staticflickr.com/5278/cameras/72157626006484232_model_large_7de50bc2d5.jpg + https://live.staticflickr.com/cameras/792_model_small_79b90ff356.jpg + https://live.staticflickr.com/cameras/792_model_large_ae86ccf632.jpg
    @@ -1121,8 +1127,8 @@ Secure Digital, MultiMediaCard, SDHC - https://farm1.staticflickr.com/100/cameras/928_model_small_687bc868ed.jpg - https://farm1.staticflickr.com/100/cameras/928_model_large_863d565f23.jpg + https://live.staticflickr.com/cameras/928_model_small_687bc868ed.jpg + https://live.staticflickr.com/cameras/928_model_large_863d565f23.jpg @@ -1133,161 +1139,195 @@ Secure Digital, MultiMediaCard - https://farm2.staticflickr.com/1001/cameras/72157600316000762_model_small_a83286a964.jpg - https://farm2.staticflickr.com/1001/cameras/72157600316000762_model_large_1970b12f6c.jpg - - - - Canon PowerShot ELPH 100 HS - - https://farm7.staticflickr.com/6058/cameras/72157626077723737_model_small_422bc9313f.jpg - https://farm7.staticflickr.com/6058/cameras/72157626077723737_model_large_e95bc5563a.jpg + https://live.staticflickr.com/cameras/72157600316000762_model_small_a83286a964.jpg + https://live.staticflickr.com/cameras/72157600316000762_model_large_1970b12f6c.jpg - - Canon PowerShot SX120 IS + + Canon PowerShot SD500
    - 10 - 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 7.1 + 2 + Secure Digital (SD) Card
    - https://farm3.staticflickr.com/2594/cameras/72157622008716929_model_small_7acbfb860f.jpg - https://farm3.staticflickr.com/2594/cameras/72157622008716929_model_large_730372a5d9.jpg + https://live.staticflickr.com/cameras/413_model_small_cde2faea24.jpg + https://live.staticflickr.com/cameras/413_model_large_9eff7352b6.jpg
    - - Canon PowerShot A560 + + Canon PowerShot S45
    - 7.1 - 2.5 - Secure Digital, MultiMediaCard, SDHC + 4 + 1.8 + CompactFlash (CF) Card
    - https://farm1.staticflickr.com/201/cameras/72157600291685735_model_small_c81b932be3.jpg - https://farm1.staticflickr.com/201/cameras/72157600291685735_model_large_6bcd9d3efc.jpg + https://live.staticflickr.com/cameras/373_model_small_f2002e4d4c.jpg + https://live.staticflickr.com/cameras/373_model_large_8d345e31a2.jpg
    - - Canon PowerShot A540 + + Canon PowerShot S110 + + + Canon EOS 1D Mark II
    - 6 + 8.2 2.5 - MultiMediaCard, Secure Digital + CompactFlash, Secure Digital (SD) Card, Microdrive
    - https://farm1.staticflickr.com/109/cameras/21_model_small_4595d398d7.jpg - https://farm1.staticflickr.com/109/cameras/21_model_large_511e5c2f88.jpg + https://live.staticflickr.com/cameras/12_model_small_1242e67975.jpg + https://live.staticflickr.com/cameras/12_model_large_dfa80dabd0.jpg
    - - Canon PowerShot SX110 IS + + Canon PowerShot SX600 HS
    - 9 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm4.staticflickr.com/3319/cameras/72157607097240125_model_small_89b9359b0a.jpg - https://farm4.staticflickr.com/3319/cameras/72157607097240125_model_large_37bf0a0285.jpg + https://live.staticflickr.com/cameras/72157642221879684_model_small_dc7d3c59ee.jpg + https://live.staticflickr.com/cameras/72157642221879684_model_large_206c3e1651.jpg
    - - Canon PowerShot SD630 + + Canon PowerShot A590 IS
    - 6 - 3 - MultiMediaCard, Secure Digital (SD) Card + 8 + 2.5 + MMCplus
    - https://farm1.staticflickr.com/100/cameras/380_model_small_ced61150f3.jpg - https://farm1.staticflickr.com/100/cameras/380_model_large_aa27b87301.jpg + https://live.staticflickr.com/cameras/72157603914408544_model_small_70f463f26f.jpg + https://live.staticflickr.com/cameras/72157603914408544_model_large_914d992355.jpg
    - - Canon PowerShot A70 + + Canon PowerShot SD450 +
    + 5 + 2.5 + Secure Digital, MultiMediaCard +
    - https://farm2.staticflickr.com/1396/cameras/331_model_small_fd6c5d9f6e.jpg - https://farm2.staticflickr.com/1396/cameras/331_model_large_2a908d5d29.jpg + https://live.staticflickr.com/cameras/64_model_small_fa1065b7b6.jpg + https://live.staticflickr.com/cameras/64_model_large_35994d68f5.jpg
    - - Canon PowerShot A620 + + Canon PowerShot S200 + + + Canon PowerShot A550
    7.1 2 - Secure Digital, MultiMediaCard + MultiMediaCard, Secure Digital, SDHC
    - https://farm1.staticflickr.com/107/cameras/134_model_small_92eeb17022.jpg - https://farm1.staticflickr.com/107/cameras/134_model_large_d1c1e2d3df.jpg + https://live.staticflickr.com/cameras/72157600289383418_model_small_0ee0a7e545.jpg + https://live.staticflickr.com/cameras/72157600289383418_model_large_b029991d3d.jpg
    - - Canon EOS 1DS + + Canon PowerShot A640
    - 11.1 - 2 - CompactFlash + 10 + 2.5 + MultiMediaCard, Secure Digital, SDHC
    - https://farm1.staticflickr.com/115/cameras/541_model_small_8bf11ebe60.jpg - https://farm1.staticflickr.com/115/cameras/541_model_large_f104299b9c.jpg + https://live.staticflickr.com/cameras/1317_model_small_82221e6d98.jpg + https://live.staticflickr.com/cameras/1317_model_large_5c7290e792.jpg
    - - Canon PowerShot SD400 + + Canon PowerShot SX700 HS
    - 5 - 2 - Secure Digital (SD) Card + 3
    - https://farm1.staticflickr.com/101/cameras/30_model_small_ba4763b423.jpg - https://farm1.staticflickr.com/101/cameras/30_model_large_464f18fc8a.jpg + https://live.staticflickr.com/cameras/72157641922172003_model_small_335e01dc78.jpg + https://live.staticflickr.com/cameras/72157641922172003_model_large_c62a48d7c0.jpg
    - - Canon PowerShot A720 IS + + Canon PowerShot SD800 IS
    - 8 + 7.1 2.5 Secure Digital, MultiMediaCard, SDHC
    - https://farm2.staticflickr.com/1342/cameras/72157601700908638_model_small_ffa204741b.jpg - https://farm2.staticflickr.com/1342/cameras/72157601700908638_model_large_c5f41eec0b.jpg + https://live.staticflickr.com/cameras/3506_model_small_baa4b8be11.jpg + https://live.staticflickr.com/cameras/3506_model_large_9fba9d5611.jpg
    - - Canon PowerShot SD450 + + 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
    - 5 + 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 + Secure Digital, MultiMediaCard, SDHC
    - https://farm1.staticflickr.com/114/cameras/64_model_small_fa1065b7b6.jpg - https://farm1.staticflickr.com/114/cameras/64_model_large_35994d68f5.jpg + https://live.staticflickr.com/cameras/72157601700908638_model_small_ffa204741b.jpg + https://live.staticflickr.com/cameras/72157601700908638_model_large_c5f41eec0b.jpg
    - - Canon PowerShot A95 + + Canon PowerShot SD300
    - 5 - 1.8 - CompactFlash + 4 + 2 + Secure Digital (SD) Card
    - https://farm1.staticflickr.com/107/cameras/58_model_small_1e7955211c.jpg - https://farm1.staticflickr.com/107/cameras/58_model_large_2f415e825f.jpg + https://live.staticflickr.com/cameras/192_model_small_dc3c6ec0b9.jpg + https://live.staticflickr.com/cameras/192_model_large_d808fc3fb6.jpg
    - - Canon EOS 650D + + Canon PowerShot G7 +
    + 10 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    - https://farm6.staticflickr.com/5681/cameras/72157658988031402_model_small_84fd539622.jpg - https://farm6.staticflickr.com/5681/cameras/72157658988031402_model_large_3b9e33f1d9.jpg + https://live.staticflickr.com/cameras/24369_model_small_cc7df00614.jpg + https://live.staticflickr.com/cameras/24369_model_large_e18440c1ed.jpg
    @@ -1298,8 +1338,8 @@ Secure Digital, MultiMediaCard - https://farm1.staticflickr.com/122/cameras/482_model_small_f8b4bfe6d8.jpg - https://farm1.staticflickr.com/122/cameras/482_model_large_033233faac.jpg + https://live.staticflickr.com/cameras/482_model_small_f8b4bfe6d8.jpg + https://live.staticflickr.com/cameras/482_model_large_033233faac.jpg @@ -1310,57 +1350,32 @@ MultiMediaCard, Secure Digital, SDHC - https://farm9.staticflickr.com/8031/cameras/72157600291595413_model_small_4f322f47a2.jpg - https://farm9.staticflickr.com/8031/cameras/72157600291595413_model_large_d7bed7b9d9.jpg - - - - Canon PowerShot A3100 IS -
    - 12 -
    -
    - - Canon PowerShot SX220 HS - - https://farm6.staticflickr.com/5620/cameras/72157626120402661_model_small_2d8ae30536.jpg - https://farm6.staticflickr.com/5620/cameras/72157626120402661_model_large_16f4ed2c3f.jpg + https://live.staticflickr.com/cameras/72157600291595413_model_small_4f322f47a2.jpg + https://live.staticflickr.com/cameras/72157600291595413_model_large_d7bed7b9d9.jpg - - Canon PowerShot SD700 IS + + Canon PowerShot A650 IS
    - 6 + 12.1 2.5 - Secure Digital, MultiMediaCard + Secure Digital, MultiMediaCard, SDHC
    - https://farm1.staticflickr.com/122/cameras/432_model_small_08e9751d7e.jpg - https://farm1.staticflickr.com/122/cameras/432_model_large_137b141680.jpg + https://live.staticflickr.com/cameras/72157601891740240_model_small_935ab686ff.jpg + https://live.staticflickr.com/cameras/72157601891740240_model_large_010a6f6998.jpg
    - - Canon PowerShot A3300 IS + + Canon PowerShot SD980 IS
    - 16 + 12.1 3 - Secure Digital (SD) Card -
    - - https://farm9.staticflickr.com/8313/cameras/72157626169050894_model_small_9024e25b64.jpg - https://farm9.staticflickr.com/8313/cameras/72157626169050894_model_large_11c60be00c.jpg - -
    - - Canon PowerShot A610 -
    - 5 - 2 - Secure Digital, MultiMediaCard + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm1.staticflickr.com/107/cameras/295_model_small_ec60d819ec.jpg - https://farm1.staticflickr.com/107/cameras/295_model_large_b9f67ef906.jpg + https://live.staticflickr.com/cameras/72157622084783391_model_small_1558771e45.jpg + https://live.staticflickr.com/cameras/72157622084783391_model_large_05e2884fe1.jpg
    @@ -1371,20 +1386,15 @@ CompactFlash (CF) Card - https://farm9.staticflickr.com/8310/cameras/42_model_small_53424d7981.jpg - https://farm9.staticflickr.com/8310/cameras/42_model_large_e48879fba0.jpg + https://live.staticflickr.com/cameras/42_model_small_53424d7981.jpg + https://live.staticflickr.com/cameras/42_model_large_e48879fba0.jpg - - Canon PowerShot SD960 IS -
    - 12.1 - 2.8 - Secure Digital, SDHC, MultiMediaCard, MMCPlus -
    + + Canon PowerShot A70 - https://farm4.staticflickr.com/3542/cameras/72157615260434668_model_small_068dd2b166.jpg - https://farm4.staticflickr.com/3542/cameras/72157615260434668_model_large_bddd57f961.jpg + https://live.staticflickr.com/cameras/331_model_small_fd6c5d9f6e.jpg + https://live.staticflickr.com/cameras/331_model_large_2a908d5d29.jpg @@ -1395,20 +1405,18 @@ Secure Digital, MultiMediaCard, SDHC - https://farm3.staticflickr.com/2400/cameras/72157602254956013_model_small_c7fc8218ed.jpg - https://farm3.staticflickr.com/2400/cameras/72157602254956013_model_large_ca3276f712.jpg + https://live.staticflickr.com/cameras/72157602254956013_model_small_c7fc8218ed.jpg + https://live.staticflickr.com/cameras/72157602254956013_model_large_ca3276f712.jpg - - Canon PowerShot SD790 IS + + Canon PowerShot SD1400 IS
    - 10 - 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 12
    - https://farm3.staticflickr.com/2234/cameras/72157604206177666_model_small_61519d019b.jpg - https://farm3.staticflickr.com/2234/cameras/72157604206177666_model_large_fe0abf6ac8.jpg + https://live.staticflickr.com/cameras/72157623403735861_model_small_7b6eef712c.jpg + https://live.staticflickr.com/cameras/72157623403735861_model_large_6377095b94.jpg
    @@ -1419,242 +1427,252 @@ MultiMediaCard, Secure Digital, SDHC - https://farm1.staticflickr.com/118/cameras/880_model_small_f621539dd2.jpg - https://farm1.staticflickr.com/118/cameras/880_model_large_f447184173.jpg + https://live.staticflickr.com/cameras/880_model_small_f621539dd2.jpg + https://live.staticflickr.com/cameras/880_model_large_f447184173.jpg - - Canon PowerShot A4000 IS + + Canon PowerShot S500
    - 16 - 3 - Secure Digital, SDHC, SDXC + 5 + 1.5 + Secure Digital (SD) Card
    - https://farm9.staticflickr.com/8234/cameras/72157629690121413_model_small_c3674f9a04.jpg - https://farm9.staticflickr.com/8234/cameras/72157629690121413_model_large_fd69104134.jpg + https://live.staticflickr.com/cameras/311_model_small_8f0b9890f5.jpg + https://live.staticflickr.com/cameras/311_model_large_7d733573e9.jpg
    - - Canon PowerShot G5 - - - Canon PowerShot A1100 IS + + Canon PowerShot D10
    12.1 2.5 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + Secure Digital (SD) Card
    - https://farm4.staticflickr.com/3403/cameras/72157614912551863_model_small_6c2707008a.jpg - https://farm4.staticflickr.com/3403/cameras/72157614912551863_model_large_3870e9c623.jpg + https://live.staticflickr.com/cameras/72157616911061933_model_small_e0ca711a7f.jpg + https://live.staticflickr.com/cameras/72157616911061933_model_large_cc00846c64.jpg
    - - Canon PowerShot ELPH 110 HS -
    - 3 -
    - - https://farm9.staticflickr.com/8491/cameras/72157629310448342_model_small_cd14d2b324.jpg - https://farm9.staticflickr.com/8491/cameras/72157629310448342_model_large_d505d94f18.jpg - + + Canon PowerShot G5 - - Canon PowerShot A1000 IS -
    - 10 - 2.5 - Secure Digital, SDHC, MultiMediaCard, MMCPlus -
    + + Canon EOS 650D - https://farm4.staticflickr.com/3474/cameras/72157607149127437_model_small_ea9ae41258.jpg - https://farm4.staticflickr.com/3474/cameras/72157607149127437_model_large_c274e4a031.jpg + https://live.staticflickr.com/cameras/72157658988031402_model_small_84fd539622.jpg + https://live.staticflickr.com/cameras/72157658988031402_model_large_3b9e33f1d9.jpg - - Canon PowerShot A430 + + Canon PowerShot S50 + + + Canon PowerShot G3
    4 1.8 - MultiMediaCard, Secure Digital (SD) Card + CompactFlash (CF) Card
    - https://farm1.staticflickr.com/122/cameras/7_model_small_b345a26c77.jpg - https://farm1.staticflickr.com/122/cameras/7_model_large_377848c90e.jpg + https://live.staticflickr.com/cameras/168_model_small_f86db7018f.jpg + https://live.staticflickr.com/cameras/168_model_large_bf37ba94b6.jpg
    - - Canon PowerShot S400 - - https://farm2.staticflickr.com/1314/cameras/533_model_small_d595a3f690.jpg - https://farm2.staticflickr.com/1314/cameras/533_model_large_9c8688c05a.jpg - - - - Canon PowerShot A80 + + Canon EOS D60 - - Canon PowerShot S500 + + Canon PowerShot SD900
    - 5 - 1.5 - Secure Digital (SD) Card + 10 + 2.5 + Secure Digital, MultiMediaCard, SDHC
    - https://farm1.staticflickr.com/113/cameras/311_model_small_8f0b9890f5.jpg - https://farm1.staticflickr.com/113/cameras/311_model_large_7d733573e9.jpg + https://live.staticflickr.com/cameras/2705_model_small_e4e7c5e7df.jpg + https://live.staticflickr.com/cameras/2705_model_large_af0d96d561.jpg
    - - Canon PowerShot SD770 IS + + Canon PowerShot A480
    10 2.5 Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm4.staticflickr.com/3223/cameras/72157604597339286_model_small_4e767448d9.jpg - https://farm4.staticflickr.com/3223/cameras/72157604597339286_model_large_c7c345de36.jpg + https://live.staticflickr.com/cameras/72157613371182459_model_small_8f00044538.jpg + https://live.staticflickr.com/cameras/72157613371182459_model_large_6f9d21111d.jpg
    - - Canon PowerShot G3 + + Canon PowerShot A470
    - 4 - 1.8 - CompactFlash (CF) Card + 7.1 + 2.5 + Secure Digital (SD) Card
    - https://farm9.staticflickr.com/8321/cameras/168_model_small_f86db7018f.jpg - https://farm9.staticflickr.com/8321/cameras/168_model_large_bf37ba94b6.jpg + https://live.staticflickr.com/cameras/72157604008953746_model_small_ab3a0c68fb.jpg + https://live.staticflickr.com/cameras/72157604008953746_model_large_5b25b77672.jpg
    - - Canon PowerShot SD500 + + Canon PowerShot A400 + + + Canon PowerShot S230 + + + Canon PowerShot G6
    7.1 2 - Secure Digital (SD) Card + CompactFlash (CF) Card
    - https://farm1.staticflickr.com/111/cameras/413_model_small_cde2faea24.jpg - https://farm1.staticflickr.com/111/cameras/413_model_large_9eff7352b6.jpg + https://live.staticflickr.com/cameras/306_model_small_10710a51a3.jpg + https://live.staticflickr.com/cameras/306_model_large_1cbfb40949.jpg
    - - Canon PowerShot A480 + + Canon PowerShot A2200
    - 10 - 2.5 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 14.1
    - https://farm4.staticflickr.com/3652/cameras/72157613371182459_model_small_8f00044538.jpg - https://farm4.staticflickr.com/3652/cameras/72157613371182459_model_large_6f9d21111d.jpg + https://live.staticflickr.com/cameras/72157626006484232_model_small_32fb85f79e.jpg + https://live.staticflickr.com/cameras/72157626006484232_model_large_7de50bc2d5.jpg
    - - Canon PowerShot Pro1 + + Canon PowerShot A490
    - 8 - 2 - CompactFlash + 10
    - - https://farm1.staticflickr.com/118/cameras/279_model_small_e6281ed159.jpg - https://farm1.staticflickr.com/118/cameras/279_model_large_ac13e907a7.jpg -
    - - Canon PowerShot A400 + + 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 SD900 + + Canon PowerShot S70
    - 10 - 2.5 - Secure Digital, MultiMediaCard, SDHC + 7.1 + 1.8 + CompactFlash
    - https://farm1.staticflickr.com/109/cameras/2705_model_small_e4e7c5e7df.jpg - https://farm1.staticflickr.com/109/cameras/2705_model_large_af0d96d561.jpg + https://live.staticflickr.com/cameras/70_model_small_74b4f1d550.jpg + https://live.staticflickr.com/cameras/70_model_large_f9711ed374.jpg
    - - Canon PowerShot SD110 + + 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 EOS M2 + + Canon PowerShot S40 + + + Canon PowerShot A3300 IS +
    + 16 + 3 + Secure Digital (SD) Card +
    - https://farm1.staticflickr.com/681/cameras/72157638486651333_model_small_dd694f802b.jpg - https://farm1.staticflickr.com/681/cameras/72157638486651333_model_large_ee0838b78e.jpg + https://live.staticflickr.com/cameras/72157626169050894_model_small_9024e25b64.jpg + https://live.staticflickr.com/cameras/72157626169050894_model_large_11c60be00c.jpg
    - - Canon PowerShot A550 + + 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 - MultiMediaCard, Secure Digital, SDHC + Secure Digital, MultiMediaCard
    - https://farm1.staticflickr.com/252/cameras/72157600289383418_model_small_0ee0a7e545.jpg - https://farm1.staticflickr.com/252/cameras/72157600289383418_model_large_b029991d3d.jpg + https://live.staticflickr.com/cameras/134_model_small_92eeb17022.jpg + https://live.staticflickr.com/cameras/134_model_large_d1c1e2d3df.jpg
    - - Canon PowerShot SD950 IS + + Canon PowerShot A540
    - 12.1 + 6 2.5 MultiMediaCard, Secure Digital
    - https://farm3.staticflickr.com/2068/cameras/72157602219148731_model_small_d208e9a3b0.jpg - https://farm3.staticflickr.com/2068/cameras/72157602219148731_model_large_95eacd033f.jpg + https://live.staticflickr.com/cameras/21_model_small_4595d398d7.jpg + https://live.staticflickr.com/cameras/21_model_large_511e5c2f88.jpg
    - - Canon PowerShot SD200 - - - Canon PowerShot SD300 + + Canon PowerShot SD630
    - 4 - 2 - Secure Digital (SD) Card + 6 + 3 + MultiMediaCard, Secure Digital (SD) Card
    - https://farm1.staticflickr.com/109/cameras/192_model_small_dc3c6ec0b9.jpg - https://farm1.staticflickr.com/109/cameras/192_model_large_d808fc3fb6.jpg + https://live.staticflickr.com/cameras/380_model_small_ced61150f3.jpg + https://live.staticflickr.com/cameras/380_model_large_aa27b87301.jpg
    - - Canon IXUS 220HS - - - Canon PowerShot A470 + + Canon EOS 1DS
    - 7.1 - 2.5 - Secure Digital (SD) Card + 11.1 + 2 + CompactFlash
    - https://farm3.staticflickr.com/2099/cameras/72157604008953746_model_small_ab3a0c68fb.jpg - https://farm3.staticflickr.com/2099/cameras/72157604008953746_model_large_5b25b77672.jpg + https://live.staticflickr.com/cameras/541_model_small_8bf11ebe60.jpg + https://live.staticflickr.com/cameras/541_model_large_f104299b9c.jpg
    - - Canon PowerShot D10 + + Canon PowerShot A2500
    - 12.1 - 2.5 - Secure Digital (SD) Card + 2.7
    - https://farm4.staticflickr.com/3488/cameras/72157616911061933_model_small_e0ca711a7f.jpg - https://farm4.staticflickr.com/3488/cameras/72157616911061933_model_large_cc00846c64.jpg + https://live.staticflickr.com/cameras/72157633211759483_model_small_fdf71aaa57.jpg + https://live.staticflickr.com/cameras/72157633211759483_model_large_068f77cbc8.jpg
    @@ -1665,67 +1683,82 @@ CompactFlash - https://farm1.staticflickr.com/114/cameras/53_model_small_1358fa386c.jpg - https://farm1.staticflickr.com/114/cameras/53_model_large_83792310b4.jpg + https://live.staticflickr.com/cameras/53_model_small_1358fa386c.jpg + https://live.staticflickr.com/cameras/53_model_large_83792310b4.jpg - - Canon PowerShot S50 + + 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 PowerShot A510 + + Canon IXUS 220HS + + + Canon PowerShot A40 + + + Canon PowerShot SX1 IS
    - 3.2 - 1.8 - MultiMediaCard, Secure Digital + 10 + 2.8 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm2.staticflickr.com/1436/cameras/103_model_small_b132094ab0.jpg - https://farm2.staticflickr.com/1436/cameras/103_model_large_f8b0f7772c.jpg + https://live.staticflickr.com/cameras/72157607398275267_model_small_506f6616ce.jpg + https://live.staticflickr.com/cameras/72157607398275267_model_large_533d29fcab.jpg
    - - Canon PowerShot A530 + + Canon PowerShot SD770 IS
    - 5 - 1.8 - MultiMediaCard, Secure Digital + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm1.staticflickr.com/117/cameras/303_model_small_85ec2a9970.jpg - https://farm1.staticflickr.com/117/cameras/303_model_large_90dd997c32.jpg + https://live.staticflickr.com/cameras/72157604597339286_model_small_4e767448d9.jpg + https://live.staticflickr.com/cameras/72157604597339286_model_large_c7c345de36.jpg
    - - Canon EOS D60 + + Canon PowerShot A3100 IS +
    + 12 +
    - - Canon PowerShot A640 + + Canon PowerShot S80
    - 10 + 8 2.5 - MultiMediaCard, Secure Digital, SDHC + Secure Digital, MultiMediaCard
    - https://farm1.staticflickr.com/114/cameras/1317_model_small_82221e6d98.jpg - https://farm1.staticflickr.com/114/cameras/1317_model_large_5c7290e792.jpg + https://live.staticflickr.com/cameras/162_model_small_e1565c67c9.jpg + https://live.staticflickr.com/cameras/162_model_large_571ee7b4bd.jpg
    - - Canon PowerShot ELPH 300HS + + Canon PowerShot SD950 IS
    12.1 - 2.7 - MultiMediaCard, Secure Digital, SDXC, SDHC + 2.5 + MultiMediaCard, Secure Digital
    - https://farm9.staticflickr.com/8309/cameras/72157626177410605_model_small_384a9a5bf2.jpg - https://farm9.staticflickr.com/8309/cameras/72157626177410605_model_large_ac6be593a2.jpg + https://live.staticflickr.com/cameras/72157602219148731_model_small_d208e9a3b0.jpg + https://live.staticflickr.com/cameras/72157602219148731_model_large_95eacd033f.jpg
    - - Canon EOS 1D - Canon PowerShot A85
    @@ -1734,278 +1767,301 @@ CompactFlash (CF) Card
    - https://farm2.staticflickr.com/1389/cameras/123_model_small_64e30bc0c3.jpg - https://farm2.staticflickr.com/1389/cameras/123_model_large_6a55c4cc59.jpg + https://live.staticflickr.com/cameras/123_model_small_64e30bc0c3.jpg + https://live.staticflickr.com/cameras/123_model_large_6a55c4cc59.jpg
    - - Canon PowerShot S45 + + Canon PowerShot A60 + + + Canon PowerShot SD200 + + + Canon PowerShot SD890 IS
    - 4 - 1.8 - CompactFlash (CF) Card + 10 + 2.5 + MultiMediaCard, Secure Digital, SDHC
    - https://farm9.staticflickr.com/8175/cameras/373_model_small_f2002e4d4c.jpg - https://farm9.staticflickr.com/8175/cameras/373_model_large_8d345e31a2.jpg + https://live.staticflickr.com/cameras/72157604325182497_model_small_37aa89e826.jpg + https://live.staticflickr.com/cameras/72157604325182497_model_large_80e15aacfd.jpg
    - - Canon PowerShot S30 + + Canon PowerShot S1 IS
    3.2 - 1.8 - CompactFlash (CF) Card + 1.5 + CompactFlash
    - https://farm9.staticflickr.com/8173/cameras/681_model_small_b801bc3de5.jpg - https://farm9.staticflickr.com/8173/cameras/681_model_large_fc4c035a37.jpg + https://live.staticflickr.com/cameras/445_model_small_a6791e4c0a.jpg + https://live.staticflickr.com/cameras/445_model_large_7499eb1668.jpg
    - - Canon PowerShot G1 + + 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 G7 + + Canon PowerShot S430 + + + Canon PowerShot A700
    - 10 + 6 2.5 - Secure Digital, MultiMediaCard, SDHC + MultiMediaCard, Secure Digital
    - https://farm1.staticflickr.com/122/cameras/24369_model_small_cc7df00614.jpg - https://farm1.staticflickr.com/122/cameras/24369_model_large_e18440c1ed.jpg + https://live.staticflickr.com/cameras/24_model_small_82f9fe11cf.jpg + https://live.staticflickr.com/cameras/24_model_large_9a1ac4b633.jpg
    - - Canon PowerShot SD880 IS + + Canon PowerShot S10 + + + Canon PowerShot A50 + + + Canon PowerShot ELPH 110 HS
    - 10 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm4.staticflickr.com/3347/cameras/72157607803563543_model_small_f054e019cf.jpg - https://farm4.staticflickr.com/3347/cameras/72157607803563543_model_large_b23b35ef33.jpg + https://live.staticflickr.com/cameras/72157629310448342_model_small_cd14d2b324.jpg + https://live.staticflickr.com/cameras/72157629310448342_model_large_d505d94f18.jpg
    - - Canon PowerShot S200 - - - Canon PowerShot A40 + + 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 G6 + + Canon PowerShot S410
    - 7.1 - 2 + 4 + 1.5 CompactFlash (CF) Card
    - https://farm1.staticflickr.com/120/cameras/306_model_small_10710a51a3.jpg - https://farm1.staticflickr.com/120/cameras/306_model_large_1cbfb40949.jpg + https://live.staticflickr.com/cameras/49_model_small_a82d562b14.jpg + https://live.staticflickr.com/cameras/49_model_large_f7c124120b.jpg
    - - Canon PowerShot A650 IS + + Canon PowerShot A430
    - 12.1 - 2.5 - Secure Digital, MultiMediaCard, SDHC + 4 + 1.8 + MultiMediaCard, Secure Digital (SD) Card
    - https://farm2.staticflickr.com/1226/cameras/72157601891740240_model_small_935ab686ff.jpg - https://farm2.staticflickr.com/1226/cameras/72157601891740240_model_large_010a6f6998.jpg + https://live.staticflickr.com/cameras/7_model_small_b345a26c77.jpg + https://live.staticflickr.com/cameras/7_model_large_377848c90e.jpg
    - - Canon PowerShot SD990 IS + + Canon PowerShot SD100 + + + Canon PowerShot A20 + + + Canon PowerShot A580
    - 14.7 + 8 2.5 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + MMCplus
    - https://farm4.staticflickr.com/3461/cameras/72157607826378076_model_small_570b3e63da.jpg - https://farm4.staticflickr.com/3461/cameras/72157607826378076_model_large_57edfd2df8.jpg + https://live.staticflickr.com/cameras/72157604000068487_model_small_11826b37d5.jpg + https://live.staticflickr.com/cameras/72157604000068487_model_large_57e09b15a2.jpg
    - - Canon PowerShot A495 - - https://farm6.staticflickr.com/5314/cameras/72157623248701455_model_small_866f79da99.jpg - https://farm6.staticflickr.com/5314/cameras/72157623248701455_model_large_d76121e78f.jpg - + + Canon PowerShot S20 - - Canon PowerShot A490 -
    - 10 -
    + + Canon PowerShot A420 - - Canon PowerShot S70 + + Canon PowerShot SX240 HS + + + Canon PowerShot A560
    7.1 - 1.8 - CompactFlash + 2.5 + Secure Digital, MultiMediaCard, SDHC
    - https://farm1.staticflickr.com/110/cameras/70_model_small_74b4f1d550.jpg - https://farm1.staticflickr.com/110/cameras/70_model_large_f9711ed374.jpg + https://live.staticflickr.com/cameras/72157600291685735_model_small_c81b932be3.jpg + https://live.staticflickr.com/cameras/72157600291685735_model_large_6bcd9d3efc.jpg
    - - Canon PowerShot S430 + + Canon PowerShot A80 - - Canon EOS D30 + + 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 ELPH 300 HS + + Canon PowerShot SD700 IS
    - 12 + 6 + 2.5 + Secure Digital, MultiMediaCard
    - https://farm7.staticflickr.com/6004/cameras/72157626133707081_model_small_fd24fe9a5f.jpg - https://farm7.staticflickr.com/6004/cameras/72157626133707081_model_large_5789bb40d6.jpg + https://live.staticflickr.com/cameras/432_model_small_08e9751d7e.jpg + https://live.staticflickr.com/cameras/432_model_large_137b141680.jpg
    - - Canon PowerShot SX1 IS + + Canon PowerShot A1100 IS
    - 10 - 2.8 + 12.1 + 2.5 Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm4.staticflickr.com/3580/cameras/72157607398275267_model_small_506f6616ce.jpg - https://farm4.staticflickr.com/3580/cameras/72157607398275267_model_large_533d29fcab.jpg + https://live.staticflickr.com/cameras/72157614912551863_model_small_6c2707008a.jpg + https://live.staticflickr.com/cameras/72157614912551863_model_large_3870e9c623.jpg
    - - Canon PowerShot A460 + + Canon PowerShot A610
    5 2 - MultiMediaCard, Secure Digital, SDHC + Secure Digital, MultiMediaCard
    - https://farm1.staticflickr.com/228/cameras/72157600289350296_model_small_7fbe5bacab.jpg - https://farm1.staticflickr.com/228/cameras/72157600289350296_model_large_4a22860b7c.jpg + https://live.staticflickr.com/cameras/295_model_small_ec60d819ec.jpg + https://live.staticflickr.com/cameras/295_model_large_b9f67ef906.jpg
    - - Canon PowerShot S230 - - - Canon PowerShot S1 IS + + Canon PowerShot SD880 IS
    - 3.2 - 1.5 - CompactFlash + 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm1.staticflickr.com/116/cameras/445_model_small_a6791e4c0a.jpg - https://farm1.staticflickr.com/116/cameras/445_model_large_7499eb1668.jpg + https://live.staticflickr.com/cameras/72157607803563543_model_small_f054e019cf.jpg + https://live.staticflickr.com/cameras/72157607803563543_model_large_b23b35ef33.jpg
    - - Canon PowerShot A3000 IS + + Canon PowerShot A510 +
    + 3.2 + 1.8 + MultiMediaCard, Secure Digital +
    - https://farm7.staticflickr.com/6015/cameras/72157623337752577_model_small_ff326581e0.jpg - https://farm7.staticflickr.com/6015/cameras/72157623337752577_model_large_fa3577dc49.jpg + https://live.staticflickr.com/cameras/103_model_small_b132094ab0.jpg + https://live.staticflickr.com/cameras/103_model_large_f8b0f7772c.jpg
    - - Canon PowerShot A1200 + + Canon PowerShot ELPH 300HS
    12.1 2.7 - SD/SDHC/SDXC + MultiMediaCard, Secure Digital, SDXC, SDHC
    - https://farm8.staticflickr.com/7178/cameras/72157626100347637_model_small_98281cf6c9.jpg - https://farm8.staticflickr.com/7178/cameras/72157626100347637_model_large_5815e8dea2.jpg + https://live.staticflickr.com/cameras/72157626177410605_model_small_384a9a5bf2.jpg + https://live.staticflickr.com/cameras/72157626177410605_model_large_ac6be593a2.jpg
    - - Canon PowerShot A700 + + Canon PowerShot A1000 IS
    - 6 + 10 2.5 - MultiMediaCard, Secure Digital + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm1.staticflickr.com/118/cameras/24_model_small_82f9fe11cf.jpg - https://farm1.staticflickr.com/118/cameras/24_model_large_9a1ac4b633.jpg + https://live.staticflickr.com/cameras/72157607149127437_model_small_ea9ae41258.jpg + https://live.staticflickr.com/cameras/72157607149127437_model_large_c274e4a031.jpg
    - - Canon PowerShot SD100 - - - Canon PowerShot S60 + + Canon PowerShot S30
    - 5 + 3.2 1.8 CompactFlash (CF) Card
    - https://farm1.staticflickr.com/121/cameras/319_model_small_b6503c5e8f.jpg - https://farm1.staticflickr.com/121/cameras/319_model_large_a74142fbbb.jpg + https://live.staticflickr.com/cameras/681_model_small_b801bc3de5.jpg + https://live.staticflickr.com/cameras/681_model_large_fc4c035a37.jpg
    - - Canon PowerShot SD30 -
    - 5 - 1.8 - Secure Digital, MultiMediaCard -
    - - https://farm1.staticflickr.com/100/cameras/329_model_small_ca1aa2959e.jpg - https://farm1.staticflickr.com/100/cameras/329_model_large_ab5abc906b.jpg - + + Canon EOS 1D - - Canon PowerShot A580 + + Canon PowerShot A1200
    - 8 - 2.5 - MMCplus + 12.1 + 2.7 + SD/SDHC/SDXC
    - https://farm3.staticflickr.com/2017/cameras/72157604000068487_model_small_11826b37d5.jpg - https://farm3.staticflickr.com/2017/cameras/72157604000068487_model_large_57e09b15a2.jpg + https://live.staticflickr.com/cameras/72157626100347637_model_small_98281cf6c9.jpg + https://live.staticflickr.com/cameras/72157626100347637_model_large_5815e8dea2.jpg
    - - Canon PowerShot A60 - - - Canon PowerShot SD890 IS + + Canon PowerShot A460
    - 10 - 2.5 + 5 + 2 MultiMediaCard, Secure Digital, SDHC
    - https://farm4.staticflickr.com/3213/cameras/72157604325182497_model_small_37aa89e826.jpg - https://farm4.staticflickr.com/3213/cameras/72157604325182497_model_large_80e15aacfd.jpg + https://live.staticflickr.com/cameras/72157600289350296_model_small_7fbe5bacab.jpg + https://live.staticflickr.com/cameras/72157600289350296_model_large_4a22860b7c.jpg
    - - Canon PowerShot A410 + + Canon PowerShot SD940 IS
    - 3.2 - 1.5 - MultiMediaCard, Secure Digital + 12.1 + 2.7 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm1.staticflickr.com/113/cameras/18_model_small_4e47ea423d.jpg - https://farm1.staticflickr.com/113/cameras/18_model_large_dc8a8ee8b3.jpg + https://live.staticflickr.com/cameras/72157622084755657_model_small_1eaf6702b9.jpg + https://live.staticflickr.com/cameras/72157622084755657_model_large_b543294bc4.jpg
    @@ -2016,28 +2072,17 @@ Secure Digital, MultiMediaCard - https://farm1.staticflickr.com/102/cameras/345_model_small_727b7fb8a6.jpg - https://farm1.staticflickr.com/102/cameras/345_model_large_0640966e76.jpg + https://live.staticflickr.com/cameras/345_model_small_727b7fb8a6.jpg + https://live.staticflickr.com/cameras/345_model_large_0640966e76.jpg - - Canon PowerShot S80 -
    - 8 - 2.5 - Secure Digital, MultiMediaCard -
    + + Canon PowerShot A495 - https://farm1.staticflickr.com/121/cameras/162_model_small_e1565c67c9.jpg - https://farm1.staticflickr.com/121/cameras/162_model_large_571ee7b4bd.jpg + https://live.staticflickr.com/cameras/72157623248701455_model_small_866f79da99.jpg + https://live.staticflickr.com/cameras/72157623248701455_model_large_d76121e78f.jpg - - Canon PowerShot A310 - - - Canon PowerShot S40 - Canon PowerShot A2000 IS
    @@ -2046,101 +2091,75 @@ Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm9.staticflickr.com/8038/cameras/72157607272610511_model_small_ffc16364ec.jpg - https://farm9.staticflickr.com/8038/cameras/72157607272610511_model_large_c3440fdc55.jpg + 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://farm7.staticflickr.com/6011/cameras/72157624136191544_model_small_c8c1f1020d.jpg - https://farm7.staticflickr.com/6011/cameras/72157624136191544_model_large_0d9be374a0.jpg + https://live.staticflickr.com/cameras/72157624136191544_model_small_c8c1f1020d.jpg + https://live.staticflickr.com/cameras/72157624136191544_model_large_0d9be374a0.jpg - - Canon PowerShot A20 + + Canon PowerShot S330 Canon PowerShot S300 - - Canon PowerShot E1 -
    - 10 - 2.5 - Secure Digital, SDHC, MultiMediaCard, MMCPlus -
    - - https://farm4.staticflickr.com/3664/cameras/72157607584729571_model_small_19dc0473cb.jpg - https://farm4.staticflickr.com/3664/cameras/72157607584729571_model_large_ef505b6354.jpg - -
    - - Canon PowerShot A200 - - - Canon PowerShot A2100 IS -
    - 12.1 - 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus -
    - - https://farm3.staticflickr.com/2719/cameras/72157615813690609_model_small_85a05a0580.jpg - https://farm3.staticflickr.com/2719/cameras/72157615813690609_model_large_5c483e0981.jpg - + + Canon PowerShot SD110 - - Canon PowerShot A50 + + Canon PowerShot G1 - - Canon PowerShot SD980 IS + + Canon PowerShot S60
    - 12.1 - 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 5 + 1.8 + CompactFlash (CF) Card
    - https://farm3.staticflickr.com/2594/cameras/72157622084783391_model_small_1558771e45.jpg - https://farm3.staticflickr.com/2594/cameras/72157622084783391_model_large_05e2884fe1.jpg + https://live.staticflickr.com/cameras/319_model_small_b6503c5e8f.jpg + https://live.staticflickr.com/cameras/319_model_large_a74142fbbb.jpg
    - - Canon PowerShot A420 + + Canon PowerShot A300 - - Canon PowerShot SD940 IS + + Canon PowerShot Pro90 IS
    - 12.1 - 2.7 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 3.2 + 1.8 + CompactFlash (CF) Card
    - https://farm3.staticflickr.com/2669/cameras/72157622084755657_model_small_1eaf6702b9.jpg - https://farm3.staticflickr.com/2669/cameras/72157622084755657_model_large_b543294bc4.jpg + https://live.staticflickr.com/cameras/1792_model_small_6ca66ff1ac.jpg + https://live.staticflickr.com/cameras/1792_model_large_2654c5d5de.jpg
    - - Canon PowerShot S410 + + Canon PowerShot SD30
    - 4 - 1.5 - CompactFlash (CF) Card + 5 + 1.8 + Secure Digital, MultiMediaCard
    - https://farm1.staticflickr.com/112/cameras/49_model_small_a82d562b14.jpg - https://farm1.staticflickr.com/112/cameras/49_model_large_f7c124120b.jpg + https://live.staticflickr.com/cameras/329_model_small_ca1aa2959e.jpg + https://live.staticflickr.com/cameras/329_model_large_ab5abc906b.jpg
    - - Canon PowerShot A300 - - - Canon PowerShot SD3500 IS -
    - 14.1 -
    -
    Canon PowerShot SD20
    @@ -2149,18 +2168,24 @@ Secure Digital (SD) Card
    - https://farm1.staticflickr.com/101/cameras/1056_model_small_0fe1cb84e6.jpg - https://farm1.staticflickr.com/101/cameras/1056_model_large_c3b3853158.jpg + https://live.staticflickr.com/cameras/1056_model_small_0fe1cb84e6.jpg + https://live.staticflickr.com/cameras/1056_model_large_c3b3853158.jpg
    - - Canon PowerShot S20 - - - Canon PowerShot S330 + + Canon PowerShot A310 - - Canon PowerShot S10 + + 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 @@ -2168,16 +2193,22 @@ Canon PowerShot A450 - - Canon PowerShot Pro90 IS + + Canon PowerShot SD3500 IS
    - 3.2 - 1.8 - CompactFlash (CF) Card + 14.1 +
    +
    + + Canon PowerShot E1 +
    + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://farm1.staticflickr.com/101/cameras/1792_model_small_6ca66ff1ac.jpg - https://farm1.staticflickr.com/101/cameras/1792_model_large_2654c5d5de.jpg + https://live.staticflickr.com/cameras/72157607584729571_model_small_19dc0473cb.jpg + https://live.staticflickr.com/cameras/72157607584729571_model_large_ef505b6354.jpg
    @@ -2188,8 +2219,8 @@ Secure Digital, SDHC, MultiMediaCard, MMCPlus - https://farm3.staticflickr.com/2674/cameras/72157616347164661_model_small_3f4b234723.jpg - https://farm3.staticflickr.com/2674/cameras/72157616347164661_model_large_886fd1e530.jpg + https://live.staticflickr.com/cameras/72157616347164661_model_small_3f4b234723.jpg + https://live.staticflickr.com/cameras/72157616347164661_model_large_886fd1e530.jpg @@ -2200,8 +2231,8 @@ Secure Digital, MultiMediaCard, SDHC - https://farm1.staticflickr.com/120/cameras/50047_model_small_07b3b7b4c4.jpg - https://farm1.staticflickr.com/120/cameras/50047_model_large_21ac845732.jpg + https://live.staticflickr.com/cameras/50047_model_small_07b3b7b4c4.jpg + https://live.staticflickr.com/cameras/50047_model_large_21ac845732.jpg @@ -2212,54 +2243,37 @@ MultiMediaCard, Secure Digital, SDHC - https://farm1.staticflickr.com/195/cameras/72157600293208250_model_small_264ea2a837.jpg - https://farm1.staticflickr.com/195/cameras/72157600293208250_model_large_d7a965d3fb.jpg + https://live.staticflickr.com/cameras/72157600293208250_model_small_264ea2a837.jpg + https://live.staticflickr.com/cameras/72157600293208250_model_large_d7a965d3fb.jpg - - Canon PowerShot A100 - Canon HV20
    2.7
    - https://farm3.staticflickr.com/2081/cameras/72157600292920852_model_small_08ffbdf604.jpg - https://farm3.staticflickr.com/2081/cameras/72157600292920852_model_large_3175d743e7.jpg + https://live.staticflickr.com/cameras/72157600292920852_model_small_08ffbdf604.jpg + https://live.staticflickr.com/cameras/72157600292920852_model_large_3175d743e7.jpg
    - - Canon PowerShot A30 + + Canon Optura 200 MC - - Canon Optura 300 + + Canon PowerShot A100 Canon Optura 20 - - Canon ZR70 MC + + Canon Optura 300 - - Canon ZR200 -
    - 2.4 -
    - - https://farm1.staticflickr.com/104/cameras/834_model_small_32d5d5661c.jpg - https://farm1.staticflickr.com/104/cameras/834_model_large_0e0c1b4558.jpg - + + Canon ZR90 - - Canon DC10 -
    - 2.5 -
    - - https://farm2.staticflickr.com/1147/cameras/1556_model_small_4687e277f0.jpg - https://farm2.staticflickr.com/1147/cameras/1556_model_large_22f4d11350.jpg - + + Canon GL2 Canon PowerShot SD430 Wireless @@ -2269,160 +2283,183 @@ Secure Digital, MultiMediaCard - https://farm1.staticflickr.com/108/cameras/414_model_small_ecb3329329.jpg - https://farm1.staticflickr.com/108/cameras/414_model_large_a004c60da3.jpg + https://live.staticflickr.com/cameras/414_model_small_ecb3329329.jpg + https://live.staticflickr.com/cameras/414_model_large_a004c60da3.jpg - - Canon Optura 600 + + Canon ZR65 MC + + + Canon Optura 40
    2.5
    - https://farm1.staticflickr.com/116/cameras/2644_model_small_2b31ee6a72.jpg - https://farm1.staticflickr.com/116/cameras/2644_model_large_c99852498a.jpg + https://live.staticflickr.com/cameras/1766_model_small_f8791abed7.jpg + https://live.staticflickr.com/cameras/1766_model_large_dd791c27a3.jpg
    - - Canon HV10 + + Canon ZR70 MC + + + Canon ZR700
    2.7
    - https://farm1.staticflickr.com/101/cameras/4250_model_small_0587b2f1d4.jpg - https://farm1.staticflickr.com/101/cameras/4250_model_large_485d09c770.jpg + https://live.staticflickr.com/cameras/6046_model_small_f41b4b4d4e.jpg + https://live.staticflickr.com/cameras/6046_model_large_6c3b8985db.jpg
    - - Canon Optura 200 MC + + Canon PowerShot A30 - - Canon ZR85 + + Canon ZR850
    - 2.5 + 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://farm1.staticflickr.com/118/cameras/2031_model_small_23f714666e.jpg - https://farm1.staticflickr.com/118/cameras/2031_model_large_b853e28789.jpg + https://live.staticflickr.com/cameras/1901_model_small_5e8b8ace02.jpg + https://live.staticflickr.com/cameras/1901_model_large_00bb945fd0.jpg
    Canon Elura 70 - - Canon DC100 + + Canon DC10
    - 2.7 + 2.5
    - https://farm1.staticflickr.com/116/cameras/2732_model_small_36ae667f4a.jpg - https://farm1.staticflickr.com/116/cameras/2732_model_large_068d35c572.jpg + https://live.staticflickr.com/cameras/1556_model_small_4687e277f0.jpg + https://live.staticflickr.com/cameras/1556_model_large_22f4d11350.jpg
    - - Canon ZR90 - - - Canon Elura 60 + + Canon ZR400 +
    + 2.4 +
    - https://farm1.staticflickr.com/113/cameras/3243_model_small_7171eda644.jpg - https://farm1.staticflickr.com/113/cameras/3243_model_large_4b80555830.jpg + https://live.staticflickr.com/cameras/2427_model_small_ef31cd0754.jpg + https://live.staticflickr.com/cameras/2427_model_large_8dea31956f.jpg
    - - Canon ZR65 MC + + Canon EOS D30 - - Canon ZR700 + + Canon ZR200
    - 2.7 + 2.4
    - https://farm1.staticflickr.com/113/cameras/6046_model_small_f41b4b4d4e.jpg - https://farm1.staticflickr.com/113/cameras/6046_model_large_6c3b8985db.jpg + https://live.staticflickr.com/cameras/834_model_small_32d5d5661c.jpg + https://live.staticflickr.com/cameras/834_model_large_0e0c1b4558.jpg
    - - Canon ZR850 + + Canon ZR85
    - 2.7 + 2.5
    - https://farm2.staticflickr.com/1149/cameras/72157600292491412_model_small_bd46421c08.jpg - https://farm2.staticflickr.com/1149/cameras/72157600292491412_model_large_5f38b568a4.jpg + https://live.staticflickr.com/cameras/2031_model_small_23f714666e.jpg + https://live.staticflickr.com/cameras/2031_model_large_b853e28789.jpg
    - - Canon GL2 - Canon Elura 85 - - Canon ZR600 + + Canon Optura 600
    - 2.7 + 2.5
    - https://farm1.staticflickr.com/112/cameras/1901_model_small_5e8b8ace02.jpg - https://farm1.staticflickr.com/112/cameras/1901_model_large_00bb945fd0.jpg - -
    - - Canon Optura Xi - - https://farm1.staticflickr.com/113/cameras/2327_model_small_4adaf0cbba.jpg - https://farm1.staticflickr.com/113/cameras/2327_model_large_afb3324063.jpg + https://live.staticflickr.com/cameras/2644_model_small_2b31ee6a72.jpg + https://live.staticflickr.com/cameras/2644_model_large_c99852498a.jpg - - Canon DC40 + + Canon Elura 100
    2.7
    - https://farm1.staticflickr.com/101/cameras/2604_model_small_be408cc63c.jpg - https://farm1.staticflickr.com/101/cameras/2604_model_large_42c1d7eeed.jpg + https://live.staticflickr.com/cameras/3454_model_small_c33c5c12df.jpg + https://live.staticflickr.com/cameras/3454_model_large_2c7745a2c9.jpg
    - - Canon Elura 100 + + Canon HV10
    2.7
    - https://farm1.staticflickr.com/120/cameras/3454_model_small_c33c5c12df.jpg - https://farm1.staticflickr.com/120/cameras/3454_model_large_2c7745a2c9.jpg + https://live.staticflickr.com/cameras/4250_model_small_0587b2f1d4.jpg + https://live.staticflickr.com/cameras/4250_model_large_485d09c770.jpg
    - - Canon Elura 40 MC + + 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 Optura 40 + + Canon DC40
    - 2.5 + 2.7
    - https://farm2.staticflickr.com/1262/cameras/1766_model_small_f8791abed7.jpg - https://farm2.staticflickr.com/1262/cameras/1766_model_large_dd791c27a3.jpg + https://live.staticflickr.com/cameras/2604_model_small_be408cc63c.jpg + https://live.staticflickr.com/cameras/2604_model_large_42c1d7eeed.jpg
    - - Canon ZR400 + + 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.4 + 2.5
    - https://farm1.staticflickr.com/118/cameras/2427_model_small_ef31cd0754.jpg - https://farm1.staticflickr.com/118/cameras/2427_model_large_8dea31956f.jpg + https://live.staticflickr.com/cameras/3699_model_small_44534ffb98.jpg + https://live.staticflickr.com/cameras/3699_model_large_c50d67a3b0.jpg
    - - Canon Elura 65 + + Canon Elura 40 MC + + + Canon Elura 90 Canon DC20 @@ -2430,54 +2467,51 @@ 2.5 - https://farm1.staticflickr.com/165/cameras/2706_model_small_c33b9358b4.jpg - https://farm1.staticflickr.com/165/cameras/2706_model_large_dc34c957f5.jpg + https://live.staticflickr.com/cameras/2706_model_small_c33b9358b4.jpg + https://live.staticflickr.com/cameras/2706_model_large_dc34c957f5.jpg - - Canon Optura 50 + + Canon Optura 400
    2.5
    - https://farm1.staticflickr.com/121/cameras/2715_model_small_dc3a2c41df.jpg - https://farm1.staticflickr.com/121/cameras/2715_model_large_dcd9166601.jpg + https://live.staticflickr.com/cameras/7708_model_small_6893d5c98d.jpg + https://live.staticflickr.com/cameras/7708_model_large_7046065dd5.jpg
    - - Canon Optura 30 - - - Canon Elura 80 + + Canon Optura 50
    2.5
    - https://farm2.staticflickr.com/1054/cameras/3699_model_small_44534ffb98.jpg - https://farm2.staticflickr.com/1054/cameras/3699_model_large_c50d67a3b0.jpg + https://live.staticflickr.com/cameras/2715_model_small_dc3a2c41df.jpg + https://live.staticflickr.com/cameras/2715_model_large_dcd9166601.jpg
    - - Canon ZR300 + + Canon DC100
    - 2.4 + 2.7
    - https://farm1.staticflickr.com/117/cameras/4573_model_small_cdec1cc747.jpg - https://farm1.staticflickr.com/117/cameras/4573_model_large_6603ffbb98.jpg + https://live.staticflickr.com/cameras/2732_model_small_36ae667f4a.jpg + https://live.staticflickr.com/cameras/2732_model_large_068d35c572.jpg
    - - Canon Elura 90 + + Canon Optura 30 - - Canon Optura 400 + + Canon ZR300
    - 2.5 + 2.4
    - https://farm1.staticflickr.com/117/cameras/7708_model_small_6893d5c98d.jpg - https://farm1.staticflickr.com/117/cameras/7708_model_large_7046065dd5.jpg + https://live.staticflickr.com/cameras/4573_model_small_cdec1cc747.jpg + https://live.staticflickr.com/cameras/4573_model_large_6603ffbb98.jpg
    diff --git a/src/test/resources/payloads/get/flickr.cameras.getBrands.xml b/src/test/resources/payloads/get/flickr.cameras.getBrands.xml index c2d2118f..e1d60f1b 100644 --- a/src/test/resources/payloads/get/flickr.cameras.getBrands.xml +++ b/src/test/resources/payloads/get/flickr.cameras.getBrands.xml @@ -4,44 +4,44 @@ - - - - + - + + + - + + - - - - + + + + + - - - - - - + - - - - - - + + + + + + + + + + \ 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 index eb372733..cbe7b251 100644 --- a/src/test/resources/payloads/get/flickr.collections.getInfo.xml +++ b/src/test/resources/payloads/get/flickr.collections.getInfo.xml @@ -1,21 +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 index adb2b1b9..c594488d 100644 --- a/src/test/resources/payloads/get/flickr.collections.getTree.xml +++ b/src/test/resources/payloads/get/flickr.collections.getTree.xml @@ -1,7 +1,7 @@ - + diff --git a/src/test/resources/payloads/get/flickr.commons.getInstitutions.xml b/src/test/resources/payloads/get/flickr.commons.getInstitutions.xml index 7c746d84..caa2256e 100644 --- a/src/test/resources/payloads/get/flickr.commons.getInstitutions.xml +++ b/src/test/resources/payloads/get/flickr.commons.getInstitutions.xml @@ -1,6 +1,14 @@ + + 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ó @@ -42,7 +50,7 @@ - Liberaal Archief - Liberas + Liberas http://www.liberaalarchief.be/ http://www.liberaalarchief.be/LiberaalArchief-NoKnownCopyrightRestrictions.pdf @@ -98,7 +106,7 @@ - Directorate General of Press and Information + Presidency Of The Republic Of Turkey Directorate o http://www.byegm.gov.tr/english http://www.byegm.gov.tr/turkce/rightsstatement @@ -137,14 +145,6 @@ http://flickr.com/photos/vcucommons/ - - Netherlands Institute of Military History - - http://www.defensie.nl/organisatie/cdc/inhoud/eenheden/nimh - http://nimh-beeldbank.defensie.nl/images/stories/intro/Rights_statement_NIMH_Flickr_the_Commons.pdf - http://flickr.com/photos/nimhimages/ - - Vestfoldmuseene | Vestfold Museums @@ -226,7 +226,7 @@ - CDHS + Cloyne & District Historical Society www.cloynepioneermuseum.ca http://pioneer.mazinaw.on.ca/flickr_statement.php @@ -266,15 +266,15 @@ - SALTOnline + SALT Research http://saltonline.org/en/anasayfa - http://saltonline.org/en/#!/en/798/right-statement/ + https://archives.saltresearch.org/salt/info_rights.jsp http://flickr.com/photos/saltonline/ - Tasmanian Archive and Heritage Office Commons + Tasmanian Archives and State Library (Commons) http://www.linc.tas.gov.au/tasmaniasheritage http://www.linc.tas.gov.au/tasmaniasheritage/browse/pictorial/flickr-commons @@ -393,19 +393,11 @@ http://flickr.com/photos/slsarkiva/ - - National Library of Sweden - - http://www.kb.se/ - http://www.kb.se/english/services/reprographic/Flickr-Commons/ - http://flickr.com/photos/95520404@N07/ - - National Archives of Estonia http://www.ra.ee/ - http://rahvusarhiiv.ra.ee/en/flickr-commons/ + http://www.ra.ee/en/flickr-commons/ http://flickr.com/photos/national_archives_of_estonia/ @@ -417,14 +409,6 @@ http://flickr.com/photos/nai_collection/ - - Mississippi Department of Archives and History - - http://mdah.state.ms.us - http://mdah.state.ms.us/arrec/copyright.php - http://flickr.com/photos/mississippi-dept-of-archives-and-history/ - - Dundas Museum and Archives @@ -602,7 +586,7 @@ - Fylkesarkivet i Sogn og Fjordane + Fylkesarkivet i Vestland http://fylkesarkiv.no http://www.fylkesarkiv.no/en/side/flickr-commons @@ -669,7 +653,7 @@ The National Archives UK http://www.nationalarchives.gov.uk/ - http://www.nationalarchives.gov.uk/legal/copyright.htm#flickr + http://www.nationalarchives.gov.uk/legal/copyright/creative-commons-and-photo-sharing/ http://flickr.com/photos/nationalarchives/ diff --git a/src/test/resources/payloads/get/flickr.favorites.getList.xml b/src/test/resources/payloads/get/flickr.favorites.getList.xml index 66d03ec2..6a84b572 100644 --- a/src/test/resources/payloads/get/flickr.favorites.getList.xml +++ b/src/test/resources/payloads/get/flickr.favorites.getList.xml @@ -1,7 +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 index bffb7f61..e132b59d 100644 --- a/src/test/resources/payloads/get/flickr.groups.getInfo.xml +++ b/src/test/resources/payloads/get/flickr.groups.getInfo.xml @@ -1,6 +1,6 @@ - + FlickrCentral <b>Welcome to FlickrCentral!</b> Just like Grand Central but without the oyster bar, the trains, New York city... @@ -29,13 +29,15 @@ Please do not create threads to introduce yourself, or to ask for views, comment 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. - 278047 - 10049968 - 12621 + 313872 + 8808003 + 12810 3 - Submission rate to the FlickrCentral pool has been restored to its former 1 per day limit. The total number of pictures in the pool is controlled by a bot, and older images (but not the oldest) are removed to make room for newer stuff. - - + 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 index c5ee6dcd..60005481 100644 --- a/src/test/resources/payloads/get/flickr.groups.members.getList.xml +++ b/src/test/resources/payloads/get/flickr.groups.members.getList.xml @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index a825ea1c..347eee51 100644 --- a/src/test/resources/payloads/get/flickr.groups.pools.getGroups.xml +++ b/src/test/resources/payloads/get/flickr.groups.pools.getGroups.xml @@ -3,6 +3,6 @@ - + \ 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 index 43bd4af8..ef753482 100644 --- a/src/test/resources/payloads/get/flickr.groups.search.xml +++ b/src/test/resources/payloads/get/flickr.groups.search.xml @@ -1,105 +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 index f2f27e59..19ff1469 100644 --- a/src/test/resources/payloads/get/flickr.interestingness.getList.xml +++ b/src/test/resources/payloads/get/flickr.interestingness.getList.xml @@ -1,12 +1,106 @@ - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index b331f5ac..1593258e 100644 --- a/src/test/resources/payloads/get/flickr.machinetags.getPredicates.xml +++ b/src/test/resources/payloads/get/flickr.machinetags.getPredicates.xml @@ -1,14 +1,15 @@ - - age - all - flickrprivacy - flickrsafesearch + + age + all + flickrprivacy + flickrsafesearch groups - location - projects + location + privacy + projects realestate - synonyms + 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 index 7c5fb029..d5b6c52a 100644 --- a/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml +++ b/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml @@ -1,505 +1,505 @@ - - 12449 - 8040 - 12425 - 12315 - 12488 - 12487 - 12483 - 12486 - 10555 - 12485 - 12484 - 12435 - 12316 - 12481 - 12480 - 12479 - 11313 - 12478 - 12477 - 12476 - 12475 - 12473 - 12472 - 12470 - 12469 - 12434 - 12468 - 12467 - 12466 - 11432 - 12263 - 12465 - 12462 - 12464 - 12072 - 10119 - 10875 - 12461 - 12457 - 10291 - 12460 - 11360 - 12459 - 12450 - 11087 - 10312 - 12262 - 12456 - 12455 - 12454 - 9504 - 12453 - 10716 - 12452 - 11982 - 12451 - 12447 - 10862 - 10840 - 6986 - 10290 - 12403 - 6936 - 10266 - 12445 - 10035 - 10476 - 12443 - 12326 - 12314 - 7309 - 8209 - 10974 - 11394 - 12442 - 6282 - 12441 - 12317 - 12440 - 12439 - 12438 - 7329 - 12327 - 12430 - 12436 - 12429 - 7920 - 12432 - 9089 - 12431 - 6283 - 6354 - 6277 - 9128 - 6472 - 12426 - 12428 - 12424 - 5773 - 12207 - 6279 - 6890 - 10719 - 11315 - 10809 - 10688 - 11634 - 12417 - 12367 - 12423 - 12422 - 11192 - 12420 - 6965 - 12419 - 7565 - 12418 - 9898 - 6284 - 12416 - 12413 - 12415 - 12412 - 12397 - 12411 - 12410 - 12392 - 11461 - 11719 - 10363 - 12409 - 9142 - 12401 - 12408 - 12345 - 12319 - 12407 - 8031 - 12406 - 12405 - 8324 - 12277 - 12404 - 11673 - 12402 - 8174 - 12372 - 12400 - 12360 - 12399 - 12398 - 12396 - 12395 - 12394 - 12393 - 12376 - 12391 - 12390 - 10055 - 12389 - 12388 - 12387 - 12384 - 12383 - 12382 - 12381 - 12380 - 12334 - 9503 - 12379 - 12378 - 12377 - 12226 - 12375 - 12374 - 12371 - 12370 - 12369 - 12368 - 12363 - 12366 - 12365 - 12364 - 11513 - 12362 - 12361 - 12358 - 12359 - 12357 - 12356 - 12355 - 12354 - 12353 - 12352 - 12197 - 12331 - 12117 - 12349 - 12348 - 12346 - 12344 - 12343 - 12308 - 12309 - 12310 - 12342 - 12341 - 12339 - 12338 - 12321 - 12337 - 12320 - 10714 - 12335 - 12328 - 12325 - 12324 - 12323 - 12322 - 12071 - 12318 - 12313 - 12312 - 12311 - 12306 - 12307 - 11638 - 9075 - 8686 - 12305 - 12304 - 12303 - 12302 - 12300 - 12008 - 12299 - 12298 - 12297 - 12295 - 12294 - 12009 - 12293 - 12274 - 12292 - 12291 - 12214 - 12235 - 12290 - 12289 - 9930 - 12288 - 12287 - 12285 - 12196 - 12282 - 12284 - 12283 - 12280 - 12281 - 12278 - 12276 - 12275 - 11659 - 12258 - 12273 - 12272 - 12271 - 10681 - 12270 - 12269 - 12268 - 12267 - 12266 - 12265 - 12264 - 12176 - 12261 - 12260 - 12259 - 12215 - 12255 - 12253 - 12252 - 12250 - 12247 - 12246 - 12243 - 11692 - 12191 - 12223 - 12192 - 12242 - 12241 - 8570 - 11606 - 12240 - 12239 - 10503 - 12019 - 11570 - 12238 - 12218 - 12237 - 12171 - 11717 - 12236 - 12234 - 9499 - 12233 - 12231 - 11833 - 12230 - 12211 - 12216 - 12229 - 12227 - 12225 - 12224 - 12222 - 12198 - 12219 - 12217 - 12213 - 12212 - 12210 - 12204 - 12209 - 12208 - 11628 - 12206 - 12205 - 12203 - 11469 - 12202 - 12200 - 12199 - 12186 - 12195 - 12194 - 12193 - 12190 - 12189 - 12188 - 12187 - 12185 - 12184 - 12183 - 12182 - 12181 - 12180 - 12178 - 12177 - 11840 - 12175 - 12172 - 12174 - 12173 - 11725 - 12170 - 12168 - 12167 - 12166 - 12165 - 6362 - 12164 - 12163 - 12079 - 12160 - 12162 - 12161 - 12159 - 12158 - 12157 - 12156 - 12151 - 12155 - 12154 - 12153 - 12150 - 12149 - 12148 - 12145 - 9302 - 12138 - 12144 - 12143 - 12131 - 12125 - 12142 - 11528 - 11892 - 12141 - 12140 - 12139 - 12137 - 11724 - 11901 - 12136 - 12135 - 12134 - 12133 - 12132 - 12129 - 12115 - 12126 - 12124 - 12123 - 8005 - 11746 - 12112 - 11958 - 11970 - 11991 - 12122 - 11523 - 12121 - 12120 - 12119 - 12116 - 12114 - 12067 - 12109 - 12113 - 12108 - 12107 - 12106 - 12105 - 12104 - 12086 - 12103 - 12102 - 12101 - 12100 - 12099 - 12098 - 12097 - 12096 - 12091 - 12087 - 11758 - 12095 - 12094 - 12092 - 12090 - 11603 - 12053 - 12078 - 12089 - 12084 - 12082 - 12083 - 11660 - 11765 - 11976 - 12081 - 12080 - 12077 - 9853 - 12076 - 12075 - 12073 - 12069 - 12068 - 12066 - 12065 - 12064 - 12063 - 12062 - 12061 - 12060 - 12059 - 12058 - 12054 - 12057 - 12056 - 12055 - 12035 - 12052 - 12051 - 12050 - 11379 - 12048 - 12047 - 12046 - 12045 - 12044 - 12043 - 12042 - 12041 - 12040 - 12039 - 12038 - 12037 - 12036 - 11932 - 11748 - 12034 - 12033 - 12032 - 12031 - + + 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.people.findByUsername.xml b/src/test/resources/payloads/get/flickr.people.findByUsername.xml index eabb28e9..012e50ef 100644 --- a/src/test/resources/payloads/get/flickr.people.findByUsername.xml +++ b/src/test/resources/payloads/get/flickr.people.findByUsername.xml @@ -1,6 +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 index d3e72d49..a70c9032 100644 --- a/src/test/resources/payloads/get/flickr.people.getGroups.xml +++ b/src/test/resources/payloads/get/flickr.people.getGroups.xml @@ -1,7 +1,7 @@ - + diff --git a/src/test/resources/payloads/get/flickr.people.getInfo.xml b/src/test/resources/payloads/get/flickr.people.getInfo.xml index 3e240a66..25a1eff4 100644 --- a/src/test/resources/payloads/get/flickr.people.getInfo.xml +++ b/src/test/resources/payloads/get/flickr.people.getInfo.xml @@ -1,6 +1,6 @@ - + boncey_test Darren Greaves a35471fa063d334a497c1ad805a0bbf4d1f77641 @@ -13,8 +13,8 @@ 2009-12-07 14:28:39 1260224919 - 227 - 94 + 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 index 16f429fd..1ebeccec 100644 --- a/src/test/resources/payloads/get/flickr.people.getPhotos.xml +++ b/src/test/resources/payloads/get/flickr.people.getPhotos.xml @@ -1,20 +1,20 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ 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 index 453bc6c4..1bba3577 100644 --- a/src/test/resources/payloads/get/flickr.people.getPublicGroups.xml +++ b/src/test/resources/payloads/get/flickr.people.getPublicGroups.xml @@ -1,7 +1,7 @@ - + \ 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 index 079822b0..d01bda7f 100644 --- a/src/test/resources/payloads/get/flickr.people.getUploadStatus.xml +++ b/src/test/resources/payloads/get/flickr.people.getUploadStatus.xml @@ -1,10 +1,10 @@ - + boncey_test - + diff --git a/src/test/resources/payloads/get/flickr.photos.comments.getList.xml b/src/test/resources/payloads/get/flickr.photos.comments.getList.xml index 6c3e3b48..61a630f6 100644 --- a/src/test/resources/payloads/get/flickr.photos.comments.getList.xml +++ b/src/test/resources/payloads/get/flickr.photos.comments.getList.xml @@ -1,8 +1,6 @@ - - green too - This is an edited comment for the java flickr api - This is a test for the flickr java api + + 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 index 5f7af2c2..7359438b 100644 --- a/src/test/resources/payloads/get/flickr.photos.geo.getLocation.xml +++ b/src/test/resources/payloads/get/flickr.photos.geo.getLocation.xml @@ -1,11 +1,11 @@ - - Al-Mith'ab - Hota Bani Tamim - Riyadh - Saudi Arabia + + Daḩl Hīt + + Ar Riyāḑ + Saudi Arabia \ 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 index 875e7d44..02641278 100644 --- a/src/test/resources/payloads/get/flickr.photos.getContactsPhotos.xml +++ b/src/test/resources/payloads/get/flickr.photos.getContactsPhotos.xml @@ -1,10 +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 index 315bedb1..ac297d56 100644 --- a/src/test/resources/payloads/get/flickr.photos.getContactsPublicPhotos.xml +++ b/src/test/resources/payloads/get/flickr.photos.getContactsPublicPhotos.xml @@ -1,10 +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 index a95fe45f..9d2543cd 100644 --- a/src/test/resources/payloads/get/flickr.photos.getContext.xml +++ b/src/test/resources/payloads/get/flickr.photos.getContext.xml @@ -1,6 +1,6 @@ -227 - - +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 index f1de0733..8a27e575 100644 --- a/src/test/resources/payloads/get/flickr.photos.getCounts.xml +++ b/src/test/resources/payloads/get/flickr.photos.getCounts.xml @@ -1,6 +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 index f374d149..d57fff62 100644 --- a/src/test/resources/payloads/get/flickr.photos.getExif.xml +++ b/src/test/resources/payloads/get/flickr.photos.getExif.xml @@ -2,7 +2,7 @@ - 1.01 + 1.02 inches @@ -15,23 +15,8 @@ 240 240 dpi - - inches - - - inches - - - (Binary data 9083 bytes, use -b option to extract) - - - 6ec563ec53e8134661386ad9612f591b - - - 2 - - - Darren Greaves + + JPEG (old-style) Canon @@ -48,6 +33,9 @@ Darren Greaves + + Centered + 1/60 0.017 sec (1/60) @@ -71,6 +59,9 @@ 2011:04:02 18:55:46 + + Y, Cb, Cr, - + 0 0 EV @@ -91,6 +82,12 @@ 212 + + 0100 + + + Uncalibrated + 3959.322034 3959.32203389831 dpi @@ -123,17 +120,14 @@ Hard - - JPEG (old-style) - - - inches + + 2 - - 9984 + + Darren Greaves - - 9083 + + 6ec563ec53e8134661386ad9612f591b Image::ExifTool 8.15 @@ -153,12 +147,18 @@ 65535 - + Darren Greaves - + + 930407553 + + Darren Greaves + + 28mm f/? + 6EC563EC53E8134661386AD9612F591B diff --git a/src/test/resources/payloads/get/flickr.photos.getInfo.xml b/src/test/resources/payloads/get/flickr.photos.getInfo.xml index 87794077..0201e1d8 100644 --- a/src/test/resources/payloads/get/flickr.photos.getInfo.xml +++ b/src/test/resources/payloads/get/flickr.photos.getInfo.xml @@ -1,11 +1,11 @@ - + Robot Description - + @@ -18,11 +18,11 @@ grn grngrn - - Al-Mith'ab - Hota Bani Tamim - Riyadh - Saudi Arabia + + Daḩl Hīt + + Ar Riyāḑ + Saudi Arabia diff --git a/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml b/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml index 919058bc..ea5ee8f4 100644 --- a/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml +++ b/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml @@ -1,105 +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 index 7e4972fc..77ece85c 100644 --- a/src/test/resources/payloads/get/flickr.photos.getPerms.xml +++ b/src/test/resources/payloads/get/flickr.photos.getPerms.xml @@ -1,4 +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 index 5da8b401..ebaf0206 100644 --- a/src/test/resources/payloads/get/flickr.photos.getRecent.xml +++ b/src/test/resources/payloads/get/flickr.photos.getRecent.xml @@ -1,105 +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 index a292b4c5..d4f57f07 100644 --- a/src/test/resources/payloads/get/flickr.photos.getSizes.xml +++ b/src/test/resources/payloads/get/flickr.photos.getSizes.xml @@ -1,14 +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 index 300eaee9..a423f366 100644 --- a/src/test/resources/payloads/get/flickr.photos.getUntagged.xml +++ b/src/test/resources/payloads/get/flickr.photos.getUntagged.xml @@ -1,105 +1,100 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index 8b93d2b3..32c7802f 100644 --- a/src/test/resources/payloads/get/flickr.photos.search.xml +++ b/src/test/resources/payloads/get/flickr.photos.search.xml @@ -1,38 +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 index dd8d1063..8839c484 100644 --- a/src/test/resources/payloads/get/flickr.photosets.getContext.xml +++ b/src/test/resources/payloads/get/flickr.photosets.getContext.xml @@ -1,6 +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 index 1e4187c4..d5070a1d 100644 --- a/src/test/resources/payloads/get/flickr.photosets.getInfo.xml +++ b/src/test/resources/payloads/get/flickr.photosets.getInfo.xml @@ -1,6 +1,6 @@ - + PhotosetsInterfaceTest JUnit test, should be deleted diff --git a/src/test/resources/payloads/get/flickr.photosets.getList.xml b/src/test/resources/payloads/get/flickr.photosets.getList.xml index f44dfef2..fb64a172 100644 --- a/src/test/resources/payloads/get/flickr.photosets.getList.xml +++ b/src/test/resources/payloads/get/flickr.photosets.getList.xml @@ -1,27 +1,22 @@ - - + + PhotosetsInterfaceTest JUnit test, should be deleted - + test - + - - PhotosetsInterfaceTest - JUnit test, should be deleted - - - + test A test photoset - + - + Places diff --git a/src/test/resources/payloads/get/flickr.places.getInfo.xml b/src/test/resources/payloads/get/flickr.places.getInfo.xml index fa6fb5e8..191e44d7 100644 --- a/src/test/resources/payloads/get/flickr.places.getInfo.xml +++ b/src/test/resources/payloads/get/flickr.places.getInfo.xml @@ -1,16 +1,12 @@ - - 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 + http://farm6.static.flickr.com/5201/shapefiles/2487956_20101217_bd77c29997.tar.gz diff --git a/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml b/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml index 34f142fb..a5b9c1a9 100644 --- a/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml +++ b/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml @@ -1,6 +1,4 @@ - - 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 index 049f2034..179da487 100644 --- a/src/test/resources/payloads/get/flickr.places.tagsForPlace.xml +++ b/src/test/resources/payloads/get/flickr.places.tagsForPlace.xml @@ -1,105 +1,105 @@ - unitedstates - usa - us - nikon - urban - night - missiondistrict - travel - northerncalifornia - water - unitedstatesofamerica - ocean - nature - mission - view - united - treasureisland - oceanbeach - traffic - lights - lightstream - motion - westcoast - longexposure - light - trees - tourist - window - tourism - lens - macro - moon - love - marinadistrict - mobilephone - leica - north - seagull - musician - town - wedding - luckysnapshot - mediumformat - neighborhood - union - lines - twin - long - underground - toy - treasure - powell - warblers - twilight - manual - life - mechanical - lego - unidos - ngc - marriage - medium - metro - wide - travelphotography - whitecrownedsparrow - mamiyac330s - unis - lexingtonstreet - negative - velvia - westin - urbanscene - legography - turtle - toys - nopeople - minifigures - originalphotography - traveldestinations - legographer - toyphotography - nrhp - traintracks - nashvillewarbler - townhall - oreothlypisruficapilla - orangecrownedwarbler - oreothlypiscelata - onasill - lonelyplanet - minifigure - minifig - rathaus - olympic - macroflowerlovers - macromonday - macrolen - municipio - mniotiltavaria + 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.tags.getClusterPhotos.xml b/src/test/resources/payloads/get/flickr.tags.getClusterPhotos.xml index 023aad45..999af65f 100644 --- a/src/test/resources/payloads/get/flickr.tags.getClusterPhotos.xml +++ b/src/test/resources/payloads/get/flickr.tags.getClusterPhotos.xml @@ -1,27 +1,26 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + \ 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 index 1e22c5ab..a3dd9e29 100644 --- a/src/test/resources/payloads/get/flickr.tags.getHotList.xml +++ b/src/test/resources/payloads/get/flickr.tags.getHotList.xml @@ -1,25 +1,147 @@ - - feb23 - whitenight - whitenightmelbourne - farligt - avstand - facedowntuesday - encuentros - whenigrowup - dp3merrill - whitenightmelb - fdt - northplatterealestate - fencefriday - benchmonday - genomskinlig - myvalentine - tva - dp3 - happyvalentines - leicammonochrom + + + + +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.getListUser.xml b/src/test/resources/payloads/get/flickr.tags.getListUser.xml index 2197022b..b893f029 100644 --- a/src/test/resources/payloads/get/flickr.tags.getListUser.xml +++ b/src/test/resources/payloads/get/flickr.tags.getListUser.xml @@ -37,53 +37,11 @@ film:iso=800 film:name=ilfordhp5400 film:name=kodakprofessionalortho655625 - filmdev:recipe=1005 - filmdev:recipe=1094 - filmdev:recipe=1112 - filmdev:recipe=1336 - filmdev:recipe=1358 - filmdev:recipe=1389 - filmdev:recipe=1405 - filmdev:recipe=1413 - filmdev:recipe=1421 - filmdev:recipe=1429 - filmdev:recipe=1611 - filmdev:recipe=1633 - filmdev:recipe=1655 - filmdev:recipe=1688 - filmdev:recipe=1699 - filmdev:recipe=1710 - filmdev:recipe=1721 - filmdev:recipe=1732 - filmdev:recipe=1754 - filmdev:recipe=1776 - filmdev:recipe=1787 - filmdev:recipe=1798 - filmdev:recipe=1809 - filmdev:recipe=1831 - filmdev:recipe=1842 - filmdev:recipe=1853 - filmdev:recipe=1864 - filmdev:recipe=1866 - filmdev:recipe=1886 - filmdev:recipe=2299 filmdev:recipe=2307 - filmdev:recipe=2315 filmdev:recipe=2347 filmdev:recipe=2355 - filmdev:recipe=2523 - filmdev:recipe=2539 - filmdev:recipe=3889 - filmdev:recipe=3911 - filmdev:recipe=4127 - filmdev:recipe=4149 filmdev:recipe=6417 filmdev:recipe=9083 - filmdev:recipe=965 - filmdev:recipe=973 - filmdev:recipe=981 - filmdev:recipe=989 - filmdev:recipe=997 flickr fomafomauniversaldeveloper for diff --git a/src/test/resources/payloads/get/flickr.tags.getListUserPopular.xml b/src/test/resources/payloads/get/flickr.tags.getListUserPopular.xml index a893f05f..c6ddf2f7 100644 --- a/src/test/resources/payloads/get/flickr.tags.getListUserPopular.xml +++ b/src/test/resources/payloads/get/flickr.tags.getListUserPopular.xml @@ -2,16 +2,16 @@ - developer:brand=foma - developer:name=fomafomauniversaldeveloper - film:brand=kodak - film:iso=25 - film:name=kodakprofessionalortho655625 - filmdev:recipe=6417 - fomafomauniversaldeveloper + 30 + film + for + found green - kodakprofessionalortho6556 + 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 index 22afa007..cb903ab6 100644 --- a/src/test/resources/payloads/get/flickr.tags.getListUserRaw.xml +++ b/src/test/resources/payloads/get/flickr.tags.getListUserRaw.xml @@ -107,146 +107,122 @@ film:name=Kodak Professional Ortho 6556 25 - - filmdev:recipe=1005 + + filmdev:recipe=1028 - - filmdev:recipe=1094 + + filmdev:recipe=10840 - - filmdev:recipe=1112 + + filmdev:recipe=1171 - - filmdev:recipe=1336 + + filmdev:recipe=1177 - - filmdev:recipe=1358 + + filmdev:recipe=1237 - - filmdev:recipe=1389 + + filmdev:recipe=1362 - - filmdev:recipe=1405 + + filmdev:recipe=14 - - filmdev:recipe=1413 + + filmdev:recipe=1545 - - filmdev:recipe=1421 + + filmdev:recipe=157 - - filmdev:recipe=1429 + + filmdev:recipe=16765 - - filmdev:recipe=1611 + + filmdev:recipe=1914 - - filmdev:recipe=1633 + + filmdev:recipe=2035 - - filmdev:recipe=1655 + + filmdev:recipe=212 - - filmdev:recipe=1688 + + filmdev:recipe=2167 - - filmdev:recipe=1699 + + filmdev:recipe=2266 - - filmdev:recipe=1710 - - - filmdev:recipe=1721 - - - filmdev:recipe=1732 - - - filmdev:recipe=1754 - - - filmdev:recipe=1776 - - - filmdev:recipe=1787 - - - filmdev:recipe=1798 - - - filmdev:recipe=1809 - - - filmdev:recipe=1831 + + filmdev:recipe=2307 - - filmdev:recipe=1842 + + filmdev:recipe=234 - - filmdev:recipe=1853 + + filmdev:recipe=2347 - - filmdev:recipe=1864 + + filmdev:recipe=2355 - - filmdev:recipe=1866 + + filmdev:recipe=2396 - - filmdev:recipe=1886 + + filmdev:recipe=2442 - - filmdev:recipe=2299 + + filmdev:recipe=2552 - - filmdev:recipe=2307 + + filmdev:recipe=256 - - filmdev:recipe=2315 + + filmdev:recipe=25840 - - filmdev:recipe=2347 + + filmdev:recipe=2816 - - filmdev:recipe=2355 + + filmdev:recipe=283 - - filmdev:recipe=2523 + + filmdev:recipe=335 - - filmdev:recipe=2539 + + filmdev:recipe=5035 - - filmdev:recipe=3889 + + filmdev:recipe=522 - - filmdev:recipe=3911 + + filmdev:recipe=608 - - filmdev:recipe=4127 + + filmdev:recipe=6091 - - filmdev:recipe=4149 + + filmdev:recipe=6390 filmdev:recipe=6417 - - filmdev:recipe=9083 + + filmdev:recipe=7100 - - filmdev:recipe=965 + + filmdev:recipe=720 - - filmdev:recipe=973 + + filmdev:recipe=7426 - - filmdev:recipe=981 + + filmdev:recipe=80 - - filmdev:recipe=989 + + filmdev:recipe=9083 - - filmdev:recipe=997 + + filmdev:recipe=91 Flickr @@ -365,6 +341,9 @@ systems + + test + that diff --git a/src/test/resources/payloads/get/flickr.urls.lookupGallery.xml b/src/test/resources/payloads/get/flickr.urls.lookupGallery.xml index 374ebaab..23ecc72b 100644 --- a/src/test/resources/payloads/get/flickr.urls.lookupGallery.xml +++ b/src/test/resources/payloads/get/flickr.urls.lookupGallery.xml @@ -1,10 +1,10 @@ - + test test gallery for Flickr4Java - + \ 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 index d0457061..887fec82 100644 --- a/src/test/resources/payloads/post/flickr.favorites.getContext.xml +++ b/src/test/resources/payloads/post/flickr.favorites.getContext.xml @@ -1,6 +1,6 @@ -14 - - +12 + + \ 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 index 5a1bd209..e44c4299 100644 --- a/src/test/resources/payloads/post/flickr.galleries.getInfo.xml +++ b/src/test/resources/payloads/post/flickr.galleries.getInfo.xml @@ -1,12 +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 index bbb978c7..017535c0 100644 --- a/src/test/resources/payloads/post/flickr.galleries.getList.xml +++ b/src/test/resources/payloads/post/flickr.galleries.getList.xml @@ -1,7 +1,7 @@ - + test test gallery for Flickr4Java diff --git a/src/test/resources/payloads/post/flickr.photos.comments.addComment.xml b/src/test/resources/payloads/post/flickr.photos.comments.addComment.xml index c0da42d8..d81e00a8 100644 --- a/src/test/resources/payloads/post/flickr.photos.comments.addComment.xml +++ b/src/test/resources/payloads/post/flickr.photos.comments.addComment.xml @@ -1,6 +1,6 @@ - -This is a test for the flickr java api + +This is a test for the flickr java api \ 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 index 92dde257..668b8e82 100644 --- a/src/test/resources/payloads/post/flickr.photosets.create.xml +++ b/src/test/resources/payloads/post/flickr.photosets.create.xml @@ -1,4 +1,4 @@ - + \ 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 index 4185a939..7eb11790 100644 --- a/src/test/resources/payloads/post/flickr.test.echo.xml +++ b/src/test/resources/payloads/post/flickr.test.echo.xml @@ -3,14 +3,14 @@ flickr.test.echo test 20f26bfcb5a2b46a2c11fd1210d3b420 -1356028145 -CDKIJMigpfmKk6rcHyBxVqwEtV8= +2173728070 +s9J6iZTiT88Z89ezlHCu7eIKan4= 72157628704501859-025864ab0471c9bc 20f26bfcb5a2b46a2c11fd1210d3b420 -1530378332 +1620055008 HMAC-SHA1 1.0 1 -CDKIJMigpfmKk6rcHyBxVqwEtV8= +s9J6iZTiT88Z89ezlHCu7eIKan4= 72157628704501859-025864ab0471c9bc \ No newline at end of file From 626f575ad2a13be3ff35ff1893f5019f3acfd282 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 May 2021 16:57:45 +0100 Subject: [PATCH 209/239] Set Photo Size label as String --- .../flickr4java/flickr/photos/PhotosInterface.java | 4 ++-- src/main/java/com/flickr4java/flickr/photos/Size.java | 8 ++++++++ .../flickr4java/flickr/test/PhotosInterfaceTest.java | 11 +++++------ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java b/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java index 36e5c90e..8d214422 100644 --- a/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java @@ -730,9 +730,9 @@ public Collection getSizes(String photoId) 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); diff --git a/src/main/java/com/flickr4java/flickr/photos/Size.java b/src/main/java/com/flickr4java/flickr/photos/Size.java index 38af87e1..0d7a95f5 100644 --- a/src/main/java/com/flickr4java/flickr/photos/Size.java +++ b/src/main/java/com/flickr4java/flickr/photos/Size.java @@ -178,6 +178,8 @@ public class Size { private int label; + private String labelName; + private int width; private int height; @@ -207,11 +209,16 @@ 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; } + 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"); @@ -228,6 +235,7 @@ public void setLabel(String label) { if (ix != -1) { setLabel(ix); } + labelName = label; } /** diff --git a/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java index 5d2e1db3..50e205c8 100644 --- a/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java @@ -20,12 +20,7 @@ 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; @@ -324,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 From 8266857f38c26ec79b3a33ea1186bcfccfa571e2 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 May 2021 17:31:06 +0100 Subject: [PATCH 210/239] Prepare for release to maven central --- build.gradle | 4 ++-- pom.xml | 12 +++--------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index 068af4b4..aceab770 100644 --- a/build.gradle +++ b/build.gradle @@ -7,8 +7,8 @@ apply plugin: 'application' version = '3.0.4' group = 'com.flickr4java.flickr' -sourceCompatibility = '1.5' -targetCompatibility = '1.5' +sourceCompatibility = '1.8' +targetCompatibility = '1.8' repositories { mavenCentral() diff --git a/pom.xml b/pom.xml index ce612781..341d57c7 100644 --- a/pom.xml +++ b/pom.xml @@ -10,12 +10,6 @@ Java API For Flickr. Fork of FlickrJ. https://github.com/boncey/Flickr4Java - - org.sonatype.oss - oss-parent - 7 - - boncey @@ -73,10 +67,10 @@ maven-release-plugin 2.5.3 - forked-path + true false - - ${arguments} -Psonatype-oss-release + release + deploy From 3f990f9fd9bcfd48b2a5fe8356de34bc2a33de25 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 May 2021 17:37:39 +0100 Subject: [PATCH 211/239] [maven-release-plugin] prepare release flickr4java-3.0.5 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 341d57c7..692f5815 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.5-SNAPSHOT + 3.0.5 jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -148,7 +148,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - HEAD + flickr4java-3.0.5 From 35afcbea990743661b798e93e91c03c20b33546a Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 May 2021 17:37:45 +0100 Subject: [PATCH 212/239] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 692f5815..5da40c31 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.5 + 3.0.6-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -148,7 +148,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - flickr4java-3.0.5 + HEAD From 05a75ef960685716fb166183653089681c47486a Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 May 2021 17:47:47 +0100 Subject: [PATCH 213/239] Add licence details --- pom.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pom.xml b/pom.xml index 5da40c31..e8a89727 100644 --- a/pom.xml +++ b/pom.xml @@ -27,6 +27,14 @@ + + + BSD 2-Clause License + https://github.com/boncey/Flickr4Java/blob/master/LICENSE.txt + repo + + + 1.8 4.13.1 From 683b408b19a5cb7b7a059912aecba6dfd67c7ca4 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 May 2021 17:51:45 +0100 Subject: [PATCH 214/239] Fix artifact signing when doing a release --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index e8a89727..8b7b7ad5 100644 --- a/pom.xml +++ b/pom.xml @@ -79,6 +79,7 @@ false release deploy + ${arguments} -Prelease-sign-artifacts From 652d33c169bfb683e3e259d431c0121a9893cdc6 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 May 2021 17:57:02 +0100 Subject: [PATCH 215/239] [maven-release-plugin] prepare release flickr4java-3.0.6 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 8b7b7ad5..964c8bc0 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.6-SNAPSHOT + 3.0.6 jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -157,7 +157,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - HEAD + flickr4java-3.0.6 From 9e0ea4668e2a3ff11d881452962f4ceb2d29c036 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 May 2021 17:57:10 +0100 Subject: [PATCH 216/239] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 964c8bc0..17edf39f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.6 + 3.0.7-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -157,7 +157,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - flickr4java-3.0.6 + HEAD From 4e74e7151a2a69e48bc947dfafc672acac0a1d19 Mon Sep 17 00:00:00 2001 From: boncey Date: Mon, 3 May 2021 18:03:15 +0100 Subject: [PATCH 217/239] Update version numbers for 3.0.6 release --- README.md | 4 ++-- build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 028f0253..8b8016d7 100644 --- a/README.md +++ b/README.md @@ -37,14 +37,14 @@ An API key is required to use this API. You can [request one on Flickr](http:// ### Gradle - compile 'com.flickr4java:flickr4java:3.0.4' + compile 'com.flickr4java:flickr4java:3.0.6' ### Maven com.flickr4java flickr4java - 3.0.4 + 3.0.6 Flickr4Java is available on Maven Central so the above settings should be all you need. diff --git a/build.gradle b/build.gradle index aceab770..1303b5f3 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '3.0.4' +version = '3.0.6' group = 'com.flickr4java.flickr' sourceCompatibility = '1.8' From fe1a6c5919a8450582dc8468a1e6bad60dd57a86 Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 30 Apr 2023 16:59:09 +0100 Subject: [PATCH 218/239] Allow User-Agent to be provided --- README.md | 12 +++++++++++ .../java/com/flickr4java/flickr/REST.java | 21 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/README.md b/README.md index 8b8016d7..a53cdb06 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,18 @@ For example, to send a test ping to the Flickr service: See `/src/examples/java` for more. +#### Setting User-Agent + +Since version 3.0.7 Flickr4Java passes the following User-Agent header in its requests + + Flickr4Java/3.x + +If you want to override that and set your own you can pass in your own value. Note that no validation is performed on the provided string. + + REST transport = new REST(); + transport.setUserAgent("MyUserAgent/0.1"); + Flickr f = new Flickr(apiKey, sharedSecret, transport); + ### Requirements This API has been tested and built with JDK 1.8. diff --git a/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java index 03241713..a16198c3 100644 --- a/src/main/java/com/flickr4java/flickr/REST.java +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -59,6 +59,8 @@ public class REST extends Transport { private String proxyPassword = ""; + private String userAgent = "Flickr4Java/3.x"; + private Integer connectTimeoutMs; private Integer readTimeoutMs; @@ -125,6 +127,16 @@ public void setProxy(String proxyHost, int proxyPort, String username, String pa proxyPassword = password; } + /** + * Override the default User-Agent header passed in requests to the Flickr API. + * @param userAgent + * @return + */ + public REST setUserAgent(String userAgent) { + this.userAgent = userAgent; + return this; + } + /** * Invoke an HTTP GET request on a remote host. You must close the InputStream after you are done with. * @@ -144,6 +156,8 @@ public com.flickr4java.flickr.Response get(String path, Map para request.addHeader("Proxy-Authorization", "Basic " + getProxyCredentials()); } + request.addHeader("User-Agent", userAgent); + RequestContext requestContext = RequestContext.getRequestContext(); Auth auth = requestContext.getAuth(); OAuth10aService service = OAuthUtilities.createOAuthService(apiKey, sharedSecret, connectTimeoutMs, readTimeoutMs); @@ -181,6 +195,8 @@ public com.flickr4java.flickr.Response post(String path, Map par OAuthRequest request = OAuthUtilities.buildNormalPostRequest(parameters, buildUrl(path)); + request.addHeader("User-Agent", userAgent); + OAuth10aService service = createAndSignRequest(apiKey, sharedSecret, request); try { @@ -204,6 +220,8 @@ public com.flickr4java.flickr.Response postMultiPart(String path, UploadMetaData Map uploadParameters = new HashMap<>(metaData.getUploadParameters()); OAuthRequest request = OAuthUtilities.buildMultipartRequest(uploadParameters, buildUrl(path)); + request.addHeader("User-Agent", userAgent); + OAuth10aService service = createAndSignRequest(apiKey, sharedSecret, request); // Ensure all parameters (including oauth) are added to payload so signature matches @@ -277,6 +295,9 @@ public Response getNonOAuth(String path, Map parameters) { if (proxyAuth) { conn.setRequestProperty("Proxy-Authorization", "Basic " + getProxyCredentials()); } + + conn.setRequestProperty("User-Agent", userAgent); + setTimeouts(conn); conn.connect(); From 38b56dc52b5132fa39ac621f8455a0975be55d48 Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 30 Apr 2023 17:02:45 +0100 Subject: [PATCH 219/239] [maven-release-plugin] prepare release flickr4java-3.0.7 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 17edf39f..c2bfd47b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.7-SNAPSHOT + 3.0.7 jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -157,7 +157,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - HEAD + flickr4java-3.0.7 From 1fd23e2b02ee6c6e9fdc024cfc3e1dd5c262733c Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 30 Apr 2023 17:02:48 +0100 Subject: [PATCH 220/239] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index c2bfd47b..e00b2143 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.7 + 3.0.8-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -157,7 +157,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - flickr4java-3.0.7 + HEAD From baf74716d316b642376dffbbceb1f233d406d0ad Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 30 Apr 2023 17:06:32 +0100 Subject: [PATCH 221/239] Update version numbers for a release --- README.md | 4 ++-- build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a53cdb06..47405d3f 100644 --- a/README.md +++ b/README.md @@ -49,14 +49,14 @@ An API key is required to use this API. You can [request one on Flickr](http:// ### Gradle - compile 'com.flickr4java:flickr4java:3.0.6' + compile 'com.flickr4java:flickr4java:3.0.7' ### Maven com.flickr4java flickr4java - 3.0.6 + 3.0.7 Flickr4Java is available on Maven Central so the above settings should be all you need. diff --git a/build.gradle b/build.gradle index 1303b5f3..a393ee32 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '3.0.6' +version = '3.0.7' group = 'com.flickr4java.flickr' sourceCompatibility = '1.8' From b5cb346171fe8798cb62c55fd17f3833abff1424 Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Mon, 1 May 2023 15:10:21 +0100 Subject: [PATCH 222/239] Upgrade various libraries and add dependency check Upgraded scribe-java to `8.3.3` Added owasp dependency checker --- README.md | 9 ++- config/dependencyCheckSuppression.xml | 4 + pom.xml | 77 ++++++++++++++----- .../java/com/flickr4java/flickr/REST.java | 6 +- .../groups/discuss/GroupDiscussInterface.java | 10 +-- 5 files changed, 78 insertions(+), 28 deletions(-) create mode 100644 config/dependencyCheckSuppression.xml diff --git a/README.md b/README.md index 47405d3f..8355fa95 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ An API key is required to use this API. You can [request one on Flickr](http:// #### Required libraries -- [scribejava-api (v 6.9.0 onwards)](https://github.com/scribejava/scribejava) (required for the OAuth functionality) +- [scribejava-api (v8.3.3 onwards)](https://github.com/scribejava/scribejava) (required for the OAuth functionality) - [SLF4J](https://www.slf4j.org) (runtime dependency for logging) [See here](https://www.slf4j.org/manual.html#swapping) for details on how to choose and configure an SLF4J logging library. @@ -76,3 +76,10 @@ Run tests as follows. Expect lots of failures and general flakiness as data has changed on Flickr and the tests or data need updating. +### Dependency checker + +[OWASP dependency-check](https://github.com/jeremylong/DependencyCheck) is configured in the pom.xml. + +To run a dependency check + + mvn -U clean verify -P dependency-check diff --git a/config/dependencyCheckSuppression.xml b/config/dependencyCheckSuppression.xml new file mode 100644 index 00000000..f1524955 --- /dev/null +++ b/config/dependencyCheckSuppression.xml @@ -0,0 +1,4 @@ + + + + diff --git a/pom.xml b/pom.xml index e00b2143..9286e503 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 com.flickr4java @@ -11,20 +12,20 @@ https://github.com/boncey/Flickr4Java - - boncey - Darren Greaves - - developer - - - - callmeal - Allan - - developer - - + + boncey + Darren Greaves + + developer + + + + callmeal + Allan + + developer + + @@ -37,9 +38,12 @@ 1.8 - 4.13.1 - 1.7.30 - 6.9.0 + 4.13.2 + 2.0.5 + 8.3.3 + config/dependencyCheckSuppression.xml + 8.2.1 + @@ -133,7 +137,7 @@ jar - -Xdoclint:none + -Xdoclint:none @@ -182,13 +186,21 @@ + org.apache.maven.plugins maven-javadoc-plugin + 3.2.0 + + 8 + attach-javadocs jar + + -Xdoclint:none + @@ -233,6 +245,33 @@ + + dependency-check + + false + + + + + org.owasp + dependency-check-maven + ${dependency.check.version} + + ${dependency.check.suppression.file} + true + + + + package + + check + + + + + + +
    diff --git a/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java index a16198c3..785f4318 100644 --- a/src/main/java/com/flickr4java/flickr/REST.java +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -8,6 +8,7 @@ import com.flickr4java.flickr.util.IOUtilities; import com.flickr4java.flickr.util.OAuthUtilities; import com.flickr4java.flickr.util.UrlUtilities; +import com.github.scribejava.core.httpclient.multipart.FileByteArrayBodyPartPayload; import com.github.scribejava.core.model.OAuth1AccessToken; import com.github.scribejava.core.model.OAuthRequest; import com.github.scribejava.core.model.Parameter; @@ -227,9 +228,8 @@ public com.flickr4java.flickr.Response postMultiPart(String path, UploadMetaData // 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())); + request.addBodyPartPayloadInMultipartPayload(new FileByteArrayBodyPartPayload(payload.getPayload(), "photo", metaData.getFilename())); + uploadParameters.forEach((param, uploadPayload) -> request.addBodyPartPayloadInMultipartPayload(new FileByteArrayBodyPartPayload(uploadPayload.getBytes(), param))); try { return handleResponse(request, service); diff --git a/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java b/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java index bccde79d..8ea93448 100644 --- a/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java @@ -11,13 +11,13 @@ import java.util.HashMap; import java.util.Map; +/** + * Group.Discuss Interface. + * + * @author Jonathan Willis + */ public class GroupDiscussInterface { - /** - * Group.Discuss Interface. - * - * @author Jonathan Willis - */ public static final String METHOD_TOPICS_GET_LIST = "flickr.groups.discuss.topics.getList"; public static final String METHOD_TOPICS_GET_INFO = "flickr.groups.discuss.topics.getInfo"; From 050d08bf853bbb6bc7794bb2919e6aea707789f4 Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Mon, 1 May 2023 15:17:16 +0100 Subject: [PATCH 223/239] [maven-release-plugin] prepare release flickr4java-3.0.8 --- pom.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 9286e503..5c2f29e3 100644 --- a/pom.xml +++ b/pom.xml @@ -1,11 +1,10 @@ - + 4.0.0 com.flickr4java flickr4java - 3.0.8-SNAPSHOT + 3.0.8 jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -161,7 +160,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - HEAD + flickr4java-3.0.8 From 38a6cf4d4ea0ae8f2e794d87d6db6401a60c0289 Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Mon, 1 May 2023 15:17:19 +0100 Subject: [PATCH 224/239] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 5c2f29e3..d4526b2e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.8 + 3.0.9-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -160,7 +160,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - flickr4java-3.0.8 + HEAD From e6b8b51f89c87260039485427ed0b7dbb1354eed Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Mon, 1 May 2023 15:20:31 +0100 Subject: [PATCH 225/239] Update version numbers for a release --- README.md | 4 ++-- build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8355fa95..1f94dcca 100644 --- a/README.md +++ b/README.md @@ -49,14 +49,14 @@ An API key is required to use this API. You can [request one on Flickr](http:// ### Gradle - compile 'com.flickr4java:flickr4java:3.0.7' + compile 'com.flickr4java:flickr4java:3.0.8' ### Maven com.flickr4java flickr4java - 3.0.7 + 3.0.8 Flickr4Java is available on Maven Central so the above settings should be all you need. diff --git a/build.gradle b/build.gradle index a393ee32..498c39a9 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '3.0.7' +version = '3.0.8' group = 'com.flickr4java.flickr' sourceCompatibility = '1.8' From 0b79130932f8adb3de81f478089c1283887f653d Mon Sep 17 00:00:00 2001 From: Kevin Strong Date: Wed, 21 Feb 2024 16:27:25 +0000 Subject: [PATCH 226/239] Replace deprecated boxed primiative constructors with updated replacements https://bugs.openjdk.org/browse/JDK-8254324 --- src/main/java/com/flickr4java/flickr/Parameter.java | 2 +- .../com/flickr4java/flickr/photos/Editability.java | 4 ++-- .../java/com/flickr4java/flickr/photos/GeoData.java | 6 +++--- .../com/flickr4java/flickr/photos/Permissions.java | 10 +++++----- src/main/java/com/flickr4java/flickr/photos/Size.java | 6 +++--- src/main/java/com/flickr4java/flickr/stats/Domain.java | 2 +- .../java/com/flickr4java/flickr/stats/Referrer.java | 2 +- src/main/java/com/flickr4java/flickr/tags/Tag.java | 2 +- 8 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/flickr4java/flickr/Parameter.java b/src/main/java/com/flickr4java/flickr/Parameter.java index 7d0b62d3..e292cc6e 100644 --- a/src/main/java/com/flickr4java/flickr/Parameter.java +++ b/src/main/java/com/flickr4java/flickr/Parameter.java @@ -27,7 +27,7 @@ public Parameter(String name, Object value) { public Parameter(String name, long value) { this.name = name; - this.value = new Long(value); + this.value = value; } public String getName() { diff --git a/src/main/java/com/flickr4java/flickr/photos/Editability.java b/src/main/java/com/flickr4java/flickr/photos/Editability.java index 618229df..d8c4f0d6 100644 --- a/src/main/java/com/flickr4java/flickr/photos/Editability.java +++ b/src/main/java/com/flickr4java/flickr/photos/Editability.java @@ -45,8 +45,8 @@ public boolean equals(Object obj) { @Override public int hashCode() { int hash = 1; - hash += new Boolean(comment).hashCode(); - hash += new Boolean(addmeta).hashCode(); + hash += Boolean.hashCode(comment); + hash += Boolean.hashCode(addmeta); return hash; } diff --git a/src/main/java/com/flickr4java/flickr/photos/GeoData.java b/src/main/java/com/flickr4java/flickr/photos/GeoData.java index 85133a97..d7fc0b76 100644 --- a/src/main/java/com/flickr4java/flickr/photos/GeoData.java +++ b/src/main/java/com/flickr4java/flickr/photos/GeoData.java @@ -81,9 +81,9 @@ public boolean equals(Object obj) { @Override public int hashCode() { int hash = 1; - hash += new Float(longitude).hashCode(); - hash += new Float(latitude).hashCode(); - hash += new Integer(accuracy).hashCode(); + hash += Float.hashCode(longitude); + hash += Float.hashCode(latitude); + hash += Integer.hashCode(accuracy); return hash; } } diff --git a/src/main/java/com/flickr4java/flickr/photos/Permissions.java b/src/main/java/com/flickr4java/flickr/photos/Permissions.java index 06dbe5cf..239d7e99 100644 --- a/src/main/java/com/flickr4java/flickr/photos/Permissions.java +++ b/src/main/java/com/flickr4java/flickr/photos/Permissions.java @@ -103,11 +103,11 @@ public boolean equals(Object obj) { public int hashCode() { int hash = 87; hash += id.hashCode(); - hash += new Integer(comment).hashCode(); - hash += new Integer(addmeta).hashCode(); - hash += new Boolean(publicFlag).hashCode(); - hash += new Boolean(friendFlag).hashCode(); - hash += new Boolean(familyFlag).hashCode(); + hash += Integer.hashCode(comment); + hash += Integer.hashCode(addmeta); + hash += Boolean.hashCode(publicFlag); + hash += Boolean.hashCode(friendFlag); + hash += Boolean.hashCode(familyFlag); return hash; } } diff --git a/src/main/java/com/flickr4java/flickr/photos/Size.java b/src/main/java/com/flickr4java/flickr/photos/Size.java index 0d7a95f5..5e06bcc4 100644 --- a/src/main/java/com/flickr4java/flickr/photos/Size.java +++ b/src/main/java/com/flickr4java/flickr/photos/Size.java @@ -348,9 +348,9 @@ public boolean equals(Object obj) { public int hashCode() { int hash = 1; - hash += new Integer(label).hashCode(); - hash += new Integer(width).hashCode(); - hash += new Integer(height).hashCode(); + hash += Integer.hashCode(label); + hash += Integer.hashCode(width); + hash += Integer.hashCode(height); if (source != null) { hash += source.hashCode(); } diff --git a/src/main/java/com/flickr4java/flickr/stats/Domain.java b/src/main/java/com/flickr4java/flickr/stats/Domain.java index 299f1edb..07353fe4 100644 --- a/src/main/java/com/flickr4java/flickr/stats/Domain.java +++ b/src/main/java/com/flickr4java/flickr/stats/Domain.java @@ -49,7 +49,7 @@ public void setViews(Long views) { public void setViews(String views) { try { - setViews(new Long(views)); + setViews(Long.valueOf(views)); } catch (NumberFormatException e) { // ignore and set value as null } diff --git a/src/main/java/com/flickr4java/flickr/stats/Referrer.java b/src/main/java/com/flickr4java/flickr/stats/Referrer.java index e64ac8c8..936a252d 100644 --- a/src/main/java/com/flickr4java/flickr/stats/Referrer.java +++ b/src/main/java/com/flickr4java/flickr/stats/Referrer.java @@ -49,7 +49,7 @@ public void setViews(Long views) { public void setViews(String views) { try { - setViews(new Long(views)); + setViews(Long.valueOf(views)); } catch (NumberFormatException e) { // ignore and set value as null } diff --git a/src/main/java/com/flickr4java/flickr/tags/Tag.java b/src/main/java/com/flickr4java/flickr/tags/Tag.java index 81354c33..3e01f315 100644 --- a/src/main/java/com/flickr4java/flickr/tags/Tag.java +++ b/src/main/java/com/flickr4java/flickr/tags/Tag.java @@ -90,7 +90,7 @@ public boolean equals(Object obj) { @Override public int hashCode() { int hash = 1; - hash += new Integer(count).hashCode(); + hash += Integer.hashCode(count); if (value != null) { hash += value.hashCode(); } From 876f4258ca3d09598dcf49eb6e6283227904f05f Mon Sep 17 00:00:00 2001 From: Vincent Privat Date: Sat, 6 Apr 2024 22:55:00 +0200 Subject: [PATCH 227/239] Deprecate lookupUser. New method to return a User instead of username --- .../flickr/urls/UrlsInterface.java | 31 ++++++++++++++++++- .../flickr/test/UrlsInterfaceTest.java | 4 +-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java b/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java index 80948eb5..2f0c1693 100644 --- a/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java +++ b/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java @@ -150,6 +150,18 @@ public Group lookupGroup(String url) throws FlickrException { return group; } + /** + * Lookup the username for the specified User URL. + * + * @param url + * The user profile URL + * @return The username + * @throws FlickrException if there was a problem connecting to Flickr + */ + public String lookupUsernameByURL(String url) throws FlickrException { + return lookupUserByURL(url).getUsername(); + } + /** * Lookup the username for the specified User URL. * @@ -157,8 +169,22 @@ public Group lookupGroup(String url) throws FlickrException { * The user profile URL * @return The username * @throws FlickrException if there was a problem connecting to Flickr + * @deprecated use {@link #lookupUsernameByURL(String) } */ + @Deprecated public String lookupUser(String url) throws FlickrException { + return lookupUsernameByURL(url); + } + + /** + * Lookup the user for the specified User URL. + * + * @param url + * The user profile URL + * @return The user + * @throws FlickrException if there was a problem connecting to Flickr + */ + public User lookupUserByURL(String url) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_LOOKUP_USER); @@ -171,7 +197,10 @@ public String lookupUser(String url) throws FlickrException { Element payload = response.getPayload(); Element groupnameElement = (Element) payload.getElementsByTagName("username").item(0); - return ((Text) groupnameElement.getFirstChild()).getData(); + User user = new User(); + user.setId(payload.getAttribute("id")); + user.setUsername(((Text) groupnameElement.getFirstChild()).getData()); + return user; } /** diff --git a/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java index a1ca91f7..256cf633 100644 --- a/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java @@ -56,10 +56,10 @@ public void testLookupGroup() throws FlickrException { } @Test - public void testLookupUser() throws FlickrException { + public void testLookupUsernameByURL() throws FlickrException { UrlsInterface iface = flickr.getUrlsInterface(); String username = testProperties.getUsername(); - String usernameOnFlickr = iface.lookupUser(String.format("https://www.flickr.com/people/%s/", username)); + String usernameOnFlickr = iface.lookupUsernameByURL(String.format("https://www.flickr.com/people/%s/", username)); assertEquals(username, usernameOnFlickr); } From 2fc6ba5e37a14b40e13b72348cf442fa5d614a5e Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 28 Apr 2024 14:47:26 +0100 Subject: [PATCH 228/239] Update tests after API changes --- .../flickr/test/CommonsInterfaceTest.java | 2 +- .../flickr/test/PeopleInterfaceTest.java | 2 +- .../get/flickr.activity.userComments.xml | 2 +- .../get/flickr.activity.userPhotos.xml | 2 +- .../get/flickr.cameras.getBrandModels.xml | 2762 +++++++++-------- .../payloads/get/flickr.cameras.getBrands.xml | 46 +- .../get/flickr.commons.getInstitutions.xml | 82 +- .../payloads/get/flickr.favorites.getList.xml | 4 +- .../payloads/get/flickr.groups.getInfo.xml | 26 +- .../get/flickr.groups.members.getList.xml | 100 +- .../get/flickr.groups.pools.getGroups.xml | 4 +- .../payloads/get/flickr.groups.search.xml | 114 +- .../get/flickr.interestingness.getList.xml | 202 +- .../flickr.machinetags.getRecentValues.xml | 1002 +++--- .../payloads/get/flickr.people.getGroups.xml | 4 +- .../payloads/get/flickr.people.getInfo.xml | 12 +- .../payloads/get/flickr.people.getPhotos.xml | 32 +- .../get/flickr.people.getPublicGroups.xml | 3 +- .../get/flickr.people.getUploadStatus.xml | 2 +- .../get/flickr.photos.getContactsPhotos.xml | 10 +- .../flickr.photos.getContactsPublicPhotos.xml | 10 +- .../payloads/get/flickr.photos.getContext.xml | 2 +- .../payloads/get/flickr.photos.getCounts.xml | 2 +- .../payloads/get/flickr.photos.getInfo.xml | 10 +- .../get/flickr.photos.getNotInSet.xml | 117 +- .../payloads/get/flickr.photos.getRecent.xml | 201 +- .../get/flickr.photos.getUntagged.xml | 118 +- .../payloads/get/flickr.photos.search.xml | 68 +- .../payloads/get/flickr.photosets.getInfo.xml | 2 +- .../payloads/get/flickr.photosets.getList.xml | 12 +- .../get/flickr.places.getTopPlacesList.xml | 2 +- .../get/flickr.places.tagsForPlace.xml | 200 +- .../get/flickr.reflection.getMethods.xml | 3 +- .../get/flickr.tags.getClusterPhotos.xml | 1 - .../payloads/get/flickr.tags.getHotList.xml | 80 +- .../payloads/get/flickr.tags.getListUser.xml | 1 + .../get/flickr.tags.getListUserRaw.xml | 52 +- .../post/flickr.galleries.getInfo.xml | 2 +- .../payloads/post/flickr.photos.addTags.xml | 2 +- .../flickr.photos.comments.addComment.xml | 2 +- .../payloads/post/flickr.photosets.create.xml | 2 +- .../payloads/post/flickr.test.echo.xml | 8 +- 42 files changed, 2672 insertions(+), 2638 deletions(-) diff --git a/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java index 96b58f10..18736292 100644 --- a/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java @@ -30,7 +30,7 @@ public void testGetInstitutions() throws FlickrException { if (inst.getName().equals("The British Library")) { assertEquals(1386975388000L, inst.getDateLaunch().getTime()); assertEquals("www.bl.uk", inst.getSiteUrl()); - assertEquals("http://www.bl.uk/aboutus/terms/copyright/index.html", inst.getLicenseUrl()); + assertEquals("https://www.bl.uk/about-us/terms-and-conditions/content-on-flickr-and-wikimedia-commons", inst.getLicenseUrl()); assertEquals("http://flickr.com/photos/britishlibrary/", inst.getFlickrUrl()); museumFound = true; } diff --git a/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java index 3c2aeca2..c0bb5b3c 100644 --- a/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java @@ -51,7 +51,7 @@ public void testGetInfo() throws FlickrException { assertNotNull(person); assertEquals(testProperties.getNsid(), person.getId()); assertEquals(testProperties.getDisplayname(), person.getRealName()); - assertTrue(person.getMobileurl().startsWith("https://m.flickr.com/photostream.gne")); + assertEquals(person.getMobileurl(), String.format("https://www.flickr.com/photos/%s/", testProperties.getUsername())); 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://")); diff --git a/src/test/resources/payloads/get/flickr.activity.userComments.xml b/src/test/resources/payloads/get/flickr.activity.userComments.xml index 16f2d28d..0abd54b7 100644 --- a/src/test/resources/payloads/get/flickr.activity.userComments.xml +++ b/src/test/resources/payloads/get/flickr.activity.userComments.xml @@ -1,7 +1,7 @@ - + Cheddar Test comment. diff --git a/src/test/resources/payloads/get/flickr.activity.userPhotos.xml b/src/test/resources/payloads/get/flickr.activity.userPhotos.xml index 7a633f54..3b6cd752 100644 --- a/src/test/resources/payloads/get/flickr.activity.userPhotos.xml +++ b/src/test/resources/payloads/get/flickr.activity.userPhotos.xml @@ -7,7 +7,7 @@ london - + Robot This looks familiar diff --git a/src/test/resources/payloads/get/flickr.cameras.getBrandModels.xml b/src/test/resources/payloads/get/flickr.cameras.getBrandModels.xml index 235b9746..2b06c4be 100644 --- a/src/test/resources/payloads/get/flickr.cameras.getBrandModels.xml +++ b/src/test/resources/payloads/get/flickr.cameras.getBrandModels.xml @@ -1,6 +1,27 @@ + + Canon EOS R5 + + https://live.staticflickr.com/cameras/72157716758832492_model_small_c118e36bb2.jpg + https://live.staticflickr.com/cameras/72157716758832492_model_large_1dc88d82cc.jpg + + + + EOS 5D MARK IV + + https://live.staticflickr.com/cameras/72157608115846558_model_small_509c9c1f62.jpg + https://live.staticflickr.com/cameras/72157608115846558_model_large_1d7da12a45.jpg + + + + Canon EOS R6 + + https://live.staticflickr.com/cameras/72157716758574992_model_small_01ea01f8bf.jpg + https://live.staticflickr.com/cameras/72157716758574992_model_large_e54ed91534.jpg + + Canon EOS 5D Mark III
    @@ -13,8 +34,22 @@ https://live.staticflickr.com/cameras/72157622292089908_model_large_497d3698ba.jpg - - CANON EOS 5D MARK IV + + Canon EOS R7 + + https://live.staticflickr.com/cameras/72157720418627526_model_small_cefb2db179.jpg + https://live.staticflickr.com/cameras/72157720418627526_model_large_72f132afbd.jpg + + + + Canon EOS R6 Mark II + + + 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 6D @@ -35,6 +70,12 @@ https://live.staticflickr.com/cameras/72157644861391679_model_large_12fcf1403e.jpg + + Canon EOS Rebel T7 + + + Canon EOS 90D + Canon EOS 80D @@ -42,24 +83,8 @@ 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 R Canon EOS 70D @@ -73,13 +98,6 @@ 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
    @@ -92,18 +110,21 @@ https://live.staticflickr.com/cameras/72157602280763141_model_large_1f77f7e0f2.jpg - - Canon EOS REBEL T3i + + Canon EOS 5D Mark II
    - 18 + 21.1 3 - Secure Digital, SDXC, SDHC + CompactFlash (CF) Card
    - https://live.staticflickr.com/cameras/72157625858229685_model_small_82002d6bd6.jpg - https://live.staticflickr.com/cameras/72157625858229685_model_large_7c02ddbfe1.jpg + https://live.staticflickr.com/cameras/72157607348761901_model_small_a874952616.jpg + https://live.staticflickr.com/cameras/72157607348761901_model_large_97198e11ef.jpg
    + + Canon EOS RP + Canon EOS 60D
    @@ -116,8 +137,27 @@ https://live.staticflickr.com/cameras/72157624493316109_model_large_c07377e8d4.jpg - - Canon EOS R + + 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 R3 + + + 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 750D @@ -126,26 +166,11 @@ 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 -
    + + Canon EOS-1D X Mark II - https://live.staticflickr.com/cameras/72157642353970835_model_small_b3f1ecb638.jpg - https://live.staticflickr.com/cameras/72157642353970835_model_large_359a3f62ee.jpg + https://live.staticflickr.com/cameras/72157663262267976_model_small_fe1274e6b7.jpg + https://live.staticflickr.com/cameras/72157663262267976_model_large_a69c5c58dd.jpg @@ -160,11 +185,26 @@ https://live.staticflickr.com/cameras/72157623502347808_model_large_692b09d10c.jpg - - Canon EOS-1D X Mark II + + Canon EOS Rebel T7i + + + Canon EOS R8 - https://live.staticflickr.com/cameras/72157663262267976_model_small_fe1274e6b7.jpg - https://live.staticflickr.com/cameras/72157663262267976_model_large_a69c5c58dd.jpg + https://live.staticflickr.com/cameras/72157721516217910_model_small_03c4475279.jpg + https://live.staticflickr.com/cameras/72157721516217910_model_large_1b0f61817d.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
    @@ -174,24 +214,16 @@ https://live.staticflickr.com/cameras/72157632461630521_model_large_ebdc3e28a2.jpg - - Canon EOS-1D X + + Canon EOS REBEL T5
    - 18.1 - 3.2 - CompactFlash (CF) Card + 3
    - https://live.staticflickr.com/cameras/72157629220288179_model_small_4807a929c8.jpg - https://live.staticflickr.com/cameras/72157629220288179_model_large_9b2a9a4024.jpg + https://live.staticflickr.com/cameras/72157642353970835_model_small_b3f1ecb638.jpg + https://live.staticflickr.com/cameras/72157642353970835_model_large_359a3f62ee.jpg
    - - Canon EOS Rebel T7i - - - Canon EOS 77D - Canon EOS REBEL T5i
    @@ -204,37 +236,14 @@ 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 M50 - - Canon EOS 50D -
    - 15.1 - 3 - CompactFlash (CF) Card -
    + + Canon EOS R10 - https://live.staticflickr.com/cameras/72157606814096380_model_small_acfeba1dae.jpg - https://live.staticflickr.com/cameras/72157606814096380_model_large_320ea78949.jpg + https://live.staticflickr.com/cameras/72157720717924984_model_small_e05217fe90.jpg + https://live.staticflickr.com/cameras/72157720717924984_model_large_2a9c9384b2.jpg @@ -249,30 +258,49 @@ https://live.staticflickr.com/cameras/72157604225656701_model_large_dedb412bb3.jpg - - Canon EOS REBEL T4i -
    - 18 - 3 - Secure Digital, SDXC, SDHC -
    + + Canon EOS 5DS R - https://live.staticflickr.com/cameras/72157630136654636_model_small_7aa6948e95.jpg - https://live.staticflickr.com/cameras/72157630136654636_model_large_9f1336ca57.jpg + https://live.staticflickr.com/cameras/72157650665459092_model_small_70265a1860.jpg + https://live.staticflickr.com/cameras/72157650665459092_model_large_0272a7ab99.jpg - - Canon EOS Digital Rebel XTi + + Canon EOS 77D + + + Canon EOS Rebel T100 + + + Canon EOS 250D + + + Canon EOS Rebel SL2 + + + Canon PowerShot SX740 HS + + + Canon PowerShot SX70 HS + + + Canon EOS 5D
    - 1 + 12.8 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 + https://live.staticflickr.com/cameras/130_model_small_9dbbe5a2b2.jpg + https://live.staticflickr.com/cameras/130_model_large_b8df029b89.jpg
    + + Canon EOS R50 + + + Canon PowerShot G7 X Mark II + Canon EOS Digital Rebel XT
    @@ -285,58 +313,43 @@ https://live.staticflickr.com/cameras/31_model_large_f11b305bdd.jpg - - Canon EOS 5DS R + + Canon EOS Rebel SL3 + + + Canon EOS 50D +
    + 15.1 + 3 + CompactFlash (CF) Card +
    - https://live.staticflickr.com/cameras/72157650665459092_model_small_70265a1860.jpg - https://live.staticflickr.com/cameras/72157650665459092_model_large_0272a7ab99.jpg + https://live.staticflickr.com/cameras/72157606814096380_model_small_acfeba1dae.jpg + https://live.staticflickr.com/cameras/72157606814096380_model_large_320ea78949.jpg
    - - Canon PowerShot SX60 HS + + Canon EOS REBEL T1i +
    + 15.1 + 3 + Secure Digital, SDHC +
    - https://live.staticflickr.com/cameras/72157647824755152_model_small_e23090b5f4.jpg - https://live.staticflickr.com/cameras/72157647824755152_model_large_7e7e4f80c6.jpg + https://live.staticflickr.com/cameras/72157617313528954_model_small_aa0037849d.jpg + https://live.staticflickr.com/cameras/72157617313528954_model_large_1fd8120fef.jpg
    - - Canon EOS M50 - - - Canon EOS 40D + + Canon EOS Digital Rebel XTi
    10.1 - 3 + 2.5 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 + https://live.staticflickr.com/cameras/68_model_small_201afafc2f.jpg + https://live.staticflickr.com/cameras/68_model_large_5fbbd26c3c.jpg
    @@ -346,57 +359,85 @@ https://live.staticflickr.com/cameras/72157623555354732_model_large_b5dc69964d.jpg - - Canon EOS 1200D + + Canon EOS M50m2 + + + Canon EOS-1D X +
    + 18.1 + 3.2 + CompactFlash (CF) Card +
    - https://live.staticflickr.com/cameras/72157640939372033_model_small_c1a3cb597a.jpg - https://live.staticflickr.com/cameras/72157640939372033_model_large_52555f6708.jpg + https://live.staticflickr.com/cameras/72157629220288179_model_small_4807a929c8.jpg + https://live.staticflickr.com/cameras/72157629220288179_model_large_9b2a9a4024.jpg
    - - Canon EOS Digital Rebel XS + + Canon EOS 40D
    10.1 - 2.5 - Secure Digital, SDHC + 3 + CompactFlash (CF) Card
    - https://live.staticflickr.com/cameras/72157605582107524_model_small_f8c3eacc3e.jpg - https://live.staticflickr.com/cameras/72157605582107524_model_large_f2dd3c1f2b.jpg + https://live.staticflickr.com/cameras/13483_model_small_bc865d9a17.jpg + https://live.staticflickr.com/cameras/13483_model_large_9d618a4965.jpg
    - - Canon EOS-1D Mark IV + + Canon EOS REBEL T4i
    - 16.1 + 18 3 - SDHC Memory Card, CompactFlash, Secure Digital (SD) Card, Microdrive + Secure Digital, SDXC, SDHC
    - https://live.staticflickr.com/cameras/72157603810225532_model_small_e8a45a1b36.jpg - https://live.staticflickr.com/cameras/72157603810225532_model_large_9785d9733c.jpg + https://live.staticflickr.com/cameras/72157630136654636_model_small_7aa6948e95.jpg + https://live.staticflickr.com/cameras/72157630136654636_model_large_9f1336ca57.jpg
    - - Canon EOS Rebel T100 + + 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 PowerShot SX50 HS -
    - 12.1 - 2.8 - Secure Digital, SDXC, SDHC -
    + + Canon EOS-1D X Mark III - https://live.staticflickr.com/cameras/72157631606498503_model_small_e5db6a3484.jpg - https://live.staticflickr.com/cameras/72157631606498503_model_large_17cd9b1f8e.jpg + https://live.staticflickr.com/cameras/72157712585439943_model_small_f9197e9fee.jpg + https://live.staticflickr.com/cameras/72157712585439943_model_large_5030b2b330.jpg - - Canon EOS REBEL SL1 + + Canon EOS 5Ds - https://live.staticflickr.com/cameras/72157633336811707_model_small_9f40643ac4.jpg - https://live.staticflickr.com/cameras/72157633336811707_model_large_2d70d20249.jpg + https://live.staticflickr.com/cameras/72157603423041122_model_small_7066489740.jpg + https://live.staticflickr.com/cameras/72157603423041122_model_large_ca4d89355b.jpg + + + + Canon PowerShot SX620 HS + + + Canon EOS Rebel T8i + + + Canon EOS M6 Mark II + + + 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
    @@ -411,33 +452,20 @@ 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 + + Canon EOS 1200D - https://live.staticflickr.com/cameras/72157668584224581_model_small_7ccab5572f.jpg - https://live.staticflickr.com/cameras/72157668584224581_model_large_fde021b1e9.jpg + https://live.staticflickr.com/cameras/72157640939372033_model_small_c1a3cb597a.jpg + https://live.staticflickr.com/cameras/72157640939372033_model_large_52555f6708.jpg - - Canon PowerShot SX530 HS + + Canon PowerShot SX730 HS - https://live.staticflickr.com/cameras/72157648098386118_model_small_7b16d1c3a6.jpg - https://live.staticflickr.com/cameras/72157648098386118_model_large_aaf7999ccb.jpg + https://live.staticflickr.com/cameras/72157673805378274_model_small_544878b8ee.jpg + https://live.staticflickr.com/cameras/72157673805378274_model_large_13e4637fe9.jpg - - Canon PowerShot SX620 HS - Canon EOS Digital Rebel
    @@ -450,6 +478,38 @@ https://live.staticflickr.com/cameras/4_model_large_2a7e545a1e.jpg + + 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 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 PowerShot G5 X Mark II + + https://live.staticflickr.com/cameras/72157709695054411_model_small_c6cd196c1a.jpg + https://live.staticflickr.com/cameras/72157709695054411_model_large_a589b76409.jpg + + + + Canon EOS R5 C + + + Canon PowerShot G9 X Mark II + Canon EOS 30D
    @@ -462,79 +522,63 @@ https://live.staticflickr.com/cameras/9_model_large_b17d8c82c3.jpg - - Canon PowerShot G9 X Mark II + + Canon PowerShot SX720 HS - - Canon EOS M3 + + Canon PowerShot G7 X Mark III + + https://live.staticflickr.com/cameras/72157709694860987_model_small_08f89fde20.jpg + https://live.staticflickr.com/cameras/72157709694860987_model_large_02e6e040b2.jpg + Canon CanoScan 9000F Mark II - - Canon EOS 1Ds Mark III + + Canon EOS M
    - 21.1 + 18 3 - CompactFlash (CF) Card + Secure Digital, SDXC, SDHC
    - https://live.staticflickr.com/cameras/72157601586629334_model_small_071161b82f.jpg - https://live.staticflickr.com/cameras/72157601586629334_model_large_9bfa056618.jpg + https://live.staticflickr.com/cameras/72157630734034208_model_small_92bbea491c.jpg + https://live.staticflickr.com/cameras/72157630734034208_model_large_2a60438278.jpg
    - - Canon PowerShot G16 -
    - 3 -
    + + Canon EOS REBEL SL1 - https://live.staticflickr.com/cameras/72157633994515034_model_small_4563648ebb.jpg - https://live.staticflickr.com/cameras/72157633994515034_model_large_8458a45884.jpg + https://live.staticflickr.com/cameras/72157633336811707_model_small_9f40643ac4.jpg + https://live.staticflickr.com/cameras/72157633336811707_model_large_2d70d20249.jpg - - Canon EOS 1D Mark III + + Canon EOS-1D Mark IV
    - 10.1 + 16.1 3 - CompactFlash (CF) Card + SDHC Memory Card, CompactFlash, Secure Digital (SD) Card, Microdrive
    - 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 + https://live.staticflickr.com/cameras/72157603810225532_model_small_e8a45a1b36.jpg + https://live.staticflickr.com/cameras/72157603810225532_model_large_9785d9733c.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 EOS 850D - - Canon PowerShot G12 + + Canon PowerShot G11
    10 2.8 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://live.staticflickr.com/cameras/72157624839718693_model_small_81c526286d.jpg - https://live.staticflickr.com/cameras/72157624839718693_model_large_b6d975e7d6.jpg + https://live.staticflickr.com/cameras/72157621971543189_model_small_1644edb612.jpg + https://live.staticflickr.com/cameras/72157621971543189_model_large_bdefce42a8.jpg
    @@ -549,149 +593,188 @@ https://live.staticflickr.com/cameras/72157627707836876_model_large_9edd7fd023.jpg - - Canon PowerShot G15 -
    - 12.1 - 3 - Secure Digital, SDXC, SDHC -
    + + Canon PowerShot SX540 HS + + + Canon EOS M5 - https://live.staticflickr.com/cameras/72157631669626016_model_small_b412b6f89a.jpg - https://live.staticflickr.com/cameras/72157631669626016_model_large_aee995637e.jpg + https://live.staticflickr.com/cameras/72157668584224581_model_small_7ccab5572f.jpg + https://live.staticflickr.com/cameras/72157668584224581_model_large_fde021b1e9.jpg - - Canon EOS M + + Canon EOS 1Ds Mark III
    - 18 + 21.1 3 - Secure Digital, SDXC, SDHC + CompactFlash (CF) Card
    - https://live.staticflickr.com/cameras/72157630734034208_model_small_92bbea491c.jpg - https://live.staticflickr.com/cameras/72157630734034208_model_large_2a60438278.jpg + https://live.staticflickr.com/cameras/72157601586629334_model_small_071161b82f.jpg + https://live.staticflickr.com/cameras/72157601586629334_model_large_9bfa056618.jpg
    - - Canon EOS 1Ds Mark II + + Canon EOS 10D
    - 16.7 - 2 - CompactFlash, Secure Digital, MultiMediaCard + 6.3 + 1.8 + CompactFlash (CF) Card
    - https://live.staticflickr.com/cameras/156_model_small_a56b80a67f.jpg - https://live.staticflickr.com/cameras/156_model_large_e6b1f8216a.jpg + https://live.staticflickr.com/cameras/81_model_small_4b6d829266.jpg + https://live.staticflickr.com/cameras/81_model_large_7082fc8590.jpg
    - - Canon PowerShot G7 X + + Canon EOS M3 + + + Canon PowerShot G5 X - https://live.staticflickr.com/cameras/72157645338335022_model_small_7ec3d31a3c.jpg - https://live.staticflickr.com/cameras/72157645338335022_model_large_c815303a07.jpg + https://live.staticflickr.com/cameras/72157654266153945_model_small_d1d368850d.jpg + https://live.staticflickr.com/cameras/72157654266153945_model_large_d655e5ef78.jpg - - Canon PowerShot SD1100 IS + + Canon PowerShot ELPH 180 + + + Canon PowerShot G16
    - 8 - 2.5 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 3
    - https://live.staticflickr.com/cameras/72157603983956398_model_small_b6d51a8150.jpg - https://live.staticflickr.com/cameras/72157603983956398_model_large_c4d1e89f8d.jpg + https://live.staticflickr.com/cameras/72157633994515034_model_small_4563648ebb.jpg + https://live.staticflickr.com/cameras/72157633994515034_model_large_8458a45884.jpg
    - - Canon PowerShot S95 + + Canon EOS 1D Mark III
    - 10 + 10.1 3 - SD/SDHC + CompactFlash (CF) Card
    - https://live.staticflickr.com/cameras/72157624762166562_model_small_fdc8df7c28.jpg - https://live.staticflickr.com/cameras/72157624762166562_model_large_85e6ab9d4f.jpg + https://live.staticflickr.com/cameras/72157600288628059_model_small_4cdfcb3773.jpg + https://live.staticflickr.com/cameras/72157600288628059_model_large_97180e7aa5.jpg
    - - Canon PowerShot SX510 HS -
    - 3 -
    + + Canon PowerShot ELPH 360 HS + + + Canon PowerShot SX710 HS - https://live.staticflickr.com/cameras/72157633170380529_model_small_267d868489.jpg - https://live.staticflickr.com/cameras/72157633170380529_model_large_1196f12423.jpg + https://live.staticflickr.com/cameras/72157649863292917_model_small_4e5f4385ba.jpg + https://live.staticflickr.com/cameras/72157649863292917_model_large_9af0e169f3.jpg - - Canon EOS M100 + + Canon PowerShot SX610 HS - https://live.staticflickr.com/cameras/72157683011558521_model_small_c108ba4596.jpg - https://live.staticflickr.com/cameras/72157683011558521_model_large_6958cc8184.jpg + https://live.staticflickr.com/cameras/72157648049359450_model_small_3e6493e3ac.jpg + https://live.staticflickr.com/cameras/72157648049359450_model_large_bf8a8110d6.jpg - - Canon PowerShot SD1000 + + Canon PowerShot S100 + + + 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 S95
    - 7.1 + 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 EOS 1D Mark II +
    + 8.2 2.5 - SDHC Memory Card, MultiMediaCard, Secure Digital (SD) Card + CompactFlash, Secure Digital (SD) Card, Microdrive
    - https://live.staticflickr.com/cameras/72157600291596369_model_small_9cf1a0b9c6.jpg - https://live.staticflickr.com/cameras/72157600291596369_model_large_9782e6ca80.jpg + https://live.staticflickr.com/cameras/12_model_small_1242e67975.jpg + https://live.staticflickr.com/cameras/12_model_large_dfa80dabd0.jpg
    - - Canon PowerShot G11 + + Canon PowerShot G12
    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 + https://live.staticflickr.com/cameras/72157624839718693_model_small_81c526286d.jpg + https://live.staticflickr.com/cameras/72157624839718693_model_large_b6d975e7d6.jpg
    - - Canon EOS M6 Mark II + + Canon EOS M200 - - Canon PowerShot S120 + + Canon PowerShot G15
    + 12.1 3 + Secure Digital, SDXC, SDHC
    - https://live.staticflickr.com/cameras/72157632858905716_model_small_09c906f983.jpg - https://live.staticflickr.com/cameras/72157632858905716_model_large_85a885e1ce.jpg + https://live.staticflickr.com/cameras/72157631669626016_model_small_b412b6f89a.jpg + https://live.staticflickr.com/cameras/72157631669626016_model_large_aee995637e.jpg
    - - Canon PowerShot SX130 IS + + Canon PowerShot G9
    12.1 3 - SDHX + MultiMediaCard, Secure Digital, SDHC
    - https://live.staticflickr.com/cameras/72157624843263664_model_small_466ca9648e.jpg - https://live.staticflickr.com/cameras/72157624843263664_model_large_0cdf8d446b.jpg + https://live.staticflickr.com/cameras/72157601586583928_model_small_71f71758a6.jpg + https://live.staticflickr.com/cameras/72157601586583928_model_large_3df7faed63.jpg
    - - Canon EOS 10D + + Canon EOS M6 + + https://live.staticflickr.com/cameras/72157676311863712_model_small_35cc29dfba.jpg + https://live.staticflickr.com/cameras/72157676311863712_model_large_2a969ea6f8.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 SD1200 IS
    - 6.3 - 1.8 - CompactFlash (CF) Card + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://live.staticflickr.com/cameras/81_model_small_4b6d829266.jpg - https://live.staticflickr.com/cameras/81_model_large_7082fc8590.jpg + https://live.staticflickr.com/cameras/72157615858002250_model_small_d297c2dd76.jpg + https://live.staticflickr.com/cameras/72157615858002250_model_large_18e94049dd.jpg
    @@ -701,108 +784,116 @@ https://live.staticflickr.com/cameras/72157654193429816_model_large_199f1a72bc.jpg - - Canon PowerShot S5 IS + + Canon PowerShot SD750
    - 8 - 2.5 + 7.1 + 3 Secure Digital, MultiMediaCard, SDHC
    - https://live.staticflickr.com/cameras/72157600292972439_model_small_d10462f983.jpg - https://live.staticflickr.com/cameras/72157600292972439_model_large_33a048b67b.jpg + https://live.staticflickr.com/cameras/72157600292482502_model_small_16de7e5ce6.jpg + https://live.staticflickr.com/cameras/72157600292482502_model_large_25b3e8c05d.jpg
    - - Canon PowerShot S100 - - - Canon PowerShot SX160 IS + + Canon PowerShot S110 - - 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 A80 - - Canon PowerShot SX260 HS + + Canon PowerShot SX170 IS
    - 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 + https://live.staticflickr.com/cameras/72157635427421420_model_small_2ddc739862.jpg + https://live.staticflickr.com/cameras/72157635427421420_model_large_6530dd3eac.jpg
    - - Canon PowerShot S3 IS -
    - 6 - 2 - Secure Digital, MultiMediaCard -
    + + Canon PowerShot SX230 HS - https://live.staticflickr.com/cameras/115_model_small_ec10d60f7a.jpg - https://live.staticflickr.com/cameras/115_model_large_9ffdcf70bf.jpg + https://live.staticflickr.com/cameras/72157626107421899_model_small_fe96996285.jpg + https://live.staticflickr.com/cameras/72157626107421899_model_large_3b15049271.jpg - - Canon PowerShot G10 + + Canon PowerShot SD800 IS
    - 14.7 - 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 7.1 + 2.5 + Secure Digital, MultiMediaCard, SDHC
    - https://live.staticflickr.com/cameras/72157607254728807_model_small_c7595d237f.jpg - https://live.staticflickr.com/cameras/72157607254728807_model_large_62ddda0838.jpg + https://live.staticflickr.com/cameras/3506_model_small_baa4b8be11.jpg + https://live.staticflickr.com/cameras/3506_model_large_9fba9d5611.jpg
    - - Canon PowerShot G9 -
    - 12.1 - 3 - MultiMediaCard, Secure Digital, SDHC -
    + + Canon PowerShot SX160 IS + + + Canon PowerShot A70 - https://live.staticflickr.com/cameras/72157601586583928_model_small_71f71758a6.jpg - https://live.staticflickr.com/cameras/72157601586583928_model_large_3df7faed63.jpg + https://live.staticflickr.com/cameras/331_model_small_fd6c5d9f6e.jpg + https://live.staticflickr.com/cameras/331_model_large_2a908d5d29.jpg - - Canon PowerShot SX200 IS + + Canon PowerShot SD300
    - 12.1 - 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 4 + 2 + Secure Digital (SD) Card
    - https://live.staticflickr.com/cameras/72157615327177137_model_small_c923617fcf.jpg - https://live.staticflickr.com/cameras/72157615327177137_model_large_e2585949a3.jpg + https://live.staticflickr.com/cameras/192_model_small_dc3c6ec0b9.jpg + https://live.staticflickr.com/cameras/192_model_large_d808fc3fb6.jpg
    - - Canon PowerShot G1 X Mark II + + Canon PowerShot G7 X - https://live.staticflickr.com/cameras/72157640985213904_model_small_8d1b938d77.jpg - https://live.staticflickr.com/cameras/72157640985213904_model_large_8454c17833.jpg + https://live.staticflickr.com/cameras/72157645338335022_model_small_7ec3d31a3c.jpg + https://live.staticflickr.com/cameras/72157645338335022_model_large_c815303a07.jpg - - Canon PowerShot G1 X + + Canon EOS 1Ds Mark II
    - 14.3 + 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 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 SX130 IS +
    + 12.1 3 - Secure Digital, SDHC, SDXC + SDHX
    - https://live.staticflickr.com/cameras/72157628828372835_model_small_198698201c.jpg - https://live.staticflickr.com/cameras/72157628828372835_model_large_a3c965c325.jpg + https://live.staticflickr.com/cameras/72157624843263664_model_small_466ca9648e.jpg + https://live.staticflickr.com/cameras/72157624843263664_model_large_0cdf8d446b.jpg
    @@ -816,125 +907,173 @@ https://live.staticflickr.com/cameras/72157624846412507_model_large_478b8f73b5.jpg - - Canon PowerShot SX120 IS + + Canon PowerShot SD600
    - 10 + 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 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 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 SX200 IS +
    + 12.1 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 + https://live.staticflickr.com/cameras/72157615327177137_model_small_c923617fcf.jpg + https://live.staticflickr.com/cameras/72157615327177137_model_large_e2585949a3.jpg
    - - Canon PowerShot SX10 IS + + Canon PowerShot SX20 IS
    - 10 + 12.1 2.5 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + MultiMediaCard (MMC)
    - https://live.staticflickr.com/cameras/72157607394786554_model_small_cd7b8479c5.jpg - https://live.staticflickr.com/cameras/72157607394786554_model_large_472ea85a5a.jpg + https://live.staticflickr.com/cameras/72157622054003161_model_small_fa47de9a45.jpg + https://live.staticflickr.com/cameras/72157622054003161_model_large_84bc659ebc.jpg
    - - Canon PowerShot SD750 + + Canon PowerShot A560
    7.1 - 3 + 2.5 Secure Digital, MultiMediaCard, SDHC
    - https://live.staticflickr.com/cameras/72157600292482502_model_small_16de7e5ce6.jpg - https://live.staticflickr.com/cameras/72157600292482502_model_large_25b3e8c05d.jpg + https://live.staticflickr.com/cameras/72157600291685735_model_small_c81b932be3.jpg + https://live.staticflickr.com/cameras/72157600291685735_model_large_6bcd9d3efc.jpg
    - - Canon PowerShot SD1200 IS + + Canon PowerShot SD700 IS
    - 10 + 6 2.5 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + Secure Digital, MultiMediaCard
    - https://live.staticflickr.com/cameras/72157615858002250_model_small_d297c2dd76.jpg - https://live.staticflickr.com/cameras/72157615858002250_model_large_18e94049dd.jpg + https://live.staticflickr.com/cameras/432_model_small_08e9751d7e.jpg + https://live.staticflickr.com/cameras/432_model_large_137b141680.jpg
    - - Canon PowerShot S90 + + Canon PowerShot G10
    - 10 + 14.7 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 + https://live.staticflickr.com/cameras/72157607254728807_model_small_c7595d237f.jpg + https://live.staticflickr.com/cameras/72157607254728807_model_large_62ddda0838.jpg
    - - Canon PowerShot ELPH 100 HS + + Canon PowerShot SD1100 IS +
    + 8 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    - https://live.staticflickr.com/cameras/72157626077723737_model_small_422bc9313f.jpg - https://live.staticflickr.com/cameras/72157626077723737_model_large_e95bc5563a.jpg + https://live.staticflickr.com/cameras/72157603983956398_model_small_b6d51a8150.jpg + https://live.staticflickr.com/cameras/72157603983956398_model_large_c4d1e89f8d.jpg
    - - Canon PowerShot A520 + + Canon PowerShot ELPH 190 IS + + + Canon PowerShot SX260 HS
    - 4 - 1.8 - MultiMediaCard, Secure Digital (SD) Card + 12.1 + 3 + Secure Digital (SD) Card, Secure Digital High Capacity (SDHC) Card, Secure Digital Extended Capacity (SDXC)
    - https://live.staticflickr.com/cameras/113_model_small_3c4e2b476c.jpg - https://live.staticflickr.com/cameras/113_model_large_a8ae50aaa2.jpg + https://live.staticflickr.com/cameras/72157629555712731_model_small_c08bd90398.jpg + https://live.staticflickr.com/cameras/72157629555712731_model_large_cf014452fb.jpg
    - - Canon CanoScan 9000F + + Canon PowerShot SX10 IS +
    + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    - https://live.staticflickr.com/cameras/72157624247324882_model_small_a3237917bd.jpg - https://live.staticflickr.com/cameras/72157624247324882_model_large_287ed633f5.jpg + https://live.staticflickr.com/cameras/72157607394786554_model_small_cd7b8479c5.jpg + https://live.staticflickr.com/cameras/72157607394786554_model_large_472ea85a5a.jpg
    - - Canon PowerShot SX210 IS + + Canon PowerShot SX520 HS
    - 14.1 3
    - https://live.staticflickr.com/cameras/72157623514846576_model_small_102da06252.jpg - https://live.staticflickr.com/cameras/72157623514846576_model_large_ff33eaebcd.jpg + https://live.staticflickr.com/cameras/72157646860530030_model_small_c287cae292.jpg + https://live.staticflickr.com/cameras/72157646860530030_model_large_2e679b44dd.jpg
    - - Canon PowerShot SD600 + + Canon PowerShot SD870 IS
    - 6 - 2.5 - Secure Digital, MultiMediaCard + 8 + 3 + Secure Digital, MultiMediaCard, SDHC
    - https://live.staticflickr.com/cameras/147_model_small_d4e6885dd1.jpg - https://live.staticflickr.com/cameras/147_model_large_7542357b7b.jpg + https://live.staticflickr.com/cameras/72157601661637005_model_small_8e99150a47.jpg + https://live.staticflickr.com/cameras/72157601661637005_model_large_778c7a6f7f.jpg
    - - Canon PowerShot SX500 IS + + Canon PowerShot S90
    - 16 + 10 3 - Secure Digital, SDHC + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://live.staticflickr.com/cameras/72157631426644668_model_small_3db39a01f5.jpg - https://live.staticflickr.com/cameras/72157631426644668_model_large_3d45443eaf.jpg + https://live.staticflickr.com/cameras/72157622037248671_model_small_599abbeea4.jpg + https://live.staticflickr.com/cameras/72157622037248671_model_large_a3e2203efb.jpg
    @@ -949,397 +1088,373 @@ https://live.staticflickr.com/cameras/72157623495818996_model_large_23f998fc01.jpg - - Canon PowerShot SX110 IS + + Canon PowerShot A2500
    - 9 - 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 2.7
    - https://live.staticflickr.com/cameras/72157607097240125_model_small_89b9359b0a.jpg - https://live.staticflickr.com/cameras/72157607097240125_model_large_37bf0a0285.jpg + https://live.staticflickr.com/cameras/72157633211759483_model_small_fdf71aaa57.jpg + https://live.staticflickr.com/cameras/72157633211759483_model_large_068f77cbc8.jpg
    - - Canon PowerShot A2300 + + Canon PowerShot A720 IS
    - 16 - 2.7 - Secure Digital, SDHC, SDXC + 8 + 2.5 + Secure Digital, MultiMediaCard, SDHC
    - https://live.staticflickr.com/cameras/72157629682877859_model_small_0e76052de3.jpg - https://live.staticflickr.com/cameras/72157629682877859_model_large_512c829f1c.jpg + https://live.staticflickr.com/cameras/72157601700908638_model_small_ffa204741b.jpg + https://live.staticflickr.com/cameras/72157601700908638_model_large_c5f41eec0b.jpg
    - - Canon PowerShot S2 IS -
    - 5 - 1.8 - Secure Digital (SD) Card -
    + + Canon PowerShot SX280 HS - https://live.staticflickr.com/cameras/73_model_small_54db2b6032.jpg - https://live.staticflickr.com/cameras/73_model_large_b8912b2c1e.jpg + https://live.staticflickr.com/cameras/72157633352455718_model_small_d946c5d9ca.jpg + https://live.staticflickr.com/cameras/72157633352455718_model_large_0bc3ebbc33.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 + + Canon PowerShot G7
    - 12.1 + 10 2.5 - SDHC, MultiMediaCard, MMCPlus + Secure Digital, MultiMediaCard, SDHC
    - https://live.staticflickr.com/cameras/72157615260423184_model_small_bc5565c8b7.jpg - https://live.staticflickr.com/cameras/72157615260423184_model_large_f0a803b0fc.jpg + https://live.staticflickr.com/cameras/24369_model_small_cc7df00614.jpg + https://live.staticflickr.com/cameras/24369_model_large_e18440c1ed.jpg
    - - Canon PowerShot S400 + + Canon PowerShot SX110 IS +
    + 9 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    - https://live.staticflickr.com/cameras/533_model_small_d595a3f690.jpg - https://live.staticflickr.com/cameras/533_model_large_9c8688c05a.jpg + https://live.staticflickr.com/cameras/72157607097240125_model_small_89b9359b0a.jpg + https://live.staticflickr.com/cameras/72157607097240125_model_large_37bf0a0285.jpg
    - - Canon PowerShot A4000 IS + + Canon PowerShot SX700 HS
    - 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 + https://live.staticflickr.com/cameras/72157641922172003_model_small_335e01dc78.jpg + https://live.staticflickr.com/cameras/72157641922172003_model_large_c62a48d7c0.jpg
    - - Canon PowerShot SX20 IS + + Canon PowerShot SD780 IS
    12.1 2.5 - MultiMediaCard (MMC) + SDHC, MultiMediaCard, MMCPlus
    - https://live.staticflickr.com/cameras/72157622054003161_model_small_fa47de9a45.jpg - https://live.staticflickr.com/cameras/72157622054003161_model_large_84bc659ebc.jpg + https://live.staticflickr.com/cameras/72157615260423184_model_small_bc5565c8b7.jpg + https://live.staticflickr.com/cameras/72157615260423184_model_large_f0a803b0fc.jpg
    - - Canon PowerShot SX150 IS + + Canon PowerShot D10
    - 14.1 - 3 + 12.1 + 2.5 Secure Digital (SD) Card
    - https://live.staticflickr.com/cameras/72157627401052221_model_small_27ede7c032.jpg - https://live.staticflickr.com/cameras/72157627401052221_model_large_a88fcd5700.jpg + https://live.staticflickr.com/cameras/72157616911061933_model_small_e0ca711a7f.jpg + https://live.staticflickr.com/cameras/72157616911061933_model_large_cc00846c64.jpg
    - - Canon PowerShot SD870 IS + + Canon PowerShot S200 + + + Canon PowerShot A630
    8 - 3 - Secure Digital, MultiMediaCard, SDHC + 2.5 + MultiMediaCard, Secure Digital, SDHC
    - https://live.staticflickr.com/cameras/72157601661637005_model_small_8e99150a47.jpg - https://live.staticflickr.com/cameras/72157601661637005_model_large_778c7a6f7f.jpg + https://live.staticflickr.com/cameras/880_model_small_f621539dd2.jpg + https://live.staticflickr.com/cameras/880_model_large_f447184173.jpg
    - - Canon PowerShot SX280 HS + + Canon PowerShot A610 +
    + 5 + 2 + Secure Digital, MultiMediaCard +
    - https://live.staticflickr.com/cameras/72157633352455718_model_small_d946c5d9ca.jpg - https://live.staticflickr.com/cameras/72157633352455718_model_large_0bc3ebbc33.jpg + https://live.staticflickr.com/cameras/295_model_small_ec60d819ec.jpg + https://live.staticflickr.com/cameras/295_model_large_b9f67ef906.jpg
    - - Canon PowerShot SD400 + + Canon PowerShot S500
    5 - 2 + 1.5 Secure Digital (SD) Card
    - https://live.staticflickr.com/cameras/30_model_small_ba4763b423.jpg - https://live.staticflickr.com/cameras/30_model_large_464f18fc8a.jpg + https://live.staticflickr.com/cameras/311_model_small_8f0b9890f5.jpg + https://live.staticflickr.com/cameras/311_model_large_7d733573e9.jpg
    - - Canon PowerShot A95 + + Canon PowerShot G3
    - 5 + 4 1.8 - CompactFlash + CompactFlash (CF) Card
    - https://live.staticflickr.com/cameras/58_model_small_1e7955211c.jpg - https://live.staticflickr.com/cameras/58_model_large_2f415e825f.jpg + https://live.staticflickr.com/cameras/168_model_small_f86db7018f.jpg + https://live.staticflickr.com/cameras/168_model_large_bf37ba94b6.jpg
    - - Canon PowerShot SX520 HS + + Canon PowerShot A3100 IS
    - 3 + 12
    - - 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 + + Canon PowerShot SD450
    - 8.2 + 5 2.5 - CompactFlash, Secure Digital (SD) Card, Microdrive + Secure Digital, MultiMediaCard
    - https://live.staticflickr.com/cameras/792_model_small_79b90ff356.jpg - https://live.staticflickr.com/cameras/792_model_large_ae86ccf632.jpg + https://live.staticflickr.com/cameras/64_model_small_fa1065b7b6.jpg + https://live.staticflickr.com/cameras/64_model_large_35994d68f5.jpg
    - - Canon PowerShot A710 IS + + Canon PowerShot SD770 IS
    - 7.1 + 10 2.5 - Secure Digital, MultiMediaCard, SDHC + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://live.staticflickr.com/cameras/928_model_small_687bc868ed.jpg - https://live.staticflickr.com/cameras/928_model_large_863d565f23.jpg + https://live.staticflickr.com/cameras/72157604597339286_model_small_4e767448d9.jpg + https://live.staticflickr.com/cameras/72157604597339286_model_large_c7c345de36.jpg
    - - Canon PowerShot SD850 IS + + Canon PowerShot SD880 IS
    - 8 - 2.5 - Secure Digital, MultiMediaCard + 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://live.staticflickr.com/cameras/72157600316000762_model_small_a83286a964.jpg - https://live.staticflickr.com/cameras/72157600316000762_model_large_1970b12f6c.jpg + https://live.staticflickr.com/cameras/72157607803563543_model_small_f054e019cf.jpg + https://live.staticflickr.com/cameras/72157607803563543_model_large_b23b35ef33.jpg
    - - Canon PowerShot SD500 + + Canon PowerShot A40 + + + Canon PowerShot A510
    - 7.1 - 2 - Secure Digital (SD) Card + 3.2 + 1.8 + MultiMediaCard, Secure Digital
    - https://live.staticflickr.com/cameras/413_model_small_cde2faea24.jpg - https://live.staticflickr.com/cameras/413_model_large_9eff7352b6.jpg + https://live.staticflickr.com/cameras/103_model_small_b132094ab0.jpg + https://live.staticflickr.com/cameras/103_model_large_f8b0f7772c.jpg
    - - Canon PowerShot S45 + + Canon PowerShot A85
    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 + https://live.staticflickr.com/cameras/123_model_small_64e30bc0c3.jpg + https://live.staticflickr.com/cameras/123_model_large_6a55c4cc59.jpg
    - - Canon PowerShot S110 + + Canon EOS M100 + + https://live.staticflickr.com/cameras/72157683011558521_model_small_c108ba4596.jpg + https://live.staticflickr.com/cameras/72157683011558521_model_large_6958cc8184.jpg + - - Canon EOS 1D Mark II + + Canon PowerShot S120
    - 8.2 - 2.5 - CompactFlash, Secure Digital (SD) Card, Microdrive + 3
    - https://live.staticflickr.com/cameras/12_model_small_1242e67975.jpg - https://live.staticflickr.com/cameras/12_model_large_dfa80dabd0.jpg + https://live.staticflickr.com/cameras/72157632858905716_model_small_09c906f983.jpg + https://live.staticflickr.com/cameras/72157632858905716_model_large_85a885e1ce.jpg
    - - Canon PowerShot SX600 HS + + Canon PowerShot SX510 HS
    3
    - https://live.staticflickr.com/cameras/72157642221879684_model_small_dc7d3c59ee.jpg - https://live.staticflickr.com/cameras/72157642221879684_model_large_206c3e1651.jpg + https://live.staticflickr.com/cameras/72157633170380529_model_small_267d868489.jpg + https://live.staticflickr.com/cameras/72157633170380529_model_large_1196f12423.jpg
    - - Canon PowerShot A590 IS + + Canon PowerShot SD1000
    - 8 + 7.1 2.5 - MMCplus + SDHC Memory Card, MultiMediaCard, Secure Digital (SD) Card
    - https://live.staticflickr.com/cameras/72157603914408544_model_small_70f463f26f.jpg - https://live.staticflickr.com/cameras/72157603914408544_model_large_914d992355.jpg + https://live.staticflickr.com/cameras/72157600291596369_model_small_9cf1a0b9c6.jpg + https://live.staticflickr.com/cameras/72157600291596369_model_large_9782e6ca80.jpg
    - - Canon PowerShot SD450 + + Canon PowerShot SD630
    - 5 - 2.5 - Secure Digital, MultiMediaCard + 6 + 3 + MultiMediaCard, Secure Digital (SD) Card
    - https://live.staticflickr.com/cameras/64_model_small_fa1065b7b6.jpg - https://live.staticflickr.com/cameras/64_model_large_35994d68f5.jpg + https://live.staticflickr.com/cameras/380_model_small_ced61150f3.jpg + https://live.staticflickr.com/cameras/380_model_large_aa27b87301.jpg
    - - Canon PowerShot S200 - - - Canon PowerShot A550 + + Canon PowerShot SD400
    - 7.1 + 5 2 - MultiMediaCard, Secure Digital, SDHC + Secure Digital (SD) Card
    - https://live.staticflickr.com/cameras/72157600289383418_model_small_0ee0a7e545.jpg - https://live.staticflickr.com/cameras/72157600289383418_model_large_b029991d3d.jpg + https://live.staticflickr.com/cameras/30_model_small_ba4763b423.jpg + https://live.staticflickr.com/cameras/30_model_large_464f18fc8a.jpg
    - - Canon PowerShot A640 + + Canon PowerShot A590 IS
    - 10 + 8 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 + MMCplus
    - https://live.staticflickr.com/cameras/72157641922172003_model_small_335e01dc78.jpg - https://live.staticflickr.com/cameras/72157641922172003_model_large_c62a48d7c0.jpg + https://live.staticflickr.com/cameras/72157603914408544_model_small_70f463f26f.jpg + https://live.staticflickr.com/cameras/72157603914408544_model_large_914d992355.jpg
    - - Canon PowerShot SD800 IS + + Canon PowerShot S2 IS
    - 7.1 - 2.5 - Secure Digital, MultiMediaCard, SDHC + 5 + 1.8 + Secure Digital (SD) Card
    - 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 + https://live.staticflickr.com/cameras/73_model_small_54db2b6032.jpg + https://live.staticflickr.com/cameras/73_model_large_b8912b2c1e.jpg - - Canon PowerShot SX170 IS + + Canon PowerShot SX500 IS
    + 16 3 + Secure Digital, SDHC
    - https://live.staticflickr.com/cameras/72157635427421420_model_small_2ddc739862.jpg - https://live.staticflickr.com/cameras/72157635427421420_model_large_6530dd3eac.jpg + https://live.staticflickr.com/cameras/72157631426644668_model_small_3db39a01f5.jpg + https://live.staticflickr.com/cameras/72157631426644668_model_large_3d45443eaf.jpg
    - - Canon PowerShot SD790 IS + + Canon PowerShot G2
    - 10 - 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 4 + 1.8 + CompactFlash (CF) Card
    - https://live.staticflickr.com/cameras/72157604206177666_model_small_61519d019b.jpg - https://live.staticflickr.com/cameras/72157604206177666_model_large_fe0abf6ac8.jpg + https://live.staticflickr.com/cameras/42_model_small_53424d7981.jpg + https://live.staticflickr.com/cameras/42_model_large_e48879fba0.jpg
    - - Canon PowerShot A720 IS + + Canon PowerShot A540
    - 8 + 6 2.5 - Secure Digital, MultiMediaCard, SDHC + MultiMediaCard, Secure Digital
    - https://live.staticflickr.com/cameras/72157601700908638_model_small_ffa204741b.jpg - https://live.staticflickr.com/cameras/72157601700908638_model_large_c5f41eec0b.jpg + https://live.staticflickr.com/cameras/21_model_small_4595d398d7.jpg + https://live.staticflickr.com/cameras/21_model_large_511e5c2f88.jpg
    - - Canon PowerShot SD300 + + Canon EOS D60 + + + Canon PowerShot A710 IS
    - 4 - 2 - Secure Digital (SD) Card + 7.1 + 2.5 + Secure Digital, MultiMediaCard, SDHC
    - https://live.staticflickr.com/cameras/192_model_small_dc3c6ec0b9.jpg - https://live.staticflickr.com/cameras/192_model_large_d808fc3fb6.jpg + https://live.staticflickr.com/cameras/928_model_small_687bc868ed.jpg + https://live.staticflickr.com/cameras/928_model_large_863d565f23.jpg
    - - Canon PowerShot G7 + + Canon PowerShot A4000 IS
    - 10 - 2.5 - Secure Digital, MultiMediaCard, SDHC + 16 + 3 + Secure Digital, SDHC, SDXC
    - https://live.staticflickr.com/cameras/24369_model_small_cc7df00614.jpg - https://live.staticflickr.com/cameras/24369_model_large_e18440c1ed.jpg + https://live.staticflickr.com/cameras/72157629690121413_model_small_c3674f9a04.jpg + https://live.staticflickr.com/cameras/72157629690121413_model_large_fd69104134.jpg
    - - Canon PowerShot SD550 + + Canon PowerShot A520
    - 7.1 - 2.5 - Secure Digital, MultiMediaCard + 4 + 1.8 + MultiMediaCard, Secure Digital (SD) Card
    - https://live.staticflickr.com/cameras/482_model_small_f8b4bfe6d8.jpg - https://live.staticflickr.com/cameras/482_model_large_033233faac.jpg + https://live.staticflickr.com/cameras/113_model_small_3c4e2b476c.jpg + https://live.staticflickr.com/cameras/113_model_large_a8ae50aaa2.jpg
    @@ -1354,145 +1469,160 @@ https://live.staticflickr.com/cameras/72157600291595413_model_large_d7bed7b9d9.jpg - - Canon PowerShot A650 IS + + Canon PowerShot A530
    - 12.1 - 2.5 - Secure Digital, MultiMediaCard, SDHC + 5 + 1.8 + MultiMediaCard, Secure Digital
    - https://live.staticflickr.com/cameras/72157601891740240_model_small_935ab686ff.jpg - https://live.staticflickr.com/cameras/72157601891740240_model_large_010a6f6998.jpg + https://live.staticflickr.com/cameras/303_model_small_85ec2a9970.jpg + https://live.staticflickr.com/cameras/303_model_large_90dd997c32.jpg
    - - Canon PowerShot SD980 IS + + Canon PowerShot SX1 IS
    - 12.1 - 3 + 10 + 2.8 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 + https://live.staticflickr.com/cameras/72157607398275267_model_small_506f6616ce.jpg + https://live.staticflickr.com/cameras/72157607398275267_model_large_533d29fcab.jpg
    - - Canon PowerShot G2 + + Canon PowerShot A550
    - 4 - 1.8 - CompactFlash (CF) Card + 7.1 + 2 + MultiMediaCard, Secure Digital, SDHC
    - https://live.staticflickr.com/cameras/42_model_small_53424d7981.jpg - https://live.staticflickr.com/cameras/42_model_large_e48879fba0.jpg + https://live.staticflickr.com/cameras/72157600289383418_model_small_0ee0a7e545.jpg + https://live.staticflickr.com/cameras/72157600289383418_model_large_b029991d3d.jpg
    - - Canon PowerShot A70 + + Canon PowerShot S50 + + + Canon PowerShot SD850 IS +
    + 8 + 2.5 + Secure Digital, MultiMediaCard +
    - https://live.staticflickr.com/cameras/331_model_small_fd6c5d9f6e.jpg - https://live.staticflickr.com/cameras/331_model_large_2a908d5d29.jpg + https://live.staticflickr.com/cameras/72157600316000762_model_small_a83286a964.jpg + https://live.staticflickr.com/cameras/72157600316000762_model_large_1970b12f6c.jpg
    - - Canon PowerShot SX100 IS + + Canon PowerShot A470
    - 8 + 7.1 2.5 - Secure Digital, MultiMediaCard, SDHC + Secure Digital (SD) Card
    - https://live.staticflickr.com/cameras/72157602254956013_model_small_c7fc8218ed.jpg - https://live.staticflickr.com/cameras/72157602254956013_model_large_ca3276f712.jpg + https://live.staticflickr.com/cameras/72157604008953746_model_small_ab3a0c68fb.jpg + https://live.staticflickr.com/cameras/72157604008953746_model_large_5b25b77672.jpg
    - - Canon PowerShot SD1400 IS + + Canon EOS 1DS
    - 12 + 11.1 + 2 + CompactFlash
    - https://live.staticflickr.com/cameras/72157623403735861_model_small_7b6eef712c.jpg - https://live.staticflickr.com/cameras/72157623403735861_model_large_6377095b94.jpg + https://live.staticflickr.com/cameras/541_model_small_8bf11ebe60.jpg + https://live.staticflickr.com/cameras/541_model_large_f104299b9c.jpg
    - - Canon PowerShot A630 + + 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 G6
    - 8 - 2.5 - MultiMediaCard, Secure Digital, SDHC + 7.1 + 2 + CompactFlash (CF) Card
    - https://live.staticflickr.com/cameras/880_model_small_f621539dd2.jpg - https://live.staticflickr.com/cameras/880_model_large_f447184173.jpg + https://live.staticflickr.com/cameras/306_model_small_10710a51a3.jpg + https://live.staticflickr.com/cameras/306_model_large_1cbfb40949.jpg
    - - Canon PowerShot S500 + + Canon PowerShot A490
    - 5 - 1.5 - Secure Digital (SD) Card + 10 +
    +
    + + Canon PowerShot S30 +
    + 3.2 + 1.8 + CompactFlash (CF) Card
    - https://live.staticflickr.com/cameras/311_model_small_8f0b9890f5.jpg - https://live.staticflickr.com/cameras/311_model_large_7d733573e9.jpg + https://live.staticflickr.com/cameras/681_model_small_b801bc3de5.jpg + https://live.staticflickr.com/cameras/681_model_large_fc4c035a37.jpg
    - - Canon PowerShot D10 + + Canon PowerShot A650 IS
    12.1 2.5 - Secure Digital (SD) Card + Secure Digital, MultiMediaCard, SDHC
    - https://live.staticflickr.com/cameras/72157616911061933_model_small_e0ca711a7f.jpg - https://live.staticflickr.com/cameras/72157616911061933_model_large_cc00846c64.jpg + https://live.staticflickr.com/cameras/72157601891740240_model_small_935ab686ff.jpg + https://live.staticflickr.com/cameras/72157601891740240_model_large_010a6f6998.jpg
    - - Canon PowerShot G5 - - - Canon EOS 650D + + Canon PowerShot ELPH 300 HS +
    + 12 +
    - https://live.staticflickr.com/cameras/72157658988031402_model_small_84fd539622.jpg - https://live.staticflickr.com/cameras/72157658988031402_model_large_3b9e33f1d9.jpg + https://live.staticflickr.com/cameras/72157626133707081_model_small_fd24fe9a5f.jpg + https://live.staticflickr.com/cameras/72157626133707081_model_large_5789bb40d6.jpg
    - - Canon PowerShot S50 - - - Canon PowerShot G3 + + Canon PowerShot S45
    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 + https://live.staticflickr.com/cameras/373_model_small_f2002e4d4c.jpg + https://live.staticflickr.com/cameras/373_model_large_8d345e31a2.jpg
    - - Canon EOS D60 - - - Canon PowerShot SD900 + + Canon PowerShot A2200
    - 10 - 2.5 - Secure Digital, MultiMediaCard, SDHC + 14.1
    - https://live.staticflickr.com/cameras/2705_model_small_e4e7c5e7df.jpg - https://live.staticflickr.com/cameras/2705_model_large_af0d96d561.jpg + https://live.staticflickr.com/cameras/72157626006484232_model_small_32fb85f79e.jpg + https://live.staticflickr.com/cameras/72157626006484232_model_large_7de50bc2d5.jpg
    @@ -1507,332 +1637,305 @@ https://live.staticflickr.com/cameras/72157613371182459_model_large_6f9d21111d.jpg - - Canon PowerShot A470 + + Canon PowerShot SD890 IS
    - 7.1 + 10 2.5 - Secure Digital (SD) Card + MultiMediaCard, Secure Digital, SDHC
    - https://live.staticflickr.com/cameras/72157604008953746_model_small_ab3a0c68fb.jpg - https://live.staticflickr.com/cameras/72157604008953746_model_large_5b25b77672.jpg + https://live.staticflickr.com/cameras/72157604325182497_model_small_37aa89e826.jpg + https://live.staticflickr.com/cameras/72157604325182497_model_large_80e15aacfd.jpg
    - - Canon PowerShot A400 - - - Canon PowerShot S230 - - - Canon PowerShot G6 + + Canon PowerShot G1 X
    - 7.1 - 2 - CompactFlash (CF) Card + 14.3 + 3 + Secure Digital, SDHC, SDXC
    - https://live.staticflickr.com/cameras/306_model_small_10710a51a3.jpg - https://live.staticflickr.com/cameras/306_model_large_1cbfb40949.jpg + https://live.staticflickr.com/cameras/72157628828372835_model_small_198698201c.jpg + https://live.staticflickr.com/cameras/72157628828372835_model_large_a3c965c325.jpg
    - - Canon PowerShot A2200 -
    - 14.1 -
    + + Canon PowerShot G1 X Mark II - https://live.staticflickr.com/cameras/72157626006484232_model_small_32fb85f79e.jpg - https://live.staticflickr.com/cameras/72157626006484232_model_large_7de50bc2d5.jpg + https://live.staticflickr.com/cameras/72157640985213904_model_small_8d1b938d77.jpg + https://live.staticflickr.com/cameras/72157640985213904_model_large_8454c17833.jpg - - Canon PowerShot A490 -
    - 10 -
    -
    - - Canon PowerShot ELPH 300 HS + + Canon PowerShot SX210 IS
    - 12 + 14.1 + 3
    - https://live.staticflickr.com/cameras/72157626133707081_model_small_fd24fe9a5f.jpg - https://live.staticflickr.com/cameras/72157626133707081_model_large_5789bb40d6.jpg + https://live.staticflickr.com/cameras/72157623514846576_model_small_102da06252.jpg + https://live.staticflickr.com/cameras/72157623514846576_model_large_ff33eaebcd.jpg
    - - Canon PowerShot S70 + + Canon PowerShot A2300
    - 7.1 - 1.8 - CompactFlash + 16 + 2.7 + Secure Digital, SDHC, SDXC
    - https://live.staticflickr.com/cameras/70_model_small_74b4f1d550.jpg - https://live.staticflickr.com/cameras/70_model_large_f9711ed374.jpg + https://live.staticflickr.com/cameras/72157629682877859_model_small_0e76052de3.jpg + https://live.staticflickr.com/cameras/72157629682877859_model_large_512c829f1c.jpg
    - - Canon PowerShot SD960 IS -
    - 12.1 - 2.8 - Secure Digital, SDHC, MultiMediaCard, MMCPlus -
    + + Canon PowerShot SX400 IS - https://live.staticflickr.com/cameras/72157615260434668_model_small_068dd2b166.jpg - https://live.staticflickr.com/cameras/72157615260434668_model_large_bddd57f961.jpg + https://live.staticflickr.com/cameras/72157647167111895_model_small_d02bbe89d7.jpg + https://live.staticflickr.com/cameras/72157647167111895_model_large_cfbf3da591.jpg - - Canon PowerShot S40 - - - Canon PowerShot A3300 IS + + Canon PowerShot SX150 IS
    - 16 + 14.1 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 + https://live.staticflickr.com/cameras/72157627401052221_model_small_27ede7c032.jpg + https://live.staticflickr.com/cameras/72157627401052221_model_large_a88fcd5700.jpg
    - - Canon PowerShot A410 + + 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 A75
    3.2 - 1.5 - MultiMediaCard, Secure Digital + 1.8 + CompactFlash
    - https://live.staticflickr.com/cameras/18_model_small_4e47ea423d.jpg - https://live.staticflickr.com/cameras/18_model_large_dc8a8ee8b3.jpg + https://live.staticflickr.com/cameras/53_model_small_1358fa386c.jpg + https://live.staticflickr.com/cameras/53_model_large_83792310b4.jpg
    - - Canon PowerShot A200 - - - Canon PowerShot A620 + + Canon PowerShot SD940 IS
    - 7.1 - 2 - Secure Digital, MultiMediaCard + 12.1 + 2.7 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://live.staticflickr.com/cameras/134_model_small_92eeb17022.jpg - https://live.staticflickr.com/cameras/134_model_large_d1c1e2d3df.jpg + https://live.staticflickr.com/cameras/72157622084755657_model_small_1eaf6702b9.jpg + https://live.staticflickr.com/cameras/72157622084755657_model_large_b543294bc4.jpg
    - - Canon PowerShot A540 + + Canon PowerShot SD900
    - 6 + 10 2.5 - MultiMediaCard, Secure Digital + Secure Digital, MultiMediaCard, SDHC
    - https://live.staticflickr.com/cameras/21_model_small_4595d398d7.jpg - https://live.staticflickr.com/cameras/21_model_large_511e5c2f88.jpg + https://live.staticflickr.com/cameras/2705_model_small_e4e7c5e7df.jpg + https://live.staticflickr.com/cameras/2705_model_large_af0d96d561.jpg
    - - Canon PowerShot SD630 + + Canon PowerShot SD200 + + + PowerShot ELPH 330 HS + + + Canon PowerShot A2000 IS
    - 6 + 10 3 - MultiMediaCard, Secure Digital (SD) Card + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://live.staticflickr.com/cameras/380_model_small_ced61150f3.jpg - https://live.staticflickr.com/cameras/380_model_large_aa27b87301.jpg + https://live.staticflickr.com/cameras/72157607272610511_model_small_ffc16364ec.jpg + https://live.staticflickr.com/cameras/72157607272610511_model_large_c3440fdc55.jpg
    - - Canon EOS 1DS + + Canon PowerShot S60
    - 11.1 - 2 - CompactFlash + 5 + 1.8 + CompactFlash (CF) Card
    - https://live.staticflickr.com/cameras/541_model_small_8bf11ebe60.jpg - https://live.staticflickr.com/cameras/541_model_large_f104299b9c.jpg + https://live.staticflickr.com/cameras/319_model_small_b6503c5e8f.jpg + https://live.staticflickr.com/cameras/319_model_large_a74142fbbb.jpg
    - - Canon PowerShot A2500 + + Canon PowerShot A2100 IS
    - 2.7 + 12.1 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://live.staticflickr.com/cameras/72157633211759483_model_small_fdf71aaa57.jpg - https://live.staticflickr.com/cameras/72157633211759483_model_large_068f77cbc8.jpg + https://live.staticflickr.com/cameras/72157615813690609_model_small_85a05a0580.jpg + https://live.staticflickr.com/cameras/72157615813690609_model_large_5c483e0981.jpg
    - - Canon PowerShot A75 + + Canon PowerShot S3 IS
    - 3.2 - 1.8 - CompactFlash + 6 + 2 + Secure Digital, MultiMediaCard
    - https://live.staticflickr.com/cameras/53_model_small_1358fa386c.jpg - https://live.staticflickr.com/cameras/53_model_large_83792310b4.jpg + https://live.staticflickr.com/cameras/115_model_small_ec10d60f7a.jpg + https://live.staticflickr.com/cameras/115_model_large_9ffdcf70bf.jpg
    - - Canon PowerShot Pro1 + + Canon PowerShot SX240 HS + + + Canon PowerShot SX600 HS
    - 8 - 2 - CompactFlash + 3
    - https://live.staticflickr.com/cameras/279_model_small_e6281ed159.jpg - https://live.staticflickr.com/cameras/279_model_large_ac13e907a7.jpg + https://live.staticflickr.com/cameras/72157642221879684_model_small_dc7d3c59ee.jpg + https://live.staticflickr.com/cameras/72157642221879684_model_large_206c3e1651.jpg
    - - Canon IXUS 220HS - - - Canon PowerShot A40 - - - Canon PowerShot SX1 IS -
    - 10 - 2.8 - Secure Digital, SDHC, MultiMediaCard, MMCPlus -
    + + Canon PowerShot ELPH 100 HS - https://live.staticflickr.com/cameras/72157607398275267_model_small_506f6616ce.jpg - https://live.staticflickr.com/cameras/72157607398275267_model_large_533d29fcab.jpg + https://live.staticflickr.com/cameras/72157626077723737_model_small_422bc9313f.jpg + https://live.staticflickr.com/cameras/72157626077723737_model_large_e95bc5563a.jpg - - Canon PowerShot SD770 IS + + Canon PowerShot SX120 IS
    10 - 2.5 + 3 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 + https://live.staticflickr.com/cameras/72157622008716929_model_small_7acbfb860f.jpg + https://live.staticflickr.com/cameras/72157622008716929_model_large_730372a5d9.jpg
    - - Canon PowerShot A3100 IS -
    - 12 -
    + + Canon PowerShot G5 - - Canon PowerShot S80 + + 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 SX100 IS
    8 2.5 - Secure Digital, MultiMediaCard + Secure Digital, MultiMediaCard, SDHC
    - https://live.staticflickr.com/cameras/162_model_small_e1565c67c9.jpg - https://live.staticflickr.com/cameras/162_model_large_571ee7b4bd.jpg + https://live.staticflickr.com/cameras/72157602254956013_model_small_c7fc8218ed.jpg + https://live.staticflickr.com/cameras/72157602254956013_model_large_ca3276f712.jpg
    - - Canon PowerShot SD950 IS + + Canon PowerShot A95
    - 12.1 - 2.5 - MultiMediaCard, Secure Digital + 5 + 1.8 + CompactFlash
    - https://live.staticflickr.com/cameras/72157602219148731_model_small_d208e9a3b0.jpg - https://live.staticflickr.com/cameras/72157602219148731_model_large_95eacd033f.jpg + https://live.staticflickr.com/cameras/58_model_small_1e7955211c.jpg + https://live.staticflickr.com/cameras/58_model_large_2f415e825f.jpg
    - - Canon PowerShot A85 + + Canon PowerShot SD1400 IS
    - 4 - 1.8 - CompactFlash (CF) Card + 12
    - https://live.staticflickr.com/cameras/123_model_small_64e30bc0c3.jpg - https://live.staticflickr.com/cameras/123_model_large_6a55c4cc59.jpg + https://live.staticflickr.com/cameras/72157623403735861_model_small_7b6eef712c.jpg + https://live.staticflickr.com/cameras/72157623403735861_model_large_6377095b94.jpg
    - - Canon PowerShot A60 - - - Canon PowerShot SD200 - - - Canon PowerShot SD890 IS + + Canon PowerShot SD790 IS
    10 - 2.5 - MultiMediaCard, Secure Digital, SDHC + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://live.staticflickr.com/cameras/72157604325182497_model_small_37aa89e826.jpg - https://live.staticflickr.com/cameras/72157604325182497_model_large_80e15aacfd.jpg + https://live.staticflickr.com/cameras/72157604206177666_model_small_61519d019b.jpg + https://live.staticflickr.com/cameras/72157604206177666_model_large_fe0abf6ac8.jpg
    - - Canon PowerShot S1 IS + + Canon PowerShot SD500
    - 3.2 - 1.5 - CompactFlash + 7.1 + 2 + Secure Digital (SD) Card
    - https://live.staticflickr.com/cameras/445_model_small_a6791e4c0a.jpg - https://live.staticflickr.com/cameras/445_model_large_7499eb1668.jpg + https://live.staticflickr.com/cameras/413_model_small_cde2faea24.jpg + https://live.staticflickr.com/cameras/413_model_large_9eff7352b6.jpg
    - - Canon PowerShot SD990 IS + + Canon PowerShot SD550
    - 14.7 + 7.1 2.5 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + Secure Digital, MultiMediaCard
    - https://live.staticflickr.com/cameras/72157607826378076_model_small_570b3e63da.jpg - https://live.staticflickr.com/cameras/72157607826378076_model_large_57edfd2df8.jpg + https://live.staticflickr.com/cameras/482_model_small_f8b4bfe6d8.jpg + https://live.staticflickr.com/cameras/482_model_large_033233faac.jpg
    - - Canon PowerShot S430 + + Canon EOS D30 - - Canon PowerShot A700 + + Canon PowerShot Pro1
    - 6 - 2.5 - MultiMediaCard, Secure Digital + 8 + 2 + CompactFlash
    - https://live.staticflickr.com/cameras/24_model_small_82f9fe11cf.jpg - https://live.staticflickr.com/cameras/24_model_large_9a1ac4b633.jpg + https://live.staticflickr.com/cameras/279_model_small_e6281ed159.jpg + https://live.staticflickr.com/cameras/279_model_large_ac13e907a7.jpg
    - - Canon PowerShot S10 - - - Canon PowerShot A50 + + Canon EOS 1D Canon PowerShot ELPH 110 HS @@ -1844,189 +1947,222 @@ https://live.staticflickr.com/cameras/72157629310448342_model_large_d505d94f18.jpg - - Canon EOS M2 + + Canon IXUS 220HS + + + Canon PowerShot A1000 IS +
    + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    - https://live.staticflickr.com/cameras/72157638486651333_model_small_dd694f802b.jpg - https://live.staticflickr.com/cameras/72157638486651333_model_large_ee0838b78e.jpg + https://live.staticflickr.com/cameras/72157607149127437_model_small_ea9ae41258.jpg + https://live.staticflickr.com/cameras/72157607149127437_model_large_c274e4a031.jpg
    - - Canon PowerShot S410 + + Canon PowerShot A640
    - 4 - 1.5 - CompactFlash (CF) Card + 10 + 2.5 + MultiMediaCard, Secure Digital, SDHC
    - https://live.staticflickr.com/cameras/49_model_small_a82d562b14.jpg - https://live.staticflickr.com/cameras/49_model_large_f7c124120b.jpg + https://live.staticflickr.com/cameras/1317_model_small_82221e6d98.jpg + https://live.staticflickr.com/cameras/1317_model_large_5c7290e792.jpg
    - - Canon PowerShot A430 + + Canon PowerShot A1100 IS
    - 4 - 1.8 - MultiMediaCard, Secure Digital (SD) Card + 12.1 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://live.staticflickr.com/cameras/7_model_small_b345a26c77.jpg - https://live.staticflickr.com/cameras/7_model_large_377848c90e.jpg + https://live.staticflickr.com/cameras/72157614912551863_model_small_6c2707008a.jpg + https://live.staticflickr.com/cameras/72157614912551863_model_large_3870e9c623.jpg
    - - Canon PowerShot SD100 - - - Canon PowerShot A20 + + Canon PowerShot S230 - - Canon PowerShot A580 + + Canon PowerShot S70
    - 8 - 2.5 - MMCplus + 7.1 + 1.8 + CompactFlash
    - https://live.staticflickr.com/cameras/72157604000068487_model_small_11826b37d5.jpg - https://live.staticflickr.com/cameras/72157604000068487_model_large_57e09b15a2.jpg + https://live.staticflickr.com/cameras/70_model_small_74b4f1d550.jpg + https://live.staticflickr.com/cameras/70_model_large_f9711ed374.jpg
    - - Canon PowerShot S20 + + Canon PowerShot A400 - - Canon PowerShot A420 + + Canon PowerShot A60 - - Canon PowerShot SX240 HS + + 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 A560 + + Canon PowerShot SD990 IS
    - 7.1 + 14.7 2.5 - Secure Digital, MultiMediaCard, SDHC + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://live.staticflickr.com/cameras/72157600291685735_model_small_c81b932be3.jpg - https://live.staticflickr.com/cameras/72157600291685735_model_large_6bcd9d3efc.jpg + https://live.staticflickr.com/cameras/72157607826378076_model_small_570b3e63da.jpg + https://live.staticflickr.com/cameras/72157607826378076_model_large_57edfd2df8.jpg
    - - Canon PowerShot A80 - - - Canon PowerShot A530 + + Canon PowerShot A460
    5 - 1.8 - MultiMediaCard, Secure Digital + 2 + MultiMediaCard, Secure Digital, SDHC
    - https://live.staticflickr.com/cameras/303_model_small_85ec2a9970.jpg - https://live.staticflickr.com/cameras/303_model_large_90dd997c32.jpg + https://live.staticflickr.com/cameras/72157600289350296_model_small_7fbe5bacab.jpg + https://live.staticflickr.com/cameras/72157600289350296_model_large_4a22860b7c.jpg
    - - Canon PowerShot SD700 IS + + Canon PowerShot S40 + + + Canon PowerShot S80
    - 6 + 8 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 + https://live.staticflickr.com/cameras/162_model_small_e1565c67c9.jpg + https://live.staticflickr.com/cameras/162_model_large_571ee7b4bd.jpg
    - - Canon PowerShot A1100 IS + + 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 EOS-1D C + + + Canon PowerShot ELPH 300HS
    12.1 - 2.5 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 2.7 + MultiMediaCard, Secure Digital, SDXC, SDHC
    - https://live.staticflickr.com/cameras/72157614912551863_model_small_6c2707008a.jpg - https://live.staticflickr.com/cameras/72157614912551863_model_large_3870e9c623.jpg + https://live.staticflickr.com/cameras/72157626177410605_model_small_384a9a5bf2.jpg + https://live.staticflickr.com/cameras/72157626177410605_model_large_ac6be593a2.jpg
    - - Canon PowerShot A610 + + Canon PowerShot S430 + + + Canon PowerShot A430
    - 5 - 2 - Secure Digital, MultiMediaCard + 4 + 1.8 + MultiMediaCard, Secure Digital (SD) Card
    - https://live.staticflickr.com/cameras/295_model_small_ec60d819ec.jpg - https://live.staticflickr.com/cameras/295_model_large_b9f67ef906.jpg + https://live.staticflickr.com/cameras/7_model_small_b345a26c77.jpg + https://live.staticflickr.com/cameras/7_model_large_377848c90e.jpg
    - - Canon PowerShot SD880 IS + + Canon PowerShot S20 + + + Canon PowerShot SD960 IS
    - 10 - 3 + 12.1 + 2.8 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 + https://live.staticflickr.com/cameras/72157615260434668_model_small_068dd2b166.jpg + https://live.staticflickr.com/cameras/72157615260434668_model_large_bddd57f961.jpg
    - - Canon PowerShot A510 + + Canon PowerShot SD950 IS
    - 3.2 - 1.8 + 12.1 + 2.5 MultiMediaCard, Secure Digital
    - https://live.staticflickr.com/cameras/103_model_small_b132094ab0.jpg - https://live.staticflickr.com/cameras/103_model_large_f8b0f7772c.jpg + https://live.staticflickr.com/cameras/72157602219148731_model_small_d208e9a3b0.jpg + https://live.staticflickr.com/cameras/72157602219148731_model_large_95eacd033f.jpg
    - - Canon PowerShot ELPH 300HS + + Canon PowerShot A700
    - 12.1 - 2.7 - MultiMediaCard, Secure Digital, SDXC, SDHC + 6 + 2.5 + MultiMediaCard, Secure Digital
    - https://live.staticflickr.com/cameras/72157626177410605_model_small_384a9a5bf2.jpg - https://live.staticflickr.com/cameras/72157626177410605_model_large_ac6be593a2.jpg + https://live.staticflickr.com/cameras/24_model_small_82f9fe11cf.jpg + https://live.staticflickr.com/cameras/24_model_large_9a1ac4b633.jpg
    - - Canon PowerShot A1000 IS + + Canon PowerShot SD10
    - 10 - 2.5 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 4 + 1.5 + Secure Digital, MultiMediaCard
    - https://live.staticflickr.com/cameras/72157607149127437_model_small_ea9ae41258.jpg - https://live.staticflickr.com/cameras/72157607149127437_model_large_c274e4a031.jpg + https://live.staticflickr.com/cameras/345_model_small_727b7fb8a6.jpg + https://live.staticflickr.com/cameras/345_model_large_0640966e76.jpg
    - - Canon PowerShot S30 + + Canon PowerShot A410
    - 3.2 - 1.8 - CompactFlash (CF) Card + 3.2 + 1.5 + MultiMediaCard, Secure Digital
    - https://live.staticflickr.com/cameras/681_model_small_b801bc3de5.jpg - https://live.staticflickr.com/cameras/681_model_large_fc4c035a37.jpg + https://live.staticflickr.com/cameras/18_model_small_4e47ea423d.jpg + https://live.staticflickr.com/cameras/18_model_large_dc8a8ee8b3.jpg
    - - Canon EOS 1D + + Canon PowerShot S300 + + + Canon PowerShot A300 Canon PowerShot A1200 @@ -2040,66 +2176,69 @@ https://live.staticflickr.com/cameras/72157626100347637_model_large_5815e8dea2.jpg - - Canon PowerShot A460 -
    - 5 - 2 - MultiMediaCard, Secure Digital, SDHC -
    + + Canon PowerShot A3000 IS - https://live.staticflickr.com/cameras/72157600289350296_model_small_7fbe5bacab.jpg - https://live.staticflickr.com/cameras/72157600289350296_model_large_4a22860b7c.jpg + https://live.staticflickr.com/cameras/72157623337752577_model_small_ff326581e0.jpg + https://live.staticflickr.com/cameras/72157623337752577_model_large_fa3577dc49.jpg - - Canon PowerShot SD940 IS + + Canon IXUS 255 HS + + + Canon PowerShot A3300 IS
    - 12.1 - 2.7 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 16 + 3 + Secure Digital (SD) Card
    - https://live.staticflickr.com/cameras/72157622084755657_model_small_1eaf6702b9.jpg - https://live.staticflickr.com/cameras/72157622084755657_model_large_b543294bc4.jpg + https://live.staticflickr.com/cameras/72157626169050894_model_small_9024e25b64.jpg + https://live.staticflickr.com/cameras/72157626169050894_model_large_11c60be00c.jpg
    - - Canon PowerShot SD10 + + Canon PowerShot SD100 + + + Canon PowerShot S410
    4 1.5 - Secure Digital, MultiMediaCard + CompactFlash (CF) Card
    - 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 + https://live.staticflickr.com/cameras/49_model_small_a82d562b14.jpg + https://live.staticflickr.com/cameras/49_model_large_f7c124120b.jpg - - Canon PowerShot A2000 IS + + Canon PowerShot SD980 IS
    - 10 + 12.1 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 + https://live.staticflickr.com/cameras/72157622084783391_model_small_1558771e45.jpg + https://live.staticflickr.com/cameras/72157622084783391_model_large_05e2884fe1.jpg
    - - Canon PowerShot A3000 IS + + Canon PowerShot A20 + + + Canon PowerShot SD110 + + + Canon PowerShot G1 + + + Canon PowerShot A495 - https://live.staticflickr.com/cameras/72157623337752577_model_small_ff326581e0.jpg - https://live.staticflickr.com/cameras/72157623337752577_model_large_fa3577dc49.jpg + https://live.staticflickr.com/cameras/72157623248701455_model_small_866f79da99.jpg + https://live.staticflickr.com/cameras/72157623248701455_model_large_d76121e78f.jpg @@ -2109,43 +2248,49 @@ 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 + + Canon PowerShot TX1
    - 5 + 7.1 1.8 - CompactFlash (CF) Card + MultiMediaCard, Secure Digital, SDHC
    - https://live.staticflickr.com/cameras/319_model_small_b6503c5e8f.jpg - https://live.staticflickr.com/cameras/319_model_large_a74142fbbb.jpg + https://live.staticflickr.com/cameras/72157600293208250_model_small_264ea2a837.jpg + https://live.staticflickr.com/cameras/72157600293208250_model_large_d7a965d3fb.jpg
    - - Canon PowerShot A300 + + 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 Pro90 IS + + Canon PowerShot S330 + + + Canon PowerShot A200 + + + Canon PowerShot S10 + + + Canon PowerShot SD970 IS
    - 3.2 - 1.8 - CompactFlash (CF) Card + 12.1 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus
    - https://live.staticflickr.com/cameras/1792_model_small_6ca66ff1ac.jpg - https://live.staticflickr.com/cameras/1792_model_large_2654c5d5de.jpg + https://live.staticflickr.com/cameras/72157616347164661_model_small_3f4b234723.jpg + https://live.staticflickr.com/cameras/72157616347164661_model_large_886fd1e530.jpg
    @@ -2160,6 +2305,12 @@ https://live.staticflickr.com/cameras/329_model_large_ab5abc906b.jpg + + Canon PowerShot SD3500 IS +
    + 14.1 +
    +
    Canon PowerShot SD20
    @@ -2172,108 +2323,177 @@ https://live.staticflickr.com/cameras/1056_model_large_c3b3853158.jpg - - Canon PowerShot A310 + + Canon PowerShot A10 - - Canon PowerShot A2100 IS + + Canon PowerShot Pro90 IS
    - 12.1 - 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 3.2 + 1.8 + CompactFlash (CF) Card
    - https://live.staticflickr.com/cameras/72157615813690609_model_small_85a05a0580.jpg - https://live.staticflickr.com/cameras/72157615813690609_model_large_5c483e0981.jpg + https://live.staticflickr.com/cameras/1792_model_small_6ca66ff1ac.jpg + https://live.staticflickr.com/cameras/1792_model_large_2654c5d5de.jpg
    - - Canon PowerShot A10 + + 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 A450 - - Canon PowerShot SD3500 IS + + Canon PowerShot A420 + + + Canon PowerShot A100 + + + Canon PowerShot A310 + + + Canon PowerShot SD40
    - 14.1 + 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 E1 + + Canon PowerShot A50 + + + 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 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 PowerShot A30 + + + Canon Elura 60 + + https://live.staticflickr.com/cameras/3243_model_small_7171eda644.jpg + https://live.staticflickr.com/cameras/3243_model_large_4b80555830.jpg + + + + Canon Optura 200 MC + + + 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 ZR85
    - 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 + https://live.staticflickr.com/cameras/2031_model_small_23f714666e.jpg + https://live.staticflickr.com/cameras/2031_model_large_b853e28789.jpg
    - - Canon PowerShot SD970 IS + + Canon ZR300
    - 12.1 - 3 - Secure Digital, SDHC, MultiMediaCard, MMCPlus + 2.4
    - https://live.staticflickr.com/cameras/72157616347164661_model_small_3f4b234723.jpg - https://live.staticflickr.com/cameras/72157616347164661_model_large_886fd1e530.jpg + https://live.staticflickr.com/cameras/4573_model_small_cdec1cc747.jpg + https://live.staticflickr.com/cameras/4573_model_large_6603ffbb98.jpg
    - - Canon PowerShot SD40 + + Canon DC10
    - 7.1 - 1.8 - Secure Digital, MultiMediaCard, SDHC + 2.5
    - https://live.staticflickr.com/cameras/50047_model_small_07b3b7b4c4.jpg - https://live.staticflickr.com/cameras/50047_model_large_21ac845732.jpg + https://live.staticflickr.com/cameras/1556_model_small_4687e277f0.jpg + https://live.staticflickr.com/cameras/1556_model_large_22f4d11350.jpg
    - - Canon PowerShot TX1 + + Canon ZR90 + + + Canon ZR200
    - 7.1 - 1.8 - MultiMediaCard, Secure Digital, SDHC + 2.4
    - https://live.staticflickr.com/cameras/72157600293208250_model_small_264ea2a837.jpg - https://live.staticflickr.com/cameras/72157600293208250_model_large_d7a965d3fb.jpg + https://live.staticflickr.com/cameras/834_model_small_32d5d5661c.jpg + https://live.staticflickr.com/cameras/834_model_large_0e0c1b4558.jpg
    - - Canon HV20 + + Canon Optura 20 + + + Canon ZR700
    2.7
    - https://live.staticflickr.com/cameras/72157600292920852_model_small_08ffbdf604.jpg - https://live.staticflickr.com/cameras/72157600292920852_model_large_3175d743e7.jpg + https://live.staticflickr.com/cameras/6046_model_small_f41b4b4d4e.jpg + https://live.staticflickr.com/cameras/6046_model_large_6c3b8985db.jpg
    - - Canon Optura 200 MC - - - Canon PowerShot A100 - - - Canon Optura 20 + + Canon Elura 85 Canon Optura 300 - - Canon ZR90 + + Canon ZR70 MC - - Canon GL2 + + 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 PowerShot SD430 Wireless @@ -2287,35 +2507,16 @@ https://live.staticflickr.com/cameras/414_model_large_a004c60da3.jpg - - Canon ZR65 MC - - - Canon Optura 40 + + Canon Optura 600
    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 + https://live.staticflickr.com/cameras/2644_model_small_2b31ee6a72.jpg + https://live.staticflickr.com/cameras/2644_model_large_c99852498a.jpg
    - - Canon PowerShot A30 - Canon ZR850
    @@ -2326,29 +2527,16 @@ https://live.staticflickr.com/cameras/72157600292491412_model_large_5f38b568a4.jpg - - Canon ZR600 -
    - 2.7 -
    + + Canon Optura Xi - https://live.staticflickr.com/cameras/1901_model_small_5e8b8ace02.jpg - https://live.staticflickr.com/cameras/1901_model_large_00bb945fd0.jpg + https://live.staticflickr.com/cameras/2327_model_small_4adaf0cbba.jpg + https://live.staticflickr.com/cameras/2327_model_large_afb3324063.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
    @@ -2359,40 +2547,23 @@ 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 Elura 50 - - 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 40 MC - - Canon Elura 85 + + Canon GL2 - - Canon Optura 600 + + Canon Optura 40
    2.5
    - https://live.staticflickr.com/cameras/2644_model_small_2b31ee6a72.jpg - https://live.staticflickr.com/cameras/2644_model_large_c99852498a.jpg + https://live.staticflickr.com/cameras/1766_model_small_f8791abed7.jpg + https://live.staticflickr.com/cameras/1766_model_large_dd791c27a3.jpg
    @@ -2405,26 +2576,19 @@ https://live.staticflickr.com/cameras/3454_model_large_2c7745a2c9.jpg - - Canon HV10 + + Canon Elura 65 + + + Canon DC20
    - 2.7 + 2.5
    - 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 + https://live.staticflickr.com/cameras/2706_model_small_c33b9358b4.jpg + https://live.staticflickr.com/cameras/2706_model_large_dc34c957f5.jpg - - Canon Elura 50 - Canon DC40
    @@ -2435,42 +2599,32 @@ https://live.staticflickr.com/cameras/2604_model_large_42c1d7eeed.jpg - - Canon Elura 65 - - - Canon Optura Xi + + Canon HV10 +
    + 2.7 +
    - https://live.staticflickr.com/cameras/2327_model_small_4adaf0cbba.jpg - https://live.staticflickr.com/cameras/2327_model_large_afb3324063.jpg + https://live.staticflickr.com/cameras/4250_model_small_0587b2f1d4.jpg + https://live.staticflickr.com/cameras/4250_model_large_485d09c770.jpg
    - - Canon Elura 80 + + Canon Optura 50
    2.5
    - https://live.staticflickr.com/cameras/3699_model_small_44534ffb98.jpg - https://live.staticflickr.com/cameras/3699_model_large_c50d67a3b0.jpg + https://live.staticflickr.com/cameras/2715_model_small_dc3a2c41df.jpg + https://live.staticflickr.com/cameras/2715_model_large_dcd9166601.jpg
    - - Canon Elura 40 MC + + Canon ZR65 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
    @@ -2481,39 +2635,9 @@ 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 diff --git a/src/test/resources/payloads/get/flickr.cameras.getBrands.xml b/src/test/resources/payloads/get/flickr.cameras.getBrands.xml index e1d60f1b..c3cfa103 100644 --- a/src/test/resources/payloads/get/flickr.cameras.getBrands.xml +++ b/src/test/resources/payloads/get/flickr.cameras.getBrands.xml @@ -5,43 +5,49 @@ + - - - - + + + + + + + + + + - - - - - + - + + - - - - - + + - - - + + + - + + + + + - + + \ 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 index caa2256e..9d87dc9b 100644 --- a/src/test/resources/payloads/get/flickr.commons.getInstitutions.xml +++ b/src/test/resources/payloads/get/flickr.commons.getInstitutions.xml @@ -1,6 +1,14 @@ + + CommonsTestAccount + + https://flickr.org + https://flickr.org + http://flickr.com/photos/200049760@N08/ + + NavyMedicine @@ -13,7 +21,7 @@ Colección Amadeo León - Boconó fotoleonbocono.tumblr.com - https://fotoleonbocono.tumblr.com/post/174576043211/flickr-commons + https://www.tumblr.com/fotoleonbocono-blog/174576043211/galer%C3%ADa-flickr-commons http://flickr.com/photos/bocono/ @@ -53,8 +61,8 @@ Liberas http://www.liberaalarchief.be/ - http://www.liberaalarchief.be/LiberaalArchief-NoKnownCopyrightRestrictions.pdf - http://flickr.com/photos/142575440@N02/ + http://www.liberaalarchief.be/doc/liberas_rights_statement.pdf + http://flickr.com/photos/liberas/ @@ -98,7 +106,7 @@ - sinaloaarchivohistorico + Sinaloa Fotografías Históricas http://ahgs.gob.mx/ http://ahgs.gob.mx/servicios-digitales/archivo-fotografico/ @@ -117,7 +125,7 @@ Regionaal Archief Alkmaar Commons www.archiefalkmaar.nl - https://www.regionaalarchiefalkmaar.nl/api-english + https://www.regionaalarchiefalkmaar.nl/over-ons-english/open-data-english http://flickr.com/photos/public-domain-archief-alkmaar/ @@ -186,7 +194,7 @@ - National Library of Medicine - History of Medicine + Archives of Medicine - NLM - NIH http://www.nlm.nih.gov/ http://www.nlm.nih.gov/hmd/collections/photos/flickr.html @@ -229,7 +237,7 @@ Cloyne & District Historical Society www.cloynepioneermuseum.ca - http://pioneer.mazinaw.on.ca/flickr_statement.php + https://pioneer.mazinaw.on.ca/licensing-terms/ http://flickr.com/photos/cdhs/ @@ -266,7 +274,7 @@ - SALT Research + Salt Research http://saltonline.org/en/anasayfa https://archives.saltresearch.org/salt/info_rights.jsp @@ -309,7 +317,7 @@ Miami U. Libraries - Digital Collections http://www.lib.miamioh.edu - http://www.lib.miamioh.edu/digital-collections-flickr-rights-statement + https://spec.lib.miamioh.edu/home/services/copyright/ http://flickr.com/photos/muohio_digital_collections/ @@ -317,7 +325,7 @@ The British Library www.bl.uk - http://www.bl.uk/aboutus/terms/copyright/index.html + https://www.bl.uk/about-us/terms-and-conditions/content-on-flickr-and-wikimedia-commons http://flickr.com/photos/britishlibrary/ @@ -329,14 +337,6 @@ 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 @@ -346,7 +346,7 @@ - Royal Australian Historical Society + libraryrahs@gmail.com http://www.rahs.org.au/ http://www.rahs.org.au/about-rahs/rahs-copyright-statement/ @@ -373,7 +373,7 @@ Schlesinger Library, RIAS, Harvard University http://www.radcliffe.harvard.edu/schlesinger-library - http://www.radcliffe.harvard.edu/schlesinger-library/permission-publish + https://www.radcliffe.harvard.edu/schlesinger-library/research-services/permissions-and-copyright http://flickr.com/photos/schlesinger_library/ @@ -405,7 +405,7 @@ Het Nieuwe Instituut - Architecture Collection http://www.thenewinstitute.nl - http://www.hetnieuweinstituut.nl/en/page/flickr-commons-rights-statement + https://collectie.hetnieuweinstituut.nl/en/flickr-commons-rights-statement http://flickr.com/photos/nai_collection/ @@ -429,7 +429,7 @@ 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/ + https://www.mennoniteusa.org/resource-portal/resource/archives-copyright-statement/ http://flickr.com/photos/mennonitechurchusa-archives/ @@ -442,21 +442,13 @@ - NSW State Archives and Records + MHNSW - State Archives Collection 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 @@ -490,10 +482,10 @@ - Riksarkivet (National Archives of Norway) + Arkivverket (National Archives of Norway) http://www.arkivverket.no/ - http://www.arkivverket.no/eng/content/view/full/9266 + https://www.arkivverket.no/en/about-us/the-use-of-photos http://flickr.com/photos/national_archives_of_norway/ @@ -565,7 +557,7 @@ National Library of Scotland http://www.nls.uk/ - http://www.nls.uk/copyright/index.html + https://www.nls.uk/copyright/ http://flickr.com/photos/nlscotland/ @@ -642,7 +634,7 @@ - Jewish Historical Society of the Upper Midwest + Upper Midwest Jewish Archives, University of Minne http://www.jhsum.org/ http://www.jhsum.org/collections/copyright/ @@ -685,7 +677,7 @@ LSE Library http://www2.lse.ac.uk/library/Home.aspx - http://www2.lse.ac.uk/library/archive/flickr_rights_statement.aspx + https://www.lse.ac.uk/library/about/library-rules-and-general-policies#:~:text=Flickr%20Rights%20Statement http://flickr.com/photos/lselibrary/ @@ -717,7 +709,7 @@ LlGC ~ NLW http://www.llgc.org.uk/ - http://www.llgc.org.uk/index.php?id=publicationrights#Flickr + https://www.library.wales/commercial-services/media/licensing http://flickr.com/photos/llgc/ @@ -741,7 +733,7 @@ Swedish National Heritage Board http://www.kms.raa.se/cocoon/bild/public_search.html - http://www.kms.raa.se/cocoon/bild/about.html + https://www.raa.se/hitta-information/arkiv-och-bibliotek/om-arkivet-och-biblioteket/fotografier/ http://flickr.com/photos/swedish_heritage_board/ @@ -757,7 +749,7 @@ OSU Special Collections & Archives : Commons http://osulibrary.oregonstate.edu/archives/ - http://osulibrary.oregonstate.edu/archives/FlickrCommonsNoKnownCopyrightsRestrictions.html + http://scarc.library.oregonstate.edu/duplication.html http://flickr.com/photos/osucommons/ @@ -813,7 +805,7 @@ Australian War Memorial collection http://www.awm.gov.au/ - http://www.awm.gov.au/about/copyright/index.asp + https://www.awm.gov.au/about/organisation/corporate/copyright http://flickr.com/photos/australian-war-memorial/ @@ -826,10 +818,10 @@ - Musée McCord Museum + Musée McCord Stewart Museum http://www.mccord-museum.qc.ca/ - http://www.mccord-museum.qc.ca/en/copyright.html#noknowncopyright + https://www.musee-mccord-stewart.ca/en/collections/photographic-services-and-copyright/ http://flickr.com/photos/museemccordmuseum/ @@ -842,10 +834,10 @@ - State Library of New South Wales collection + State Library of NSW http://www.sl.nsw.gov.au/ - http://www.sl.nsw.gov.au/about/policies/copyright.html + https://www.sl.nsw.gov.au/copyright http://flickr.com/photos/statelibraryofnsw/ @@ -885,7 +877,7 @@ bibliothequedetoulouse http://www.bm-toulouse.fr/ - http://www.bibliothequedetoulouse.fr/fr/catalogues/02-mentions_legales.jsp + https://www.bibliotheque.toulouse.fr/pratique/nous-suivre/ http://flickr.com/photos/bibliothequedetoulouse/ diff --git a/src/test/resources/payloads/get/flickr.favorites.getList.xml b/src/test/resources/payloads/get/flickr.favorites.getList.xml index 6a84b572..5baebed3 100644 --- a/src/test/resources/payloads/get/flickr.favorites.getList.xml +++ b/src/test/resources/payloads/get/flickr.favorites.getList.xml @@ -1,7 +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 index e132b59d..01a8f4c3 100644 --- a/src/test/resources/payloads/get/flickr.groups.getInfo.xml +++ b/src/test/resources/payloads/get/flickr.groups.getInfo.xml @@ -3,11 +3,11 @@ FlickrCentral <b>Welcome to FlickrCentral!</b> -Just like Grand Central but without the oyster bar, the trains, New York city... +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> +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>. +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. @@ -18,26 +18,26 @@ We adhere to Flickr's <a href="http://www.flickr.com/groups_guidelines.g - 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'. +- 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: +- <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. +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 its 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 + 315110 + 8482392 + 12896 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! + 1714311128 + As of January 2021 the pool limit is 25 photos TOTAL from any user. If you want to add new stuff, you need to remove other 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 index 60005481..0fd83624 100644 --- a/src/test/resources/payloads/get/flickr.groups.members.getList.xml +++ b/src/test/resources/payloads/get/flickr.groups.members.getList.xml @@ -1,55 +1,55 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index 347eee51..ad458faf 100644 --- a/src/test/resources/payloads/get/flickr.groups.pools.getGroups.xml +++ b/src/test/resources/payloads/get/flickr.groups.pools.getGroups.xml @@ -1,8 +1,8 @@ - + - + \ 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 index ef753482..bf94214b 100644 --- a/src/test/resources/payloads/get/flickr.groups.search.xml +++ b/src/test/resources/payloads/get/flickr.groups.search.xml @@ -1,105 +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 index 19ff1469..093a478a 100644 --- a/src/test/resources/payloads/get/flickr.interestingness.getList.xml +++ b/src/test/resources/payloads/get/flickr.interestingness.getList.xml @@ -1,106 +1,106 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + \ 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 index d5b6c52a..6357975c 100644 --- a/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml +++ b/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml @@ -1,505 +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 + + 13188 + 12316 + 13154 + 10119 + 13186 + 7920 + 7051 + 13177 + 13184 + 12315 + 13183 + 13182 + 5143 + 13178 + 13179 + 13181 + 13180 + 12984 + 12985 + 13087 + 13176 + 13175 + 13174 + 13173 + 13172 + 12528 + 13170 + 13171 + 10294 + 12782 + 13168 + 13155 + 13167 + 13166 + 13165 + 13164 + 13162 + 13161 + 13160 + 13159 + 13158 + 13157 + 13156 + 13153 + 13152 + 12999 + 13150 + 13149 + 13148 + 13147 + 13146 + 13145 + 13144 + 13143 + 13142 + 13141 + 13140 + 13139 + 13138 + 13137 + 13136 + 13135 + 13071 + 13134 + 13133 + 10290 + 12435 + 13102 + 5519 + 5508 + 5442 + 5387 + 5354 + 5277 + 5244 + 5156 + 5123 + 5057 + 5090 + 6986 + 12797 + 13131 + 9128 + 13130 + 12666 + 12871 + 8209 + 13128 + 10032 + 6882 + 10403 + 13127 + 13126 + 12400 + 9504 + 13120 + 13124 + 13123 + 13122 + 13121 + 9142 + 7565 + 13118 + 13117 + 13116 + 13115 + 13114 + 13113 + 6277 + 8057 + 8013 + 6510 + 13111 + 12317 + 13110 + 5607 + 5596 + 13109 + 5497 + 5464 + 5200 + 5178 + 5101 + 5035 + 12432 + 13108 + 13107 + 7578 + 13106 + 13105 + 12629 + 6354 + 13091 + 13104 + 13007 + 13096 + 13103 + 13094 + 13101 + 13100 + 13099 + 13098 + 9089 + 13097 + 13083 + 6965 + 13095 + 13093 + 13092 + 8211 + 13090 + 13089 + 6936 + 13088 + 5958 + 13086 + 13085 + 13084 + 13082 + 13081 + 13080 + 6731 + 13079 + 13078 + 13077 + 13072 + 7309 + 13075 + 13074 + 13026 + 8256 + 11552 + 13070 + 13073 + 11628 + 8029 + 13069 + 13042 + 13067 + 13066 + 13065 + 13064 + 13063 + 13062 + 13061 + 13060 + 13058 + 13057 + 12372 + 9503 + 5939 + 13045 + 5288 + 13053 + 7329 + 13052 + 13051 + 13050 + 13049 + 13046 + 8031 + 13044 + 12235 + 13043 + 13041 + 13040 + 13039 + 13038 + 12195 + 12450 + 6291 + 6280 + 12419 + 13034 + 13032 + 5884 + 5796 + 5290 + 5794 + 5728 + 6962 + 6940 + 13030 + 13029 + 13027 + 6660 + 6616 + 7782 + 7760 + 6658 + 6647 + 6935 + 13025 + 12453 + 13024 + 13020 + 13022 + 13021 + 13019 + 13018 + 13017 + 13014 + 13011 + 13004 + 13012 + 13010 + 12540 + 6383 + 6317 + 13006 + 6283 + 13003 + 13002 + 5321 + 5310 + 13000 + 12990 + 12998 + 12989 + 12996 + 12993 + 12992 + 10522 + 12987 + 12988 + 7307 + 7296 + 12986 + 12972 + 11153 + 12982 + 12981 + 12980 + 12979 + 12978 + 12977 + 12975 + 12931 + 7133 + 7122 + 6768 + 6746 + 6324 + 6856 + 6845 + 6258 + 6247 + 7958 + 7881 + 6715 + 6682 + 12973 + 12898 + 12974 + 7318 + 12970 + 12969 + 12929 + 6460 + 6438 + 7606 + 7595 + 12968 + 12967 + 12862 + 12966 + 12933 + 6278 + 12928 + 12927 + 12925 + 12924 + 12923 + 12922 + 8174 + 12921 + 12920 + 12919 + 12918 + 12917 + 12916 + 12915 + 12914 + 12913 + 12912 + 12911 + 12910 + 12909 + 12908 + 12907 + 12906 + 12905 + 12904 + 12903 + 12902 + 12901 + 6704 + 6869 + 6847 + 6944 + 6922 + 12893 + 12888 + 7374 + 12897 + 12894 + 12892 + 11584 + 12889 + 12887 + 12883 + 6803 + 6031 + 6009 + 7254 + 7936 + 7859 + 12886 + 12874 + 12884 + 6341 + 6275 + 6693 + 6676 + 7428 + 7362 + 12882 + 12881 + 11469 + 12483 + 12880 + 12877 + 12879 + 12878 + 12876 + 12875 + 12873 + 6289 + 10291 + 5266 + 5673 + 5640 + 6599 + 6566 + 7001 + 6946 + 7705 + 5222 + 5488 + 5477 + 6572 + 6528 + 5255 + 12869 + 7903 + 7529 + 12662 + 12867 + 12866 + 5453 + 12864 + 12863 + 12861 + 6282 + 12738 + 12858 + 12857 + 12856 + 12849 + 12280 + 12845 + 12846 + 12855 + 12848 + 12854 + 12852 + 12851 + 12844 + 12850 + 12838 + 6044 + 12847 + 12841 + 5431 + 7485 + 7441 + 12223 + 5001 + 10555 + 12840 + 12839 + 12836 + 6905 + 6894 + 7397 + 7386 + 12772 + 12685 + 12832 + 10821 + 12835 + 12831 + 12830 + 12829 + 12828 + 12730 + 12827 + 12826 + 12825 + 8971 + 12821 + 12818 + 12820 + 12819 + 12814 + 5851 + 5840 + 7265 + 12736 + 12807 + 12816 + 12815 + 12812 + 12813 + 12809 + 12805 + 12787 + 12460 + 8040 + 12682 + 12804 + 12802 + 12801 + 12764 + 5301 + 12795 + 9331 + 12794 + 12793 + 12792 + 6279 + 12791 + 12547 + 12790 + 12789 + 12788 + 12637 + 6890 + 10003 + 7837 + 12786 + 12785 + 12362 + 12783 + 12781 + 5585 + 6135 + 6102 + 12780 + 12779 \ 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 index a70c9032..dd2a3be4 100644 --- a/src/test/resources/payloads/get/flickr.people.getGroups.xml +++ b/src/test/resources/payloads/get/flickr.people.getGroups.xml @@ -1,8 +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 index 25a1eff4..e48e870d 100644 --- a/src/test/resources/payloads/get/flickr.people.getInfo.xml +++ b/src/test/resources/payloads/get/flickr.people.getInfo.xml @@ -1,20 +1,20 @@ - + boncey_test Darren Greaves a35471fa063d334a497c1ad805a0bbf4d1f77641 London, England - - I am <a href="https://flickr.com/photos/boncey">boncey</a>'s test account. + + 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 + https://www.flickr.com/photos/boncey_test/ 2009-12-07 14:28:39 1260224919 - 100 - 106 + 35 + 108 \ 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 index 1ebeccec..d72d1c47 100644 --- a/src/test/resources/payloads/get/flickr.people.getPhotos.xml +++ b/src/test/resources/payloads/get/flickr.people.getPhotos.xml @@ -1,20 +1,20 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ 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 index 1bba3577..a4e9bf27 100644 --- a/src/test/resources/payloads/get/flickr.people.getPublicGroups.xml +++ b/src/test/resources/payloads/get/flickr.people.getPublicGroups.xml @@ -1,7 +1,8 @@ - + + \ 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 index d01bda7f..747499a7 100644 --- a/src/test/resources/payloads/get/flickr.people.getUploadStatus.xml +++ b/src/test/resources/payloads/get/flickr.people.getUploadStatus.xml @@ -1,6 +1,6 @@ - + boncey_test diff --git a/src/test/resources/payloads/get/flickr.photos.getContactsPhotos.xml b/src/test/resources/payloads/get/flickr.photos.getContactsPhotos.xml index 02641278..d48a3544 100644 --- a/src/test/resources/payloads/get/flickr.photos.getContactsPhotos.xml +++ b/src/test/resources/payloads/get/flickr.photos.getContactsPhotos.xml @@ -1,10 +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 index ac297d56..1219c2c2 100644 --- a/src/test/resources/payloads/get/flickr.photos.getContactsPublicPhotos.xml +++ b/src/test/resources/payloads/get/flickr.photos.getContactsPublicPhotos.xml @@ -1,10 +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 index 9d2543cd..7373ae9e 100644 --- a/src/test/resources/payloads/get/flickr.photos.getContext.xml +++ b/src/test/resources/payloads/get/flickr.photos.getContext.xml @@ -1,6 +1,6 @@ -100 +35 \ 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 index 8a27e575..8be69077 100644 --- a/src/test/resources/payloads/get/flickr.photos.getCounts.xml +++ b/src/test/resources/payloads/get/flickr.photos.getCounts.xml @@ -1,6 +1,6 @@ - + \ 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 index 0201e1d8..653dd051 100644 --- a/src/test/resources/payloads/get/flickr.photos.getInfo.xml +++ b/src/test/resources/payloads/get/flickr.photos.getInfo.xml @@ -1,11 +1,11 @@ - + Robot Description - + @@ -14,9 +14,9 @@ - green - grn - grngrn + green + grn + grngrn Daḩl Hīt diff --git a/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml b/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml index ea5ee8f4..360a473a 100644 --- a/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml +++ b/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml @@ -1,96 +1,31 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index ebaf0206..3506b0c4 100644 --- a/src/test/resources/payloads/get/flickr.photos.getRecent.xml +++ b/src/test/resources/payloads/get/flickr.photos.getRecent.xml @@ -1,105 +1,104 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index a423f366..00760342 100644 --- a/src/test/resources/payloads/get/flickr.photos.getUntagged.xml +++ b/src/test/resources/payloads/get/flickr.photos.getUntagged.xml @@ -1,97 +1,31 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/payloads/get/flickr.photos.search.xml b/src/test/resources/payloads/get/flickr.photos.search.xml index 32c7802f..c91ffe91 100644 --- a/src/test/resources/payloads/get/flickr.photos.search.xml +++ b/src/test/resources/payloads/get/flickr.photos.search.xml @@ -1,38 +1,38 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index d5070a1d..9195ed68 100644 --- a/src/test/resources/payloads/get/flickr.photosets.getInfo.xml +++ b/src/test/resources/payloads/get/flickr.photosets.getInfo.xml @@ -1,6 +1,6 @@ - + PhotosetsInterfaceTest JUnit test, should be deleted diff --git a/src/test/resources/payloads/get/flickr.photosets.getList.xml b/src/test/resources/payloads/get/flickr.photosets.getList.xml index fb64a172..3d25335f 100644 --- a/src/test/resources/payloads/get/flickr.photosets.getList.xml +++ b/src/test/resources/payloads/get/flickr.photosets.getList.xml @@ -1,22 +1,22 @@ - + PhotosetsInterfaceTest JUnit test, should be deleted - + test - + - + test A test photoset - + - + Places diff --git a/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml b/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml index a5b9c1a9..a8097b82 100644 --- a/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml +++ b/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml @@ -1,4 +1,4 @@ - + \ 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 index 179da487..bdb3a656 100644 --- a/src/test/resources/payloads/get/flickr.places.tagsForPlace.xml +++ b/src/test/resources/payloads/get/flickr.places.tagsForPlace.xml @@ -1,105 +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 + landscape + lake + landschaft + leaves + leica + landscapephotography + insect + house + iphone + leaf + history + le + landscapes + lady + home + lancashire + landmark + large + laterne + leefilters + hongkong + imagen + insects + langzeitbelichtung + laniebla + lakes + lanamuroise + landschap + lantern + latvia + leafs + lee + honesties + honesty + houthavens + iamsaintmarché + icamesofarforbeauty + imposing + isoasa200 + jewelry + jol + justagirlwithacamera + kaldt + kalt + kiltro + kolorina + korfu + kushti + kveld + kwuntong + köpingsvik + körnchen59 + körner + laadbrug + labalagne + lacura + lagaronne + lagrave + lakeconjola + lakedistrict + lakedistrictnationalpark + lakelandscape + lamps + land + landscapefineart + landscapephotos + landscapescenery + landschaftsfotografie + landwirtschaft + lanercost + lanercostruins + lanzarote + larga + largaexposicion + largefloweredtickseed + largodoamparo + largoflorida + laridae + larusglaucescens + lasallecanyon + latin + latino + lattina + latvianbeauty + latvija + lauda + lauderdale + launceston + laura + laurel + laurier + laurore + lauwersrmeer + lavaflowsunset + lavage + laverlesmains + lawn + lazariel + leaguecricket + leagueleague \ 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 index 3dd8fd7b..781a5d6e 100644 --- a/src/test/resources/payloads/get/flickr.reflection.getMethods.xml +++ b/src/test/resources/payloads/get/flickr.reflection.getMethods.xml @@ -36,7 +36,6 @@ 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 @@ -108,6 +107,7 @@ flickr.photos.getWithoutGeoData flickr.photos.licenses.getInfo flickr.photos.licenses.setLicense + flickr.photos.licenses.getLicenseHistory flickr.photos.notes.add flickr.photos.notes.delete flickr.photos.notes.edit @@ -181,6 +181,7 @@ flickr.stats.getCollectionReferrers flickr.stats.getCollectionStats flickr.stats.getCSVFiles + flickr.stats.getMostPopularPhotoDateRange flickr.stats.getPhotoDomains flickr.stats.getPhotoReferrers flickr.stats.getPhotosetDomains diff --git a/src/test/resources/payloads/get/flickr.tags.getClusterPhotos.xml b/src/test/resources/payloads/get/flickr.tags.getClusterPhotos.xml index 999af65f..8e1c54a7 100644 --- a/src/test/resources/payloads/get/flickr.tags.getClusterPhotos.xml +++ b/src/test/resources/payloads/get/flickr.tags.getClusterPhotos.xml @@ -20,7 +20,6 @@ - \ 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 index a3dd9e29..127f4d3d 100644 --- a/src/test/resources/payloads/get/flickr.tags.getHotList.xml +++ b/src/test/resources/payloads/get/flickr.tags.getHotList.xml @@ -4,142 +4,142 @@ -fs210502 +april - + -fotosondag +bretagne - + -budding +astrophotography - + -longexposure +seascape - + -spirande +waterfall - + -macromondays +virginia - + -sony +bridge - + -brittany +light - + -abstract +deathvalley - + -españa +urbex - + -scotland +vert - + -beautiful +cornwall - + -thailand +frankreich - + -rocks +nyc - + -m42 +california - + -niedersachsen +ciel - + -reflection +duck - + -waterfall +bolivia - + -720nm +yorkshire - + -light +sonnenuntergang - + diff --git a/src/test/resources/payloads/get/flickr.tags.getListUser.xml b/src/test/resources/payloads/get/flickr.tags.getListUser.xml index b893f029..f6eaa363 100644 --- a/src/test/resources/payloads/get/flickr.tags.getListUser.xml +++ b/src/test/resources/payloads/get/flickr.tags.getListUser.xml @@ -40,6 +40,7 @@ filmdev:recipe=2307 filmdev:recipe=2347 filmdev:recipe=2355 + filmdev:recipe=5519 filmdev:recipe=6417 filmdev:recipe=9083 flickr diff --git a/src/test/resources/payloads/get/flickr.tags.getListUserRaw.xml b/src/test/resources/payloads/get/flickr.tags.getListUserRaw.xml index cb903ab6..483af164 100644 --- a/src/test/resources/payloads/get/flickr.tags.getListUserRaw.xml +++ b/src/test/resources/payloads/get/flickr.tags.getListUserRaw.xml @@ -188,12 +188,39 @@ filmdev:recipe=335 - - filmdev:recipe=5035 + + filmdev:recipe=5002 + + + filmdev:recipe=5013 filmdev:recipe=522 + + filmdev:recipe=5288 + + + filmdev:recipe=5301 + + + filmdev:recipe=5354 + + + filmdev:recipe=5387 + + + filmdev:recipe=5431 + + + filmdev:recipe=5519 + + + filmdev:recipe=5673 + + + filmdev:recipe=6020 + filmdev:recipe=608 @@ -206,6 +233,21 @@ filmdev:recipe=6417 + + filmdev:recipe=6566 + + + filmdev:recipe=6704 + + + filmdev:recipe=6922 + + + filmdev:recipe=6946 + + + filmdev:recipe=6977 + filmdev:recipe=7100 @@ -215,6 +257,9 @@ filmdev:recipe=7426 + + filmdev:recipe=7595 + filmdev:recipe=80 @@ -341,9 +386,6 @@ systems - - test - that diff --git a/src/test/resources/payloads/post/flickr.galleries.getInfo.xml b/src/test/resources/payloads/post/flickr.galleries.getInfo.xml index e44c4299..71453e75 100644 --- a/src/test/resources/payloads/post/flickr.galleries.getInfo.xml +++ b/src/test/resources/payloads/post/flickr.galleries.getInfo.xml @@ -1,6 +1,6 @@ - + Motorcycle Pics diff --git a/src/test/resources/payloads/post/flickr.photos.addTags.xml b/src/test/resources/payloads/post/flickr.photos.addTags.xml index 7b44d216..3271f2f6 100644 --- a/src/test/resources/payloads/post/flickr.photos.addTags.xml +++ b/src/test/resources/payloads/post/flickr.photos.addTags.xml @@ -1,6 +1,6 @@ - test + 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 index d81e00a8..0c03c258 100644 --- a/src/test/resources/payloads/post/flickr.photos.comments.addComment.xml +++ b/src/test/resources/payloads/post/flickr.photos.comments.addComment.xml @@ -1,6 +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.photosets.create.xml b/src/test/resources/payloads/post/flickr.photosets.create.xml index 668b8e82..70d2073c 100644 --- a/src/test/resources/payloads/post/flickr.photosets.create.xml +++ b/src/test/resources/payloads/post/flickr.photosets.create.xml @@ -1,4 +1,4 @@ - + \ 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 index 7eb11790..756b504b 100644 --- a/src/test/resources/payloads/post/flickr.test.echo.xml +++ b/src/test/resources/payloads/post/flickr.test.echo.xml @@ -3,14 +3,14 @@ flickr.test.echo test 20f26bfcb5a2b46a2c11fd1210d3b420 -2173728070 -s9J6iZTiT88Z89ezlHCu7eIKan4= +372917862 +Dd8y7BG5UKBXZamjZx6/U3IH82k= 72157628704501859-025864ab0471c9bc 20f26bfcb5a2b46a2c11fd1210d3b420 -1620055008 +1714311301 HMAC-SHA1 1.0 1 -s9J6iZTiT88Z89ezlHCu7eIKan4= +Dd8y7BG5UKBXZamjZx6/U3IH82k= 72157628704501859-025864ab0471c9bc \ No newline at end of file From c2ada701c193e7bc79248594ffd4e040119f2230 Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 28 Apr 2024 14:50:01 +0100 Subject: [PATCH 229/239] [maven-release-plugin] prepare release flickr4java-3.0.9 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index d4526b2e..4a4d17cf 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.9-SNAPSHOT + 3.0.9 jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -160,7 +160,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - HEAD + flickr4java-3.0.9 From be9e1453d46b02b14e84d99ce5fccb81644490b6 Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 28 Apr 2024 14:50:05 +0100 Subject: [PATCH 230/239] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 4a4d17cf..73f0652b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.9 + 3.0.10-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -160,7 +160,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - flickr4java-3.0.9 + HEAD From ad4c2a4d00f82f1882f676a5927217087922d58e Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 28 Apr 2024 15:02:18 +0100 Subject: [PATCH 231/239] Update version numbers for a release --- README.md | 4 ++-- build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1f94dcca..bcb0fb9a 100644 --- a/README.md +++ b/README.md @@ -49,14 +49,14 @@ An API key is required to use this API. You can [request one on Flickr](http:// ### Gradle - compile 'com.flickr4java:flickr4java:3.0.8' + compile 'com.flickr4java:flickr4java:3.0.9' ### Maven com.flickr4java flickr4java - 3.0.8 + 3.0.9 Flickr4Java is available on Maven Central so the above settings should be all you need. diff --git a/build.gradle b/build.gradle index 498c39a9..e7cef593 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '3.0.8' +version = '3.0.9' group = 'com.flickr4java.flickr' sourceCompatibility = '1.8' From 49a4616b99794115a94ac9c929afb7986fb84bbf Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 16 Nov 2025 16:24:29 +0000 Subject: [PATCH 232/239] Fix for fetching large photo URLs --- .../com/flickr4java/flickr/photos/Photo.java | 108 +++++++++++++++++- .../flickr4java/flickr/photos/PhotoUtils.java | 45 ++++++++ .../com/flickr4java/flickr/photos/Size.java | 38 +++++- .../flickr/test/PhotosInterfaceTest.java | 60 +++++++--- 4 files changed, 233 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/flickr4java/flickr/photos/Photo.java b/src/main/java/com/flickr4java/flickr/photos/Photo.java index cc18d532..8aac977b 100644 --- a/src/main/java/com/flickr4java/flickr/photos/Photo.java +++ b/src/main/java/com/flickr4java/flickr/photos/Photo.java @@ -55,6 +55,16 @@ protected synchronized SimpleDateFormat initialValue() { private static final String LARGE_2048_IMAGE_SUFFIX = "_k.jpg"; + private static final String EXTRA_LARGE_3072_IMAGE_SUFFIX = "_3k.jpg"; + + private static final String EXTRA_LARGE_4096_IMAGE_SUFFIX = "_4k.jpg"; + + private static final String EXTRA_LARGE_4096_F_IMAGE_SUFFIX = "_f.jpg"; + + private static final String EXTRA_LARGE_5120_IMAGE_SUFFIX = "_5k.jpg"; + + private static final String EXTRA_LARGE_6144_IMAGE_SUFFIX = "_6k.jpg"; + private static final String SQUARE_LARGE_IMAGE_SUFFIX = "_q.jpg"; private static final String SQUARE_320_IMAGE_SUFFIX = "_n.jpg"; @@ -77,6 +87,16 @@ protected synchronized SimpleDateFormat initialValue() { private Size large2048Size; + private Size extraLarge3072Size; + + private Size extraLarge4096Size; + + private Size extraLarge4096FSize; + + private Size extraLarge5120Size; + + private Size extraLarge6144Size; + private Size originalSize; private Size squareLargeSize; @@ -766,7 +786,7 @@ public String getLargeUrl() { public String getLarge1600Url() { if (large1600Size == null) { - return getBaseImageUrl() + LARGE_1600_IMAGE_SUFFIX; + return getSafeOriginalBaseImageUrl() + LARGE_1600_IMAGE_SUFFIX; } else { return large1600Size.getSource(); } @@ -774,12 +794,52 @@ public String getLarge1600Url() { public String getLarge2048Url() { if (large2048Size == null) { - return getBaseImageUrl() + LARGE_2048_IMAGE_SUFFIX; + return getSafeOriginalBaseImageUrl() + LARGE_2048_IMAGE_SUFFIX; } else { return large2048Size.getSource(); } } + public String getExtraLarge3072Url() { + if (extraLarge3072Size == null) { + return getSafeOriginalBaseImageUrl() + EXTRA_LARGE_3072_IMAGE_SUFFIX; + } else { + return extraLarge3072Size.getSource(); + } + } + + public String getExtraLarge4096Url() { + if (extraLarge4096Size == null) { + return getSafeOriginalBaseImageUrl() + EXTRA_LARGE_4096_IMAGE_SUFFIX; + } else { + return extraLarge4096Size.getSource(); + } + } + + public String getExtraLarge4096FUrl() { + if (extraLarge4096FSize == null) { + return getSafeOriginalBaseImageUrl() + EXTRA_LARGE_4096_F_IMAGE_SUFFIX; + } else { + return extraLarge4096FSize.getSource(); + } + } + + public String getExtraLarge5120Url() { + if (extraLarge5120Size == null) { + return getSafeOriginalBaseImageUrl() + EXTRA_LARGE_5120_IMAGE_SUFFIX; + } else { + return extraLarge5120Size.getSource(); + } + } + + public String getExtraLarge6144Url() { + if (extraLarge6144Size == null) { + return getSafeOriginalBaseImageUrl() + EXTRA_LARGE_6144_IMAGE_SUFFIX; + } else { + return extraLarge6144Size.getSource(); + } + } + public String getSquareLargeUrl() { if (squareLargeSize == null) { return getBaseImageUrl() + SQUARE_LARGE_IMAGE_SUFFIX; @@ -965,6 +1025,17 @@ private StringBuffer getOriginalBaseImageUrl() throws FlickrException, NullPoint return buffer; } + private StringBuffer getSafeOriginalBaseImageUrl() { + StringBuffer buffer = new StringBuffer(); + buffer.append(_getBaseImageUrl()); + if (getOriginalSecret().length() > 8) { + buffer.append(getOriginalSecret()); + } else { + buffer.append(getSecret()); + } + return buffer; + } + private StringBuffer _getBaseImageUrl() { StringBuffer buffer = new StringBuffer(); buffer.append("https://farm"); @@ -1057,6 +1128,16 @@ public void setSizes(Collection sizes) { large1600Size = size; } else if (size.getLabel() == Size.LARGE_2048) { large2048Size = size; + } else if (size.getLabel() == Size.EXTRA_LARGE_3072) { + extraLarge3072Size = size; + } else if (size.getLabel() == Size.EXTRA_LARGE_4096) { + extraLarge4096Size = size; + } else if (size.getLabel() == Size.EXTRA_LARGE_4096_F) { + extraLarge4096FSize = size; + } else if (size.getLabel() == Size.EXTRA_LARGE_5120) { + extraLarge5120Size = size; + } else if (size.getLabel() == Size.EXTRA_LARGE_6144) { + extraLarge6144Size = size; } else if (size.getLabel() == Size.ORIGINAL) { originalSize = size; } else if (size.getLabel() == Size.SQUARE_LARGE) { @@ -1088,7 +1169,8 @@ public Collection getSizes() { smallSize, squareSize, thumbnailSize, mediumSize, largeSize, large1600Size, large2048Size, originalSize, squareLargeSize, small320Size, medium640Size, medium800Size, - videoPlayer, siteMP4, videoOriginal, mobileMP4, hdMP4 + videoPlayer, siteMP4, videoOriginal, mobileMP4, hdMP4, + extraLarge3072Size, extraLarge4096Size, extraLarge4096FSize, extraLarge5120Size, extraLarge6144Size ); } @@ -1120,6 +1202,26 @@ public Size getLarge2048Size() { return large2048Size; } + public Size getExtraLarge3072Size() { + return extraLarge3072Size; + } + + public Size getExtraLarge4096Size() { + return extraLarge4096Size; + } + + public Size getExtraLarge4096FSize() { + return extraLarge4096FSize; + } + + public Size getExtraLarge5120Size() { + return extraLarge5120Size; + } + + public Size getExtraLarge6144Size() { + return extraLarge6144Size; + } + public Size getOriginalSize() { return originalSize; } diff --git a/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java b/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java index 8716d291..54a4387e 100644 --- a/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java @@ -201,6 +201,51 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme sizeT.setHeight(photoElement.getAttribute("height_k")); sizes.add(sizeT); } + urlTmp = photoElement.getAttribute("url_3k"); + if (urlTmp != null && urlTmp.startsWith("http")) { + Size sizeT = new Size(); + sizeT.setLabel(Size.EXTRA_LARGE_3072); + sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_3k")); + sizeT.setHeight(photoElement.getAttribute("height_3k")); + sizes.add(sizeT); + } + urlTmp = photoElement.getAttribute("url_4k"); + if (urlTmp != null && urlTmp.startsWith("http")) { + Size sizeT = new Size(); + sizeT.setLabel(Size.EXTRA_LARGE_4096); + sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_4k")); + sizeT.setHeight(photoElement.getAttribute("height_4k")); + sizes.add(sizeT); + } + urlTmp = photoElement.getAttribute("url_f"); + if (urlTmp != null && urlTmp.startsWith("http")) { + Size sizeT = new Size(); + sizeT.setLabel(Size.EXTRA_LARGE_4096_F); + sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_f")); + sizeT.setHeight(photoElement.getAttribute("height_f")); + sizes.add(sizeT); + } + urlTmp = photoElement.getAttribute("url_5k"); + if (urlTmp != null && urlTmp.startsWith("http")) { + Size sizeT = new Size(); + sizeT.setLabel(Size.EXTRA_LARGE_5120); + sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_5k")); + sizeT.setHeight(photoElement.getAttribute("height_5k")); + sizes.add(sizeT); + } + urlTmp = photoElement.getAttribute("url_6k"); + if (urlTmp != null && urlTmp.startsWith("http")) { + Size sizeT = new Size(); + sizeT.setLabel(Size.EXTRA_LARGE_6144); + sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_6k")); + sizeT.setHeight(photoElement.getAttribute("height_6k")); + sizes.add(sizeT); + } if (sizes.size() > 0) { photo.setSizes(sizes); } diff --git a/src/main/java/com/flickr4java/flickr/photos/Size.java b/src/main/java/com/flickr4java/flickr/photos/Size.java index 5e06bcc4..96d13567 100644 --- a/src/main/java/com/flickr4java/flickr/photos/Size.java +++ b/src/main/java/com/flickr4java/flickr/photos/Size.java @@ -134,6 +134,31 @@ public class Size { */ public static final int LARGE_2048 = 11; + /** + * Extra Large 3K, 3072 px on the longest side + */ + public static final int EXTRA_LARGE_3072 = 17; + + /** + * Extra Large 4K, 4096 px on the longest side + */ + public static final int EXTRA_LARGE_4096 = 18; + + /** + * Extra Large 4K, 4096 px on the longest side, only exists for 2:1 aspect ratio photos + */ + public static final int EXTRA_LARGE_4096_F = 19; + + /** + * Extra Large 5K, 5120 px on the longest side + */ + public static final int EXTRA_LARGE_5120 = 20; + + /** + * Extra Large 6K, 6144 px on the longest side + */ + public static final int EXTRA_LARGE_6144 = 21; + /** * Video, for playback on the site. * @@ -220,7 +245,9 @@ public String getLabelName() { } 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"); + "Medium 640", "Medium 800", "Large 1600", "Large 2048", + "Site MP4", "Video Player", "Video Original", "Mobile MP4", "HD MP4", + "X-Large 3K", "X-Large 4K", "X-Large 4K F", "X-Large 5K", "X-Large 6K"); /** * Set the String-representation of size. @@ -364,4 +391,13 @@ private boolean areEqual(Object x, Object y) { return x == null ? y == null : x.equals(y); } + + @Override + public String toString() { + return "Size{" + + "labelName='" + labelName + '\'' + + ", width=" + width + + ", height=" + height + + '}'; + } } diff --git a/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java index 50e205c8..d19052a6 100644 --- a/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java @@ -182,6 +182,42 @@ private void preparePhotoSizes() { size.setSource("urlHDMP4"); size.setUrl("urlHDMP4Page"); photoSizes.add(size); + size = new Size(); + size.setLabel("X-Large 3K"); + size.setWidth("3072"); + size.setHeight("2048"); + size.setSource("urlExtraLarge3072"); + size.setUrl("urlExtraLarge3072Page"); + photoSizes.add(size); + size = new Size(); + size.setLabel("X-Large 4K"); + size.setWidth("4096"); + size.setHeight("2048"); + size.setSource("urlExtraLarge4096"); + size.setUrl("urlExtraLarge4096Page"); + photoSizes.add(size); + size = new Size(); + size.setLabel("X-Large 4K F"); + size.setWidth("4096"); + size.setHeight("8192"); + size.setSource("urlExtraLarge4096F"); + size.setUrl("urlExtraLarge4096FPage"); + photoSizes.add(size); + size = new Size(); + size.setLabel("X-Large 5K"); + size.setWidth("5120"); + size.setHeight("4096"); + size.setSource("urlExtraLarge5120"); + size.setUrl("urlExtraLarge5120Page"); + photoSizes.add(size); + size = new Size(); + size.setLabel("X-Large 6K"); + size.setWidth("6144"); + size.setHeight("5120"); + size.setSource("urlExtraLarge6144"); + size.setUrl("urlExtraLarge6144Page"); + photoSizes.add(size); + } @Test @@ -321,8 +357,6 @@ public void testGetSizes() throws FlickrException { assertNotNull(sizes); sizes.forEach(size -> assertNotNull(size.getLabelName())); - Optional original = sizes.stream().filter(size -> size.getLabelName().equals("Original")).findFirst(); - assertTrue(original.isPresent()); } @Test @@ -508,6 +542,11 @@ public void testSetSizes() { 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()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_3k.jpg", p.getExtraLarge3072Url()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_4k.jpg", p.getExtraLarge4096Url()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_f.jpg", p.getExtraLarge4096FUrl()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_5k.jpg", p.getExtraLarge5120Url()); + assertEquals("https://farm1.staticflickr.com/server/id_secret_6k.jpg", p.getExtraLarge6144Url()); try { assertEquals("https://farm1.staticflickr.com/server/id_osecret_o.jpg", p.getOriginalUrl()); } catch (FlickrException ex) { @@ -525,6 +564,11 @@ public void testSetSizes() { assertEquals("urlMedium800", p.getMedium800Url()); assertEquals("urlLarge1600", p.getLarge1600Url()); assertEquals("urlLarge2048", p.getLarge2048Url()); + assertEquals("urlExtraLarge3072", p.getExtraLarge3072Url()); + assertEquals("urlExtraLarge4096", p.getExtraLarge4096Url()); + assertEquals("urlExtraLarge4096F", p.getExtraLarge4096FUrl()); + assertEquals("urlExtraLarge5120", p.getExtraLarge5120Url()); + assertEquals("urlExtraLarge6144", p.getExtraLarge6144Url()); assertEquals("urlVideoPlayer", p.getVideoPlayerUrl()); assertEquals("urlSiteMP4", p.getSiteMP4Url()); assertEquals("urlVideoOriginal", p.getVideoOriginalUrl()); @@ -533,16 +577,4 @@ 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); - } - } } From e6c5a2ff69dee62475701039e5da6e5a3ebf5a05 Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 16 Nov 2025 16:35:16 +0000 Subject: [PATCH 233/239] [maven-release-plugin] prepare release flickr4java-3.0.10 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 73f0652b..e660901f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.10-SNAPSHOT + 3.0.10 jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -160,7 +160,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - HEAD + flickr4java-3.0.10 From 9b37aef89ba8d785841667ee5ea6fd41b33355cf Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 16 Nov 2025 16:35:19 +0000 Subject: [PATCH 234/239] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index e660901f..90ad70d2 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.10 + 3.0.11-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -160,7 +160,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - flickr4java-3.0.10 + HEAD From 679ec501d9762cdd97466f2950952c9d4687f77c Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 16 Nov 2025 16:59:40 +0000 Subject: [PATCH 235/239] Migrate to new maven central plugin --- pom.xml | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/pom.xml b/pom.xml index 90ad70d2..d9ff9520 100644 --- a/pom.xml +++ b/pom.xml @@ -162,12 +162,6 @@ https://github.com/boncey/Flickr4Java HEAD - - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - - release @@ -203,17 +197,6 @@ - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.7 - true - - ossrh - https://oss.sonatype.org/ - true - - @@ -241,6 +224,15 @@ + + org.sonatype.central + central-publishing-maven-plugin + 0.9.0 + true + + central + + From 792bda23cac2462588865442968d2ff788aca78e Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 16 Nov 2025 17:00:00 +0000 Subject: [PATCH 236/239] [maven-release-plugin] prepare release flickr4java-3.0.11 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index d9ff9520..13c61ab1 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.11-SNAPSHOT + 3.0.11 jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -160,7 +160,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - HEAD + flickr4java-3.0.11 From 91b4ed65cd23c314e31eddd26c1179ea75cc2d12 Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 16 Nov 2025 17:00:03 +0000 Subject: [PATCH 237/239] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 13c61ab1..d3fc3d9f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.flickr4java flickr4java - 3.0.11 + 3.0.12-SNAPSHOT jar flickr4java Java API For Flickr. Fork of FlickrJ. @@ -160,7 +160,7 @@ scm:git:https://github.com/boncey/Flickr4Java.git scm:git:git@github.com:boncey/Flickr4Java.git https://github.com/boncey/Flickr4Java - flickr4java-3.0.11 + HEAD From 1a4a7668f056eaa029b641174b445562eeebcecc Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 16 Nov 2025 17:03:25 +0000 Subject: [PATCH 238/239] Increase version number to 3.0.10 --- README.md | 4 ++-- build.gradle | 2 +- pom.xml | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bcb0fb9a..cc3c1ca8 100644 --- a/README.md +++ b/README.md @@ -49,14 +49,14 @@ An API key is required to use this API. You can [request one on Flickr](http:// ### Gradle - compile 'com.flickr4java:flickr4java:3.0.9' + compile 'com.flickr4java:flickr4java:3.0.10' ### Maven com.flickr4java flickr4java - 3.0.9 + 3.0.10 Flickr4Java is available on Maven Central so the above settings should be all you need. diff --git a/build.gradle b/build.gradle index e7cef593..049f693a 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '3.0.9' +version = '3.0.10' group = 'com.flickr4java.flickr' sourceCompatibility = '1.8' diff --git a/pom.xml b/pom.xml index d3fc3d9f..817ee979 100644 --- a/pom.xml +++ b/pom.xml @@ -231,6 +231,7 @@ true central + true From 83e6075fd346bacec801eb3fcb7a33913cac2647 Mon Sep 17 00:00:00 2001 From: Darren Greaves Date: Sun, 16 Nov 2025 17:04:32 +0000 Subject: [PATCH 239/239] Increase version number to 3.0.11 --- README.md | 4 ++-- build.gradle | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index cc3c1ca8..90961797 100644 --- a/README.md +++ b/README.md @@ -49,14 +49,14 @@ An API key is required to use this API. You can [request one on Flickr](http:// ### Gradle - compile 'com.flickr4java:flickr4java:3.0.10' + compile 'com.flickr4java:flickr4java:3.0.11' ### Maven com.flickr4java flickr4java - 3.0.10 + 3.0.11 Flickr4Java is available on Maven Central so the above settings should be all you need. diff --git a/build.gradle b/build.gradle index 049f693a..28dab1d6 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'idea' apply plugin: 'maven' apply plugin: 'application' -version = '3.0.10' +version = '3.0.11' group = 'com.flickr4java.flickr' sourceCompatibility = '1.8'