1 package org.apache.jetspeed.services.jsp.tags;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import javax.servlet.jsp.JspException;
21 import javax.servlet.jsp.PageContext;
22 import javax.servlet.jsp.tagext.TagSupport;
23
24
25 import org.apache.turbine.util.DynamicURI;
26 import org.apache.turbine.services.jsp.JspService;
27
28
29 import org.apache.ecs.ConcreteElement;
30 import org.apache.ecs.StringElement;
31
32
33 import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
34 import org.apache.jetspeed.services.logging.JetspeedLogger;
35 import org.apache.jetspeed.services.rundata.JetspeedRunData;
36 import org.apache.jetspeed.services.forward.ForwardService;
37 import org.apache.jetspeed.util.ServiceUtil;
38
39 /***
40 * Supporting class for the forward tag. Enables forwarding navigation to other pages or panes
41 * in the portal. If "name" and "target" are both specified, the "name" is assumed to be a portlet.
42 * If only "name" is specified, the name is assumed to be a logical forward name.
43 *
44 * @author <a href="mailto:morciuch@apache.org">Mark Orciuch</a>
45 * @version $Id: JetspeedForwardTag.java,v 1.3 2004/02/23 03:59:40 jford Exp $
46 * @see org.apache.jetspeed.services.forward.ForwardService#forward(RunData rundata, String forwardName)
47 * @see org.apache.jetspeed.services.forward.ForwardService#forward(RunData rundata, String portlet, String target)
48 * @since 1.4b4
49 */
50 public class JetspeedForwardTag extends TagSupport
51 {
52 /***
53 * Static initialization of the logger for this class
54 */
55 private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(JetspeedForwardTag.class.getName());
56
57 private String name = null;
58 private String target = null;
59
60 public void setName(String name)
61 {
62 this.name = name;
63 }
64
65 public String getName()
66 {
67 return this.name;
68 }
69
70 public void setTarget(String target)
71 {
72 this.target = target;
73 }
74
75 public String getTarget()
76 {
77 return this.target;
78 }
79
80 /***
81 * Method called when the tag is encountered to send attributes to the
82 * output stream
83 *
84 * @return SKIP_BODY, as it is intended to be a single tag.
85 */
86 public int doStartTag() throws JspException
87 {
88 JetspeedRunData data = (JetspeedRunData) pageContext.getAttribute(JspService.RUNDATA, PageContext.REQUEST_SCOPE);
89
90 try
91 {
92 ConcreteElement result = null;
93 DynamicURI uri = null;
94 ForwardService service = (ForwardService) ServiceUtil.getServiceByName(ForwardService.SERVICE_NAME);
95
96 if (this.name != null && this.target != null)
97 {
98 uri = service.forward(data, this.name, this.target);
99 }
100 else if (this.getName() != null)
101 {
102 uri = service.forward(data, this.name);
103 }
104 if (uri != null)
105 {
106 result = new StringElement(uri.toString());
107 }
108
109
110 if (result != null)
111 {
112 pageContext.getOut().print(result);
113 }
114
115 }
116 catch (Exception e)
117 {
118 String message = "Error processing name '" + name + "'.";
119 logger.error(message, e);
120 try
121 {
122 data.getOut().print("Error processing forward name '" + name + "'. See log for more information.");
123 }
124 catch (java.io.IOException ioe)
125 {
126 }
127 }
128 return EVAL_BODY_INCLUDE;
129 }
130 }