1 /**
2 *
3 */
4 package sf.net.kayestry;
5
6 import org.apache.tapestry.IPage;
7 import org.apache.tapestry.IRequestCycle;
8 import org.apache.tapestry.RedirectException;
9 import org.apache.tapestry.Tapestry;
10 import org.apache.tapestry.engine.IEngineService;
11 import org.apache.tapestry.engine.ILink;
12 import org.apache.tapestry.link.StaticLink;
13
14 /**
15 * Operaciones comunes con Tapestry.
16 *
17 * @author lparra
18 *
19 */
20 public class TapestryUtils {
21 private TapestryUtils() {
22 }
23
24 /**
25 * Realiza un redirect hacia otra pagina. Le devuelve al cliente un 302.
26 *
27 * @param cycle
28 * @param page
29 * El nombre de la pagina a redireccionar.
30 * @throws RedirectException
31 * La tira siempre para indicar a Tapestry hacia donde redirigir
32 * al cliente.
33 */
34 public static void redirectTo(IRequestCycle cycle, String page)
35 throws RedirectException {
36 throw new RedirectException(createLink(cycle, page).getURL());
37 }
38
39 /**
40 * Genera un link absoluto a una pagina. Se puede usar para crear una
41 * redireccion a una pagina.
42 *
43 * @param cycle
44 * @param page
45 * @return
46 */
47 public static ILink createLink(IRequestCycle cycle, String page) {
48 IEngineService service = cycle.getEngine().getService(
49 Tapestry.PAGE_SERVICE);
50 ILink link = service.getLink(cycle, cycle.getPage(),
51 new String[] { page });
52 return link;
53 }
54
55 /**
56 * Redirecciona a un service.
57 *
58 * @param cycle
59 * @param serviceName
60 * @throws RedirectException
61 */
62 public static void serviceRedirect(IRequestCycle cycle, String serviceName)
63 throws RedirectException {
64 throw new RedirectException(createServiceLink(cycle, serviceName)
65 .getURL());
66 }
67
68 /**
69 * Genera un link a un servicio.
70 *
71 * @param cycle
72 * @param serviceName
73 * El nombre del servicio.
74 * @return
75 */
76 public static ILink createServiceLink(IRequestCycle cycle,
77 String serviceName) {
78
79
80 ILink link = createLinkToHome(cycle);
81 String aux = link.getAbsoluteURL();
82
83 aux = aux.substring(0, aux.indexOf('?') + 1);
84 link = new StaticLink(aux + "service=" + serviceName);
85
86 return link;
87 }
88
89 /**
90 * Crea un link a la pagina de error.
91 *
92 * @param cycle
93 * @see TapestryGlobals#ERROR_PAGE
94 */
95 public static ILink createLinkToError(IRequestCycle cycle) {
96 return createLink(cycle, Globals.ERROR_PAGE);
97 }
98
99 /**
100 * Crea un link a la pagina de login.
101 *
102 * @param cycle
103 * @see Globals#LOGIN_PAGE
104 */
105 public static ILink createLinkToLogin(IRequestCycle cycle) {
106 return createLink(cycle, Globals.LOGIN_PAGE);
107 }
108
109 /**
110 * Crea un link a la pagina de logout.
111 *
112 * @param cycle
113 * @see Globals#LOGOUT_PAGE
114 */
115 public static ILink createLinkToLogout(IRequestCycle cycle) {
116 return createLink(cycle, Globals.LOGOUT_PAGE);
117 }
118
119 /**
120 * Crea un link a la pagina del home.
121 *
122 * @param cycle
123 * @see Globals#HOME_PAGE
124 */
125 public static ILink createLinkToHome(IRequestCycle cycle) {
126 return createLink(cycle, Globals.HOME_PAGE);
127 }
128
129 /**
130 * Crea un link a la pagina de acceso denegado.
131 *
132 * @param cycle
133 * @see Globals#ACCESS_DENIED_PAGE
134 */
135 public static ILink createLinkToAccessDenied(IRequestCycle cycle) {
136 return createLink(cycle, Globals.ACCESS_DENIED_PAGE);
137 }
138
139 /**
140 * Redirecciona a la pagina de error.
141 *
142 * @param cycle
143 * @see TapestryGlobals#ERROR_PAGE
144 */
145 public static void redirectToError(IRequestCycle cycle) {
146 redirectTo(cycle, Globals.ERROR_PAGE);
147 }
148
149 /**
150 * Redirecciona a la pagina de login.
151 *
152 * @param cycle
153 * @see Globals#LOGIN_PAGE
154 */
155 public static void redirectToLogin(IRequestCycle cycle) {
156 redirectTo(cycle, Globals.LOGIN_PAGE);
157 }
158
159 /**
160 * Redirecciona a la pagina de logout.
161 *
162 * @param cycle
163 * @see Globals#LOGOUT_PAGE
164 */
165 public static void redirectToLogout(IRequestCycle cycle) {
166 redirectTo(cycle, Globals.LOGOUT_PAGE);
167 }
168
169 /**
170 * Redirecciona a la pagina del home.
171 *
172 * @param cycle
173 * @see Globals#HOME_PAGE
174 */
175 public static void redirectToHome(IRequestCycle cycle) {
176 redirectTo(cycle, Globals.HOME_PAGE);
177 }
178
179 /**
180 * Redirecciona a la pagina de acceso denegado.
181 *
182 * @param cycle
183 * @see Globals#ACCESS_DENIED_PAGE
184 */
185 public static void redirectToAccessDenied(IRequestCycle cycle) {
186 redirectTo(cycle, Globals.ACCESS_DENIED_PAGE);
187 }
188
189 /**
190 * Obtiene el objeto visit.
191 *
192 * @param page
193 * @return
194 */
195 public static Visit getVisit(IPage page) {
196 return (Visit) page.getVisit();
197 }
198
199 /**
200 * Obtiene el objeto visit. Este metodo es util cuando no se esta en una
201 * pagina como por ejemplo en el request de un servicio.
202 *
203 * @param cycle
204 * @return
205 */
206 public static Visit getVisit(IRequestCycle cycle) {
207 return (Visit) cycle.getEngine().getVisit();
208 }
209 }