Did you also commit this into trunk? (Maybe I did oversee it is currently
a little bit difficult to read emails :( )

Carsten 

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
> Sent: Monday, November 08, 2004 7:07 AM
> To: [EMAIL PROTECTED]
> Subject: svn commit: rev 56906 - 
> cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache
/cocoon/portal/layout/renderer/aspect/impl
> 
> Author: rgoers
> Date: Sun Nov  7 22:07:15 2004
> New Revision: 56906
> 
> Modified:
>    
> cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache
/cocoon/portal/layout/renderer/aspect/impl/TabContentAspect.java
> Log:
> bug 31229 - generate navigation for non-selected tabs
> 
> 
> Modified: 
> cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache
/cocoon/portal/layout/renderer/aspect/impl/TabContentAspect.java
> ==============================================================
> ================
> --- 
> cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache
/cocoon/portal/layout/renderer/aspect/impl/TabContentAspect.java
(original)
> +++ 
> cocoon/branches/BRANCH_2_1_X/src/blocks/portal/java/org/apache
/cocoon/portal/layout/renderer/aspect/impl/TabContentAspect.java        Sun
Nov  7 > 22:07:15 2004
> @@ -18,6 +18,8 @@
>  import java.util.Collections;
>  import java.util.Iterator;
>  import java.util.Map;
> +import java.util.List;
> +import java.util.ArrayList;
>  
>  import org.apache.avalon.framework.parameters.ParameterException;
>  import org.apache.avalon.framework.parameters.Parameters;
> @@ -47,6 +49,23 @@
>   *   </composite>
>   * </pre>
>   *
> + * <h2>Example XML with sub-navigation:</h2>
> + * <pre>
> + *   &lt;composite&gt;
> + *     &lt;named-item name="..." parameter="link-event"/&gt;
> + *     &lt;named-item name="..." selected="true"&gt;
> + *       &lt;!-- output from processing layout --&gt;
> + *     &lt;/named-item&gt;
> + *     &lt;named-item name="..." parameter="link-event"/&gt;
> + *     &lt;named-item name="..." parameter="link-event"&gt;
> + *       &lt;<i>child-tag-name</i>&gt;
> + *         &lt;named-item name="..." parameter="link-event"/&gt;
> + *         &lt;named-item name="..." parameter="link-event"/&gt;
> + *       &lt;/<i>child-tag-name</i>&gt;
> + *     &lt;/named-item&gt;
> + *   &lt;/composite&gt;
> + * </pre>
> + *
>   * <h2>Applicable to:</h2>
>   * <ul>
>   *  <li>[EMAIL PROTECTED] 
> org.apache.cocoon.portal.layout.CompositeLayout}</li>
> @@ -60,6 +79,10 @@
>   *      
> <td></td><td>String</td><td><code>"composite"</code></td></tr>
>   *  <tr><th>root-tag</th><td>Should a tag enclosing the 
> following output be generated?</td>
>   *      <td></td><td>boolean</td><td><code>true</code></td></tr>
> + *  <tr><th>child-tag-name</th><td>The name of the tag to 
> enclose named 
> + items (i.e. the subnavigation)
> + * of non-selected items. If a value is not specified then no 
> + sub-navigation named items will be
> + * generated.</td>
> + *      <td></td><td>String</td><td><code>""</code></td></tr>
>   * </tbody></table>
>   *
>   * @author <a href="mailto:[EMAIL PROTECTED]">Carsten 
> Ziegeler</a> @@ -95,6 +118,7 @@
>              // loop over all tabs
>              for (int j = 0; j < tabLayout.getSize(); j++) {
>                  Item tab = tabLayout.getItem(j);
> +                ChangeAspectDataEvent event = null;
>  
>                  // open named-item tag
>                  attributes.clear();
> @@ -104,7 +128,7 @@
>                  if (j == selected) {
>                      attributes.addCDATAAttribute("selected", "true");
>                  }
> -                ChangeAspectDataEvent event = new 
> ChangeAspectDataEvent(tabLayout, config.aspectName, new Integer(j)); 
> +                event = new ChangeAspectDataEvent(tabLayout, 
> + config.aspectName, new Integer(j));
>                  attributes.addCDATAAttribute("parameter", 
> service.getComponentManager().getLinkService().getLinkURI(event)); 
>  
>                  // add parameters
> @@ -117,7 +141,12 @@
>                  XMLUtils.startElement(handler, "named-item", 
> attributes);
>                  if (j == selected) {
>                      this.processLayout(tab.getLayout(), 
> service, handler);
> +                } else if (config.showAllNav) {
> +                    List events = new ArrayList();
> +                    events.add(event);
> +                    this.processNav(context, 
> tab.getLayout(), service, 
> + handler, events);
>                  }
> +
>                  // close named-item tag
>                  XMLUtils.endElement(handler, "named-item");
>              }
> @@ -128,8 +157,6 @@
>          } else {
>              throw new SAXException("Wrong layout type, 
> TabLayout expected: " + layout.getClass().getName());
>          }
> -
> -
>      }
>  
>      /**
> @@ -148,14 +175,89 @@
>          return Collections.singletonList(desc).iterator();
>      }
>  
> +    /*
> +     * Generate the sub navigation for non-selected tabs
> +     * @param context
> +     * @param layout
> +     * @param service
> +     * @param handler
> +     * @throws SAXException
> +     */
> +    private void processNav(RendererAspectContext context,
> +                            Layout layout,
> +                            PortalService service,
> +                            ContentHandler handler,
> +                            List parentEvents)
> +        throws SAXException {
> +        if (layout instanceof CompositeLayout) {
> +            CompositeLayout tabLayout = (CompositeLayout)layout;
> +
> +            if (tabLayout.getSize() == 0) {
> +                return;
> +            }
> +            TabPreparedConfiguration config =
> +                (TabPreparedConfiguration) 
> context.getAspectConfiguration();
> +            AttributesImpl attributes = new AttributesImpl();
> +            boolean subNav = false;
> +
> +            // loop over all tabs
> +            for (int j = 0; j < tabLayout.getSize(); j++) {
> +                Item tab = tabLayout.getItem(j);
> +
> +                // open named-item tag
> +                attributes.clear();
> +                if (tab instanceof NamedItem) {
> +                    if (!subNav) {
> +                        XMLUtils.startElement(handler, 
> config.childTagName);
> +                        subNav = true;
> +                    }
> +                    attributes.addCDATAAttribute("name",
> +                        String.valueOf(((NamedItem) tab).getName()));
> +                    ChangeAspectDataEvent event = new 
> ChangeAspectDataEvent(tabLayout,
> +                        config.aspectName, new Integer(j));
> +                    List events = new ArrayList(parentEvents);
> +                    events.add(event);
> +
> +                    attributes.addCDATAAttribute("parameter",
> +                        
> + service.getComponentManager().getLinkService().getLinkURI(events));
> +
> +                    // add parameters
> +                    final Iterator iter = 
> tab.getParameters().entrySet().iterator();
> +                    while (iter.hasNext()) {
> +                        final Map.Entry entry = (Map.Entry) 
> iter.next();
> +                        
> attributes.addCDATAAttribute((String) entry.getKey(),
> +                            (String) entry.getValue());
> +                    }
> +
> +                    XMLUtils.startElement(handler, "named-item", 
> + attributes);
> +
> +                    this.processNav(context, 
> tab.getLayout(), service, 
> + handler, events);
> +
> +                    // close named-item tag
> +                    XMLUtils.endElement(handler, "named-item");
> +                }
> +
> +
> +            }
> +            // close sub-nav tag
> +            if (subNav) {
> +                XMLUtils.endElement(handler, config.childTagName);
> +            }
> +        }
> +    }
> +
>      protected class TabPreparedConfiguration extends 
> PreparedConfiguration {
>          public String aspectName;
>          public String store;
> -        
> +        public boolean showAllNav = false;
> +        public String childTagName;
> +
>          public void takeValues(TabPreparedConfiguration from) {
>              super.takeValues(from);
>              this.aspectName = from.aspectName;
>              this.store = from.store;
> +            this.showAllNav = from.showAllNav;
> +            this.childTagName = from.childTagName;
>          }
>      }
>      
> @@ -168,6 +270,10 @@
>          
> pc.takeValues((PreparedConfiguration)super.prepareConfiguratio
> n(configuration));
>          pc.aspectName = 
> configuration.getParameter("aspect-name", "tab");
>          pc.store = configuration.getParameter("store");
> +        pc.childTagName = 
> configuration.getParameter("child-tag-name", "");
> +        if (!pc.childTagName.equals("")) {
> +            pc.showAllNav = true;
> +        }
>          return pc;
>      }
>  
> 

Reply via email to