Update of 
/var/cvs/contributions/CMSContainer_Modules/alias/src/java/com/finalist/cmsc/alias
In directory 
james.mmbase.org:/tmp/cvs-serv13627/alias/src/java/com/finalist/cmsc/alias

Modified Files:
        AliasNavigationItemManager.java AliasNavigationRenderer.java 
Log Message:
CMSC-942 Several issues with the Alias module


See also: 
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Modules/alias/src/java/com/finalist/cmsc/alias
See also: http://www.mmbase.org/jira/browse/CMSC-942


Index: AliasNavigationItemManager.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Modules/alias/src/java/com/finalist/cmsc/alias/AliasNavigationItemManager.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- AliasNavigationItemManager.java     21 Jun 2008 12:41:01 -0000      1.7
+++ AliasNavigationItemManager.java     26 Jun 2008 08:19:51 -0000      1.8
@@ -2,6 +2,7 @@
 
 import net.sf.mmapps.commons.beans.MMBaseNodeMapper;
 
+import org.apache.commons.lang.StringUtils;
 import org.mmbase.bridge.*;
 import org.mmbase.util.logging.Logger;
 import org.mmbase.util.logging.Logging;
@@ -11,15 +12,10 @@
 import com.finalist.cmsc.alias.tree.AliasTreeItemRenderer;
 import com.finalist.cmsc.alias.util.AliasUtil;
 import com.finalist.cmsc.beans.om.NavigationItem;
-import com.finalist.cmsc.mmbase.ResourcesUtil;
 import com.finalist.cmsc.navigation.*;
 
 public class AliasNavigationItemManager implements NavigationItemManager {
 
-   private static final String RELATED = "related";
-
-   private static final String DESTINATION = "destination";
-
    private static final Logger log = 
Logging.getLoggerInstance(AliasNavigationItemManager.class.getName());
 
        private NavigationItemRenderer renderer = new AliasNavigationRenderer();
@@ -44,16 +40,16 @@
         }
 
         Alias alias = MMBaseNodeMapper.copyNode(node, Alias.class);
