1 2 package org.roller.presentation.xmlrpc; 3 4 import java.io.ByteArrayInputStream ; 5 import java.sql.Timestamp ; 6 import java.util.ArrayList ; 7 import java.util.Date ; 8 import java.util.Hashtable ; 9 import java.util.Iterator ; 10 import java.util.List ; 11 import java.util.Map ; 12 import java.util.Vector ; 13 14 import javax.servlet.http.HttpServletRequest ; 15 16 import org.apache.commons.logging.Log; 17 import org.apache.commons.logging.LogFactory; 18 import org.apache.struts.util.RequestUtils; 19 import org.apache.xmlrpc.XmlRpcException; 20 import org.roller.RollerException; 21 import org.roller.model.FileManager; 22 import org.roller.model.Roller; 23 import org.roller.model.WeblogManager; 24 import org.roller.pojos.WeblogCategoryData; 25 import org.roller.pojos.WeblogEntryData; 26 import org.roller.pojos.WebsiteData; 27 import org.roller.presentation.RollerContext; 28 import org.roller.presentation.RollerRequest; 29 import org.roller.util.RollerMessages; 30 import org.roller.util.Utilities; 31 32 33 40 public class MetaWeblogAPIHandler extends BloggerAPIHandler 41 { 42 static final long serialVersionUID = -1364456614935668629L; 43 44 private static Log mLogger = 45 LogFactory.getFactory().getInstance(MetaWeblogAPIHandler.class); 46 47 public MetaWeblogAPIHandler() 48 { 49 super(); 50 } 51 52 54 63 public Object getCategories(String blogid, String userid, String password) 64 throws Exception 65 { 66 mLogger.info("getCategories() Called =====[ SUPPORTED ]====="); 67 mLogger.info(" BlogId: " + blogid); 68 mLogger.info(" UserId: " + userid); 69 70 WebsiteData website = validate(userid,password); 71 RollerRequest rreq = RollerRequest.getRollerRequest(); 72 Roller roller = rreq.getRoller(); 73 try 74 { 75 Hashtable result = new Hashtable (); 76 WeblogManager weblogMgr = roller.getWeblogManager(); 77 List cats = weblogMgr.getWeblogCategories(website, false); 78 for (Iterator wbcItr = cats.iterator(); wbcItr.hasNext();) { 79 WeblogCategoryData category = (WeblogCategoryData) wbcItr.next(); 80 result.put(category.getPath(), createCategoryStruct(category)); 81 } 82 return result; 83 } 84 catch (Exception e) 85 { 86 String msg = "ERROR in MetaWeblogAPIHandler.getCategories"; 87 mLogger.error(msg,e); 88 throw new XmlRpcException(UNKNOWN_EXCEPTION, msg); 89 } 90 } 91 92 94 105 public boolean editPost(String postid, String userid, String password, 106 Hashtable struct, boolean publish) 107 throws Exception 108 { 109 mLogger.info("editPost() Called ========[ SUPPORTED ]====="); 110 mLogger.info(" PostId: " + postid); 111 mLogger.info(" UserId: " + userid); 112 mLogger.info(" Publish: " + publish); 113 114 validate(userid,password); 115 116 Roller roller = RollerRequest.getRollerRequest().getRoller(); 117 118 Hashtable postcontent = struct; 119 String description = (String )postcontent.get("description"); 120 String title = (String )postcontent.get("title"); 121 if (title == null) title = ""; 122 123 Date dateCreated = (Date )postcontent.get("dateCreated"); 124 if (dateCreated == null) dateCreated = (Date )postcontent.get("pubDate"); 125 126 String cat = null; 127 if ( postcontent.get("categories") != null ) 128 { 129 Vector cats = (Vector )postcontent.get("categories"); 130 cat = (String )cats.elementAt(0); 131 } 132 mLogger.info(" Title: " + title); 133 mLogger.info(" Category: " + cat); 134 135 try 136 { 137 WeblogManager weblogMgr = roller.getWeblogManager(); 138 139 Timestamp current = 140 new Timestamp (System.currentTimeMillis()); 141 142 WeblogEntryData entry = 143 weblogMgr.retrieveWeblogEntry(postid); 144 145 if ( !title.equals("") ) entry.setTitle(title); 146 entry.setText(description); 147 entry.setUpdateTime(current); 148 if (dateCreated != null) 149 { 150 entry.setPubTime(new Timestamp (dateCreated.getTime())); 151 } 152 entry.setPublishEntry(Boolean.valueOf(publish)); 153 154 if ( cat != null ) 155 { 156 WeblogCategoryData cd = 158 weblogMgr.getWeblogCategoryByPath(entry.getWebsite(), cat); 159 entry.setCategory(cd); 160 } 161 162 entry.save(); 163 roller.commit(); 164 flushPageCache(userid); 165 166 Thread.sleep(1000); 169 170 return true; 171 } 172 catch (Exception e) 173 { 174 String msg = "ERROR in MetaWeblogAPIHandler.editPost"; 175 mLogger.error(msg,e); 176 throw new XmlRpcException(UNKNOWN_EXCEPTION, msg); 177 } 178 } 179 180 182 193 public String newPost( 194 String blogid, String userid, String password, Hashtable struct, boolean publish) 195 throws Exception 196 { 197 mLogger.info("newPost() Called ===========[ SUPPORTED ]====="); 198 mLogger.info(" BlogId: " + blogid); 199 mLogger.info(" UserId: " + userid); 200 mLogger.info(" Publish: " + publish); 201 202 WebsiteData website = validate(userid,password); 203 204 Hashtable postcontent = struct; 205 String description = (String )postcontent.get("description"); 206 String title = (String )postcontent.get("title"); 207 if (title == null) title = ""; 208 209 Date dateCreated = (Date )postcontent.get("dateCreated"); 210 if (dateCreated == null) dateCreated = (Date )postcontent.get("pubDate"); 211 if (dateCreated == null) dateCreated = new Date (); 212 213 String cat = null; 214 if ( postcontent.get("categories") != null ) 215 { 216 Vector cats = (Vector )postcontent.get("categories"); 217 if (cats.size() > 0) 218 { 219 cat = (String )cats.elementAt(0); 221 } 222 } 223 mLogger.info(" Title: " + title); 224 mLogger.info(" Category: " + cat); 225 226 try 227 { 228 Roller roller = RollerRequest.getRollerRequest().getRoller(); 229 WeblogManager weblogMgr = roller.getWeblogManager(); 230 231 Timestamp current = 232 new Timestamp (System.currentTimeMillis()); 233 234 WeblogEntryData entry = new WeblogEntryData(); 235 entry.setTitle(title); 236 entry.setText(description); 237 entry.setPubTime(new Timestamp (dateCreated.getTime())); 238 entry.setUpdateTime(current); 239 entry.setWebsite(website); 240 entry.setPublishEntry(Boolean.valueOf(publish)); 241 242 if ( cat != null ) 243 { 244 WeblogCategoryData cd = 246 weblogMgr.getWeblogCategoryByPath(website, cat); 247 entry.setCategory(cd); 248 } 249 else 250 { 251 entry.setCategory(website.getBloggerCategory()); 253 } 254 255 entry.save(); 256 roller.commit(); 257 flushPageCache(userid); 258 259 Thread.sleep(1000); 262 263 return entry.getId(); 264 } 265 catch (Exception e) 266 { 267 String msg = "ERROR in MetaWeblogAPIHandler.newPost"; 268 mLogger.error(msg,e); 269 throw new XmlRpcException(UNKNOWN_EXCEPTION, msg); 270 } 271 } 272 273 275 283 public Object getPost(String postid, String userid, String password) 284 throws Exception 285 { 286 mLogger.info("getPost() Called =========[ SUPPORTED ]====="); 287 mLogger.info(" PostId: " + postid); 288 mLogger.info(" UserId: " + userid); 289 290 validate(userid,password); 291 292 try 293 { 294 Roller roller = RollerRequest.getRollerRequest().getRoller(); 295 WeblogManager weblogMgr = roller.getWeblogManager(); 296 WeblogEntryData entry = weblogMgr.retrieveWeblogEntry(postid); 297 return createPostStruct(entry); 298 } 299 catch (Exception e) 300 { 301 String msg = "ERROR in MetaWeblogAPIHandler.getPost"; 302 mLogger.error(msg,e); 303 throw new XmlRpcException(UNKNOWN_EXCEPTION, msg); 304 } 305 } 306 307 309 314 public Object newMediaObject( 315 String blogid, String userid, String password, Hashtable struct) 316 throws Exception 317 { 318 mLogger.debug("newMediaObject() Called =[ SUPPORTED ]====="); 319 mLogger.debug(" BlogId: " + blogid); 320 mLogger.debug(" UserId: " + userid); 321 mLogger.debug(" Password: *********"); 322 323 WebsiteData website = validate(userid, password); 324 try 325 { 326 String name = (String ) struct.get("name"); 327 name = name.replaceAll("/","_"); 328 String type = (String ) struct.get("type"); 329 mLogger.debug("newMediaObject name: " + name); 330 mLogger.debug("newMediaObject type: " + type); 331 332 byte[] bits = (byte[]) struct.get("bits"); 333 334 Roller roller = RollerRequest.getRollerRequest().getRoller(); 335 FileManager fmgr = roller.getFileManager(); 336 RollerMessages msgs = new RollerMessages(); 337 338 if (fmgr.canSave(website, name, bits.length, msgs)) 340 { 341 fmgr.saveFile( 343 website, name, bits.length, new ByteArrayInputStream (bits)); 344 345 RollerRequest rreq = RollerRequest.getRollerRequest(); 346 HttpServletRequest request = rreq.getRequest(); 347 348 String uploadPath = RollerContext.getUploadPath( 350 request.getSession(true).getServletContext()); 351 uploadPath += "/" + website.getUser().getUserName() + "/" + name; 352 String fileLink = RequestUtils.printableURL( 353 RequestUtils.absoluteURL(request, uploadPath)); 354 355 Hashtable returnStruct = new Hashtable (1); 356 returnStruct.put("url", fileLink); 357 return returnStruct; 358 } 359 throw new XmlRpcException(UPLOAD_DENIED_EXCEPTION, 360 "File upload denied because:" + msgs.toString()); 361 } 362 catch (RollerException e) 363 { 364 String msg = "ERROR in BlooggerAPIHander.newMediaObject"; 365 mLogger.error(msg,e); 366 throw new XmlRpcException(UNKNOWN_EXCEPTION, msg); 367 } 368 } 369 370 380 public Object getRecentPosts( 381 String blogid, String userid, String password, int numposts) 382 throws Exception 383 { 384 mLogger.info("getRecentPosts() Called ===========[ SUPPORTED ]====="); 385 mLogger.info(" BlogId: " + blogid); 386 mLogger.info(" UserId: " + userid); 387 mLogger.info(" Number: " + numposts); 388 389 WebsiteData website = validate(userid,password); 390 391 try 392 { 393 Vector results = new Vector (); 394 395 Roller roller = RollerRequest.getRollerRequest().getRoller(); 396 WeblogManager weblogMgr = roller.getWeblogManager(); 397 if (website != null) 398 { 399 Map entries = weblogMgr.getWeblogEntryObjectMap( 400 website, null, new Date (), null, WeblogManager.ALL, new Integer (numposts)); 407 Iterator iter = entries.values().iterator(); 408 while (iter.hasNext()) 409 { 410 ArrayList list = (ArrayList ) iter.next(); 411 Iterator entryIter = list.iterator(); 412 while (entryIter.hasNext()) 413 { 414 WeblogEntryData entry = (WeblogEntryData)entryIter.next(); 415 results.addElement(createPostStruct(entry)); 416 } 417 } 418 } 419 return results; 420 } 421 catch (Exception e) 422 { 423 String msg = "ERROR in BlooggerAPIHander.getRecentPosts"; 424 mLogger.error(msg,e); 425 throw new XmlRpcException(UNKNOWN_EXCEPTION, msg); 426 } 427 } 428 429 private Hashtable createPostStruct(WeblogEntryData entry) 430 { 431 RollerRequest rreq = RollerRequest.getRollerRequest(); 432 HttpServletRequest request = rreq.getRequest(); 433 RollerContext rollerCtx = RollerContext.getRollerContext(request); 434 String permalink = 435 rollerCtx.getAbsoluteContextUrl(request) + entry.getPermaLink(); 436 437 Hashtable struct = new Hashtable (); 438 struct.put("title", entry.getTitle()); 439 if (entry.getLink() != null) 440 { 441 struct.put("link", Utilities.escapeHTML(entry.getLink())); 442 } 443 444 struct.put("description", entry.getText()); 445 struct.put("pubDate", entry.getPubTime()); 446 struct.put("dateCreated", entry.getPubTime()); 447 struct.put("guid", Utilities.escapeHTML(permalink)); 448 struct.put("permaLink", Utilities.escapeHTML(permalink)); 449 struct.put("postid", entry.getId()); 450 struct.put("userid", entry.getWebsite().getUser().getId()); 451 452 Vector catArray = new Vector (); 453 catArray.addElement(entry.getCategory().getPath()); 454 struct.put("categories", catArray); 455 456 return struct; 457 } 458 459 private Hashtable createCategoryStruct(WeblogCategoryData category) 460 { 461 RollerRequest rreq = RollerRequest.getRollerRequest(); 462 HttpServletRequest req = rreq.getRequest(); 463 String contextUrl = RollerContext.getRollerContext(req).getAbsoluteContextUrl(req); 464 String userid = category.getWebsite().getUser().getId(); 465 466 Hashtable struct = new Hashtable (); 467 struct.put("description", category.getPath()); 468 469 String catUrl = contextUrl+"/page/"+userid+"?catname="+category.getPath(); 470 catUrl = Utilities.stringReplace(catUrl," ","%20"); 471 struct.put("htmlUrl", catUrl); 472 473 String rssUrl = contextUrl+"/rss/"+userid+"?catname="+category.getPath(); 474 rssUrl = Utilities.stringReplace(catUrl," ","%20"); 475 struct.put("rssUrl",rssUrl); 476 477 return struct; 478 } 479 } 480 | Popular Tags |