KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > infoglue > deliver > controllers > kernel > impl > simple > BasicURLComposer


1 /* ===============================================================================
2 *
3 * Part of the InfoGlue Content Management Platform (www.infoglue.org)
4 *
5 * ===============================================================================
6 *
7 * Copyright (C)
8 *
9 * This program is free software; you can redistribute it and/or modify it under
10 * the terms of the GNU General Public License version 2, as published by the
11 * Free Software Foundation. See the file LICENSE.html for more information.
12 *
13 * This program is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
15 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along with
18 * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
19 * Place, Suite 330 / Boston, MA 02111-1307 / USA.
20 *
21 * ===============================================================================
22 */

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 /**
41  * Created by IntelliJ IDEA.
42  * User: lbj
43  * Date: 22-01-2004
44  * Time: 16:41:17
45  * To change this template use Options | File Templates.
46  */

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 JavaDoc composeDigitalAssetUrl(String JavaDoc dnsName, String JavaDoc filename, DeliveryContext deliveryContext)
56     {
57         String JavaDoc disableEmptyUrls = CmsPropertyHandler.getDisableEmptyUrls();
58         if((filename == null || filename.equals("")) && (disableEmptyUrls == null || disableEmptyUrls.equalsIgnoreCase("yes")))
59             return "";
60             
61         String JavaDoc assetUrl = "";
62         
63         String JavaDoc enableNiceURI = CmsPropertyHandler.getEnableNiceURI();
64         if(enableNiceURI == null || enableNiceURI.equalsIgnoreCase(""))
65             enableNiceURI = "false";
66
67         String JavaDoc useDNSNameInUrls = CmsPropertyHandler.getUseDNSNameInURI();
68         if(useDNSNameInUrls == null || useDNSNameInUrls.equalsIgnoreCase(""))
69             useDNSNameInUrls = "false";
70
71         if(enableNiceURI.equalsIgnoreCase("true") || useDNSNameInUrls.equalsIgnoreCase("false"))
72         {
73             StringBuffer JavaDoc sb = new StringBuffer JavaDoc(256);
74             
75             if(deliveryContext.getUseFullUrl())
76             {
77                 String JavaDoc originalUrl = deliveryContext.getHttpServletRequest().getRequestURL().toString();
78                 int indexOfProtocol = originalUrl.indexOf("://");
79                 int indexFirstSlash = originalUrl.indexOf("/", indexOfProtocol + 3);
80                 String JavaDoc base = originalUrl.substring(0, indexFirstSlash);
81                 sb.append(base);
82             }
83             
84             String JavaDoc servletContext = CmsPropertyHandler.getProperty(FilterConstants.CMS_PROPERTY_SERVLET_CONTEXT);
85             String JavaDoc digitalAssetPath = CmsPropertyHandler.getDigitalAssetBaseUrl();
86             if (!digitalAssetPath.startsWith("/"))
87                 digitalAssetPath = "/" + digitalAssetPath;
88             
89             //logger.info("servletContext:" + servletContext);
90
//logger.info("digitalAssetPath:" + digitalAssetPath);
91

92             if(digitalAssetPath.indexOf(servletContext) == -1)
93                 sb.append(servletContext);
94             
95             sb.append(digitalAssetPath);
96          
97             sb.append("/").append(filename);
98             
99             //logger.info("sb:" + sb);
100

101             assetUrl = sb.toString();
102         }
103         else
104         {
105             String JavaDoc operatingMode = CmsPropertyHandler.getOperatingMode();
106             String JavaDoc 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 JavaDoc 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 JavaDoc composePageUrl(Database db, InfoGluePrincipal infoGluePrincipal, Integer JavaDoc siteNodeId, Integer JavaDoc languageId, Integer JavaDoc contentId, DeliveryContext deliveryContext) throws SystemException
147     {
148         /*
149         String disableEmptyUrls = CmsPropertyHandler.getDisableEmptyUrls();
150         if(filename == null || filename.equals("") && disableEmptyUrls == null || disableEmptyUrls.equalsIgnoreCase("no"))
151             return "";
152         */

153         
154         String JavaDoc enableNiceURI = CmsPropertyHandler.getEnableNiceURI();
155         if(enableNiceURI == null || enableNiceURI.equalsIgnoreCase(""))
156             enableNiceURI = "false";
157         
158         String JavaDoc 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 JavaDoc 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 JavaDoc dnsName = siteNode.getRepository().getDnsName();
171                 logger.info("dnsName:" + dnsName + " for siteNode " + siteNode.getName());
172                 
173                 String JavaDoc operatingMode = CmsPropertyHandler.getOperatingMode();
174                 String JavaDoc 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 JavaDoc 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 JavaDoc dnsName = siteNode.getRepository().getDnsName();
222
223                 String JavaDoc 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 JavaDoc sb = new StringBuffer JavaDoc(256);
236
237             if(deliveryContext.getUseFullUrl())
238             {
239                 String JavaDoc originalUrl = deliveryContext.getHttpServletRequest().getRequestURL().toString();
240                 int indexOfProtocol = originalUrl.indexOf("://");
241                 int indexFirstSlash = originalUrl.indexOf("/", indexOfProtocol + 3);
242                 String JavaDoc 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 JavaDoc 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 JavaDoc(-1);
286     
287                 if(languageId == null)
288                     languageId = new Integer JavaDoc(-1);
289     
290                 if(contentId == null)
291                     contentId = new Integer JavaDoc(-1);
292     
293                 String JavaDoc arguments = "siteNodeId=" + siteNodeId + getRequestArgumentDelimiter() + "languageId=" + languageId + getRequestArgumentDelimiter() + "contentId=" + contentId;
294
295                 SiteNode siteNode = SiteNodeController.getSiteNodeWithId(siteNodeId, db, true);
296                 String JavaDoc dnsName = CmsPropertyHandler.getWebServerAddress();
297                 if(siteNode != null && siteNode.getRepository().getDnsName() != null && !siteNode.getRepository().getDnsName().equals(""))
298                     dnsName = siteNode.getRepository().getDnsName();
299
300                 String JavaDoc operatingMode = CmsPropertyHandler.getOperatingMode();
301                 String JavaDoc 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 JavaDoc context = CmsPropertyHandler.getProperty(FilterConstants.CMS_PROPERTY_SERVLET_CONTEXT);
334
335                 String JavaDoc url = dnsName + context + "/" + CmsPropertyHandler.getApplicationBaseAction() + "?" + arguments;
336
337                 if(deliveryContext.getHttpServletRequest().getRequestURI().indexOf("!renderDecoratedPage") > -1)
338                 {
339                     String JavaDoc componentRendererUrl = CmsPropertyHandler.getComponentRendererUrl();
340                     if(componentRendererUrl.endsWith("/"))
341                         componentRendererUrl += "/";
342                     
343                     url = componentRendererUrl + CmsPropertyHandler.getComponentRendererAction() + "?" + arguments;
344                 }
345                 
346                 //getLogger().info("url:" + url);
347

348                 return url;
349             }
350             else
351             {
352                 StringBuffer JavaDoc sb = new StringBuffer JavaDoc(256);
353                 if(deliveryContext.getUseFullUrl())
354                 {
355                     String JavaDoc originalUrl = deliveryContext.getHttpServletRequest().getRequestURL().toString();
356                     int indexOfProtocol = originalUrl.indexOf("://");
357                     int indexFirstSlash = originalUrl.indexOf("/", indexOfProtocol + 3);
358                     String JavaDoc base = originalUrl.substring(0, indexFirstSlash);
359                     sb.append(base);
360                 }
361                 
362                 String JavaDoc servletContext = CmsPropertyHandler.getProperty(FilterConstants.CMS_PROPERTY_SERVLET_CONTEXT);
363                 
364                 if(siteNodeId == null)
365                     siteNodeId = new Integer JavaDoc(-1);
366     
367                 if(languageId == null)
368                     languageId = new Integer JavaDoc(-1);
369     
370                 if(contentId == null)
371                     contentId = new Integer JavaDoc(-1);
372     
373                 String JavaDoc 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                 //getLogger().info("url:" + url);
384

385                 return sb.toString();
386             }
387         }
388     }
389
390     public String JavaDoc composePageUrlAfterLanguageChange(Database db, InfoGluePrincipal infoGluePrincipal, Integer JavaDoc siteNodeId, Integer JavaDoc languageId, Integer JavaDoc contentId, DeliveryContext deliveryContext) throws SystemException
391     {
392         String JavaDoc pageUrl = composePageUrl(db, infoGluePrincipal, siteNodeId, languageId, contentId, deliveryContext);
393
394         String JavaDoc 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 JavaDoc getRequestArgumentDelimiter()
415     {
416         String JavaDoc requestArgumentDelimiter = CmsPropertyHandler.getRequestArgumentDelimiter();
417         if(requestArgumentDelimiter == null || requestArgumentDelimiter.equalsIgnoreCase("") || (!requestArgumentDelimiter.equalsIgnoreCase("&") && !requestArgumentDelimiter.equalsIgnoreCase("&")))
418             requestArgumentDelimiter = "&";
419
420         return requestArgumentDelimiter;
421     }
422
423     public String JavaDoc composePageBaseUrl(String JavaDoc dnsName)
424     {
425         String JavaDoc useDNSNameInUrls = CmsPropertyHandler.getUseDNSNameInURI();
426         if(useDNSNameInUrls == null || useDNSNameInUrls.equalsIgnoreCase(""))
427             useDNSNameInUrls = "false";
428
429         if(!useDNSNameInUrls.equalsIgnoreCase("false"))
430         {
431             String JavaDoc operatingMode = CmsPropertyHandler.getOperatingMode();
432             String JavaDoc 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 JavaDoc 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             //String componentRendererUrl = CmsPropertyHandler.getComponentRendererUrl();
472
//if(componentRendererUrl.endsWith("/"))
473
// componentRendererUrl += "/";
474

475             return "/" + CmsPropertyHandler.getComponentRendererUrl();
476         }
477         
478         return "/" + CmsPropertyHandler.getApplicationBaseAction();
479     }
480
481
482 }
Popular Tags