1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package net.sf.tapfx.components.outlookbar;
17  
18  import org.apache.commons.logging.Log;
19  import org.apache.commons.logging.LogFactory;
20  import org.apache.tapestry.IActionListener;
21  import org.apache.tapestry.IDirect;
22  import org.apache.tapestry.IRequestCycle;
23  import org.apache.tapestry.Tapestry;
24  import org.apache.tapestry.engine.DirectServiceParameter;
25  import org.apache.tapestry.engine.IEngineService;
26  import org.apache.tapestry.engine.ILink;
27  
28  import net.sf.tapfx.components.TapFXBaseComponent;
29  
30  /***
31   * This component renders a pane.
32   * The pane in turn encloses the link
33   * components.
34   * <p/>
35   * A pane, in Outlook, is what you click
36   * on and which slides up or down to reveal
37   * other panes.
38   *
39   * @author Joshua Long (josh@joshlong.com)
40   * @author andyhot
41   * @version $Id: OutlookPane.java,v 1.2 2005/11/04 23:38:08 andyhot Exp $
42   */
43  public abstract class OutlookPane extends TapFXBaseComponent implements
44          IDirect
45  {
46      private static final Log log =
47              LogFactory.getLog(OutlookPane.class);
48  
49      private static final String OUTLOOK_PANE_COUNT =
50              "net.sf.tapfx.components.outlookbar.outlook_pane_count";
51  
52      private String prefix;
53  
54      public abstract String getTitle();
55      public abstract void setTitle(String title);
56  
57      public abstract IActionListener getListener();
58      public abstract void setListener(IActionListener listener);
59  
60      public abstract String getDirectUrl();
61      public abstract void setDirectUrl(String directUrl);
62  
63      public abstract String getShowjavaScript();
64      public abstract void setShowjavaScript(String showjavaScript);
65  
66      public abstract String getPaneId();
67      public abstract void setPaneId(String paneId);
68      
69      public abstract IEngineService getDirectService();
70      
71      public abstract String getSelection();
72      public abstract void setSelection(String selection);    
73  
74      public boolean isStateful()
75      {
76          return true;
77      }
78  
79      public String getPrefix()
80      {
81          return prefix;
82      }
83  
84      static void setOutlookPaneCount(IRequestCycle cycle, Integer pane_count)
85      {
86          cycle.setAttribute(OutlookPane.OUTLOOK_PANE_COUNT, pane_count);
87      }
88  
89      static Integer getOutlookPaneCount(IRequestCycle cycle)
90      {
91          return (Integer) cycle.getAttribute(OutlookPane.OUTLOOK_PANE_COUNT);
92      }
93  
94      public void trigger(IRequestCycle cycle)
95      {
96          Object[] params = cycle.getListenerParameters();
97          for (int i = 0; i < params.length; i++)
98          {
99              log.debug("Inside trigger(), the param is " + params[i]);
100         }
101         
102         {
103         	setSelection((String)params[0]);
104             
105         }
106     }
107 
108     protected void setupComponent(IRequestCycle cycle)
109     {
110         Integer bar_count = OutlookBar.getOutlookBarCount(cycle);
111         if (null == bar_count)
112         {
113             throw Tapestry.createRequiredParameterException(this,
114                     "You need to provide a @OutlookBar around this component!");
115         }
116         prefix = OutlookBar.getOutlookBar(cycle).getPrefix();
117         log.debug("Inside of a pane, the bar count is " + bar_count.intValue());
118         Integer pane_count = getOutlookPaneCount(cycle);
119         if (null == pane_count)
120         {
121             pane_count = new Integer(0);
122         }
123         else
124         {
125             pane_count = new Integer(pane_count.intValue() + 1);
126         }
127         setOutlookPaneCount(cycle, pane_count);
128         log.debug("inside a pane, the pane count is " + pane_count);
129         String id = "$" + 
130                 pane_count.intValue();
131         String parent = OutlookBar.getOutlookBarCurrentId(cycle);
132         id = parent + id;
133         setPaneId(id);
134         setShowjavaScript("tapfx_showPanel('" + parent + "','" + id + "');");
135         OutlookBar.setOutlookBarAggregateId(cycle, id);
136         Object[] params = {id};        
137         DirectServiceParameter directParams = new DirectServiceParameter(this, params);
138         ILink link = getDirectService().getLink(cycle, false, directParams);        
139         String url = link.getURL();
140         setDirectUrl(url);
141         if (OutlookBar.getOutlookBar(cycle).getForceSession())
142         {
143             setShowjavaScript("window.location='" + url + "';");
144         }
145     }
146 }
147 
148