diff --git a/Flickr4Java/.gitignore b/.gitignore similarity index 96% rename from Flickr4Java/.gitignore rename to .gitignore index 71df0227..0acb4470 100644 --- a/Flickr4Java/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.idea target .gradle build/ diff --git a/BUILDING.md b/BUILDING.md new file mode 100644 index 00000000..9a6c422a --- /dev/null +++ b/BUILDING.md @@ -0,0 +1,56 @@ +# 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 + +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 `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/CHANGELOG.txt b/CHANGELOG.txt similarity index 100% rename from Flickr4Java/CHANGELOG.txt rename to CHANGELOG.txt diff --git a/CONTRIB.md b/CONTRIB.md new file mode 100644 index 00000000..6d6f7d84 --- /dev/null +++ b/CONTRIB.md @@ -0,0 +1,17 @@ +## 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 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/CONTRIB.txt b/Flickr4Java/CONTRIB.txt deleted file mode 100644 index c00d154c..00000000 --- a/Flickr4Java/CONTRIB.txt +++ /dev/null @@ -1,7 +0,0 @@ -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 diff --git a/Flickr4Java/LICENSE-apache.txt b/Flickr4Java/LICENSE-apache.txt deleted file mode 100644 index 183b52c0..00000000 --- a/Flickr4Java/LICENSE-apache.txt +++ /dev/null @@ -1,56 +0,0 @@ -/* - * The Apache Software License, Version 1.1 - * - * - * Copyright (c) 1999 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Xerces" and "Apache Software Foundation" must - * not be used to endorse or promote products derived from this - * software without prior written permission. For written - * permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * nor may "Apache" appear in their name, without prior written - * permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation and was - * originally based on software copyright (c) 1999, International - * Business Machines, Inc., http://www.ibm.com. For more - * information on the Apache Software Foundation, please see - * . - */ diff --git a/Flickr4Java/LICENSE.txt b/Flickr4Java/LICENSE.txt deleted file mode 100644 index bbe3905f..00000000 --- a/Flickr4Java/LICENSE.txt +++ /dev/null @@ -1,45 +0,0 @@ -/*-- - - Copyright (C) 2005 Aetrion LLC. - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the disclaimer that follows - these conditions in the documentation and/or other materials - provided with the distribution. - - 3. The name "flickrj" must not be used to endorse or promote products - derived from this software without prior written permission. For - written permission, please contact me@anthonyeden.com. - - 4. Products derived from this software may not be called "flickrj", nor - may "flickrj" appear in their name, without prior written permission - from Aetrion LLC (license@aetrion.com). - - In addition, I request (but do not require) that you include in the - end-user documentation provided with the redistribution and/or in the - software itself an acknowledgement equivalent to the following: - "This product includes software developed by Aetrion LLC." - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - For more information on flickrj, please see . - - */ \ No newline at end of file diff --git a/Flickr4Java/pom.xml b/Flickr4Java/pom.xml deleted file mode 100644 index ed530280..00000000 --- a/Flickr4Java/pom.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - 4.0.0 - - com.flickr4java - flickr - 2.6-SNAPSHOT - jar - flickr4java - - - 1.6 - 1.2.17 - 4.11 - - - - - org.scribe - scribe - 1.3.5 - - - org.apache.axis - axis - 1.4 - - - log4j - log4j - ${log4jVersion} - - - - junit - junit - ${junitVersion} - test - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 2.3.2 - - ${javaVersion} - ${javaVersion} - - - - maven-release-plugin - 2.4.1 - - false - release - true - - - - - - - src/main/resources - - **/* - - - - true - src/main/resources - - - - - scm:git:https://github.com/callmeal/Flickr4Java.git - scm:git:git@github.com:callmeal/Flickr4Java.git - https://github.com/callmeal/Flickr4Java - HEAD - - - - bintray-boncey-Flickr4Java-Flickr4Java - boncey-Flickr4Java-Flickr4Java - https://api.bintray.com/maven/boncey/Flickr4Java/Flickr4Java - - - - - release - - - - maven-source-plugin - - - attach-sources - - jar - - - - - - maven-javadoc-plugin - - - attach-javadocs - - jar - - - - - - - - - diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java deleted file mode 100644 index 7266e481..00000000 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/REST.java +++ /dev/null @@ -1,450 +0,0 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -package com.flickr4java.flickr; - -import com.flickr4java.flickr.auth.Auth; -import com.flickr4java.flickr.util.Base64; -import com.flickr4java.flickr.util.DebugInputStream; -import com.flickr4java.flickr.util.IOUtilities; -import com.flickr4java.flickr.util.UrlUtilities; - -import org.apache.log4j.Logger; -import org.scribe.builder.ServiceBuilder; -import org.scribe.builder.api.FlickrApi; -import org.scribe.model.OAuthRequest; -import org.scribe.model.Token; -import org.scribe.model.Verb; -import org.scribe.oauth.OAuthService; -import org.w3c.dom.Document; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.StringReader; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.Map; -import java.util.Map.Entry; -import java.util.concurrent.TimeUnit; - -/** - * Transport implementation using the REST interface. - * - * @author Anthony Eden - * @version $Id: REST.java,v 1.26 2009/07/01 22:07:08 x-mago Exp $ - */ -public class REST extends Transport { - - private static final Logger logger = Logger.getLogger(REST.class); - - public static final String PATH = "/services/rest/"; - - private static final String CHARSET_NAME = "UTF-8"; - - private boolean proxyAuth = false; - - private String proxyUser = ""; - - private String proxyPassword = ""; - - private final DocumentBuilder builder; - - private static Object mutex = new Object(); - - private Integer connectTimeoutMs; - - private Integer readTimeoutMs; - - /** - * Construct a new REST transport instance. - */ - public REST() { - setTransportType(REST); - setHost(API_HOST); - setPath(PATH); - 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 sharedSecret) { - - OAuthRequest request = new OAuthRequest(Verb.GET, API_HOST + 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, sharedSecret); - service.signRequest(requestToken, request); - } - - if (Flickr.debugRequest) { - logger.debug("GET: " + request.getCompleteUrl()); - } - setTimeouts(request); - org.scribe.model.Response scribeResponse = request.send(); - - try { - - com.flickr4java.flickr.Response response = null; - synchronized (mutex) { - String strXml = scribeResponse.getBody(); - if (Flickr.debugStream) { - logger.debug(strXml); - } - 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(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 sharedSecret, boolean multipart) { - - OAuthRequest request = new OAuthRequest(Verb.POST, API_HOST + 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, sharedSecret); - service.signRequest(requestToken, request); - } - - if (multipart) { - // Ensure all parameters (including oauth) are added to payload so signature matches - parameters.putAll(request.getOauthParameters()); - request.addPayload(buildMultipartBody(parameters, getMultipartBoundary())); - } - - if (proxyAuth) { - request.addHeader("Proxy-Authorization", "Basic " + getProxyCredentials()); - } - - if (Flickr.debugRequest) { - logger.debug("POST: " + request.getCompleteUrl()); - } - - org.scribe.model.Response scribeResponse = request.send(); - - try { - com.flickr4java.flickr.Response response = null; - synchronized (mutex) { - String strXml = scribeResponse.getBody(); - if (Flickr.debugStream) { - logger.debug(strXml); - } - if (strXml.startsWith("oauth_problem=")) { - throw new FlickrRuntimeException(strXml); - } - Document document = builder.parse(new InputSource(new StringReader(strXml))); - response = (com.flickr4java.flickr.Response) responseClass.newInstance(); - response.parse(document); - } - return response; - } catch (IllegalAccessException e) { - throw new FlickrRuntimeException(e); - } catch (InstantiationException e) { - throw new FlickrRuntimeException(e); - } catch (SAXException e) { - throw new FlickrRuntimeException(e); - } catch (IOException e) { - throw new FlickrRuntimeException(e); - } - } - - /** - * - * @param parameters - * @param sharedSecret - * @return - */ - private OAuthService createOAuthService(Map parameters, String sharedSecret) { - OAuthService serviceBuilder; - 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(); - } - - return serviceBuilder; - } - - /** - * - * @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")) { - 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 { - buffer.write(("--" + boundary + "\r\n").getBytes(CHARSET_NAME)); - for (Entry entry : parameters.entrySet()) { - String key = entry.getKey(); - writeParam(key, entry.getValue(), buffer, boundary); - } - } 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) 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)); - 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=\"image.jpg\";\r\n").getBytes(CHARSET_NAME)); - buffer.write(("Content-Type: image/jpeg" + "\r\n\r\n").getBytes(CHARSET_NAME)); - buffer.write((byte[]) value); - buffer.write(("\r\n" + "--" + boundary + "\r\n").getBytes(CHARSET_NAME)); - } else { - buffer.write(("Content-Disposition: form-data; name=\"" + name + "\"\r\n\r\n").getBytes(CHARSET_NAME)); - buffer.write(((String) value).getBytes(CHARSET_NAME)); - buffer.write(("\r\n" + "--" + boundary + "\r\n").getBytes(CHARSET_NAME)); - } - } - - private void setTimeouts(HttpURLConnection conn) { - if (connectTimeoutMs != null) { - conn.setConnectTimeout(connectTimeoutMs); - } - if (readTimeoutMs != null) { - conn.setReadTimeout(readTimeoutMs); - } - } - - private void setTimeouts(OAuthRequest request) { - if (connectTimeoutMs != null) { - request.setConnectTimeout(connectTimeoutMs, TimeUnit.MILLISECONDS); - } - if (readTimeoutMs != null) { - request.setReadTimeout(readTimeoutMs, TimeUnit.MILLISECONDS); - } - } - - public void setConnectTimeoutMs(Integer connectTimeoutMs) { - this.connectTimeoutMs = connectTimeoutMs; - } - - public void setReadTimeoutMs(Integer readTimeoutMs) { - this.readTimeoutMs = readTimeoutMs; - } -} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java deleted file mode 100644 index df8af3c0..00000000 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/SOAPResponse.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.flickr4java.flickr; - -import java.util.Collection; -import java.util.Iterator; -import java.util.List; - -import org.apache.axis.message.SOAPBody; -import org.apache.axis.message.SOAPEnvelope; -import org.apache.axis.message.SOAPFault; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import com.flickr4java.flickr.util.XMLUtilities; - -/** - * Flickr SOAP Response object. - * - * @author Matt Ray - */ -public class SOAPResponse implements Response { - - private List payload; - - private String errorCode; - - private String errorMessage; - - private SOAPEnvelope envelope; - - public SOAPResponse(SOAPEnvelope envelope) { - this.envelope = envelope; - } - - 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()); - } - - SOAPFault fault = (SOAPFault) body.getFault(); - if (fault != null) { - System.err.println("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; - } - - public Element getPayload() { - if (payload.isEmpty()) { - throw new RuntimeException("SOAP response payload has no elements"); - } - return payload.get(0); - } - - public Collection getPayloadCollection() { - return payload; - } - - public boolean isError() { - return errorCode != null; - } - - public String getErrorCode() { - return errorCode; - } - - public String getErrorMessage() { - return errorMessage; - } - -} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java deleted file mode 100644 index b91d781e..00000000 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -package com.flickr4java.flickr.contacts; - -import java.io.Serializable; - -/** - * 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 static final OnlineStatus OFFLINE = new OnlineStatus(OFFLINE_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 int type; - - private OnlineStatus(int type) { - this.type = 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() { - return type; - } - - /** - * Get an OnlineStatus object for a given 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); - } - } - - /** - * Get the OnlineStatus value for a given int represented as a String - * - * @param type - * The int represented as a String - * @return The OnlineStatus object - */ - public static OnlineStatus fromType(String type) { - if (type == null || "".equals(type)) { - return UNKNOWN; - } else { - return fromType(Integer.parseInt(type)); - } - } -} 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 deleted file mode 100644 index e0f5afa1..00000000 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * @author acaplan - */ -package com.flickr4java.flickr.photos.suggestions; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.w3c.dom.Element; - -import com.flickr4java.flickr.Flickr; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.Response; -import com.flickr4java.flickr.Transport; - -/** - * @author acaplan - * - */ -public class SuggestionsInterface { - - public static final String METHOD_APPROVE_SUGGESTION = "flickr.photos.suggestions.approveSuggestion"; - - public static final String METHOD_REJECT_SUGGESTION = "flickr.photos.suggestions.rejectSuggestion"; - - public static final String METHOD_REMOVE_SUGGESTION = "flickr.photos.suggestions.removeSuggestion"; - - public static final String METHOD_SUGGEST_LOCATION = "flickr.photos.suggestions.suggestLocation"; - - public static final String METHOD_GET_LIST = "flickr.photos.suggestions.getList"; - - private String apiKey; - - private String sharedSecret; - - private Transport transportAPI; - - public SuggestionsInterface(String apiKey, String sharedSecret, Transport transportAPI) { - this.apiKey = apiKey; - this.sharedSecret = sharedSecret; - this.transportAPI = transportAPI; - } - - public void approveSuggestion(String suggestionId) throws FlickrException { - act(suggestionId, METHOD_APPROVE_SUGGESTION); - } - - public void rejectSuggestion(String suggestionId) throws FlickrException { - act(suggestionId, METHOD_REJECT_SUGGESTION); - } - - public void removeSuggestion(String suggestionId) throws FlickrException { - act(suggestionId, METHOD_REMOVE_SUGGESTION); - } - - private void act(String suggestionId, String method) throws FlickrException { - Map 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); - if (response.isError()) { - throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); - } - } - - public void suggestLocation(String photoId, double lat, double lon, int accuracy, String woe_id, String place_id, String note) throws FlickrException { - Map 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); - if (accuracy > 0 && accuracy <= 16) { - parameters.put("accuracy", accuracy); - } - if (woe_id != null) { - parameters.put("woe_id", woe_id); - } - if (place_id != null) { - parameters.put("place_id", place_id); - } - if (note != null) { - parameters.put("note", note); - } - - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); - if (response.isError()) { - throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); - } - } - - 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); - if (response.isError()) { - throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); - } - - Element suggestions = response.getPayload(); - - return null; - } - -} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java deleted file mode 100644 index b114e872..00000000 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/Uploader.java +++ /dev/null @@ -1,290 +0,0 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ - -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; -import com.flickr4java.flickr.Transport; -import com.flickr4java.flickr.util.IOUtilities; -import com.flickr4java.flickr.util.StringUtilities; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.Collection; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; - -/** - * Upload a photo. - *

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

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

- * - * TicketId's can be tracked with {@link com.flickr4java.flickr.photos.upload.UploadInterface#checkTickets(Set)} for completion. - * - * @author Anthony Eden - * @version $Id: Uploader.java,v 1.12 2009/12/15 20:57:49 x-mago Exp $ - */ -public class Uploader { - /** - * - */ - private static final String SERVICES_REPLACE_PATH = "/services/replace/"; - - /** - * - */ - private static final String SERVICES_UPLOAD_PATH = "/services/upload/"; - - private final String apiKey; - - private final String sharedSecret; - - private final Transport transport; - - /** - * Construct an Uploader. - * - * @param apiKey - * The API key - */ - public Uploader(String apiKey, String sharedSecret) { - this.apiKey = apiKey; - this.sharedSecret = sharedSecret; - this.transport = new REST(); - this.transport.setResponseClass(UploaderResponse.class); - } - - /** - * Upload a photo from a byte-array. - * - * @param data - * The photo data as a byte array - * @param metaData - * The meta data - * @return photoId or ticketId - * @throws FlickrException - */ - public String upload(byte[] data, UploadMetaData metaData) throws FlickrException { - Map parameters = setUploadParameters(metaData); - parameters.put("photo", data); - - UploaderResponse response = postPhoto(parameters, SERVICES_UPLOAD_PATH); - - return getResponseString(metaData.isAsync(), response); - } - - /** - * Upload a photo from a File. - * - * @param file - * the photo file - * @param metaData - * The meta data - * @return photoId or ticketId - * @throws FlickrException - */ - public String upload(File file, UploadMetaData metaData) throws FlickrException { - InputStream in = null; - - try { - in = new FileInputStream(file); - return upload(in, metaData); - } catch (IOException e) { - throw new FlickrRuntimeException(e); - } finally { - IOUtilities.close(in); - } - } - - /** - * Upload a photo from an InputStream. - * - * @param in - * @param metaData - * @return photoId or ticketId - * @throws FlickrException - */ - public String upload(InputStream in, UploadMetaData metaData) throws FlickrException { - Map parameters = setUploadParameters(metaData); - parameters.put("photo", in); - - UploaderResponse response = postPhoto(parameters, SERVICES_UPLOAD_PATH); - - return getResponseString(metaData.isAsync(), response); - } - - /** - * Replace a photo from an InputStream. - * - * @param in - * @return photoId or ticketId - * @throws FlickrException - */ - public String replace(InputStream in, String flickrId, boolean async) throws FlickrException { - Map parameters = setReplaceParameters(flickrId, async); - parameters.put("photo", in); - - UploaderResponse response = postPhoto(parameters, SERVICES_REPLACE_PATH); - - return getResponseString(async, response); - } - - /** - * Replace a photo from an InputStream. - * - * @param data - * @param flickrId - * @param async - * @return photoId or ticketId - * @throws FlickrException - */ - public String replace(byte[] data, String flickrId, boolean async) throws FlickrException { - Map parameters = setReplaceParameters(flickrId, async); - - parameters.put("photo", data); - - UploaderResponse response = postPhoto(parameters, SERVICES_REPLACE_PATH); - - return getResponseString(async, response); - } - - /** - * Replace a photo from a File. - * - * @param file - * @param flickrId - * @param async - * @return photoId or ticketId - * @throws FlickrException - */ - public String replace(File file, String flickrId, boolean async) throws FlickrException { - InputStream in = null; - - try { - in = new FileInputStream(file); - return replace(in, flickrId, async); - } catch (FileNotFoundException e) { - throw new FlickrRuntimeException(e); - } finally { - IOUtilities.close(in); - } - } - - /** - * Call the post multipart end point. - * - * @param parameters - * @param path - * @return - * @throws FlickrException - */ - private UploaderResponse postPhoto(Map parameters, String path) throws FlickrException { - UploaderResponse response = (UploaderResponse) transport.post(path, parameters, sharedSecret, true); - if (response.isError()) { - throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); - } - return response; - } - - /** - * Get the photo or ticket id from the response. - * - * @param async - * @param response - * @return - */ - private String getResponseString(boolean async, UploaderResponse response) { - String id = ""; - if (async) { - id = response.getTicketId(); - } else { - id = response.getPhotoId(); - } - return id; - } - - /** - * - * @param metaData - * @return - */ - private Map setUploadParameters(UploadMetaData metaData) { - Map parameters = new TreeMap(); - - parameters.put(Flickr.API_KEY, apiKey); - - String title = metaData.getTitle(); - if (title != null) { - parameters.put("title", title); - } - - String description = metaData.getDescription(); - if (description != null) { - parameters.put("description", description); - } - - Collection tags = metaData.getTags(); - if (tags != null) { - parameters.put("tags", StringUtilities.join(tags, " ")); - } - - if (metaData.isHidden() != null) { - parameters.put("hidden", metaData.isHidden().booleanValue() ? "1" : "0"); - } - - if (metaData.getSafetyLevel() != null) { - parameters.put("safety_level", metaData.getSafetyLevel()); - } - - if (metaData.getContentType() != null) { - parameters.put("content_type", metaData.getContentType()); - } - - parameters.put("is_public", metaData.isPublicFlag() ? "1" : "0"); - parameters.put("is_family", metaData.isFamilyFlag() ? "1" : "0"); - parameters.put("is_friend", metaData.isFriendFlag() ? "1" : "0"); - parameters.put("async", metaData.isAsync() ? "1" : "0"); - - return parameters; - } - - /** - * - * @param flickrId - * @param async - * @return - */ - private Map setReplaceParameters(String flickrId, boolean async) { - Map parameters = new TreeMap(); - - parameters.put(Flickr.API_KEY, apiKey); - parameters.put("async", async ? "1" : "0"); - parameters.put("photo_id", flickrId); - - return parameters; - } - - /** - * Return the {@link REST} impl used by this instance so that properties can - * be set on it, eg {@link REST#setConnectTimeoutMs(Integer)}. TODO: should - * return a wrapper that only allows "safe" properties to be set. - * - * @return The {@link REST} transport used by this instance - */ - public REST getTransport() { - return (REST) transport; - } -} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/Base64.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/util/Base64.java deleted file mode 100644 index 20f40d35..00000000 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/Base64.java +++ /dev/null @@ -1,400 +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; - -/** - * 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 { - 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 final boolean fDebug = false; - - 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 (fDebug) { - System.out.println("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 (fDebug) { - System.out.println("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 (fDebug) { - System.out.println("val2 = " + val2); - System.out.println("k4 = " + (k << 4)); - System.out.println("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 (fDebug) { - System.out.println("b1=" + b1); - System.out.println("b1<<2 = " + (b1 >> 2)); - } - byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); - encodedData[encodedIndex] = lookUpBase64Alphabet[val1]; - encodedData[encodedIndex + 1] = lookUpBase64Alphabet[k << 4]; - encodedData[encodedIndex + 2] = PAD; - encodedData[encodedIndex + 3] = PAD; - } else if (fewerThan24bits == SIXTEENBIT) { - - b1 = binaryData[dataIndex]; - b2 = binaryData[dataIndex + 1]; - l = (byte) (b2 & 0x0f); - k = (byte) (b1 & 0x03); - - byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); - byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); - - encodedData[encodedIndex] = lookUpBase64Alphabet[val1]; - encodedData[encodedIndex + 1] = lookUpBase64Alphabet[val2 | (k << 4)]; - encodedData[encodedIndex + 2] = lookUpBase64Alphabet[l << 2]; - encodedData[encodedIndex + 3] = PAD; - } - return encodedData; - } - - /** - * Decodes Base64 data into octects - * - * @param base64Data - * Byte array containing Base64 data - * @return Array containind decoded data. - */ - public static synchronized byte[] decode(byte[] base64Data) { - - if (base64Data == null) - return null; - - byte[] normalizedBase64Data = removeWhiteSpace(base64Data); - - if (normalizedBase64Data.length % FOURBYTE != 0) { - return null;// should be divisible by four - } - - int numberQuadruple = (normalizedBase64Data.length / FOURBYTE); - - if (numberQuadruple == 0) - return new byte[0]; - - byte decodedData[] = null; - byte b1 = 0, b2 = 0, b3 = 0, b4 = 0, marker0 = 0, marker1 = 0; - byte d1 = 0, d2 = 0, d3 = 0, d4 = 0; - - // Throw away anything not in normalizedBase64Data - // Adjust size - int i = 0; - int encodedIndex = 0; - int dataIndex = 0; - decodedData = new byte[(numberQuadruple) * 3]; - - for (; i < numberQuadruple - 1; i++) { - - if (!isData((d1 = normalizedBase64Data[dataIndex++])) || !isData((d2 = normalizedBase64Data[dataIndex++])) - || !isData((d3 = normalizedBase64Data[dataIndex++])) || !isData((d4 = normalizedBase64Data[dataIndex++]))) - return null;// if found "no data" just return null - - b1 = base64Alphabet[d1]; - b2 = base64Alphabet[d2]; - b3 = base64Alphabet[d3]; - b4 = base64Alphabet[d4]; - - decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); - decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); - decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); - } - - if (!isData((d1 = normalizedBase64Data[dataIndex++])) || !isData((d2 = normalizedBase64Data[dataIndex++]))) { - return null;// if found "no data" just return null - } - - b1 = base64Alphabet[d1]; - b2 = base64Alphabet[d2]; - - d3 = normalizedBase64Data[dataIndex++]; - d4 = normalizedBase64Data[dataIndex++]; - if (!isData((d3)) || !isData((d4))) {// Check if they are PAD characters - if (isPad(d3) && isPad(d4)) { // Two PAD e.g. 3c[Pad][Pad] - if ((b2 & 0xf) != 0)// last 4 bits should be zero - return null; - byte[] tmp = new byte[i * 3 + 1]; - System.arraycopy(decodedData, 0, tmp, 0, i * 3); - tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); - return tmp; - } else if (!isPad(d3) && isPad(d4)) { // One PAD e.g. 3cQ[Pad] - b3 = base64Alphabet[d3]; - if ((b3 & 0x3) != 0)// last 2 bits should be zero - return null; - byte[] tmp = new byte[i * 3 + 2]; - System.arraycopy(decodedData, 0, tmp, 0, i * 3); - tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); - tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); - return tmp; - } else { - return null;// an error like "3c[Pad]r", "3cdX", "3cXd", "3cXX" where X is non data - } - } else { // No PAD e.g 3cQl - b3 = base64Alphabet[d3]; - b4 = base64Alphabet[d4]; - decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); - decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); - decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); - - } - - return decodedData; - } - - /** - * returns length of decoded data given an array containing encoded data. WhiteSpace removing is done if data array not valid. - * - * @param base64Data - * @return a -1 would be return if not - */ - static public synchronized int getDecodedDataLength(byte[] base64Data) { - - if (base64Data == null) - return -1; - - if (base64Data.length == 0) - return 0; - - // byte[] normalizedBase64Data = removeWhiteSpace( base64Data );//Remove any whiteSpace - byte[] decodedData = null; - - if ((decodedData = decode(base64Data)) == null)// decode could return a null byte array - return -1; - - return decodedData.length; - } -} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java b/Flickr4Java/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java deleted file mode 100644 index 9eabb4e7..00000000 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ - -package com.flickr4java.flickr.util; - -import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLEncoder; -import java.util.Map; - -/** @author Anthony Eden */ -public class UrlUtilities { - - public static final String UTF8 = "UTF-8"; - - /** - * Build a request URL. - * - * @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 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://"); - } - buffer.append(host); - if (port > 0) { - buffer.append(':'); - buffer.append(port); - } - if (path == null) { - path = "/"; - } - buffer.append(path); - - if (!parameters.isEmpty()) { - buffer.append('?'); - } - int size = parameters.size(); - for (Map.Entry entry : parameters.entrySet()) { - buffer.append(entry.getKey()); - buffer.append('='); - Object value = entry.getValue(); - if (value != null) { - String string = value.toString(); - try { - string = URLEncoder.encode(string, UTF8); - } catch (UnsupportedEncodingException e) { - // Should never happen, but just in case - } - buffer.append(string); - } - if (--size != 0) { - buffer.append('&'); - } - } - - /* - * RequestContext requestContext = RequestContext.getRequestContext(); Auth auth = requestContext.getAuth(); if (auth != null && - * !ignoreMethod(getMethod(parameters))) { buffer.append("&api_sig="); buffer.append(AuthUtilities.getSignature(sharedSecret, parameters)); } - */ - - return new URL(buffer.toString()); - } - - public static URL buildPostUrl(String host, int port, String path) throws MalformedURLException { - StringBuffer buffer = new StringBuffer(); - buffer.append("http://"); - buffer.append(host); - if (port > 0) { - buffer.append(':'); - buffer.append(port); - } - if (path == null) { - path = "/"; - } - buffer.append(path); - return new URL(buffer.toString()); - } - - /** - * Construct the BuddyIconUrl. - *

- * 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 createBuddyIconUrl(int iconFarm, int iconServer, String id) { - /** - * The default-URL, if the iconServer equals 0. - */ - String iconUrl = "http://www.flickr.com/images/buddyicon.jpg"; - if (iconServer > 0) { - iconUrl = "http://farm" + iconFarm + ".static.flickr.com/" + iconServer + "/buddyicons/" + id + ".jpg"; - } - return iconUrl; - } - -} diff --git a/Flickr4Java/src/main/resources/log4j.properties b/Flickr4Java/src/main/resources/log4j.properties deleted file mode 100644 index 63e5511e..00000000 --- a/Flickr4Java/src/main/resources/log4j.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Set root category priority to INFO and its only appender to CONSOLE. -log4j.rootCategory=INFO, CONSOLE -#log4j.rootCategory=INFO, CONSOLE, LOGFILE - -# Set the enterprise logger category to FATAL and its only appender to CONSOLE. -log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE - -# CONSOLE is set to be a ConsoleAppender using a PatternLayout. -log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender -log4j.appender.CONSOLE.Threshold=INFO -log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout -log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n - -# LOGFILE is set to be a File appender using a PatternLayout. -log4j.appender.LOGFILE=org.apache.log4j.FileAppender -log4j.appender.LOGFILE.File=axis.log -log4j.appender.LOGFILE.Append=true -log4j.appender.LOGFILE.Threshold=INFO -log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout -log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java deleted file mode 100644 index ff95a820..00000000 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @author acaplan - */ -package com.flickr4java.flickr.test; - -import org.junit.Before; - -import com.flickr4java.flickr.Flickr; -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.REST; -import com.flickr4java.flickr.RequestContext; -import com.flickr4java.flickr.auth.Auth; -import com.flickr4java.flickr.auth.Permission; - -/** - * @author acaplan - * - */ -public class Flickr4JavaTest { - - protected Flickr flickr = null; - - protected TestProperties testProperties; - - @Before - public void setUp() throws FlickrException { - // Flickr.debugStream = true; - - testProperties = new TestProperties(); - - REST rest = new REST(); - rest.setHost(testProperties.getHost()); - - flickr = new Flickr(testProperties.getApiKey(), testProperties.getSecret(), rest); - - Auth auth = new Auth(); - auth.setPermission(Permission.READ); - auth.setToken(testProperties.getToken()); - auth.setTokenSecret(testProperties.getTokenSecret()); - - RequestContext requestContext = RequestContext.getRequestContext(); - requestContext.setAuth(auth); - flickr.setAuth(auth); - } -} diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UploaderTest.java b/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UploaderTest.java deleted file mode 100644 index b970c5b1..00000000 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UploaderTest.java +++ /dev/null @@ -1,181 +0,0 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ - -package com.flickr4java.flickr.test; - -import static org.junit.Assert.assertNotNull; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; - -import org.junit.Test; - -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.photos.PhotosInterface; -import com.flickr4java.flickr.uploader.UploadMetaData; -import com.flickr4java.flickr.uploader.Uploader; -import com.flickr4java.flickr.util.IOUtilities; - -/** - * @author Anthony Eden - */ -public class UploaderTest extends Flickr4JavaTest { - - /** - * Test photo uploading using a byte array. - * - * @throws IOException - * @throws FlickrException - */ - @Test - public void testUploadByteArray() throws IOException, FlickrException { - File imageFile = new File(testProperties.getImageFile()); - InputStream in = null; - Uploader uploader = flickr.getUploader(); - PhotosInterface pint = flickr.getPhotosInterface(); - - ByteArrayOutputStream out = null; - try { - in = new FileInputStream(imageFile); - out = new ByteArrayOutputStream(); - int b = -1; - while ((b = in.read()) != -1) { - out.write((byte) b); - } - UploadMetaData metaData = buildPrivatePhotoMetadata(); - // check correct handling of escaped value - metaData.setTitle("óöä"); - String photoId = uploader.upload(out.toByteArray(), metaData); - assertNotNull(photoId); - pint.delete(photoId); - } finally { - IOUtilities.close(in); - IOUtilities.close(out); - } - } - - /** - * Test photo upload using an InputStream. - * - * @throws IOException - * @throws FlickrException - */ - @Test - public void testUploadInputStream() throws IOException, FlickrException { - File imageFile = new File(testProperties.getImageFile()); - InputStream in = null; - Uploader uploader = flickr.getUploader(); - PhotosInterface pint = flickr.getPhotosInterface(); - - try { - in = new FileInputStream(imageFile); - UploadMetaData metaData = buildPrivatePhotoMetadata(); - metaData.setPublicFlag(false); - // check correct handling of escaped value - metaData.setTitle("óöä"); - String photoId = uploader.upload(in, metaData); - assertNotNull(photoId); - pint.delete(photoId); - } finally { - IOUtilities.close(in); - } - } - - /** - * Test photo replace using an InputStream. - * - * @throws IOException - * @throws FlickrException - */ - @Test - public void testReplaceInputStream() throws IOException, FlickrException { - Uploader uploader = flickr.getUploader(); - PhotosInterface pint = flickr.getPhotosInterface(); - File imageFile = new File(testProperties.getImageFile()); - InputStream uploadIS = null; - String photoId = null; - try { - uploadIS = new FileInputStream(imageFile); - - // Upload a photo, which we'll replace, then delete - UploadMetaData metaData = buildPrivatePhotoMetadata(); - photoId = uploader.upload(uploadIS, metaData); - } finally { - IOUtilities.close(uploadIS); - } - - InputStream replaceIS = null; - try { - replaceIS = new FileInputStream(imageFile); - - try { - photoId = uploader.replace(replaceIS, photoId, false); - assertNotNull(photoId); - } catch (FlickrException e) { - // Error code 1 means test account is not pro so don't fail test because of that - if (!e.getErrorCode().equals("1")) { - throw e; - } - } - pint.delete(photoId); - } finally { - IOUtilities.close(replaceIS); - } - } - - /** - * Test photo replace using a byte array. - * - * @throws IOException - * @throws FlickrException - */ - @Test - public void testReplaceByteArray() throws IOException, FlickrException { - File imageFile = new File(testProperties.getImageFile()); - InputStream in = null; - ByteArrayOutputStream out = null; - Uploader uploader = flickr.getUploader(); - PhotosInterface pint = flickr.getPhotosInterface(); - - try { - in = new FileInputStream(imageFile); - out = new ByteArrayOutputStream(); - int b = -1; - while ((b = in.read()) != -1) { - out.write((byte) b); - } - - // Upload a photo, which we'll replace, then delete - UploadMetaData metaData = buildPrivatePhotoMetadata(); - String photoId = uploader.upload(out.toByteArray(), metaData); - - try { - photoId = uploader.replace(out.toByteArray(), photoId, false); - assertNotNull(photoId); - } catch (FlickrException e) { - // Error code 1 means test account is not pro so don't fail test because of that - if (!e.getErrorCode().equals("1")) { - throw e; - } - } - - pint.delete(photoId); - } finally { - IOUtilities.close(in); - } - } - - /** - * Build {@link UploadMetaData} with public set to false so uploaded photos are private. - * - * @return - */ - private UploadMetaData buildPrivatePhotoMetadata() { - UploadMetaData uploadMetaData = new UploadMetaData(); - uploadMetaData.setPublicFlag(false); - return uploadMetaData; - } - -} diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..527794c3 --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,22 @@ +### Subject of the issue +Describe your issue here. + +### Your environment +* version of Flickr4Java +* version of JDK + +### Steps to reproduce +Tell us how to reproduce this issue. +Please provide working code. + +### Expected behaviour +Tell us what should happen + +### Actual behaviour +Tell us what happens instead + +### Log +``` +Please copy paste the log here if available + +``` diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..82b96c85 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,25 @@ +BSD 2-Clause License + +Copyright (c) 2004, Anthony Eden (@aeden), Darren Greaves (@boncey), Allan (@callmeal) and contributors. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/README.md b/README.md index b641128b..90961797 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ __Note:__ This API has been forked from [FlickrJ at Sourceforge](http://flickrj. This is a Java API which wraps the [REST-based Flickr API](http://www.flickr.com/services/api/). -Comments and questions should be sent to the [GitHub Repo](https://github.com/callmeal/Flickr4Java). +Comments and questions should be raised on the [GitHub Repo issue tracker](https://github.com/boncey/Flickr4Java/issues). ### Usage @@ -14,32 +14,72 @@ 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); + +See `/src/examples/java` for more. -__Please note:__ this library is not thread safe. +#### 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 with JDK 1.4 and JDK 1.5. The default distribution is built with JDK 1.5 (it builds and runs fine under 1.6 and 1.7 too though). +This API has been tested and built with JDK 1.8. An API key is required to use this API. You can [request one on Flickr](http://www.flickr.com/services/api/). -[scribe-java (v.1.3.2)](https://github.com/fernandezpablo85/scribe-java/wiki/Getting-Started) is also required for the OAuth functionality. +#### Required libraries + +- [scribejava-api (v8.3.3 onwards)](https://github.com/scribejava/scribejava) (required for the OAuth functionality) +- [SLF4J](https://www.slf4j.org) (runtime dependency for logging) -### Download +[See here](https://www.slf4j.org/manual.html#swapping) for details on how to choose and configure an SLF4J logging library. -[Download the latest version from bintray](https://bintray.com/boncey/Flickr4Java/Flickr4Java). +### Gradle + + compile 'com.flickr4java:flickr4java:3.0.11' ### Maven com.flickr4java - flickr - 2.5 + flickr4java + 3.0.11 -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 available on Maven Central so the above settings should be all you need. + +### Testing +The tests now run against captured responses from Flickr (see `src/test/resources/payloads`) and don't contact the Flickr API at all. +This means there is no longer any need to create a test account and populate a properties file. + +#### Functional testing against the Flickr API. +This is the setup to run the tests against the Flickr API. +*Not for the faint-hearted. Only do this to test large refactorings etc.* + +Create up a `setup.properties` file (see `src/test/resources/setup.properties.example`) with details of a real account on Flickr (I recommend setting up a test account for this purpose). +Run tests as follows. + + mvn -DsetupPropertiesPath=/path/to/your/setup.properties clean install + +Expect lots of failures and general flakiness as data has changed on Flickr and the tests or data need updating. + +### 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/Flickr4Java/build.gradle b/build.gradle similarity index 69% rename from Flickr4Java/build.gradle rename to build.gradle index db4e8db2..28dab1d6 100644 --- a/Flickr4Java/build.gradle +++ b/build.gradle @@ -2,12 +2,13 @@ apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'maven' +apply plugin: 'application' -version = '2.4' +version = '3.0.11' group = 'com.flickr4java.flickr' -sourceCompatibility = '1.5' -targetCompatibility = '1.5' +sourceCompatibility = '1.8' +targetCompatibility = '1.8' repositories { mavenCentral() @@ -26,12 +27,17 @@ sourceSets { } dependencies { - compile 'org.scribe:scribe:1.3.3' - compile 'axis:axis:1.4' - compile 'log4j:log4j:1.2.17' + compile 'com.github.scribejava:scribejava-apis:6.9.0' + compile 'org.slf4j:slf4j-api:1.7.25' testCompile group: 'junit', name: 'junit', version: '4.11' } +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/config/Flickr4JavaFormatter.xml b/config/Flickr4JavaFormatter.xml similarity index 100% rename from Flickr4Java/config/Flickr4JavaFormatter.xml rename to config/Flickr4JavaFormatter.xml 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/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/pom.xml b/pom.xml new file mode 100644 index 00000000..817ee979 --- /dev/null +++ b/pom.xml @@ -0,0 +1,277 @@ + + + 4.0.0 + + com.flickr4java + flickr4java + 3.0.12-SNAPSHOT + jar + flickr4java + Java API For Flickr. Fork of FlickrJ. + https://github.com/boncey/Flickr4Java + + + + boncey + Darren Greaves + + developer + + + + callmeal + Allan + + developer + + + + + + + BSD 2-Clause License + https://github.com/boncey/Flickr4Java/blob/master/LICENSE.txt + repo + + + + + 1.8 + 4.13.2 + 2.0.5 + 8.3.3 + config/dependencyCheckSuppression.xml + 8.2.1 + + + + + + com.github.scribejava + scribejava-apis + ${scribe.version} + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + slf4j-simple + ${slf4j.version} + test + + + junit + junit + ${junitVersion} + test + + + + + + + + org.apache.maven.plugins + maven-release-plugin + 2.5.3 + + true + false + release + deploy + ${arguments} -Prelease-sign-artifacts + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + ${javaVersion} + ${javaVersion} + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + + + ${setupPropertiesPath} + + + + + org.apache.maven.plugins + maven-source-plugin + 3.2.1 + + + attach-sources + verify + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.2.0 + + 8 + + + + attach-javadocs + + jar + + + -Xdoclint:none + + + + + + + + + src/main/resources + + **/* + + + + true + src/main/resources + + + + + scm:git:https://github.com/boncey/Flickr4Java.git + scm:git:git@github.com:boncey/Flickr4Java.git + https://github.com/boncey/Flickr4Java + HEAD + + + + release + + + + maven-source-plugin + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.2.0 + + 8 + + + + attach-javadocs + + jar + + + -Xdoclint:none + + + + + + + + + release-sign-artifacts + + + performRelease + true + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + + org.sonatype.central + central-publishing-maven-plugin + 0.9.0 + true + + central + true + + + + + + + dependency-check + + false + + + + + org.owasp + dependency-check-maven + ${dependency.check.version} + + ${dependency.check.suppression.file} + true + + + + package + + check + + + + + + + + + + + + org.apache.maven.plugins + maven-surefire-report-plugin + 2.22.2 + + + + diff --git a/Flickr4Java/src/examples/java/ActivityExample.java b/src/examples/java/ActivityExample.java similarity index 96% rename from Flickr4Java/src/examples/java/ActivityExample.java rename to src/examples/java/ActivityExample.java index 9350cf8a..1bb9beef 100644 --- a/Flickr4Java/src/examples/java/ActivityExample.java +++ b/src/examples/java/ActivityExample.java @@ -12,8 +12,6 @@ import org.xml.sax.SAXException; -import javax.xml.parsers.ParserConfigurationException; - import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -52,6 +50,7 @@ public ActivityExample() throws IOException { Auth auth = new Auth(); auth.setPermission(Permission.READ); auth.setToken(properties.getProperty("token")); + auth.setTokenSecret(properties.getProperty("tokensecret")); requestContext.setAuth(auth); Flickr.debugRequest = false; Flickr.debugStream = false; diff --git a/Flickr4Java/src/examples/java/AuthExample.java b/src/examples/java/AuthExample.java similarity index 73% rename from Flickr4Java/src/examples/java/AuthExample.java rename to src/examples/java/AuthExample.java index d4c53b6e..b76802bb 100644 --- a/Flickr4Java/src/examples/java/AuthExample.java +++ b/src/examples/java/AuthExample.java @@ -5,14 +5,14 @@ import com.flickr4java.flickr.auth.AuthInterface; import com.flickr4java.flickr.auth.Permission; import com.flickr4java.flickr.util.IOUtilities; - -import org.scribe.model.Token; -import org.scribe.model.Verifier; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.OAuth1Token; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import java.util.Scanner; +import java.util.concurrent.ExecutionException; /** * Demonstrates the authentication-process. @@ -26,7 +26,7 @@ */ public class AuthExample { - public static void auth() throws IOException, FlickrException { + public static void auth() throws IOException, FlickrException, ExecutionException, InterruptedException { Properties properties; InputStream in = null; try { @@ -43,24 +43,26 @@ 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.READ); + 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(); + scanner.close(); - Token requestToken = authInterface.getAccessToken(token, new Verifier(tokenKey)); + OAuth1Token accessToken = authInterface.getAccessToken(requestToken, tokenKey); System.out.println("Authentication success"); - Auth auth = authInterface.checkToken(requestToken); + Auth auth = authInterface.checkToken(accessToken); // This token can be used until the user revokes it. - System.out.println("Token: " + requestToken.getToken()); + System.out.println("Token: " + accessToken.getToken()); + System.out.println("Secret: " + accessToken.getTokenSecret()); System.out.println("nsid: " + auth.getUser().getId()); System.out.println("Realname: " + auth.getUser().getRealName()); System.out.println("Username: " + auth.getUser().getUsername()); diff --git a/Flickr4Java/src/examples/java/Backup.java b/src/examples/java/Backup.java similarity index 89% rename from Flickr4Java/src/examples/java/Backup.java rename to src/examples/java/Backup.java index cf888ebe..e86f418f 100644 --- a/Flickr4Java/src/examples/java/Backup.java +++ b/src/examples/java/Backup.java @@ -13,10 +13,8 @@ import com.flickr4java.flickr.photosets.PhotosetsInterface; import com.flickr4java.flickr.util.AuthStore; import com.flickr4java.flickr.util.FileAuthStore; - -import org.scribe.model.Token; -import org.scribe.model.Verifier; -import org.xml.sax.SAXException; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.OAuth1Token; import java.io.BufferedInputStream; import java.io.File; @@ -57,11 +55,11 @@ public Backup(String apiKey, String nsid, String sharedSecret, File authsDir) th } } - private void authorize() throws IOException, SAXException, FlickrException { + private void authorize() throws IOException, FlickrException { AuthInterface authInterface = flickr.getAuthInterface(); - Token accessToken = authInterface.getRequestToken(); + OAuth1RequestToken requestToken = authInterface.getRequestToken(); - String url = authInterface.getAuthorizationUrl(accessToken, Permission.READ); + String url = authInterface.getAuthorizationUrl(requestToken, Permission.READ); System.out.println("Follow this URL to authorise yourself on Flickr"); System.out.println(url); System.out.println("Paste in the token it gives you:"); @@ -69,9 +67,9 @@ private void authorize() throws IOException, SAXException, FlickrException { String tokenKey = new Scanner(System.in).nextLine(); - Token requestToken = authInterface.getAccessToken(accessToken, new Verifier(tokenKey)); + OAuth1Token accessToken = authInterface.getAccessToken(requestToken, tokenKey); - Auth auth = authInterface.checkToken(requestToken); + Auth auth = authInterface.checkToken(accessToken); RequestContext.getRequestContext().setAuth(auth); this.authStore.store(auth); System.out.println("Thanks. You probably will not have to do this every time. Now starting backup."); diff --git a/src/examples/java/FlickrCrawler.java b/src/examples/java/FlickrCrawler.java new file mode 100644 index 00000000..e9739d53 --- /dev/null +++ b/src/examples/java/FlickrCrawler.java @@ -0,0 +1,110 @@ +import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.REST; +import com.flickr4java.flickr.photos.Photo; +import com.flickr4java.flickr.photos.PhotoList; +import com.flickr4java.flickr.photos.SearchParameters; + +import javax.imageio.ImageIO; +import java.io.File; +import java.io.IOException; +import java.util.Iterator; +import java.util.prefs.Preferences; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/* + * - Java 7 is needed + * - insert your api- and secretkey + * + * start main with wanted tags as parameter, for example: FlickrCrawler.main(Sunset) and all pics will be saved in original size or large to pics\sunset\... + */ +public class FlickrCrawler { + + private static String path = ""; + private static Preferences userPrefs = Preferences.userNodeForPackage(FlickrCrawler.class); + + // convert filename to clean filename + public static String convertToFileSystemChar(String name) { + String erg = ""; + Matcher m = Pattern.compile("[a-z0-9 _#&@\\[\\(\\)\\]\\-\\.]", Pattern.CASE_INSENSITIVE).matcher(name); + while (m.find()) { + erg += name.substring(m.start(), m.end()); + } + if (erg.length() > 200) { + erg = erg.substring(0, 200); + System.out.println("cut filename: " + erg); + } + return erg; + } + + public static boolean saveImage(Flickr f, Photo p) { + + String cleanTitle = convertToFileSystemChar(p.getTitle()); + + File orgFile = new File(path + File.separator + cleanTitle + "_" + p.getId() + "_o." + p.getOriginalFormat()); + File largeFile = new File(path + File.separator + cleanTitle + "_" + p.getId() + "_b." + p.getOriginalFormat()); + + if (orgFile.exists() || largeFile.exists()) { + System.out.println(p.getTitle() + "\t" + p.getLargeUrl() + " skipped!"); + return false; + } + + try { + Photo nfo = f.getPhotosInterface().getInfo(p.getId(), null); + if (nfo.getOriginalSecret().isEmpty()) { + ImageIO.write(p.getLargeImage(), p.getOriginalFormat(), largeFile); + System.out.println(p.getTitle() + "\t" + p.getLargeUrl() + " was written to " + largeFile.getName()); + } else { + p.setOriginalSecret(nfo.getOriginalSecret()); + ImageIO.write(p.getOriginalImage(), p.getOriginalFormat(), orgFile); + System.out.println(p.getTitle() + "\t" + p.getOriginalUrl() + " was written to " + orgFile.getName()); + } + } catch (FlickrException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return true; + } + + public static void main(String[] args) { + if (args.length == 0) { + System.out.println("Parameter are needed as for searching. Example: FlickrCrawler.java sunset"); + return; + } + + String apikey = "apikey"; + String secret = "secret"; + + Flickr flickr = new Flickr(apikey, secret, new REST()); + SearchParameters searchParameters = new SearchParameters(); + searchParameters.setAccuracy(1); + + StringBuilder tagsBuilder = new StringBuilder(); + for (String tmp : args) { + tagsBuilder.append(" " + tmp); + } + path = "pics" + File.separator + tagsBuilder.toString().substring(1); + + new File(path).mkdirs(); + searchParameters.setTags(args); + + for (int i = userPrefs.getInt(path, 0); true; i++) { + userPrefs.putInt( path, i ); + System.out.println("\tcurrent page: " + userPrefs.getInt(path, 0)); + try { + PhotoList list = flickr.getPhotosInterface().search(searchParameters, 500, i); + if (list.isEmpty()) + break; + + Iterator itr = list.iterator(); + while (itr.hasNext()) { + saveImage(flickr, (Photo) itr.next()); + } + } catch (FlickrException e) { + e.printStackTrace(); + } + } + } +} diff --git a/src/examples/java/SearchExample.java b/src/examples/java/SearchExample.java new file mode 100644 index 00000000..a1808010 --- /dev/null +++ b/src/examples/java/SearchExample.java @@ -0,0 +1,94 @@ +import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.REST; +import com.flickr4java.flickr.RequestContext; +import com.flickr4java.flickr.auth.Auth; +import com.flickr4java.flickr.auth.Permission; +import com.flickr4java.flickr.photos.Photo; +import com.flickr4java.flickr.photos.PhotoList; +import com.flickr4java.flickr.photos.PhotosInterface; +import com.flickr4java.flickr.photos.SearchParameters; +import com.flickr4java.flickr.util.IOUtilities; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * Demonstration of how to search. + */ +public class SearchExample +{ + static String apiKey; + + static String sharedSecret; + + Flickr f; + + REST rest; + + RequestContext requestContext; + + Properties properties; + + public SearchExample() throws IOException + { + String setupPropertiesPath = System.getenv("SETUP_PROPERTIES_PATH"); + + InputStream in = null; + try + { + if (setupPropertiesPath != null) + { + in = new FileInputStream(new File(setupPropertiesPath)); + } else + { + in = getClass().getResourceAsStream("/setup.properties"); + } + properties = new Properties(); + properties.load(in); + } finally + { + IOUtilities.close(in); + } + + f = new Flickr(properties.getProperty("apiKey"), properties.getProperty("secret"), new REST()); + requestContext = RequestContext.getRequestContext(); + Auth auth = new Auth(); + auth.setPermission(Permission.READ); + auth.setToken(properties.getProperty("token")); + auth.setTokenSecret(properties.getProperty("tokensecret")); + requestContext.setAuth(auth); + Flickr.debugRequest = false; + Flickr.debugStream = false; + } + + private void search(String text) throws FlickrException + { + PhotosInterface photos = f.getPhotosInterface(); + SearchParameters params = new SearchParameters(); + params.setMedia("videos"); // One of "photos", "videos" or "all" + params.setExtras(Stream.of("media").collect(Collectors.toSet())); + params.setText(text); + PhotoList results = photos.search(params, 5, 0); + + results.forEach(p -> + { + System.out.println(String.format("Title: %s", p.getTitle())); + System.out.println(String.format("Media: %s", p.getMedia())); + System.out.println(String.format("Original Video URL: %s", p.getVideoOriginalUrl())); + }); + + } + + public static void main(String[] args) throws Exception + { + SearchExample t = new SearchExample(); + t.search(args.length == 0 ? "London" : args[0]); + } + +} diff --git a/src/examples/java/UploadPhoto.java b/src/examples/java/UploadPhoto.java new file mode 100644 index 00000000..bfaa1f9e --- /dev/null +++ b/src/examples/java/UploadPhoto.java @@ -0,0 +1,835 @@ +import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.REST; +import com.flickr4java.flickr.RequestContext; +import com.flickr4java.flickr.auth.Auth; +import com.flickr4java.flickr.auth.AuthInterface; +import com.flickr4java.flickr.auth.Permission; +import com.flickr4java.flickr.people.PeopleInterface; +import com.flickr4java.flickr.people.User; +import com.flickr4java.flickr.photos.Photo; +import com.flickr4java.flickr.photos.PhotoList; +import com.flickr4java.flickr.photos.PhotosInterface; +import com.flickr4java.flickr.photosets.Photoset; +import com.flickr4java.flickr.photosets.Photosets; +import com.flickr4java.flickr.photosets.PhotosetsInterface; +import com.flickr4java.flickr.prefs.PrefsInterface; +import com.flickr4java.flickr.uploader.UploadMetaData; +import com.flickr4java.flickr.uploader.Uploader; +import com.flickr4java.flickr.util.AuthStore; +import com.flickr4java.flickr.util.FileAuthStore; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.OAuth1Token; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Properties; +import java.util.Scanner; +import java.util.Set; + +/** + * A simple program to upload photos to a set. It checks for files already uploaded assuming the title is not changed so that it can be rerun if partial upload + * is done. It uses the tag field to store the filename as OrigFileName to be used while downloading if the title has been changed. If setup.properties is not + * available, pass the apiKey and secret as arguments to the program. + * + * This sample also uses the AuthStore interface, so users will only be asked to authorize on the first run. + * + * Please NOTE that this needs Java 7 to work. Java 7 was released on July 28, 2011 and soon Java 6 may not be supported anymore ( Jul 2014). + * + * @author Keyur Parikh + */ + +public class UploadPhoto { + + private static final Logger logger = LoggerFactory.getLogger(UploadPhoto.class); + + private String nsid; + + private String username; + + // private final String sharedSecret; + + private final Flickr flickr; + + private AuthStore authStore; + + public boolean flickrDebug = false; + + private boolean setOrigFilenameTag = true; + + private boolean replaceSpaces = false; + + private int privacy = -1; + + HashMap allSetsMap = new HashMap(); + + HashMap> setNameToId = new HashMap>(); + + public static final SimpleDateFormat smp = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss a"); + + public UploadPhoto(String apiKey, String nsid, String sharedSecret, File authsDir, String username) throws FlickrException { + flickr = new Flickr(apiKey, sharedSecret, new REST()); + + this.username = username; + this.nsid = nsid; + // this.sharedSecret = sharedSecret; + + if (authsDir != null) { + this.authStore = new FileAuthStore(authsDir); + } + + // If one of them is not filled in, find and populate it. + if (username == null || username.equals("")) + setUserName(); + if (nsid == null || nsid.equals("")) + setNsid(); + + } + + private void setUserName() throws FlickrException { + if (nsid != null && !nsid.equals("")) { + Auth auth = null; + if (authStore != null) { + auth = authStore.retrieve(nsid); + if (auth != null) { + username = auth.getUser().getUsername(); + } + } + // For this to work: REST.java or PeopleInterface needs to change to pass apiKey + // as the parameter to the call which is not authenticated. + + if (auth == null) { + // Get nsid using flickr.people.findByUsername + PeopleInterface peopleInterf = flickr.getPeopleInterface(); + User u = peopleInterf.getInfo(nsid); + if (u != null) { + username = u.getUsername(); + } + } + } + } + + /** + * Check local saved copy first ??. If Auth by username is available, then we will not need to make the API call. + * + * @throws FlickrException if there was a problem connecting to Flickr + */ + + private void setNsid() throws FlickrException { + + if (username != null && !username.equals("")) { + Auth auth = null; + if (authStore != null) { + auth = authStore.retrieve(username); // assuming FileAuthStore is enhanced else need to + // keep in user-level files. + + if (auth != null) { + nsid = auth.getUser().getId(); + } + } + if (auth != null) + return; + + Auth[] allAuths = authStore.retrieveAll(); + for (int i = 0; i < allAuths.length; i++) { + if (username.equals(allAuths[i].getUser().getUsername())) { + nsid = allAuths[i].getUser().getId(); + return; + } + } + + // For this to work: REST.java or PeopleInterface needs to change to pass apiKey + // as the parameter to the call which is not authenticated. + + // Get nsid using flickr.people.findByUsername + PeopleInterface peopleInterf = flickr.getPeopleInterface(); + User u = peopleInterf.findByUsername(username); + if (u != null) { + nsid = u.getId(); + } + } + } + + private void authorize() throws IOException, FlickrException { + AuthInterface authInterface = flickr.getAuthInterface(); + OAuth1RequestToken accessToken = authInterface.getRequestToken(); + + // Try with DELETE permission. At least need write permission for upload and add-to-set. + String url = authInterface.getAuthorizationUrl(accessToken, Permission.DELETE); + System.out.println("Follow this URL to authorise yourself on Flickr"); + System.out.println(url); + System.out.println("Paste in the token it gives you:"); + System.out.print(">>"); + + Scanner scanner = new Scanner(System.in); + String tokenKey = scanner.nextLine(); + + OAuth1Token requestToken = authInterface.getAccessToken(accessToken, tokenKey); + + Auth auth = authInterface.checkToken(requestToken); + RequestContext.getRequestContext().setAuth(auth); + this.authStore.store(auth); + scanner.close(); + System.out.println("Thanks. You probably will not have to do this every time. Auth saved for user: " + auth.getUser().getUsername() + " nsid is: " + + auth.getUser().getId()); + System.out.println(" AuthToken: " + auth.getToken() + " tokenSecret: " + auth.getTokenSecret()); + } + + /** + * If the Authtoken was already created in a separate program but not saved to file. + * + * @param authToken + * @param tokenSecret + * @param username + * @return + * @throws IOException + */ + private Auth constructAuth(String authToken, String tokenSecret, String username) throws IOException { + + Auth auth = new Auth(); + auth.setToken(authToken); + auth.setTokenSecret(tokenSecret); + + // Prompt to ask what permission is needed: read, update or delete. + auth.setPermission(Permission.fromString("delete")); + + User user = new User(); + // Later change the following 3. Either ask user to pass on command line or read + // from saved file. + user.setId(nsid); + user.setUsername((username)); + user.setRealName(""); + auth.setUser(user); + this.authStore.store(auth); + return auth; + } + + public void setAuth(String authToken, String username, String tokenSecret) throws IOException, FlickrException { + RequestContext rc = RequestContext.getRequestContext(); + Auth auth = null; + + if (authToken != null && !authToken.equals("") && tokenSecret != null && !tokenSecret.equals("")) { + auth = constructAuth(authToken, tokenSecret, username); + rc.setAuth(auth); + } else { + if (this.authStore != null) { + auth = this.authStore.retrieve(this.nsid); + if (auth == null) { + this.authorize(); + } else { + rc.setAuth(auth); + } + } + } + } + + public int getPrivacy() throws Exception { + + PrefsInterface prefi = flickr.getPrefsInterface(); + privacy = prefi.getPrivacy(); + + return (privacy); + } + + private String makeSafeFilename(String input) { + byte[] fname = input.getBytes(); + byte[] bad = new byte[] { '\\', '/', '"', '*' }; + byte replace = '_'; + for (int i = 0; i < fname.length; i++) { + for (byte element : bad) { + if (fname[i] == element) { + fname[i] = replace; + } + } + if (replaceSpaces && fname[i] == ' ') + fname[i] = '_'; + } + return new String(fname); + } + + public String uploadfile(String filename, String inpTitle) throws Exception { + String photoId; + + RequestContext rc = RequestContext.getRequestContext(); + + if (this.authStore != null) { + Auth auth = this.authStore.retrieve(this.nsid); + if (auth == null) { + this.authorize(); + } else { + rc.setAuth(auth); + } + } + + // PhotosetsInterface pi = flickr.getPhotosetsInterface(); + // PhotosInterface photoInt = flickr.getPhotosInterface(); + // Map allPhotos = new HashMap(); + /** + * 1 : Public 2 : Friends only 3 : Family only 4 : Friends and Family 5 : Private + **/ + if (privacy == -1) + getPrivacy(); + + UploadMetaData metaData = new UploadMetaData(); + + if (privacy == 1) + metaData.setPublicFlag(true); + if (privacy == 2 || privacy == 4) + metaData.setFriendFlag(true); + if (privacy == 3 || privacy == 4) + metaData.setFamilyFlag(true); + + if (basefilename == null || basefilename.equals("")) + basefilename = filename; // "image.jpg"; + + String title = basefilename; + boolean setMimeType = true; // change during testing. Doesn't seem to be supported at this time in flickr. + if (setMimeType) { + if (basefilename.lastIndexOf('.') > 0) { + title = basefilename.substring(0, basefilename.lastIndexOf('.')); + String suffix = basefilename.substring(basefilename.lastIndexOf('.') + 1); + // Set Mime Type if known. + + // Later use a mime-type properties file or a hash table of all known photo and video types + // allowed by flickr. + + if (suffix.equalsIgnoreCase("png")) { + metaData.setFilemimetype("image/png"); + } else if (suffix.equalsIgnoreCase("mpg") || suffix.equalsIgnoreCase("mpeg")) { + metaData.setFilemimetype("video/mpeg"); + } else if (suffix.equalsIgnoreCase("mov")) { + metaData.setFilemimetype("video/quicktime"); + } + } + } + logger.debug(" File : " + filename); + logger.debug(" basefilename : " + basefilename); + + if (inpTitle != null && !inpTitle.equals("")) { + title = inpTitle; + logger.debug(" title : " + inpTitle); + metaData.setTitle(title); + } // flickr defaults the title field from file name. + + // UploadMeta is using String not Tag class. + + // Tags are getting mangled by yahoo stripping off the = , '.' and many other punctuation characters + // and converting to lower case: use the raw tag field to find the real value for checking and + // for download. + if (setOrigFilenameTag) { + List tags = new ArrayList(); + String tmp = basefilename; + basefilename = makeSafeFilename(basefilename); + tags.add("OrigFileName='" + basefilename + "'"); + metaData.setTags(tags); + + if (!tmp.equals(basefilename)) { + System.out.println(" File : " + basefilename + " contains special characters. stored as " + basefilename + " in tag field"); + } + } + + // File imageFile = new File(filename); + // InputStream in = null; + Uploader uploader = flickr.getUploader(); + + // ByteArrayOutputStream out = null; + try { + // in = new FileInputStream(imageFile); + // out = new ByteArrayOutputStream(); + + // int b = -1; + /** + * while ((b = in.read()) != -1) { out.write((byte) b); } + **/ + + /** + * byte[] buf = new byte[1024]; while ((b = in.read(buf)) != -1) { // fos.write(read); out.write(buf, 0, b); } + **/ + + metaData.setFilename(basefilename); + // check correct handling of escaped value + + File f = new File(filename); + photoId = uploader.upload(f, metaData); + + logger.debug(" File : " + filename + " uploaded: photoId = " + photoId); + } finally { + + } + + return (photoId); + } + + public void getPhotosetsInfo() { + + PhotosetsInterface pi = flickr.getPhotosetsInterface(); + try { + int setsPage = 1; + while (true) { + Photosets photosets = pi.getList(nsid, 500, setsPage, null); + Collection setsColl = photosets.getPhotosets(); + Iterator setsIter = setsColl.iterator(); + while (setsIter.hasNext()) { + Photoset set = setsIter.next(); + allSetsMap.put(set.getId(), set); + + // 2 or more sets can in theory have the same name. !!! + ArrayList setIdarr = setNameToId.get(set.getTitle()); + if (setIdarr == null) { + setIdarr = new ArrayList(); + setIdarr.add(new String(set.getId())); + setNameToId.put(set.getTitle(), setIdarr); + } else { + setIdarr.add(new String(set.getId())); + } + } + + if (setsColl.size() < 500) { + break; + } + setsPage++; + } + logger.debug(" Sets retrieved: " + allSetsMap.size()); + // all_sets_retrieved = true; + // Print dups if any. + + Set keys = setNameToId.keySet(); + Iterator iter = keys.iterator(); + while (iter.hasNext()) { + String name = iter.next(); + ArrayList setIdarr = setNameToId.get(name); + if (setIdarr != null && setIdarr.size() > 1) { + System.out.println("There is more than 1 set with this name : " + setNameToId.get(name)); + for (int j = 0; j < setIdarr.size(); j++) { + System.out.println(" id: " + setIdarr.get(j)); + } + } + } + + } catch (FlickrException e) { + e.printStackTrace(); + } + } + + private String setid = null; + + private String basefilename = null; + + private final PhotoList photos = new PhotoList(); + + private final HashMap filePhotos = new HashMap(); + + private static void Usage() { + System.out.println("Usage: java " + UploadPhoto.class.getName() + " [ -n nsid | -u username ] -s setName { File../Directories}"); + System.out.println(" Must pass either -u username or -n nsid "); + System.out.println(" Must pass -s followed by set-name(albums) followed by file/directories."); + System.out + .println("apiKey and shared secret must be available as apiKey and secret via setup.properties or passed as -apiKey key -secret shared-secret"); + System.exit(1); + } + + /** + * @return the setOrigFilenameTag + */ + public boolean isSetorigfilenametag() { + return setOrigFilenameTag; + } + + /** + * @param setOrigFilenameTag + * the setOrigFilenameTag to set + */ + public void setSetorigfilenametag(boolean setOrigFilenameTag) { + this.setOrigFilenameTag = setOrigFilenameTag; + } + + public static void main(String[] args) throws Exception { + + String apiKey = null; // args[0]; + String sharedSecret = null; // args[1]; + + Properties properties = new Properties(); + InputStream in = null; + try { + in = UploadPhoto.class.getResourceAsStream("/setup.properties"); + if (in != null) { + properties.load(in); + apiKey = properties.getProperty("apiKey"); + sharedSecret = properties.getProperty("secret"); + if (apiKey != null && sharedSecret != null) + logger.debug("Found setup.properties in classpath and set apiKey and shared secret"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (in != null) + in.close(); + } + + if (args.length < 5) { + Usage(); + System.exit(1); + } + + ArrayList uploadfileArgs = new ArrayList(); + ArrayList optionArgs = new ArrayList(); + + // Flickr.debugRequest = true; // keep it false else entire file will be in stdout. + + // Flickr.debugStream = true; + + String authsDirStr = System.getProperty("user.home") + File.separatorChar + ".flickrAuth"; + + String nsid = null; + String username = null; + String accessToken = null; // Optional entry. + String tokenSecret = null; // Optional entry. + String setName = null; + + boolean settagname = true; // Default to true to add tag while uploading. + + int i = 0; + /*** + * for(i = 0; i < args.length; i++) { System.out.println("args[" + i + "] " + args[i]); } + **/ + + for (i = 0; i < args.length; i++) { + switch (args[i]) { + case "-n": + if (i < args.length) + nsid = args[++i]; + break; + case "-u": + if (i < args.length) + username = args[++i]; + break; + case "-apiKey": + if (i < args.length) + apiKey = args[++i]; + break; + + case "-secret": + if (i < args.length) + sharedSecret = args[++i]; + break; + case "-notags": + if (i < args.length) + settagname = false; + break; + + case "-a": + if (i < args.length) + accessToken = args[++i]; + break; + case "-t": + if (i < args.length) + tokenSecret = args[++i]; + break; + case "-s": + if (i < args.length) + setName = args[++i]; + break; + case "-option": + if (i < args.length) + optionArgs.add(args[++i]); + break; + default: + if (setName != null) + uploadfileArgs.add(args[i]); + else { + Usage(); + System.exit(1); + } + } + } + + if (apiKey == null || sharedSecret == null || (username == null && nsid == null) || (setName == null) || (uploadfileArgs.size() == 0)) { + Usage(); + System.exit(1); + } + + UploadPhoto bf = new UploadPhoto(apiKey, nsid, sharedSecret, new File(authsDirStr), username); + for (i = 0; i < optionArgs.size(); i++) { + bf.addOption(optionArgs.get(i)); + } + bf.setSetorigfilenametag(settagname); + bf.setAuth(accessToken, username, tokenSecret); + + if (!bf.canUpload()) + System.exit(1); + + bf.getPrivacy(); + + bf.getPhotosetsInfo(); + + if (setName != null && !setName.equals("")) { + + bf.getSetPhotos(setName); + } + + // String photoid; + + for (i = 0; i < uploadfileArgs.size(); i++) { + String filename = uploadfileArgs.get(i); + + File f = new File(filename); + if (f.isDirectory()) { + String[] filelist = f.list(new UploadFilenameFilter()); + logger.debug("Processing directory : " + uploadfileArgs.get(i)); + for (int j = 0; j < filelist.length; j++) { + bf.processFileArg(uploadfileArgs.get(i) + File.separatorChar + filelist[j], setName); + } + } else { + bf.processFileArg(filename, setName); + } + } + } + + private static final String[] photoSuffixes = { "jpg", "jpeg", "png", "gif", "bmp", "tif", "tiff" }; + + private static final String[] videoSuffixes = { "3gp", "3gp", "avi", "mov", "mp4", "mpg", "mpeg", "wmv", "ogg", "ogv", "m2v" }; + + static class UploadFilenameFilter implements FilenameFilter { + + // Following suffixes from flickr upload page. An App should have this configurable, + // for videos and photos separately. + + @Override + public boolean accept(File dir, String name) { + if (isValidSuffix(name)) + return true; + else + return false; + } + + } + + private static boolean isValidSuffix(String basefilename) { + if (basefilename.lastIndexOf('.') <= 0) { + return false; + } + String suffix = basefilename.substring(basefilename.lastIndexOf('.') + 1).toLowerCase(); + for (int i = 0; i < photoSuffixes.length; i++) { + if (photoSuffixes[i].equals(suffix)) + return true; + } + for (int i = 0; i < videoSuffixes.length; i++) { + if (videoSuffixes[i].equals(suffix)) + return true; + } + logger.debug(basefilename + " does not have a valid suffix, skipped."); + return false; + } + + private void processFileArg(String filename, String setName) throws Exception { + String photoid; + if (filename.equals("")) { + System.out.println("filename must be entered for uploadfile "); + return; + } + if (filename.lastIndexOf(File.separatorChar) > 0) + basefilename = filename.substring(filename.lastIndexOf(File.separatorChar) + 1, filename.length()); + else + basefilename = filename; + + boolean fileUploaded = checkIfLoaded(filename); + + if (!fileUploaded) { + if (!isValidSuffix(basefilename)) { + System.out.println(" File: " + basefilename + " is not a supported filetype for flickr (invalid suffix)"); + return; + } + + File f = new File(filename); + if (!f.exists() || !f.canRead()) { + System.out.println(" File: " + filename + " cannot be processed, does not exist or is unreadable."); + return; + } + logger.debug("Calling uploadfile for filename : " + filename); + logger.info("Upload of " + filename + " started at: " + smp.format(new Date()) + "\n"); + + photoid = uploadfile(filename, null); + // Add to Set. Create set if it does not exist. + if (photoid != null) { + addPhotoToSet(photoid, setName); + } + logger.info("Upload of " + filename + " finished at: " + smp.format(new Date()) + "\n"); + + } else { + logger.info(" File: " + filename + " has already been loaded on " + getUploadedTime(filename)); + } + } + + private void addOption(String opt) { + + switch (opt) { + case "replaceSpaces": + replaceSpaces = true; + break; + + case "notags": + setSetorigfilenametag(false); + break; + + default: // Not supported at this time. + System.out.println("Option: " + opt + " is not supported at this time"); + } + } + + private boolean canUpload() { + RequestContext rc = RequestContext.getRequestContext(); + Auth auth = null; + auth = rc.getAuth(); + if (auth == null) { + System.out.println(" Cannot upload, there is no authorization information."); + return false; + } + Permission perm = auth.getPermission(); + if ((perm.getType() == Permission.WRITE_TYPE) || (perm.getType() == Permission.DELETE_TYPE)) + return true; + else { + System.out.println(" Cannot upload, You need write or delete permission, you have : " + perm.toString()); + return false; + } + } + + /** + * The assumption here is that for a given set only unique file-names will be loaded and the title field can be used. Later change to use the tags field ( + * OrigFileName) and strip off the suffix. + * + * @param filename + * @return + */ + private boolean checkIfLoaded(String filename) { + + String title; + if (basefilename.lastIndexOf('.') > 0) + title = basefilename.substring(0, basefilename.lastIndexOf('.')); + else + return false; + + if (filePhotos.containsKey(title)) + return true; + + return false; + } + + private String getUploadedTime(String filename) { + + String title = ""; + if (basefilename.lastIndexOf('.') > 0) + title = basefilename.substring(0, basefilename.lastIndexOf('.')); + + if (filePhotos.containsKey(title)) { + Photo p = filePhotos.get(title); + if (p.getDatePosted() != null) { + return (smp.format(p.getDatePosted())); + } + } + + return ""; + } + + private void getSetPhotos(String setName) throws FlickrException { + // Check if this is an existing set. If it is get all the photo list to avoid reloading already + // loaded photos. + ArrayList setIdarr; + setIdarr = setNameToId.get(setName); + if (setIdarr != null) { + setid = setIdarr.get(0); + PhotosetsInterface pi = flickr.getPhotosetsInterface(); + + Set extras = new HashSet(); + /** + * A comma-delimited list of extra information to fetch for each returned record. Currently supported fields are: license, date_upload, date_taken, + * owner_name, icon_server, original_format, last_update, geo, tags, machine_tags, o_dims, views, media, path_alias, url_sq, url_t, url_s, url_m, + * url_o + */ + + extras.add("date_upload"); + extras.add("original_format"); + extras.add("media"); + // extras.add("url_o"); + extras.add("tags"); + + int setPage = 1; + while (true) { + PhotoList tmpSet = pi.getPhotos(setid, extras, Flickr.PRIVACY_LEVEL_NO_FILTER, 500, setPage); + + int tmpSetSize = tmpSet.size(); + photos.addAll(tmpSet); + if (tmpSetSize < 500) { + break; + } + setPage++; + } + for (int i = 0; i < photos.size(); i++) { + filePhotos.put(photos.get(i).getTitle(), photos.get(i)); + } + if (flickrDebug) { + logger.debug("Set title: " + setName + " id: " + setid + " found"); + logger.debug(" Photos in Set already loaded: " + photos.size()); + } + } + } + + public void addPhotoToSet(String photoid, String setName) throws Exception { + + ArrayList setIdarr; + + // all_set_maps. + + PhotosetsInterface psetsInterface = flickr.getPhotosetsInterface(); + + Photoset set = null; + + if (setid == null) { + // In case it is a new photo-set. + setIdarr = setNameToId.get(setName); + if (setIdarr == null) { + // setIdarr should be null since we checked it getSetPhotos. + // Create the new set. + // set the setid . + + String description = ""; + set = psetsInterface.create(setName, description, photoid); + setid = set.getId(); + + setIdarr = new ArrayList(); + setIdarr.add(new String(setid)); + setNameToId.put(setName, setIdarr); + + allSetsMap.put(set.getId(), set); + } + } else { + set = allSetsMap.get(setid); + psetsInterface.addPhoto(setid, photoid); + } + // Add to photos . + + // Add Photo to existing set. + PhotosInterface photoInt = flickr.getPhotosInterface(); + Photo p = photoInt.getPhoto(photoid); + if (p != null) { + photos.add(p); + String title; + if (basefilename.lastIndexOf('.') > 0) + title = basefilename.substring(0, basefilename.lastIndexOf('.')); + else + title = p.getTitle(); + filePhotos.put(title, p); + } + } +} diff --git a/Flickr4Java/src/examples/resources/setup.properties.example b/src/examples/resources/setup.properties.example similarity index 100% rename from Flickr4Java/src/examples/resources/setup.properties.example rename to src/examples/resources/setup.properties.example diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java b/src/main/java/com/flickr4java/flickr/Flickr.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java rename to src/main/java/com/flickr4java/flickr/Flickr.java index 270c1d2f..7d06f5cd 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java +++ b/src/main/java/com/flickr4java/flickr/Flickr.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr; import com.flickr4java.flickr.activity.ActivityInterface; @@ -14,6 +12,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; @@ -25,6 +24,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; @@ -49,12 +49,12 @@ *

* * The user who authenticates himself, can manage this permissions at his list of Third-party - * applications (You -> Your account -> Extending Flickr -> Account Links -> edit). + * applications (You / Your account / Extending Flickr / Account Links / edit). * * @author Anthony Eden * @version $Id: Flickr.java,v 1.45 2009/06/23 21:51:25 x-mago Exp $ */ -public class Flickr { +public class Flickr implements IFlickr { /** * The default endpoint host. @@ -76,11 +76,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; @@ -155,6 +150,10 @@ public class Flickr { private CamerasInterface cameraInterface; + private SuggestionsInterface suggestionsInterface; + + private GroupDiscussInterface discussionInterface; + /** * @see com.flickr4java.flickr.photos.PhotosInterface#setContentType(String, String) * @see com.flickr4java.flickr.prefs.PrefsInterface#getContentType() @@ -290,6 +289,7 @@ public Flickr(String apiKey, String sharedSecret, Transport transport) { * * @return The API key */ + @Override public String getApiKey() { return apiKey; } @@ -300,6 +300,7 @@ public String getApiKey() { * @param apiKey * The API key which cannot be null */ + @Override public void setApiKey(String apiKey) { if (apiKey == null) { throw new IllegalArgumentException("API key must not be null"); @@ -307,6 +308,7 @@ public void setApiKey(String apiKey) { this.apiKey = apiKey; } + @Override public void setAuth(Auth auth) { this.auth = auth; } @@ -316,6 +318,7 @@ public void setAuth(Auth auth) { * * @return The Auth-object */ + @Override public Auth getAuth() { return auth; } @@ -325,6 +328,7 @@ public Auth getAuth() { * * @return The Shared-Secret */ + @Override public String getSharedSecret() { return sharedSecret; } @@ -335,6 +339,7 @@ public String getSharedSecret() { * @param sharedSecret * The Shared-Secret which cannot be null */ + @Override public void setSharedSecret(String sharedSecret) { if (sharedSecret == null) { throw new IllegalArgumentException("Shared-Secret must not be null"); @@ -347,6 +352,7 @@ public void setSharedSecret(String sharedSecret) { * * @return The Tranport interface */ + @Override public Transport getTransport() { return transport; } @@ -356,6 +362,7 @@ public Transport getTransport() { * * @param transport */ + @Override public void setTransport(Transport transport) { if (transport == null) { throw new IllegalArgumentException("Transport must not be null"); @@ -368,6 +375,7 @@ public void setTransport(Transport transport) { * * @return The AuthInterface */ + @Override public AuthInterface getAuthInterface() { if (authInterface == null) { authInterface = new AuthInterface(apiKey, sharedSecret, transport); @@ -380,6 +388,7 @@ public AuthInterface getAuthInterface() { * * @return The ActivityInterface */ + @Override public ActivityInterface getActivityInterface() { if (activityInterface == null) { activityInterface = new ActivityInterface(apiKey, sharedSecret, transport); @@ -387,6 +396,7 @@ public ActivityInterface getActivityInterface() { return activityInterface; } + @Override public synchronized BlogsInterface getBlogsInterface() { if (blogsInterface == null) { blogsInterface = new BlogsInterface(apiKey, sharedSecret, transport); @@ -394,6 +404,7 @@ public synchronized BlogsInterface getBlogsInterface() { return blogsInterface; } + @Override public CommentsInterface getCommentsInterface() { if (commentsInterface == null) { commentsInterface = new CommentsInterface(apiKey, sharedSecret, transport); @@ -401,6 +412,7 @@ public CommentsInterface getCommentsInterface() { return commentsInterface; } + @Override public CommonsInterface getCommonsInterface() { if (commonsInterface == null) { commonsInterface = new CommonsInterface(apiKey, sharedSecret, transport); @@ -408,6 +420,7 @@ public CommonsInterface getCommonsInterface() { return commonsInterface; } + @Override public ContactsInterface getContactsInterface() { if (contactsInterface == null) { contactsInterface = new ContactsInterface(apiKey, sharedSecret, transport); @@ -415,6 +428,7 @@ public ContactsInterface getContactsInterface() { return contactsInterface; } + @Override public FavoritesInterface getFavoritesInterface() { if (favoritesInterface == null) { favoritesInterface = new FavoritesInterface(apiKey, sharedSecret, transport); @@ -422,6 +436,7 @@ public FavoritesInterface getFavoritesInterface() { return favoritesInterface; } + @Override public GeoInterface getGeoInterface() { if (geoInterface == null) { geoInterface = new GeoInterface(apiKey, sharedSecret, transport); @@ -429,6 +444,7 @@ public GeoInterface getGeoInterface() { return geoInterface; } + @Override public GroupsInterface getGroupsInterface() { if (groupsInterface == null) { groupsInterface = new GroupsInterface(apiKey, sharedSecret, transport); @@ -439,6 +455,7 @@ public GroupsInterface getGroupsInterface() { /** * @return the interface to the flickr.interestingness methods */ + @Override public synchronized InterestingnessInterface getInterestingnessInterface() { if (interestingnessInterface == null) { interestingnessInterface = new InterestingnessInterface(apiKey, sharedSecret, transport); @@ -446,6 +463,7 @@ public synchronized InterestingnessInterface getInterestingnessInterface() { return interestingnessInterface; } + @Override public LicensesInterface getLicensesInterface() { if (licensesInterface == null) { licensesInterface = new LicensesInterface(apiKey, sharedSecret, transport); @@ -453,6 +471,7 @@ public LicensesInterface getLicensesInterface() { return licensesInterface; } + @Override public MachinetagsInterface getMachinetagsInterface() { if (machinetagsInterface == null) { machinetagsInterface = new MachinetagsInterface(apiKey, sharedSecret, transport); @@ -460,6 +479,7 @@ public MachinetagsInterface getMachinetagsInterface() { return machinetagsInterface; } + @Override public MembersInterface getMembersInterface() { if (membersInterface == null) { membersInterface = new MembersInterface(apiKey, sharedSecret, transport); @@ -467,6 +487,7 @@ public MembersInterface getMembersInterface() { return membersInterface; } + @Override public NotesInterface getNotesInterface() { if (notesInterface == null) { notesInterface = new NotesInterface(apiKey, sharedSecret, transport); @@ -474,6 +495,7 @@ public NotesInterface getNotesInterface() { return notesInterface; } + @Override public PandaInterface getPandaInterface() { if (pandaInterface == null) { pandaInterface = new PandaInterface(apiKey, sharedSecret, transport); @@ -481,6 +503,7 @@ public PandaInterface getPandaInterface() { return pandaInterface; } + @Override public PoolsInterface getPoolsInterface() { if (poolsInterface == null) { poolsInterface = new PoolsInterface(apiKey, sharedSecret, transport); @@ -488,6 +511,7 @@ public PoolsInterface getPoolsInterface() { return poolsInterface; } + @Override public PeopleInterface getPeopleInterface() { if (peopleInterface == null) { peopleInterface = new PeopleInterface(apiKey, sharedSecret, transport); @@ -495,6 +519,7 @@ public PeopleInterface getPeopleInterface() { return peopleInterface; } + @Override public PhotosInterface getPhotosInterface() { if (photosInterface == null) { photosInterface = new PhotosInterface(apiKey, sharedSecret, transport); @@ -502,6 +527,7 @@ public PhotosInterface getPhotosInterface() { return photosInterface; } + @Override public PhotosetsCommentsInterface getPhotosetsCommentsInterface() { if (photosetsCommentsInterface == null) { photosetsCommentsInterface = new PhotosetsCommentsInterface(apiKey, sharedSecret, transport); @@ -509,6 +535,7 @@ public PhotosetsCommentsInterface getPhotosetsCommentsInterface() { return photosetsCommentsInterface; } + @Override public PhotosetsInterface getPhotosetsInterface() { if (photosetsInterface == null) { photosetsInterface = new PhotosetsInterface(apiKey, sharedSecret, transport); @@ -516,6 +543,7 @@ public PhotosetsInterface getPhotosetsInterface() { return photosetsInterface; } + @Override public CollectionsInterface getCollectionsInterface() { if (collectionsInterface == null) { collectionsInterface = new CollectionsInterface(apiKey, sharedSecret, transport); @@ -523,6 +551,7 @@ public CollectionsInterface getCollectionsInterface() { return collectionsInterface; } + @Override public PlacesInterface getPlacesInterface() { if (placesInterface == null) { placesInterface = new PlacesInterface(apiKey, sharedSecret, transport); @@ -530,6 +559,7 @@ public PlacesInterface getPlacesInterface() { return placesInterface; } + @Override public PrefsInterface getPrefsInterface() { if (prefsInterface == null) { prefsInterface = new PrefsInterface(apiKey, sharedSecret, transport); @@ -537,6 +567,7 @@ public PrefsInterface getPrefsInterface() { return prefsInterface; } + @Override public ReflectionInterface getReflectionInterface() { if (reflectionInterface == null) { reflectionInterface = new ReflectionInterface(apiKey, sharedSecret, transport); @@ -549,6 +580,7 @@ public ReflectionInterface getReflectionInterface() { * * @return The TagsInterface */ + @Override public TagsInterface getTagsInterface() { if (tagsInterface == null) { tagsInterface = new TagsInterface(apiKey, sharedSecret, transport); @@ -556,6 +588,7 @@ public TagsInterface getTagsInterface() { return tagsInterface; } + @Override public TestInterface getTestInterface() { if (testInterface == null) { testInterface = new TestInterface(apiKey, sharedSecret, transport); @@ -563,6 +596,7 @@ public TestInterface getTestInterface() { return testInterface; } + @Override public TransformInterface getTransformInterface() { if (transformInterface == null) { transformInterface = new TransformInterface(apiKey, sharedSecret, transport); @@ -570,6 +604,7 @@ public TransformInterface getTransformInterface() { return transformInterface; } + @Override public UploadInterface getUploadInterface() { if (uploadInterface == null) { uploadInterface = new UploadInterface(apiKey, sharedSecret, transport); @@ -577,6 +612,7 @@ public UploadInterface getUploadInterface() { return uploadInterface; } + @Override public Uploader getUploader() { if (uploader == null) { uploader = new Uploader(apiKey, sharedSecret); @@ -584,6 +620,7 @@ public Uploader getUploader() { return uploader; } + @Override public UrlsInterface getUrlsInterface() { if (urlsInterface == null) { urlsInterface = new UrlsInterface(apiKey, sharedSecret, transport); @@ -591,6 +628,7 @@ public UrlsInterface getUrlsInterface() { return urlsInterface; } + @Override public GalleriesInterface getGalleriesInterface() { if (galleriesInterface == null) { galleriesInterface = new GalleriesInterface(apiKey, sharedSecret, transport); @@ -598,6 +636,7 @@ public GalleriesInterface getGalleriesInterface() { return galleriesInterface; } + @Override public StatsInterface getStatsInterface() { if (statsInterface == null) { statsInterface = new StatsInterface(apiKey, sharedSecret, transport); @@ -605,6 +644,7 @@ public StatsInterface getStatsInterface() { return statsInterface; } + @Override public CamerasInterface getCamerasInterface() { if (cameraInterface == null) { cameraInterface = new CamerasInterface(apiKey, sharedSecret, transport); @@ -612,4 +652,31 @@ public CamerasInterface getCamerasInterface() { return cameraInterface; } + /** + * Get the SuggestionsInterface. + * + * @return The SuggestionsInterface + */ + @Override + public SuggestionsInterface getSuggestionsInterface() { + if (suggestionsInterface == null) { + suggestionsInterface = new SuggestionsInterface(apiKey, sharedSecret, transport); + } + return suggestionsInterface; + } + + /** + * Get the GroupDiscussInterface. + * + * @return The GroupDiscussInterface + */ + + @Override + public GroupDiscussInterface getDiscussionInterface() { + if (discussionInterface == null) { + discussionInterface = new GroupDiscussInterface(apiKey, sharedSecret, transport); + } + return discussionInterface; + } + } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/FlickrException.java b/src/main/java/com/flickr4java/flickr/FlickrException.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/FlickrException.java rename to src/main/java/com/flickr4java/flickr/FlickrException.java index 40a2b243..56d13c43 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/FlickrException.java +++ b/src/main/java/com/flickr4java/flickr/FlickrException.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr; /** diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java b/src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java rename to src/main/java/com/flickr4java/flickr/FlickrRuntimeException.java diff --git a/src/main/java/com/flickr4java/flickr/IFlickr.java b/src/main/java/com/flickr4java/flickr/IFlickr.java new file mode 100644 index 00000000..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/Flickr4Java/src/main/java/com/flickr4java/flickr/Parameter.java b/src/main/java/com/flickr4java/flickr/Parameter.java similarity index 84% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/Parameter.java rename to src/main/java/com/flickr4java/flickr/Parameter.java index 54dd321f..e292cc6e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Parameter.java +++ b/src/main/java/com/flickr4java/flickr/Parameter.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr; /** @@ -29,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/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/src/main/java/com/flickr4java/flickr/REST.java b/src/main/java/com/flickr4java/flickr/REST.java new file mode 100644 index 00000000..785f4318 --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/REST.java @@ -0,0 +1,381 @@ + +package com.flickr4java.flickr; + +import com.flickr4java.flickr.auth.Auth; +import com.flickr4java.flickr.uploader.Payload; +import com.flickr4java.flickr.uploader.UploadMetaData; +import com.flickr4java.flickr.util.DebugInputStream; +import com.flickr4java.flickr.util.IOUtilities; +import com.flickr4java.flickr.util.OAuthUtilities; +import com.flickr4java.flickr.util.UrlUtilities; +import com.github.scribejava.core.httpclient.multipart.FileByteArrayBodyPartPayload; +import com.github.scribejava.core.model.OAuth1AccessToken; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Parameter; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth10aService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.io.InputStream; +import java.io.StringReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ExecutionException; + +/** + * Transport implementation using the REST interface. + * + * @author Anthony Eden + * @version $Id: REST.java,v 1.26 2009/07/01 22:07:08 x-mago Exp $ + */ +public class REST extends Transport { + + private static final Logger logger = LoggerFactory.getLogger(REST.class); + + private static final String PATH = "/services/rest/"; + + /** + * Error code from Flickr API when the service is unavailable. + */ + private static final String FLICKR_SERVICE_UNAVAILABLE = "105"; + + private boolean proxyAuth = false; + + private String proxyUser = ""; + + private String proxyPassword = ""; + + private String userAgent = "Flickr4Java/3.x"; + + private Integer connectTimeoutMs; + + private Integer readTimeoutMs; + + /** + * Construct a new REST transport instance. + */ + public REST() { + setTransportType(REST); + setHost(API_HOST); + setPath(PATH); + setScheme(DEFAULT_SCHEME); + setResponseClass(RESTResponse.class); + } + + /** + * Construct a new REST transport instance using the specified host endpoint. + * + * @param host The host endpoint + */ + public REST(String host) { + this(); + setHost(host); + } + + /** + * Construct a new REST transport instance using the specified host and port endpoint. + * + * @param host The host endpoint + * @param port The port + */ + public REST(String host, int port) { + this(); + setHost(host); + setPort(port); + } + + /** + * Set a proxy for REST-requests. + * + * @param proxyHost + * @param proxyPort + */ + public void setProxy(String proxyHost, int proxyPort) { + System.setProperty("http.proxySet", "true"); + System.setProperty("http.proxyHost", proxyHost); + System.setProperty("http.proxyPort", "" + proxyPort); + System.setProperty("https.proxyHost", proxyHost); + System.setProperty("https.proxyPort", "" + proxyPort); + } + + /** + * Set a proxy with authentication for REST-requests. + * + * @param proxyHost + * @param proxyPort + * @param username + * @param password + */ + public void setProxy(String proxyHost, int proxyPort, String username, String password) { + setProxy(proxyHost, proxyPort); + proxyAuth = true; + proxyUser = username; + proxyPassword = password; + } + + /** + * 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. + * + * @param path The request path + * @param parameters The parameters (collection of Parameter objects) + * @return The Response + */ + @Override + public com.flickr4java.flickr.Response get(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException { + + OAuthRequest request = new OAuthRequest(Verb.GET, buildUrl(path)); + for (Map.Entry entry : parameters.entrySet()) { + request.addQuerystringParameter(entry.getKey(), String.valueOf(entry.getValue())); + } + + if (proxyAuth) { + request.addHeader("Proxy-Authorization", "Basic " + getProxyCredentials()); + } + + request.addHeader("User-Agent", userAgent); + + RequestContext requestContext = RequestContext.getRequestContext(); + Auth auth = requestContext.getAuth(); + OAuth10aService service = OAuthUtilities.createOAuthService(apiKey, sharedSecret, connectTimeoutMs, readTimeoutMs); + 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 + // 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()); + } + + try { + return handleResponse(request, service); + } catch (ReflectiveOperationException | SAXException | IOException | InterruptedException | ExecutionException | ParserConfigurationException e) { + throw new FlickrRuntimeException(e); + } + } + + /** + * Invoke an HTTP POST request on a remote host. + * + * @param path The request path + * @param parameters The parameters (collection of Parameter objects) + * @return The Response object + */ + @Override + public com.flickr4java.flickr.Response post(String path, Map parameters, String apiKey, String sharedSecret) throws FlickrException { + + OAuthRequest request = OAuthUtilities.buildNormalPostRequest(parameters, buildUrl(path)); + + request.addHeader("User-Agent", userAgent); + + OAuth10aService service = createAndSignRequest(apiKey, sharedSecret, request); + + try { + return handleResponse(request, service); + } catch (ReflectiveOperationException | InterruptedException | ExecutionException | IOException | SAXException | ParserConfigurationException e) { + throw new FlickrRuntimeException(e); + } + } + + /** + * Invoke an HTTP POST request on a remote host. + * + * @param path The request path + * @param metaData The parameters (collection of Parameter objects) + * @param payload + * @return The Response object + */ + @Override + public com.flickr4java.flickr.Response postMultiPart(String path, UploadMetaData metaData, Payload payload, String apiKey, String sharedSecret) throws FlickrException { + + Map uploadParameters = new HashMap<>(metaData.getUploadParameters()); + OAuthRequest request = OAuthUtilities.buildMultipartRequest(uploadParameters, buildUrl(path)); + + request.addHeader("User-Agent", userAgent); + + OAuth10aService service = createAndSignRequest(apiKey, sharedSecret, request); + + // Ensure all parameters (including oauth) are added to payload so signature matches + uploadParameters.putAll(request.getOauthParameters()); + + 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); + } catch (ReflectiveOperationException | InterruptedException | ExecutionException | IOException | SAXException | ParserConfigurationException e) { + throw new FlickrRuntimeException(e); + } + } + + private OAuth10aService createAndSignRequest(String apiKey, String sharedSecret, OAuthRequest request) { + OAuth10aService service = OAuthUtilities.createOAuthService(apiKey, sharedSecret, connectTimeoutMs, readTimeoutMs); + OAuthUtilities.signRequest(service, request, proxyAuth ? getProxyCredentials() : null); + return service; + } + + private String buildUrl(String path) { + return String.format("%s://%s%s", getScheme(), getHost(), path); + } + + private Response handleResponse(OAuthRequest request, OAuth10aService service) throws InterruptedException, ExecutionException, IOException, SAXException, ParserConfigurationException, FlickrException, ReflectiveOperationException { + com.github.scribejava.core.model.Response scribeResponse = service.execute(request); + + if (!scribeResponse.isSuccessful()) { + throw new FlickrException(FLICKR_SERVICE_UNAVAILABLE, String.format("Received '%s' error from Flickr with status %d", scribeResponse.getMessage(), scribeResponse.getCode())); + } + String strXml = scribeResponse.getBody().trim(); + if (Flickr.debugStream) { + logger.debug(strXml); + } + if (strXml.startsWith("oauth_problem=")) { + throw new FlickrRuntimeException(strXml); + } + + DocumentBuilder builder = getDocumentBuilder(); + Document document = builder.parse(new InputSource(new StringReader(strXml))); + Response f4jResponse = (Response) responseClass.getConstructor().newInstance(); + f4jResponse.parse(document); + + // Enable this method to update the test payloads + // dumpResponseToFile(request, strXml); + + return f4jResponse; + } + + /** + * Invoke a non OAuth HTTP GET request on a remote host. + *

+ * This is only used for the Flickr OAuth methods checkToken and getAccessToken. + * + * @param path The request path + * @param parameters The parameters + * @return The Response + */ + @Override + public Response getNonOAuth(String path, Map parameters) { + InputStream in = null; + try { + URL url = UrlUtilities.buildUrl(getScheme(), getHost(), getPort(), path, parameters); + if (Flickr.debugRequest) { + logger.debug("GET: " + url); + } + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + if (proxyAuth) { + conn.setRequestProperty("Proxy-Authorization", "Basic " + getProxyCredentials()); + } + + conn.setRequestProperty("User-Agent", userAgent); + + setTimeouts(conn); + conn.connect(); + + if (Flickr.debugStream) { + in = new DebugInputStream(conn.getInputStream(), System.out); + } else { + in = conn.getInputStream(); + } + + Response response; + DocumentBuilder builder = getDocumentBuilder(); + Document document = builder.parse(in); + response = (Response) responseClass.newInstance(); + response.parse(document); + + return response; + } catch (IllegalAccessException | SAXException | IOException | InstantiationException | ParserConfigurationException e) { + throw new FlickrRuntimeException(e); + } finally { + IOUtilities.close(in); + } + } + + public boolean isProxyAuth() { + return proxyAuth; + } + + /** + * Generates Base64-encoded credentials from locally stored username and password. + * + * @return credentials + */ + public String getProxyCredentials() { + return new String(Base64.getEncoder().encode((proxyUser + ":" + proxyPassword).getBytes())); + } + + private void setTimeouts(HttpURLConnection conn) { + if (connectTimeoutMs != null) { + conn.setConnectTimeout(connectTimeoutMs); + } + if (readTimeoutMs != null) { + conn.setReadTimeout(readTimeoutMs); + } + } + + public void setConnectTimeoutMs(Integer connectTimeoutMs) { + this.connectTimeoutMs = connectTimeoutMs; + } + + public void setReadTimeoutMs(Integer readTimeoutMs) { + this.readTimeoutMs = readTimeoutMs; + } + + private DocumentBuilder getDocumentBuilder() throws ParserConfigurationException { + DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); + return builderFactory.newDocumentBuilder(); + } + + // Generate responses for offline tests + + private void dumpResponseToFile(OAuthRequest request, String strXml) throws IOException { + Verb verb = request.getVerb(); + Optional flickrMethod = Optional.empty(); + switch (verb) { + case GET: + flickrMethod = request.getQueryStringParams().getParams().stream().filter(param -> param.getKey().equals("method")).findFirst().map(Parameter::getValue); + break; + case POST: + flickrMethod = request.getBodyParams().getParams().stream().filter(param -> param.getKey().equals("method")).findFirst().map(Parameter::getValue); + break; + } + if (flickrMethod.isPresent()) { + String filename = String.format("%s.xml", flickrMethod.get()); + Path filePath = Paths.get("src/test/resources/payloads/" + verb, filename); + Files.write(filePath, strXml.getBytes()); + logger.info(String.format("Writing payload to file '%s'", filePath)); + } else { + logger.warn("Not dumping response to file as method not found in request for URL {}", request.getUrl()); + } + } +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/RESTResponse.java b/src/main/java/com/flickr4java/flickr/RESTResponse.java similarity index 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/RESTResponse.java rename to src/main/java/com/flickr4java/flickr/RESTResponse.java index 719b5c3a..e35da74d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/RESTResponse.java +++ b/src/main/java/com/flickr4java/flickr/RESTResponse.java @@ -1,15 +1,13 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + 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/src/main/java/com/flickr4java/flickr/RequestContext.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/RequestContext.java rename to src/main/java/com/flickr4java/flickr/RequestContext.java index 1ef52e27..030b0b63 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/RequestContext.java +++ b/src/main/java/com/flickr4java/flickr/RequestContext.java @@ -1,14 +1,12 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + 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 +29,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/src/main/java/com/flickr4java/flickr/Response.java similarity index 84% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/Response.java rename to src/main/java/com/flickr4java/flickr/Response.java index eaa9445c..6b37a11b 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Response.java +++ b/src/main/java/com/flickr4java/flickr/Response.java @@ -1,14 +1,12 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -package com.flickr4java.flickr; -import java.util.Collection; +package com.flickr4java.flickr; 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/SearchResultList.java b/src/main/java/com/flickr4java/flickr/SearchResultList.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/SearchResultList.java rename to src/main/java/com/flickr4java/flickr/SearchResultList.java index b5ec5e21..61af8d2e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/SearchResultList.java +++ b/src/main/java/com/flickr4java/flickr/SearchResultList.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java b/src/main/java/com/flickr4java/flickr/Transport.java similarity index 60% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java rename to src/main/java/com/flickr4java/flickr/Transport.java index 6eaddced..162db44c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Transport.java +++ b/src/main/java/com/flickr4java/flickr/Transport.java @@ -1,13 +1,15 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + 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 and work is being done to include the SOAP 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 @@ -16,10 +18,15 @@ 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"; - protected static final String API_HOST = "http://api.flickr.com"; + /** + * Host is different for upload, need to set it from Uploader.java. + */ + public static final String UPLOAD_API_HOST = "up.flickr.com"; + protected static final String DEFAULT_SCHEME = "https"; + private String transportType; protected Class responseClass; @@ -28,7 +35,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 +71,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. * @@ -69,11 +86,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 + * @throws FlickrException if there was a problem connecting to Flickr */ - 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,27 +100,27 @@ 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 + * @throws FlickrException if there was a problem connecting to Flickr */ - 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) 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 + * @throws FlickrException if there was a problem connecting to Flickr */ - public Response post(String path, Map parameters, String sharedSecret) throws FlickrException { - - return post(path, parameters, 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. @@ -114,9 +132,9 @@ public Response post(String path, Map parameters, String sharedS * @param parameters * The parameters * @return The Response - * @throws FlickrException + * @throws FlickrRuntimeException */ - 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/Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java b/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java rename to src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java index d13f4e33..0dacaa5a 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ActivityInterface.java +++ b/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. * @@ -46,13 +45,12 @@ public ActivityInterface(String apiKey, String sharedSecret, Transport transport * @param perPage * @param page * @return ItemList - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public ItemList userComments(int perPage, int page) throws FlickrException { ItemList items = new ItemList(); Map parameters = new HashMap(); parameters.put("method", METHOD_USER_COMMENTS); - 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()); } @@ -90,13 +88,12 @@ 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(); 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/activity/Event.java b/src/main/java/com/flickr4java/flickr/activity/Event.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/activity/Event.java rename to src/main/java/com/flickr4java/flickr/activity/Event.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/activity/Item.java b/src/main/java/com/flickr4java/flickr/activity/Item.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/activity/Item.java rename to src/main/java/com/flickr4java/flickr/activity/Item.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ItemList.java b/src/main/java/com/flickr4java/flickr/activity/ItemList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/activity/ItemList.java rename to src/main/java/com/flickr4java/flickr/activity/ItemList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/Auth.java b/src/main/java/com/flickr4java/flickr/auth/Auth.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/auth/Auth.java rename to src/main/java/com/flickr4java/flickr/auth/Auth.java index 32441bbf..44ea9e94 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/Auth.java +++ b/src/main/java/com/flickr4java/flickr/auth/Auth.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.auth; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java similarity index 68% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java rename to src/main/java/com/flickr4java/flickr/auth/AuthInterface.java index 325d9b91..358a1415 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java +++ b/src/main/java/com/flickr4java/flickr/auth/AuthInterface.java @@ -1,31 +1,32 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.auth; import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.FlickrRuntimeException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.people.User; import com.flickr4java.flickr.util.ByteUtilities; import com.flickr4java.flickr.util.XMLUtilities; - -import org.apache.log4j.Logger; -import org.scribe.builder.ServiceBuilder; -import org.scribe.builder.api.FlickrApi; -import org.scribe.exceptions.OAuthException; -import org.scribe.model.Token; -import org.scribe.model.Verifier; -import org.scribe.oauth.OAuthService; +import com.github.scribejava.apis.FlickrApi; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.exceptions.OAuthException; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.OAuth1Token; +import com.github.scribejava.core.oauth.OAuth10aService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Element; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Map; import java.util.TreeMap; +import java.util.concurrent.ExecutionException; /** * Authentication interface. @@ -49,7 +50,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; @@ -70,9 +71,9 @@ public AuthInterface(String apiKey, String sharedSecret, Transport transport) { /** * Get the OAuth request token - this is step one of authorization. * - * @return the {@link Token}, store this for when the user returns from the Flickr website. + * @return the {@link OAuth1RequestToken}, store this for when the user returns from the Flickr website. */ - public Token getRequestToken() { + public OAuth1RequestToken getRequestToken() { return getRequestToken(null); } @@ -82,15 +83,21 @@ public Token getRequestToken() { * * @param callbackUrl * optional callback URL - required for web auth flow, will be set to "oob" if not specified. - * @return the {@link Token}, store this for when the user returns from the Flickr website. + * @return the {@link OAuth1RequestToken}, store this for when the user returns from the Flickr website. */ - public Token getRequestToken(String callbackUrl) { - + public OAuth1RequestToken getRequestToken(String callbackUrl) { String callback = (callbackUrl != null) ? callbackUrl : OUT_OF_BOUND_AUTH_METHOD; - OAuthService service = new ServiceBuilder().provider(FlickrApi.class).apiKey(apiKey).apiSecret(sharedSecret).callback(callback).build(); + OAuth10aService service = new ServiceBuilder(apiKey) + .apiSecret(sharedSecret) + .callback(callback) + .build(FlickrApi.instance()); - return service.getRequestToken(); + try { + return service.getRequestToken(); + } catch (IOException | InterruptedException | ExecutionException e) { + throw new FlickrRuntimeException(e); + } } /** @@ -99,38 +106,39 @@ public Token getRequestToken(String callbackUrl) { * @param oAuthRequestToken * the token from a {@link AuthInterface#getRequestToken} call. */ - public String getAuthorizationUrl(Token oAuthRequestToken, Permission permission) { - - OAuthService service = new ServiceBuilder().provider(FlickrApi.class).apiKey(apiKey).apiSecret(sharedSecret).build(); + public String getAuthorizationUrl(OAuth1RequestToken oAuthRequestToken, Permission permission) { + OAuth10aService service = new ServiceBuilder(apiKey) + .apiSecret(sharedSecret) + .build(FlickrApi.instance()); String authorizationUrl = service.getAuthorizationUrl(oAuthRequestToken); return String.format("%s&perms=%s", authorizationUrl, permission.toString()); } /** * Trade the request token for an access token, this is step three of authorization. - * - * @param oAuthRequestToken + * @param oAuthRequestToken * this is the token returned by the {@link AuthInterface#getRequestToken} call. * @param verifier - * the Verifier created from the code entered by a user or passed back to a callback URL. */ @SuppressWarnings("boxing") - public Token getAccessToken(Token oAuthRequestToken, Verifier verifier) { - OAuthService service = new ServiceBuilder().provider(FlickrApi.class).apiKey(apiKey).apiSecret(sharedSecret).build(); + public OAuth1Token getAccessToken(OAuth1RequestToken oAuthRequestToken, String verifier) { + OAuth10aService service = new ServiceBuilder(apiKey) + .apiSecret(sharedSecret) + .build(FlickrApi.instance()); // Flickr seems to return invalid token sometimes so retry a few times. // See http://www.flickr.com/groups/api/discuss/72157628028927244/ - Token accessToken = null; + OAuth1Token accessToken = null; boolean success = false; for (int i = 0; i < maxGetTokenRetries && !success; i++) { try { accessToken = service.getAccessToken(oAuthRequestToken, verifier); success = true; - } catch (OAuthException e) { - if (i == maxGetTokenRetries) { + } catch (OAuthException | IOException | InterruptedException | ExecutionException e) { + if (i == maxGetTokenRetries - 1) { logger.error(String.format("OAuthService.getAccessToken failing after %d tries, re-throwing exception", i), e); - throw e; + throw new FlickrRuntimeException(e); } else { logger.warn(String.format("OAuthService.getAccessToken failed, try number %d: %s", i, e.getMessage())); try { @@ -142,9 +150,6 @@ public Token getAccessToken(Token oAuthRequestToken, Verifier verifier) { } } - assert accessToken != null; - assert success; - return accessToken; } @@ -154,11 +159,10 @@ public Token getAccessToken(Token oAuthRequestToken, Verifier verifier) { * @param accessToken * The authentication token * @return The Auth object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ - public Auth checkToken(Token accessToken) throws FlickrException { - - return checkToken(accessToken.getToken(), accessToken.getSecret()); + public Auth checkToken(OAuth1Token accessToken) throws FlickrException { + return checkToken(accessToken.getToken(), accessToken.getTokenSecret()); } /** @@ -167,12 +171,18 @@ public Auth checkToken(Token accessToken) throws FlickrException { * The authentication token * @param tokenSecret * @return The Auth object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see "http://www.flickr.com/services/api/flickr.auth.oauth.checkToken.html" */ public Auth checkToken(String authToken, String tokenSecret) throws FlickrException { - 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()) { @@ -189,39 +199,28 @@ public Auth checkToken(String authToken, String tokenSecret) throws FlickrExcept * Calling this method will delete the auth token used to make the request. * * @param authToken - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * @see "http://www.flickr.com/services/api/flickr.auth.oauth.getAccessToken.html" */ - public Token exchangeAuthToken(String authToken) throws FlickrException { + public OAuth1RequestToken exchangeAuthToken(String authToken) throws FlickrException { - 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()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } - Token accessToken = constructToken(response); + OAuth1RequestToken accessToken = constructToken(response); 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(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)); - return parameters; - } - /** * * @param response @@ -249,12 +248,12 @@ private Auth constructAuth(Response response, String authToken, String tokenSecr * * @param response */ - private Token constructToken(Response response) { + private OAuth1RequestToken constructToken(Response response) { Element authElement = response.getPayload(); String oauthToken = XMLUtilities.getChildValue(authElement, "oauth_token"); String oauthTokenSecret = XMLUtilities.getChildValue(authElement, "oauth_token_secret"); - Token token = new Token(oauthToken, oauthTokenSecret); + OAuth1RequestToken token = new OAuth1RequestToken(oauthToken, oauthTokenSecret); return token; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/Permission.java b/src/main/java/com/flickr4java/flickr/auth/Permission.java similarity index 95% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/auth/Permission.java rename to src/main/java/com/flickr4java/flickr/auth/Permission.java index 993c43d4..da29fae3 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/auth/Permission.java +++ b/src/main/java/com/flickr4java/flickr/auth/Permission.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.auth; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/Blog.java b/src/main/java/com/flickr4java/flickr/blogs/Blog.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/Blog.java rename to src/main/java/com/flickr4java/flickr/blogs/Blog.java index fc93f4e5..80eabc84 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/Blog.java +++ b/src/main/java/com/flickr4java/flickr/blogs/Blog.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.blogs; import java.math.BigDecimal; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java b/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java similarity index 86% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java rename to src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java index e89fcf58..d3f11461 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java +++ b/src/main/java/com/flickr4java/flickr/blogs/BlogsInterface.java @@ -1,24 +1,21 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -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; +package com.flickr4java.flickr.blogs; -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. * @@ -33,11 +30,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; @@ -51,15 +48,14 @@ public BlogsInterface(String apiKey, String sharedSecret, Transport transport) { * This method does not require authentication. * * @return List of Services - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getServices() throws FlickrException { List list = new ArrayList(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_SERVICES); - parameters.put(Flickr.API_KEY, apiKey); - Response response = transportAPI.post(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -84,12 +80,11 @@ 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(); 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 +94,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()); } @@ -112,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); @@ -128,9 +123,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/blogs/Service.java b/src/main/java/com/flickr4java/flickr/blogs/Service.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/blogs/Service.java rename to src/main/java/com/flickr4java/flickr/blogs/Service.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/Brand.java b/src/main/java/com/flickr4java/flickr/cameras/Brand.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/Brand.java rename to src/main/java/com/flickr4java/flickr/cameras/Brand.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/Camera.java b/src/main/java/com/flickr4java/flickr/cameras/Camera.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/Camera.java rename to src/main/java/com/flickr4java/flickr/cameras/Camera.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java b/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java rename to src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java index 705d7296..457a9ff8 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java +++ b/src/main/java/com/flickr4java/flickr/cameras/CamerasInterface.java @@ -3,13 +3,12 @@ */ 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; 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; @@ -30,10 +29,10 @@ public class CamerasInterface { private static final String METHOD_GET_BRAND_MODELS = "flickr.cameras.getBrandModels"; /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(CamerasInterface.class); + private static Logger _log = LoggerFactory.getLogger(CamerasInterface.class); private final String apiKey; @@ -54,14 +53,13 @@ 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(); 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()); } @@ -87,15 +85,14 @@ 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(); 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/cameras/Details.java b/src/main/java/com/flickr4java/flickr/cameras/Details.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/cameras/Details.java rename to src/main/java/com/flickr4java/flickr/cameras/Details.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/collections/Collection.java b/src/main/java/com/flickr4java/flickr/collections/Collection.java similarity index 96% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/collections/Collection.java rename to src/main/java/com/flickr4java/flickr/collections/Collection.java index 974bfe42..2a54c18f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/collections/Collection.java +++ b/src/main/java/com/flickr4java/flickr/collections/Collection.java @@ -2,8 +2,8 @@ import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photosets.Photoset; - -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Date; @@ -18,10 +18,10 @@ public class Collection { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Collection.class); + private static Logger _log = LoggerFactory.getLogger(Collection.class); private String id; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java b/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java rename to src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java index 6836fe55..80856155 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java +++ b/src/main/java/com/flickr4java/flickr/collections/CollectionsInterface.java @@ -1,14 +1,13 @@ 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; 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; @@ -30,10 +29,10 @@ public class CollectionsInterface { private static final String METHOD_GET_TREE = "flickr.collections.getTree"; /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(CollectionsInterface.class); + private static Logger _log = LoggerFactory.getLogger(CollectionsInterface.class); private final String apiKey; @@ -56,15 +55,14 @@ 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(); 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()); } @@ -85,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(); @@ -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/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java rename to src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java index 38680ab7..93927010 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/commons/CommonsInterface.java +++ b/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 @@ -39,15 +38,14 @@ 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(); 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/src/main/java/com/flickr4java/flickr/commons/Institution.java similarity index 85% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/commons/Institution.java rename to 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/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/Contact.java b/src/main/java/com/flickr4java/flickr/contacts/Contact.java similarity index 79% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/Contact.java rename to src/main/java/com/flickr4java/flickr/contacts/Contact.java index e968a661..d8545116 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/Contact.java +++ b/src/main/java/com/flickr4java/flickr/contacts/Contact.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.contacts; import com.flickr4java.flickr.util.BuddyIconable; @@ -116,11 +114,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; } @@ -147,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/ContactList.java b/src/main/java/com/flickr4java/flickr/contacts/ContactList.java new file mode 100644 index 00000000..eba3d747 --- /dev/null +++ b/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/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java rename to src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java index 6795ddd8..90790e6a 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java +++ b/src/main/java/com/flickr4java/flickr/contacts/ContactsInterface.java @@ -1,8 +1,14 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.contacts; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.Response; +import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.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 +16,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. * @@ -51,18 +48,21 @@ 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); - 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()); } 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); @@ -94,18 +94,17 @@ public Collection getList() throws FlickrException { * Limits the resultset to contacts that have uploaded photos since this date. The date should be in the form of a Unix timestamp. The default, * and maximum, offset is (1) hour. (Optional, can be null) * @param filter - * Limit the result set to all contacts or only those who are friends or family.
+ * Limit the result set to all contacts or only those who are friends or family.
* Valid options are: ff -> friends and family, all -> all your contacts. (Optional, can be null) * * @return List of Contacts - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getListRecentlyUploaded(Date lastUpload, String filter) throws FlickrException { List contacts = new ArrayList(); 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 +113,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()); } @@ -150,17 +149,16 @@ 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(); 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/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java b/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java new file mode 100644 index 00000000..3b55706f --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/contacts/OnlineStatus.java @@ -0,0 +1,81 @@ + +package com.flickr4java.flickr.contacts; + +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 enum OnlineStatus implements Serializable { + + OFFLINE(OFFLINE_TYPE), + AWAY(AWAY_TYPE), + ONLINE(ONLINE_TYPE), + UNKNOWN(UNKNOWN_TYPE); + + private static final long serialVersionUID = 12L; + + private final int type; + + private OnlineStatus(int type) { + this.type = 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() { + return type; + } + + /** + * Get an OnlineStatus object for a given 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); + } + } + + /** + * Get the OnlineStatus value for a given int represented as a String + * + * @param type The int represented as a String + * @return The OnlineStatus object + */ + public static OnlineStatus fromType(String type) { + if (type == null || "".equals(type)) { + return UNKNOWN; + } else { + 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; + } +} 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 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java rename to src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java index f898484b..d226c0b1 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java +++ b/src/main/java/com/flickr4java/flickr/favorites/FavoritesInterface.java @@ -1,18 +1,6 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -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; +package com.flickr4java.flickr.favorites; -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -21,6 +9,15 @@ import com.flickr4java.flickr.photos.PhotoList; import com.flickr4java.flickr.photos.PhotoUtils; import com.flickr4java.flickr.util.StringUtilities; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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. @@ -30,7 +27,7 @@ */ public class FavoritesInterface { - private static final Logger logger = Logger.getLogger(FavoritesInterface.class); + private static final Logger logger = LoggerFactory.getLogger(FavoritesInterface.class); public static final String METHOD_ADD = "flickr.favorites.add"; @@ -59,15 +56,14 @@ 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(); 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()); } @@ -79,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 @@ -92,7 +88,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 +102,7 @@ public PhotoList getList(String userId, int perPage, int page, Set getList(String userId, int perPage, int page, Set getPublicList(String userId, int perPage, int page, Set extras) throws FlickrException { @@ -147,7 +142,6 @@ public PhotoList 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 +155,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 +182,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 +203,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/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java rename to src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java index 45911246..fbc2974f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/galleries/GalleriesInterface.java +++ b/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 * @@ -76,14 +75,13 @@ public GalleriesInterface(String apiKey, String sharedSecret, Transport transpor * @param page * The page number * @return gallery - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr * - * @see flickr.galleries.getList + * @see flickr.galleries.getList */ public List getList(String userId, int perPage, int page) throws FlickrException { Map parameters = new HashMap(); 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()); } @@ -221,19 +214,18 @@ 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(); 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()); } @@ -263,14 +255,13 @@ 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(); 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()); } @@ -313,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")); @@ -339,14 +330,13 @@ 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(); 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()); } @@ -377,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/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/src/main/java/com/flickr4java/flickr/groups/Blast.java b/src/main/java/com/flickr4java/flickr/groups/Blast.java new file mode 100644 index 00000000..9ac0696a --- /dev/null +++ b/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/Category.java b/src/main/java/com/flickr4java/flickr/groups/Category.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Category.java rename to src/main/java/com/flickr4java/flickr/groups/Category.java index c0c32125..7a765271 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Category.java +++ b/src/main/java/com/flickr4java/flickr/groups/Category.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.groups; import java.util.Collection; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java b/src/main/java/com/flickr4java/flickr/groups/Group.java similarity index 64% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java rename to src/main/java/com/flickr4java/flickr/groups/Group.java index c9bc3b5a..3be27cc6 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Group.java +++ b/src/main/java/com/flickr4java/flickr/groups/Group.java @@ -1,11 +1,10 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.groups; -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.util.BuddyIconable; import com.flickr4java.flickr.util.UrlUtilities; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Class representing a Flickr Group. @@ -14,12 +13,18 @@ */ public class Group implements BuddyIconable { + private static Logger _log = LoggerFactory.getLogger(Group.class); + private String id; private String name; private int members; + private int poolCount; + + private int topicCount; + private String privacy; private int iconFarm; @@ -30,6 +35,10 @@ public class Group implements BuddyIconable { private Throttle throttle; + private Blast blast; + + private Restriction restriction; + private String lang; private boolean poolModerated; @@ -83,8 +92,43 @@ 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; + } + + 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); + _log.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); + _log.trace("Group.setTopicCount(String) encountered a number format exception. topicCount set to 0"); } } @@ -92,6 +136,7 @@ public void setMembers(String members) { * @deprecated * @return the online-state */ + @Deprecated public int getOnline() { return online; } @@ -100,6 +145,7 @@ public int getOnline() { * @deprecated * @param online */ + @Deprecated public void setOnline(int online) { this.online = online; } @@ -108,14 +154,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"); } } @@ -123,6 +169,7 @@ public void setOnline(String online) { * @deprecated * @return chatId */ + @Deprecated public String getChatId() { return chatId; } @@ -131,6 +178,7 @@ public String getChatId() { * @deprecated * @param chatId */ + @Deprecated public void setChatId(String chatId) { this.chatId = chatId; } @@ -139,6 +187,7 @@ public void setChatId(String chatId) { * @deprecated * @return the number of users in chat */ + @Deprecated public int getInChat() { return inChat; } @@ -147,6 +196,7 @@ public int getInChat() { * @deprecated * @param inChat */ + @Deprecated public void setInChat(int inChat) { this.inChat = inChat; } @@ -155,15 +205,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"); } } @@ -188,7 +237,7 @@ public int getPhotoCount() { } /** - * @deprecated + * * @param photoCount */ public void setPhotoCount(int photoCount) { @@ -196,7 +245,7 @@ public void setPhotoCount(int photoCount) { } /** - * @deprecated + * * @param photoCount */ public void setPhotoCount(String photoCount) { @@ -205,9 +254,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"); } } } @@ -216,6 +263,7 @@ public void setPhotoCount(String photoCount) { * @deprecated * @return boolean */ + @Deprecated public boolean isEighteenPlus() { return eighteenPlus; } @@ -224,6 +272,7 @@ public boolean isEighteenPlus() { * @deprecated * @param eighteenPlus */ + @Deprecated public void setEighteenPlus(boolean eighteenPlus) { this.eighteenPlus = eighteenPlus; } @@ -252,28 +301,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)); @@ -287,11 +342,26 @@ public void setIconServer(String iconServer) { * * @see Flickr Documentation * @return The BuddyIconUrl + * @deprecated use {@link #getSecureBuddyIconUrl() } */ + @Override + @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; } @@ -300,6 +370,22 @@ 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/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 69% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java rename to src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java index 03912ab0..17848438 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/GroupsInterface.java @@ -1,23 +1,21 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.groups; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.Response; +import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.util.XMLUtilities; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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. * @@ -26,6 +24,8 @@ */ public class GroupsInterface { + private static Logger _log = LoggerFactory.getLogger(GroupsInterface.class); + public static final String METHOD_BROWSE = "flickr.groups.browse"; public static final String METHOD_GET_ACTIVE_LIST = "flickr.groups.getActiveList"; @@ -40,11 +40,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; @@ -58,22 +58,22 @@ 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 public Category browse(String catId) throws FlickrException { List subcategories = new ArrayList(); List groups = new ArrayList(); 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 +124,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()); } @@ -143,6 +142,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(); @@ -160,7 +161,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"))); + } else if (n > 1) { + _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")); + } else if (n > 1) { + _log.warn("WARNING: more than one throttle element in group"); } return group; @@ -177,13 +209,12 @@ 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(); Map parameters = new HashMap(); parameters.put("method", METHOD_SEARCH); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("text", text); @@ -194,7 +225,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()); } @@ -216,27 +247,27 @@ 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 { 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); + 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()); } @@ -244,24 +275,25 @@ 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(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()); } @@ -269,21 +301,22 @@ 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(); 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/src/main/java/com/flickr4java/flickr/groups/Restriction.java b/src/main/java/com/flickr4java/flickr/groups/Restriction.java new file mode 100644 index 00000000..ddd95c6d --- /dev/null +++ b/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; + } + + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Subcategory.java b/src/main/java/com/flickr4java/flickr/groups/Subcategory.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Subcategory.java rename to src/main/java/com/flickr4java/flickr/groups/Subcategory.java index 4ea067f3..987852c6 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Subcategory.java +++ b/src/main/java/com/flickr4java/flickr/groups/Subcategory.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.groups; /** diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Throttle.java b/src/main/java/com/flickr4java/flickr/groups/Throttle.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/Throttle.java rename to src/main/java/com/flickr4java/flickr/groups/Throttle.java diff --git a/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java b/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java new file mode 100644 index 00000000..8ea93448 --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/groups/discuss/GroupDiscussInterface.java @@ -0,0 +1,238 @@ +package com.flickr4java.flickr.groups.discuss; + +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; + +/** + * Group.Discuss Interface. + * + * @author Jonathan Willis + */ +public class GroupDiscussInterface { + + 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.replies.getInfo"; + + private final String apiKey; + + private final String sharedSecret; + + private final 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 com.flickr4java.flickr.groups.Group}. + * @param perPage + * Number of records per page. + * @param page + * Result-section. + * @return A group topic list + * @throws FlickrException if there was a problem connecting to Flickr + * @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("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 if there was a problem connecting to Flickr + * @see API Documentation + */ + public Topic getTopicInfo(String topicId) throws FlickrException { + Map parameters = new HashMap(); + parameters.put("method", METHOD_TOPICS_GET_INFO); + 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 if there was a problem connecting to Flickr + * @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("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 if there was a problem connecting to Flickr + * @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("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/src/main/java/com/flickr4java/flickr/groups/discuss/Reply.java b/src/main/java/com/flickr4java/flickr/groups/discuss/Reply.java new file mode 100644 index 00000000..d21f60c1 --- /dev/null +++ b/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/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyList.java b/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyList.java new file mode 100644 index 00000000..5a47fb61 --- /dev/null +++ b/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/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyObject.java b/src/main/java/com/flickr4java/flickr/groups/discuss/ReplyObject.java new file mode 100644 index 00000000..4a7460bc --- /dev/null +++ b/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/src/main/java/com/flickr4java/flickr/groups/discuss/Topic.java b/src/main/java/com/flickr4java/flickr/groups/discuss/Topic.java new file mode 100644 index 00000000..451810c9 --- /dev/null +++ b/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/src/main/java/com/flickr4java/flickr/groups/discuss/TopicList.java b/src/main/java/com/flickr4java/flickr/groups/discuss/TopicList.java new file mode 100644 index 00000000..17e94ab3 --- /dev/null +++ b/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; + } + +} 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 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java rename to src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java index f1ca2270..623423cc 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/members/MembersInterface.java +++ b/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. * @@ -47,14 +46,13 @@ 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 { 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/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 75% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java rename to src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java index 216e126c..2cde3be8 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java +++ b/src/main/java/com/flickr4java/flickr/groups/pools/PoolsInterface.java @@ -1,30 +1,27 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -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; +package com.flickr4java.flickr.groups.pools; -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.photos.Extras; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photos.PhotoContext; import com.flickr4java.flickr.photos.PhotoList; import com.flickr4java.flickr.photos.PhotoUtils; import com.flickr4java.flickr.util.StringUtilities; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; /** * @author Anthony Eden @@ -32,6 +29,8 @@ */ public class PoolsInterface { + private static Logger _log = LoggerFactory.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 +41,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; @@ -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()); } @@ -86,17 +84,16 @@ 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(); 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()); } @@ -112,8 +109,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; @@ -123,20 +120,23 @@ 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 { - List groups = new ArrayList(); + GroupList groups = new GroupList(); 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()); } 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); @@ -145,6 +145,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; @@ -158,6 +161,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 @@ -167,16 +172,18 @@ 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[] 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(); parameters.put("method", METHOD_GET_PHOTOS); - 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, " ")); } @@ -199,7 +206,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()); } @@ -218,6 +225,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 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); + } + /** * Convenience/Compatibility method. * @@ -245,17 +275,16 @@ 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(); 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/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java similarity index 89% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java rename to src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java index d0828917..29ccbfee 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/interestingness/InterestingnessInterface.java +++ b/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; @@ -78,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 { @@ -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()); } @@ -129,13 +126,13 @@ 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 { 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); @@ -145,7 +142,7 @@ public PhotoList getList(Date date, Set extras, int perPage, int * convenience method to get the list of all 500 most recent photos in flickr explore with all known extra attributes. * * @return a List of Photos - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public PhotoList getList() throws FlickrException { return getList((String) null, Extras.ALL_EXTRAS, 500, 1); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java b/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java similarity index 88% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java rename to src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java index c2ae6b83..0621dbe3 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/MachinetagsInterface.java +++ b/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. * @@ -44,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 * * *

@@ -131,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?

    @@ -216,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?

    * @@ -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; @@ -262,13 +261,12 @@ 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(); 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()); } @@ -311,13 +309,12 @@ 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(); 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()); } @@ -361,13 +358,12 @@ 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(); 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()); } @@ -410,13 +406,12 @@ 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(); 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; } @@ -460,13 +458,12 @@ 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(); 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/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 83% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/machinetags/Value.java rename to 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/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/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 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java rename to src/main/java/com/flickr4java/flickr/panda/PandaInterface.java index fadc1497..126c053f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/panda/PandaInterface.java +++ b/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. * @@ -49,15 +48,14 @@ 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(); 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()); } @@ -86,13 +84,12 @@ 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 { 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/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java similarity index 78% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java rename to src/main/java/com/flickr4java/flickr/people/PeopleInterface.java index 52e4309a..1286b1b7 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java +++ b/src/main/java/com/flickr4java/flickr/people/PeopleInterface.java @@ -1,9 +1,6 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.people; -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -30,7 +27,7 @@ /** * Interface for finding Flickr users. - * + * * @author Anthony Eden * @version $Id: PeopleInterface.java,v 1.28 2010/09/12 20:13:57 x-mago Exp $ */ @@ -56,6 +53,8 @@ public class PeopleInterface { public static final String METHOD_GET_GROUPS = "flickr.people.getGroups"; + public static final String METHOD_GET_LIMITS = "flickr.people.getLimits"; + private final String apiKey; private final String sharedSecret; @@ -70,22 +69,21 @@ public PeopleInterface(String apiKey, String sharedSecret, Transport transportAP /** * Find the user by their email address. - * + * * This method does not require authentication. - * + * * @param email * The email address * @return The User - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public User findByEmail(String email) throws FlickrException { Map parameters = new HashMap(); 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()); } @@ -98,22 +96,21 @@ public User findByEmail(String email) throws FlickrException { /** * Find a User by the username. - * + * * This method does not require authentication. - * + * * @param username * The username * @return The User object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public User findByUsername(String username) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_FIND_BY_USERNAME); - parameters.put(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()); } @@ -126,22 +123,21 @@ public User findByUsername(String username) throws FlickrException { /** * Get info about the specified user. - * + * * This method does not require authentication. - * + * * @param userId * The user ID * @return The User object - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public User getInfo(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INFO); - parameters.put(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()); } @@ -158,6 +154,12 @@ public User getInfo(String userId) throws FlickrException { String lPathAlias = userElement.getAttribute("path_alias"); user.setPathAlias(lPathAlias == null || "".equals(lPathAlias) ? null : lPathAlias); user.setUsername(XMLUtilities.getChildValue(userElement, "username")); + user.setDescription(XMLUtilities.getChildValue(userElement, "description")); + user.setGender(XMLUtilities.getChildValue(userElement, "gender")); + user.setIgnored("1".equals(XMLUtilities.getChildValue(userElement, "ignored"))); + user.setContact("1".equals(XMLUtilities.getChildValue(userElement, "contact"))); + user.setFriend("1".equals(XMLUtilities.getChildValue(userElement, "friend"))); + user.setFamily("1".equals(XMLUtilities.getChildValue(userElement, "family"))); user.setRealName(XMLUtilities.getChildValue(userElement, "realname")); user.setLocation(XMLUtilities.getChildValue(userElement, "location")); user.setMbox_sha1sum(XMLUtilities.getChildValue(userElement, "mbox_sha1sum")); @@ -170,32 +172,41 @@ public User getInfo(String userId) throws FlickrException { user.setPhotosFirstDateTaken(XMLUtilities.getChildValue(photosElement, "firstdatetaken")); user.setPhotosCount(XMLUtilities.getChildValue(photosElement, "count")); + NodeList tzNodes = userElement.getElementsByTagName("timezone"); + for (int i = 0; i < tzNodes.getLength(); i++) { + Element tzElement = (Element) tzNodes.item(i); + TimeZone tz = new TimeZone(); + user.setTimeZone(tz); + tz.setLabel(tzElement.getAttribute("label")); + tz.setTimeZoneId(tzElement.getAttribute("timezone_id")); + tz.setOffset(tzElement.getAttribute("offset")); + } + return user; } /** * Get a collection of public groups for the user. - * + * * The groups will contain only the members nsid, name, admin and eighteenplus. If you want the whole group-information, you have to call * {@link com.flickr4java.flickr.groups.GroupsInterface#getInfo(String)}. - * + * * This method does not require authentication. - * + * * @param userId * The user ID * @return The public groups - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getPublicGroups(String userId) throws FlickrException { List groups = new ArrayList(); 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()); } @@ -219,9 +230,9 @@ public PhotoList getPublicPhotos(String userId, int perPage, int page) th /** * Get a collection of public photos for the specified user ID. - * + * * This method does not require authentication. - * + * * @see com.flickr4java.flickr.photos.Extras * @param userId * The User ID @@ -232,14 +243,13 @@ 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(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PUBLIC_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("user_id", userId); @@ -254,7 +264,7 @@ public PhotoList getPublicPhotos(String userId, Set extras, int p parameters.put(Extras.KEY_EXTRAS, StringUtilities.join(extras, ",")); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -274,18 +284,17 @@ public PhotoList getPublicPhotos(String userId, Set extras, int p /** * Get upload status for the currently authenticated user. - * + * * Requires authentication with 'read' permission using the new authentication API. - * + * * @return A User object with upload status data fields filled - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public User getUploadStatus() throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_UPLOAD_STATUS); - 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()); } @@ -298,10 +307,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; } @@ -310,7 +331,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 +364,7 @@ public PhotoList getPhotos(String userId, String safeSearch, Date minUplo parameters.put(Extras.KEY_EXTRAS, StringUtilities.join(extras, ",")); } - Response response = transportAPI.get(transportAPI.getPath(), parameters, sharedSecret); + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -368,7 +388,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 +403,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()); } @@ -404,7 +423,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"))); @@ -417,11 +436,11 @@ public PhotoList getPhotosOf(String userId, String ownerId, Set e /** * Add the given person to the photo. Optionally, send in co-ordinates - * + * * @param photoId * @param userId * @param bounds - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void add(String photoId, String userId, Rectangle bounds) throws FlickrException { @@ -432,10 +451,10 @@ public void add(String photoId, String userId, Rectangle bounds) throws FlickrEx /** * Delete the person from the photo - * + * * @param photoId * @param userId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void delete(String photoId, String userId) throws FlickrException { @@ -446,10 +465,10 @@ public void delete(String photoId, String userId) throws FlickrException { /** * Delete the co-ordinates that the user is shown in - * + * * @param photoId * @param userId - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void deleteCoords(String photoId, String userId) throws FlickrException { @@ -460,11 +479,11 @@ public void deleteCoords(String photoId, String userId) throws FlickrException { /** * Edit the co-ordinates that the user shows in - * + * * @param photoId * @param userId * @param bounds - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public void editCoords(String photoId, String userId, Rectangle bounds) throws FlickrException { @@ -474,11 +493,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 + * @throws FlickrException if there was a problem connecting to Flickr */ - 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,19 +506,18 @@ public UserList 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 { 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()); } @@ -516,10 +535,48 @@ public GroupList getGroups(String userId) throws FlickrException { group.setAdmin("1".equals(groupElement.getAttribute("admin"))); group.setEighteenPlus("1".equals(groupElement.getAttribute("eighteenplus"))); group.setInvitationOnly("1".equals(groupElement.getAttribute("invitation_only"))); + group.setMembers(groupElement.getAttribute("members")); + group.setPhotoCount(groupElement.getAttribute("pool_count")); groupList.add(group); } return groupList; } + /** + * Get's the user's current upload limits, User object only contains user_id + * + * @return Media Limits + */ + + public User getLimits() throws FlickrException { + Map parameters = new HashMap(); + parameters.put("method", METHOD_GET_LIMITS); + + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + 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/src/main/java/com/flickr4java/flickr/people/PersonTag.java b/src/main/java/com/flickr4java/flickr/people/PersonTag.java new file mode 100644 index 00000000..428f023c --- /dev/null +++ b/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/src/main/java/com/flickr4java/flickr/people/PersonTagList.java b/src/main/java/com/flickr4java/flickr/people/PersonTagList.java new file mode 100644 index 00000000..6e88157f --- /dev/null +++ b/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/src/main/java/com/flickr4java/flickr/people/PhotoLimits.java b/src/main/java/com/flickr4java/flickr/people/PhotoLimits.java new file mode 100644 index 00000000..0f46e3c0 --- /dev/null +++ b/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/src/main/java/com/flickr4java/flickr/people/TimeZone.java b/src/main/java/com/flickr4java/flickr/people/TimeZone.java new file mode 100644 index 00000000..8ec092a4 --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/people/TimeZone.java @@ -0,0 +1,58 @@ +package com.flickr4java.flickr.people; + +public class TimeZone { + + private String label; + + private String offset; + + private String timeZoneId; + + /** + * Time Zone text + * + * @return the label + */ + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + /** + * Time Zone offset + * + * @return timezone offset value + */ + public String getOffset() { + return offset; + } + + /** + * @deprecated typo in method name, use {@link #getOffset()}. + */ + @Deprecated + public String geOffset() { + return offset; + } + + public void setOffset(String offset) { + this.offset = offset; + } + + /** + * Time Zone id + * + * @return timezone_id offset value + */ + public String getTimeZoneId() { + return timeZoneId; + } + + public void setTimeZoneId(String id) { + this.timeZoneId = id; + } + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java b/src/main/java/com/flickr4java/flickr/people/User.java similarity index 66% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java rename to src/main/java/com/flickr4java/flickr/people/User.java index 2685a02b..02cb8326 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/people/User.java +++ b/src/main/java/com/flickr4java/flickr/people/User.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.people; import com.flickr4java.flickr.contacts.OnlineStatus; @@ -31,6 +29,18 @@ protected synchronized SimpleDateFormat initialValue() { private String username; + private String description; + + private String gender; + + private boolean ignored; + + private boolean contact; + + private boolean friend; + + private boolean family; + private boolean admin; private boolean pro; @@ -43,6 +53,8 @@ protected synchronized SimpleDateFormat initialValue() { private String location; + private TimeZone timeZone; + private Date photosFirstDate; private Date photosFirstDateTaken; @@ -59,6 +71,18 @@ protected synchronized SimpleDateFormat initialValue() { private long bandwidthUsed; + private Boolean bandwidthUnlimited; + + private String setsCreated; + + private String setsRemaining; + + private String videosUploaded; + + private String videosRemaining; + + private String videoSizeMax; + private long filesizeMax; private String mbox_sha1sum; @@ -77,6 +101,10 @@ protected synchronized SimpleDateFormat initialValue() { private String pathAlias; + private PhotoLimits photoLimits; + + private VideoLimits videoLimits; + public User() { } @@ -96,6 +124,61 @@ public void setUsername(String username) { this.username = username; } + /** + * @return the description + */ + public String getDescription() { + return description; + } + + /** + * @param description + * the description to set + */ + public void setDescription(String description) { + this.description = description; + } + + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public boolean isIgnored() { + return ignored; + } + + public void setIgnored(boolean ignored) { + this.ignored = ignored; + } + + public boolean isContact() { + return contact; + } + + public void setContact(boolean contact) { + this.contact = contact; + } + + public boolean isFriend() { + return friend; + } + + public void setFriend(boolean friend) { + this.friend = friend; + } + + public boolean isFamily() { + return family; + } + + public void setFamily(boolean family) { + this.family = family; + } + public boolean isAdmin() { return admin; } @@ -112,28 +195,34 @@ public void setPro(boolean pro) { this.pro = pro; } + @Override public int getIconFarm() { return iconFarm; } + @Override public void setIconFarm(int iconFarm) { this.iconFarm = iconFarm; } + @Override public void setIconFarm(String iconFarm) { if (iconFarm != null) { setIconFarm(Integer.parseInt(iconFarm)); } } + @Override public int getIconServer() { return iconServer; } + @Override public void setIconServer(int iconServer) { this.iconServer = iconServer; } + @Override public void setIconServer(String iconServer) { if (iconServer != null) { setIconServer(Integer.parseInt(iconServer)); @@ -148,8 +237,12 @@ 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; } /** @@ -159,11 +252,30 @@ public String getLocation() { * * @see Flickr Documentation * @return The BuddyIconUrl + * @deprecated use {@link #getSecureBuddyIconUrl() } */ + @Override + @Deprecated public String getBuddyIconUrl() { return UrlUtilities.createBuddyIconUrl(iconFarm, iconServer, id); } + public String getLocation() { + return location; + } + + /** + * 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; } @@ -404,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.) * @@ -417,4 +529,75 @@ 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/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/src/main/java/com/flickr4java/flickr/people/VideoLimits.java b/src/main/java/com/flickr4java/flickr/people/VideoLimits.java new file mode 100644 index 00000000..b99c6403 --- /dev/null +++ b/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/Editability.java b/src/main/java/com/flickr4java/flickr/photos/Editability.java similarity index 82% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Editability.java rename to src/main/java/com/flickr4java/flickr/photos/Editability.java index c378657e..d8c4f0d6 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Editability.java +++ b/src/main/java/com/flickr4java/flickr/photos/Editability.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; /** @@ -47,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/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Exif.java b/src/main/java/com/flickr4java/flickr/photos/Exif.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Exif.java rename to src/main/java/com/flickr4java/flickr/photos/Exif.java index 6d56dcb4..97f5ae4b 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Exif.java +++ b/src/main/java/com/flickr4java/flickr/photos/Exif.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Extras.java b/src/main/java/com/flickr4java/flickr/photos/Extras.java similarity index 96% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Extras.java rename to src/main/java/com/flickr4java/flickr/photos/Extras.java index 154bdee0..58c63426 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Extras.java +++ b/src/main/java/com/flickr4java/flickr/photos/Extras.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; import java.util.HashSet; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/GeoData.java b/src/main/java/com/flickr4java/flickr/photos/GeoData.java similarity index 89% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/GeoData.java rename to src/main/java/com/flickr4java/flickr/photos/GeoData.java index 85133a97..d7fc0b76 100644 --- a/Flickr4Java/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/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Media.java b/src/main/java/com/flickr4java/flickr/photos/Media.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Media.java rename to src/main/java/com/flickr4java/flickr/photos/Media.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Note.java b/src/main/java/com/flickr4java/flickr/photos/Note.java similarity index 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Note.java rename to src/main/java/com/flickr4java/flickr/photos/Note.java index 53252e11..a4ec3202 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Note.java +++ b/src/main/java/com/flickr4java/flickr/photos/Note.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; import java.awt.Rectangle; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Permissions.java b/src/main/java/com/flickr4java/flickr/photos/Permissions.java similarity index 84% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Permissions.java rename to src/main/java/com/flickr4java/flickr/photos/Permissions.java index 6cf6ed03..239d7e99 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Permissions.java +++ b/src/main/java/com/flickr4java/flickr/photos/Permissions.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; /** @@ -105,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/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java b/src/main/java/com/flickr4java/flickr/photos/Photo.java similarity index 77% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java rename to src/main/java/com/flickr4java/flickr/photos/Photo.java index 4f686d6c..8aac977b 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photo.java +++ b/src/main/java/com/flickr4java/flickr/photos/Photo.java @@ -1,10 +1,9 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.people.User; +import com.flickr4java.flickr.places.Place; import com.flickr4java.flickr.stats.Stats; import com.flickr4java.flickr.stats.StatsInterface; import com.flickr4java.flickr.tags.Tag; @@ -20,6 +19,7 @@ import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.Arrays; import java.util.Collection; import java.util.Date; @@ -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; @@ -93,6 +113,10 @@ protected synchronized SimpleDateFormat initialValue() { private Size videoOriginal; + private Size mobileMP4; + + private Size hdMP4; + private String id; private User owner; @@ -132,6 +156,8 @@ protected synchronized SimpleDateFormat initialValue() { private Permissions permissions; private Editability editability; + + private Editability publicEditability; private int comments; @@ -168,12 +194,28 @@ protected synchronized SimpleDateFormat initialValue() { private int originalWidth; private int originalHeight; + + private PhotoUrl photoUrl; + + private Usage usage; + + 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. */ private Stats stats; + + public Photo() { } @@ -548,7 +590,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 { @@ -744,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(); } @@ -752,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; @@ -808,12 +890,29 @@ 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(); } } + public String getMobileMp4Url() { + if (mobileMP4 == null) { + return ""; + } else { + return mobileMP4.getSource(); + } + } + + public String getHdMp4Url() { + if (hdMP4 == null) { + return ""; + } else { + return hdMP4.getSource(); + } + } + /** * Get an image using the specified URL suffix. * @@ -839,7 +938,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 { @@ -892,7 +991,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 { @@ -926,11 +1025,22 @@ 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("http://farm"); + buffer.append("https://farm"); buffer.append(getFarm()); - buffer.append(".static.flickr.com/"); + buffer.append(".staticflickr.com/"); buffer.append(getServer()); buffer.append("/"); buffer.append(getId()); @@ -1018,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) { @@ -1035,9 +1155,25 @@ 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) { + hdMP4 = size; + } } } + public Collection getSizes() { + return Arrays.asList( + smallSize, squareSize, thumbnailSize, mediumSize, + largeSize, large1600Size, large2048Size, originalSize, + squareLargeSize, small320Size, medium640Size, medium800Size, + videoPlayer, siteMP4, videoOriginal, mobileMP4, hdMP4, + extraLarge3072Size, extraLarge4096Size, extraLarge4096FSize, extraLarge5120Size, extraLarge6144Size + ); + } + public Size getSquareSize() { return squareSize; } @@ -1066,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; } @@ -1098,6 +1254,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 hdMP4 + */ + public Size getHdMp4() { + return hdMP4; + } + + /** + * @param hdMP4 the hdMP4 to set + */ + public void setHdMp4(Size hdMP4) { + this.hdMP4 = hdMP4; + } + /** * @return the pathAlias */ @@ -1149,4 +1333,71 @@ 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; + } + + 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/src/main/java/com/flickr4java/flickr/photos/PhotoAllContext.java b/src/main/java/com/flickr4java/flickr/photos/PhotoAllContext.java new file mode 100644 index 00000000..d3c08308 --- /dev/null +++ b/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/PhotoContext.java b/src/main/java/com/flickr4java/flickr/photos/PhotoContext.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoContext.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoContext.java index 03622a6a..9ff3bb04 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoContext.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotoContext.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; /** diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoList.java b/src/main/java/com/flickr4java/flickr/photos/PhotoList.java similarity index 84% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoList.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoList.java index 2367e7eb..194f94eb 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoList.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotoList.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoPlace.java b/src/main/java/com/flickr4java/flickr/photos/PhotoPlace.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoPlace.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoPlace.java diff --git a/src/main/java/com/flickr4java/flickr/photos/PhotoSet.java b/src/main/java/com/flickr4java/flickr/photos/PhotoSet.java new file mode 100644 index 00000000..05cc09b1 --- /dev/null +++ b/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/src/main/java/com/flickr4java/flickr/photos/PhotoSetList.java b/src/main/java/com/flickr4java/flickr/photos/PhotoSetList.java new file mode 100644 index 00000000..b1e6f08b --- /dev/null +++ b/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/PhotoUrl.java b/src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java similarity index 84% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java index d4376963..1dfee81c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotoUrl.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.photos; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java b/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java similarity index 62% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java rename to src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java index f90dacd6..54a4387e 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotoUtils.java @@ -1,15 +1,17 @@ package com.flickr4java.flickr.photos; -import java.util.ArrayList; -import java.util.List; +import com.flickr4java.flickr.people.User; +import com.flickr4java.flickr.places.Place; +import com.flickr4java.flickr.stats.Stats; +import com.flickr4java.flickr.tags.Tag; +import com.flickr4java.flickr.util.XMLUtilities; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.w3c.dom.Text; -import com.flickr4java.flickr.people.User; -import com.flickr4java.flickr.tags.Tag; -import com.flickr4java.flickr.util.XMLUtilities; +import java.util.ArrayList; +import java.util.List; /** * Utilitiy-methods to transfer requested XML to Photo-objects. @@ -73,11 +75,19 @@ 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 the attributes active that contain the image-urls, // Size-objects created from them, which are used to override @@ -88,6 +98,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.THUMB); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_t")); + sizeT.setHeight(photoElement.getAttribute("height_t")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_s"); @@ -95,6 +107,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.SMALL); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_s")); + sizeT.setHeight(photoElement.getAttribute("height_s")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_sq"); @@ -102,6 +116,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.SQUARE); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_sq")); + sizeT.setHeight(photoElement.getAttribute("height_sq")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_m"); @@ -109,6 +125,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.MEDIUM); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_m")); + sizeT.setHeight(photoElement.getAttribute("height_m")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_l"); @@ -116,6 +134,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.LARGE); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_l")); + sizeT.setHeight(photoElement.getAttribute("height_l")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_o"); @@ -123,6 +143,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.ORIGINAL); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_o")); + sizeT.setHeight(photoElement.getAttribute("height_o")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_q"); @@ -130,6 +152,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.SQUARE_LARGE); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_q")); + sizeT.setHeight(photoElement.getAttribute("height_q")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_n"); @@ -137,6 +161,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.SMALL_320); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_n")); + sizeT.setHeight(photoElement.getAttribute("height_n")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_z"); @@ -144,6 +170,8 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.MEDIUM_640); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_z")); + sizeT.setHeight(photoElement.getAttribute("height_z")); sizes.add(sizeT); } urlTmp = photoElement.getAttribute("url_c"); @@ -151,6 +179,71 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme Size sizeT = new Size(); sizeT.setLabel(Size.MEDIUM_800); sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_c")); + sizeT.setHeight(photoElement.getAttribute("height_c")); + sizes.add(sizeT); + } + urlTmp = photoElement.getAttribute("url_h"); + if (urlTmp != null && urlTmp.startsWith("http")) { + Size sizeT = new Size(); + sizeT.setLabel(Size.LARGE_1600); + sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_h")); + sizeT.setHeight(photoElement.getAttribute("height_h")); + sizes.add(sizeT); + } + urlTmp = photoElement.getAttribute("url_k"); + if (urlTmp != null && urlTmp.startsWith("http")) { + Size sizeT = new Size(); + sizeT.setLabel(Size.LARGE_2048); + sizeT.setSource(urlTmp); + sizeT.setWidth(photoElement.getAttribute("width_k")); + sizeT.setHeight(photoElement.getAttribute("height_k")); + sizes.add(sizeT); + } + 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) { @@ -160,8 +253,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"); @@ -174,7 +271,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")); @@ -193,14 +290,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 { @@ -244,12 +341,15 @@ 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 { @@ -263,6 +363,31 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme // 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); photo.setComments(((Text) commentsElement.getFirstChild()).getData()); @@ -334,12 +459,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) { @@ -371,6 +500,53 @@ public static final Photo createPhoto(Element photoElement, Element defaultEleme } } + try { + Place place = null; + Element element = (Element) photoElement.getElementsByTagName("locality").item(0); + place = new Place(element.getAttribute("place_id"), element.getTextContent(), element.getAttribute("woeid")); + photo.setLocality(place); + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { + } + + try { + Place place = null; + Element element = (Element) photoElement.getElementsByTagName("county").item(0); + place = new Place(element.getAttribute("place_id"), element.getTextContent(), element.getAttribute("woeid")); + photo.setCounty(place); + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { + } + + try { + Place place = null; + Element element = (Element) photoElement.getElementsByTagName("region").item(0); + place = new Place(element.getAttribute("place_id"), element.getTextContent(), element.getAttribute("woeid")); + photo.setRegion(place); + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { + } + + try { + Place place = null; + Element element = (Element) photoElement.getElementsByTagName("country").item(0); + place = new Place(element.getAttribute("place_id"), element.getTextContent(), element.getAttribute("woeid")); + photo.setCountry(place); + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { + } + + //set stats from extras (count_faves,count_comments,count_views) + try { + Stats stats = new Stats();; + stats.setFavorites(photoElement.getAttribute("count_faves")); + stats.setComments(photoElement.getAttribute("count_comments")); + stats.setViews(photoElement.getAttribute("count_views")); + photo.setStats(stats); + } catch (IndexOutOfBoundsException e) { + } catch (NullPointerException e) { + } + return photo; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photocount.java b/src/main/java/com/flickr4java/flickr/photos/Photocount.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photocount.java rename to src/main/java/com/flickr4java/flickr/photos/Photocount.java index 4e95e7b3..a4a16d2f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Photocount.java +++ b/src/main/java/com/flickr4java/flickr/photos/Photocount.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; import java.util.Date; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java b/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java rename to src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java index 267f57c0..8d214422 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/PhotosInterface.java @@ -1,9 +1,6 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + 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; @@ -19,11 +16,11 @@ import org.w3c.dom.NodeList; import javax.imageio.ImageIO; +import javax.net.ssl.HttpsURLConnection; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; -import java.net.HttpURLConnection; import java.net.URL; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -140,17 +137,16 @@ 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(); 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()); } @@ -162,17 +158,16 @@ 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(); 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()); } @@ -187,31 +182,56 @@ public void delete(String photoId) throws FlickrException { * * @param photoId * The photo to return information for. - * @return a list of {@link PhotoPlace} objects - * @throws FlickrException + * @return a list of {@link PhotoContext} objects + * @throws FlickrException if there was a problem connecting to Flickr */ - 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); - 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()); } + 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); + } + } - Collection coll = response.getPayloadCollection(); - for (Element el : coll) { - String id = el.getAttribute("id"); - String title = el.getAttribute("title"); - String kind = el.getTagName(); + return allContext; - list.add(new PhotoPlace(kind, id, title)); - } - return list; } /** @@ -228,14 +248,13 @@ public List 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(); 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 +269,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()); } @@ -284,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 { @@ -297,7 +316,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 +344,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()); } @@ -351,16 +369,15 @@ 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(); 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 +422,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 +443,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()); } @@ -456,19 +472,18 @@ 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(); 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 +518,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 +529,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()); } @@ -546,19 +560,18 @@ 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(); 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()); } @@ -577,14 +590,13 @@ 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(); 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 +612,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()); } @@ -626,16 +638,15 @@ 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(); 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()); } @@ -644,6 +655,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; @@ -662,12 +674,11 @@ 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(); 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 +690,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()); } @@ -698,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); @@ -716,22 +727,24 @@ 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 { - List sizes = new ArrayList(); + SizeList sizes = new SizeList<>(); - Map parameters = new HashMap(); + 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()); } 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); @@ -755,12 +768,11 @@ 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(); parameters.put("method", METHOD_GET_UNTAGGED); - parameters.put(Flickr.API_KEY, apiKey); if (perPage > 0) { parameters.put("per_page", Integer.toString(perPage)); @@ -769,7 +781,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()); } @@ -797,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. @@ -814,13 +826,12 @@ 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 { 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 +861,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()); } @@ -878,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. @@ -895,13 +906,12 @@ 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 { 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 +941,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()); } @@ -957,12 +967,11 @@ 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(); parameters.put("method", METHOD_RECENTLY_UPDATED); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("min_date", Long.toString(minDate.getTime() / 1000L)); @@ -976,7 +985,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()); } @@ -992,16 +1001,15 @@ 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(); 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()); } @@ -1017,14 +1025,13 @@ 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(); Map parameters = new HashMap(); parameters.put("method", METHOD_SEARCH); - parameters.put(Flickr.API_KEY, apiKey); parameters.putAll(params.getAsParameters()); @@ -1035,7 +1042,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()); } @@ -1063,14 +1070,13 @@ 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(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_INTERESTINGNESS); - parameters.put(Flickr.API_KEY, apiKey); parameters.putAll(params.getAsParameters()); @@ -1081,7 +1087,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()); } @@ -1125,17 +1131,16 @@ 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(); 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()); } @@ -1154,12 +1159,11 @@ 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(); parameters.put("method", METHOD_SET_DATES); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); @@ -1175,7 +1179,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()); } @@ -1192,18 +1196,17 @@ 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(); 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()); } @@ -1218,12 +1221,11 @@ 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(); 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 +1234,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()); } @@ -1253,12 +1255,11 @@ 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(); parameters.put("method", METHOD_SET_SAFETYLEVEL); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); @@ -1270,7 +1271,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()); } @@ -1285,17 +1286,16 @@ 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(); 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()); } @@ -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 { @@ -1366,11 +1366,21 @@ public InputStream getImageAsStream(Photo photo, int size) throws FlickrExceptio urlStr = photo.getMedium640Url(); } else if (size == Size.MEDIUM_800) { urlStr = photo.getMedium800Url(); + } 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.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()); @@ -1394,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 { @@ -1415,7 +1425,7 @@ public BufferedImage getImage(String urlStr) throws FlickrException { InputStream in = null; try { URL url = new URL(urlStr); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); if (transport instanceof REST) { if (((REST) transport).isProxyAuth()) { conn.setRequestProperty("Proxy-Authorization", "Basic " + ((REST) transport).getProxyCredentials()); diff --git a/src/main/java/com/flickr4java/flickr/photos/Pool.java b/src/main/java/com/flickr4java/flickr/photos/Pool.java new file mode 100644 index 00000000..3c2f1e29 --- /dev/null +++ b/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/src/main/java/com/flickr4java/flickr/photos/PoolList.java b/src/main/java/com/flickr4java/flickr/photos/PoolList.java new file mode 100644 index 00000000..6de3b4fe --- /dev/null +++ b/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/SearchParameters.java b/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java rename to src/main/java/com/flickr4java/flickr/photos/SearchParameters.java index 94955fd8..0b5c850a 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java +++ b/src/main/java/com/flickr4java/flickr/photos/SearchParameters.java @@ -1,642 +1,722 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -package com.flickr4java.flickr.photos; - -import com.flickr4java.flickr.FlickrException; -import com.flickr4java.flickr.util.StringUtilities; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -/** - * @author Anthony Eden - * @version $Id: SearchParameters.java,v 1.20 2009/07/23 20:41:03 x-mago Exp $ - */ -public class SearchParameters { - - private String userId; - - private String groupId; - - private String woeId; - - private String media; - - private String contacts; - - private String[] tags; - - private String tagMode; - - private String text; - - private Date minUploadDate; - - private Date maxUploadDate; - - private Date minTakenDate; - - private Date maxTakenDate; - - private Date interestingnessDate; - - private String license; - - private Set extras; - - private String[] bbox; - - private String placeId; - - private int accuracy = 0; - - private String safeSearch; - - private String[] machineTags; - - private String machineTagMode; - - private String latitude; - - private String longitude; - - private int radius = -1; - - private String radiusUnits; - - private boolean hasGeo = false; - - public static final ThreadLocal DATE_FORMATS = new ThreadLocal() { - @Override - protected synchronized SimpleDateFormat initialValue() { - return new SimpleDateFormat("yyyy-MM-dd"); - } - }; - - public static final ThreadLocal MYSQL_DATE_FORMATS = new ThreadLocal() { - @Override - protected synchronized SimpleDateFormat initialValue() { - return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - } - }; - - /** order argument */ - public static int DATE_POSTED_DESC = 0; - - /** order argument */ - public static int DATE_POSTED_ASC = 1; - - /** order argument */ - public static int DATE_TAKEN_DESC = 2; - - /** order argument */ - public static int DATE_TAKEN_ASC = 3; - - /** order argument */ - public static int INTERESTINGNESS_DESC = 4; - - /** order argument */ - public static int INTERESTINGNESS_ASC = 5; - - /** order argument */ - public static int RELEVANCE = 6; - - private int sort = 0; - - public SearchParameters() { - - } - - /** - * Optional to use, if BBox is set. - *

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    + * + * It requires that the "user_id" field also be set and allows you to limit queries to only photos belonging to that user's photos. As in : All my contacts + * photos tagged "aaron". (Experimental) + * + * @param contacts + */ + public void setContacts(String contacts) { + this.contacts = contacts; + } + + public Map getAsParameters() { + Map parameters = new HashMap(); + + String lat = getLatitude(); + if (lat != null) { + parameters.put("lat", lat); + } + + String lon = getLongitude(); + if (lon != null) { + parameters.put("lon", lon); + } + + double radius = getRadius(); + if (radius > 0) { + parameters.put("radius", Double.toString(radius)); + } + + String radiusUnits = getRadiusUnits(); + if (radiusUnits != null) { + parameters.put("radius_units", radiusUnits); + } + + String media = getMedia(); + if (media != null) { + parameters.put("media", media); + } + + String userId = getUserId(); + if (userId != null) { + parameters.put("user_id", userId); + String contacts = getContacts(); + if (contacts != null) { + parameters.put("contacts", contacts); + } + } + + String groupId = getGroupId(); + if (groupId != null) { + parameters.put("group_id", groupId); + } + + String[] tags = getTags(); + if (tags != null) { + parameters.put("tags", StringUtilities.join(tags, ",")); + } + + String tagMode = getTagMode(); + if (tagMode != null) { + parameters.put("tag_mode", tagMode); + } + + String[] mtags = getMachineTags(); + if (mtags != null) { + parameters.put("machine_tags", StringUtilities.join(mtags, ",")); + } + + String mtagMode = getMachineTagMode(); + if (mtagMode != null) { + parameters.put("machine_tag_mode", mtagMode); + } + + String text = getText(); + if (text != null) { + parameters.put("text", text); + } + + Date minUploadDate = getMinUploadDate(); + if (minUploadDate != null) { + parameters.put("min_upload_date", Long.toString(minUploadDate.getTime() / 1000L)); + } + + Date maxUploadDate = getMaxUploadDate(); + if (maxUploadDate != null) { + parameters.put("max_upload_date", Long.toString(maxUploadDate.getTime() / 1000L)); + } + + Date minTakenDate = getMinTakenDate(); + if (minTakenDate != null) { + parameters.put("min_taken_date", ((DateFormat) MYSQL_DATE_FORMATS.get()).format(minTakenDate)); + } + + Date maxTakenDate = getMaxTakenDate(); + if (maxTakenDate != null) { + parameters.put("max_taken_date", ((DateFormat) MYSQL_DATE_FORMATS.get()).format(maxTakenDate)); + } + + String license = getLicense(); + if (license != null) { + parameters.put("license", license); + } + + Date intrestingnessDate = getInterestingnessDate(); + if (intrestingnessDate != null) { + parameters.put("date", ((DateFormat) DATE_FORMATS.get()).format(intrestingnessDate)); + } + + String[] bbox = getBBox(); + if (bbox != null) { + parameters.put("bbox", StringUtilities.join(bbox, ",")); + if (accuracy > 0) { + parameters.put("accuracy", Integer.toString(accuracy)); + } + } else { + String woeId = getWoeId(); + if (woeId != null) { + parameters.put("woe_id", woeId); + } + } + + String safeSearch = getSafeSearch(); + if (safeSearch != null) { + parameters.put("safe_search", safeSearch); + } + + boolean hasGeo = getHasGeo(); + if (hasGeo) { + parameters.put("has_geo", "true"); + } + + boolean inGallery = getInGallery(); + if (inGallery) { + parameters.put("in_gallery", "true"); + } + + boolean isCommons = getIsCommons(); + if (isCommons) { + parameters.put("is_commons", "true"); + } + + boolean isGetty = getIsGetty(); + if (isGetty) { + parameters.put("is_getty", "true"); + } + + if (privacyFilter > 0) { + parameters.put("privacy_filter", Integer.toString(privacyFilter)); + } + + if (extras != null && !extras.isEmpty()) { + parameters.put("extras", StringUtilities.join(extras, ",")); + } + + if (sort != DATE_POSTED_DESC) { + String sortArg = null; + if (sort == DATE_POSTED_ASC) { + sortArg = "date-posted-asc"; + } + if (sort == DATE_TAKEN_DESC) { + sortArg = "date-taken-desc"; + } + if (sort == DATE_TAKEN_ASC) { + sortArg = "date-taken-asc"; + } + if (sort == INTERESTINGNESS_DESC) { + sortArg = "interestingness-desc"; + } + if (sort == INTERESTINGNESS_ASC) { + sortArg = "interestingness-asc"; + } + if (sort == RELEVANCE) { + sortArg = "relevance"; + } + if (sortArg != null) { + parameters.put("sort", sortArg); + } + } + + if (placeId != null && !placeId.isEmpty()) { + parameters.put("place_id", placeId); + } + + return parameters; + } + + public void setLatitude(String lat) { + latitude = lat; + } + + public void setRadius(double r) { + radius = r; + } + + public void setRadius(int r) { + radius = r; + } + + public void setLongitude(String lon) { + longitude = lon; + } + + public void setRadiusUnits(String units) { + radiusUnits = units; + } + + public String getLatitude() { + return latitude; + } + + public String getLongitude() { + return longitude; + } + + public double getRadius() { + return radius; + } + + public String getRadiusUnits() { + return radiusUnits; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public void setInGallery(boolean inGallery) { + this.inGallery = inGallery; + } + + public boolean getInGallery() { + return inGallery; + } + + public void setIsCommons(boolean isCommons) { + this.isCommons = isCommons; + } + + public boolean getIsCommons() { + return isCommons; + } + + public void setIsGetty(boolean isGetty) { + this.isGetty = isGetty; + } + + public boolean getIsGetty() { + return isGetty; + } +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java b/src/main/java/com/flickr4java/flickr/photos/Size.java similarity index 82% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java rename to src/main/java/com/flickr4java/flickr/photos/Size.java index d136d79e..96d13567 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/Size.java +++ b/src/main/java/com/flickr4java/flickr/photos/Size.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos; import java.util.Arrays; @@ -136,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. * @@ -166,8 +189,22 @@ public class Size { */ 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; + private String labelName; + private int width; private int height; @@ -197,13 +234,20 @@ public Size() { * @see com.flickr4java.flickr.photos.Size#MEDIUM_640 * @see com.flickr4java.flickr.photos.Size#MEDIUM_800 */ + @Deprecated // This method is unreliable - use getLabelName instead public int getLabel() { return label; } - private final List lstSizes = Arrays.asList("Thumbnail", "Square", "Small", "Medium", "Large", "Original", "Square Large", "Small 320", - "Medium 640", "Medium 800", "Large 1600", "Large 2048", "Site MP4", "Video Player", "Video Original"); + 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", + "X-Large 3K", "X-Large 4K", "X-Large 4K F", "X-Large 5K", "X-Large 6K"); /** * Set the String-representation of size. @@ -218,6 +262,7 @@ public void setLabel(String label) { if (ix != -1) { setLabel(ix); } + labelName = label; } /** @@ -249,7 +294,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)); } } @@ -266,7 +311,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)); } } @@ -330,9 +375,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(); } @@ -346,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/main/java/com/flickr4java/flickr/photos/SizeList.java b/src/main/java/com/flickr4java/flickr/photos/SizeList.java new file mode 100644 index 00000000..533c456f --- /dev/null +++ b/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/src/main/java/com/flickr4java/flickr/photos/Usage.java b/src/main/java/com/flickr4java/flickr/photos/Usage.java new file mode 100644 index 00000000..f289c7ab --- /dev/null +++ b/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/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 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java rename to src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java index ff3c4a2a..b86947a9 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/comments/CommentsInterface.java +++ b/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. * @@ -60,18 +59,17 @@ 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(); 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()); } @@ -86,17 +84,16 @@ 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(); 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()); } @@ -113,18 +110,17 @@ 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(); 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()); } @@ -140,15 +136,14 @@ 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(); 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()); } @@ -211,14 +206,13 @@ 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 { 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/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java rename to src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java index d275aeb3..b7c851ef 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoInterface.java +++ b/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. * @@ -63,16 +62,15 @@ 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 { 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()); } @@ -101,16 +99,15 @@ 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 { 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()); } @@ -122,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; @@ -132,16 +130,15 @@ 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(); 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()) { @@ -160,12 +157,11 @@ 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(); 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 +172,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()) { @@ -193,12 +189,11 @@ 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(); 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 +201,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()) { @@ -226,12 +221,11 @@ 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(); parameters.put("method", METHOD_BATCH_CORRECT_LOCATION); - parameters.put(Flickr.API_KEY, apiKey); if (placeId != null) { parameters.put("place_id", placeId); @@ -244,7 +238,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()) { @@ -260,12 +254,11 @@ 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(); parameters.put("method", METHOD_CORRECT_LOCATION); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); if (placeId != null) { @@ -276,7 +269,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()) { @@ -292,14 +285,13 @@ 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 { 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 +305,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()); } @@ -342,18 +334,17 @@ 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(); 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/geo/GeoPermissions.java b/src/main/java/com/flickr4java/flickr/photos/geo/GeoPermissions.java similarity index 85% 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 index 0de1f3aa..72e7d6e4 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/geo/GeoPermissions.java +++ b/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; + } } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/License.java b/src/main/java/com/flickr4java/flickr/photos/licenses/License.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/License.java rename to src/main/java/com/flickr4java/flickr/photos/licenses/License.java index 6ee46b8f..15983df1 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/License.java +++ b/src/main/java/com/flickr4java/flickr/photos/licenses/License.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos.licenses; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java b/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java similarity index 88% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java rename to src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java index 21c4d940..7975cbb2 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/licenses/LicensesInterface.java @@ -1,23 +1,20 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photos.licenses; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.Response; +import com.flickr4java.flickr.Transport; + +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -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. * @@ -47,14 +44,13 @@ 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(); 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()); } @@ -81,17 +77,16 @@ 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(); 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/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java rename to src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java index bf6fa16d..d30f3e20 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/notes/NotesInterface.java @@ -1,21 +1,18 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -package com.flickr4java.flickr.photos.notes; -import java.awt.Rectangle; -import java.util.HashMap; -import java.util.Map; - -import org.w3c.dom.Element; +package com.flickr4java.flickr.photos.notes; -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 +48,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 +62,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()); } @@ -81,16 +77,15 @@ 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(); 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()); } @@ -101,12 +96,11 @@ 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(); parameters.put("method", METHOD_EDIT); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("note_id", note.getId()); Rectangle bounds = note.getBounds(); @@ -121,7 +115,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/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java similarity index 72% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java rename to src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java index a26d7155..9d50bb84 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/people/PeopleInterface.java @@ -3,19 +3,18 @@ */ package com.flickr4java.flickr.photos.people; -import java.awt.Rectangle; -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.PersonTag; +import com.flickr4java.flickr.people.PersonTagList; 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 java.awt.Rectangle; +import java.util.HashMap; +import java.util.Map; /** * @author acaplan @@ -51,12 +50,11 @@ 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(); 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()); } @@ -78,17 +76,16 @@ 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(); 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()); } @@ -99,17 +96,16 @@ 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(); 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()); } @@ -121,12 +117,11 @@ 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(); parameters.put("method", METHOD_EDIT_COORDS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photo_id", photoId); parameters.put("user_id", userId); @@ -135,40 +130,49 @@ 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()); } } - public UserList getList(String photoId) throws FlickrException { + public PersonTagList 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()); } // @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; } } diff --git a/src/main/java/com/flickr4java/flickr/photos/suggestions/Suggestion.java b/src/main/java/com/flickr4java/flickr/photos/suggestions/Suggestion.java new file mode 100644 index 00000000..2acb2c1c --- /dev/null +++ b/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/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionList.java b/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionList.java new file mode 100644 index 00000000..40cb9a1e --- /dev/null +++ b/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/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java b/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java new file mode 100644 index 00000000..5f783c3a --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/photos/suggestions/SuggestionsInterface.java @@ -0,0 +1,169 @@ +/** + * @author acaplan + */ +package com.flickr4java.flickr.photos.suggestions; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.Response; +import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.groups.Group; +import com.flickr4java.flickr.groups.GroupList; +import com.flickr4java.flickr.places.Location; +import com.flickr4java.flickr.places.Place; +import com.flickr4java.flickr.util.XMLUtilities; + +/** + * @author acaplan + * + */ +public class SuggestionsInterface { + + public static final String METHOD_APPROVE_SUGGESTION = "flickr.photos.suggestions.approveSuggestion"; + + public static final String METHOD_REJECT_SUGGESTION = "flickr.photos.suggestions.rejectSuggestion"; + + public static final String METHOD_REMOVE_SUGGESTION = "flickr.photos.suggestions.removeSuggestion"; + + public static final String METHOD_SUGGEST_LOCATION = "flickr.photos.suggestions.suggestLocation"; + + public static final String METHOD_GET_LIST = "flickr.photos.suggestions.getList"; + + private String apiKey; + + private String sharedSecret; + + private Transport transportAPI; + + public SuggestionsInterface(String apiKey, String sharedSecret, Transport transportAPI) { + this.apiKey = apiKey; + this.sharedSecret = sharedSecret; + this.transportAPI = transportAPI; + } + + public void approveSuggestion(String suggestionId) throws FlickrException { + act(suggestionId, METHOD_APPROVE_SUGGESTION); + } + + public void rejectSuggestion(String suggestionId) throws FlickrException { + act(suggestionId, METHOD_REJECT_SUGGESTION); + } + + public void removeSuggestion(String suggestionId) throws FlickrException { + act(suggestionId, METHOD_REMOVE_SUGGESTION); + } + + private void act(String suggestionId, String method) throws FlickrException { + Map parameters = new HashMap(); + parameters.put("method", method); + parameters.put("suggestion_id", suggestionId); + + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + if (response.isError()) { + throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); + } + } + + public void suggestLocation(String photoId, double lat, double lon, int accuracy, String woe_id, String place_id, String note) throws FlickrException { + Map parameters = new HashMap(); + parameters.put("method", METHOD_SUGGEST_LOCATION); + + parameters.put("photo_id", photoId); + parameters.put("lat", lat); + parameters.put("lon", lon); + if (accuracy > 0 && accuracy <= 16) { + parameters.put("accuracy", accuracy); + } + if (woe_id != null) { + parameters.put("woe_id", woe_id); + } + if (place_id != null) { + parameters.put("place_id", place_id); + } + if (note != null) { + parameters.put("note", note); + } + + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + if (response.isError()) { + throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); + } + } + + public SuggestionList getList(String photoId) throws FlickrException { + SuggestionList suggestionList = new SuggestionList(); + Map parameters = new HashMap(); + parameters.put("method", METHOD_GET_LIST); + + parameters.put("photo_id", photoId); + + Response response = transportAPI.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); + if (response.isError()) { + throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); + } + + Element suggestionsElement = response.getPayload(); + + suggestionList.setPage(XMLUtilities.getIntAttribute(suggestionsElement, "page")); + suggestionList.setPerPage(XMLUtilities.getIntAttribute(suggestionsElement, "perpage")); + suggestionList.setTotal(XMLUtilities.getIntAttribute(suggestionsElement, "total")); + + NodeList suggestionNodes = suggestionsElement.getElementsByTagName("suggestion"); + for (int i = 0; i < suggestionNodes.getLength(); i++) { + Element suggestionElement = (Element) suggestionNodes.item(i); + Suggestion suggestion = new Suggestion(); + suggestion.setSuggestionId(suggestionElement.getAttribute("id")); + suggestion.setPhotoId(suggestionElement.getAttribute("photo_id")); + suggestion.setDateSuggested(suggestionElement.getAttribute("date_suggested")); + suggestion.setNote(XMLUtilities.getChild(suggestionElement, "note").getTextContent()); + + Element suggestedElement = XMLUtilities.getChild(suggestionElement, "suggested_by"); + suggestion.setSuggestorUsername(suggestedElement.getAttribute("username")); + suggestion.setSuggestorId(suggestedElement.getAttribute("nsid")); + + Element locationElement = XMLUtilities.getChild(suggestionElement, "location"); + Location location = new Location(); + location.setLatitude(Double.parseDouble(locationElement.getAttribute("latitude"))); + location.setLongitude(Double.parseDouble(locationElement.getAttribute("longitude"))); + location.setWoeId(locationElement.getAttribute("woeid")); + location.setAccuracy(Integer.parseInt(locationElement.getAttribute("accuracy"))); + + Element regionElement = XMLUtilities.getChild(locationElement, "region"); + if(regionElement != null){ + Place placeReg = new Place(); + placeReg.setPlaceId(regionElement.getAttribute("place_id")); + placeReg.setWoeId(regionElement.getAttribute("woeid")); + location.setRegion(placeReg); + } + + Element countryElement = XMLUtilities.getChild(locationElement, "country"); + if(countryElement != null){ + Place placeCtry = new Place(); + placeCtry.setPlaceId(countryElement.getAttribute("place_id")); + placeCtry.setWoeId(countryElement.getAttribute("woeid")); + location.setCountry(placeCtry); + } + + Element countyElement = XMLUtilities.getChild(locationElement, "county"); + if(countyElement != null){ + Place placeCnty = new Place(); + placeCnty.setPlaceId(countyElement.getAttribute("place_id")); + placeCnty.setWoeId(countyElement.getAttribute("woeid")); + location.setCounty(placeCnty); + } + + suggestion.setLocation(location); + suggestionList.add(suggestion); + } + return suggestionList; + + } + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java b/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java similarity index 87% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java rename to src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java index a15bfc78..3fc72030 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java +++ b/src/main/java/com/flickr4java/flickr/photos/transform/TransformInterface.java @@ -1,10 +1,7 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + 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 +40,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/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 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java rename to src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java index 3ffa9ad5..a322daa7 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photos/upload/UploadInterface.java +++ b/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. * @@ -42,12 +41,11 @@ 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(); 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/Photoset.java b/src/main/java/com/flickr4java/flickr/photosets/Photoset.java similarity index 60% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photoset.java rename to src/main/java/com/flickr4java/flickr/photosets/Photoset.java index aa6ebab7..93e1a1fb 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photoset.java +++ b/src/main/java/com/flickr4java/flickr/photosets/Photoset.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photosets; import com.flickr4java.flickr.people.User; @@ -30,10 +28,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() { @@ -50,7 +64,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()); @@ -135,4 +149,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/src/main/java/com/flickr4java/flickr/photosets/Photosets.java similarity index 54% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photosets.java rename to src/main/java/com/flickr4java/flickr/photosets/Photosets.java index 0371cb2a..0551c8a4 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/Photosets.java +++ b/src/main/java/com/flickr4java/flickr/photosets/Photosets.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.photosets; import java.util.Collection; @@ -12,6 +10,10 @@ */ public class Photosets { + private int total; + private int perPage; + private int page; + private int pages; private boolean canCreate; private Collection photosets; @@ -36,4 +38,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/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java similarity index 78% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java rename to src/main/java/com/flickr4java/flickr/photosets/PhotosetsInterface.java index 3d71acfa..ea9f1ab8 100644 --- a/Flickr4Java/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; @@ -15,7 +13,8 @@ import com.flickr4java.flickr.photos.PhotoUtils; import com.flickr4java.flickr.util.StringUtilities; import com.flickr4java.flickr.util.XMLUtilities; - +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -34,6 +33,8 @@ */ public class PhotosetsInterface { + private static Logger _log = LoggerFactory.getLogger(PhotosetsInterface.class); + public static final String METHOD_ADD_PHOTO = "flickr.photosets.addPhoto"; public static final String METHOD_CREATE = "flickr.photosets.create"; @@ -76,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 @@ -87,12 +88,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()); } @@ -108,18 +108,17 @@ 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(); 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()); } @@ -135,16 +134,15 @@ 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(); 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()); } @@ -159,12 +157,11 @@ 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(); parameters.put("method", METHOD_EDIT_META); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); parameters.put("title", title); @@ -172,7 +169,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()); } @@ -187,18 +184,17 @@ 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(); 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()); } @@ -214,17 +210,16 @@ 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(); 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()); } @@ -243,7 +238,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; @@ -257,16 +252,15 @@ 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(); 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.get(transportAPI.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -290,7 +284,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")); @@ -307,10 +308,26 @@ public Photoset getInfo(String photosetId) throws FlickrException { * @param userId * The User id * @return The Photosets collection - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Photosets getList(String userId) throws FlickrException { - return getList(userId, 0, 0); + return getList(userId, 0, 0, null); + } + + /** + * Get a list of all photosets for the specified user. + * + * This method does not require authentication. But to get a Photoset into the list, that contains just private photos, the call needs to be authenticated. + * + * @param userId + * The User id + * @param primaryPhotoExtras + * A comma-delimited list of extra information to fetch for the primary photo + * @return The Photosets collection + * @throws FlickrException if there was a problem connecting to Flickr + */ + public Photosets getList(String userId, String primaryPhotoExtras) throws FlickrException { + return getList(userId, 0, 0, primaryPhotoExtras); } /** @@ -324,13 +341,14 @@ public Photosets getList(String userId) throws FlickrException { * The number of photosets per page * @param page * The page offset + * @param primaryPhotoExtras + * A comma-delimited list of extra information to fetch for the primary photo * @return The Photosets collection - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ - public Photosets getList(String userId, int perPage, int page) throws FlickrException { + public Photosets getList(String userId, int perPage, int page, String primaryPhotoExtras) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); if (userId != null) { parameters.put("user_id", userId); @@ -344,12 +362,21 @@ 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); + 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()); } 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++) { @@ -361,7 +388,13 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce owner.setId(photosetElement.getAttribute("owner")); photoset.setOwner(owner); - Photo primaryPhoto = new Photo(); + Element primaryPhotoExtrasEl = XMLUtilities.getChild(photosetElement, "primary_photo_extras"); + Photo primaryPhoto; + if (primaryPhotoExtrasEl != null) { + primaryPhoto = PhotoUtils.createPhoto(primaryPhotoExtrasEl); + } else { + primaryPhoto = new Photo(); + } primaryPhoto.setId(photosetElement.getAttribute("primary")); primaryPhoto.setSecret(photosetElement.getAttribute("secret")); // TODO verify that this is the secret for the photo primaryPhoto.setServer(photosetElement.getAttribute("server")); // TODO verify that this is the server for the photo @@ -372,6 +405,16 @@ 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")); @@ -380,6 +423,7 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce } photosetsObject.setPhotosets(photosets); + return photosetsObject; } @@ -391,12 +435,11 @@ public Photosets getList(String userId, int perPage, int page) throws FlickrExce * @param userId * The User id * @return int The number of photosets - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public int getPhotosetCount(String userId) throws FlickrException { Map parameters = new HashMap(); parameters.put("method", METHOD_GET_LIST); - parameters.put(Flickr.API_KEY, apiKey); if (userId != null) { parameters.put("user_id", userId); @@ -406,7 +449,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()); } @@ -438,13 +481,12 @@ 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(); Map parameters = new HashMap(); parameters.put("method", METHOD_GET_PHOTOS); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("photoset_id", photosetId); @@ -464,7 +506,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()); } @@ -505,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); @@ -518,16 +560,16 @@ 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(); 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()); } @@ -540,17 +582,16 @@ 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(); 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()); } @@ -563,17 +604,16 @@ 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(); 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()); } @@ -586,17 +626,16 @@ 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(); 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()); } @@ -609,17 +648,16 @@ 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(); 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/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java similarity index 91% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java rename to src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java index e18ad839..651262e0 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/photosets/comments/PhotosetsCommentsInterface.java +++ b/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. * @@ -51,18 +50,17 @@ 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(); 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()); } @@ -77,17 +75,16 @@ 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(); 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()); } @@ -101,18 +98,17 @@ 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(); 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()); } @@ -127,16 +123,15 @@ 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(); 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/Location.java b/src/main/java/com/flickr4java/flickr/places/Location.java similarity index 70% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/places/Location.java rename to 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/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/Place.java b/src/main/java/com/flickr4java/flickr/places/Place.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/places/Place.java rename to src/main/java/com/flickr4java/flickr/places/Place.java index d865f1d0..efef1e49 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/Place.java +++ b/src/main/java/com/flickr4java/flickr/places/Place.java @@ -62,6 +62,12 @@ public Place(String placeId, String name, int placeType) { this.placeType = placeType; } + public Place(String placeId, String name, String woeId) { + this.name = name; + this.placeId = placeId; + this.woeId = woeId; + } + public String getName() { return name; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlaceType.java b/src/main/java/com/flickr4java/flickr/places/PlaceType.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlaceType.java rename to src/main/java/com/flickr4java/flickr/places/PlaceType.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java b/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java similarity index 86% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java rename to src/main/java/com/flickr4java/flickr/places/PlacesInterface.java index ca8be1a5..15d05f0f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesInterface.java +++ b/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,15 +8,27 @@ 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. *

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

    * *

    - * From: kellan 
    + * From: kellan - kellan@yahoo-inc.com
      * Date: Fri, 11 Jan 2008 15:57:59 -0800
      * Subject: [yws-flickr] Flickr and "Place IDs"
      * 
    @@ -152,17 +154,16 @@ 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();
             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());
             }
    @@ -231,19 +232,18 @@ 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();
             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());
             }
    @@ -274,13 +274,12 @@ 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();
             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 +288,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());
             }
    @@ -318,12 +317,11 @@ 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();
             parameters.put("method", METHOD_GET_INFO);
    -        parameters.put(Flickr.API_KEY, apiKey);
     
             if (placeId != null) {
                 parameters.put("place_id", placeId);
    @@ -332,7 +330,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());
             }
    @@ -349,16 +347,15 @@ 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();
             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());
             }
    @@ -374,14 +371,13 @@ 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(); 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()); } @@ -415,13 +411,12 @@ 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 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); @@ -430,11 +425,34 @@ 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()); } - // 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; } @@ -453,13 +471,12 @@ public ArrayList getShapeHistory(String placeId, String woeId) throws F * @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(); 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 +489,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()); } @@ -511,18 +528,17 @@ 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(); 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()); } @@ -532,6 +548,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)); @@ -554,13 +572,12 @@ 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(); 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 +593,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()); } @@ -624,14 +641,13 @@ 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{ + 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); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("place_type_id", Integer.toString(placeTypeId)); if (woeId != null) { @@ -668,7 +684,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()); } @@ -706,14 +722,13 @@ 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 { 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 +753,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()); } @@ -761,17 +776,16 @@ 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 { 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()); } @@ -789,17 +803,16 @@ 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 { 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()); } @@ -827,14 +840,13 @@ 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 { 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 +867,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()); } @@ -884,29 +896,32 @@ 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)); - } 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)); + return location; } private Place parseLocationPlace(Element element, int type) { - Place place = new Place(); - place.setName(XMLUtilities.getValue(element)); - place.setPlaceId(element.getAttribute("place_id")); - place.setPlaceUrl(element.getAttribute("place_url")); - place.setWoeId(element.getAttribute("woeid")); - place.setLatitude(element.getAttribute("latitude")); - place.setLongitude(element.getAttribute("longitude")); - place.setPlaceType(type); + Place place = null; + if (element != null) { + place = new Place(); + place.setName(XMLUtilities.getValue(element)); + place.setPlaceId(element.getAttribute("place_id")); + place.setPlaceUrl(element.getAttribute("place_url")); + place.setWoeId(element.getAttribute("woeid")); + place.setLatitude(element.getAttribute("latitude")); + place.setLongitude(element.getAttribute("longitude")); + place.setPlaceType(type); + } + return place; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesList.java b/src/main/java/com/flickr4java/flickr/places/PlacesList.java similarity index 53% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/places/PlacesList.java rename to 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/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/src/main/java/com/flickr4java/flickr/places/ShapeData.java b/src/main/java/com/flickr4java/flickr/places/ShapeData.java new file mode 100644 index 00000000..1394685b --- /dev/null +++ b/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/src/main/java/com/flickr4java/flickr/places/ShapeDataList.java b/src/main/java/com/flickr4java/flickr/places/ShapeDataList.java new file mode 100644 index 00000000..fb96d8e4 --- /dev/null +++ b/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; + } + +} 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 88% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java rename to src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java index 1c51b0d2..43b6bb6f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/prefs/PrefsInterface.java +++ b/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. * @@ -57,14 +56,13 @@ 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(); 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()); } @@ -77,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 @@ -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()); } @@ -110,14 +107,13 @@ 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(); 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()); } @@ -133,14 +129,13 @@ 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(); 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()); } @@ -158,15 +153,14 @@ 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 { 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/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 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Argument.java rename to src/main/java/com/flickr4java/flickr/reflection/Argument.java index 74ccda22..1e57efda 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Argument.java +++ b/src/main/java/com/flickr4java/flickr/reflection/Argument.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.reflection; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Error.java b/src/main/java/com/flickr4java/flickr/reflection/Error.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Error.java rename to src/main/java/com/flickr4java/flickr/reflection/Error.java index 75a151ae..1ecef1ef 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Error.java +++ b/src/main/java/com/flickr4java/flickr/reflection/Error.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.reflection; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Method.java b/src/main/java/com/flickr4java/flickr/reflection/Method.java similarity index 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Method.java rename to src/main/java/com/flickr4java/flickr/reflection/Method.java index 0e28dd3c..00d437af 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/Method.java +++ b/src/main/java/com/flickr4java/flickr/reflection/Method.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.reflection; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java b/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java similarity index 89% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java rename to src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java index f062bc24..002dfbd9 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java +++ b/src/main/java/com/flickr4java/flickr/reflection/ReflectionInterface.java @@ -1,23 +1,21 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.reflection; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.Response; +import com.flickr4java.flickr.Transport; +import com.flickr4java.flickr.util.XMLUtilities; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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. *

    @@ -27,15 +25,17 @@ */ public class ReflectionInterface { + private static Logger _log = LoggerFactory.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. @@ -59,16 +59,15 @@ 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(); 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()); } @@ -113,7 +112,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) { @@ -152,7 +151,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) { @@ -178,14 +177,13 @@ 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(); 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/Csv.java b/src/main/java/com/flickr4java/flickr/stats/Csv.java similarity index 83% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Csv.java rename to src/main/java/com/flickr4java/flickr/stats/Csv.java index d853787c..9bfeb51f 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Csv.java +++ b/src/main/java/com/flickr4java/flickr/stats/Csv.java @@ -1,6 +1,7 @@ package com.flickr4java.flickr.stats; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.Date; @@ -13,10 +14,10 @@ public class Csv { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Csv.class); + private static Logger _log = LoggerFactory.getLogger(Csv.class); private String href; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Domain.java b/src/main/java/com/flickr4java/flickr/stats/Domain.java similarity index 84% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Domain.java rename to src/main/java/com/flickr4java/flickr/stats/Domain.java index b4addf83..07353fe4 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Domain.java +++ b/src/main/java/com/flickr4java/flickr/stats/Domain.java @@ -1,6 +1,7 @@ package com.flickr4java.flickr.stats; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Domain information as returned by the stats interface. @@ -11,10 +12,10 @@ public class Domain { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Domain.class); + private static Logger _log = LoggerFactory.getLogger(Domain.class); public Domain() { } @@ -48,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/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 83% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Referrer.java rename to src/main/java/com/flickr4java/flickr/stats/Referrer.java index c808422e..936a252d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Referrer.java +++ b/src/main/java/com/flickr4java/flickr/stats/Referrer.java @@ -1,6 +1,7 @@ package com.flickr4java.flickr.stats; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Referrer information as returned by the stats interface. @@ -11,10 +12,10 @@ public class Referrer { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Referrer.class); + private static Logger _log = LoggerFactory.getLogger(Referrer.class); public Referrer() { } @@ -48,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/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/ReferrerList.java b/src/main/java/com/flickr4java/flickr/stats/ReferrerList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/ReferrerList.java rename to src/main/java/com/flickr4java/flickr/stats/ReferrerList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Stats.java b/src/main/java/com/flickr4java/flickr/stats/Stats.java similarity index 92% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Stats.java rename to src/main/java/com/flickr4java/flickr/stats/Stats.java index 3541d3eb..cd66ddc8 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Stats.java +++ b/src/main/java/com/flickr4java/flickr/stats/Stats.java @@ -1,6 +1,7 @@ package com.flickr4java.flickr.stats; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Stats information as returned by the stats interface. @@ -11,10 +12,10 @@ public class Stats { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Stats.class); + private static Logger _log = LoggerFactory.getLogger(Stats.class); private int views; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java b/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java similarity index 97% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java rename to src/main/java/com/flickr4java/flickr/stats/StatsInterface.java index d3351615..59055b80 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/StatsInterface.java +++ b/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; @@ -9,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; @@ -32,10 +31,10 @@ public class StatsInterface { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(StatsInterface.class); + private static Logger _log = LoggerFactory.getLogger(StatsInterface.class); private static final String METHOD_GET_COLLECTION_DOMAINS = "flickr.stats.getCollectionDomains"; @@ -134,16 +133,15 @@ 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" */ 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()); } @@ -317,14 +315,13 @@ 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 { 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()); } @@ -347,19 +344,18 @@ 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" */ 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/stats/StatsSort.java b/src/main/java/com/flickr4java/flickr/stats/StatsSort.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/StatsSort.java rename to src/main/java/com/flickr4java/flickr/stats/StatsSort.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Totals.java b/src/main/java/com/flickr4java/flickr/stats/Totals.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Totals.java rename to src/main/java/com/flickr4java/flickr/stats/Totals.java index b5d17555..d1f8cbd4 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/stats/Totals.java +++ b/src/main/java/com/flickr4java/flickr/stats/Totals.java @@ -1,6 +1,7 @@ package com.flickr4java.flickr.stats; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Stats information as returned by the stats interface. @@ -11,10 +12,10 @@ public class Totals { /** - * Logger for log4j. + * Logger. */ @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(Totals.class); + private static Logger _log = LoggerFactory.getLogger(Totals.class); private int total; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/Cluster.java b/src/main/java/com/flickr4java/flickr/tags/Cluster.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/Cluster.java rename to src/main/java/com/flickr4java/flickr/tags/Cluster.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/ClusterList.java b/src/main/java/com/flickr4java/flickr/tags/ClusterList.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/ClusterList.java rename to src/main/java/com/flickr4java/flickr/tags/ClusterList.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/HotlistTag.java b/src/main/java/com/flickr4java/flickr/tags/HotlistTag.java similarity index 85% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/HotlistTag.java rename to src/main/java/com/flickr4java/flickr/tags/HotlistTag.java index c0b07bfc..0432046d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/HotlistTag.java +++ b/src/main/java/com/flickr4java/flickr/tags/HotlistTag.java @@ -15,6 +15,8 @@ public HotlistTag() { } + @Deprecated + // Note that the API no longer returns the score public int getScore() { return score; } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java b/src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java similarity index 85% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java rename to src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java index 8cd0e984..113d0f4c 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java +++ b/src/main/java/com/flickr4java/flickr/tags/RelatedTagsList.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.tags; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/Tag.java b/src/main/java/com/flickr4java/flickr/tags/Tag.java similarity index 88% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/Tag.java rename to src/main/java/com/flickr4java/flickr/tags/Tag.java index 9f8fb4b5..3e01f315 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/Tag.java +++ b/src/main/java/com/flickr4java/flickr/tags/Tag.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.tags; /** @@ -92,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(); } @@ -114,4 +112,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/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 89% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java rename to src/main/java/com/flickr4java/flickr/tags/TagsInterface.java index 3ed1e8f6..709b6ddb 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java +++ b/src/main/java/com/flickr4java/flickr/tags/TagsInterface.java @@ -1,9 +1,6 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + 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; @@ -20,6 +17,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; +import java.util.Optional; import java.util.Map; /** @@ -73,7 +71,6 @@ public TagsInterface(String apiKey, String sharedSecret, Transport transportAPI) /** * Search for tag-clusters. - *

    * *

    * This method does not require authentication. @@ -87,11 +84,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()); } @@ -121,19 +117,18 @@ 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 { 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,26 +163,27 @@ 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()); } - 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; } @@ -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()); } @@ -247,17 +242,16 @@ 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 { 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()); } @@ -286,17 +280,16 @@ 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 { 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()); } @@ -324,7 +317,7 @@ public Collection getListUserPopular(String userId) throws FlickrException *

    * * @return The collection of Tag objects - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public Collection getListUserRaw() throws FlickrException { @@ -342,19 +335,18 @@ 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 { 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()); } @@ -388,17 +380,16 @@ 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 { 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/src/main/java/com/flickr4java/flickr/test/TestInterface.java similarity index 86% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/test/TestInterface.java rename to src/main/java/com/flickr4java/flickr/test/TestInterface.java index b58cc7d4..82a3bd5a 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/test/TestInterface.java +++ b/src/main/java/com/flickr4java/flickr/test/TestInterface.java @@ -1,15 +1,5 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -package com.flickr4java.flickr.test; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.w3c.dom.Element; -import org.w3c.dom.Text; -import org.xml.sax.SAXException; +package com.flickr4java.flickr.test; import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; @@ -17,6 +7,13 @@ import com.flickr4java.flickr.Transport; import com.flickr4java.flickr.people.User; +import org.w3c.dom.Element; +import org.w3c.dom.Text; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + /** * Interface for testing Flickr connectivity. * @@ -48,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(); @@ -56,7 +53,7 @@ public Collection echo(Map params) throws FlickrExcepti 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()); } @@ -67,15 +64,13 @@ public Collection echo(Map params) throws FlickrExcepti * A testing method which checks if the caller is logged in then returns a User object. * * @return The User object - * @throws SAXException - * @throws FlickrException + * @throws FlickrException if there was a problem connecting to Flickr */ public User login() throws FlickrException { Map parameters = new HashMap(); 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()); } @@ -92,14 +87,13 @@ 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(); 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/src/main/java/com/flickr4java/flickr/uploader/IUploader.java b/src/main/java/com/flickr4java/flickr/uploader/IUploader.java new file mode 100644 index 00000000..1c9613da --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/uploader/IUploader.java @@ -0,0 +1,20 @@ +package com.flickr4java.flickr.uploader; + +import com.flickr4java.flickr.FlickrException; + +import java.io.File; +import java.io.InputStream; + +public interface IUploader { + String upload(byte[] data, UploadMetaData metaData) throws FlickrException; + + String upload(File file, UploadMetaData metaData) throws FlickrException; + + String upload(InputStream in, UploadMetaData metaData) throws FlickrException; + + String replace(InputStream in, String flickrId, boolean async) throws FlickrException; + + String replace(byte[] data, String flickrId, boolean async) throws FlickrException; + + String replace(File file, String flickrId, boolean async) throws FlickrException; +} diff --git a/src/main/java/com/flickr4java/flickr/uploader/Payload.java b/src/main/java/com/flickr4java/flickr/uploader/Payload.java new file mode 100644 index 00000000..231f78d6 --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/uploader/Payload.java @@ -0,0 +1,66 @@ +package com.flickr4java.flickr.uploader; + +import com.flickr4java.flickr.FlickrRuntimeException; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; + +public class Payload { + + private byte[] payload; + + private String photoId; + + public Payload(byte[] payload) { + this.payload = payload; + } + + public Payload(File file) { + try { + payload = Files.readAllBytes(file.toPath()); + } catch (IOException e) { + throw new FlickrRuntimeException(e); + } + } + + public Payload(InputStream inputStream) { + try (ByteArrayOutputStream buffer = new ByteArrayOutputStream()) { + int nRead; + byte[] data = new byte[16384]; + + while ((nRead = inputStream.read(data, 0, data.length)) != -1) { + buffer.write(data, 0, nRead); + } + + payload = buffer.toByteArray(); + } catch (IOException e) { + throw new FlickrRuntimeException(e); + } + } + + public Payload(InputStream inputStream, String photoId) { + this(inputStream); + this.photoId = photoId; + } + + public Payload(byte[] payload, String photoId) { + this(payload); + this.photoId = photoId; + } + + public Payload(File file, String photoId) { + this(file); + this.photoId = photoId; + } + + public byte[] getPayload() { + return payload; + } + + public String getPhotoId() { + return photoId; + } +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java b/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java similarity index 56% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java rename to src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java index d0342b85..65859260 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java +++ b/src/main/java/com/flickr4java/flickr/uploader/UploadMetaData.java @@ -1,10 +1,12 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.uploader; +import com.flickr4java.flickr.util.StringUtilities; + import java.util.Collection; +import java.util.Map; +import java.util.TreeMap; /** * Metadata that describe a photo. @@ -14,6 +16,10 @@ */ public class UploadMetaData { + private String filename = "image.jpg"; + + private String fileMimeType = "image/jpeg"; + private String title; private String description; @@ -26,7 +32,7 @@ public class UploadMetaData { private boolean familyFlag; - private boolean async = false; + private boolean async; private Boolean hidden; @@ -34,6 +40,8 @@ public class UploadMetaData { private String contentType; + private String photoId; + public String getTitle() { return title; } @@ -157,12 +165,36 @@ 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; } /** - * Switch the Uploader behaviour - sychronous or asyncrounous. + * Switch the Uploader behaviour - synchronous or asynchronous. *

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

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

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

    + * + * TicketId's can be tracked with {@link com.flickr4java.flickr.photos.upload.UploadInterface#checkTickets(Set)} for completion. + * + * @author Anthony Eden + * @version $Id: Uploader.java,v 1.12 2009/12/15 20:57:49 x-mago Exp $ + */ +public class Uploader implements IUploader { + + private static final String SERVICES_REPLACE_PATH = "/services/replace/"; + + private static final String SERVICES_UPLOAD_PATH = "/services/upload/"; + + private final String apiKey; + + private final String sharedSecret; + + private final Transport transport; + + /** + * Construct an Uploader. + * + * @param apiKey + * The API key + */ + public Uploader(String apiKey, String sharedSecret) { + this(apiKey, sharedSecret, new REST(Transport.UPLOAD_API_HOST)); + this.transport.setResponseClass(UploaderResponse.class); + } + + /** + * Construct an Uploader. + * + * @param apiKey + * The API key + * @param transport + */ + public Uploader(String apiKey, String sharedSecret, Transport transport) { + this.apiKey = apiKey; + this.sharedSecret = sharedSecret; + this.transport = transport; + } + + /** + * Upload a photo from a byte-array. + * + * @param data + * The photo data as a byte array + * @param metaData + * The meta data + * @return photoId or ticketId + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Override + public String upload(byte[] data, UploadMetaData metaData) throws FlickrException { + Payload payload = new Payload(data); + return sendUploadRequest(metaData, payload); + } + + /** + * Upload a photo from a File. + * + * @param file + * the photo file + * @param metaData + * The meta data + * @return photoId or ticketId + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Override + public String upload(File file, UploadMetaData metaData) throws FlickrException { + Payload payload = new Payload(file); + return sendUploadRequest(metaData, payload); + } + + /** + * Upload a photo from an InputStream. + * + * @param in + * @param metaData + * @return photoId or ticketId + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Override + public String upload(InputStream in, UploadMetaData metaData) throws FlickrException { + Payload payload = new Payload(in); + return sendUploadRequest(metaData, payload); + } + + /** + * Replace a photo from an InputStream. + * + * @param in + * @return photoId or ticketId + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Override + public String replace(InputStream in, String flickrId, boolean async) throws FlickrException { + Payload payload = new Payload(in, flickrId); + return sendReplaceRequest(async, payload); + } + + /** + * Replace a photo from an InputStream. + * + * @param data + * @param flickrId + * @param async + * @return photoId or ticketId + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Override + public String replace(byte[] data, String flickrId, boolean async) throws FlickrException { + Payload payload = new Payload(data, flickrId); + return sendReplaceRequest(async, payload); + } + + /** + * Replace a photo from a File. + * + * @param file + * @param flickrId + * @param async + * @return photoId or ticketId + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Override + public String replace(File file, String flickrId, boolean async) throws FlickrException { + Payload payload = new Payload(file, flickrId); + return sendReplaceRequest(async, payload); + } + + private String sendUploadRequest(UploadMetaData metaData, Payload payload) throws FlickrException { + UploaderResponse response = (UploaderResponse) transport.postMultiPart(SERVICES_UPLOAD_PATH, metaData, payload, apiKey, sharedSecret); + if (response.isError()) { + throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); + } + + return getResponseString(metaData.isAsync(), response); + } + + private String sendReplaceRequest(boolean async, Payload payload) throws FlickrException { + UploaderResponse response = (UploaderResponse) transport.postMultiPart(SERVICES_REPLACE_PATH, UploadMetaData.replace(async, payload.getPhotoId()), payload, apiKey, sharedSecret); + if (response.isError()) { + throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); + } + + return getResponseString(async, response); + } + + /** + * Get the photo or ticket id from the response. + * + * @param async + * @param response + * @return + */ + private String getResponseString(boolean async, UploaderResponse response) { + return async ? response.getTicketId() : response.getPhotoId(); + } + + /** + * Return the {@link REST} impl used by this instance so that properties can be set on it, eg {@link REST#setConnectTimeoutMs(Integer)}. TODO: should return + * a wrapper that only allows "safe" properties to be set. + * + * @return The {@link REST} transport used by this instance + */ + public REST getTransport() { + return (REST) transport; + } +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java b/src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java rename to src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java index 5d00cf85..07ce5988 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java +++ b/src/main/java/com/flickr4java/flickr/uploader/UploaderResponse.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.uploader; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java b/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java similarity index 73% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java rename to src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java index 5554f03e..2f0c1693 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java +++ b/src/main/java/com/flickr4java/flickr/urls/UrlsInterface.java @@ -1,15 +1,6 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -package com.flickr4java.flickr.urls; -import java.util.HashMap; -import java.util.Map; - -import org.w3c.dom.Element; -import org.w3c.dom.Text; +package com.flickr4java.flickr.urls; -import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.Response; import com.flickr4java.flickr.Transport; @@ -18,6 +9,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. * @@ -37,11 +34,11 @@ public class UrlsInterface { public static final String METHOD_LOOKUP_GALLERY = "flickr.urls.lookupGallery"; - private String apiKey; + private final String apiKey; - private String sharedSecret; + private final String sharedSecret; - private Transport transport; + private final Transport transport; /** * Construct a UrlsInterface. @@ -63,16 +60,15 @@ 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(); 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.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -87,16 +83,15 @@ 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(); 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.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -111,16 +106,15 @@ 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(); 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.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -135,16 +129,15 @@ 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(); 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.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } @@ -157,29 +150,57 @@ 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. * * @param url * The user profile URL * @return The username - * @throws FlickrException + * @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); - parameters.put(Flickr.API_KEY, apiKey); parameters.put("url", url); - Response response = transport.post(transport.getPath(), parameters, sharedSecret); + Response response = transport.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } 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; } /** @@ -188,16 +209,15 @@ 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 { 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.get(transport.getPath(), parameters, apiKey, sharedSecret); if (response.isError()) { throw new FlickrException(response.getErrorCode(), response.getErrorMessage()); } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/AuthStore.java b/src/main/java/com/flickr4java/flickr/util/AuthStore.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/AuthStore.java rename to src/main/java/com/flickr4java/flickr/util/AuthStore.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/BuddyIconable.java b/src/main/java/com/flickr4java/flickr/util/BuddyIconable.java similarity index 100% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/BuddyIconable.java rename to src/main/java/com/flickr4java/flickr/util/BuddyIconable.java diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/ByteUtilities.java b/src/main/java/com/flickr4java/flickr/util/ByteUtilities.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/ByteUtilities.java rename to src/main/java/com/flickr4java/flickr/util/ByteUtilities.java index 05d37ef1..256426e0 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/ByteUtilities.java +++ b/src/main/java/com/flickr4java/flickr/util/ByteUtilities.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/DebugInputStream.java b/src/main/java/com/flickr4java/flickr/util/DebugInputStream.java similarity index 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/DebugInputStream.java rename to src/main/java/com/flickr4java/flickr/util/DebugInputStream.java index 08207446..b4e7829d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/DebugInputStream.java +++ b/src/main/java/com/flickr4java/flickr/util/DebugInputStream.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java b/src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java similarity index 93% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java rename to src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java index 12e163b2..65b7cd39 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java +++ b/src/main/java/com/flickr4java/flickr/util/DebugOutputStream.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java b/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java similarity index 81% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java rename to src/main/java/com/flickr4java/flickr/util/FileAuthStore.java index cbbbbea6..df2ae861 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/FileAuthStore.java +++ b/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. @@ -27,11 +27,14 @@ public class FileAuthStore implements AuthStore { private Map auths; + private Map authsByUser; // Separate HashMap due to retrieveAll. private File authStoreDir; public FileAuthStore(File authStoreDir) throws FlickrException { this.auths = new HashMap(); + this.authsByUser = 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.authsByUser.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.authsByUser.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.authsByUser.get(nsid); } /* @@ -117,6 +129,7 @@ public Auth[] retrieveAll() { */ public void clearAll() { this.auths.clear(); + this.authsByUser.clear(); File[] auths = this.authStoreDir.listFiles(new AuthFilenameFilter()); for (int i = 0; i < auths.length; i++) { auths[i].delete(); @@ -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.authsByUser.remove(a.getUser().getUsername()); + } + this.auths.remove(nsid); + this.authsByUser.remove(nsid); // in case username is passed. File auth = new File(this.authStoreDir, nsid + ".auth"); if (auth.exists()) auth.delete(); diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/IOUtilities.java b/src/main/java/com/flickr4java/flickr/util/IOUtilities.java similarity index 90% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/IOUtilities.java rename to src/main/java/com/flickr4java/flickr/util/IOUtilities.java index adb5f146..7c475f2d 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/IOUtilities.java +++ b/src/main/java/com/flickr4java/flickr/util/IOUtilities.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; import java.io.IOException; diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/ImageUtilities.java b/src/main/java/com/flickr4java/flickr/util/ImageUtilities.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/ImageUtilities.java rename to src/main/java/com/flickr4java/flickr/util/ImageUtilities.java index 6adfd9f2..1808ff82 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/ImageUtilities.java +++ b/src/main/java/com/flickr4java/flickr/util/ImageUtilities.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; diff --git a/src/main/java/com/flickr4java/flickr/util/OAuthUtilities.java b/src/main/java/com/flickr4java/flickr/util/OAuthUtilities.java new file mode 100644 index 00000000..08121597 --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/util/OAuthUtilities.java @@ -0,0 +1,114 @@ +package com.flickr4java.flickr.util; + +import java.util.Map; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.RequestContext; +import com.flickr4java.flickr.auth.Auth; +import com.github.scribejava.apis.FlickrApi; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.httpclient.jdk.JDKHttpClientConfig; +import com.github.scribejava.core.model.OAuth1AccessToken; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth10aService; + +/** + * OAuth utilities. + * + * @author Vincent Privat + */ +public final class OAuthUtilities { + + private static final Logger logger = LoggerFactory.getLogger(OAuthUtilities.class); + + private OAuthUtilities() { + + } + + /** + * Creates a new OAuth 1.0.a service. + * + * @param apiKey OAuth API key + * @param sharedSecret OAuth API secret + * @param connectTimeoutMs connect timeout in milliseconds + * @param readTimeoutMs read timeout in milliseconds + * + * @return OAuth 1.0.a service + */ + public static OAuth10aService createOAuthService(String apiKey, String sharedSecret, Integer connectTimeoutMs, Integer readTimeoutMs) { + JDKHttpClientConfig config = JDKHttpClientConfig.defaultConfig(); + if (connectTimeoutMs != null) { + config.setConnectTimeout(connectTimeoutMs); + } + if (readTimeoutMs != null) { + config.setReadTimeout(readTimeoutMs); + } + ServiceBuilder serviceBuilder = new ServiceBuilder(apiKey).apiSecret(sharedSecret).httpClientConfig(config); + + if (Flickr.debugRequest) { + serviceBuilder = serviceBuilder.debug(); + } + + return serviceBuilder.build(FlickrApi.instance()); + } + + /** + * Signs the given OAuth request using the given OAuth service. + * + * @param service OAuth 1.0.a service + * @param request OAuth request + * @param proxyCredentials optional proxy credentials, can be null + */ + public static void signRequest(OAuth10aService service, OAuthRequest request, String proxyCredentials) { + Auth auth = RequestContext.getRequestContext().getAuth(); + if (auth != null) { + service.signRequest(new OAuth1AccessToken(auth.getToken(), auth.getTokenSecret()), request); + } + + if (proxyCredentials != null) { + request.addHeader("Proxy-Authorization", "Basic " + proxyCredentials); + } + + if (Flickr.debugRequest) { + logger.debug("POST: {}", request.getCompleteUrl()); + } + } + + /** + * Builds a normal POST request. + * + * @param parameters body parameters + * @param url URL + * @return OAuth request + */ + public static OAuthRequest buildNormalPostRequest(Map parameters, String url) { + OAuthRequest request = new OAuthRequest(Verb.POST, url); + parameters.entrySet().forEach(e -> request.addBodyParameter(e.getKey(), String.valueOf(e.getValue()))); + return request; + } + + /** + * Builds a multipart POST request. + * + * @param parameters QueryString parameters + * @param url URL + * @return OAuth request + */ + public static OAuthRequest buildMultipartRequest(Map parameters, String url) { + OAuthRequest request = new OAuthRequest(Verb.POST, url); + String multipartBoundary = getMultipartBoundary(); + request.initMultipartPayload(multipartBoundary); + request.addHeader("Content-Type", "multipart/form-data; boundary=" + multipartBoundary); + parameters.entrySet().forEach(e -> request.addQuerystringParameter(e.getKey(), e.getValue())); + return request; + } + + private static String getMultipartBoundary() { + return "---------------------------" + UUID.randomUUID(); + } +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/StringUtilities.java b/src/main/java/com/flickr4java/flickr/util/StringUtilities.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/StringUtilities.java rename to src/main/java/com/flickr4java/flickr/util/StringUtilities.java index 2abb1417..d10296d0 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/StringUtilities.java +++ b/src/main/java/com/flickr4java/flickr/util/StringUtilities.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; import java.util.Arrays; diff --git a/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java b/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java new file mode 100644 index 00000000..6036208b --- /dev/null +++ b/src/main/java/com/flickr4java/flickr/util/UrlUtilities.java @@ -0,0 +1,214 @@ + + +package com.flickr4java.flickr.util; + +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLEncoder; +import java.util.Map; + +/** + * @author Anthony Eden + * @author Mike Chaberski + */ +public class UrlUtilities { + + public static final String UTF8 = "UTF-8"; + + /** + * Build a request URL. + * + * @param host + * The host + * @param port + * The port + * @param path + * The path + * @param parameters + * 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 { + 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) { + buffer.append(':'); + buffer.append(port); + } + if (path == null) { + path = "/"; + } + buffer.append(path); + + if (!parameters.isEmpty()) { + buffer.append('?'); + } + int size = parameters.size(); + for (Map.Entry entry : parameters.entrySet()) { + buffer.append(entry.getKey()); + buffer.append('='); + Object value = entry.getValue(); + if (value != null) { + String string = value.toString(); + try { + string = URLEncoder.encode(string, UTF8); + } catch (UnsupportedEncodingException e) { + // Should never happen, but just in case + } + buffer.append(string); + } + if (--size != 0) { + buffer.append('&'); + } + } + + /* + * RequestContext requestContext = RequestContext.getRequestContext(); Auth auth = requestContext.getAuth(); if (auth != null && + * !ignoreMethod(getMethod(parameters))) { buffer.append("&api_sig="); buffer.append(AuthUtilities.getSignature(sharedSecret, parameters)); } + */ + + return new URL(buffer.toString()); + } + + /** + * Build a request URL. + * + * @param host + * The host + * @param port + * The port + * @param path + * The path + * @param parameters + * The parameters + * @return The URL + * @throws MalformedURLException + */ + public static URL buildSecureUrl(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 { + 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(':'); + buffer.append(port); + } + if (path == null) { + path = "/"; + } + buffer.append(path); + return new URL(buffer.toString()); + } + + /** + * Construct the BuddyIconUrl with {@code http} 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 + * @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 = scheme + "://www.flickr.com/images/buddyicon.jpg"; + if (iconServer > 0) { + iconUrl = scheme + "://farm" + iconFarm + ".staticflickr.com/" + iconServer + "/buddyicons/" + id + ".jpg"; + } + return iconUrl; + } + +} diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/XMLUtilities.java b/src/main/java/com/flickr4java/flickr/util/XMLUtilities.java similarity index 94% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/util/XMLUtilities.java rename to src/main/java/com/flickr4java/flickr/util/XMLUtilities.java index bf1da72b..fb104ff6 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/util/XMLUtilities.java +++ b/src/main/java/com/flickr4java/flickr/util/XMLUtilities.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.util; import org.w3c.dom.Element; diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ActivityInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/ActivityInterfaceTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/ActivityInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/ActivityInterfaceTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java similarity index 75% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java index 89acc27b..21be6830 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/AuthInterfaceTest.java @@ -1,6 +1,4 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ + package com.flickr4java.flickr.test; @@ -13,11 +11,12 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Scanner; +import java.util.concurrent.ExecutionException; +import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.OAuth1Token; import org.junit.Ignore; import org.junit.Test; -import org.scribe.model.Token; -import org.scribe.model.Verifier; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.auth.Auth; @@ -32,15 +31,15 @@ public class AuthInterfaceTest extends Flickr4JavaTest { @Test @Ignore // Ignored as test is interactive so would fail a build - public void testAuthFlow() throws FlickrException, IOException, URISyntaxException { + public void testAuthFlow() throws IOException, URISyntaxException, ExecutionException, InterruptedException, FlickrException { AuthInterface authInterface = flickr.getAuthInterface(); - Token requestToken = authInterface.getRequestToken(); + OAuth1RequestToken requestToken = authInterface.getRequestToken(); assertNotNull(requestToken); assertNotNull(requestToken.getToken()); - assertNotNull(requestToken.getSecret()); + assertNotNull(requestToken.getTokenSecret()); assertTrue(requestToken.getRawResponse().contains("oauth_callback_confirmed=true")); String url = authInterface.getAuthorizationUrl(requestToken, Permission.READ); @@ -66,17 +65,16 @@ public void testAuthFlow() throws FlickrException, IOException, URISyntaxExcepti assertNotNull(code); - Verifier verifier = new Verifier(code); - Token accessToken = authInterface.getAccessToken(requestToken, verifier); + OAuth1Token accessToken = authInterface.getAccessToken(requestToken, code); assertNotNull(accessToken); assertNotNull(accessToken.getToken()); - assertNotNull(accessToken.getSecret()); + assertNotNull(accessToken.getTokenSecret()); Auth checkedAuth = authInterface.checkToken(accessToken); assertNotNull(checkedAuth); assertEquals(accessToken.getToken(), checkedAuth.getToken()); - assertEquals(accessToken.getSecret(), checkedAuth.getTokenSecret()); + assertEquals(accessToken.getTokenSecret(), checkedAuth.getTokenSecret()); assertEquals(Permission.READ, checkedAuth.getPermission()); assertNotNull(checkedAuth.getUser()); assertNotNull(checkedAuth.getUser().getUsername()); @@ -94,10 +92,10 @@ public void testExchangeToken() throws FlickrException { System.out.print(">>"); String flickrAuthToken = in.nextLine(); - Token oAuthToken = authInterface.exchangeAuthToken(flickrAuthToken); + OAuth1RequestToken oAuthToken = authInterface.exchangeAuthToken(flickrAuthToken); assertNotNull(oAuthToken); assertNotNull(oAuthToken.getToken()); - assertNotNull(oAuthToken.getSecret()); + assertNotNull(oAuthToken.getTokenSecret()); } } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/AuthUtilitiesTest.java b/src/test/java/com/flickr4java/flickr/test/AuthUtilitiesTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/AuthUtilitiesTest.java rename to src/test/java/com/flickr4java/flickr/test/AuthUtilitiesTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java similarity index 85% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java index 5e9f7570..e615da54 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/BlogsInterfaceTest.java @@ -1,22 +1,21 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -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 */ @@ -27,7 +26,6 @@ public void testGetList() throws FlickrException { BlogsInterface blogsInterface = flickr.getBlogsInterface(); Collection blogs = blogsInterface.getList(); assertNotNull(blogs); - assertEquals(0, blogs.size()); } @Test @@ -37,7 +35,7 @@ public void testGetServices() throws FlickrException { Iterator it = services.iterator(); boolean bloggerFound = false; while (it.hasNext()) { - Service ser = (Service) it.next(); + Service ser = it.next(); if (ser.getId().equals("beta.blogger.com") && ser.getName().equals("Blogger")) { bloggerFound = true; } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java similarity index 94% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java index 864b81af..dd8324e4 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/CamerasInterfaceTest.java @@ -1,7 +1,7 @@ package com.flickr4java.flickr.test; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertTrue; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CollectionsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/CollectionsInterfaceTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/CollectionsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/CollectionsInterfaceTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java similarity index 83% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java index 217ef87f..7d08f0c5 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/CommentsInterfaceTest.java @@ -1,6 +1,5 @@ package com.flickr4java.flickr.test; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -46,7 +45,7 @@ public void testGetList() throws FlickrException { @Test public void testComment() throws FlickrException { - String photoId = "419231219"; // http://www.flickr.com/photos/javatest3/419231219/ + String photoId = testProperties.getPhotoId(); // http://www.flickr.com/photos/javatest3/419231219/ String txt1 = "This is a test for the flickr java api"; String txt2 = "This is an edited comment for the java flickr api"; CommentsInterface ci = flickr.getCommentsInterface(); @@ -55,20 +54,13 @@ public void testComment() throws FlickrException { // System.out.println("Comment Id:" + commentId); assertNotNull(commentId); assertTrue(commentId.length() > 0); - // verify if comment arrived on the photo page - Comment comment = findCommment(photoId, commentId); - assertNotNull(comment); - assertEquals(commentId, comment.getId()); - assertEquals(txt1, comment.getText()); + // change the comment text and verify change ci.editComment(commentId, txt2); - comment = findCommment(photoId, commentId); - assertNotNull(comment); - assertEquals(commentId, comment.getId()); - assertEquals(txt2, comment.getText()); + // delete the comment ci.deleteComment(commentId); - comment = findCommment(photoId, commentId); + Comment comment = findCommment(photoId, commentId); assertNull(comment); } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java similarity index 65% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java index 45db54f6..18736292 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/CommonsInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; @@ -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("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/Flickr4Java/src/test/java/com/flickr4java/flickr/test/CompletenessTest.java b/src/test/java/com/flickr4java/flickr/test/CompletenessTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/CompletenessTest.java rename to src/test/java/com/flickr4java/flickr/test/CompletenessTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java similarity index 94% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java index 1b4e77fe..9e564a1c 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/ContactsInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java similarity index 76% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java index acc05682..a864f54e 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/FavoritesInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; @@ -16,7 +16,6 @@ import org.junit.Test; import java.util.Collection; -import java.util.Iterator; /** * @author Anthony Eden @@ -45,12 +44,12 @@ 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 public void testAddAndRemove() throws FlickrException { - String photoId = "2153378"; + String photoId = "51144759448"; // Photo that doesn't belong to the test user's account FavoritesInterface iface = flickr.getFavoritesInterface(); try { @@ -58,19 +57,8 @@ public void testAddAndRemove() throws FlickrException { } catch (Exception e) { // running the remove in case it's there before the add } - iface.add(photoId); + iface.add(photoId); // No response to check - Photo foundPhoto = null; - Iterator favorites = iface.getList(null, 0, 0, null).iterator(); - while (favorites.hasNext()) { - Photo photo = favorites.next(); - if (photo.getId().equals(photoId)) { - foundPhoto = photo; - break; - } - } - assertNotNull(foundPhoto); - assertEquals(photoId, foundPhoto.getId()); iface.remove(photoId); } diff --git a/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java b/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java new file mode 100644 index 00000000..fc2d5316 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/Flickr4JavaTest.java @@ -0,0 +1,71 @@ +/** + * @author acaplan + */ +package com.flickr4java.flickr.test; + +import com.flickr4java.flickr.Flickr; +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.IFlickr; +import com.flickr4java.flickr.REST; +import com.flickr4java.flickr.RequestContext; +import com.flickr4java.flickr.auth.Auth; +import com.flickr4java.flickr.auth.Permission; +import com.flickr4java.flickr.test.util.FlickrStub; +import com.flickr4java.flickr.test.util.TestProperties; +import com.flickr4java.flickr.test.util.TestPropertiesFactory; +import org.junit.Before; + +/** + * @author acaplan + * + */ +public class Flickr4JavaTest { + + protected IFlickr flickr; + + protected TestProperties testProperties; + + /** + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Before + public void setUp() throws FlickrException { + testProperties = TestPropertiesFactory.getTestProperties(); + + if (testProperties.isRealFlickr()) { + REST rest = new REST(); + rest.setHost(testProperties.getHost()); + + flickr = new Flickr(testProperties.getApiKey(), testProperties.getSecret(), rest); + + setAuth(Permission.READ); + } else { + flickr = new FlickrStub(); + } + } + + /** + * Set auth parameters for API calls that need it. + * + * @param perms + */ + protected void setAuth(Permission perms) { + Auth auth = new Auth(); + auth.setPermission(perms); + auth.setToken(testProperties.getToken()); + auth.setTokenSecret(testProperties.getTokenSecret()); + + RequestContext requestContext = RequestContext.getRequestContext(); + requestContext.setAuth(auth); + flickr.setAuth(auth); + } + + /** + * Certain tests don't require authorization and calling with auth set may mask other errors. + */ + protected void clearAuth() { + RequestContext requestContext = RequestContext.getRequestContext(); + requestContext.setAuth(null); + } + +} diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java similarity index 96% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/GalleriesInterfaceTest.java rename to 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/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/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 75% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java index 9d2f4667..362e8b05 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/GroupsInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; @@ -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,13 +13,15 @@ import com.flickr4java.flickr.groups.GroupsInterface; import com.flickr4java.flickr.groups.Subcategory; +import org.junit.Test; + +import java.util.Collection; + /** * @author Anthony Eden */ 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); @@ -73,7 +71,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.getSecureBuddyIconUrl().startsWith("https://farm")); // System.out.println("group members: " + group.getMembers()); } @@ -92,29 +90,43 @@ public void testSearch() throws FlickrException { @Test public void testSearchPage() throws FlickrException { GroupsInterface iface = flickr.getGroupsInterface(); - GroupList groups = (GroupList) iface.search("java", 10, 1); + GroupList groups = (GroupList) iface.search("java", 100, 1); assertTrue(groups.size() > 0); assertEquals(1, groups.getPage()); assertTrue(groups.getPages() > 0); - assertEquals(10, groups.getPerPage()); + assertEquals(100, groups.getPerPage()); assertTrue(groups.getTotal() > 0); } @Test public void testJoinLeave() throws FlickrException { - GroupsInterface iface = flickr.getGroupsInterface(); - Group group = iface.getInfo(TEST_JOIN_GROUP); + Group group = iface.getInfo(testProperties.getGroupId()); int cntBeforeJoin = group.getMembers(); - iface.join(TEST_JOIN_GROUP, null); - group = iface.getInfo(TEST_JOIN_GROUP); - int cntAfterJoin = group.getMembers(); - assertTrue("Member count increased by 1", cntBeforeJoin + 1 == cntAfterJoin); - - iface.leave(TEST_JOIN_GROUP, false); - group = iface.getInfo(TEST_JOIN_GROUP); - int cntAfterLeave = group.getMembers(); - assertTrue("Member count decreasted by 1", cntAfterLeave == cntBeforeJoin); + try { + iface.join(testProperties.getGroupId(), null); + group = iface.getInfo(testProperties.getGroupId()); + int cntAfterJoin = group.getMembers(); + assertTrue("Member count increased by 1", cntBeforeJoin + 1 == cntAfterJoin); + } catch (FlickrException e) { + // Ignore if user is already in group + if (!e.getErrorCode().equals("4")) { + throw e; + } + } + + try { + iface.leave(testProperties.getGroupId(), false); + group = iface.getInfo(testProperties.getGroupId()); + int cntAfterLeave = group.getMembers(); + assertTrue("Member count decreased by 1", cntAfterLeave == cntBeforeJoin); + } catch (FlickrException e) { + // Ignore if user doesn't have delete permissions + if (!e.getErrorCode().equals("99")) { + throw e; + } + } + } } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java similarity index 80% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java index 2a6e171b..af50e997 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/InterestingnessInterfaceTest.java @@ -3,7 +3,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.interestingness.InterestingnessInterface; @@ -29,10 +28,10 @@ public void testGetListStringSetIntInt() throws FlickrException { assertNotNull(ii); PhotoList list = ii.getList("2006-09-11", Extras.ALL_EXTRAS, 7, 9); assertNotNull(list); - assertEquals(7, list.size()); - assertEquals(9, list.getPage()); - assertEquals(7, list.getPerPage()); - assertEquals(500, list.getTotal()); + assertTrue(list.size() >= 1); + assertTrue(list.getPage() >= 1); + assertTrue(list.getPerPage() >= 1); + assertTrue(list.getTotal() >= 1); assertTrue(list.get(0) instanceof Photo); Photo photo = list.get(1); assertNotNull(photo.getId()); @@ -53,15 +52,6 @@ public void testGetListStringSetIntInt() throws FlickrException { // System.out.println(photo.getId() + " " + photo.getGeoData() + " " + photo.getUrl()); } } - - // date in the far future - try { - list = ii.getList("2030-01-01", null, 100, 3); - fail("Expected exception not thrown"); - } catch (FlickrException e) { - // everything ok. we expect that - } - } /* diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/LicensesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/LicensesInterfaceTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/LicensesInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/LicensesInterfaceTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java similarity index 90% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java index 45b39a56..2e7ada76 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MachinetagsInterfaceTest.java +++ b/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; } @@ -93,15 +93,15 @@ public void testGetValues() throws FlickrException { @Test public void testGetRecentValues() throws FlickrException { MachinetagsInterface machinetagsInterface = flickr.getMachinetagsInterface(); - String namespace = "ceramics"; - String predicate = "material"; + String namespace = "filmdev"; + String predicate = "recipe"; Calendar addedSince = Calendar.getInstance(); - addedSince.add(Calendar.YEAR, -5); + addedSince.add(Calendar.YEAR, -10); NamespacesList list = machinetagsInterface.getRecentValues(namespace, predicate, addedSince.getTime()); - assertTrue(list.size() > 3); + assertTrue(list.size() >= 3); boolean contentFound = false; for (Value value : list) { - if (value.getValue().equals("porcelain")) { + if (value.getValue().equals("8040")) { contentFound = true; } } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java similarity index 88% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java index d61a9b77..5a90905b 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/MembersInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; @@ -6,16 +6,16 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import java.util.HashSet; -import java.util.Set; - -import org.junit.Test; - import com.flickr4java.flickr.FlickrException; import com.flickr4java.flickr.groups.members.Member; import com.flickr4java.flickr.groups.members.MembersInterface; import com.flickr4java.flickr.groups.members.MembersList; +import org.junit.Test; + +import java.util.HashSet; +import java.util.Set; + /** * @author mago * @version $Id: MembersInterfaceTest.java,v 1.3 2009/07/11 20:30:27 x-mago Exp $ @@ -26,7 +26,7 @@ public class MembersInterfaceTest extends Flickr4JavaTest { public void testGetList() throws FlickrException { MembersInterface iface = flickr.getMembersInterface(); // Group: Urban fragments - String id = "64262537@N00"; + String id = testProperties.getGroupId(); Set memberTypes = new HashSet(); memberTypes.add(Member.TYPE_MEMBER); memberTypes.add(Member.TYPE_ADMIN); @@ -34,7 +34,7 @@ public void testGetList() throws FlickrException { MembersList list = iface.getList(id, memberTypes, 50, 1); assertNotNull(list); assertEquals(50, list.size()); - Member m = (Member) list.get(10); + Member m = list.get(10); assertTrue(m.getId().indexOf("@") > 0); assertTrue(m.getUserName().length() > 0); assertTrue(m.getIconFarm() > -1); diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/NotesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/NotesInterfaceTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/NotesInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/NotesInterfaceTest.java diff --git a/src/test/java/com/flickr4java/flickr/test/OAuthUtilitiesTest.java b/src/test/java/com/flickr4java/flickr/test/OAuthUtilitiesTest.java new file mode 100644 index 00000000..73df6e75 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/OAuthUtilitiesTest.java @@ -0,0 +1,73 @@ +package com.flickr4java.flickr.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Test; + +import com.flickr4java.flickr.util.OAuthUtilities; +import com.github.scribejava.apis.FlickrApi; +import com.github.scribejava.core.builder.ServiceBuilder; +import com.github.scribejava.core.model.OAuthRequest; +import com.github.scribejava.core.model.Parameter; +import com.github.scribejava.core.model.Verb; +import com.github.scribejava.core.oauth.OAuth10aService; + +public class OAuthUtilitiesTest extends Flickr4JavaTest { + + @Test + public void testCreateOAuthService() { + OAuth10aService service = OAuthUtilities.createOAuthService("foo", "bar", null, null); + assertEquals("foo", service.getApiKey()); + assertEquals("bar", service.getApiSecret()); + + service = OAuthUtilities.createOAuthService("foo", "bar", 1, 2); + assertEquals("foo", service.getApiKey()); + assertEquals("bar", service.getApiSecret()); + } + + @Test + public void testSignRequest() { + // No proxy credentials + OAuth10aService service = new ServiceBuilder("foo").apiSecret("bar").build(FlickrApi.instance()); + OAuthRequest request = new OAuthRequest(Verb.GET, "http://foobar"); + assertTrue(request.getOauthParameters().isEmpty()); + OAuthUtilities.signRequest(service, request, null); + assertNull(request.getHeaders().get("Proxy-Authorization")); + + // proxy credentials + service = new ServiceBuilder("foo").apiSecret("bar").build(FlickrApi.instance()); + request = new OAuthRequest(Verb.POST, "http://foobar"); + assertTrue(request.getOauthParameters().isEmpty()); + OAuthUtilities.signRequest(service, request, "creds"); + assertEquals("Basic creds", request.getHeaders().get("Proxy-Authorization")); + } + + @Test + public void testBuildNormalPostRequest() { + Map params = new HashMap<>(); + params.put("foo", "bar"); + OAuthRequest request = OAuthUtilities.buildNormalPostRequest(params, "http://foo"); + List bodyParams = request.getBodyParams().getParams(); + assertEquals(1, bodyParams.size()); + assertEquals(new Parameter("foo", "bar"), bodyParams.get(0)); + } + + @Test + public void testBuildMultipartRequest() { + Map params = new HashMap<>(); + params.put("foo", "bar"); + OAuthRequest request = OAuthUtilities.buildMultipartRequest(params, "http://foo"); + List queryStringParams = request.getQueryStringParams().getParams(); + assertEquals(1, queryStringParams.size()); + assertEquals(new Parameter("foo", "bar"), queryStringParams.get(0)); + String contentType = request.getHeaders().get("Content-Type"); + assertTrue(contentType, contentType.matches( + "multipart/form-data; boundary=---------------------------[a-f0-9]{8}(-[a-f0-9]{4}){4}[a-f0-9]{8}")); + } +} diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ObjectTest.java b/src/test/java/com/flickr4java/flickr/test/ObjectTest.java similarity index 100% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/ObjectTest.java rename to src/test/java/com/flickr4java/flickr/test/ObjectTest.java diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java similarity index 92% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java index 27e98162..c013392f 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PandaInterfaceTest.java @@ -1,20 +1,20 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import 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/PeopleInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java similarity index 70% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java index e10e94dd..c0bb5b3c 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PeopleInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; @@ -10,8 +10,9 @@ 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; import com.flickr4java.flickr.photos.PhotoList; @@ -31,21 +32,16 @@ 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()); - // 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 @@ -54,11 +50,15 @@ public void testGetInfo() throws FlickrException { User person = iface.getInfo(testProperties.getNsid()); 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://")); + assertEquals(testProperties.getDisplayname(), person.getRealName()); + 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://")); + assertNotNull(person.getTimeZone()); + assertNotNull(person.getTimeZone().getTimeZoneId()); + assertNotNull(person.getTimeZone().getOffset()); + assertNotNull(person.getTimeZone().getLabel()); } @Test @@ -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,20 +99,22 @@ 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 public void testAddDelete() throws FlickrException { PeopleInterface iface = flickr.getPeopleInterface(); - iface.add(testProperties.getPhotoId(), testProperties.getNsid(), null); - UserList 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()); + PersonTagList usrs = iface.getList(testProperties.getPhotoId()); + 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/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java similarity index 76% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java index ede328e4..d19052a6 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PhotosInterfaceTest.java @@ -1,11 +1,6 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ -package com.flickr4java.flickr.test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +package com.flickr4java.flickr.test; import com.flickr4java.flickr.Flickr; import com.flickr4java.flickr.FlickrException; @@ -20,21 +15,17 @@ import com.flickr4java.flickr.photos.SearchParameters; import com.flickr4java.flickr.photos.Size; import com.flickr4java.flickr.tags.Tag; - import org.junit.After; import org.junit.Test; -import javax.imageio.ImageIO; - -import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; /** * @author Anthony Eden @@ -51,6 +42,14 @@ public class PhotosInterfaceTest extends Flickr4JavaTest { private final File smallSquareFile = new File("out.smallsquare.jpg"); private final File thumbnailFile = new File("out.thumbnail.jpg"); + + private List photoSizes; + + @Override + public void setUp() throws FlickrException { + super.setUp(); + preparePhotoSizes(); + } @After public void teardown() { @@ -61,18 +60,185 @@ 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); + 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 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(); + + // 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()); + // Get the added tag's ID String tagId = null; for (Tag tag : tags) { if (tag.getValue().equals("test")) { @@ -81,11 +247,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 +277,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()); @@ -188,6 +355,8 @@ public void testGetSizes() throws FlickrException { PhotosInterface iface = flickr.getPhotosInterface(); Collection sizes = iface.getSizes(testProperties.getPhotoId()); assertNotNull(sizes); + + sizes.forEach(size -> assertNotNull(size.getLabelName())); } @Test @@ -260,8 +429,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"); } @@ -279,16 +446,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()); @@ -309,13 +471,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 @@ -323,11 +480,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); - assertEquals(67, image.getWidth()); - assertEquals(100, image.getHeight()); - ImageIO.write(image, "jpg", thumbnailFile); + assertNotNull(photo); + assertEquals(photoId, photo.getId()); } @Test @@ -335,11 +489,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 @@ -347,11 +498,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 @@ -359,35 +507,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); - } - - @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); + assertNotNull(photo); + assertEquals(photoId, photo.getId()); } @Test @@ -403,113 +524,6 @@ public void testGetPhoto() throws FlickrException { */ @Test public void testSetSizes() { - List sizes = new ArrayList(); - Size size = new Size(); - size.setLabel("Thumbnail"); - size.setWidth("100"); - size.setHeight("75"); - size.setSource("urlThumb"); - size.setUrl("urlThumbPage"); - sizes.add(size); - size = new Size(); - size.setLabel("Square"); - size.setWidth("75"); - size.setHeight("75"); - size.setSource("urlSquare"); - size.setUrl("urlSquarePage"); - sizes.add(size); - size = new Size(); - size.setLabel("Small"); - size.setWidth("240"); - size.setHeight("180"); - size.setSource("urlSmall"); - size.setUrl("urlSmallPage"); - sizes.add(size); - size = new Size(); - size.setLabel("Medium"); - size.setWidth("240"); - size.setHeight("180"); - size.setSource("urlMedium"); - size.setUrl("urlMediumPage"); - sizes.add(size); - size = new Size(); - size.setLabel("Original"); - size.setWidth("240"); - size.setHeight("180"); - size.setSource("urlOriginal"); - size.setUrl("urlOriginalPage"); - sizes.add(size); - size = new Size(); - size.setLabel("Large"); - size.setWidth("240"); - size.setHeight("180"); - size.setSource("urlLarge"); - size.setUrl("urlLargePage"); - sizes.add(size); - size = new Size(); - size.setLabel("Square Large"); - size.setWidth("150"); - size.setHeight("150"); - size.setSource("urlSquareLarge"); - size.setUrl("urlSquareLargePage"); - sizes.add(size); - size = new Size(); - size.setLabel("Small 320"); - size.setWidth("320"); - size.setHeight("240"); - size.setSource("urlSmall320"); - size.setUrl("urlSmall320Page"); - sizes.add(size); - size = new Size(); - size.setLabel("Medium 640"); - size.setWidth("640"); - size.setHeight("320"); - size.setSource("urlMedium640"); - size.setUrl("urlMedium640Page"); - sizes.add(size); - size = new Size(); - size.setLabel("Medium 800"); - size.setWidth("800"); - size.setHeight("500"); - size.setSource("urlMedium800"); - size.setUrl("urlMedium800Page"); - sizes.add(size); - size = new Size(); - size.setLabel("Large 1600"); - size.setWidth("1600"); - size.setHeight("1024"); - size.setSource("urlLarge1600"); - size.setUrl("urlLarge1600Page"); - sizes.add(size); - size = new Size(); - size.setLabel("Large 2048"); - size.setWidth("2048"); - size.setHeight("1600"); - size.setSource("urlLarge2048"); - size.setUrl("urlLarge2048Page"); - sizes.add(size); - size = new Size(); - size.setLabel("Video Player"); - size.setWidth("320"); - size.setHeight("240"); - size.setSource("urlVideoPlayer"); - size.setUrl("urlVideoPlayerPage"); - sizes.add(size); - size = new Size(); - size.setLabel("Site MP4"); - size.setWidth("320"); - size.setHeight("240"); - size.setSource("urlSiteMP4"); - size.setUrl("urlSiteMP4Page"); - sizes.add(size); - size = new Size(); - size.setLabel("Video Original"); - size.setWidth("960"); - size.setHeight("720"); - size.setSource("urlVideoOriginal"); - size.setUrl("urlVideoOriginalPage"); - sizes.add(size); - Photo p = new Photo(); p.setId("id"); p.setServer("server"); @@ -517,23 +531,28 @@ 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.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()); + 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("http://farm1.static.flickr.com/server/id_osecret_o.jpg", p.getOriginalUrl()); + assertEquals("https://farm1.staticflickr.com/server/id_osecret_o.jpg", p.getOriginalUrl()); } catch (FlickrException ex) { } // setSizes() to override the generated URLs. - p.setSizes(sizes); + p.setSizes(photoSizes); assertEquals("urlSmall", p.getSmallUrl()); assertEquals("urlSquare", p.getSmallSquareUrl()); assertEquals("urlThumb", p.getThumbnailUrl()); @@ -545,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()); 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 80% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java index 0931614f..8de7e511 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PhotosetsInterfaceTest.java @@ -1,31 +1,34 @@ package com.flickr4java.flickr.test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.auth.Permission; import com.flickr4java.flickr.photos.Photo; import com.flickr4java.flickr.photos.PhotoContext; import com.flickr4java.flickr.photos.PhotoList; import com.flickr4java.flickr.photosets.Photoset; import com.flickr4java.flickr.photosets.Photosets; import com.flickr4java.flickr.photosets.PhotosetsInterface; - import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.util.Collections; +import java.util.Collection; import java.util.List; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + /** * @author Anthony Eden */ public class PhotosetsInterfaceTest extends Flickr4JavaTest { + private static Logger _log = LoggerFactory.getLogger(PhotosetsInterfaceTest.class); + private Photoset testSet; private List setPics; @@ -45,6 +48,8 @@ public void setUp() throws FlickrException { @After public void tearDown() throws FlickrException { + setAuth(Permission.DELETE); + PhotosetsInterface iface = flickr.getPhotosetsInterface(); iface.delete(testSet.getId()); } @@ -67,18 +72,14 @@ public void testEditMeta() { @Test public void testEditPhotos() throws FlickrException { - List reordered = setPics; - reordered.add(testProperties.getPhotoId()); - Collections.reverse(reordered); - PhotosetsInterface iface = flickr.getPhotosetsInterface(); - iface.addPhoto(testSet.getId(), testProperties.getPhotoId()); - iface.editPhotos(testSet.getId(), testProperties.getPhotoId(), reordered.toArray(new String[setPics.size()])); + + iface.editPhotos(testSet.getId(), testProperties.getPhotoId(), setPics.toArray(new String[setPics.size()])); Photoset ps = iface.getInfo(testSet.getId()); assertNotNull(ps); assertEquals(testProperties.getPhotoId(), ps.getPrimaryPhoto().getId()); - assertEquals(4, ps.getPhotoCount()); + assertTrue(ps.getPhotoCount() >= 2); } @Test @@ -93,9 +94,11 @@ public void testGetContext() throws FlickrException { @Test public void testGetInfo() throws FlickrException { + clearAuth(); + 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); @@ -110,10 +113,17 @@ public void testGetList() throws FlickrException { } @Test - public void testGetList2() throws FlickrException { + public void testGetListWithExtras() throws FlickrException { PhotosetsInterface iface = flickr.getPhotosetsInterface(); - Photosets photosets = iface.getList("26095690@N00"); + Photosets photosets = iface.getList(testProperties.getNsid(), "last_update, owner_name"); assertNotNull(photosets); + Collection photosetsList = photosets.getPhotosets(); + assertFalse(photosetsList.isEmpty()); + Photoset photoset = photosetsList.iterator().next(); + assertNotNull(photoset.getPrimaryPhoto().getLastUpdate()); + assertNotNull(photoset.getPrimaryPhoto().getOwner()); + assertNotNull(photoset.getPrimaryPhoto().getOwner().getUsername()); + assertTrue(photoset.getPrimaryPhoto().getOwner().getUsername().length() > 0); } @Test @@ -122,8 +132,8 @@ 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.getNsid(), photos.get(0).getOwner().getId()); + assertNotNull(photos.get(0).getOwner().getUsername()); + assertNotNull(photos.get(0).getOwner().getId()); } @Test @@ -144,13 +154,11 @@ public void testRemovePhotos() throws FlickrException { PhotoList photos = iface.getPhotos(photoset.getId(), 10, 1); assertNotNull(photos); - assertEquals(1, photos.size()); iface.removePhoto(photoset.getId(), testProperties.getPhotoId()); try { photos = iface.getPhotos(photoset.getId(), 10, 1); - fail("Photoset shouldn't still exist"); } catch (FlickrException e) { // photoset should be nuked when the only photo is removed from it } diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java similarity index 72% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java index 0c79ac97..1c3d5576 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PlacesInterfaceTest.java +++ b/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,13 @@ import com.flickr4java.flickr.places.PlacesList; import com.flickr4java.flickr.tags.Tag; +import org.junit.Ignore; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + /** * Tests for the PlacesInterface. * @@ -29,64 +30,45 @@ public class PlacesInterfaceTest extends Flickr4JavaTest { String sfWoeId = "2487956"; @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testFindByLonLat() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); PlacesList list = placesInterface.findByLatLon(52.524577D, 13.412247D, Flickr.ACCURACY_CITY); assertTrue(list.getTotal() == 1); - Place place = (Place) list.get(0); - assertEquals("zot2ouJXUbKOJRM", place.getPlaceId()); - assertEquals("/Germany/Berlin/Berlin", place.getPlaceUrl()); - assertEquals(Place.TYPE_LOCALITY, place.getPlaceType()); - assertEquals("638242", place.getWoeId()); - assertEquals(52.516D, place.getLatitude(), 0d); - assertEquals(13.376D, place.getLongitude(), 0d); + Place place = list.get(0); + assertNotNull(place.getPlaceType()); + assertNotNull(place.getWoeId()); + assertNotNull(place.getLatitude()); + assertNotNull(place.getLongitude()); } @Test - public void testFind() throws FlickrException { + @Ignore + // This Flickr API method no longer seems to work correctly + public void testFindAlabama() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); PlacesList list = placesInterface.find("Alabama"); - assertTrue(list.getTotal() == 3); - Place place = (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); - 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); - assertEquals("3BCBV2pQV70Ei4_4", place.getPlaceId()); - assertEquals("/South+Africa/North-west/Alabama", place.getPlaceUrl()); - assertEquals(Place.TYPE_LOCALITY, place.getPlaceType()); - } - - @Test - public void testFind2() throws FlickrException { - PlacesInterface placesInterface = flickr.getPlacesInterface(); - PlacesList list = placesInterface.find("Europe"); - assertTrue(list.getTotal() == 2); - Place place = (Place) list.get(0); - assertEquals("6dCBhRRTVrJiB5xOrg", place.getPlaceId()); - assertEquals("/6dCBhRRTVrJiB5xOrg", place.getPlaceUrl()); - assertEquals(Place.TYPE_CONTINENT, place.getPlaceType()); - - place = (Place) list.get(1); - assertEquals("SmLXwKZUV7JlnVvxUA", place.getPlaceId()); - assertEquals("/France/Ile-de-France/Paris/Europe", place.getPlaceUrl()); - assertEquals(Place.TYPE_NEIGHBOURHOOD, place.getPlaceType()); } + @SuppressWarnings("deprecation") @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testResolvePlaceId() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); Location location = placesInterface.resolvePlaceId("7.MJR8tTVrIO1EgB"); // SF placeAssertions(location); } + @SuppressWarnings("deprecation") @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testResolvePlaceUrl() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); Location location = placesInterface.resolvePlaceURL("/United+States/California/San+Francisco"); @@ -94,17 +76,18 @@ 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 = (Place) list.get(i); + for (Place place : list) { // 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; } } @@ -118,12 +101,12 @@ public void testGetInfo() throws FlickrException { String woeId = "2487956"; String placeId = "7.MJR8tTVrIO1EgB"; Location loc = placesInterface.getInfo(woeId, null); - assertEquals("/United+States/California/San+Francisco", loc.getPlaceUrl()); - loc = placesInterface.getInfo(null, placeId); - assertEquals("/United+States/California/San+Francisco", loc.getPlaceUrl()); + assertEquals("San Francisco,", loc.getName()); } @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testGetInfoByUrl() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); String placeId = "7.MJR8tTVrIO1EgB"; @@ -139,7 +122,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; } @@ -161,20 +144,24 @@ 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"; int placeType = Place.TYPE_LOCALITY; PlacesList places = placesInterface.placesForBoundingBox(placeType, bbox); assertTrue((places.size() > 0)); - Place 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()); + Place place = places.get(0); + assertNotNull(place.getWoeId()); + assertNotNull(place.getPlaceId()); + assertNotNull(place.getPlaceUrl()); + assertNotNull(place.getPlaceType()); } @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testPlacesForContacts() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); int placeType = Place.TYPE_REGION; @@ -185,13 +172,15 @@ 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()); } } @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; @@ -210,13 +199,15 @@ 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()); } @Test + @Ignore + // This Flickr API method no longer seems to work correctly public void testPlacesForUser() throws FlickrException { PlacesInterface placesInterface = flickr.getPlacesInterface(); int placeType = Place.TYPE_REGION; @@ -227,8 +218,8 @@ public void testPlacesForUser() throws FlickrException { Calendar maxUploadDate = Calendar.getInstance(); Calendar minTakenDate = Calendar.getInstance(); Calendar maxTakenDate = Calendar.getInstance(); - minUploadDate.roll(Calendar.YEAR, -3); - minTakenDate.roll(Calendar.YEAR, -3); + 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)); @@ -245,34 +236,26 @@ 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) { - calFound = true; - } - // System.out.println(tag.getValue() + " " + tag.getCount()); - } - assertTrue(calFound); } private void placeAssertions(Location location) { assertEquals("7.MJR8tTVrIO1EgB", location.getPlaceId()); assertEquals("/United+States/California/San+Francisco", location.getPlaceUrl()); assertEquals("2487956", location.getWoeId()); - assertEquals(37.779D, location.getLatitude(), 0d); - assertEquals(-122.420D, location.getLongitude(), 0d); - assertEquals(Place.TYPE_LOCALITY, location.getPlaceType()); + assertNotNull(location.getLatitude()); + assertNotNull(location.getLongitude()); + assertNotNull(location.getPlaceType()); assertEquals("7.MJR8tTVrIO1EgB", location.getLocality().getPlaceId()); assertEquals("San Francisco, California, United States", location.getLocality().getName()); assertEquals("2487956", location.getLocality().getWoeId()); - assertEquals(37.779D, location.getLocality().getLatitude(), 0d); - assertEquals(-122.420D, location.getLocality().getLongitude(), 0d); + assertNotNull(location.getLocality().getLatitude()); + assertNotNull(location.getLocality().getLongitude()); assertEquals(".7sOmlRQUL9nK.kMzA", location.getCounty().getPlaceId()); assertEquals("San Francisco County, California, United States", location.getCounty().getName()); diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java similarity index 65% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java index 28d6f081..32eb42cf 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/PoolsInterfaceTest.java @@ -1,4 +1,4 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; @@ -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); + } + } } 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 68% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java index f898c01c..e97823a1 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/ReflectionInterfaceTest.java +++ b/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(5, method.getArguments().size()); Collection args = method.getArguments(); Iterator argsIterator = args.iterator(); @@ -51,10 +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 extras = argsIterator.next(); assertEquals("extras", extras.getName()); assertTrue(extras.isOptional()); @@ -78,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(); @@ -121,7 +85,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/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 98% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java index f816458b..b27c2e5a 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TagsInterfaceTest.java +++ b/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); + assertTrue(photos.getTotal() >= 20); } @Test diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java similarity index 91% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java index 11ff54b7..0245df1e 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/TestInterfaceTest.java @@ -1,18 +1,18 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ + package com.flickr4java.flickr.test; 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 diff --git a/src/test/java/com/flickr4java/flickr/test/UploaderTest.java b/src/test/java/com/flickr4java/flickr/test/UploaderTest.java new file mode 100644 index 00000000..49555eae --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/UploaderTest.java @@ -0,0 +1,204 @@ +package com.flickr4java.flickr.test; + +import com.flickr4java.flickr.FlickrException; +import com.flickr4java.flickr.photos.PhotosInterface; +import com.flickr4java.flickr.uploader.UploadMetaData; +import com.flickr4java.flickr.uploader.Uploader; +import org.junit.Test; + +import java.io.*; +import java.nio.file.Files; + +import static org.junit.Assert.assertNotNull; + +/** + * @author Anthony Eden + */ +public class UploaderTest extends Flickr4JavaTest { + + private static final String DUMMY_PHOTO_ID = "1234567890"; + + /** + * Test photo uploading using a byte array. + * + * @throws IOException + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Test + public void testUploadByteArray() throws IOException, FlickrException { + File imageFile = new File(testProperties.getImageFile()); + Uploader uploader = flickr.getUploader(); + PhotosInterface pint = flickr.getPhotosInterface(); + + if (testProperties.isRealFlickr()) { + + UploadMetaData metaData = buildPrivatePhotoMetadata(); + // check correct handling of escaped value + metaData.setTitle("óöä"); + String photoId = uploader.upload(Files.readAllBytes(imageFile.toPath()), metaData); + assertNotNull(photoId); + try { + pint.delete(photoId); + } catch (FlickrException e) { + // Ignore if user doesn't have delete permissions + // This will leave a *private* photo in the test account's photostream! + if (!e.getErrorCode().equals("99")) { + throw e; + } + + } + } else { + UploadMetaData metaData = buildPrivatePhotoMetadata(); + String photoId = uploader.upload("".getBytes(), metaData); + assertNotNull(photoId); + } + } + + /** + * Test photo upload using an InputStream. + * + * @throws IOException + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Test + public void testUploadInputStream() throws IOException, FlickrException { + File imageFile = new File(testProperties.getImageFile()); + Uploader uploader = flickr.getUploader(); + PhotosInterface pint = flickr.getPhotosInterface(); + + if (testProperties.isRealFlickr()) { + try (InputStream in = new FileInputStream(imageFile)) { + UploadMetaData metaData = buildPrivatePhotoMetadata(); + metaData.setPublicFlag(false); + // check correct handling of escaped value + metaData.setTitle("óöä"); + String photoId = uploader.upload(in, metaData); + assertNotNull(photoId); + try { + pint.delete(photoId); + } catch (FlickrException e) { + // Ignore if user doesn't have delete permissions + // This will leave a *private* photo in the test account's photostream! + if (!e.getErrorCode().equals("99")) { + throw e; + } + } + } + } else { + UploadMetaData metaData = buildPrivatePhotoMetadata(); + String photoId = uploader.upload("".getBytes(), metaData); + assertNotNull(photoId); + } + } + + /** + * Test photo replace using an InputStream. + * + * @throws IOException + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Test + public void testReplaceInputStream() throws IOException, FlickrException, InterruptedException { + Uploader uploader = flickr.getUploader(); + PhotosInterface pint = flickr.getPhotosInterface(); + File imageFile = new File(testProperties.getImageFile()); + + if (testProperties.isRealFlickr()) { + String photoId; + try (InputStream uploadIS = new FileInputStream(imageFile)) { + + // Upload a photo, which we'll replace, then delete + UploadMetaData metaData = buildPrivatePhotoMetadata(); + photoId = uploader.upload(uploadIS, metaData); + } + + // Fix some odd timing issue + Thread.sleep(1500); + + try (InputStream replaceIS = new FileInputStream(imageFile)) { + + try { + photoId = uploader.replace(replaceIS, photoId, false); + assertNotNull(photoId); + } catch (FlickrException e) { + // Error code 1 means test account is not pro so don't fail test because of that + if (!e.getErrorCode().equals("1")) { + throw e; + } + } + try { + pint.delete(photoId); + } catch (FlickrException e) { + // Ignore if user doesn't have delete permissions + // This will leave a *private* photo in the test account's photostream! + if (!e.getErrorCode().equals("99")) { + throw e; + } + } + } + } else { + try (InputStream replaceIS = new ByteArrayInputStream("".getBytes())) { + String photoId = uploader.replace(replaceIS, DUMMY_PHOTO_ID, false); + assertNotNull(photoId); + } + } + } + + /** + * Test photo replace using a byte array. + * + * @throws IOException + * @throws FlickrException if there was a problem connecting to Flickr + */ + @Test + public void testReplaceByteArray() throws IOException, FlickrException, InterruptedException { + File imageFile = new File(testProperties.getImageFile()); + Uploader uploader = flickr.getUploader(); + PhotosInterface pint = flickr.getPhotosInterface(); + + if (testProperties.isRealFlickr()) { + + // Upload a photo, which we'll replace, then delete + UploadMetaData metaData = buildPrivatePhotoMetadata(); + String photoId = uploader.upload(Files.readAllBytes(imageFile.toPath()), metaData); + + // Fix some odd timing issue + Thread.sleep(1500); + + try { + photoId = uploader.replace(Files.readAllBytes(imageFile.toPath()), photoId, false); + assertNotNull(photoId); + } catch (FlickrException e) { + // Error code 1 means test account is not pro so don't fail test because of that + if (!e.getErrorCode().equals("1")) { + throw e; + } + } + + try { + pint.delete(photoId); + } catch (FlickrException e) { + // Ignore if user doesn't have delete permissions + // This will leave a *private* photo in the test account's photostream! + if (!e.getErrorCode().equals("99")) { + throw e; + } + } + } else { + String photoId = uploader.replace("".getBytes(), DUMMY_PHOTO_ID, false); + assertNotNull(photoId); + } + } + + /** + * Build {@link UploadMetaData} with public set to false so uploaded photos are private. + * + * @return + */ + private UploadMetaData buildPrivatePhotoMetadata() { + UploadMetaData uploadMetaData = new UploadMetaData(); + uploadMetaData.setPublicFlag(false); + return uploadMetaData; + } + +} diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java b/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java similarity index 72% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java rename to src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java index c0d72b3b..256cf633 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java +++ b/src/test/java/com/flickr4java/flickr/test/UrlsInterfaceTest.java @@ -1,5 +1,3 @@ -/* Copyright 2004, Aetrion LLC. All Rights Reserved. */ - package com.flickr4java.flickr.test; import static org.junit.Assert.assertEquals; @@ -11,6 +9,7 @@ import com.flickr4java.flickr.groups.Group; import com.flickr4java.flickr.urls.UrlsInterface; +import org.junit.Before; import org.junit.Test; /** @@ -18,11 +17,18 @@ */ 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(); 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 +36,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,22 +44,22 @@ 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()); } @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("http://www.flickr.com/people/%s/", username)); + String usernameOnFlickr = iface.lookupUsernameByURL(String.format("https://www.flickr.com/people/%s/", username)); assertEquals(username, usernameOnFlickr); } @@ -61,7 +67,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())); diff --git a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestProperties.java b/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java similarity index 82% rename from Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestProperties.java rename to src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java index 627d7d36..90457865 100644 --- a/Flickr4Java/src/test/java/com/flickr4java/flickr/test/TestProperties.java +++ b/src/test/java/com/flickr4java/flickr/test/util/FileTestProperties.java @@ -1,10 +1,9 @@ -package com.flickr4java.flickr.test; +package com.flickr4java.flickr.test.util; import com.flickr4java.flickr.FlickrRuntimeException; -import com.flickr4java.flickr.util.IOUtilities; - -import org.apache.log4j.Logger; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -17,13 +16,7 @@ * * @author Darren Greaves Copyright (c) 2012 Darren Greaves. */ -public class TestProperties { - - /** - * Logger for log4j. - */ - @SuppressWarnings("unused") - private static Logger _log = Logger.getLogger(TestProperties.class); +public class FileTestProperties implements TestProperties { private String host; @@ -63,13 +56,24 @@ public class TestProperties { private final List photosetPhotos; - public TestProperties() { - - photosetPhotos = new ArrayList(); - Properties properties = load(); + public FileTestProperties(File propertiesFile) { + photosetPhotos = new ArrayList<>(); + Properties properties = load(propertiesFile); populate(properties); } + private Properties load(File propertiesFile) { + Properties properties = new Properties(); + + try (InputStream in = new FileInputStream(propertiesFile)) { + properties.load(in); + } catch (IOException e) { + throw new FlickrRuntimeException("Problem loading properties", e); + } + + return properties; + } + /** * * @param properties @@ -102,95 +106,104 @@ private void populate(Properties properties) { Collections.sort(this.photosetPhotos); } - private Properties load() { - Properties properties = new Properties(); - InputStream in = null; - try { - in = getClass().getResourceAsStream("/setup.properties"); - properties.load(in); - } catch (IOException e) { - throw new FlickrRuntimeException("Problem loading setup.properties", e); - } finally { - IOUtilities.close(in); - } - - return properties; - } - + @Override public String getHost() { return host; } + @Override public String getApiKey() { return apiKey; } + @Override public String getSecret() { return secret; } + @Override public String getToken() { return token; } + @Override public String getTokenSecret() { return tokenSecret; } + @Override public String getNsid() { return nsid; } + @Override public String getEmail() { return email; } + @Override public String getUsername() { return username; } + @Override public String getGroupId() { return groupId; } + @Override public String getTestGroupId() { return testGroupId; } + @Override public String getPhotoId() { return photoId; } + @Override public String getPhotosetId() { return photosetId; } + @Override public String getImageFile() { return imageFile; } + @Override public String getGeoWritePhotoId() { return geoWritePhotoId; } + @Override public String getCollectionId() { return collectionId; } + @Override public String getCollectionUrlId() { return collectionUrlId; } + @Override public String getGalleryId() { return galleryId; } + @Override public String getDisplayname() { return displayname; } + @Override public List getPhotosetPhotos() { return photosetPhotos; } + @Override + public boolean isRealFlickr() { + return true; + } + } diff --git a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java.bak b/src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java similarity index 65% rename from Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java.bak rename to src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java index 500d10f5..9db0bc58 100644 --- a/Flickr4Java/src/main/java/com/flickr4java/flickr/Flickr.java.bak +++ b/src/test/java/com/flickr4java/flickr/test/util/FlickrStub.java @@ -1,18 +1,20 @@ -/* - * Copyright (c) 2005 Aetrion LLC. - */ -package com.flickr4java.flickr; +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; @@ -24,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; @@ -37,48 +40,11 @@ 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 $ + * Stubbed entry point for the Flickr4Java API. This class is used to acquire Interface classes which wrap the Flickr API. + * */ -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; +public class FlickrStub implements IFlickr { private String apiKey; @@ -152,134 +118,18 @@ public class Flickr { 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; + private CamerasInterface cameraInterface; - /** - * @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; + private SuggestionsInterface suggestionsInterface; - /** - * @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; + private GroupDiscussInterface discussionInterface; /** - * Construct a new Flickr gateway instance. - * - * @param apiKey - * The API key, must be non-null - * @param sharedSecret - * @param transport + * Construct a new stubbed Flickr instance. + * */ - public Flickr(String apiKey, String sharedSecret, Transport transport) { - setApiKey(apiKey); - setSharedSecret(sharedSecret); - setTransport(transport); + public FlickrStub() { + transport = new TransportStub(); } /** @@ -384,7 +234,7 @@ public ActivityInterface getActivityInterface() { return activityInterface; } - public synchronized BlogsInterface getBlogsInterface() { + public BlogsInterface getBlogsInterface() { if (blogsInterface == null) { blogsInterface = new BlogsInterface(apiKey, sharedSecret, transport); } @@ -436,7 +286,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); } @@ -576,7 +426,8 @@ public UploadInterface getUploadInterface() { public Uploader getUploader() { if (uploader == null) { - uploader = new Uploader(apiKey, sharedSecret); + Transport uploadTransport = new TransportStub(); + uploader = new Uploader(apiKey, sharedSecret, uploadTransport); } return uploader; } @@ -602,4 +453,36 @@ public StatsInterface getStatsInterface() { 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/util/Setup.java b/src/test/java/com/flickr4java/flickr/test/util/Setup.java new file mode 100644 index 00000000..3db87122 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/util/Setup.java @@ -0,0 +1,67 @@ +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.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; + +public class Setup { + + public static void main(String[] args) { + System.out.println("Flickr4Java: Set up integration test environment"); + try { + new Setup(); + } catch (IOException | 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); + + OAuth1RequestToken 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(); + + OAuth1Token accessToken = authInterface.getAccessToken(requestToken, tokenKey); + System.out.println("Authentication success"); + + Auth auth = authInterface.checkToken(accessToken); + + properties.setProperty("token", accessToken.getToken()); + properties.setProperty("tokensecret", accessToken.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.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()); + System.out.println("Permission: " + auth.getPermission().getType()); + } +} diff --git a/src/test/java/com/flickr4java/flickr/test/util/StubTestProperties.java b/src/test/java/com/flickr4java/flickr/test/util/StubTestProperties.java new file mode 100644 index 00000000..5863da35 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/util/StubTestProperties.java @@ -0,0 +1,112 @@ +package com.flickr4java.flickr.test.util; + +import java.util.Arrays; +import java.util.List; + +/** + * TestProperties for stubbed out unit tests. + * + * Values are not sent to Flickr so don't have to be real. + */ +public class StubTestProperties implements TestProperties { + + @Override + public String getHost() { + return "localhost"; + } + + @Override + public String getApiKey() { + return "FAKE_API_KEY"; + } + + @Override + public String getSecret() { + return "FAKE_SECRET"; + } + + @Override + public String getToken() { + return "FAKE_TOKEN"; + } + + @Override + public String getTokenSecret() { + return "FAKE_TOKEN_SECRET"; + } + + @Override + public String getNsid() { + return "24573443@N04"; + } + + @Override + public String getEmail() { + return "EMAIL"; + } + + @Override + public String getUsername() { + return "boncey_test"; + } + + @Override + public String getGroupId() { + return "34427469792@N01"; + } + + @Override + public String getTestGroupId() { + return "12345"; + } + + @Override + public String getPhotoId() { + return "5628095432"; + } + + @Override + public String getPhotosetId() { + return "12345"; + } + + @Override + public String getImageFile() { + return "FILE"; + } + + @Override + public String getGeoWritePhotoId() { + return "12345"; + } + + @Override + public String getCollectionId() { + return "12345"; + } + + @Override + public String getCollectionUrlId() { + return "12345"; + } + + @Override + public String getGalleryId() { + return "72157634925210101"; + } + + @Override + public String getDisplayname() { + return "Darren Greaves"; + } + + @Override + public List getPhotosetPhotos() { + return Arrays.asList("5628122182", "5628111146", "4169948514"); + } + + @Override + public boolean isRealFlickr() { + return false; + } +} diff --git a/src/test/java/com/flickr4java/flickr/test/util/TestProperties.java b/src/test/java/com/flickr4java/flickr/test/util/TestProperties.java new file mode 100644 index 00000000..ec9b2809 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/util/TestProperties.java @@ -0,0 +1,45 @@ +package com.flickr4java.flickr.test.util; + +import java.util.List; + +public interface TestProperties { + String getHost(); + + String getApiKey(); + + String getSecret(); + + String getToken(); + + String getTokenSecret(); + + String getNsid(); + + String getEmail(); + + String getUsername(); + + String getGroupId(); + + String getTestGroupId(); + + String getPhotoId(); + + String getPhotosetId(); + + String getImageFile(); + + String getGeoWritePhotoId(); + + String getCollectionId(); + + String getCollectionUrlId(); + + String getGalleryId(); + + String getDisplayname(); + + List getPhotosetPhotos(); + + boolean isRealFlickr(); +} diff --git a/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java b/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java new file mode 100644 index 00000000..36a29188 --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/util/TestPropertiesFactory.java @@ -0,0 +1,58 @@ +package com.flickr4java.flickr.test.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.net.URL; +import java.nio.file.Paths; +import java.util.Optional; + +public class TestPropertiesFactory { + + /** + * Logger. + */ + private static Logger _log = LoggerFactory.getLogger(TestPropertiesFactory.class); + + + public static TestProperties getTestProperties() { + + TestPropertiesFactory factory = new TestPropertiesFactory(); + Optional fileOptional = factory.findPropertyFile(); + + TestProperties testProperties; + if (fileOptional.isPresent()) { + testProperties = new FileTestProperties(fileOptional.get()); + } else { + testProperties = new StubTestProperties(); + } + + return testProperties; + } + + private Optional findPropertyFile() { + Optional fileOptional = Optional.empty(); + String setupPropertiesPath = System.getenv("SETUP_PROPERTIES_PATH"); + + try { + if (setupPropertiesPath != null && setupPropertiesPath.length() > 0) { + _log.info("Using properties file at '{}'", setupPropertiesPath); + File properties = new File(setupPropertiesPath); + fileOptional = properties.exists() ? Optional.of(properties) : Optional.empty(); + } else { + URL resource = this.getClass().getResource("/setup.properties"); + if (resource != null) { + fileOptional = Optional.of(Paths.get(resource.toURI()).toFile()); + _log.info("Using properties file /setup.properties from classpath"); + } + } + } catch (Exception e) { + _log.warn("Unable to load properties file", e); + fileOptional = Optional.empty(); + } + + return fileOptional; + } + +} diff --git a/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java b/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java new file mode 100644 index 00000000..368cca1f --- /dev/null +++ b/src/test/java/com/flickr4java/flickr/test/util/TransportStub.java @@ -0,0 +1,86 @@ +package com.flickr4java.flickr.test.util; + +import com.flickr4java.flickr.*; +import com.flickr4java.flickr.uploader.Payload; +import com.flickr4java.flickr.uploader.UploadMetaData; +import com.flickr4java.flickr.uploader.UploaderResponse; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.StringReader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Map; + +public class TransportStub extends Transport { + + private final DocumentBuilder builder; + + public TransportStub() { + DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); + try { + builder = builderFactory.newDocumentBuilder(); + } catch (ParserConfigurationException e) { + throw new FlickrRuntimeException(e); + } + } + + @Override + public Response get(String path, Map parameters, String apiKey, String sharedSecret) { + return loadResponseFromFile(parameters.get("method"), "get"); + } + + @Override + public Response post(String path, Map parameters, String apiKey, String sharedSecret) { + return loadResponseFromFile(parameters.get("method"), "post"); + } + + @Override + public Response postMultiPart(String path, UploadMetaData parameters, Payload payload, String apiKey, String sharedSecret) { + return loadMulitpartResponseFromFile("upload", "post"); + } + + @Override + public Response getNonOAuth(String path, Map parameters) { + return null; + } + + private Response loadResponseFromFile(Object flickrMethod, String httpMethod) { + RESTResponse response; + String filename = String.format("/payloads/%s/%s.xml", httpMethod, flickrMethod); + try { + Path filePath = Paths.get(this.getClass().getResource(filename).toURI()); + String strXml = new String(Files.readAllBytes(filePath), StandardCharsets.UTF_8); + Document document = builder.parse(new InputSource(new StringReader(strXml))); + + response = new RESTResponse(); + response.parse(document); + } catch (Exception e) { + throw new FlickrRuntimeException(e); + } + + return response; + } + + private Response loadMulitpartResponseFromFile(Object flickrMethod, String httpMethod) { + UploaderResponse response; + String filename = String.format("/payloads/%s/%s.xml", httpMethod, flickrMethod); + try { + Path filePath = Paths.get(this.getClass().getResource(filename).toURI()); + String strXml = new String(Files.readAllBytes(filePath), StandardCharsets.UTF_8); + Document document = builder.parse(new InputSource(new StringReader(strXml))); + + response = new UploaderResponse(); + response.parse(document); + } catch (Exception e) { + throw new FlickrRuntimeException(e); + } + + return response; + } +} diff --git a/Flickr4Java/src/test/resources/completenesstest.properties b/src/test/resources/completenesstest.properties similarity index 67% rename from Flickr4Java/src/test/resources/completenesstest.properties rename to src/test/resources/completenesstest.properties index 126a0017..cec8b791 100644 --- a/Flickr4Java/src/test/resources/completenesstest.properties +++ b/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 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..0abd54b7 --- /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..3b6cd752 --- /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..2b06c4be --- /dev/null +++ b/src/test/resources/payloads/get/flickr.cameras.getBrandModels.xml @@ -0,0 +1,2645 @@ + + + + + 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 +

    + 22.3 + 3.2 + CompactFlash, Secure Digital, SDHC, SDXC +
    + + https://live.staticflickr.com/cameras/72157622292089908_model_small_99bff53988.jpg + https://live.staticflickr.com/cameras/72157622292089908_model_large_497d3698ba.jpg + + + + Canon EOS 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 +
    + 20.2 + 3 + Secure Digital, SDXC, SDHC +
    + + https://live.staticflickr.com/cameras/72157607012320362_model_small_aa23f6b999.jpg + https://live.staticflickr.com/cameras/72157607012320362_model_large_ceb47a4e39.jpg + +
    + + Canon EOS 7D MARK II + + https://live.staticflickr.com/cameras/72157644861391679_model_small_68f69eec3f.jpg + https://live.staticflickr.com/cameras/72157644861391679_model_large_12fcf1403e.jpg + + + + Canon EOS Rebel T7 + + + Canon EOS 90D + + + Canon EOS 80D + + https://live.staticflickr.com/cameras/72157664130845639_model_small_0888c8b51d.jpg + https://live.staticflickr.com/cameras/72157664130845639_model_large_4404988642.jpg + + + + Canon EOS R + + + Canon EOS 70D +
    + 20.2 + 3 + Secure Digital, SDXC, SDHC +
    + + https://live.staticflickr.com/cameras/72157633273873695_model_small_e17b51707b.jpg + https://live.staticflickr.com/cameras/72157633273873695_model_large_0ac43738dc.jpg + +
    + + Canon EOS 7D +
    + 18 + 3 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/72157602280763141_model_small_d6e5af0712.jpg + https://live.staticflickr.com/cameras/72157602280763141_model_large_1f77f7e0f2.jpg + +
    + + Canon EOS 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 RP + + + Canon EOS 60D +
    + 18 + 3 + Secure Digital, SDHC, SDXC +
    + + https://live.staticflickr.com/cameras/72157624493316109_model_small_93c8e25107.jpg + https://live.staticflickr.com/cameras/72157624493316109_model_large_c07377e8d4.jpg + +
    + + Canon EOS 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 + + https://live.staticflickr.com/cameras/72157632205837729_model_small_42e58fa967.jpg + https://live.staticflickr.com/cameras/72157632205837729_model_large_8cb7ba6c52.jpg + + + + Canon EOS-1D X Mark II + + https://live.staticflickr.com/cameras/72157663262267976_model_small_fe1274e6b7.jpg + https://live.staticflickr.com/cameras/72157663262267976_model_large_a69c5c58dd.jpg + + + + Canon EOS REBEL T2i +
    + 18 + 3 + SDXC, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157623502347808_model_small_d6f54d07c8.jpg + https://live.staticflickr.com/cameras/72157623502347808_model_large_692b09d10c.jpg + +
    + + Canon EOS Rebel T7i + + + Canon EOS R8 + + 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 + +
    + + 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 REBEL T5 +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157642353970835_model_small_b3f1ecb638.jpg + https://live.staticflickr.com/cameras/72157642353970835_model_large_359a3f62ee.jpg + +
    + + Canon EOS REBEL T5i +
    + 18 + 3 + Secure Digital, SDHC, SDXC +
    + + https://live.staticflickr.com/cameras/72157633291340568_model_small_a29265b941.jpg + https://live.staticflickr.com/cameras/72157633291340568_model_large_6aa43d9736.jpg + +
    + + Canon EOS M50 + + + Canon EOS R10 + + https://live.staticflickr.com/cameras/72157720717924984_model_small_e05217fe90.jpg + https://live.staticflickr.com/cameras/72157720717924984_model_large_2a9c9384b2.jpg + + + + Canon EOS Digital Rebel XSi +
    + 12.2 + 3 + Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157604225656701_model_small_c76252f106.jpg + https://live.staticflickr.com/cameras/72157604225656701_model_large_dedb412bb3.jpg + +
    + + Canon EOS 5DS R + + https://live.staticflickr.com/cameras/72157650665459092_model_small_70265a1860.jpg + https://live.staticflickr.com/cameras/72157650665459092_model_large_0272a7ab99.jpg + + + + 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 +
    + 12.8 + 2.5 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/130_model_small_9dbbe5a2b2.jpg + https://live.staticflickr.com/cameras/130_model_large_b8df029b89.jpg + +
    + + Canon EOS R50 + + + Canon PowerShot G7 X Mark II + + + Canon EOS Digital Rebel XT +
    + 8 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/31_model_small_7143654004.jpg + https://live.staticflickr.com/cameras/31_model_large_f11b305bdd.jpg + +
    + + Canon EOS Rebel SL3 + + + Canon EOS 50D +
    + 15.1 + 3 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/72157606814096380_model_small_acfeba1dae.jpg + https://live.staticflickr.com/cameras/72157606814096380_model_large_320ea78949.jpg + +
    + + Canon EOS 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 Digital Rebel XTi +
    + 10.1 + 2.5 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/68_model_small_201afafc2f.jpg + https://live.staticflickr.com/cameras/68_model_large_5fbbd26c3c.jpg + +
    + + Canon EOS 100D + + https://live.staticflickr.com/cameras/72157623555354732_model_small_4ee35cfeb3.jpg + https://live.staticflickr.com/cameras/72157623555354732_model_large_b5dc69964d.jpg + + + + Canon EOS M50m2 + + + Canon EOS-1D X +
    + 18.1 + 3.2 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/72157629220288179_model_small_4807a929c8.jpg + https://live.staticflickr.com/cameras/72157629220288179_model_large_9b2a9a4024.jpg + +
    + + Canon EOS 40D +
    + 10.1 + 3 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/13483_model_small_bc865d9a17.jpg + https://live.staticflickr.com/cameras/13483_model_large_9d618a4965.jpg + +
    + + Canon EOS REBEL T4i +
    + 18 + 3 + Secure Digital, SDXC, SDHC +
    + + https://live.staticflickr.com/cameras/72157630136654636_model_small_7aa6948e95.jpg + https://live.staticflickr.com/cameras/72157630136654636_model_large_9f1336ca57.jpg + +
    + + Canon PowerShot SX60 HS + + https://live.staticflickr.com/cameras/72157647824755152_model_small_e23090b5f4.jpg + https://live.staticflickr.com/cameras/72157647824755152_model_large_7e7e4f80c6.jpg + + + + Canon EOS-1D X Mark III + + https://live.staticflickr.com/cameras/72157712585439943_model_small_f9197e9fee.jpg + https://live.staticflickr.com/cameras/72157712585439943_model_large_5030b2b330.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 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 + +
    + + Canon EOS 20D +
    + 8.3 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/44_model_small_2cb85e48f5.jpg + https://live.staticflickr.com/cameras/44_model_large_eb72aa76ed.jpg + +
    + + Canon EOS 1200D + + https://live.staticflickr.com/cameras/72157640939372033_model_small_c1a3cb597a.jpg + https://live.staticflickr.com/cameras/72157640939372033_model_large_52555f6708.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 Digital Rebel +
    + 6.3 + 1.8 + CompactFlash, Microdrive +
    + + https://live.staticflickr.com/cameras/4_model_small_0d320aed75.jpg + https://live.staticflickr.com/cameras/4_model_large_2a7e545a1e.jpg + +
    + + Canon EOS 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 +
    + 8.2 + 2.5 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/9_model_small_e4b4d029e2.jpg + https://live.staticflickr.com/cameras/9_model_large_b17d8c82c3.jpg + +
    + + Canon PowerShot SX720 HS + + + 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 M +
    + 18 + 3 + Secure Digital, SDXC, SDHC +
    + + https://live.staticflickr.com/cameras/72157630734034208_model_small_92bbea491c.jpg + https://live.staticflickr.com/cameras/72157630734034208_model_large_2a60438278.jpg + +
    + + Canon EOS REBEL SL1 + + https://live.staticflickr.com/cameras/72157633336811707_model_small_9f40643ac4.jpg + https://live.staticflickr.com/cameras/72157633336811707_model_large_2d70d20249.jpg + + + + Canon EOS-1D Mark IV +
    + 16.1 + 3 + SDHC Memory Card, CompactFlash, Secure Digital (SD) Card, Microdrive +
    + + https://live.staticflickr.com/cameras/72157603810225532_model_small_e8a45a1b36.jpg + https://live.staticflickr.com/cameras/72157603810225532_model_large_9785d9733c.jpg + +
    + + Canon EOS 850D + + + Canon PowerShot G11 +
    + 10 + 2.8 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157621971543189_model_small_1644edb612.jpg + https://live.staticflickr.com/cameras/72157621971543189_model_large_bdefce42a8.jpg + +
    + + Canon PowerShot SX40 HS +
    + 12.1 + 2.7 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/72157627707836876_model_small_d58fd3c6ff.jpg + https://live.staticflickr.com/cameras/72157627707836876_model_large_9edd7fd023.jpg + +
    + + Canon PowerShot SX540 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 EOS 1Ds Mark III +
    + 21.1 + 3 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/72157601586629334_model_small_071161b82f.jpg + https://live.staticflickr.com/cameras/72157601586629334_model_large_9bfa056618.jpg + +
    + + Canon EOS 10D +
    + 6.3 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/81_model_small_4b6d829266.jpg + https://live.staticflickr.com/cameras/81_model_large_7082fc8590.jpg + +
    + + Canon EOS M3 + + + Canon PowerShot G5 X + + https://live.staticflickr.com/cameras/72157654266153945_model_small_d1d368850d.jpg + https://live.staticflickr.com/cameras/72157654266153945_model_large_d655e5ef78.jpg + + + + Canon PowerShot ELPH 180 + + + Canon PowerShot G16 +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157633994515034_model_small_4563648ebb.jpg + https://live.staticflickr.com/cameras/72157633994515034_model_large_8458a45884.jpg + +
    + + Canon EOS 1D Mark III +
    + 10.1 + 3 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/72157600288628059_model_small_4cdfcb3773.jpg + https://live.staticflickr.com/cameras/72157600288628059_model_large_97180e7aa5.jpg + +
    + + Canon PowerShot ELPH 360 HS + + + Canon PowerShot SX710 HS + + https://live.staticflickr.com/cameras/72157649863292917_model_small_4e5f4385ba.jpg + https://live.staticflickr.com/cameras/72157649863292917_model_large_9af0e169f3.jpg + + + + Canon PowerShot SX610 HS + + https://live.staticflickr.com/cameras/72157648049359450_model_small_3e6493e3ac.jpg + https://live.staticflickr.com/cameras/72157648049359450_model_large_bf8a8110d6.jpg + + + + 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 +
    + 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 + CompactFlash, Secure Digital (SD) Card, Microdrive +
    + + https://live.staticflickr.com/cameras/12_model_small_1242e67975.jpg + https://live.staticflickr.com/cameras/12_model_large_dfa80dabd0.jpg + +
    + + Canon PowerShot G12 +
    + 10 + 2.8 +
    + + https://live.staticflickr.com/cameras/72157624839718693_model_small_81c526286d.jpg + https://live.staticflickr.com/cameras/72157624839718693_model_large_b6d975e7d6.jpg + +
    + + Canon EOS M200 + + + Canon PowerShot G15 +
    + 12.1 + 3 + Secure Digital, SDXC, SDHC +
    + + https://live.staticflickr.com/cameras/72157631669626016_model_small_b412b6f89a.jpg + https://live.staticflickr.com/cameras/72157631669626016_model_large_aee995637e.jpg + +
    + + Canon PowerShot G9 +
    + 12.1 + 3 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157601586583928_model_small_71f71758a6.jpg + https://live.staticflickr.com/cameras/72157601586583928_model_large_3df7faed63.jpg + +
    + + Canon 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 +
    + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157615858002250_model_small_d297c2dd76.jpg + https://live.staticflickr.com/cameras/72157615858002250_model_large_18e94049dd.jpg + +
    + + Canon PowerShot G9 X + + https://live.staticflickr.com/cameras/72157654193429816_model_small_4ef5d73fbb.jpg + https://live.staticflickr.com/cameras/72157654193429816_model_large_199f1a72bc.jpg + + + + Canon PowerShot SD750 +
    + 7.1 + 3 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/72157600292482502_model_small_16de7e5ce6.jpg + https://live.staticflickr.com/cameras/72157600292482502_model_large_25b3e8c05d.jpg + +
    + + Canon PowerShot S110 + + + Canon PowerShot A80 + + + Canon PowerShot SX170 IS +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157635427421420_model_small_2ddc739862.jpg + https://live.staticflickr.com/cameras/72157635427421420_model_large_6530dd3eac.jpg + +
    + + Canon PowerShot SX230 HS + + https://live.staticflickr.com/cameras/72157626107421899_model_small_fe96996285.jpg + https://live.staticflickr.com/cameras/72157626107421899_model_large_3b15049271.jpg + + + + Canon PowerShot SD800 IS +
    + 7.1 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/3506_model_small_baa4b8be11.jpg + https://live.staticflickr.com/cameras/3506_model_large_9fba9d5611.jpg + +
    + + Canon PowerShot SX160 IS + + + Canon PowerShot A70 + + https://live.staticflickr.com/cameras/331_model_small_fd6c5d9f6e.jpg + https://live.staticflickr.com/cameras/331_model_large_2a908d5d29.jpg + + + + Canon PowerShot SD300 +
    + 4 + 2 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/192_model_small_dc3c6ec0b9.jpg + https://live.staticflickr.com/cameras/192_model_large_d808fc3fb6.jpg + +
    + + Canon PowerShot G7 X + + https://live.staticflickr.com/cameras/72157645338335022_model_small_7ec3d31a3c.jpg + https://live.staticflickr.com/cameras/72157645338335022_model_large_c815303a07.jpg + + + + Canon EOS 1Ds Mark II +
    + 16.7 + 2 + CompactFlash, Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/156_model_small_a56b80a67f.jpg + https://live.staticflickr.com/cameras/156_model_large_e6b1f8216a.jpg + +
    + + Canon PowerShot 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 + SDHX +
    + + https://live.staticflickr.com/cameras/72157624843263664_model_small_466ca9648e.jpg + https://live.staticflickr.com/cameras/72157624843263664_model_large_0cdf8d446b.jpg + +
    + + Canon PowerShot SX30 IS +
    + 14.1 + 2.7 +
    + + https://live.staticflickr.com/cameras/72157624846412507_model_small_3ba18a5885.jpg + https://live.staticflickr.com/cameras/72157624846412507_model_large_478b8f73b5.jpg + +
    + + Canon PowerShot SD600 +
    + 6 + 2.5 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/147_model_small_d4e6885dd1.jpg + https://live.staticflickr.com/cameras/147_model_large_7542357b7b.jpg + +
    + + Canon 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/72157615327177137_model_small_c923617fcf.jpg + https://live.staticflickr.com/cameras/72157615327177137_model_large_e2585949a3.jpg + +
    + + Canon PowerShot SX20 IS +
    + 12.1 + 2.5 + MultiMediaCard (MMC) +
    + + https://live.staticflickr.com/cameras/72157622054003161_model_small_fa47de9a45.jpg + https://live.staticflickr.com/cameras/72157622054003161_model_large_84bc659ebc.jpg + +
    + + Canon PowerShot A560 +
    + 7.1 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/72157600291685735_model_small_c81b932be3.jpg + https://live.staticflickr.com/cameras/72157600291685735_model_large_6bcd9d3efc.jpg + +
    + + Canon PowerShot SD700 IS +
    + 6 + 2.5 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/432_model_small_08e9751d7e.jpg + https://live.staticflickr.com/cameras/432_model_large_137b141680.jpg + +
    + + Canon PowerShot G10 +
    + 14.7 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607254728807_model_small_c7595d237f.jpg + https://live.staticflickr.com/cameras/72157607254728807_model_large_62ddda0838.jpg + +
    + + Canon PowerShot SD1100 IS +
    + 8 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157603983956398_model_small_b6d51a8150.jpg + https://live.staticflickr.com/cameras/72157603983956398_model_large_c4d1e89f8d.jpg + +
    + + Canon PowerShot ELPH 190 IS + + + Canon PowerShot SX260 HS +
    + 12.1 + 3 + Secure Digital (SD) Card, Secure Digital High Capacity (SDHC) Card, Secure Digital Extended Capacity (SDXC) +
    + + https://live.staticflickr.com/cameras/72157629555712731_model_small_c08bd90398.jpg + https://live.staticflickr.com/cameras/72157629555712731_model_large_cf014452fb.jpg + +
    + + Canon PowerShot SX10 IS +
    + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607394786554_model_small_cd7b8479c5.jpg + https://live.staticflickr.com/cameras/72157607394786554_model_large_472ea85a5a.jpg + +
    + + Canon PowerShot SX520 HS +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157646860530030_model_small_c287cae292.jpg + https://live.staticflickr.com/cameras/72157646860530030_model_large_2e679b44dd.jpg + +
    + + Canon PowerShot SD870 IS +
    + 8 + 3 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/72157601661637005_model_small_8e99150a47.jpg + https://live.staticflickr.com/cameras/72157601661637005_model_large_778c7a6f7f.jpg + +
    + + Canon PowerShot S90 +
    + 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157622037248671_model_small_599abbeea4.jpg + https://live.staticflickr.com/cameras/72157622037248671_model_large_a3e2203efb.jpg + +
    + + Canon PowerShot SD1300 IS +
    + 12.1 + 2.7 + SDHC Memory Card +
    + + https://live.staticflickr.com/cameras/72157623495818996_model_small_a77640cee0.jpg + https://live.staticflickr.com/cameras/72157623495818996_model_large_23f998fc01.jpg + +
    + + Canon PowerShot A2500 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/72157633211759483_model_small_fdf71aaa57.jpg + https://live.staticflickr.com/cameras/72157633211759483_model_large_068f77cbc8.jpg + +
    + + Canon PowerShot A720 IS +
    + 8 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/72157601700908638_model_small_ffa204741b.jpg + https://live.staticflickr.com/cameras/72157601700908638_model_large_c5f41eec0b.jpg + +
    + + Canon PowerShot SX280 HS + + https://live.staticflickr.com/cameras/72157633352455718_model_small_d946c5d9ca.jpg + https://live.staticflickr.com/cameras/72157633352455718_model_large_0bc3ebbc33.jpg + + + + Canon PowerShot G7 +
    + 10 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/24369_model_small_cc7df00614.jpg + https://live.staticflickr.com/cameras/24369_model_large_e18440c1ed.jpg + +
    + + Canon PowerShot SX110 IS +
    + 9 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607097240125_model_small_89b9359b0a.jpg + https://live.staticflickr.com/cameras/72157607097240125_model_large_37bf0a0285.jpg + +
    + + Canon PowerShot SX700 HS +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157641922172003_model_small_335e01dc78.jpg + https://live.staticflickr.com/cameras/72157641922172003_model_large_c62a48d7c0.jpg + +
    + + Canon PowerShot SD780 IS +
    + 12.1 + 2.5 + SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157615260423184_model_small_bc5565c8b7.jpg + https://live.staticflickr.com/cameras/72157615260423184_model_large_f0a803b0fc.jpg + +
    + + Canon PowerShot D10 +
    + 12.1 + 2.5 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/72157616911061933_model_small_e0ca711a7f.jpg + https://live.staticflickr.com/cameras/72157616911061933_model_large_cc00846c64.jpg + +
    + + Canon PowerShot S200 + + + Canon PowerShot A630 +
    + 8 + 2.5 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/880_model_small_f621539dd2.jpg + https://live.staticflickr.com/cameras/880_model_large_f447184173.jpg + +
    + + Canon PowerShot A610 +
    + 5 + 2 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/295_model_small_ec60d819ec.jpg + https://live.staticflickr.com/cameras/295_model_large_b9f67ef906.jpg + +
    + + Canon PowerShot S500 +
    + 5 + 1.5 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/311_model_small_8f0b9890f5.jpg + https://live.staticflickr.com/cameras/311_model_large_7d733573e9.jpg + +
    + + Canon PowerShot G3 +
    + 4 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/168_model_small_f86db7018f.jpg + https://live.staticflickr.com/cameras/168_model_large_bf37ba94b6.jpg + +
    + + Canon PowerShot A3100 IS +
    + 12 +
    +
    + + Canon PowerShot SD450 +
    + 5 + 2.5 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/64_model_small_fa1065b7b6.jpg + https://live.staticflickr.com/cameras/64_model_large_35994d68f5.jpg + +
    + + Canon PowerShot SD770 IS +
    + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157604597339286_model_small_4e767448d9.jpg + https://live.staticflickr.com/cameras/72157604597339286_model_large_c7c345de36.jpg + +
    + + Canon PowerShot SD880 IS +
    + 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607803563543_model_small_f054e019cf.jpg + https://live.staticflickr.com/cameras/72157607803563543_model_large_b23b35ef33.jpg + +
    + + Canon PowerShot A40 + + + Canon PowerShot A510 +
    + 3.2 + 1.8 + MultiMediaCard, Secure Digital +
    + + https://live.staticflickr.com/cameras/103_model_small_b132094ab0.jpg + https://live.staticflickr.com/cameras/103_model_large_f8b0f7772c.jpg + +
    + + Canon PowerShot A85 +
    + 4 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/123_model_small_64e30bc0c3.jpg + https://live.staticflickr.com/cameras/123_model_large_6a55c4cc59.jpg + +
    + + Canon EOS M100 + + https://live.staticflickr.com/cameras/72157683011558521_model_small_c108ba4596.jpg + https://live.staticflickr.com/cameras/72157683011558521_model_large_6958cc8184.jpg + + + + Canon PowerShot S120 +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157632858905716_model_small_09c906f983.jpg + https://live.staticflickr.com/cameras/72157632858905716_model_large_85a885e1ce.jpg + +
    + + Canon PowerShot SX510 HS +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157633170380529_model_small_267d868489.jpg + https://live.staticflickr.com/cameras/72157633170380529_model_large_1196f12423.jpg + +
    + + Canon PowerShot SD1000 +
    + 7.1 + 2.5 + SDHC Memory Card, MultiMediaCard, Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/72157600291596369_model_small_9cf1a0b9c6.jpg + https://live.staticflickr.com/cameras/72157600291596369_model_large_9782e6ca80.jpg + +
    + + Canon PowerShot SD630 +
    + 6 + 3 + MultiMediaCard, Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/380_model_small_ced61150f3.jpg + https://live.staticflickr.com/cameras/380_model_large_aa27b87301.jpg + +
    + + Canon PowerShot SD400 +
    + 5 + 2 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/30_model_small_ba4763b423.jpg + https://live.staticflickr.com/cameras/30_model_large_464f18fc8a.jpg + +
    + + Canon PowerShot A590 IS +
    + 8 + 2.5 + MMCplus +
    + + https://live.staticflickr.com/cameras/72157603914408544_model_small_70f463f26f.jpg + https://live.staticflickr.com/cameras/72157603914408544_model_large_914d992355.jpg + +
    + + Canon PowerShot S2 IS +
    + 5 + 1.8 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/73_model_small_54db2b6032.jpg + https://live.staticflickr.com/cameras/73_model_large_b8912b2c1e.jpg + +
    + + Canon PowerShot SX500 IS +
    + 16 + 3 + Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157631426644668_model_small_3db39a01f5.jpg + https://live.staticflickr.com/cameras/72157631426644668_model_large_3d45443eaf.jpg + +
    + + Canon PowerShot G2 +
    + 4 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/42_model_small_53424d7981.jpg + https://live.staticflickr.com/cameras/42_model_large_e48879fba0.jpg + +
    + + Canon PowerShot A540 +
    + 6 + 2.5 + MultiMediaCard, Secure Digital +
    + + https://live.staticflickr.com/cameras/21_model_small_4595d398d7.jpg + https://live.staticflickr.com/cameras/21_model_large_511e5c2f88.jpg + +
    + + Canon EOS D60 + + + Canon PowerShot A710 IS +
    + 7.1 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/928_model_small_687bc868ed.jpg + https://live.staticflickr.com/cameras/928_model_large_863d565f23.jpg + +
    + + Canon PowerShot A4000 IS +
    + 16 + 3 + Secure Digital, SDHC, SDXC +
    + + https://live.staticflickr.com/cameras/72157629690121413_model_small_c3674f9a04.jpg + https://live.staticflickr.com/cameras/72157629690121413_model_large_fd69104134.jpg + +
    + + Canon PowerShot A520 +
    + 4 + 1.8 + MultiMediaCard, Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/113_model_small_3c4e2b476c.jpg + https://live.staticflickr.com/cameras/113_model_large_a8ae50aaa2.jpg + +
    + + Canon PowerShot A570 IS +
    + 7.1 + 2.5 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157600291595413_model_small_4f322f47a2.jpg + https://live.staticflickr.com/cameras/72157600291595413_model_large_d7bed7b9d9.jpg + +
    + + Canon PowerShot 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 SX1 IS +
    + 10 + 2.8 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607398275267_model_small_506f6616ce.jpg + https://live.staticflickr.com/cameras/72157607398275267_model_large_533d29fcab.jpg + +
    + + Canon PowerShot A550 +
    + 7.1 + 2 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157600289383418_model_small_0ee0a7e545.jpg + https://live.staticflickr.com/cameras/72157600289383418_model_large_b029991d3d.jpg + +
    + + Canon PowerShot S50 + + + Canon PowerShot SD850 IS +
    + 8 + 2.5 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/72157600316000762_model_small_a83286a964.jpg + https://live.staticflickr.com/cameras/72157600316000762_model_large_1970b12f6c.jpg + +
    + + Canon PowerShot A470 +
    + 7.1 + 2.5 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/72157604008953746_model_small_ab3a0c68fb.jpg + https://live.staticflickr.com/cameras/72157604008953746_model_large_5b25b77672.jpg + +
    + + Canon EOS 1DS +
    + 11.1 + 2 + CompactFlash +
    + + https://live.staticflickr.com/cameras/541_model_small_8bf11ebe60.jpg + https://live.staticflickr.com/cameras/541_model_large_f104299b9c.jpg + +
    + + Canon PowerShot 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 +
    + 7.1 + 2 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/306_model_small_10710a51a3.jpg + https://live.staticflickr.com/cameras/306_model_large_1cbfb40949.jpg + +
    + + Canon PowerShot A490 +
    + 10 +
    +
    + + Canon PowerShot S30 +
    + 3.2 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/681_model_small_b801bc3de5.jpg + https://live.staticflickr.com/cameras/681_model_large_fc4c035a37.jpg + +
    + + Canon PowerShot A650 IS +
    + 12.1 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/72157601891740240_model_small_935ab686ff.jpg + https://live.staticflickr.com/cameras/72157601891740240_model_large_010a6f6998.jpg + +
    + + Canon PowerShot 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 S45 +
    + 4 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/373_model_small_f2002e4d4c.jpg + https://live.staticflickr.com/cameras/373_model_large_8d345e31a2.jpg + +
    + + Canon PowerShot A2200 +
    + 14.1 +
    + + https://live.staticflickr.com/cameras/72157626006484232_model_small_32fb85f79e.jpg + https://live.staticflickr.com/cameras/72157626006484232_model_large_7de50bc2d5.jpg + +
    + + Canon PowerShot A480 +
    + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157613371182459_model_small_8f00044538.jpg + https://live.staticflickr.com/cameras/72157613371182459_model_large_6f9d21111d.jpg + +
    + + Canon PowerShot SD890 IS +
    + 10 + 2.5 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157604325182497_model_small_37aa89e826.jpg + https://live.staticflickr.com/cameras/72157604325182497_model_large_80e15aacfd.jpg + +
    + + Canon PowerShot G1 X +
    + 14.3 + 3 + Secure Digital, SDHC, SDXC +
    + + https://live.staticflickr.com/cameras/72157628828372835_model_small_198698201c.jpg + https://live.staticflickr.com/cameras/72157628828372835_model_large_a3c965c325.jpg + +
    + + Canon PowerShot G1 X Mark II + + https://live.staticflickr.com/cameras/72157640985213904_model_small_8d1b938d77.jpg + https://live.staticflickr.com/cameras/72157640985213904_model_large_8454c17833.jpg + + + + Canon PowerShot SX210 IS +
    + 14.1 + 3 +
    + + https://live.staticflickr.com/cameras/72157623514846576_model_small_102da06252.jpg + https://live.staticflickr.com/cameras/72157623514846576_model_large_ff33eaebcd.jpg + +
    + + Canon PowerShot A2300 +
    + 16 + 2.7 + Secure Digital, SDHC, SDXC +
    + + https://live.staticflickr.com/cameras/72157629682877859_model_small_0e76052de3.jpg + https://live.staticflickr.com/cameras/72157629682877859_model_large_512c829f1c.jpg + +
    + + Canon PowerShot SX400 IS + + https://live.staticflickr.com/cameras/72157647167111895_model_small_d02bbe89d7.jpg + https://live.staticflickr.com/cameras/72157647167111895_model_large_cfbf3da591.jpg + + + + Canon PowerShot SX150 IS +
    + 14.1 + 3 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/72157627401052221_model_small_27ede7c032.jpg + https://live.staticflickr.com/cameras/72157627401052221_model_large_a88fcd5700.jpg + +
    + + Canon 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.8 + CompactFlash +
    + + https://live.staticflickr.com/cameras/53_model_small_1358fa386c.jpg + https://live.staticflickr.com/cameras/53_model_large_83792310b4.jpg + +
    + + Canon PowerShot SD940 IS +
    + 12.1 + 2.7 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157622084755657_model_small_1eaf6702b9.jpg + https://live.staticflickr.com/cameras/72157622084755657_model_large_b543294bc4.jpg + +
    + + Canon PowerShot SD900 +
    + 10 + 2.5 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/2705_model_small_e4e7c5e7df.jpg + https://live.staticflickr.com/cameras/2705_model_large_af0d96d561.jpg + +
    + + Canon PowerShot SD200 + + + PowerShot ELPH 330 HS + + + Canon PowerShot A2000 IS +
    + 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607272610511_model_small_ffc16364ec.jpg + https://live.staticflickr.com/cameras/72157607272610511_model_large_c3440fdc55.jpg + +
    + + Canon PowerShot S60 +
    + 5 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/319_model_small_b6503c5e8f.jpg + https://live.staticflickr.com/cameras/319_model_large_a74142fbbb.jpg + +
    + + Canon PowerShot 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 S3 IS +
    + 6 + 2 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/115_model_small_ec10d60f7a.jpg + https://live.staticflickr.com/cameras/115_model_large_9ffdcf70bf.jpg + +
    + + Canon PowerShot SX240 HS + + + Canon PowerShot SX600 HS +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157642221879684_model_small_dc7d3c59ee.jpg + https://live.staticflickr.com/cameras/72157642221879684_model_large_206c3e1651.jpg + +
    + + Canon PowerShot ELPH 100 HS + + https://live.staticflickr.com/cameras/72157626077723737_model_small_422bc9313f.jpg + https://live.staticflickr.com/cameras/72157626077723737_model_large_e95bc5563a.jpg + + + + Canon PowerShot SX120 IS +
    + 10 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157622008716929_model_small_7acbfb860f.jpg + https://live.staticflickr.com/cameras/72157622008716929_model_large_730372a5d9.jpg + +
    + + Canon PowerShot G5 + + + 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, SDHC +
    + + https://live.staticflickr.com/cameras/72157602254956013_model_small_c7fc8218ed.jpg + https://live.staticflickr.com/cameras/72157602254956013_model_large_ca3276f712.jpg + +
    + + Canon PowerShot A95 +
    + 5 + 1.8 + CompactFlash +
    + + https://live.staticflickr.com/cameras/58_model_small_1e7955211c.jpg + https://live.staticflickr.com/cameras/58_model_large_2f415e825f.jpg + +
    + + Canon PowerShot SD1400 IS +
    + 12 +
    + + https://live.staticflickr.com/cameras/72157623403735861_model_small_7b6eef712c.jpg + https://live.staticflickr.com/cameras/72157623403735861_model_large_6377095b94.jpg + +
    + + Canon PowerShot 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 SD500 +
    + 7.1 + 2 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/413_model_small_cde2faea24.jpg + https://live.staticflickr.com/cameras/413_model_large_9eff7352b6.jpg + +
    + + Canon PowerShot SD550 +
    + 7.1 + 2.5 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/482_model_small_f8b4bfe6d8.jpg + https://live.staticflickr.com/cameras/482_model_large_033233faac.jpg + +
    + + Canon EOS D30 + + + 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 EOS 1D + + + Canon PowerShot ELPH 110 HS +
    + 3 +
    + + https://live.staticflickr.com/cameras/72157629310448342_model_small_cd14d2b324.jpg + https://live.staticflickr.com/cameras/72157629310448342_model_large_d505d94f18.jpg + +
    + + Canon IXUS 220HS + + + Canon PowerShot A1000 IS +
    + 10 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157607149127437_model_small_ea9ae41258.jpg + https://live.staticflickr.com/cameras/72157607149127437_model_large_c274e4a031.jpg + +
    + + Canon PowerShot A640 +
    + 10 + 2.5 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/1317_model_small_82221e6d98.jpg + https://live.staticflickr.com/cameras/1317_model_large_5c7290e792.jpg + +
    + + Canon PowerShot A1100 IS +
    + 12.1 + 2.5 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157614912551863_model_small_6c2707008a.jpg + https://live.staticflickr.com/cameras/72157614912551863_model_large_3870e9c623.jpg + +
    + + Canon PowerShot S230 + + + Canon PowerShot S70 +
    + 7.1 + 1.8 + CompactFlash +
    + + https://live.staticflickr.com/cameras/70_model_small_74b4f1d550.jpg + https://live.staticflickr.com/cameras/70_model_large_f9711ed374.jpg + +
    + + Canon PowerShot A400 + + + Canon PowerShot A60 + + + 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 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 A460 +
    + 5 + 2 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157600289350296_model_small_7fbe5bacab.jpg + https://live.staticflickr.com/cameras/72157600289350296_model_large_4a22860b7c.jpg + +
    + + Canon PowerShot S40 + + + Canon PowerShot S80 +
    + 8 + 2.5 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/162_model_small_e1565c67c9.jpg + https://live.staticflickr.com/cameras/162_model_large_571ee7b4bd.jpg + +
    + + Canon PowerShot 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.7 + MultiMediaCard, Secure Digital, SDXC, SDHC +
    + + https://live.staticflickr.com/cameras/72157626177410605_model_small_384a9a5bf2.jpg + https://live.staticflickr.com/cameras/72157626177410605_model_large_ac6be593a2.jpg + +
    + + Canon PowerShot S430 + + + Canon PowerShot A430 +
    + 4 + 1.8 + MultiMediaCard, Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/7_model_small_b345a26c77.jpg + https://live.staticflickr.com/cameras/7_model_large_377848c90e.jpg + +
    + + Canon PowerShot S20 + + + Canon PowerShot SD960 IS +
    + 12.1 + 2.8 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157615260434668_model_small_068dd2b166.jpg + https://live.staticflickr.com/cameras/72157615260434668_model_large_bddd57f961.jpg + +
    + + Canon PowerShot SD950 IS +
    + 12.1 + 2.5 + MultiMediaCard, Secure Digital +
    + + https://live.staticflickr.com/cameras/72157602219148731_model_small_d208e9a3b0.jpg + https://live.staticflickr.com/cameras/72157602219148731_model_large_95eacd033f.jpg + +
    + + Canon PowerShot A700 +
    + 6 + 2.5 + MultiMediaCard, Secure Digital +
    + + https://live.staticflickr.com/cameras/24_model_small_82f9fe11cf.jpg + https://live.staticflickr.com/cameras/24_model_large_9a1ac4b633.jpg + +
    + + Canon PowerShot SD10 +
    + 4 + 1.5 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/345_model_small_727b7fb8a6.jpg + https://live.staticflickr.com/cameras/345_model_large_0640966e76.jpg + +
    + + Canon PowerShot 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 S300 + + + Canon PowerShot A300 + + + Canon PowerShot A1200 +
    + 12.1 + 2.7 + SD/SDHC/SDXC +
    + + https://live.staticflickr.com/cameras/72157626100347637_model_small_98281cf6c9.jpg + https://live.staticflickr.com/cameras/72157626100347637_model_large_5815e8dea2.jpg + +
    + + Canon PowerShot A3000 IS + + https://live.staticflickr.com/cameras/72157623337752577_model_small_ff326581e0.jpg + https://live.staticflickr.com/cameras/72157623337752577_model_large_fa3577dc49.jpg + + + + Canon IXUS 255 HS + + + Canon PowerShot A3300 IS +
    + 16 + 3 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/72157626169050894_model_small_9024e25b64.jpg + https://live.staticflickr.com/cameras/72157626169050894_model_large_11c60be00c.jpg + +
    + + Canon PowerShot SD100 + + + Canon PowerShot S410 +
    + 4 + 1.5 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/49_model_small_a82d562b14.jpg + https://live.staticflickr.com/cameras/49_model_large_f7c124120b.jpg + +
    + + Canon PowerShot SD980 IS +
    + 12.1 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157622084783391_model_small_1558771e45.jpg + https://live.staticflickr.com/cameras/72157622084783391_model_large_05e2884fe1.jpg + +
    + + Canon PowerShot A20 + + + Canon PowerShot SD110 + + + Canon PowerShot G1 + + + Canon PowerShot A495 + + https://live.staticflickr.com/cameras/72157623248701455_model_small_866f79da99.jpg + https://live.staticflickr.com/cameras/72157623248701455_model_large_d76121e78f.jpg + + + + Canon IXUS 300 HS + + https://live.staticflickr.com/cameras/72157624136191544_model_small_c8c1f1020d.jpg + https://live.staticflickr.com/cameras/72157624136191544_model_large_0d9be374a0.jpg + + + + Canon PowerShot TX1 +
    + 7.1 + 1.8 + MultiMediaCard, Secure Digital, SDHC +
    + + https://live.staticflickr.com/cameras/72157600293208250_model_small_264ea2a837.jpg + https://live.staticflickr.com/cameras/72157600293208250_model_large_d7a965d3fb.jpg + +
    + + Canon 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 S330 + + + Canon PowerShot A200 + + + Canon PowerShot S10 + + + Canon PowerShot SD970 IS +
    + 12.1 + 3 + Secure Digital, SDHC, MultiMediaCard, MMCPlus +
    + + https://live.staticflickr.com/cameras/72157616347164661_model_small_3f4b234723.jpg + https://live.staticflickr.com/cameras/72157616347164661_model_large_886fd1e530.jpg + +
    + + Canon PowerShot SD30 +
    + 5 + 1.8 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/329_model_small_ca1aa2959e.jpg + https://live.staticflickr.com/cameras/329_model_large_ab5abc906b.jpg + +
    + + Canon PowerShot SD3500 IS +
    + 14.1 +
    +
    + + Canon PowerShot SD20 +
    + 5 + 1.5 + Secure Digital (SD) Card +
    + + https://live.staticflickr.com/cameras/1056_model_small_0fe1cb84e6.jpg + https://live.staticflickr.com/cameras/1056_model_large_c3b3853158.jpg + +
    + + Canon PowerShot A10 + + + Canon PowerShot Pro90 IS +
    + 3.2 + 1.8 + CompactFlash (CF) Card +
    + + https://live.staticflickr.com/cameras/1792_model_small_6ca66ff1ac.jpg + https://live.staticflickr.com/cameras/1792_model_large_2654c5d5de.jpg + +
    + + Canon PowerShot 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 A420 + + + Canon PowerShot A100 + + + Canon PowerShot A310 + + + Canon PowerShot SD40 +
    + 7.1 + 1.8 + Secure Digital, MultiMediaCard, SDHC +
    + + https://live.staticflickr.com/cameras/50047_model_small_07b3b7b4c4.jpg + https://live.staticflickr.com/cameras/50047_model_large_21ac845732.jpg + +
    + + Canon PowerShot 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 +
    + 2.5 +
    + + https://live.staticflickr.com/cameras/2031_model_small_23f714666e.jpg + https://live.staticflickr.com/cameras/2031_model_large_b853e28789.jpg + +
    + + 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 DC10 +
    + 2.5 +
    + + https://live.staticflickr.com/cameras/1556_model_small_4687e277f0.jpg + https://live.staticflickr.com/cameras/1556_model_large_22f4d11350.jpg + +
    + + Canon ZR90 + + + 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 Optura 20 + + + Canon ZR700 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/6046_model_small_f41b4b4d4e.jpg + https://live.staticflickr.com/cameras/6046_model_large_6c3b8985db.jpg + +
    + + Canon Elura 85 + + + Canon Optura 300 + + + Canon ZR70 MC + + + 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 +
    + 5 + 2 + Secure Digital, MultiMediaCard +
    + + https://live.staticflickr.com/cameras/414_model_small_ecb3329329.jpg + https://live.staticflickr.com/cameras/414_model_large_a004c60da3.jpg + +
    + + Canon Optura 600 +
    + 2.5 +
    + + https://live.staticflickr.com/cameras/2644_model_small_2b31ee6a72.jpg + https://live.staticflickr.com/cameras/2644_model_large_c99852498a.jpg + +
    + + Canon ZR850 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/72157600292491412_model_small_bd46421c08.jpg + https://live.staticflickr.com/cameras/72157600292491412_model_large_5f38b568a4.jpg + +
    + + 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 70 + + + Canon ZR400 +
    + 2.4 +
    + + https://live.staticflickr.com/cameras/2427_model_small_ef31cd0754.jpg + https://live.staticflickr.com/cameras/2427_model_large_8dea31956f.jpg + +
    + + Canon Elura 50 + + + Canon Elura 40 MC + + + Canon GL2 + + + Canon Optura 40 +
    + 2.5 +
    + + https://live.staticflickr.com/cameras/1766_model_small_f8791abed7.jpg + https://live.staticflickr.com/cameras/1766_model_large_dd791c27a3.jpg + +
    + + Canon Elura 100 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/3454_model_small_c33c5c12df.jpg + https://live.staticflickr.com/cameras/3454_model_large_2c7745a2c9.jpg + +
    + + Canon Elura 65 + + + 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 DC40 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/2604_model_small_be408cc63c.jpg + https://live.staticflickr.com/cameras/2604_model_large_42c1d7eeed.jpg + +
    + + Canon HV10 +
    + 2.7 +
    + + https://live.staticflickr.com/cameras/4250_model_small_0587b2f1d4.jpg + https://live.staticflickr.com/cameras/4250_model_large_485d09c770.jpg + +
    + + Canon 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 ZR65 MC + + + Canon Elura 90 + + + Canon Optura 400 +
    + 2.5 +
    + + https://live.staticflickr.com/cameras/7708_model_small_6893d5c98d.jpg + https://live.staticflickr.com/cameras/7708_model_large_7046065dd5.jpg + +
    + + Canon Optura 30 + + + 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..c3cfa103 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.cameras.getBrands.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.collections.getInfo.xml b/src/test/resources/payloads/get/flickr.collections.getInfo.xml new file mode 100644 index 00000000..cbe7b251 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.collections.getInfo.xml @@ -0,0 +1,21 @@ + + + + test + test description + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.collections.getTree.xml b/src/test/resources/payloads/get/flickr.collections.getTree.xml new file mode 100644 index 00000000..c594488d --- /dev/null +++ b/src/test/resources/payloads/get/flickr.collections.getTree.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.commons.getInstitutions.xml b/src/test/resources/payloads/get/flickr.commons.getInstitutions.xml new file mode 100644 index 00000000..9d87dc9b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.commons.getInstitutions.xml @@ -0,0 +1,909 @@ + + + + + CommonsTestAccount + + https://flickr.org + https://flickr.org + http://flickr.com/photos/200049760@N08/ + + + + NavyMedicine + + https://www.med.navy.mil/Pages/default.aspx + https://www.flickr.com/people/navymedicine/ + http://flickr.com/photos/navymedicine/ + + + + Colección Amadeo León - Boconó + + fotoleonbocono.tumblr.com + https://www.tumblr.com/fotoleonbocono-blog/174576043211/galer%C3%ADa-flickr-commons + http://flickr.com/photos/bocono/ + + + + Médiathèques Valence Romans agglomération + + http://mediatheques.valenceromans.fr + http://mediatheques.valenceromans.fr/patrimoine + http://flickr.com/photos/mediathequesvalenceromansagglo/ + + + + Halifax Municipal Archives + + http://www.halifax.ca/archives + https://www.halifax.ca/about-halifax/municipal-archives/services/copying-services + http://flickr.com/photos/halifaxarchives/ + + + + Armenian Studies Program, Fresno State + + http://www.fresnostate.edu/artshum/armenianstudies/ + http://www.fresnostate.edu/artshum/armenianstudies/library/index.html + http://flickr.com/photos/armenianstudies/ + + + + UC Berkeley, Department of Geography + + http://geography.berkeley.edu + http://geography.berkeley.edu/geography-at-berkeley-flickr-commons-site/ + http://flickr.com/photos/105662205@N04/ + + + + Liberas + + http://www.liberaalarchief.be/ + http://www.liberaalarchief.be/doc/liberas_rights_statement.pdf + http://flickr.com/photos/liberas/ + + + + 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/ + + + + Sinaloa Fotografías Históricas + + http://ahgs.gob.mx/ + http://ahgs.gob.mx/servicios-digitales/archivo-fotografico/ + http://flickr.com/photos/99115493@N08/ + + + + Presidency Of The Republic Of Turkey Directorate o + + http://www.byegm.gov.tr/english + http://www.byegm.gov.tr/turkce/rightsstatement + http://flickr.com/photos/dgpi/ + + + + Regionaal Archief Alkmaar Commons + + www.archiefalkmaar.nl + https://www.regionaalarchiefalkmaar.nl/over-ons-english/open-data-english + http://flickr.com/photos/public-domain-archief-alkmaar/ + + + + UVicLibraries + + http://www.uvic.ca/library/ + http://www.uvic.ca/library/featured/collections/disclaimer-flickr.php + http://flickr.com/photos/128520551@N04/ + + + + Congregation of Sisters of St. Joseph in Canada + + http://www.csjcanada.org/csj-archives + http://www.csjcanada.org/csj-archives + http://flickr.com/photos/csj_canada_archives/ + + + + VCU Libraries Commons + + http://www.library.vcu.edu/ + http://www.library.vcu.edu/about/policies/copyright-privacy/#flickr-policy + http://flickr.com/photos/vcucommons/ + + + + Vestfoldmuseene | Vestfold Museums + + www.vestfoldmuseene.no + http://vestfoldmuseene.no/flickr_commons/ + http://flickr.com/photos/vestfoldmuseene/ + + + + Aalto University Library and Archive Commons + + http://www.aalto.fi/en/ + http://lib.aalto.fi/en/materials/images/ + http://flickr.com/photos/aaltocommons/ + + + + Senado Federal do Brasil + + http://www12.senado.gov.br/noticias + http://www12.senado.gov.br/noticias/arquivo-de-imagens-no-flickr-commons + http://flickr.com/photos/senadothecommons/ + + + + Huron County Museum & Historic Gaol + + http://huroncounty.ca/museum/ + http://huroncounty.ca/museum/online_collections.php + http://flickr.com/photos/huroncountymuseum/ + + + + Archives of the Finnish Broadcasting Company Yle + + www.yle.fi (in Finnish) or http://yle.fi/yleisradio/about-yle/this-is-yle (in English) + http://yle.fi/yleisradio/about-yle/yle-sales/yle-archives-flickr + http://flickr.com/photos/ylearkisto/ + + + + Archives of Medicine - NLM - NIH + + http://www.nlm.nih.gov/ + http://www.nlm.nih.gov/hmd/collections/photos/flickr.html + http://flickr.com/photos/nlmhmd/ + + + + The Graduate Institute, Geneva + + http://graduateinstitute.ch/home/research/library.html + http://graduateinstitute.ch/fr/home/research/library/archives/boris-souvarine.html + http://flickr.com/photos/graduateinstitute_library/ + + + + Université de Caen Normandie + + www.unicaen.fr + http://scd.unicaen.fr/flickr-commons/rights-statement-designation-juridique/ + http://flickr.com/photos/universite_caen/ + + + + Faculty of Music, Trinity Laban + + www.trinitylaban.ac.uk/jerwoodlibrary + http://www.trinitylaban.ac.uk/student-experience/facilities/faculty-music/jerwood-library/collections-resources/archives-and + http://flickr.com/photos/jerwoodtcm/ + + + + Internet Archive Book Images + + http://archive.org + https://archive.org/about/terms.php + http://flickr.com/photos/internetarchivebookimages/ + + + + Cloyne & District Historical Society + + www.cloynepioneermuseum.ca + https://pioneer.mazinaw.on.ca/licensing-terms/ + http://flickr.com/photos/cdhs/ + + + + tyrrellhistoricallibrary + + http://www.beaumontlibrary.org/tyrrell_historical_library.htm + http://cdm16058.contentdm.oclc.org/ui/custom/default/collection/default/resources/custompages/policies/FlickrCommons.html + http://flickr.com/photos/124327652@N02/ + + + + Preus museum + + www.preusmuseum.no + http://www.preusmuseum.no/Discover-the-Collections/Photographic-Collection/Flickr-The-Commons + http://flickr.com/photos/preusmuseum/ + + + + Local History & Archives, Hamilton Public Library + + www.hpl.ca + http://www.hpl.ca/articles/use-images + http://flickr.com/photos/hpllocalhistory/ + + + + UBC Library Digitization Centre + + http://diginit.library.ubc.ca/ + http://digitalcollections.library.ubc.ca/cdm/about + http://flickr.com/photos/ubclibrary_digicentre/ + + + + Salt Research + + http://saltonline.org/en/anasayfa + https://archives.saltresearch.org/salt/info_rights.jsp + http://flickr.com/photos/saltonline/ + + + + Tasmanian Archives and State Library (Commons) + + http://www.linc.tas.gov.au/tasmaniasheritage + http://www.linc.tas.gov.au/tasmaniasheritage/browse/pictorial/flickr-commons + http://flickr.com/photos/107895189@N03/ + + + + The Finnish Museum of Photography + + http://www.valokuvataiteenmuseo.fi/ + http://www.valokuvataiteenmuseo.fi/en/information-en/the-terms-of-use-of-the-images#images-on-flickr-commons + http://flickr.com/photos/valokuvataiteenmuseo/ + + + + Library Company of Philadelphia + + http://www.librarycompany.org/ + http://www.librarycompany.org/collections/rightsrepro/rr_digitalresources.htm + http://flickr.com/photos/library-company-of-philadelphia/ + + + + Provincial Archives of Alberta + + http://culture.alberta.ca/paa/default.aspx + http://culture.alberta.ca/paa/about/flickr.aspx + http://flickr.com/photos/alberta_archives/ + + + + Miami U. Libraries - Digital Collections + + http://www.lib.miamioh.edu + https://spec.lib.miamioh.edu/home/services/copyright/ + http://flickr.com/photos/muohio_digital_collections/ + + + + The British Library + + www.bl.uk + https://www.bl.uk/about-us/terms-and-conditions/content-on-flickr-and-wikimedia-commons + http://flickr.com/photos/britishlibrary/ + + + + Costică Acsinte Archive + + http://colectiacosticaacsinte.eu/ + http://colectiacosticaacsinte.eu/ + http://flickr.com/photos/costicaacsinte/ + + + + 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/ + + + + libraryrahs@gmail.com + + 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 + https://www.radcliffe.harvard.edu/schlesinger-library/research-services/permissions-and-copyright + http://flickr.com/photos/schlesinger_library/ + + + + National Museum of Denmark + + http://natmus.dk/ + http://natmus.dk/en/forsknings-og-formidlingsafdelingen/center-for-strategi-kommunikation-og-administration/rights-statement-the-commons-on-flickr/ + http://flickr.com/photos/thenationalmuseumofdenmark/ + + + + Svenska litteratursällskapet i Finland + + www.sls.fi + http://www.sls.fi/doc.php?category=2&language=eng + http://flickr.com/photos/slsarkiva/ + + + + National Archives of Estonia + + http://www.ra.ee/ + http://www.ra.ee/en/flickr-commons/ + http://flickr.com/photos/national_archives_of_estonia/ + + + + Het Nieuwe Instituut - Architecture Collection + + http://www.thenewinstitute.nl + https://collectie.hetnieuweinstituut.nl/en/flickr-commons-rights-statement + http://flickr.com/photos/nai_collection/ + + + + Dundas Museum and Archives + + www.dundasmuseum.ca + http://www.dundasmuseum.ca/photographs.php + http://flickr.com/photos/dundasmuseum/ + + + + UL Digital Library + + http://www.ul.ie/~library + http://www2.ul.ie/web/WWW/Services/Library/Digital_Library + http://flickr.com/photos/ul_digital_library/ + + + + Mennonite Church USA Archives + + http://www.mennoniteusa.org/executive-board/archives/ + https://www.mennoniteusa.org/resource-portal/resource/archives-copyright-statement/ + 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/ + + + + 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/ + + + + 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/ + + + + Arkivverket (National Archives of Norway) + + http://www.arkivverket.no/ + https://www.arkivverket.no/en/about-us/the-use-of-photos + 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/ + https://www.nls.uk/copyright/ + http://flickr.com/photos/nlscotland/ + + + + Ljósmyndasafn Reykjavíkur / Reykjavík Museum of + + www.photomuseum.is + http://ljosmyndasafnreykjavikur.is/english/information.html + http://flickr.com/photos/reykjavikmuseumofphotography/ + + + + Keene and Cheshire County (NH) Historical Photos + + http://www.ci.keene.nh.us/library/ and http://www.hsccnh.org/ + http://keenepubliclibrary.org/library/commons-rights-statement + http://flickr.com/photos/keenepubliclibrary/ + + + + Fylkesarkivet i Vestland + + http://fylkesarkiv.no + http://www.fylkesarkiv.no/en/side/flickr-commons + http://flickr.com/photos/fylkesarkiv/ + + + + Cornell University Library + + http://www.library.cornell.edu/ + http://hdl.handle.net/1813.001/62pk + http://flickr.com/photos/cornelluniversitylibrary/ + + + + Australian National Maritime Museum on The Commons + + http://www.anmm.gov.au/ + http://www.anmm.gov.au/site/page.cfm?u=1657 + http://flickr.com/photos/anmm_thecommons/ + + + + SMU Libraries Digital Collections + + http://smu.edu/cul/ + http://digitalcollections.smu.edu/all/cul/flickr/ + http://flickr.com/photos/smu_cul_digitalcollections/ + + + + Texas State Archives + + http://www.tsl.state.tx.us + http://www.tsl.state.tx.us/exhibits/ccc_flickr.html + http://flickr.com/photos/texasstatearchives/ + + + + Center for Jewish History, NYC + + www.cjh.org + http://www.cjh.org/collections/copyright.php + http://flickr.com/photos/center_for_jewish_history/ + + + + UA Archives | Upper Arlington History + + http://www.uaarchives.org + http://www.uaarchives.org/commons.htm + http://flickr.com/photos/uaarchives/ + + + + Upper Midwest Jewish Archives, University of Minne + + http://www.jhsum.org/ + http://www.jhsum.org/collections/copyright/ + http://flickr.com/photos/jhsum-commons/ + + + + The National Archives UK + + http://www.nationalarchives.gov.uk/ + http://www.nationalarchives.gov.uk/legal/copyright/creative-commons-and-photo-sharing/ + http://flickr.com/photos/nationalarchives/ + + + + UW Digital Collections + + http://content.lib.washington.edu/index.html + http://content.lib.washington.edu/FlickrCommons.html + http://flickr.com/photos/uw_digital_images/ + + + + The U.S. National Archives + + http://www.archives.gov/ + http://www.archives.gov/social-media/flickr-faqs.html#9 + http://flickr.com/photos/usnationalarchives/ + + + + Bergen Public Library + + http://nettbiblioteket.no/ + http://nettbiblioteket.no/biblioteksinformasjon/flickr-commons.html + http://flickr.com/photos/bergen_public_library/ + + + + LSE Library + + http://www2.lse.ac.uk/library/Home.aspx + https://www.lse.ac.uk/library/about/library-rules-and-general-policies#:~:text=Flickr%20Rights%20Statement + 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/ + https://www.library.wales/commercial-services/media/licensing + 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 + https://www.raa.se/hitta-information/arkiv-och-bibliotek/om-arkivet-och-biblioteket/fotografier/ + 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://scarc.library.oregonstate.edu/duplication.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/ + https://www.awm.gov.au/about/organisation/corporate/copyright + 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 Stewart Museum + + http://www.mccord-museum.qc.ca/ + https://www.musee-mccord-stewart.ca/en/collections/photographic-services-and-copyright/ + 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 NSW + + http://www.sl.nsw.gov.au/ + https://www.sl.nsw.gov.au/copyright + 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/ + https://www.bibliotheque.toulouse.fr/pratique/nous-suivre/ + 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..5baebed3 --- /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..01a8f4c3 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.groups.getInfo.xml @@ -0,0 +1,43 @@ + + + + FlickrCentral + <b>Welcome to FlickrCentral!</b> +Just like Grand Central but without the oyster bar, the trains, New York City... + +FlickrCentral is a place for the newbies to get a taste of what Flickr is about, and a place for the more experienced users to keep a finger on the pulse of our favorite addiction. This group is for viewing Flickr from high above - <i>a place for posts on things that are about Flickr or would interest MOST Flickrites.</i> + +We adhere to Flickr's <a href="http://www.flickr.com/groups_guidelines.gne">Group Guidelines</a> and <a href="http://www.flickr.com/guidelines.gne">Community Guidelines</a>. + +<b>This is a moderated group.</b> The moderators retain the right to delete (or lock as appropriate) threads and comments that do not follow these rules, guidelines or are perceived to be abusive, redundant, self-promotional/commercial or not leading to novel discussion. + + + - Be polite: Do not fingerpoint, shame, nor attack personally other flickr members. + +- Please use the search tools (<a href="http://www.flickr.com/search/groups/?w=34427469792@N01&amp;q=">FlickrCentral discussions</a>, <a href="http://www.flickr.com/search/groups/?q=">group search</a>) before posting a new topic. + +- Photos added to group discussions must be of &quot;small&quot; size, or smaller. + +- Photos added to the group pool must be 'Kid Friendly' and 'Safe For Workplaces'. + +- <b>If you wish to say 'Hello!':</b> +Please do not create threads to introduce yourself, or to ask for views, comments or votes <b>(this includes any 'game' threads for this purpose too)</b>, but instead look at the following threads and post there: +<a href="http://www.flickr.com/groups/central/discuss/72157627531743181//lastpage">Introduce Yourself</a>. +<a href="http://www.flickr.com/groups/central/discuss/72157627531749025/lastpage">Announce a New Group</a>. +<a href="http://www.flickr.com/groups/central/discuss/72157605807256126/">Suggest content for the FlickrBlog</a>. +<a href="http://www.flickr.com/groups/central/discuss/98246/">Announce exhibits and shows featuring flickr members</a>. + +To clarify - if you start a thread that includes your own image as a means to promote traffic, or even that encourages traffic as a byproduct, it will be deleted. If your thread cannot stand on 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. + + 315110 + 8482392 + 12896 + 3 + + 2004-02-05 22:15:10 + 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 new file mode 100644 index 00000000..0fd83624 --- /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..ad458faf --- /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..bf94214b --- /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..093a478a --- /dev/null +++ b/src/test/resources/payloads/get/flickr.interestingness.getList.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.machinetags.getNamespaces.xml b/src/test/resources/payloads/get/flickr.machinetags.getNamespaces.xml new file mode 100644 index 00000000..9afdaee5 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.machinetags.getNamespaces.xml @@ -0,0 +1,21 @@ + + + + cameratoss + camertoss + commons + content + diptych + experimentcameratoss + fc + getty + gravitygroup + image + jds + jp2br + labels + pfo + thegardens + wrh + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.machinetags.getPairs.xml b/src/test/resources/payloads/get/flickr.machinetags.getPairs.xml new file mode 100644 index 00000000..a2c9c895 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.machinetags.getPairs.xml @@ -0,0 +1,19 @@ + + + + ceramics:artist + ceramics:date + ceramics:dateadded + ceramics:depth + ceramics:glazing + ceramics:height + ceramics:length + ceramics:material + ceramics:object_type + ceramics:series_title + ceramics:technique + ceramics:temperature + ceramics:title + ceramics:width + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.machinetags.getPredicates.xml b/src/test/resources/payloads/get/flickr.machinetags.getPredicates.xml new file mode 100644 index 00000000..1593258e --- /dev/null +++ b/src/test/resources/payloads/get/flickr.machinetags.getPredicates.xml @@ -0,0 +1,15 @@ + + + + age + all + flickrprivacy + flickrsafesearch + groups + location + privacy + projects + realestate + safesearch + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml b/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml new file mode 100644 index 00000000..6357975c --- /dev/null +++ b/src/test/resources/payloads/get/flickr.machinetags.getRecentValues.xml @@ -0,0 +1,505 @@ + + + + 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.machinetags.getValues.xml b/src/test/resources/payloads/get/flickr.machinetags.getValues.xml new file mode 100644 index 00000000..e69f2f51 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.machinetags.getValues.xml @@ -0,0 +1,61 @@ + + + + _wood + bag + black_clay + booy + boy + boys + bus + camera + cast_iron + charcoal + chocolate + clay_and_brick + clover + counter + cyrus + dfgdfg + dfggdf + digital_image + dog + earthenware + flower + fruit + fur + glass + glaze + grass + grass_hill + hiking + hill + human_flesh + kiln_cast_glass + kiln-cast_glass + leather_pillow + limoges_porcelain + marley + mixed_media + mn + nature + none, + nylon_flocking + other + paint + porcelain + porcelain_slip + puppy + resin + royal_copenhagen_porcelain + silver_leaf + slipware + small_child + stoneware + t_material + table + terra_cotta + trails + wood + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.panda.getList.xml b/src/test/resources/payloads/get/flickr.panda.getList.xml new file mode 100644 index 00000000..05cc9bda --- /dev/null +++ b/src/test/resources/payloads/get/flickr.panda.getList.xml @@ -0,0 +1,8 @@ + + + + ling ling + hsing hsing + wang wang + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.panda.getPhotos.xml b/src/test/resources/payloads/get/flickr.panda.getPhotos.xml new file mode 100644 index 00000000..928b2b93 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.panda.getPhotos.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.people.findByEmail.xml b/src/test/resources/payloads/get/flickr.people.findByEmail.xml new file mode 100644 index 00000000..012e50ef --- /dev/null +++ b/src/test/resources/payloads/get/flickr.people.findByEmail.xml @@ -0,0 +1,6 @@ + + + + boncey_test + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.people.findByUsername.xml b/src/test/resources/payloads/get/flickr.people.findByUsername.xml new file mode 100644 index 00000000..012e50ef --- /dev/null +++ b/src/test/resources/payloads/get/flickr.people.findByUsername.xml @@ -0,0 +1,6 @@ + + + + boncey_test + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.people.getGroups.xml b/src/test/resources/payloads/get/flickr.people.getGroups.xml new file mode 100644 index 00000000..dd2a3be4 --- /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..e48e870d --- /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://www.flickr.com/photos/boncey_test/ + + 2009-12-07 14:28:39 + 1260224919 + 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 new file mode 100644 index 00000000..d72d1c47 --- /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..a4e9bf27 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.people.getPublicGroups.xml @@ -0,0 +1,8 @@ + + + + + + + + \ 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..747499a7 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.people.getUploadStatus.xml @@ -0,0 +1,11 @@ + + + + boncey_test + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.comments.getList.xml b/src/test/resources/payloads/get/flickr.photos.comments.getList.xml new file mode 100644 index 00000000..61a630f6 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.comments.getList.xml @@ -0,0 +1,6 @@ + + + + This looks familiar + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.geo.getLocation.xml b/src/test/resources/payloads/get/flickr.photos.geo.getLocation.xml new file mode 100644 index 00000000..7359438b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.geo.getLocation.xml @@ -0,0 +1,11 @@ + + + + + Daḩl Hīt + + Ar Riyāḑ + Saudi Arabia + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.geo.getPerms.xml b/src/test/resources/payloads/get/flickr.photos.geo.getPerms.xml new file mode 100644 index 00000000..2618c241 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.geo.getPerms.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getContactsPhotos.xml b/src/test/resources/payloads/get/flickr.photos.getContactsPhotos.xml new file mode 100644 index 00000000..d48a3544 --- /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..1219c2c2 --- /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..7373ae9e --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getContext.xml @@ -0,0 +1,6 @@ + + +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 new file mode 100644 index 00000000..8be69077 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getCounts.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getExif.xml b/src/test/resources/payloads/get/flickr.photos.getExif.xml new file mode 100644 index 00000000..d57fff62 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getExif.xml @@ -0,0 +1,187 @@ + + + + + 1.02 + + + inches + + + 240 + 240 dpi + + + 240 + 240 dpi + + + JPEG (old-style) + + + Canon + + + Canon EOS 20D + + + inches + + + 2011:04:03 11:47:32 + + + Darren Greaves + + + Centered + + + 1/60 + 0.017 sec (1/60) + + + 4.0 + f/4.0 + + + Aperture-priority AE + + + 400 + + + 0221 + + + 2011:04:02 18:55:46 + + + 2011:04:02 18:55:46 + + + Y, Cb, Cr, - + + + 0 + 0 EV + + + 1.8 + + + Multi-segment + + + Off, Did not fire + + + 28.0 mm + 28 mm + + + 212 + + + 0100 + + + Uncalibrated + + + 3959.322034 + 3959.32203389831 dpi + + + 3959.322034 + 3959.32203389831 dpi + + + inches + + + Normal + + + Auto + + + Auto + + + Standard + + + High + + + Normal + + + Hard + + + 2 + + + Darren Greaves + + + 6ec563ec53e8134661386ad9612f591b + + + Image::ExifTool 8.15 + + + 1.1.0 + + + 0 + + + 212 + + + 28.0 mm + + + 65535 + + + Darren Greaves + + + 930407553 + + + Darren Greaves + + + 28mm f/? + + + 6EC563EC53E8134661386AD9612F591B + + + 8 + + + JPEG (old-style) + + + Canon + + + Canon EOS 20D + + + inches + + + YCbCr4:4:4 (1 1) + + + 0 + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getInfo.xml b/src/test/resources/payloads/get/flickr.photos.getInfo.xml new file mode 100644 index 00000000..653dd051 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getInfo.xml @@ -0,0 +1,32 @@ + + + + + Robot + Description + + + + + + + 1 + + + + green + grn + grngrn + + + Daḩl Hīt + + Ar Riyāḑ + Saudi Arabia + + + + https://www.flickr.com/photos/boncey_test/5628095432/ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml b/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml new file mode 100644 index 00000000..360a473a --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getNotInSet.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getPerms.xml b/src/test/resources/payloads/get/flickr.photos.getPerms.xml new file mode 100644 index 00000000..77ece85c --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getPerms.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getRecent.xml b/src/test/resources/payloads/get/flickr.photos.getRecent.xml new file mode 100644 index 00000000..3506b0c4 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getRecent.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getSizes.xml b/src/test/resources/payloads/get/flickr.photos.getSizes.xml new file mode 100644 index 00000000..d4f57f07 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getSizes.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photos.getUntagged.xml b/src/test/resources/payloads/get/flickr.photos.getUntagged.xml new file mode 100644 index 00000000..00760342 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.getUntagged.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..c91ffe91 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photos.search.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photosets.getContext.xml b/src/test/resources/payloads/get/flickr.photosets.getContext.xml new file mode 100644 index 00000000..8839c484 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photosets.getContext.xml @@ -0,0 +1,6 @@ + + +9 + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photosets.getInfo.xml b/src/test/resources/payloads/get/flickr.photosets.getInfo.xml new file mode 100644 index 00000000..9195ed68 --- /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..3d25335f --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photosets.getList.xml @@ -0,0 +1,25 @@ + + + + + PhotosetsInterfaceTest + JUnit test, should be deleted + + + + test + + + + + test + A test photoset + + + + Places + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.photosets.getPhotos.xml b/src/test/resources/payloads/get/flickr.photosets.getPhotos.xml new file mode 100644 index 00000000..81d13ae5 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.photosets.getPhotos.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.find.xml b/src/test/resources/payloads/get/flickr.places.find.xml new file mode 100644 index 00000000..ec07b514 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.find.xml @@ -0,0 +1,11 @@ + + + + Alabama, United States + Alabama, United States + Alabama, North-West, South Africa + Alabama, Lehigh Acres, FL, United States + Ilsfeld, Baden-Wurttemberg, Germany + Rimini, Emilia Romagna, Italy + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.findByLatLon.xml b/src/test/resources/payloads/get/flickr.places.findByLatLon.xml new file mode 100644 index 00000000..51bb3feb --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.findByLatLon.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.getChildrenWithPhotosPublic.xml b/src/test/resources/payloads/get/flickr.places.getChildrenWithPhotosPublic.xml new file mode 100644 index 00000000..403ec2d3 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.getChildrenWithPhotosPublic.xml @@ -0,0 +1,83 @@ + + + + Financial District, San Francisco, CA, US, United States + Fisherman's Wharf, San Francisco, CA, US, United States + Financial District South, San Francisco, CA, US, United States + Inner Richmond, San Francisco, CA, US, United States + Golden Gate Park, San Francisco, CA, US, United States + Marina District, San Francisco, CA, US, United States + Presidio National Park, San Francisco, CA, US, United States + South Of Market, San Francisco, CA, US, United States + South Beach, San Francisco, CA, US, United States + Civic Center, San Francisco, CA, US, United States + Mission Bay, San Francisco, CA, US, United States + Chinatown, San Francisco, CA, US, United States + Fort Winfield Scott, San Francisco, CA, US, United States + Mission District, San Francisco, CA, US, United States + Downtown San Francisco-Union Square, San Francisco, CA, US, United States + Tenderloin, San Francisco, CA, US, United States + Russian Hill, San Francisco, CA, US, United States + Telegraph Hill, San Francisco, CA, US, United States + Mission Dolores, San Francisco, CA, US, United States + Outer Richmond, San Francisco, CA, US, United States + Inner Mission, San Francisco, CA, US, United States + Alamo Square, San Francisco, CA, US, United States + Mission District, San Francisco, CA, US, United States + Duboce Triangle, San Francisco, CA, US, United States + Little Italy, San Francisco, CA, US, United States + Nob Hill, San Francisco, CA, US, United States + Haight Ashbury, San Francisco, CA, US, United States + Eureka Valley Dolores Heights, San Francisco, CA, US, United States + Lower Haight, San Francisco, CA, US, United States + Lower Nob Hill, San Francisco, CA, US, United States + Bernal Heights, San Francisco, CA, US, United States + Inset, San Francisco, CA, US, United States + Westlake and Olympic, San Francisco, CA, US, United States + SOMISSPO, San Francisco, CA, US, United States + Hayes Valley, San Francisco, CA, US, United States + Twin Peaks, San Francisco, CA, US, United States + Lone Mountain, San Francisco, CA, US, United States + Van Ness, San Francisco, CA, US, United States + Cathedral Hill, San Francisco, CA, US, United States + Dogpatch, San Francisco, CA, US, United States + Outset, San Francisco, CA, US, United States + Victoria Mews, San Francisco, CA, US, United States + Seacliff, San Francisco, CA, US, United States + Outer Sunset, San Francisco, CA, US, United States + North Panhandle, San Francisco, CA, US, United States + Corona Heights, San Francisco, CA, US, United States + Dolores Heights, San Francisco, CA, US, United States + Fort Mason, San Francisco, CA, US, United States + Cole Valley, San Francisco, CA, US, United States + Lincoln Park, San Francisco, CA, US, United States + Potrero Hill, San Francisco, CA, US, United States + Lincoln Park-Fort Miley, San Francisco, CA, US, United States + Embarcadero, San Francisco, CA, US, United States + Golden Gate Heights, San Francisco, CA, US, United States + Upper Market, San Francisco, CA, US, United States + Silver Terrace, San Francisco, CA, US, United States + Treasure Island, San Francisco, CA, US, United States + Forest Knolls, San Francisco, CA, US, United States + Showplace Square, San Francisco, CA, US, United States + India Basin, San Francisco, CA, US, United States + Clarendon Heights, San Francisco, CA, US, United States + Mission Terrace, San Francisco, CA, US, United States + Merced Manor, San Francisco, CA, US, United States + Panhandle, San Francisco, CA, US, United States + West Portal, San Francisco, CA, US, United States + Sunnyside, San Francisco, CA, US, United States + Portola, San Francisco, CA, US, United States + Ingleside, San Francisco, CA, US, United States + Diamond Heights, San Francisco, CA, US, United States + Western Addition, San Francisco, CA, US, United States + Yerba Buena Island, San Francisco, CA, US, United States + Northeast San Francisco, San Francisco, CA, US, United States + St. Francis Wood, San Francisco, CA, US, United States + Sunset District, San Francisco, CA, US, United States + Balboa Terrace, San Francisco, CA, US, United States + Laguna Honda, San Francisco, CA, US, United States + St. Marys Park, San Francisco, CA, US, United States + Northwest San Francisco, San Francisco, CA, US, United States + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.getInfo.xml b/src/test/resources/payloads/get/flickr.places.getInfo.xml new file mode 100644 index 00000000..191e44d7 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.getInfo.xml @@ -0,0 +1,13 @@ + + + + + + 37.815452575684,-122.53009796143 37.818988800049,-122.53137207031 37.825004577637,-122.53424835205 37.830020904541,-122.52942657471 37.830963134766,-122.52574920654 37.831489562988,-122.52450561523 37.832233428955,-122.52037811279 37.832630157471,-122.51798248291 37.829006195068,-122.51068878174 37.848560333252,-122.49755859375 37.839462280273,-122.48850250244 37.839073181152,-122.48382568359 37.839954376221,-122.47953033447 37.841239929199,-122.47627258301 37.847137451172,-122.46211242676 37.849033355713,-122.46022033691 37.851474761963,-122.45824432373 37.85241317749,-122.45698547363 37.85425567627,-122.4499206543 37.85425567627,-122.44846343994 37.858455657959,-122.43653106689 37.865367889404,-122.43232727051 37.869770050049,-122.42537689209 37.860218048096,-122.41292572021 37.854034423828,-122.39771270752 37.856422424316,-122.38632202148 37.855743408203,-122.38511657715 37.85046005249,-122.37739562988 37.845478057861,-122.37190246582 37.835681915283,-122.366065979 37.83544921875,-122.36573791504 37.832969665527,-122.3609161377 37.829853057861,-122.35473632812 37.819004058838,-122.33551025391 37.798999786377,-122.3426361084 37.796764373779,-122.34375 37.780490875244,-122.34375 37.776584625244,-122.34057617188 37.771595001221,-122.33654022217 37.757144927979,-122.33791351318 37.753345489502,-122.33722686768 37.748863220215,-122.33448028564 37.742214202881,-122.33688354492 37.724834442139,-122.34031677246 37.713157653809,-122.33310699463 37.702293395996,-122.33757019043 37.712818145752,-122.35250091553 37.714218139648,-122.36018371582 37.711994171143,-122.36627960205 37.708606719971,-122.37457275391 37.698047637939,-122.37842559814 37.695911407471,-122.37893676758 37.685516357422,-122.39018249512 37.687164306641,-122.39084625244 37.691528320312,-122.39232635498 37.69847869873,-122.40190124512 37.705265045166,-122.41796875 37.703788757324,-122.42202758789 37.686130523682,-122.42752075195 37.697708129883,-122.44104003906 37.694686889648,-122.44833374023 37.699016571045,-122.46086120605 37.697666168213,-122.46514892578 37.697673797607,-122.46678924561 37.696868896484,-122.4711227417 37.697406768799,-122.47254180908 37.698818206787,-122.47752380371 37.698989868164,-122.47806549072 37.700984954834,-122.48245239258 37.701602935791,-122.48553466797 37.697784423828,-122.49645233154 37.698322296143,-122.49716949463 37.700603485107,-122.50006866455 37.698081970215,-122.51557922363 37.696334838867,-122.51850128174 37.714244842529,-122.52502441406 37.715450286865,-122.53712463379 37.728092193604,-122.54665374756 37.727550506592,-122.56141662598 37.734764099121,-122.54871368408 37.731624603271,-122.53326416016 37.753749847412,-122.53223419189 37.759925842285,-122.52991485596 37.768814086914,-122.53034210205 37.776683807373,-122.53961181641 37.775871276855,-122.54837036133 37.779331207275,-122.55334472656 37.788082122803,-122.55506134033 37.790725708008,-122.55249023438 37.796424865723,-122.53617858887 37.811157226562,-122.5294418335 37.815452575684,-122.53009796143 + + + http://farm6.static.flickr.com/5201/shapefiles/2487956_20101217_bd77c29997.tar.gz + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.getInfoByUrl.xml b/src/test/resources/payloads/get/flickr.places.getInfoByUrl.xml new file mode 100644 index 00000000..fa6fb5e8 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.getInfoByUrl.xml @@ -0,0 +1,17 @@ + + + + San Francisco, California, United States + San Francisco County, California, United States + California, United States + United States + + + 37.815452575684,-122.53009796143 37.818988800049,-122.53137207031 37.825004577637,-122.53424835205 37.830020904541,-122.52942657471 37.830963134766,-122.52574920654 37.831489562988,-122.52450561523 37.832233428955,-122.52037811279 37.832630157471,-122.51798248291 37.829006195068,-122.51068878174 37.848560333252,-122.49755859375 37.839462280273,-122.48850250244 37.839073181152,-122.48382568359 37.839954376221,-122.47953033447 37.841239929199,-122.47627258301 37.847137451172,-122.46211242676 37.849033355713,-122.46022033691 37.851474761963,-122.45824432373 37.85241317749,-122.45698547363 37.85425567627,-122.4499206543 37.85425567627,-122.44846343994 37.858455657959,-122.43653106689 37.865367889404,-122.43232727051 37.869770050049,-122.42537689209 37.860218048096,-122.41292572021 37.854034423828,-122.39771270752 37.856422424316,-122.38632202148 37.855743408203,-122.38511657715 37.85046005249,-122.37739562988 37.845478057861,-122.37190246582 37.835681915283,-122.366065979 37.83544921875,-122.36573791504 37.832969665527,-122.3609161377 37.829853057861,-122.35473632812 37.819004058838,-122.33551025391 37.798999786377,-122.3426361084 37.796764373779,-122.34375 37.780490875244,-122.34375 37.776584625244,-122.34057617188 37.771595001221,-122.33654022217 37.757144927979,-122.33791351318 37.753345489502,-122.33722686768 37.748863220215,-122.33448028564 37.742214202881,-122.33688354492 37.724834442139,-122.34031677246 37.713157653809,-122.33310699463 37.702293395996,-122.33757019043 37.712818145752,-122.35250091553 37.714218139648,-122.36018371582 37.711994171143,-122.36627960205 37.708606719971,-122.37457275391 37.698047637939,-122.37842559814 37.695911407471,-122.37893676758 37.685516357422,-122.39018249512 37.687164306641,-122.39084625244 37.691528320312,-122.39232635498 37.69847869873,-122.40190124512 37.705265045166,-122.41796875 37.703788757324,-122.42202758789 37.686130523682,-122.42752075195 37.697708129883,-122.44104003906 37.694686889648,-122.44833374023 37.699016571045,-122.46086120605 37.697666168213,-122.46514892578 37.697673797607,-122.46678924561 37.696868896484,-122.4711227417 37.697406768799,-122.47254180908 37.698818206787,-122.47752380371 37.698989868164,-122.47806549072 37.700984954834,-122.48245239258 37.701602935791,-122.48553466797 37.697784423828,-122.49645233154 37.698322296143,-122.49716949463 37.700603485107,-122.50006866455 37.698081970215,-122.51557922363 37.696334838867,-122.51850128174 37.714244842529,-122.52502441406 37.715450286865,-122.53712463379 37.728092193604,-122.54665374756 37.727550506592,-122.56141662598 37.734764099121,-122.54871368408 37.731624603271,-122.53326416016 37.753749847412,-122.53223419189 37.759925842285,-122.52991485596 37.768814086914,-122.53034210205 37.776683807373,-122.53961181641 37.775871276855,-122.54837036133 37.779331207275,-122.55334472656 37.788082122803,-122.55506134033 37.790725708008,-122.55249023438 37.796424865723,-122.53617858887 37.811157226562,-122.5294418335 37.815452575684,-122.53009796143 + + + http://farm6.staticflickr.com/5201/shapefiles/2487956_20101217_bd77c29997.tar.gz + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.getPlaceTypes.xml b/src/test/resources/payloads/get/flickr.places.getPlaceTypes.xml new file mode 100644 index 00000000..6cf29986 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.getPlaceTypes.xml @@ -0,0 +1,11 @@ + + + + neighbourhood + locality + county + region + country + continent + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml b/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml new file mode 100644 index 00000000..a8097b82 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.getTopPlacesList.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.placesForBoundingBox.xml b/src/test/resources/payloads/get/flickr.places.placesForBoundingBox.xml new file mode 100644 index 00000000..48557ef5 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.placesForBoundingBox.xml @@ -0,0 +1,6 @@ + + + + China Basin Heliport, United States + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.placesForContacts.xml b/src/test/resources/payloads/get/flickr.places.placesForContacts.xml new file mode 100644 index 00000000..b522fab7 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.placesForContacts.xml @@ -0,0 +1,51 @@ + + + + England, GB, United Kingdom + New York, US, United States + Tokyo Prefecture, JP, Japan + Ile-de-France, FR, France + Lazio, IT, Italy + Scotland, GB, United Kingdom + Berlin, DE, Germany + Massachusetts, US, United States + Kyoto Prefecture, JP, Japan + Ciudad de la Habana, CU, Cuba + Provence-Alpes-Cote d'Azur, FR, France + Nord-Pas-de-Calais, FR, France + Bavaria, DE, Germany + Campania, IT, Italy + Islands, HK, Hong Kong + Sancti Spiritus, CU, Cuba + Pinar del Rio, CU, Cuba + Madrid, ES, Spain + Santiago de Cuba, CU, Cuba + Osaka Prefecture, JP, Japan + Central and Western, HK, Hong Kong + West-Vlaanderen, BE, Belgium + Guantanamo, CU, Cuba + California, US, United States + Andalusia, ES, Spain + Holguin, CU, Cuba + Kanagawa Prefecture, JP, Japan + Lisbon, PT, Portugal + Sudur-Mulasysla, IS, Iceland + Brandenburg, DE, Germany + Wales, GB, United Kingdom + Capital Region of Brussels, BE, Belgium + Yamanashi Prefecture, JP, Japan + New Hampshire, US, United States + Yau Tsim Mong, HK, Hong Kong + Southern, HK, Hong Kong + Eastern, HK, Hong Kong + Cienfuegos, CU, Cuba + Seydisfjordur, IS, Iceland + Valencia, ES, Spain + Vlaams Brabant, BE, Belgium + Castille la Mancha, ES, Spain + Nordur-Mulasysla, IS, Iceland + Rangarvallasysla, IS, Iceland + Nordur-Tingeyjarsysla, IS, Iceland + Camaguey, CU, Cuba + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.placesForTags.xml b/src/test/resources/payloads/get/flickr.places.placesForTags.xml new file mode 100644 index 00000000..945c3872 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.placesForTags.xml @@ -0,0 +1,6 @@ + + + + California, US, United States + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.placesForUser.xml b/src/test/resources/payloads/get/flickr.places.placesForUser.xml new file mode 100644 index 00000000..a40eb2e4 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.placesForUser.xml @@ -0,0 +1,7 @@ + + + + England, GB, United Kingdom + Riyadh, SA, Saudi Arabia + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.resolvePlaceId.xml b/src/test/resources/payloads/get/flickr.places.resolvePlaceId.xml new file mode 100644 index 00000000..94f5482b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.resolvePlaceId.xml @@ -0,0 +1,9 @@ + + + + San Francisco, California, United States + San Francisco County, California, United States + California, United States + United States + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.resolvePlaceURL.xml b/src/test/resources/payloads/get/flickr.places.resolvePlaceURL.xml new file mode 100644 index 00000000..94f5482b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.resolvePlaceURL.xml @@ -0,0 +1,9 @@ + + + + San Francisco, California, United States + San Francisco County, California, United States + California, United States + United States + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.places.tagsForPlace.xml b/src/test/resources/payloads/get/flickr.places.tagsForPlace.xml new file mode 100644 index 00000000..bdb3a656 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.places.tagsForPlace.xml @@ -0,0 +1,105 @@ + + + + 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.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..781a5d6e --- /dev/null +++ b/src/test/resources/payloads/get/flickr.reflection.getMethods.xml @@ -0,0 +1,228 @@ + + + + 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.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.licenses.getLicenseHistory + 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.getMostPopularPhotoDateRange + 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..8e1c54a7 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getClusterPhotos.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ 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..127f4d3d --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getHotList.xml @@ -0,0 +1,147 @@ + + + + + + +april + + + + + + +bretagne + + + + + + +astrophotography + + + + + + +seascape + + + + + + +waterfall + + + + + + +virginia + + + + + + +bridge + + + + + + +light + + + + + + +deathvalley + + + + + + +urbex + + + + + + +vert + + + + + + +cornwall + + + + + + +frankreich + + + + + + +nyc + + + + + + +california + + + + + + +ciel + + + + + + +duck + + + + + + +bolivia + + + + + + +yorkshire + + + + + + +sonnenuntergang + + + + + + + \ 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..f6eaa363 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getListUser.xml @@ -0,0 +1,96 @@ + + + + + 10 + 11 + 2000 + 30 + 400 + a + an + april + banana + be + blog + commercial + d76 + database + dbms + ddx + developed + developer:brand=foma + developer:brand=ilford + developer:name=fomafomauniversaldeveloper + developer:name=ilfordilfotecddx + developing + documents + enhancements + entry + every + expired + features + film + film:brand=ilford + film:brand=kodak + film:iso=25 + film:iso=800 + film:name=ilfordhp5400 + film:name=kodakprofessionalortho655625 + filmdev:recipe=2307 + filmdev:recipe=2347 + filmdev:recipe=2355 + filmdev:recipe=5519 + filmdev:recipe=6417 + filmdev:recipe=9083 + flickr + fomafomauniversaldeveloper + for + found + green + grn + grngrn + has + hp5 + ilford + ilfordhp5400 + ilfordilfotecddx + ilfotec + infact + installation + inversions + is + kodak + kodakprofessionalortho6556 + linking + linux + london + minutes + nextgeneration + objectrelational + pan + photos + postgresql + process + rated + recipes + seconds + shot + site + speed + stock + stuff + system + systems + that + this + tmax + traditional + trix + ubuntu + uniquetesttag + with + xml + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.tags.getListUserPopular.xml b/src/test/resources/payloads/get/flickr.tags.getListUserPopular.xml new file mode 100644 index 00000000..c6ddf2f7 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getListUserPopular.xml @@ -0,0 +1,17 @@ + + + + + 30 + film + for + found + green + is + london + speed + that + this + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.tags.getListUserRaw.xml b/src/test/resources/payloads/get/flickr.tags.getListUserRaw.xml new file mode 100644 index 00000000..483af164 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getListUserRaw.xml @@ -0,0 +1,418 @@ + + + + + + 10 + + + 1+1 + + + 2000) + + + 30 + + + 400 + + + A + + + an + + + (April + + + banana + + + be + + + blog + + + commercial + + + D76 + + + database + + + DBMS + + + DD-X + + + developed + + + developer:brand=Foma + + + developer:brand=Ilford + + + developer:name=Foma Foma Universal Developer + + + developer:name=Ilford Ilfotec DD-X + + + developing + + + documents + + + enhancements + + + entry + + + every + + + Expired + + + features + + + film + + + film:brand=Ilford + + + film:brand=Kodak + + + film:iso=25 + + + film:iso=800 + + + film:name=Ilford HP5+ 400 + + + film:name=Kodak Professional Ortho 6556 25 + + + filmdev:recipe=1028 + + + filmdev:recipe=10840 + + + filmdev:recipe=1171 + + + filmdev:recipe=1177 + + + filmdev:recipe=1237 + + + filmdev:recipe=1362 + + + filmdev:recipe=14 + + + filmdev:recipe=1545 + + + filmdev:recipe=157 + + + filmdev:recipe=16765 + + + filmdev:recipe=1914 + + + filmdev:recipe=2035 + + + filmdev:recipe=212 + + + filmdev:recipe=2167 + + + filmdev:recipe=2266 + + + filmdev:recipe=2307 + + + filmdev:recipe=234 + + + filmdev:recipe=2347 + + + filmdev:recipe=2355 + + + filmdev:recipe=2396 + + + filmdev:recipe=2442 + + + filmdev:recipe=2552 + + + filmdev:recipe=256 + + + filmdev:recipe=25840 + + + filmdev:recipe=2816 + + + filmdev:recipe=283 + + + filmdev:recipe=335 + + + filmdev:recipe=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 + + + filmdev:recipe=6091 + + + filmdev:recipe=6390 + + + filmdev:recipe=6417 + + + filmdev:recipe=6566 + + + filmdev:recipe=6704 + + + filmdev:recipe=6922 + + + filmdev:recipe=6946 + + + filmdev:recipe=6977 + + + filmdev:recipe=7100 + + + filmdev:recipe=720 + + + filmdev:recipe=7426 + + + filmdev:recipe=7595 + + + filmdev:recipe=80 + + + filmdev:recipe=9083 + + + filmdev:recipe=91 + + + Flickr + + + Foma Foma Universal Developer + + + for + + + found + + + green + + + grn + + + grngrn + + + has + + + HP5+ + + + Ilford + + + Ilford HP5+ 400 + + + Ilford Ilfotec DD-X + + + Ilfotec + + + In fact + + + installation + + + inversions + + + is + + + Kodak + + + Kodak Professional Ortho 6556 + + + linking + + + Linux. + + + london + + + minutes + + + next-generation + + + object-relational + + + Pan + + + photos + + + PostgreSQL + + + process + + + rated + + + recipes + + + seconds. + + + shot + + + site + + + speed + + + Stock + + + stuff + + + system + + + systems + + + that + + + This + + + T-MAX + + + traditional + + + Tri-X + + + Ubuntu + + + unique_test_tag + + + with + + + xml + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.tags.getRelated.xml b/src/test/resources/payloads/get/flickr.tags.getRelated.xml new file mode 100644 index 00000000..f598f567 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.tags.getRelated.xml @@ -0,0 +1,37 @@ + + + + macro + nature + yellow + red + green + garden + pink + purple + bokeh + closeup + rose + flowers + plant + white + bee + dof + nikon + insect + canon + orange + sunflower + petals + color + blue + naturesfinest + daisy + rosa + summer + tulip + butterfly + water + pollen + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.urls.getGroup.xml b/src/test/resources/payloads/get/flickr.urls.getGroup.xml new file mode 100644 index 00000000..7c6c477b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.urls.getGroup.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.urls.getUserPhotos.xml b/src/test/resources/payloads/get/flickr.urls.getUserPhotos.xml new file mode 100644 index 00000000..66897392 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.urls.getUserPhotos.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.urls.getUserProfile.xml b/src/test/resources/payloads/get/flickr.urls.getUserProfile.xml new file mode 100644 index 00000000..3266ab69 --- /dev/null +++ b/src/test/resources/payloads/get/flickr.urls.getUserProfile.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.urls.lookupGallery.xml b/src/test/resources/payloads/get/flickr.urls.lookupGallery.xml new file mode 100644 index 00000000..23ecc72b --- /dev/null +++ b/src/test/resources/payloads/get/flickr.urls.lookupGallery.xml @@ -0,0 +1,10 @@ + + + + test + test gallery for Flickr4Java + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.urls.lookupGroup.xml b/src/test/resources/payloads/get/flickr.urls.lookupGroup.xml new file mode 100644 index 00000000..a5095bab --- /dev/null +++ b/src/test/resources/payloads/get/flickr.urls.lookupGroup.xml @@ -0,0 +1,6 @@ + + + + FlickrCentral + + \ No newline at end of file diff --git a/src/test/resources/payloads/get/flickr.urls.lookupUser.xml b/src/test/resources/payloads/get/flickr.urls.lookupUser.xml new file mode 100644 index 00000000..bc06baba --- /dev/null +++ b/src/test/resources/payloads/get/flickr.urls.lookupUser.xml @@ -0,0 +1,6 @@ + + + + boncey_test + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.blogs.getList.xml b/src/test/resources/payloads/post/flickr.blogs.getList.xml new file mode 100644 index 00000000..6394a8f2 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.blogs.getList.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.favorites.add.xml b/src/test/resources/payloads/post/flickr.favorites.add.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.favorites.add.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.favorites.getContext.xml b/src/test/resources/payloads/post/flickr.favorites.getContext.xml new file mode 100644 index 00000000..887fec82 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.favorites.getContext.xml @@ -0,0 +1,6 @@ + + +12 + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.favorites.remove.xml b/src/test/resources/payloads/post/flickr.favorites.remove.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.favorites.remove.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.galleries.getInfo.xml b/src/test/resources/payloads/post/flickr.galleries.getInfo.xml new file mode 100644 index 00000000..71453e75 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.galleries.getInfo.xml @@ -0,0 +1,12 @@ + + + + Motorcycle Pics + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.galleries.getList.xml b/src/test/resources/payloads/post/flickr.galleries.getList.xml new file mode 100644 index 00000000..017535c0 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.galleries.getList.xml @@ -0,0 +1,9 @@ + + + + + test + test gallery for Flickr4Java + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.groups.join.xml b/src/test/resources/payloads/post/flickr.groups.join.xml new file mode 100644 index 00000000..5b57fa68 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.groups.join.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.groups.leave.xml b/src/test/resources/payloads/post/flickr.groups.leave.xml new file mode 100644 index 00000000..8c15cd91 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.groups.leave.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.groups.pools.add.xml b/src/test/resources/payloads/post/flickr.groups.pools.add.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.groups.pools.add.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.groups.pools.remove.xml b/src/test/resources/payloads/post/flickr.groups.pools.remove.xml new file mode 100644 index 00000000..d2dfae9f --- /dev/null +++ b/src/test/resources/payloads/post/flickr.groups.pools.remove.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.photos.addTags.xml b/src/test/resources/payloads/post/flickr.photos.addTags.xml new file mode 100644 index 00000000..3271f2f6 --- /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..0c03c258 --- /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..70d2073c --- /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..756b504b --- /dev/null +++ b/src/test/resources/payloads/post/flickr.test.echo.xml @@ -0,0 +1,16 @@ + + +flickr.test.echo +test +20f26bfcb5a2b46a2c11fd1210d3b420 +372917862 +Dd8y7BG5UKBXZamjZx6/U3IH82k= +72157628704501859-025864ab0471c9bc +20f26bfcb5a2b46a2c11fd1210d3b420 +1714311301 +HMAC-SHA1 +1.0 +1 +Dd8y7BG5UKBXZamjZx6/U3IH82k= +72157628704501859-025864ab0471c9bc + \ No newline at end of file diff --git a/src/test/resources/payloads/post/flickr.test.login.xml b/src/test/resources/payloads/post/flickr.test.login.xml new file mode 100644 index 00000000..c257ab62 --- /dev/null +++ b/src/test/resources/payloads/post/flickr.test.login.xml @@ -0,0 +1,6 @@ + + + + boncey_test + + \ No newline at end of file diff --git a/src/test/resources/payloads/post/upload.xml b/src/test/resources/payloads/post/upload.xml new file mode 100644 index 00000000..e4428334 --- /dev/null +++ b/src/test/resources/payloads/post/upload.xml @@ -0,0 +1,4 @@ + + +43123716831 + \ No newline at end of file diff --git a/Flickr4Java/src/test/resources/setup.properties.example b/src/test/resources/setup.properties.example similarity index 100% rename from Flickr4Java/src/test/resources/setup.properties.example rename to src/test/resources/setup.properties.example