1 28 29 package com.opencms.workplace; 30 31 import org.opencms.file.CmsFile; 32 import org.opencms.file.CmsFolder; 33 import org.opencms.file.CmsObject; 34 import org.opencms.file.CmsPropertyDefinition; 35 import org.opencms.file.CmsResource; 36 import org.opencms.file.types.CmsResourceTypePointer; 37 import org.opencms.i18n.CmsEncoder; 38 import org.opencms.main.CmsException; 39 import org.opencms.workplace.CmsWorkplaceSettings; 40 41 import com.opencms.core.I_CmsSession; 42 import com.opencms.legacy.CmsLegacyException; 43 import com.opencms.legacy.CmsXmlTemplateLoader; 44 import com.opencms.template.A_CmsXmlContent; 45 46 import java.util.ArrayList ; 47 import java.util.Collections ; 48 import java.util.Hashtable ; 49 import java.util.Iterator ; 50 import java.util.List ; 51 import java.util.Vector ; 52 53 import javax.servlet.http.HttpServletRequest ; 54 import javax.servlet.http.HttpSession ; 55 56 64 65 public class CmsNewResourceExternallink extends CmsWorkplaceDefault { 66 67 private static final String C_PARA_KEEP_PROPERTIES = "keepproperties"; 68 private static final String C_PARA_ADD_TO_NAV = "addtonav"; 69 private static final int DEBUG = 0; 70 71 82 83 public byte[] getContent(CmsObject cms, String templateFile, String elementName, 84 Hashtable parameters, String templateSelector) throws CmsException { 85 86 String error = ""; 87 boolean checkurl = true; 88 89 String filename = null; 90 String targetName = null; 91 String foldername = null; 92 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 94 95 CmsXmlWpTemplateFile xmlTemplateDocument = new CmsXmlWpTemplateFile(cms, templateFile); 97 CmsXmlLanguageFile lang = xmlTemplateDocument.getLanguageFile(); 98 99 String initial = (String )parameters.get(CmsWorkplaceDefault.C_PARA_INITIAL); 101 if(initial != null){ 102 session.removeValue(CmsWorkplaceDefault.C_PARA_RESOURCE); 104 session.removeValue(CmsWorkplaceDefault.C_PARA_LINK); 105 session.removeValue(CmsWorkplaceDefault.C_PARA_VIEWFILE); 106 session.removeValue(CmsWorkplaceDefault.C_PARA_NAVPOS); 107 session.removeValue(CmsWorkplaceDefault.C_PARA_NAVTEXT); 108 session.removeValue("lasturl"); 109 } 110 String lastUrl = getLastUrl(cms, parameters); 112 if(lastUrl != null){ 113 session.putValue("lasturl", lastUrl); 114 } 115 filename = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getParameter(CmsWorkplaceDefault.C_PARA_RESOURCE); 117 if(filename != null) { 118 session.putValue(CmsWorkplaceDefault.C_PARA_RESOURCE, filename); 119 } else { 120 filename = (String )session.getValue(CmsWorkplaceDefault.C_PARA_RESOURCE)!=null?(String )session.getValue(CmsWorkplaceDefault.C_PARA_RESOURCE):""; 122 } 123 targetName = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getParameter(CmsWorkplaceDefault.C_PARA_LINK); 124 if(targetName != null) { 125 session.putValue(CmsWorkplaceDefault.C_PARA_LINK, targetName); 126 } else { 127 targetName = (String )session.getValue(CmsWorkplaceDefault.C_PARA_LINK)!=null?(String )session.getValue(CmsWorkplaceDefault.C_PARA_LINK):""; 129 } 130 131 String navtitle = (String )parameters.get(CmsWorkplaceDefault.C_PARA_NAVTEXT); 133 if(navtitle != null) { 134 session.putValue(CmsWorkplaceDefault.C_PARA_NAVTEXT, navtitle); 135 } else { 136 navtitle = (String )session.getValue(CmsWorkplaceDefault.C_PARA_NAVTEXT)!=null?(String )session.getValue(CmsWorkplaceDefault.C_PARA_NAVTEXT):""; 138 } 139 140 String navpos = (String )parameters.get(CmsWorkplaceDefault.C_PARA_NAVPOS); 141 if(navpos != null) { 142 session.putValue(CmsWorkplaceDefault.C_PARA_NAVPOS, navpos); 143 } else { 144 navpos = (String )session.getValue(CmsWorkplaceDefault.C_PARA_NAVPOS)!=null?(String )session.getValue(CmsWorkplaceDefault.C_PARA_NAVPOS):""; 146 } 147 148 String dummy = (String )parameters.get(CmsNewResourceExternallink.C_PARA_KEEP_PROPERTIES); 149 if (DEBUG>0) System.out.println( "parameter " + CmsNewResourceExternallink.C_PARA_KEEP_PROPERTIES + ": " + dummy ); 150 boolean keepTargetProperties = false; 151 if (dummy!=null) { 152 session.putValue(CmsNewResourceExternallink.C_PARA_KEEP_PROPERTIES, dummy); 153 } 154 else { 155 dummy = (String )session.getValue(CmsNewResourceExternallink.C_PARA_KEEP_PROPERTIES)!=null?(String )session.getValue(CmsNewResourceExternallink.C_PARA_KEEP_PROPERTIES):"true"; 156 } 157 keepTargetProperties = dummy.trim().equalsIgnoreCase("true"); 158 159 dummy = (String )parameters.get(CmsNewResourceExternallink.C_PARA_ADD_TO_NAV); 160 if (DEBUG>0) System.out.println( "parameter " + CmsNewResourceExternallink.C_PARA_ADD_TO_NAV + ": " + dummy ); 161 boolean addToNav = false; 162 if (dummy!=null) { 163 session.putValue(CmsNewResourceExternallink.C_PARA_ADD_TO_NAV, dummy); 164 } 165 else { 166 dummy = (String )session.getValue(CmsNewResourceExternallink.C_PARA_ADD_TO_NAV)!=null?(String )session.getValue(CmsNewResourceExternallink.C_PARA_ADD_TO_NAV):"false"; 167 } 168 addToNav = dummy.trim().equalsIgnoreCase("true"); 169 170 String notChange = (String )parameters.get("newlink"); 171 172 CmsResource linkResource = null; 173 String step = CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getParameter("step"); 174 175 xmlTemplateDocument.setData("LINKNAME", filename); 177 xmlTemplateDocument.setData("LINKVALUE", targetName); 178 xmlTemplateDocument.setData("NAVTITLE", CmsEncoder.escapeHtml(navtitle)); 179 xmlTemplateDocument.setData("KEEPPROPERTIES", keepTargetProperties==true ? "true" : "false" ); 180 xmlTemplateDocument.setData("ADDTONAV", addToNav==true ? "true" : "false" ); 181 182 if(notChange != null && notChange.equals("false") && step == null) { 184 try{ 185 CmsFile currentFile = cms.readFile(filename); 186 String content = new String (currentFile.getContents()); 187 xmlTemplateDocument.setData("LINKNAME", currentFile.getName()); 188 xmlTemplateDocument.setData("LINK", cms.getSitePath(currentFile)); 189 xmlTemplateDocument.setData("LINKVALUE", content); 190 templateSelector = "change"; 191 } catch (CmsException e){ 192 error = e.getMessage(); 193 } 194 } 195 196 if(step != null) { 198 if(step.equals("1") || step.equals("2")) { 200 try{ 201 foldername = CmsWorkplaceAction.getCurrentFolder(CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getOriginalRequest()); 206 207 if(foldername == null) { 208 foldername = cms.getSitePath(cms.readFolder("/")); 209 } 210 211 String title = lang.getLanguageValue("explorer.linkto") + " " + targetName; 212 if(notChange != null && notChange.equals("false")) { 214 215 CmsFile editFile = cms.readFile(filename); 217 editFile.setContents(targetName.getBytes()); 218 219 if(step.equals("1")){ 220 } 226 checkurl=true; 227 if(checkurl){ 228 cms.writeFile(editFile); 229 cms.writeProperty(filename, CmsPropertyDefinition.PROPERTY_TITLE, title); 230 } 231 linkResource = editFile; 232 } else { 233 List properties = null; 235 if (title != null) { 236 properties = new ArrayList (); 237 properties.add(new org.opencms.file.CmsProperty(CmsPropertyDefinition.PROPERTY_TITLE, title, null)); 238 } else { 239 properties = Collections.EMPTY_LIST; 240 } 241 242 checkurl=true; 243 244 if (checkurl ) { 245 linkResource = cms.createResource(foldername + filename, CmsResourceTypePointer.getStaticTypeId()); 248 } 249 250 251 } 252 if(addToNav && checkurl) { 254 cms.writeProperty(cms.getSitePath(linkResource), CmsPropertyDefinition.PROPERTY_NAVTEXT, navtitle); 255 if(navpos != null) { 257 updateNavPos(cms, linkResource, navpos); 258 } 259 } 260 261 session.removeValue(CmsWorkplaceDefault.C_PARA_RESOURCE); 263 session.removeValue(CmsWorkplaceDefault.C_PARA_VIEWFILE); 264 session.removeValue(CmsWorkplaceDefault.C_PARA_LINK); 265 session.removeValue(CmsWorkplaceDefault.C_PARA_NAVTEXT); 266 session.removeValue(CmsWorkplaceDefault.C_PARA_NAVPOS); 267 268 } catch (CmsException e){ 270 error = e.getMessage(); 271 } 272 273 if(checkurl && ("".equals(error.trim()))){ 274 try { 275 if(lastUrl != null) { 276 CmsXmlTemplateLoader.getResponse(cms.getRequestContext()).sendRedirect(lastUrl); 277 } else { 278 CmsXmlTemplateLoader.getResponse(cms.getRequestContext()).sendCmsRedirect(getConfigFile(cms).getWorkplaceActionPath() 279 + CmsWorkplaceAction.getExplorerFileUri(CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getOriginalRequest())); 280 } 281 } catch(Exception e) { 282 throw new CmsLegacyException("Redirect fails :" + getConfigFile(cms).getWorkplaceActionPath() 283 + CmsWorkplaceAction.getExplorerFileUri(CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getOriginalRequest()), e); 284 } 285 return null; 286 } 287 } 288 } else { 289 session.removeValue(CmsWorkplaceDefault.C_PARA_RESOURCE); 290 session.removeValue(CmsWorkplaceDefault.C_PARA_VIEWFILE); 291 session.removeValue(CmsWorkplaceDefault.C_PARA_LINK); 292 session.removeValue(CmsWorkplaceDefault.C_PARA_NAVTEXT); 293 } 294 if(lastUrl == null) { 296 lastUrl = CmsWorkplaceAction.getExplorerFileUri(CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getOriginalRequest()); 297 } 298 xmlTemplateDocument.setData("lasturl", lastUrl); 299 if(!checkurl){ 301 xmlTemplateDocument.setData("folder", foldername); 302 xmlTemplateDocument.setData("newlink", notChange); 303 session.putValue(CmsWorkplaceDefault.C_PARA_LINK, targetName); 304 session.putValue(CmsWorkplaceDefault.C_PARA_RESOURCE, filename); 305 session.putValue(CmsWorkplaceDefault.C_PARA_NAVTEXT, navtitle); 306 session.putValue(CmsWorkplaceDefault.C_PARA_NAVPOS, navpos); 307 templateSelector = "errorcheckurl"; 308 } 309 if(!"".equals(error.trim())){ 310 xmlTemplateDocument.setData("errordetails", error); 311 session.putValue(CmsWorkplaceDefault.C_PARA_LINK, targetName); 312 session.putValue(CmsWorkplaceDefault.C_PARA_RESOURCE, filename); 313 session.putValue(CmsWorkplaceDefault.C_PARA_NAVTEXT, navtitle); 314 session.putValue(CmsWorkplaceDefault.C_PARA_NAVPOS, navpos); 315 templateSelector = "error"; 316 } 317 return startProcessing(cms, xmlTemplateDocument, elementName, parameters, templateSelector); 319 } 320 321 331 332 public boolean isCacheable(CmsObject cms, String templateFile, String elementName, 333 Hashtable parameters, String templateSelector) { 334 return false; 335 } 336 337 347 public Object getCurrentPathUri(CmsObject cms, String tagcontent, A_CmsXmlContent doc, Object userObject) throws CmsException { 348 HttpSession session = ((HttpServletRequest )CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getOriginalRequest()).getSession(); 349 CmsWorkplaceSettings settings = (CmsWorkplaceSettings)session.getAttribute("__CmsWorkplace.WORKPLACE_SETTINGS"); 350 String path = settings.getExplorerResource(); 351 if (path == null) { 352 path = "/"; 353 } 354 if (path.indexOf("/") != -1) { 355 path = path.substring(0, path.lastIndexOf("/") + 1); 356 } 357 return path.getBytes(); 358 } 359 360 369 370 public String setValue(CmsObject cms, CmsXmlLanguageFile lang, Hashtable parameters) throws CmsException { 371 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 372 373 String filename = (String )session.getValue(CmsWorkplaceDefault.C_PARA_RESOURCE); 375 if(filename == null) { 376 filename = ""; 377 } 378 return filename; 379 } 380 381 391 public Integer getNavPos(CmsObject cms, CmsXmlLanguageFile lang, Vector names, 392 Vector values, Hashtable parameters) throws CmsException { 393 int retValue = -1; 394 I_CmsSession session = CmsXmlTemplateLoader.getSession(cms.getRequestContext(), true); 395 String preselect = (String )session.getValue(CmsWorkplaceDefault.C_PARA_NAVPOS); 396 Hashtable storage = getNavData(cms); 398 if(storage.size() > 0) { 399 String [] nicenames = (String [])storage.get("NICENAMES"); 400 int count = ((Integer )storage.get("COUNT")).intValue(); 401 402 for(int i = 0;i <= count;i++) { 404 names.addElement(CmsEncoder.escapeHtml(nicenames[i])); 405 values.addElement(CmsEncoder.escapeHtml(nicenames[i])); 406 if ((preselect != null) && (preselect.equals(nicenames[i]))){ 407 retValue = values.size() -1; 408 } 409 } 410 } 411 else { 412 values = new Vector (); 413 } 414 if (retValue == -1){ 415 return new Integer (values.size() - 1); 417 }else{ 418 return new Integer (retValue); 419 } 420 } 421 422 431 private Hashtable getNavData(CmsObject cms) throws CmsException { 432 CmsXmlLanguageFile lang = new CmsXmlLanguageFile(cms); 434 String [] filenames; 435 String [] nicenames; 436 String [] positions; 437 Hashtable storage = new Hashtable (); 438 CmsFolder folder = null; 439 CmsFile file = null; 440 String nicename = null; 441 String currentFilelist = null; 442 int count = 1; 443 float max = 0; 444 445 currentFilelist = CmsWorkplaceAction.getCurrentFolder(CmsXmlTemplateLoader.getRequest(cms.getRequestContext()).getOriginalRequest()); 448 if(currentFilelist == null) { 449 currentFilelist = cms.getSitePath(cms.readFolder("/")); 450 } 451 452 List files = cms.getFilesInFolder(currentFilelist); 454 List folders = cms.getSubFolders(currentFilelist); 455 456 Vector filefolders = new Vector (); 458 Iterator en = folders.iterator(); 459 while(en.hasNext()) { 460 folder = (CmsFolder)en.next(); 461 filefolders.addElement(folder); 462 } 463 en = files.iterator(); 464 while(en.hasNext()) { 465 file = (CmsFile)en.next(); 466 filefolders.addElement(file); 467 } 468 if(filefolders.size() > 0) { 469 470 filenames = new String [filefolders.size() + 2]; 475 nicenames = new String [filefolders.size() + 2]; 476 positions = new String [filefolders.size() + 2]; 477 478 en = filefolders.iterator(); 481 while(en.hasNext()) { 482 CmsResource res = (CmsResource)en.next(); 483 484 if(res.getState() != CmsResource.STATE_DELETED) { 486 String navpos = cms.readProperty(cms.getSitePath(res), CmsPropertyDefinition.PROPERTY_NAVPOS); 487 488 if(navpos != null) { 490 nicename = cms.readProperty(cms.getSitePath(res), CmsPropertyDefinition.PROPERTY_NAVTEXT); 491 if(nicename == null) { 492 nicename = res.getName(); 493 } 494 495 filenames[count] = cms.getSitePath(res); 497 nicenames[count] = nicename; 498 positions[count] = navpos; 499 if(new Float (navpos).floatValue() > max) { 500 max = new Float (navpos).floatValue(); 501 } 502 count++; 503 } 504 } 505 } 506 } 507 else { 508 filenames = new String [2]; 509 nicenames = new String [2]; 510 positions = new String [2]; 511 } 512 513 filenames[0] = "FIRSTENTRY"; 515 nicenames[0] = lang.getLanguageValue("input.firstelement"); 516 positions[0] = "0"; 517 filenames[count] = "LASTENTRY"; 518 nicenames[count] = lang.getLanguageValue("input.lastelement"); 519 positions[count] = new Float (max + 1).toString(); 520 521 sort(cms, filenames, nicenames, positions, count); 523 524 storage.put("FILENAMES", filenames); 526 storage.put("NICENAMES", nicenames); 527 storage.put("POSITIONS", positions); 528 storage.put("COUNT", new Integer (count)); 529 return storage; 530 } 531 532 540 private void sort(CmsObject cms, String [] filenames, String [] nicenames, String [] positions, int max) { 541 542 for(int i = max - 1;i > 1;i--) { 546 for(int j = 1;j < i;j++) { 547 float a = new Float (positions[j]).floatValue(); 548 float b = new Float (positions[j + 1]).floatValue(); 549 if(a > b) { 550 String tempfilename = filenames[j]; 551 String tempnicename = nicenames[j]; 552 String tempposition = positions[j]; 553 filenames[j] = filenames[j + 1]; 554 nicenames[j] = nicenames[j + 1]; 555 positions[j] = positions[j + 1]; 556 filenames[j + 1] = tempfilename; 557 nicenames[j + 1] = tempnicename; 558 positions[j + 1] = tempposition; 559 } 560 } 561 } 562 } 563 564 570 private void updateNavPos(CmsObject cms, CmsResource newfile, String newpos) throws CmsException { 571 float newPos = 0; 572 573 Hashtable storage = getNavData(cms); 575 if(storage.size() > 0) { 576 String [] nicenames = (String [])storage.get("NICENAMES"); 577 String [] positions = (String [])storage.get("POSITIONS"); 578 int count = ((Integer )storage.get("COUNT")).intValue(); 579 580 int pos = 0; 582 for(int i = 0;i < nicenames.length;i++) { 583 if(newpos.equals(nicenames[i])) { 584 pos = i; 585 } 586 } 587 if(pos < count) { 588 float low = new Float (positions[pos]).floatValue(); 589 float high = new Float (positions[pos + 1]).floatValue(); 590 newPos = (high + low) / 2; 591 } 592 else { 593 newPos = new Float (positions[pos]).floatValue() + 1; 594 } 595 } 596 else { 597 newPos = 1; 598 } 599 cms.writeProperty(cms.getSitePath(newfile), CmsPropertyDefinition.PROPERTY_NAVPOS, new Float (newPos).toString()); 600 } 601 } 602
| Popular Tags
|