View Javadoc

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  		// TODO: seguro hay una forma mas elegante de hacerlo
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 }