1 23 24 package org.infoglue.deliver.controllers.kernel.impl.simple; 25 26 import org.apache.log4j.Logger; 27 import org.exolab.castor.jdo.Database; 28 import org.infoglue.cms.controllers.kernel.impl.simple.SiteNodeController; 29 import org.infoglue.cms.entities.structure.SiteNode; 30 import org.infoglue.cms.exception.SystemException; 31 import org.infoglue.cms.security.InfoGluePrincipal; 32 import org.infoglue.cms.util.CmsPropertyHandler; 33 import org.infoglue.deliver.applications.databeans.DeliveryContext; 34 import org.infoglue.deliver.applications.filters.FilterConstants; 35 import org.infoglue.deliver.controllers.kernel.URLComposer; 36 import org.infoglue.deliver.invokers.PageInvoker; 37 38 import webwork.action.ActionContext; 39 40 47 public class BasicURLComposer extends URLComposer 48 { 49 private final static Logger logger = Logger.getLogger(BasicURLComposer.class.getName()); 50 51 public BasicURLComposer() 52 { 53 } 54 55 public String composeDigitalAssetUrl(String dnsName, String filename, DeliveryContext deliveryContext) 56 { 57 String disableEmptyUrls = CmsPropertyHandler.getDisableEmptyUrls(); 58 if((filename == null || filename.equals("")) && (disableEmptyUrls == null || disableEmptyUrls.equalsIgnoreCase("yes"))) 59 return ""; 60 61 String assetUrl = ""; 62 63 String enableNiceURI = CmsPropertyHandler.getEnableNiceURI(); 64 if(enableNiceURI == null || enableNiceURI.equalsIgnoreCase("")) 65 enableNiceURI = "false"; 66 67 String useDNSNameInUrls = CmsPropertyHandler.getUseDNSNameInURI(); 68 if(useDNSNameInUrls == null || useDNSNameInUrls.equalsIgnoreCase("")) 69 useDNSNameInUrls = "false"; 70 71 if(enableNiceURI.equalsIgnoreCase("true") || useDNSNameInUrls.equalsIgnoreCase("false")) 72 { 73 StringBuffer sb = new StringBuffer (256); 74 75 if(deliveryContext.getUseFullUrl()) 76 { 77 String originalUrl = deliveryContext.getHttpServletRequest().getRequestURL().toString(); 78 int indexOfProtocol = originalUrl.indexOf("://"); 79 int indexFirstSlash = originalUrl.indexOf("/", indexOfProtocol + 3); 80 String base = originalUrl.substring(0, indexFirstSlash); 81 sb.append(base); 82 } 83 84 String servletContext = CmsPropertyHandler.getProperty(FilterConstants.CMS_PROPERTY_SERVLET_CONTEXT); 85 String digitalAssetPath = CmsPropertyHandler.getDigitalAssetBaseUrl(); 86 if (!digitalAssetPath.startsWith("/")) 87 digitalAssetPath = "/" + digitalAssetPath; 88 89 92 if(digitalAssetPath.indexOf(servletContext) == -1) 93 sb.append(servletContext); 94 95 sb.append(digitalAssetPath); 96 97 sb.append("/").append(filename); 98 99 101 assetUrl = sb.toString(); 102 } 103 else 104 { 105 String operatingMode = CmsPropertyHandler.getOperatingMode(); 106 String keyword = ""; 107 if(operatingMode.equalsIgnoreCase("0")) 108 keyword = "working="; 109 else if(operatingMode.equalsIgnoreCase("2")) 110 keyword = "preview="; 111 if(operatingMode.equalsIgnoreCase("3")) 112 keyword = "live="; 113 114 if(dnsName != null) 115 { 116 int startIndex = dnsName.indexOf(keyword); 117 if(startIndex != -1) 118 { 119 int endIndex = dnsName.indexOf(",", startIndex); 120 if(endIndex > -1) 121 dnsName = dnsName.substring(startIndex, endIndex); 122 else 123 dnsName = dnsName.substring(startIndex); 124 125 dnsName = dnsName.split("=")[1]; 126 } 127 else 128 { 129 int endIndex = dnsName.indexOf(","); 130 if(endIndex > -1) 131 dnsName = dnsName.substring(0, endIndex); 132 else 133 dnsName = dnsName.substring(0); 134 135 } 136 } 137 138 String context = CmsPropertyHandler.getProperty(FilterConstants.CMS_PROPERTY_SERVLET_CONTEXT); 139 140 assetUrl = dnsName + context + "/" + CmsPropertyHandler.getDigitalAssetBaseUrl() + "/" + filename; 141 } 142 143 return assetUrl; 144 } 145 146 public String composePageUrl(Database db, InfoGluePrincipal infoGluePrincipal, Integer siteNodeId, Integer languageId, Integer contentId, DeliveryContext deliveryContext) throws SystemException 147 { 148 153 154 String enableNiceURI = CmsPropertyHandler.getEnableNiceURI(); 155 if(enableNiceURI == null || enableNiceURI.equalsIgnoreCase("")) 156 enableNiceURI = "false"; 157 158 String useDNSNameInUrls = CmsPropertyHandler.getUseDNSNameInURI(); 159 if(useDNSNameInUrls == null || useDNSNameInUrls.equalsIgnoreCase("")) 160 useDNSNameInUrls = "false"; 161 162 if(enableNiceURI.equalsIgnoreCase("true") && deliveryContext.getHttpServletRequest().getRequestURI().indexOf("!renderDecoratedPage") == -1 && !deliveryContext.getDisableNiceUri()) 163 { 164 String context = CmsPropertyHandler.getProperty(FilterConstants.CMS_PROPERTY_SERVLET_CONTEXT); 165 166 SiteNode siteNode = SiteNodeController.getSiteNodeWithId(siteNodeId, db, true); 167 SiteNode currentSiteNode = SiteNodeController.getSiteNodeWithId(deliveryContext.getSiteNodeId(), db, true); 168 if(!siteNode.getRepository().getId().equals(currentSiteNode.getRepository().getId())) 169 { 170 String dnsName = siteNode.getRepository().getDnsName(); 171 logger.info("dnsName:" + dnsName + " for siteNode " + siteNode.getName()); 172 173 String operatingMode = CmsPropertyHandler.getOperatingMode(); 174 String keyword = ""; 175 if(operatingMode.equalsIgnoreCase("0")) 176 keyword = "working="; 177 else if(operatingMode.equalsIgnoreCase("2")) 178 keyword = "preview="; 179 if(operatingMode.equalsIgnoreCase("3")) 180 keyword = "live="; 181 182 String repositoryPath = null; 183 int pathStartIndex = dnsName.indexOf("path="); 184 if(pathStartIndex != -1) 185 { 186 repositoryPath = dnsName.substring(pathStartIndex + 5); 187 } 188 logger.info("repositoryPath in constructing new url:" + repositoryPath); 189 190 if(dnsName != null) 191 { 192 int startIndex = dnsName.indexOf(keyword); 193 if(startIndex != -1) 194 { 195 int endIndex = dnsName.indexOf(",", startIndex); 196 if(endIndex > -1) 197 dnsName = dnsName.substring(startIndex, endIndex); 198 else 199 dnsName = dnsName.substring(startIndex); 200 201 dnsName = dnsName.split("=")[1]; 202 } 203 else 204 { 205 int endIndex = dnsName.indexOf(","); 206 if(endIndex > -1) 207 dnsName = dnsName.substring(0, endIndex); 208 else 209 dnsName = dnsName.substring(0); 210 211 } 212 } 213 214 if(repositoryPath != null) 215 context = dnsName + context + "/" + repositoryPath; 216 else 217 context = dnsName + "/" + context; 218 } 219 else 220 { 221 String dnsName = siteNode.getRepository().getDnsName(); 222 223 String repositoryPath = null; 224 int pathStartIndex = dnsName.indexOf("path="); 225 if(pathStartIndex != -1) 226 { 227 repositoryPath = dnsName.substring(pathStartIndex + 5); 228 } 229 logger.info("repositoryPath in constructing new url:" + repositoryPath); 230 231 if(repositoryPath != null) 232 context = context + "/" + repositoryPath; 233 } 234 235 StringBuffer sb = new StringBuffer (256); 236 237 if(deliveryContext.getUseFullUrl()) 238 { 239 String originalUrl = deliveryContext.getHttpServletRequest().getRequestURL().toString(); 240 int indexOfProtocol = originalUrl.indexOf("://"); 241 int indexFirstSlash = originalUrl.indexOf("/", indexOfProtocol + 3); 242 String base = originalUrl.substring(0, indexFirstSlash); 243 sb.append(base); 244 } 245 246 sb.append(context); 247 248 try 249 { 250 sb.append(NodeDeliveryController.getNodeDeliveryController(siteNodeId, languageId, contentId).getPageNavigationPath(db, infoGluePrincipal, siteNodeId, languageId, contentId, deliveryContext)); 251 252 if(sb.toString().endsWith(context)) 253 sb.append("/"); 254 255 boolean addedContent = false; 256 if (contentId != null && contentId.intValue() != -1) 257 { 258 sb.append("?contentId=").append(String.valueOf(contentId)); 259 addedContent = true; 260 } 261 262 if (languageId != null && languageId.intValue() != -1 && deliveryContext.getLanguageId().intValue() != languageId.intValue()) 263 { 264 if(addedContent) 265 sb.append(getRequestArgumentDelimiter()); 266 else 267 sb.append("?"); 268 269 sb.append("languageId=").append(String.valueOf(languageId)); 270 } 271 272 return (!sb.toString().equals("") ? sb.toString() : "/"); 273 } 274 catch (Exception e) 275 { 276 e.printStackTrace(); 277 } 278 return null; 279 } 280 else 281 { 282 if(!useDNSNameInUrls.equalsIgnoreCase("false")) 283 { 284 if(siteNodeId == null) 285 siteNodeId = new Integer (-1); 286 287 if(languageId == null) 288 languageId = new Integer (-1); 289 290 if(contentId == null) 291 contentId = new Integer (-1); 292 293 String arguments = "siteNodeId=" + siteNodeId + getRequestArgumentDelimiter() + "languageId=" + languageId + getRequestArgumentDelimiter() + "contentId=" + contentId; 294 295 SiteNode siteNode = SiteNodeController.getSiteNodeWithId(siteNodeId, db, true); 296 String dnsName = CmsPropertyHandler.getWebServerAddress(); 297 if(siteNode != null && siteNode.getRepository().getDnsName() != null && !siteNode.getRepository().getDnsName().equals("")) 298 dnsName = siteNode.getRepository().getDnsName(); 299 300 String operatingMode = CmsPropertyHandler.getOperatingMode(); 301 String keyword = ""; 302 if(operatingMode.equalsIgnoreCase("0")) 303 keyword = "working="; 304 else if(operatingMode.equalsIgnoreCase("2")) 305 keyword = "preview="; 306 if(operatingMode.equalsIgnoreCase("3")) 307 keyword = "live="; 308 309 if(dnsName != null) 310 { 311 int startIndex = dnsName.indexOf(keyword); 312 if(startIndex != -1) 313 { 314 int endIndex = dnsName.indexOf(",", startIndex); 315 if(endIndex > -1) 316 dnsName = dnsName.substring(startIndex, endIndex); 317 else 318 dnsName = dnsName.substring(startIndex); 319 320 dnsName = dnsName.split("=")[1]; 321 } 322 else 323 { 324 int endIndex = dnsName.indexOf(","); 325 if(endIndex > -1) 326 dnsName = dnsName.substring(0, endIndex); 327 else 328 dnsName = dnsName.substring(0); 329 330 } 331 } 332 333 String context = CmsPropertyHandler.getProperty(FilterConstants.CMS_PROPERTY_SERVLET_CONTEXT); 334 335 String url = dnsName + context + "/" + CmsPropertyHandler.getApplicationBaseAction() + "?" + arguments; 336 337 if(deliveryContext.getHttpServletRequest().getRequestURI().indexOf("!renderDecoratedPage") > -1) 338 { 339 String componentRendererUrl = CmsPropertyHandler.getComponentRendererUrl(); 340 if(componentRendererUrl.endsWith("/")) 341 componentRendererUrl += "/"; 342 343 url = componentRendererUrl + CmsPropertyHandler.getComponentRendererAction() + "?" + arguments; 344 } 345 346 348 return url; 349 } 350 else 351 { 352 StringBuffer sb = new StringBuffer (256); 353 if(deliveryContext.getUseFullUrl()) 354 { 355 String originalUrl = deliveryContext.getHttpServletRequest().getRequestURL().toString(); 356 int indexOfProtocol = originalUrl.indexOf("://"); 357 int indexFirstSlash = originalUrl.indexOf("/", indexOfProtocol + 3); 358 String base = originalUrl.substring(0, indexFirstSlash); 359 sb.append(base); 360 } 361 362 String servletContext = CmsPropertyHandler.getProperty(FilterConstants.CMS_PROPERTY_SERVLET_CONTEXT); 363 364 if(siteNodeId == null) 365 siteNodeId = new Integer (-1); 366 367 if(languageId == null) 368 languageId = new Integer (-1); 369 370 if(contentId == null) 371 contentId = new Integer (-1); 372 373 String arguments = "siteNodeId=" + siteNodeId + getRequestArgumentDelimiter() + "languageId=" + languageId + getRequestArgumentDelimiter() + "contentId=" + contentId; 374 375 if(deliveryContext.getHttpServletRequest().getRequestURI().indexOf("!renderDecoratedPage") > -1) 376 { 377 sb.append(servletContext + "/" + CmsPropertyHandler.getComponentRendererAction() + "?" + arguments); 378 } 379 else 380 { 381 sb.append(servletContext + "/" + CmsPropertyHandler.getApplicationBaseAction() + "?" + arguments); 382 } 383 385 return sb.toString(); 386 } 387 } 388 } 389 390 public String composePageUrlAfterLanguageChange(Database db, InfoGluePrincipal infoGluePrincipal, Integer siteNodeId, Integer languageId, Integer contentId, DeliveryContext deliveryContext) throws SystemException 391 { 392 String pageUrl = composePageUrl(db, infoGluePrincipal, siteNodeId, languageId, contentId, deliveryContext); 393 394 String enableNiceURI = CmsPropertyHandler.getEnableNiceURI(); 395 if(enableNiceURI == null || enableNiceURI.equalsIgnoreCase("")) 396 enableNiceURI = "false"; 397 398 if(enableNiceURI.equalsIgnoreCase("true") && !deliveryContext.getDisableNiceUri()) 399 { 400 if (pageUrl.indexOf("?") == -1) 401 { 402 pageUrl += "?languageId=" + String.valueOf(languageId); 403 } 404 else 405 { 406 if(pageUrl.indexOf("languageId=") == -1) 407 pageUrl += getRequestArgumentDelimiter() + "languageId=" + String.valueOf(languageId); 408 } 409 } 410 411 return pageUrl; 412 } 413 414 private String getRequestArgumentDelimiter() 415 { 416 String requestArgumentDelimiter = CmsPropertyHandler.getRequestArgumentDelimiter(); 417 if(requestArgumentDelimiter == null || requestArgumentDelimiter.equalsIgnoreCase("") || (!requestArgumentDelimiter.equalsIgnoreCase("&") && !requestArgumentDelimiter.equalsIgnoreCase("&"))) 418 requestArgumentDelimiter = "&"; 419 420 return requestArgumentDelimiter; 421 } 422 423 public String composePageBaseUrl(String dnsName) 424 { 425 String useDNSNameInUrls = CmsPropertyHandler.getUseDNSNameInURI(); 426 if(useDNSNameInUrls == null || useDNSNameInUrls.equalsIgnoreCase("")) 427 useDNSNameInUrls = "false"; 428 429 if(!useDNSNameInUrls.equalsIgnoreCase("false")) 430 { 431 String operatingMode = CmsPropertyHandler.getOperatingMode(); 432 String keyword = ""; 433 if(operatingMode.equalsIgnoreCase("0")) 434 keyword = "working="; 435 else if(operatingMode.equalsIgnoreCase("2")) 436 keyword = "preview="; 437 if(operatingMode.equalsIgnoreCase("3")) 438 keyword = "live="; 439 440 if(dnsName != null) 441 { 442 int startIndex = dnsName.indexOf(keyword); 443 if(startIndex != -1) 444 { 445 int endIndex = dnsName.indexOf(",", startIndex); 446 if(endIndex > -1) 447 dnsName = dnsName.substring(startIndex, endIndex); 448 else 449 dnsName = dnsName.substring(startIndex); 450 451 dnsName = dnsName.split("=")[1]; 452 } 453 else 454 { 455 int endIndex = dnsName.indexOf(","); 456 if(endIndex > -1) 457 dnsName = dnsName.substring(0, endIndex); 458 else 459 dnsName = dnsName.substring(0); 460 461 } 462 } 463 464 String context = CmsPropertyHandler.getProperty(FilterConstants.CMS_PROPERTY_SERVLET_CONTEXT); 465 466 return dnsName + context + "/" + CmsPropertyHandler.getApplicationBaseAction(); 467 } 468 469 if(ActionContext.getRequest().getRequestURI().indexOf("!renderDecoratedPage") > -1) 470 { 471 475 return "/" + CmsPropertyHandler.getComponentRendererUrl(); 476 } 477 478 return "/" + CmsPropertyHandler.getApplicationBaseAction(); 479 } 480 481 482 } | Popular Tags |