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

Modified Files:
      Tag: b1_4
        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.5
retrieving revision 1.5.2.1
diff -u -b -r1.5 -r1.5.2.1
--- AliasNavigationItemManager.java     1 Feb 2008 16:25:35 -0000       1.5
+++ AliasNavigationItemManager.java     26 Jun 2008 08:19:19 -0000      1.5.2.1
@@ -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;
@@ -15,7 +16,7 @@
 
 public class AliasNavigationItemManager implements NavigationItemManager {
 
-    private static Logger log = 
Logging.getLoggerInstance(AliasNavigationItemManager.class.getName());
+   private static final Logger log = 
Logging.getLoggerInstance(AliasNavigationItemManager.class.getName());
        
        private NavigationItemRenderer renderer = new AliasNavigationRenderer();
        private NavigationTreeItemRenderer treeRenderer = new 
AliasTreeItemRenderer();
@@ -39,16 +40,16 @@
         }
 
         Alias alias = MMBaseNodeMapper.copyNode(node, Alias.class);
-        NodeList relatedPages = node.getRelatedNodes("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("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.6.2.1
retrieving revision 1.6.2.2
diff -u -b -r1.6.2.1 -r1.6.2.2
--- AliasNavigationRenderer.java        21 Apr 2008 10:11:20 -0000      1.6.2.1
+++ AliasNavigationRenderer.java        26 Jun 2008 08:19:19 -0000      1.6.2.2
@@ -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,13 +13,15 @@
 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 {
 
     /** MMbase logging system */
-   private static Logger log = 
Logging.getLoggerInstance(AliasNavigationRenderer.class.getName());
+   private static final Logger log = 
Logging.getLoggerInstance(AliasNavigationRenderer.class.getName());
     
    protected static String CONTENT_TYPE = "text/html";
 
@@ -29,33 +32,38 @@
           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, servletConfig);
-             response.setContentType(CONTENT_TYPE); 
-             
-             if (pageItem != null) {
-                NavigationItemRenderer manager = 
NavigationManager.getRenderer(pageItem);
-                if (manager != null) {
-                    manager.render(pageItem, aliasRequest, response, 
servletConfig);
+             if (pageItem == null) {
+                response.sendError(HttpServletResponse.SC_NOT_FOUND,
+                      "Trying to resolve Alias without related pages id:" + 
item.getId());
+             }
+             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 {
-             String url = alias.getUrl();
-             if (!StringUtils.isBlank(url)) {
-                 String redirect = response.encodeRedirectURL(url);
-                 try {
-                    response.sendRedirect(redirect);
+                   forwardInternal(request, response, servletConfig, pageItem);
                 }
-                catch (IOException e) {
-                    log.debug("" + e.getMessage(), e);
                 }
              }
              else {
-                throw new IllegalArgumentException(
-                            "Trying to resolve Alias without related pages 
id:"+item.getId());
+             String url = alias.getUrl();
+             if (StringUtils.isNotBlank(url)) {
+                 String redirect = response.encodeRedirectURL(url);
+                 redirectToUrl(response, redirect);
+             }
+             else {
+                response.sendError(HttpServletResponse.SC_NOT_FOUND,
+                     "Trying to resolve Alias without related pages id:" + 
item.getId());
              }
          }
       }
@@ -65,22 +73,25 @@
       }
    }
 
-
-   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) {
+          response.setContentType(CONTENT_TYPE); 
 
+          HttpServletRequest aliasRequest = new 
InternalDispatchNavigationRequest(request, pageItem); 
+          PortalEnvironment aliasEnv = new PortalEnvironment(aliasRequest, 
response, servletConfig);
+          manager.render(pageItem, aliasRequest, response, servletConfig);
+       }
       }
 }
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to