KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > portal > core > theme > tag > basic > IterateTag


1 /*****************************************
2  * *
3  * JBoss Portal: The OpenSource Portal *
4  * *
5  * Distributable under LGPL license. *
6  * See terms of license at gnu.org. *
7  * *
8  *****************************************/

9 package org.jboss.portal.core.theme.tag.basic;
10
11 import org.jboss.portal.server.PortalRequest;
12 import org.jboss.portal.server.PortalResponse;
13 import org.jboss.portal.server.PortalServer;
14 import org.jboss.portal.server.ServerObjectID;
15 import org.jboss.portal.server.Window;
16 import org.jboss.portal.server.WindowContext;
17 import org.jboss.portal.server.WindowURL;
18 import org.jboss.portal.server.output.FragmentResult;
19 import org.jboss.portal.server.plugins.mode.Mode;
20 import org.jboss.portal.server.plugins.windowstate.WindowState;
21 import org.jboss.portal.server.theme.Item;
22 import org.jboss.portal.server.theme.PageHolder;
23 import org.jboss.portal.server.theme.Region;
24 import org.jboss.portal.server.theme.RegionSet;
25
26 import javax.servlet.jsp.JspException JavaDoc;
27 import javax.servlet.jsp.tagext.BodyTagSupport JavaDoc;
28 import javax.servlet.jsp.tagext.IterationTag JavaDoc;
29 import javax.servlet.jsp.tagext.Tag JavaDoc;
30 import java.io.StringWriter JavaDoc;
31 import java.util.ArrayList JavaDoc;
32 import java.util.HashSet JavaDoc;
33 import java.util.Iterator JavaDoc;
34 import java.util.List JavaDoc;
35 import java.util.Set JavaDoc;
36 import java.util.StringTokenizer JavaDoc;
37
38 /**
39  * @author <a HREF="mailto:julien@jboss.org">Julien Viet</a>
40  * @version $Revision: 1.3 $
41  */

42 public class IterateTag extends BodyTagSupport JavaDoc
43 {
44
45    /**
46     * .
47     */

48    private String JavaDoc region;
49
50    /**
51     * .
52     */

53    private Iterator JavaDoc iterator;
54
55    /**
56     * .
57     */

58    private FragmentResult fragment;
59
60    /**
61     * .
62     */

63    private PortalServer server;
64
65    /**
66     * Window.
67     */

68    Window window;
69
70    /**
71     * Portal response to encode URL.
72     */

73    PortalResponse resp;
74
75    /**
76     * Window url.
77     */

78    WindowURL navURL;
79
80    public String JavaDoc getRegion()
81    {
82       return region;
83    }
84
85    public void setRegion(String JavaDoc region)
86    {
87       this.region = region;
88    }
89
90    // BodyTag implementation *******************************************************************************************
91

92    private boolean next()
93    {
94       if (iterator.hasNext())
95       {
96          Item item = (Item)iterator.next();
97          fragment = item.getFragment();
98
99          //
100
WindowContext wctx = fragment.getProducer();
101          ServerObjectID id = wctx.getID();
102          window = (Window)server.getObject(id);
103
104          //
105
navURL = (WindowURL)window.createURL();
106          navURL.setType(WindowURL.TYPE_NAVIGATION);
107
108          //
109
String JavaDoc title = fragment.getTitle();
110          pageContext.setAttribute(IterateTEI.IMPLICIT_TITLE, String.valueOf(title));
111
112          //
113
StringWriter JavaDoc chars = fragment.getChars();
114          String JavaDoc content = chars == null ? "" : chars.toString();
115          pageContext.setAttribute(IterateTEI.IMPLICIT_CONTENT, content);
116
117          //
118
pageContext.setAttribute(IterateTEI.IMPLICIT_CURRENT_MODE, String.valueOf(wctx.getMode()));
119
120          //
121
Set modes = new HashSet JavaDoc();
122          for (Iterator JavaDoc i = window.getSupportedModes("text/html").iterator(); i.hasNext();)
123          {
124             Mode mode = (Mode)i.next();
125             modes.add(mode.toString());
126          }
127          pageContext.setAttribute(IterateTEI.IMPLICIT_SUPPORTED_MODES, modes);
128
129          //
130
pageContext.setAttribute(IterateTEI.IMPLICIT_CURRENT_WINDOW_STATE, String.valueOf(wctx.getWindowState()));
131
132          //
133
Set windowStates = new HashSet JavaDoc();
134          for (Iterator JavaDoc i = window.getSupportedWindowStates().iterator(); i.hasNext();)
135          {
136             WindowState windowState = (WindowState)i.next();
137             windowStates.add(windowState.toString());
138          }
139          pageContext.setAttribute(IterateTEI.IMPLICIT_SUPPORTED_WINDOW_STATES, windowStates);
140
141          return true;
142       }
143       else
144       {
145          fragment = null;
146          return false;
147       }
148    }
149
150    public int doStartTag() throws JspException JavaDoc
151    {
152       PortalRequest preq = (PortalRequest)pageContext.getRequest().getAttribute("REQ");
153       PageHolder page = (PageHolder)pageContext.getRequest().getAttribute("PAGE");
154       RegionSet regions = page.getRegions();
155
156       // Build the fragment list
157
List JavaDoc items = new ArrayList JavaDoc(10);
158       for (StringTokenizer JavaDoc tokenizer = new StringTokenizer JavaDoc(this.region, ","); tokenizer.hasMoreTokens();)
159       {
160          String JavaDoc token = tokenizer.nextToken().trim();
161          Region region = regions.getRegion(token);
162          if (region != null)
163          {
164             for (Iterator JavaDoc i = region.items(); i.hasNext();)
165             {
166                Item item = (Item)i.next();
167                items.add(item);
168             }
169          }
170       }
171
172       //
173
resp = (PortalResponse)pageContext.getRequest().getAttribute("RESP");
174       server = preq.getServer();
175       iterator = items.iterator();
176       if (next())
177       {
178          return Tag.EVAL_BODY_INCLUDE;
179       }
180       else
181       {
182          return Tag.SKIP_BODY;
183       }
184    }
185
186    public int doAfterBody() throws JspException JavaDoc
187    {
188       if (next())
189       {
190          return IterationTag.EVAL_BODY_AGAIN;
191       }
192       else
193       {
194          return IterationTag.SKIP_BODY;
195       }
196    }
197
198    public int doEndTag() throws JspException JavaDoc
199    {
200       resp = null;
201       iterator = null;
202       server = null;
203       fragment = null;
204       window = null;
205       resp = null;
206       navURL = null;
207       return Tag.EVAL_PAGE;
208    }
209 }
210
Popular Tags