⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 metaweblogapihandler.java

📁 pebble-blog 博客源码博客源码博客源码
💻 JAVA
字号:
/* * Copyright (c) 2003-2006, Simon Brown * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * *   - Redistributions of source code must retain the above copyright *     notice, this list of conditions and the following disclaimer. * *   - 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. * *   - Neither the name of Pebble nor the names of its contributors may *     be used to endorse or promote products derived from this software *     without specific prior written permission. * * 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 OWNER 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. */package net.sourceforge.pebble.webservice;import net.sourceforge.pebble.domain.*;import net.sourceforge.pebble.PebbleContext;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.xmlrpc.XmlRpcException;import java.io.IOException;import java.util.*;/** * A handler for the MetaWeblog API (accessed via XML-RPC). * * @author    Simon Brown */public class MetaWeblogAPIHandler extends AbstractAPIHandler {  static final String URL = "url";  static final String BLOG_ID = "blogid";  static final String BLOG_NAME = "blogName";  static final String DATE_CREATED = "dateCreated";  static final String USER_ID = "userId";  static final String POST_ID = "postid";  static final String TITLE = "title";  static final String DESCRIPTION = "description";  static final String PERMALINK = "permaLink";  static final String PUB_DATE = "pubDate";  static final String CATEGORIES = "categories";  static final String NAME = "name";  static final String TYPE = "type";  static final String BITS = "bits";  static final String HTML_URL = "htmlUrl";  static final String RSS_URL = "rssUrl";  /** the log used by this class */  private static Log log = LogFactory.getLog(MetaWeblogAPIHandler.class);  /**   * Creates a new media object on the server.   *   * @param blogid    the ID of the blog   * @param username  the username used for logging in via XML-RPC   * @param password  the password used for logging in via XML-RPC   * @return  a Hashtable (structs) containing information about the object   * @throws org.apache.xmlrpc.XmlRpcException    if something goes wrong, including an authentication error   */  public Hashtable newMediaObject(String blogid, String username, String password, Hashtable struct) throws XmlRpcException {    log.debug("metaWeblog.newMediaObject(" +        blogid + ", " +        username + ", " +        "********)");    log.debug(" name = " + struct.get(NAME));    log.debug(" type = " + struct.get(TYPE));    Blog blog = getBlogWithBlogId(blogid);    authenticate(blog, username, password);    Hashtable ht = new Hashtable();    String name = (String)struct.get(NAME);    FileManager manager;    if (name.startsWith("files/")) {      manager = new FileManager(blog, FileMetaData.BLOG_FILE);      name = name.substring(name.indexOf("/"));    } else if (name.startsWith("images/")) {      manager = new FileManager(blog, FileMetaData.BLOG_IMAGE);      name = name.substring(name.indexOf("/"));    } else {      manager = new FileManager(blog, FileMetaData.BLOG_IMAGE);      // name is as specified    }    log.debug("Saving to " + name);    try {      byte bytes[] = (byte[])struct.get(BITS);      long itemSize = bytes.length/1024; // number of bytes / 1024      if (FileManager.hasEnoughSpace(blog, itemSize)) {        FileMetaData file = manager.saveFile(name, bytes);        ht.put(URL, file.getUrl());      } else {        throw new XmlRpcException(0, "You do not have enough free space - please free some space by removing unused files or asking your system administrator to increase your quota from " + PebbleContext.getInstance().getConfiguration().getFileUploadQuota() + " KB.");      }    } catch (IOException e) {      e.printStackTrace();      throw new XmlRpcException(0, "IOException");    } catch (IllegalFileAccessException e) {      e.printStackTrace();      throw new XmlRpcException(0, "Access forbidden");    }    return ht;  }  /**   * Gets a list of categories.   *   * @param blogid    the ID of the blog (ignored)   * @param username  the username used for logging in via XML-RPC   * @param password  the password used for logging in via XML-RPC   * @return  a Hashtable of Hashtables (a struct of structs) representing categories   * @throws org.apache.xmlrpc.XmlRpcException    if something goes wrong, including an authentication error   */  public Hashtable getCategories(String blogid, String username, String password) throws XmlRpcException {    log.debug("metaWeblog.getCategories(" +        blogid + ", " +        username + ", " +        "********)");    Blog blog = getBlogWithBlogId(blogid);    authenticate(blog, username, password);    Hashtable categories = new Hashtable();    Iterator it = blog.getCategories().iterator();    Category category;    while (it.hasNext()) {      category = (Category)it.next();      if (!category.isRootCategory()) {        Hashtable struct = new Hashtable();        struct.put(DESCRIPTION, category.getId());        struct.put(HTML_URL, category.getPermalink());        struct.put(RSS_URL, blog.getUrl() + "rss.xml?category=" + category.getId());        categories.put(category.getId(), struct);      }    }    return categories;  }  /**   * Gets a list of the recent blog entries.   *   * @param blogid    the ID of the blog (ignored)   * @param username  the username used for logging in via XML-RPC   * @param password  the password used for logging in via XML-RPC   * @param numberOfPosts   the number of posts to get   * @return  a Vector of Hashtables (an array of structs) representing blog entries   * @throws org.apache.xmlrpc.XmlRpcException    if something goes wrong, including an authentication error   */  public Vector getRecentPosts(String blogid, String username, String password, int numberOfPosts) throws XmlRpcException {    log.debug("metaWeblog.getRecentPosts(" +        blogid + ", " +        username + ", " +        "********)");    Blog blog = getBlogWithBlogId(blogid);    authenticate(blog, username, password);    Vector posts = new Vector();    Collection coll = blog.getRecentBlogEntries(numberOfPosts);    Iterator it = coll.iterator();    BlogEntry entry;    while (it.hasNext()) {      entry = (BlogEntry)it.next();      posts.add(adaptBlogEntry(entry));    }    return posts;  }  /**   * Gets an individual blog entry.   *   * @param postid    the ID of the blog (ignored)   * @param username  the username used for logging in via XML-RPC   * @param password  the password used for logging in via XML-RPC   * @return  a Hashtable representing a blog entry   * @throws org.apache.xmlrpc.XmlRpcException    if something goes wrong, including an authentication error   */  public Hashtable getPost(String postid, String username, String password) throws XmlRpcException {    log.debug("metaWeblog.getPost(" +        postid + ", " +        username + ", " +        "********)");    Blog blog = getBlogWithPostId(postid);    postid = getPostId(postid);    authenticate(blog, username, password);    BlogService service = new BlogService();    BlogEntry entry = null;    try {      entry = service.getBlogEntry(blog, postid);    } catch (BlogServiceException e) {      throw new XmlRpcException(0, "Blog entry with ID of " + postid + " could not be loaded");    }    if (entry != null) {      return adaptBlogEntry(entry);    } else {      throw new XmlRpcException(0, "Blog entry with ID of " + postid + " was not found.");    }  }  /**   * Creates a new blog entry.   *   * @param blogid    the ID of the blog (ignored)   * @param username  the username used for logging in via XML-RPC   * @param password  the password used for logging in via XML-RPC   * @param struct    the struct containing the new blog entry   * @param publish   a flag to indicate whether the entry should be published   * @return  a String representing the ID of the new blog entry   * @throws org.apache.xmlrpc.XmlRpcException    if something goes wrong, including an authentication error   */  public String newPost(String blogid, String username, String password, Hashtable struct, boolean publish) throws XmlRpcException {    log.debug("metaWeblog.newPost(" +        blogid + ", " +        username + ", " +        "********, " +        struct + ", " +        publish + ")");    try {      Blog blog = getBlogWithBlogId(blogid);      authenticate(blog, username, password);      BlogEntry entry = new BlogEntry(blog);      if (struct.containsKey(PUB_DATE)) {        Date date = (Date)struct.get(PUB_DATE);        entry.setDate(date);      }      populateEntry(entry, struct, username);      entry.setPublished(publish);      BlogService service = new BlogService();      service.putBlogEntry(entry);      return formatPostId(blogid, entry.getId());    } catch (BlogServiceException be) {      throw new XmlRpcException(0, be.getMessage());    }  }  /**   * Edits an existing blog entry.   *   * @param postid    the ID of the blog entry to be edited   * @param username  the username used for logging in via XML-RPC   * @param password  the password used for logging in via XML-RPC   * @param struct    the new content of the new blog entry   * @param publish   a flag to indicate whether the entry should be published   * @return  a boolean true value to signal success   * @throws org.apache.xmlrpc.XmlRpcException    if something goes wrong, including an authentication error   */  public boolean editPost(String postid, String username, String password, Hashtable struct, boolean publish) throws XmlRpcException {    log.debug("BloggerAPI.editPost(" +        postid + ", " +        username + ", " +        "********, " +        struct + ", " +        publish + ")");    try {      Blog blog = getBlogWithPostId(postid);      postid = getPostId(postid);      authenticate(blog, username, password);      BlogService service = new BlogService();      BlogEntry entry = service.getBlogEntry(blog, postid);      if (entry != null) {        populateEntry(entry, struct, username);        entry.setPublished(publish);        service.putBlogEntry(entry);      } else {        throw new XmlRpcException(0, "Blog entry with ID of " + postid + " was not found.");      }      return true;    } catch (BlogServiceException be) {      throw new XmlRpcException(0, be.getMessage());    }  }  /**   * Helper method to adapt a blog entry into an XML-RPC compatible struct.   *   * @param entry   the BlogEntry to adapt   * @return  a Hashtable representing the major properties of the entry   */  private Hashtable adaptBlogEntry(BlogEntry entry) {    Hashtable post = new Hashtable();    post.put(TITLE, entry.getTitle());    post.put(PERMALINK, entry.getPermalink());    post.put(TITLE, entry.getTitle());    post.put(DESCRIPTION, entry.getBody());    post.put(DATE_CREATED, entry.getDate());    post.put(PUB_DATE, entry.getDate());    post.put(USER_ID, entry.getAuthor());    post.put(POST_ID, formatPostId(entry.getBlog().getId(), entry.getId()));    Vector categories = new Vector();    Iterator it = entry.getCategories().iterator();    while (it.hasNext()) {      Category cat = (Category)it.next();      categories.add(cat.getId());    }    post.put(CATEGORIES, categories);    return post;  }  /**   * Populates a given BlogEntry.   *   * @param entry     the BlogEntry to populate   * @param struct    a Hashtable containing the blog entry details   * @param username  the author   */  private void populateEntry(BlogEntry entry, Hashtable struct, String username) {    entry.setTitle((String)struct.get(TITLE));    entry.setBody((String)struct.get(DESCRIPTION));    entry.setAuthor(username);    Vector categories = (Vector)struct.get(CATEGORIES);    if (categories != null) {      for (int i = 0; i < categories.size(); i++) {      Category c = entry.getBlog().getCategory((String)categories.get(i));       if (c != null)         entry.addCategory(c);      }    }  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -