1 4 package org.openedit.links; 5 6 import java.io.StringWriter ; 7 import java.io.Writer ; 8 9 import org.apache.commons.logging.Log; 10 import org.apache.commons.logging.LogFactory; 11 import org.openedit.links.webtree.LinkTreeModel; 12 import org.openedit.repository.ContentItem; 13 import org.openedit.repository.filesystem.StringItem; 14 15 import com.openedit.OpenEditException; 16 import com.openedit.PageAccessListener; 17 import com.openedit.WebPageRequest; 18 import com.openedit.modules.BaseModule; 19 import com.openedit.page.Page; 20 import com.openedit.page.manage.PageManager; 21 import com.openedit.users.User; 22 import com.openedit.util.PathUtilities; 23 import com.openedit.webui.tree.WebTree; 24 import com.openedit.webui.tree.WebTreeNodeTreeRenderer; 25 26 31 public class LinkModule extends BaseModule implements PageAccessListener 32 { 33 protected static final String FILESIZE = "filesize"; 34 protected FileSize fieldFileSize; 35 private static final Log log = LogFactory.getLog(LinkModule.class); 36 protected boolean fieldForceReload; 37 38 public FileSize getFileSize() 39 { 40 if ( fieldFileSize == null) 42 { 43 fieldFileSize = new FileSize(); 44 fieldFileSize.setPageManager(getPageManager()); 45 fieldFileSize.setRoot(getRoot()); 46 } 47 return fieldFileSize; 48 } 49 public void setFileSize(FileSize inFileSize) 50 { 51 fieldFileSize = inFileSize; 52 } 53 54 public LinkTree loadLinks(WebPageRequest inReq) throws OpenEditException 55 { 56 return getLinkTree(inReq); 57 } 58 59 public void setSelectedLinkByUrl(WebPageRequest inReq) throws OpenEditException 60 { 61 LinkTree tree = getLinkTree(inReq); 62 String path = inReq.getContentPage().getPath(); 63 64 Link newselection = tree.findSelectedLinkByUrl(path); 65 tree.setSelectedLink(newselection); 66 } 67 protected void init() 68 { 69 getPageManager().addPageAccessListener(this); 70 71 } 72 73 protected LinkTree getLinkTree(WebPageRequest inReq) throws OpenEditException 74 { 75 String path =findValue("linkpath", inReq); 76 if ( path == null) 77 { 78 path = "/links.xml"; 79 } 80 String name = findValue("linktreename", inReq); 81 82 if ( name == null) 83 { 84 name = "linktree"; 85 } 86 87 Page linkpage = getPageManager().getPage(path,inReq ); 90 String draft = "false"; 102 User user = inReq.getUser(); 103 if( user != null && user.hasPermission("oe.edit.draftmode") ) 104 { 105 draft = "true"; 106 } 107 String id = path + "_" + draft +"_"+ name +"_" + getLoaderName(inReq); 108 LinkTree tree = (LinkTree)inReq.getSessionValue(id); 110 111 if ( tree == null && !linkpage.exists()) 112 { 113 log.info( path + " not found"); 114 tree = new LinkTree(); 115 Link root = new Link(); 116 root.setPath("/index.html"); 117 root.setId("index"); 118 root.setText("Index"); 119 tree.setRootLink(root); 120 tree.setPage(linkpage); 121 tree.setId(id); 122 } 124 else 125 { 126 boolean needsUpdate = true; 127 String selectedLink = null; 128 long newModified = linkpage.getLastModified().getTime(); 129 if ( tree != null ) 130 { 131 needsUpdate = (tree.getLastModified() != newModified); 132 if ( tree.getSelectedLink() != null) 133 { 134 selectedLink = tree.getSelectedLink().getId(); 135 } 136 } 137 if( isForceReload() ) 138 { 139 setForceReload(false); 142 needsUpdate = true; 143 } 144 if ( needsUpdate ) 145 { 146 if (linkpage.exists()) 147 { 148 XmlLinkLoader loader = getLinkLoader(inReq); 149 tree = loader.loadLinks(linkpage); 150 tree.setLastModified(newModified); 153 } 154 else 155 { 156 log.info("deleted links.xml file"); 157 } 158 tree.setSelectedLink( selectedLink ); 159 tree.setId(id); 160 inReq.putSessionValue(id, tree); 161 tree.setPage(linkpage); 162 } 163 } 164 inReq.putPageValue(name,tree); 167 return tree; 169 } 170 171 public String getLoaderName(WebPageRequest inReq) 172 { 173 String linkLoader = inReq.getPage().get("linkloader"); 174 175 if (linkLoader == null && inReq.getCurrentAction()!= null ) 176 { 177 linkLoader = inReq.getCurrentAction().getChildValue("linkloader"); 178 } 179 if( linkLoader == null ) 180 { 181 linkLoader = "htmlLinkLoader"; 182 } 183 if( linkLoader.equals("SimpleLinkLoader")) { 185 linkLoader = "xmlLinkLoader"; 186 } 187 return linkLoader; 188 } 189 190 public XmlLinkLoader getLinkLoader(WebPageRequest inReq) 191 { 192 String linkLoader = getLoaderName(inReq); 193 return (XmlLinkLoader) getModuleManager().getBean(linkLoader); 194 } 195 public void loadSizer(WebPageRequest inReq) 196 { 197 inReq.putSessionValue(FILESIZE, getFileSize()); 198 } 199 protected void save(WebPageRequest inReq, String inMessage) throws Exception  200 { 201 LinkTree tree = getLinkTree(inReq); 202 XmlLinkLoader loader = new XmlLinkLoader(); 203 204 String path = tree.getPath(); 206 path = PathUtilities.createDraftPath(path); 207 208 Page linkpage = getPageManager().getPage(path, inReq); 209 210 Writer out = new StringWriter (); 211 try 212 { 213 loader.saveLinks(tree, out, linkpage.getCharacterEncoding()); 214 } 215 finally 216 { 217 out.close(); 218 } 219 StringItem item = new StringItem(linkpage.getPath(),out.toString(),linkpage.getCharacterEncoding() ); 220 item.setAuthor(inReq.getUser().getUserName()); 221 item.setMessage(inMessage); 222 item.setType(ContentItem.TYPE_EDITED); 223 linkpage.setContentItem(item); 224 getPageManager().putPage(linkpage); 225 227 } 228 229 public void saveLink(WebPageRequest inReq) throws Exception  230 { 231 inReq.getUser().put("oe.edit.draftmode", "true"); 232 233 LinkTree tree = getLinkTree(inReq); 234 Link link = tree.getSelectedLink(); 235 236 String name = inReq.getRequestParameter("linktext"); 237 String url = inReq.getRequestParameter("url"); 238 String userdata = inReq.getRequestParameter("userdata"); 239 String newLinkId = inReq.getRequestParameter("newlinkid"); 240 if (newLinkId != null && !newLinkId.equals(link.getId())) 241 { 242 getLinkTree(inReq).changeLinkId(link, newLinkId); 243 } 244 link.setUserData(userdata); 245 link.setText(name); 246 link.setPath(url); 247 248 String redirectpath = inReq.getRequestParameter("redirectPath"); 249 String accessKey = inReq.getRequestParameter("accesskey"); 250 link.setRedirectPath(redirectpath); 251 String autoloadchildren = inReq.getRequestParameter("autoloadchildren"); 252 link.setAutoLoadChildren(Boolean.parseBoolean(autoloadchildren)); 253 link.setAccessKey(accessKey); 254 save(inReq, "Saved " + name); 255 256 } 257 258 public void appendLink(WebPageRequest inReq) throws Exception  259 { 260 inReq.getUser().put("oe.edit.draftmode", "true"); 261 262 LinkTree tree = getLinkTree(inReq); 263 264 Link newlink = new Link(); String userdata = inReq.getRequestParameter("userdata"); 266 newlink.setUserData(userdata); 267 String name = "New Link"; 268 newlink.setText(name); 269 270 if ( tree.getRootLink() == null) 271 { 272 newlink.setId("index"); 273 tree.setRootLink( newlink); 274 log.error("No index link. Creating one."); 275 return; 276 } 277 String parentId = inReq.getRequestParameter("linkid"); 278 if( parentId == null) 279 { 280 parentId = "index"; 281 } 282 Link link = tree.getLink(parentId); 283 if ( link == null) 284 { 285 log.error("No link selected"); 286 return; 287 } 288 String url = PathUtilities.extractDirectoryPath(link.getUrl()) + "/newlink.html"; newlink.setId(tree.nextId()); 290 newlink.setPath(url); 291 tree.addLink(parentId,newlink); 292 save(inReq, "Added New link"); 293 294 tree.setSelectedLink(newlink.getId()); 296 } 297 public void copyLink(WebPageRequest inReq) throws Exception  298 { 299 inReq.getUser().put("oe.edit.draftmode", "true"); 300 301 LinkTree tree = getLinkTree(inReq); 302 Link link = tree.getSelectedLink(); 303 if ( link == null) 304 { 305 log.error("No link selected"); 306 return; 307 } 308 link = link.getParentLink(); 309 310 String name = inReq.getRequestParameter("linktext"); 311 String url = inReq.getRequestParameter("url"); 312 String userdata = inReq.getRequestParameter("userdata"); 313 314 Link newlink = new Link(); newlink.setUserData(userdata); 316 String newLinkId = inReq.getRequestParameter("newlinkid"); 317 if ( tree.getLink(newLinkId) != null ) 318 { 319 newlink.setId(tree.nextId()); 320 } 321 else 322 { 323 newlink.setId(newLinkId); 324 } 325 newlink.setPath(url); 326 newlink.setText(name); 327 328 tree.addLink(link.getId(),newlink); 329 save(inReq,"Copy link"); 330 331 tree.setSelectedLink(newlink.getId()); 333 334 } 335 336 public void selectLink(WebPageRequest inReq) throws Exception  337 { 338 String linkId = inReq.getRequestParameter("linkid"); 339 if( linkId != null) 340 { 341 inReq.getUser().put("oe.edit.draftmode", "true"); 342 getLinkTree(inReq).setSelectedLink(linkId); 343 } 344 } 345 346 public void removeLink(WebPageRequest inReq) throws Exception  347 { 348 inReq.getUser().put("oe.edit.draftmode", "true"); 349 350 Link link = getLinkTree(inReq).getSelectedLink(); 351 getLinkTree(inReq).removeLink(link); 352 save(inReq, "Removed Link"); 353 } 354 public void moveUp(WebPageRequest inReq) throws Exception  355 { 356 inReq.getUser().put("oe.edit.draftmode", "true"); 357 358 Link link = getLinkTree(inReq).getSelectedLink(); 359 getLinkTree(inReq).moveUp(link); 360 save(inReq,"Moved up"); 361 } 362 public void moveDown(WebPageRequest inReq) throws Exception  363 { 364 inReq.getUser().put("oe.edit.draftmode", "true"); 365 366 Link link = getLinkTree(inReq).getSelectedLink(); 367 getLinkTree(inReq).moveDown(link); 368 save(inReq,"Moved down"); 369 } 370 public void moveRight(WebPageRequest inReq) throws Exception  371 { 372 inReq.getUser().put("oe.edit.draftmode", "true"); 373 374 Link link = getLinkTree(inReq).getSelectedLink(); 375 getLinkTree(inReq).moveRight(link); 376 save(inReq,"Moved Right"); 377 } 378 public void moveLeft(WebPageRequest inReq) throws Exception  379 { 380 inReq.getUser().put("oe.edit.draftmode", "true"); 381 382 Link link = getLinkTree(inReq).getSelectedLink(); 383 getLinkTree(inReq).moveLeft(link); 384 save(inReq,"Moved left"); 385 } 386 391 public void checkLinksRedirect(WebPageRequest inReq) throws OpenEditException 392 { 393 if ( !inReq.getContentPage().isHtml() ) 394 { 395 return; 396 } 397 LinkTree tree = loadLinks(inReq); 398 if ( tree != null) 399 { 400 String redirect = tree.findRedirect( inReq.getPath() ); 402 if ( redirect != null) 403 { 404 if(redirect.toLowerCase().startsWith("http")) 405 { 406 inReq.redirectPermanently(redirect); 407 } 408 else 409 { 410 PageManager pageManager = getPageManager(); 411 412 Page redirectPage = pageManager.getPage(redirect); 413 if (redirectPage.exists()) 414 { 415 inReq.redirectPermanently(redirect); 416 } 417 418 } 419 } 420 421 } 422 } 423 public void pageAdded(Page inPage) 424 { 425 setForceReload(true); 426 } 427 public void pageModified(Page inPage) 428 { 429 setForceReload(true); 430 } 431 public void pageRemoved(Page inPage) 432 { 433 setForceReload(true); 434 } 435 public void pageRequested(Page inPage) 436 { 437 } 438 public boolean isForceReload() 439 { 440 return fieldForceReload; 441 } 442 public void setForceReload(boolean inForceReload) 443 { 444 fieldForceReload = inForceReload; 445 } 446 447 public WebTree getWebTree( WebPageRequest inRequest ) throws OpenEditException 448 { 449 String name = findValue("tree-name",inRequest); 450 451 String treeid = inRequest.getRequestParameter("treeid"); 452 if( treeid == null) 453 { 454 treeid = name + inRequest.getUserName(); 455 } 456 WebTree webTree = (WebTree) inRequest.getSessionValue( treeid ); 457 458 LinkTree linktree = getLinkTree(inRequest); 459 if ( webTree == null ) 460 { 461 log.info("No web link tree in Session, creating new " + name); 462 463 webTree = new WebTree(); 464 webTree.setName(name); 465 webTree.setId( treeid); 466 WebTreeNodeTreeRenderer renderer = new WebTreeNodeTreeRenderer( webTree ); 467 renderer.setFoldersLinked( true ); 468 String prefix = findValue( "url-prefix", inRequest ); 469 prefix = inRequest.getPage().getPageSettings().replaceProperty(prefix); 470 renderer.setUrlPrefix(prefix ); 471 String postfix = findValue( "url-postfix", inRequest ); 472 renderer.setUrlPostfix(postfix ); 473 webTree.setTreeRenderer(renderer); 474 String home = (String ) inRequest.getPageValue( "home" ); 475 renderer.setHome(home); 476 477 483 LinkTreeModel model = new LinkTreeModel(linktree); 484 webTree.setModel(model); 485 renderer.expandAll(model.getRoot()); 486 inRequest.putSessionValue(treeid, webTree); 487 } 488 else 489 { 490 LinkTreeModel model = new LinkTreeModel(linktree); 491 webTree.setModel(model); 492 } 493 494 inRequest.putPageValue(name, webTree); 495 return webTree; 496 } 497 498 499 } 500
| Popular Tags
|