-        NodeList relatedPages = node.getRelatedNodes(PagesUtil.PAGE, RELATED, 
DESTINATION);
-        if(relatedPages.size() > 0) {
-            Node page = relatedPages.getNode(0);
+        
+        Node page = AliasUtil.getPage(node);
+        if (page != null) {
             alias.setPage(page.getNumber());
         }
-
-        NodeList relatedUrls = node.getRelatedNodes(ResourcesUtil.URLS, 
RELATED, DESTINATION);
-        if(relatedUrls.size() > 0) {
-            Node url = relatedUrls.getNode(0);
-            alias.setUrl(url.getStringValue("url"));
+        else {
+            String externalUrl = AliasUtil.getUrlStr(node);
+            if (!StringUtils.isAlpha(externalUrl)) {
+                alias.setUrl(externalUrl);
+            }
         }
 
         return alias;


Index: AliasNavigationRenderer.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Modules/alias/src/java/com/finalist/cmsc/alias/AliasNavigationRenderer.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- AliasNavigationRenderer.java        2 Jun 2008 21:56:26 -0000       1.11
+++ AliasNavigationRenderer.java        26 Jun 2008 08:19:51 -0000      1.12
@@ -3,7 +3,8 @@
 import java.io.IOException;
 
 import javax.servlet.ServletConfig;
-import javax.servlet.http.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang.StringUtils;
 import org.mmbase.util.logging.Logger;
@@ -12,8 +13,10 @@
 import com.finalist.cmsc.alias.beans.om.Alias;
 import com.finalist.cmsc.beans.om.NavigationItem;
 import com.finalist.cmsc.navigation.*;
+import com.finalist.cmsc.portalImpl.InternalDispatchNavigationRequest;
 import com.finalist.cmsc.services.sitemanagement.SiteManagement;
 import com.finalist.pluto.portalImpl.core.PortalEnvironment;
+import com.finalist.pluto.portalImpl.core.PortalURL;
 
 public class AliasNavigationRenderer implements NavigationItemRenderer {
 
@@ -31,22 +34,26 @@
           Alias alias = (Alias) item;
           if (alias.getPage() > 0 ) {
              NavigationItem pageItem = 
SiteManagement.getNavigationItem(alias.getPage());
-             String path = SiteManagement.getPath(pageItem, 
!ServerUtil.useServerName());
 
-             HttpServletRequest aliasRequest = new 
AliasHttpServletRequest(request, path);
-             PortalEnvironment aliasEnv = new PortalEnvironment(aliasRequest, 
response);
-
-             if (pageItem != null) {
-                NavigationItemRenderer manager = 
NavigationManager.getRenderer(pageItem);
-                if (manager != null) {
-                    String contentType = manager.getContentType();
-                    String charset = servletConfig.getInitParameter("charset");
-                    if (charset != null && charset.length() > 0) {
-                        contentType += "; charset=" + charset;
+             if (pageItem == null) {
+                response.sendError(HttpServletResponse.SC_NOT_FOUND,
+                      "Trying to resolve Alias without related pages id:" + 
item.getId());
                     }
-                    response.setContentType(contentType);
-
-                    manager.render(pageItem, aliasRequest, response, 
servletConfig);
+             else {
+                if (ServerUtil.useServerName()) {
+                   String currentSite = SiteManagement.getSite(item);
+                   String aliasSite = SiteManagement.getSite(pageItem);
+                   if (currentSite.equals(aliasSite)) {
+                      forwardInternal(request, response, servletConfig, 
pageItem);
+                   }
+                   else {
+                      String link = SiteManagement.getPath(pageItem, false);
+                      PortalURL u = new PortalURL(aliasSite, request, link);
+                      redirectToUrl(response, u.toString());
+                   }
+                }
+                else {
+                   forwardInternal(request, response, servletConfig, pageItem);
                 }
              }
          }
@@ -54,16 +61,11 @@
              String url = alias.getUrl();
              if (StringUtils.isNotBlank(url)) {
                  String redirect = response.encodeRedirectURL(url);
-                 try {
-                    response.sendRedirect(redirect);
-                }
-                catch (IOException e) {
-                    log.debug("" + e.getMessage(), e);
-                }
+                 redirectToUrl(response, redirect);
              }
              else {
-                throw new IllegalArgumentException(
-                            "Trying to resolve Alias without related pages 
id:"+item.getId());
+                response.sendError(HttpServletResponse.SC_NOT_FOUND,
+                     "Trying to resolve Alias without related pages id:" + 
item.getId());
              }
          }
       }
@@ -73,22 +75,30 @@
       }
    }
 
-
-   class AliasHttpServletRequest extends HttpServletRequestWrapper {
-
-         private String pagePath;
-
-
-         public AliasHttpServletRequest(HttpServletRequest request, String 
pagePath) {
-            super(request);
-            this.pagePath = pagePath;
+   private void redirectToUrl(HttpServletResponse response, String redirect) {
+      try {
+           response.sendRedirect(redirect);
+       }
+       catch (IOException e) {
+           log.info(e.getMessage(), e);
+       }
          }
 
+   private void forwardInternal(HttpServletRequest request, 
HttpServletResponse response,
+         ServletConfig servletConfig, NavigationItem pageItem) throws 
IOException {
 
-         @Override
-         public String getServletPath() {
-            return pagePath;
+       NavigationItemRenderer manager = 
NavigationManager.getRenderer(pageItem);
+       if (manager != null) {
+           String contentType = manager.getContentType();
+           String charset = servletConfig.getInitParameter("charset");
+           if (charset != null && charset.length() > 0) {
+               contentType += "; charset=" + charset;
          }
+           response.setContentType(contentType);
 
+           HttpServletRequest aliasRequest = new 
InternalDispatchNavigationRequest(request, pageItem);
+           PortalEnvironment aliasEnv = new PortalEnvironment(aliasRequest, 
response);
+           manager.render(pageItem, aliasRequest, response, servletConfig);
+       }
       }
 }
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to