package hirondelle.fish.main.visit;
import java.util.Locale;
import java.util.logging.Logger;
import hirondelle.web4j.Controller;
import hirondelle.web4j.action.ResponsePage;
import hirondelle.web4j.util.Util;
/**
Example implementation of translation by using multiple JSPs.
<P>The one-JSP-per-language style is implemented by providing an override for
{@link Controller#swapResponsePage(ResponsePage , Locale)}, as done here.
<P><span class="highlight">This style of implementing translation is not recommended,
since it causes so much repetition of identical markup across many JSPs.</span>
The services of the <tt>hirondelle.web4j.ui.translate</tt> package should
be used instead.
<P>Here, only one particular feature is affected - the Visits page, which is
split into <tt>Visit_en.jsp</tt> and <tt>Visit_fr.jsp</tt>, when this
custom Controller is used.
<P>(The <tt>Visit.jsp</tt> page uses the recommended style of translation,
where markup is not repeated across multiple pages.)
<P>This example is not complete - it merely exercises the general mechanism. To run it,
edit the <tt>servlet-class</tt> setting in <tt>web.xml</tt> to refer to <em>this</em>
custom Controller class. After starting the app, then navigate to the <tt>Visits</tt> page,
and flip the Locale using the <tt>Preferences</tt> page. This will exercise the mechanism.
*/
public final class CustomController extends Controller {
/**
Returns a non-<tt>null</tt> value only if <tt>aResponsePage</tt> ends with <tt>'Visit.jsp'</tt>.
*/
@Override protected ResponsePage swapResponsePage(ResponsePage aResponsePage, Locale aLocale){
fLogger.fine("Custom Controller : " + aResponsePage);
ResponsePage result = null;
if (aResponsePage.toString().endsWith("Visit.jsp")){
int idx = aResponsePage.toString().indexOf("Visit.jsp");
String alteredURI = aResponsePage.toString().substring(0,idx) + "Visit_" + aLocale.toString() + ".jsp";
fLogger.fine("Forward Response Page updated for locale: " + alteredURI);
result = new ResponsePage(alteredURI).setIsRedirect(Boolean.FALSE);
}
return result;
}
// PRIVATE //
private static final Logger fLogger = Util.getLogger(CustomController.class);
}