| 1 28 29 30 package com.opencms.workplace; 31 32 import org.opencms.file.CmsFile; 33 import org.opencms.file.CmsObject; 34 import org.opencms.file.CmsPropertyDefinition; 35 import org.opencms.file.CmsResource; 36 import org.opencms.i18n.CmsEncoder; 37 import org.opencms.main.CmsException; 38 import org.opencms.main.CmsLog; 39 40 import com.opencms.core.I_CmsSession; 41 import com.opencms.legacy.CmsXmlTemplateLoader; 42 import com.opencms.template.A_CmsXmlContent; 43 44 import java.util.Hashtable ; 45 import java.util.List ; 46 import java.util.Vector ; 47 48 59 60 public class CmsLinkBrowser extends CmsWorkplaceDefault { 61 62 73 74 public byte[] getContent(CmsObject cms, String templateFile, String elementName, Hashtable parameters, String templateSelector) throws CmsException { 75 if(CmsLog.getLog(this).isDebugEnabled() && C_DEBUG) { 76 CmsLog.getLog(this).debug("Getting content of element " + ((elementName==null)?"<root>":elementName)); 77 CmsLog.getLog(this).debug("Template file is: " + templateFile); 78 CmsLog.getLog(this).debug("Selected template section is: " + ((templateSelector==null)?"<default>":templateSelector)); 79 } 80 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 81 CmsXmlWpTemplateFile xmlTemplateDocument = (CmsXmlWpTemplateFile)getOwnTemplateFile(cms, 82 templateFile, elementName, parameters, templateSelector); 83 84 try { 86 cms.readResource(CmsWorkplaceDefault.C_VFS_GALLERY_EXTERNALLINKS); 87 } catch(CmsException e) { 88 xmlTemplateDocument.setData("ERRORDETAILS", CmsException.getStackTraceAsString(e)); 89 templateSelector = "error"; 90 } 91 if(!"error".equals(templateSelector)) { 92 if(parameters.get(CmsWorkplaceDefault.C_PARA_INITIAL) != null) { 93 session.removeValue(CmsWorkplaceDefault.C_PARA_FOLDER); 94 session.removeValue("linkBrowser_for_ext_nav"); 95 } 96 String setOnClick = (String )parameters.get("setonclick"); 97 if(setOnClick != null){ 98 session.putValue("linkBrowser_for_ext_nav", setOnClick); 99 } 100 setOnClick = (String )session.getValue("linkBrowser_for_ext_nav"); 101 String folder = (String )parameters.get(CmsWorkplaceDefault.C_PARA_FOLDER); 102 if(folder != null) { 103 session.putValue(CmsWorkplaceDefault.C_PARA_FOLDER, folder); 104 } 105 folder = (String )session.getValue(CmsWorkplaceDefault.C_PARA_FOLDER); 106 if(folder == null || "".equals(folder)) { 107 List galleries = cms.getSubFolders(CmsWorkplaceDefault.C_VFS_GALLERY_EXTERNALLINKS); 108 if(galleries.size() > 0) { 109 110 folder = cms.getSitePath((CmsResource)galleries.get(0)); 112 session.putValue(CmsWorkplaceDefault.C_PARA_FOLDER, folder); 113 } else { 114 115 templateSelector = "error_no_gallery"; 117 } 118 } 119 if(!"error_no_gallery".equals(templateSelector)) { 120 String pageText = (String )parameters.get(CmsWorkplaceDefault.C_PARA_PAGE); 121 String filter = (String )parameters.get(CmsWorkplaceDefault.C_PARA_FILTER); 122 123 if(pageText == null || "".equals(pageText)) { 125 pageText = "1"; 126 parameters.put(CmsWorkplaceDefault.C_PARA_PAGE, pageText); 127 } 128 129 if(filter == null) { 131 filter = ""; 132 parameters.put(CmsWorkplaceDefault.C_PARA_FILTER, filter); 133 } 134 135 Vector filteredLinks = getFilteredLinkList(cms, folder, filter); 137 int maxpage = ((filteredLinks.size() - 1) / CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES) + 1; 138 139 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_FOLDER, CmsEncoder.escape(folder, 141 cms.getRequestContext().getEncoding())); 142 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_PAGE, pageText); 143 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_FILTER, filter); 144 xmlTemplateDocument.setData(CmsWorkplaceDefault.C_PARA_MAXPAGE, "" + maxpage); 145 if(setOnClick == null || !"true".equals(setOnClick)){ 146 xmlTemplateDocument.setData("setonclick", ""); 147 }else{ 148 xmlTemplateDocument.setData("setonclick", "true"); 149 } 150 parameters.put("_LINKLIST_", filteredLinks); 151 } 152 } 153 154 return startProcessing(cms, xmlTemplateDocument, elementName, parameters, templateSelector); 156 } 157 158 166 167 protected Vector getFilteredLinkList(CmsObject cms, String folder, String filter) throws CmsException { 168 169 List allLinks = cms.getFilesInFolder(folder); 171 172 Vector filteredLinks = new Vector (); 174 for(int i = 0;i < allLinks.size();i++) { 175 CmsFile file = (CmsFile)allLinks.get(i); 176 String filename = file.getName(); 177 String title = cms.readProperty(cms.getSitePath(file), CmsPropertyDefinition.PROPERTY_TITLE); 178 boolean filenameFilter = inFilter(filename, filter); 179 boolean titleFilter = ((title == null) || ("".equals(title))) ? false : inFilter(title, filter); 180 if((filenameFilter || titleFilter)) { 181 filteredLinks.addElement(file); 182 } 183 } 184 return filteredLinks; 185 } 186 187 201 202 public Integer getLinkGalleryNames(CmsObject cms, CmsXmlLanguageFile lang, 203 Vector names, Vector values, Hashtable parameters) throws CmsException { 204 int ret = -1; 205 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 206 207 String chosenFolder = (String )parameters.get(CmsWorkplaceDefault.C_PARA_FOLDER); 209 if(chosenFolder == null) { 210 chosenFolder = (String )session.getValue(CmsWorkplaceDefault.C_PARA_FOLDER); 211 } 212 if(chosenFolder == null) { 213 chosenFolder = ""; 214 } 215 List folders = cms.getSubFolders(CmsWorkplaceDefault.C_VFS_GALLERY_EXTERNALLINKS); 216 int numFolders = folders.size(); 217 for(int i = 0;i < numFolders;i++) { 218 CmsResource currFolder = (CmsResource)folders.get(i); 219 String name = currFolder.getName(); 220 if(chosenFolder.equals(cms.getSitePath(currFolder))) { 221 ret = i; 222 } 223 values.addElement(cms.getSitePath(currFolder)); 224 names.addElement(name); 225 } 226 return new Integer (ret); 227 } 228 229 235 236 private boolean inFilter(String name, String filter) { 237 String compareName = name.toLowerCase(); 238 String compareFilter = filter.toLowerCase(); 239 if("".equals(compareFilter) || (compareName.indexOf(compareFilter) != -1)) { 240 return true; 241 } 242 else { 243 return false; 244 } 245 } 246 247 257 258 public boolean isCacheable(CmsObject cms, String templateFile, String elementName, 259 Hashtable parameters, String templateSelector) { 260 return false; 261 } 262 263 279 280 public Object linkList(CmsObject cms, String tagcontent, A_CmsXmlContent doc, 281 Object userObj) throws CmsException { 282 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 283 Hashtable parameters = (Hashtable )userObj; 284 CmsXmlWpTemplateFile xmlTemplateDocument = (CmsXmlWpTemplateFile)doc; 285 StringBuffer result = new StringBuffer (); 286 String pageText = (String )parameters.get(CmsWorkplaceDefault.C_PARA_PAGE); 287 288 Vector filteredLinks = (Vector )parameters.get("_LINKLIST_"); 290 int numLinks = filteredLinks.size(); 291 292 int page = new Integer (pageText).intValue(); 294 int from = (page - 1) * CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES; 295 int to = ((from + CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES) > numLinks) ? numLinks : (from + CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES); 296 String folder = (String )parameters.get(CmsWorkplaceDefault.C_PARA_FOLDER); 297 if(folder == null) { 298 folder = (String )session.getValue(CmsWorkplaceDefault.C_PARA_FOLDER); 299 } 300 if(folder == null || "".equals(folder)) { 301 folder = CmsWorkplaceDefault.C_VFS_GALLERY_EXTERNALLINKS; 302 parameters.put(CmsWorkplaceDefault.C_PARA_FOLDER, folder); 303 } 304 305 String linkUrl = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getServletUrl() + folder; 306 307 for(int i = from;i < to;i++) { 309 CmsFile file = cms.readFile(cms.getSitePath((CmsFile)filteredLinks.elementAt(i))); 310 String filename = file.getName(); 311 String title = cms.readProperty(cms.getSitePath(file), CmsPropertyDefinition.PROPERTY_TITLE); 312 313 int dotIndex = filename.lastIndexOf("."); 316 if(title == null) { 317 if(dotIndex > 0) { 318 title = filename.substring(0, dotIndex); 319 } 320 else { 321 title = filename; 322 } 323 } 324 325 xmlTemplateDocument.setData("linksource", linkUrl + file.getName()); 327 xmlTemplateDocument.setData("filename", cms.getSitePath(file)); 328 xmlTemplateDocument.setData("title", title); 329 xmlTemplateDocument.setData("linktext", filename); 330 xmlTemplateDocument.setData("url", new String (file.getContents())); 331 332 String paraSetOnClick = (String )session.getValue("linkBrowser_for_ext_nav"); 334 String setOnClick = ""; 335 if ("true".equals(paraSetOnClick)){ 336 setOnClick = xmlTemplateDocument.getProcessedDataValue("clickentry"); 337 } 338 xmlTemplateDocument.setData("toclickornot", setOnClick); 339 result.append(xmlTemplateDocument.getProcessedDataValue("linklistentry", this, userObj)); 340 } 341 return result.toString(); 342 } 343 344 357 358 public Boolean showBackButton(CmsObject cms, CmsXmlLanguageFile lang, Hashtable parameters) { 359 360 String pageText = (String )parameters.get(CmsWorkplaceDefault.C_PARA_PAGE); 362 int page = new Integer (pageText).intValue(); 363 return new Boolean (page > 1); 364 } 365 366 379 380 public Boolean showNextButton(CmsObject cms, CmsXmlLanguageFile lang, Hashtable parameters) { 381 382 String pageText = (String )parameters.get(CmsWorkplaceDefault.C_PARA_PAGE); 384 int page = new Integer (pageText).intValue(); 385 386 Vector filteredLinks = (Vector )parameters.get("_LINKLIST_"); 388 int numLinks = filteredLinks.size(); 389 390 int maxpage = ((numLinks - 1) / CmsWorkplaceDefault.C_PICBROWSER_MAXIMAGES) + 1; 392 return new Boolean (page < maxpage); 393 } 394 } 395 | Popular Tags |