/* * Copyright (C) 2005-2011 Alfresco Software Limited. * * This file is part of Alfresco * * Alfresco is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Alfresco is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Alfresco. If not, see . */ package org.alfresco.repo.publishing.slideshare; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.benfante.jslideshare.DocumentParser; import com.benfante.jslideshare.DocumentParserResult; import com.benfante.jslideshare.SlideShareConnector; import com.benfante.jslideshare.SlideShareErrorException; import com.benfante.jslideshare.SlideShareException; import com.benfante.jslideshare.messages.Group; import com.benfante.jslideshare.messages.Slideshow; import com.benfante.jslideshare.messages.SlideshowInfo; import com.benfante.jslideshare.messages.Tag; import com.benfante.jslideshare.messages.User; /** * * @author Brian * @since 4.0 */ public class SlideShareApiImpl implements SlideShareApi { private static final Log logger = LogFactory.getLog(SlideShareApiImpl.class); public static final String URL_GET_SLIDESHOW = "URL_GET_SLIDESHOW"; public static final String URL_GET_SLIDESHOW_INFO = "URL_GET_SLIDESHOW_INFO"; public static final String URL_GET_SLIDESHOW_BY_USER = "URL_GET_SLIDESHOW_BY_USER"; public static final String URL_GET_SLIDESHOW_BY_TAG = "URL_GET_SLIDESHOW_BY_TAG"; public static final String URL_GET_SLIDESHOW_BY_GROUP = "URL_GET_SLIDESHOW_BY_GROUP"; public static final String URL_UPLOAD_SLIDESHOW = "URL_UPLOAD_SLIDESHOW"; public static final String URL_DELETE_SLIDESHOW = "URL_DELETE_SLIDESHOW"; private static Map DEFAULT_API_URLS = new TreeMap(); static { DEFAULT_API_URLS.put(URL_GET_SLIDESHOW, "https://www.slideshare.net/api/2/get_slideshow"); DEFAULT_API_URLS.put(URL_GET_SLIDESHOW_INFO, "https://www.slideshare.net/api/2/get_slideshow"); DEFAULT_API_URLS.put(URL_GET_SLIDESHOW_BY_USER, "https://www.slideshare.net/api/2/get_slideshow_by_user"); DEFAULT_API_URLS.put(URL_GET_SLIDESHOW_BY_TAG, "https://www.slideshare.net/api/2/get_slideshow_by_tag"); DEFAULT_API_URLS.put(URL_GET_SLIDESHOW_BY_GROUP, "https://www.slideshare.net/api/2/get_slideshow_from_group"); DEFAULT_API_URLS.put(URL_UPLOAD_SLIDESHOW, "https://www.slideshare.net/api/2/upload_slideshow"); DEFAULT_API_URLS.put(URL_DELETE_SLIDESHOW, "https://www.slideshare.net/api/2/delete_slideshow"); } private Map apiUrls = new TreeMap(DEFAULT_API_URLS); protected SlideShareConnector connector; private String username; private String password; public SlideShareApiImpl() { } public SlideShareApiImpl(SlideShareConnector connector) { this.connector = connector; } public SlideShareConnector getConnector() { return connector; } public void setConnector(SlideShareConnector connector) { this.connector = connector; } public void setApiUrls(Map urls) { if (urls == null || !urls.keySet().containsAll(DEFAULT_API_URLS.keySet())) { throw new IllegalArgumentException("Specified URL set is missing one or more values. Expected " + DEFAULT_API_URLS.keySet() + "; Received " + (urls == null ? urls : urls.keySet())); } } public Slideshow getSlideshow(String id) throws SlideShareException, SlideShareErrorException { logger.info("Called getSlideshow with id=" + id); Map parameters = new HashMap(); addParameter(parameters, "slideshow_id", id); return sendMessage(URL_GET_SLIDESHOW, parameters).getSlideShow(); } public SlideshowInfo getSlideshowInfo(String id, String url) throws SlideShareException, SlideShareErrorException { logger.info("Called getSlideshowInfo with id=" + id + ", url=" + url); Map parameters = new HashMap(); addParameter(parameters, "slideshow_id", id); addParameter(parameters, "slideshow_url", url); return sendGetMessage(URL_GET_SLIDESHOW_INFO, parameters).getSlideShowInfo(); } public User getSlideshowByUser(String username) throws SlideShareException, SlideShareErrorException { logger.info("Called getSlideshowByUser with username=" + username); return getSlideshowByUser(username, -1, -1); } public User getSlideshowByUser(String username, int offset, int limit) throws SlideShareException, SlideShareErrorException { logger.info("Called getSlideshowByUser with username=" + username + ", offset=" + offset + ", limit=" + limit); Map parameters = new HashMap(); addParameter(parameters, "username_for", username); addLimits(parameters, offset, limit); return sendMessage(URL_GET_SLIDESHOW_BY_USER, parameters).getUser(); } public Tag getSlideshowByTag(String tag) throws SlideShareException, SlideShareErrorException { logger.info("Called getSlideshowByTag with tag=" + tag); return getSlideshowByTag(tag, -1, -1); } public Tag getSlideshowByTag(String tag, int offset, int limit) throws SlideShareException, SlideShareErrorException { logger.info("Called getSlideshowByTag with tag=" + tag + ", offset=" + offset + ", limit=" + limit); Map parameters = new HashMap(); addParameter(parameters, "tag", tag); addLimits(parameters, offset, limit); return sendMessage(URL_GET_SLIDESHOW_BY_TAG, parameters).getTag(); } public Group getSlideshowByGroup(String groupName) throws SlideShareException, SlideShareErrorException { logger.info("Called getSlideshowByGroup with groupName=" + groupName); return getSlideshowByGroup(groupName, -1, -1); } public Group getSlideshowByGroup(String groupName, int offset, int limit) throws SlideShareException, SlideShareErrorException { logger .info("Called getSlideshowByGrop with groupName=" + groupName + ", offset=" + offset + ", limit=" + limit); Map parameters = new HashMap(); addParameter(parameters, "group_name", groupName); addLimits(parameters, offset, limit); return sendMessage(URL_GET_SLIDESHOW_BY_GROUP, parameters).getGroup(); } public String uploadSlideshow(String username, String password, String title, File src, String description, String tags, boolean makeSrcPublic, boolean makeSlideshowPrivate, boolean generateSecretUrl, boolean allowEmbeds, boolean shareWithContacts) throws SlideShareException, SlideShareErrorException { logger.info("Called uploadSlideshow with username=" + username + ", password=XXX, title=" + title + ", description=" + description + ", tags=" + tags + ", makeSrcPublic=" + makeSrcPublic + ", makeSlideshowPrivate=" + makeSlideshowPrivate + ", generateSecretUrl=" + generateSecretUrl + ", allowEmbeds=" + allowEmbeds + ", shareWithContacts=" + shareWithContacts); Map parameters = new HashMap(); addParameter(parameters, "username", username); addParameter(parameters, "password", password); addParameter(parameters, "slideshow_title", title); addParameter(parameters, "slideshow_description", description); addParameter(parameters, "slideshow_tags", tags); addParameter(parameters, "make_src_public", makeSrcPublic); addParameter(parameters, "make_slideshow_private", makeSlideshowPrivate); addParameter(parameters, "generate_secret_url", generateSecretUrl); addParameter(parameters, "allow_embeds", allowEmbeds); addParameter(parameters, "share_with_contacts", shareWithContacts); Map files = new HashMap(); files.put("slideshow_srcfile", src); return sendMessage(URL_UPLOAD_SLIDESHOW, parameters, files).getSlideShowId(); } public String deleteSlideshow(String username, String password, String id) throws SlideShareException, SlideShareErrorException { logger.info("Called deleteSlideshow with username=" + username + ", password=XXX, id=" + id); Map parameters = new HashMap(); addParameter(parameters, "username", username); addParameter(parameters, "password", password); addParameter(parameters, "slideshow_id", id); return sendGetMessage(URL_DELETE_SLIDESHOW, parameters).getSlideShowId(); } private Map addParameter(Map parameters, String name, String value) { if (value != null) { parameters.put(name, value); } return parameters; } private Map addParameter(Map parameters, String name, boolean value) { parameters.put(name, value ? "Y" : "N"); return parameters; } private Map addLimits(Map parameters, int offset, int limit) { if (offset >= 0) { parameters.put("offset", Integer.toString(offset)); } if (limit >= 0) { parameters.put("limit", Integer.toString(limit)); } return parameters; } private DocumentParserResult sendMessage(String url, Map parameters) throws SlideShareErrorException { addCredentials(parameters); DocumentParserResult result; try { InputStream response = connector.sendMessage(apiUrls.get(url), parameters); result = DocumentParser.parse(response); } catch (IOException iOException) { throw new SlideShareErrorException(-1, "Error sending a message to the url " + apiUrls.get(url), iOException); } return result; } private DocumentParserResult sendGetMessage(String url, Map parameters) throws SlideShareErrorException { addCredentials(parameters); DocumentParserResult result; try { InputStream response = connector.sendGetMessage(apiUrls.get(url), parameters); result = DocumentParser.parse(response); } catch (IOException iOException) { throw new SlideShareErrorException(-1, "Error sending a message to the url " + apiUrls.get(url), iOException); } return result; } private DocumentParserResult sendMessage(String url, Map parameters, Map files) throws SlideShareErrorException { addCredentials(parameters); DocumentParserResult result; try { InputStream response = connector.sendMultiPartMessage(apiUrls.get(url), parameters, files); result = DocumentParser.parse(response); } catch (IOException iOException) { throw new SlideShareErrorException(-1, "Error sending a multipart message to the url " + apiUrls.get(url), iOException); } return result; } private void addCredentials(Map parameters) { if (username != null && password != null) { addParameter(parameters, "username", username); addParameter(parameters, "password", password); } } public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } }