shuber      2005/02/23 15:26:19 CET

  Modified files:
    core/src/java/org/jahia/taglibs/categories CategoryTag.java 
    core/src/java/org/jahia/taglibs/html/controls TreeTag.java 
    core/src/webapp/WEB-INF/etc/taglibs content.tld 
  Log:
  First try at implementing a category selection if present in a pageContext 
attribute.
  
  Revision  Changes    Path
  1.3       +51 -3     
jahia/core/src/java/org/jahia/taglibs/categories/CategoryTag.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/taglibs/categories/CategoryTag.java.diff?r1=1.2&r2=1.3&f=h
  1.2       +17 -11    
jahia/core/src/java/org/jahia/taglibs/html/controls/TreeTag.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/java/org/jahia/taglibs/html/controls/TreeTag.java.diff?r1=1.1&r2=1.2&f=h
  1.4       +5 -0      jahia/core/src/webapp/WEB-INF/etc/taglibs/content.tld
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/core/src/webapp/WEB-INF/etc/taglibs/content.tld.diff?r1=1.3&r2=1.4&f=h
  
  
  
  Index: CategoryTag.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/taglibs/categories/CategoryTag.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- CategoryTag.java  6 Aug 2004 19:39:31 -0000       1.2
  +++ CategoryTag.java  23 Feb 2005 14:26:19 -0000      1.3
  @@ -1,8 +1,8 @@
   package org.jahia.taglibs.categories;
   
   import java.util.ArrayList;
  +import java.util.Date;
   import java.util.Iterator;
  -import java.util.Map;
   import javax.servlet.ServletRequest;
   import javax.servlet.jsp.JspException;
   import javax.servlet.jsp.tagext.BodyTagSupport;
  @@ -16,7 +16,8 @@
   import org.jahia.data.beans.CategoryBean;
   import org.jahia.exceptions.JahiaException;
   import org.jahia.services.categories.Category;
  -import java.util.Date;
  +import javax.swing.tree.TreePath;
  +import java.util.Enumeration;
   
   /**
    * <p>Title: The category tag gives access to a category, it's children
  @@ -41,6 +42,7 @@
       private String name = null;
       private String childCategoriesID = null;
       private String subTreeID;
  +    private String selectedCategoryKeyName = null;
   
       /**
        * Empty constructor. Does nothing.
  @@ -91,6 +93,16 @@
           this.subTreeID = subTreeID;
       }
   
  +    /**
  +     * The name of a pageContext attribute that contains a category key to
  +     * select in the current tree.
  +     * @param selectedCategoryKeyName the name of the page context attribute
  +     * key that contains a category key to select by default in the tree.
  +     */
  +    public void setSelectedCategoryKeyName (String selectedCategoryKeyName) {
  +        this.selectedCategoryKeyName = selectedCategoryKeyName;
  +    }
  +
       public int doStartTag ()
           throws JspException {
           Category curCategory = null;
  @@ -149,6 +161,23 @@
           if (tree == null) {
               tree = buildJTree(curCategory);
           }
  +
  +        // now let's handle default selection of a category.
  +        String selectedCategoryKey = (String) 
pageContext.findAttribute(selectedCategoryKeyName);
  +        if (selectedCategoryKey != null) {
  +            if (tree.getSelectionCount() != 0) {
  +                tree.clearSelection();
  +            }
  +            // now we must find the path for the category key we want to
  +            // select.
  +            DefaultMutableTreeNode curNode =
  +            (DefaultMutableTreeNode)tree.getModel().getRoot();
  +            selectCategoryInTree(tree, selectedCategoryKey, curNode);
  +        } else {
  +            // no selection was enforced, we do nothing in case there was
  +            // a previous selection.
  +        }
  +
           if (subTreeID != null) {
               pageContext.setAttribute(subTreeID, tree, 
pageContext.SESSION_SCOPE);
               pageContext.setAttribute(subTreeID + TREEID_DATE_POSTFIX, new 
Date(), pageContext.SESSION_SCOPE);
  @@ -172,6 +201,21 @@
           return EVAL_BODY_BUFFERED;
       }
   
  +    private void selectCategoryInTree (JTree tree, String 
selectedCategoryKey,
  +                                       DefaultMutableTreeNode curNode) {
  +        Category category = (Category) curNode.getUserObject();
  +        if (category.getKey().equals(selectedCategoryKey)) {
  +            TreePath selectionPath = new TreePath(curNode.getPath());
  +            tree.setSelectionPath(selectionPath);
  +            return;
  +        }
  +        Enumeration childNodeEnum = curNode.children();
  +        while (childNodeEnum.hasMoreElements()) {
  +            DefaultMutableTreeNode curChildNode = (DefaultMutableTreeNode) 
childNodeEnum.nextElement();
  +            selectCategoryInTree(tree, selectedCategoryKey, curChildNode);
  +        }
  +    }
  +
       // loops through the next elements
       public int doAfterBody ()
           throws JspException {
  @@ -222,4 +266,8 @@
           }
       }
   
  -}
  \ No newline at end of file
  +    public String getSelectedCategoryKeyName () {
  +        return selectedCategoryKeyName;
  +    }
  +
  +}
  
  
  
  Index: TreeTag.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/java/org/jahia/taglibs/html/controls/TreeTag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TreeTag.java      30 Mar 2004 14:13:16 -0000      1.1
  +++ TreeTag.java      23 Feb 2005 14:26:19 -0000      1.2
  @@ -232,18 +232,24 @@
                   String selectedNodeIndexStr = 
request.getParameter(selectionParamName);
                   if (selectedNodeIndexStr != null) {
                       selectedNodeIndex = 
Integer.parseInt(selectedNodeIndexStr);
  +                } else {
  +                    // no selection found in URL
                   }
  -                ArrayList nodeList =
  -                    GUITreeTools.getFlatTree(tree, rootNode);
  -                if (selectedNodeIndex > (nodeList.size() - 1) ) {
  -                    selectedNodeIndex = 0;
  +
  +                TreePath selectedNodePath = tree.getSelectionPath();
  +                if ((selectedNodePath == null) && (selectedNodeIndexStr == 
null)) {
  +                    ArrayList nodeList =
  +                        GUITreeTools.getFlatTree(tree, rootNode);
  +                    if (selectedNodeIndex > (nodeList.size() - 1)) {
  +                        selectedNodeIndex = 0;
  +                    }
  +                    selectedNode
  +                        = (DefaultMutableTreeNode)
  +                          nodeList.get(selectedNodeIndex);
  +                    selectedNodePath = new TreePath(selectedNode.getPath());
  +                    tree.clearSelection();
  +                    tree.setSelectionPath(selectedNodePath);
                   }
  -                selectedNode
  -                    = (DefaultMutableTreeNode)
  -                      nodeList.get(selectedNodeIndex);
  -                TreePath selectedNodePath = new 
TreePath(selectedNode.getPath());
  -                tree.clearSelection();
  -                tree.setSelectionPath(selectedNodePath);
   
                   GUITreeTools.updateGUITree(tree, request);
   
  @@ -511,4 +517,4 @@
   
       }
   
  -}
  \ No newline at end of file
  +}
  
  
  
  Index: content.tld
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/core/src/webapp/WEB-INF/etc/taglibs/content.tld,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- content.tld       26 Oct 2004 15:18:09 -0000      1.3
  +++ content.tld       23 Feb 2005 14:26:19 -0000      1.4
  @@ -2005,6 +2005,11 @@
           <required>false</required>
           <rtexprvalue>true</rtexprvalue>
       </attribute>
  +    <attribute>
  +        <name>selectedCategoryKeyName</name>
  +        <required>false</required>
  +        <rtexprvalue>true</rtexprvalue>
  +    </attribute>
     </tag>
   
     <tag>
  

Reply via email to