1 28 29 30 package com.opencms.workplace; 31 32 import org.opencms.file.CmsFile; 33 import org.opencms.file.CmsFolder; 34 import org.opencms.file.CmsObject; 35 import org.opencms.file.CmsResource; 36 import org.opencms.file.types.I_CmsResourceType; 37 import org.opencms.i18n.CmsEncoder; 38 import org.opencms.main.CmsException; 39 import org.opencms.main.OpenCms; 40 import org.opencms.security.CmsPermissionSet; 41 import org.opencms.workplace.CmsWorkplace; 42 43 import com.opencms.core.I_CmsSession; 44 import com.opencms.legacy.CmsXmlTemplateLoader; 45 import com.opencms.template.A_CmsXmlContent; 46 47 import java.util.ArrayList ; 48 import java.util.Enumeration ; 49 import java.util.Hashtable ; 50 import java.util.List ; 51 import java.util.Vector ; 52 53 61 62 public class CmsFolderTree extends CmsWorkplaceDefault { 63 64 65 66 private static final String C_TREELINK = "TREELINK"; 67 68 69 70 private static final String C_TREESTYLE = "TREESTYLE"; 71 72 73 74 private static final String C_TREETAB = "TREETAB"; 75 76 77 78 private static final String C_TREEENTRY = "TREEENTRY"; 79 80 81 82 private static final String C_TREEVAR = "TREEVAR"; 83 84 85 86 private static final String C_TREEFOLDER = "TREEFOLDER"; 87 88 89 90 private static final String C_TREESWITCH = "TREESWITCH"; 91 92 93 94 private static final String C_TREELINE = "TREELINE"; 95 96 97 98 private static final String C_TREELINEDISABLED = "TREELINEDISABLED"; 99 100 101 102 private static final String C_TREEIMG_EMPTY0 = "TREEIMG_EMPTY0"; 103 104 105 106 private static final String C_TREEIMG_EMPTY = "TREEIMG_EMPTY"; 107 108 109 110 private static final String C_TREEIMG_FOLDEROPEN = "TREEIMG_FOLDEROPEN"; 111 112 113 114 private static final String C_TREEIMG_FOLDERCLOSE = "TREEIMG_FOLDERCLOSE"; 115 116 117 118 private static final String C_TREEIMG_MEND = "TREEIMG_MEND"; 119 120 121 122 private static final String C_TREEIMG_PEND = "TREEIMG_PEND"; 123 124 125 126 private static final String C_TREEIMG_END = "TREEIMG_END"; 127 128 129 130 private static final String C_TREEIMG_MCROSS = "TREEIMG_MCROSS"; 131 132 133 134 private static final String C_TREEIMG_PCROSS = "TREEIMG_PCROSS"; 135 136 137 138 private static final String C_TREEIMG_CROSS = "TREEIMG_CROSS"; 139 140 141 142 private static final String C_TREEIMG_VERT = "TREEIMG_VERT"; 143 144 145 146 private static final String C_FILE_INPROJECT = "treefolder"; 147 148 149 150 private static final String C_FILE_NOTINPROJECT = "treefoldernip"; 151 152 153 154 private static final String C_TREELIST = "TREELIST"; 155 156 157 158 private static final String C_FILELIST = "FILELIST"; 159 160 161 162 private Hashtable m_iconCache = new Hashtable (); 163 164 171 172 private boolean checkAccess(CmsObject cms, CmsResource res) throws CmsException { 173 if(res.getState() == CmsResource.STATE_DELETED){ 175 return false; 176 } 177 178 return cms.hasPermissions(res, CmsPermissionSet.ACCESS_VIEW); 179 } 180 181 188 189 private boolean checkWriteable(CmsObject cms, CmsResource res) throws CmsException { 190 return cms.hasPermissions(res, CmsPermissionSet.ACCESS_WRITE); 191 } 192 193 204 205 public byte[] getContent(CmsObject cms, String templateFile, String elementName, 206 Hashtable parameters, String templateSelector) throws CmsException { 207 CmsXmlWpTemplateFile xmlTemplateDocument = new CmsXmlWpTemplateFile(cms, templateFile); 208 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 209 210 String formname = (String )parameters.get(CmsWorkplaceDefault.C_PARA_FORMNAME); 212 if(formname != null) { 213 session.putValue(CmsWorkplaceDefault.C_PARA_FORMNAME, formname); 214 } 215 formname = (String )session.getValue(CmsWorkplaceDefault.C_PARA_FORMNAME); 216 217 String varname = (String )parameters.get(CmsWorkplaceDefault.C_PARA_VARIABLE); 219 if(varname != null) { 220 session.putValue(CmsWorkplaceDefault.C_PARA_VARIABLE, varname); 221 } 222 varname = (String )session.getValue(CmsWorkplaceDefault.C_PARA_VARIABLE); 223 224 String files = (String )parameters.get(CmsWorkplaceDefault.C_PARA_VIEWFILE); 226 if(files != null) { 227 if(files.equals("yes")) { 228 session.putValue(CmsWorkplaceDefault.C_PARA_VIEWFILE, files); 229 } 230 else { 231 session.removeValue(CmsWorkplaceDefault.C_PARA_VIEWFILE); 232 } 233 } 234 String offselect = (String )parameters.get("onlineselect"); 236 if(offselect != null){ 237 if ("yes".equals(offselect)){ 238 session.putValue("onlineselect_in_foldertree", offselect); 239 }else{ 240 session.removeValue("onlineselect_in_foldertree"); 241 } 242 } 243 244 xmlTemplateDocument.setData("FORMNAME", formname); 246 xmlTemplateDocument.setData("VARIABLE", varname); 247 248 return startProcessing(cms, xmlTemplateDocument, "", parameters, "template"); 250 } 251 252 262 private String getIcon(CmsObject cms, I_CmsResourceType type, CmsXmlWpConfigFile config) throws CmsException { 263 String icon = (String )m_iconCache.get(type.getTypeName()); 265 if(icon == null) { 267 String filename = CmsWorkplaceDefault.C_ICON_PREFIX + type.getTypeName().toLowerCase() + CmsWorkplaceDefault.C_ICON_EXTENSION; 268 try { 269 cms.readResource(CmsWorkplace.VFS_PATH_RESOURCES + filename); 271 icon = filename; 273 m_iconCache.put(type.getTypeName(), icon); 274 } 275 catch(CmsException e) { 276 icon = CmsWorkplaceDefault.C_ICON_DEFAULT; 278 m_iconCache.put(type.getTypeName(), icon); 279 } 280 } 281 return icon; 282 } 283 284 288 289 public Object getTree(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObj) throws CmsException { 290 291 StringBuffer output = new StringBuffer (); 292 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 293 CmsXmlWpConfigFile configFile = this.getConfigFile(cms); 294 String filelist = null; 295 String currentFolder; 296 String currentFilelist; 297 String rootFolder; 298 String files = null; 299 boolean displayFiles = false; 300 boolean enableOnlineFiles = false; 301 302 currentFolder = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getParameter(CmsWorkplaceDefault.C_PARA_FOLDERTREE); 304 305 if (currentFolder.trim().equalsIgnoreCase("/")) { 306 currentFolder = (String )session.getValue(CmsWorkplaceDefault.C_PARA_FOLDERTREE); 307 308 if (currentFolder==null) { 309 currentFolder = "/"; 310 session.putValue(CmsWorkplaceDefault.C_PARA_FOLDERTREE, currentFolder); 311 } 312 } 313 else if (currentFolder!=null) { 314 session.putValue(CmsWorkplaceDefault.C_PARA_FOLDERTREE, currentFolder); 315 } 316 317 currentFilelist = CmsWorkplaceAction.getCurrentFolder(CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getOriginalRequest()); 320 if(currentFilelist == null) { 321 currentFilelist = cms.getSitePath(cms.readFolder("/")); 322 } 323 324 files = (String )session.getValue(CmsWorkplaceDefault.C_PARA_VIEWFILE); 326 if(files != null) { 327 displayFiles = true; 328 } 329 String offselect = (String )session.getValue("onlineselect_in_foldertree"); 331 if(offselect != null){ 332 enableOnlineFiles = true; 333 } 334 335 rootFolder = cms.getSitePath(cms.readFolder("/")); 337 338 CmsXmlWpTemplateFile template = (CmsXmlWpTemplateFile)doc; 340 if(filelist != null) { 341 template.setData("PREVIOUS", filelist); 342 } 343 else { 344 template.setData("PREVIOUS", currentFilelist); 345 } 346 String tab = template.getProcessedDataValue(C_TREEIMG_EMPTY0, this); 347 showTree(cms, rootFolder, currentFolder, currentFilelist, template, output, tab, 348 displayFiles, enableOnlineFiles, configFile); 349 return output.toString(); 350 } 351 352 362 363 public boolean isCacheable(CmsObject cms, String templateFile, String elementName, 364 Hashtable parameters, String templateSelector) { 365 return false; 366 } 367 368 379 380 private void showTree(CmsObject cms, String curfolder, String endfolder, String filelist, 381 CmsXmlWpTemplateFile template, StringBuffer output, String tab, 382 boolean displayFiles, boolean offselect, CmsXmlWpConfigFile configFile) throws CmsException { 383 String newtab = new String (); 384 String folderimg = new String (); 385 String treeswitch = new String (); 386 CmsResource lastFolder = null; 387 Vector subfolders = new Vector (); 388 Vector list = new Vector (); 389 List untestedSubfolders = (List ) new ArrayList (); 390 List untestedSubfiles = (List ) new ArrayList (); 391 List untestedlist = cms.getSubFolders(curfolder); 392 393 for(int i = 0;i < untestedlist.size();i++) { 395 CmsFolder subfolder = (CmsFolder)untestedlist.get(i); 396 if(checkAccess(cms, subfolder)) { 397 list.addElement(subfolder); 398 } 399 } 400 401 if(displayFiles) { 403 List untestedfileslist = cms.getFilesInFolder(curfolder); 404 for(int i = 0;i < untestedfileslist.size();i++) { 405 CmsFile file = (CmsFile)untestedfileslist.get(i); 406 if(checkAccess(cms, file)) { 407 list.addElement(file); 408 } 409 } 410 } 411 Enumeration en = list.elements(); 412 if(list.size() > 0) { 413 lastFolder = (CmsResource)list.lastElement(); 414 } 415 else { 416 lastFolder = null; 417 } 418 419 while(en.hasMoreElements()) { 421 CmsResource res = (CmsResource)en.nextElement(); 422 423 if(checkAccess(cms, res)) { 425 subfolders = new Vector (); 426 if(res.isFolder()) { 427 untestedSubfolders = cms.getSubFolders(cms.getSitePath(res)); 428 429 for(int i = 0;i < untestedSubfolders.size();i++) { 431 CmsFolder subfolder = (CmsFolder)untestedSubfolders.get(i); 432 if(checkAccess(cms, subfolder)) { 433 subfolders.addElement(subfolder); 434 } 435 } 436 437 if(displayFiles) { 439 untestedSubfiles = cms.getFilesInFolder(cms.getSitePath(res)); 440 for(int i = 0;i < untestedSubfiles.size();i++) { 441 CmsFile subfile = (CmsFile)untestedSubfiles.get(i); 442 if(checkAccess(cms, subfile)) { 443 subfolders.addElement(subfile); 444 } 445 } 446 } 447 } 448 449 if(res.isFolder()) { 451 if(cms.getSitePath(res).equals(filelist)) { 452 folderimg = template.getProcessedDataValue(C_TREEIMG_FOLDEROPEN, this); 453 } 454 else { 455 folderimg = template.getProcessedDataValue(C_TREEIMG_FOLDERCLOSE, this); 456 } 457 } 458 else { 459 I_CmsResourceType type = OpenCms.getResourceManager().getResourceType(res.getTypeId()); 460 String icon = getIcon(cms, type, configFile); 461 template.setData("icon", configFile.getWpPicturePath() + icon); 462 folderimg = template.getProcessedDataValue("TREEIMG_FILE", this); 463 } 464 465 467 if(cms.getSitePath(res).equals(cms.getSitePath(lastFolder))) { 469 470 if(subfolders.size() > 0) { 472 473 if(endfolder.startsWith(cms.getSitePath(res))) { 475 template.setData(C_TREELINK, CmsWorkplaceDefault.C_WP_FOLDER_TREE + "?" + CmsWorkplaceDefault.C_PARA_FOLDERTREE 476 + "=" + CmsEncoder.escape(curfolder, 477 cms.getRequestContext().getEncoding())); 478 treeswitch = template.getProcessedDataValue(C_TREEIMG_MEND, this); 479 } 480 else { 481 template.setData(C_TREELINK, CmsWorkplaceDefault.C_WP_FOLDER_TREE + "?" + CmsWorkplaceDefault.C_PARA_FOLDERTREE 482 + "=" + CmsEncoder.escape(cms.getSitePath(res), 483 cms.getRequestContext().getEncoding())); 484 treeswitch = template.getProcessedDataValue(C_TREEIMG_PEND, this); 485 } 486 } 487 else { 488 treeswitch = template.getProcessedDataValue(C_TREEIMG_END, this); 489 } 490 } 491 else { 492 if(subfolders.size() > 0) { 495 496 if(endfolder.startsWith(cms.getSitePath(res))) { 498 template.setData(C_TREELINK, CmsWorkplaceDefault.C_WP_FOLDER_TREE + "?" + CmsWorkplaceDefault.C_PARA_FOLDERTREE 499 + "=" + CmsEncoder.escape(curfolder, 500 cms.getRequestContext().getEncoding())); 501 treeswitch = template.getProcessedDataValue(C_TREEIMG_MCROSS, this); 502 } 503 else { 504 template.setData(C_TREELINK, CmsWorkplaceDefault.C_WP_FOLDER_TREE + "?" + CmsWorkplaceDefault.C_PARA_FOLDERTREE 505 + "=" + CmsEncoder.escape(cms.getSitePath(res), 506 cms.getRequestContext().getEncoding())); 507 treeswitch = template.getProcessedDataValue(C_TREEIMG_PCROSS, this); 508 } 509 } 510 else { 511 treeswitch = template.getProcessedDataValue(C_TREEIMG_CROSS, this); 512 } 513 } 514 if(cms.getSitePath(res).equals(cms.getSitePath(lastFolder))) { 515 newtab = tab + template.getProcessedDataValue(C_TREEIMG_EMPTY, this); 516 } 517 else { 518 newtab = tab + template.getProcessedDataValue(C_TREEIMG_VERT, this); 519 } 520 521 if (cms.isInsideCurrentProject(cms.getSitePath(res))) { 524 template.setData(C_TREESTYLE, C_FILE_INPROJECT); 525 } 526 else { 527 template.setData(C_TREESTYLE, C_FILE_NOTINPROJECT); 528 } 529 530 template.setData(C_FILELIST, CmsWorkplaceAction.getExplorerFileUri(CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getOriginalRequest()) + "?" + CmsWorkplaceDefault.C_PARA_FILELIST 532 + "=" + cms.getSitePath(res)); 533 template.setData(C_TREELIST, CmsWorkplaceDefault.C_WP_EXPLORER_TREE + "?" + CmsWorkplaceDefault.C_PARA_FILELIST 534 + "=" + cms.getSitePath(res)); 535 template.setData(C_TREEENTRY, res.getName()); 536 template.setData(C_TREEVAR, cms.getSitePath(res)); 537 template.setData(C_TREETAB, tab); 538 template.setData(C_TREEFOLDER, folderimg); 539 template.setData(C_TREESWITCH, treeswitch); 540 541 543 if(checkWriteable(cms, res) || offselect) { 548 template.setData(C_TREESTYLE, C_FILE_INPROJECT); 549 output.append(template.getProcessedDataValue(C_TREELINE, this)); 550 } else { 551 template.setData(C_TREESTYLE, C_FILE_NOTINPROJECT); 552 output.append(template.getProcessedDataValue(C_TREELINEDISABLED, this)); 553 } 554 555 if((endfolder.startsWith(cms.getSitePath(res))) && (endfolder.endsWith("/"))) { 557 showTree(cms, cms.getSitePath(res), endfolder, filelist, template, 558 output, newtab, displayFiles, offselect, configFile); 559 } 560 } 561 } 562 } 563 } 564
| Popular Tags
|