Thank you, Robert and Matt, for you helpful hints.

I'll write some test cases (since I like TDD) and send them back to you.
Once I get this working, perhaps we could think about committing it so it
becomes a default "feature" of Tapestry. Seems to be that this should be
included in the platform.


Cheers,
Dave




> -----Original Message-----
> From: Robert Walker [mailto:[EMAIL PROTECTED]
> Sent: 13 April 2005 01:00
> To: Tapestry users
> Subject: RE: Browser detection component?
>
>
> Here's one I wrote for my current project. Feel free to suggest
> improvements.
>
> Robert
>
>
> /**
>  * Class that represents what we know about the client machine.
>  */
> public class Client {
>     public static final String WINDOWS = "windows";
>     public static final String MAC = "mac";
>
>     public static final String IE = "msie";
>     public static final String FIREFOX = "firefox";
>     public static final String MOZILLA = "mozilla"; // NOT Firefox
>     public static final String SAFARI = "safari";
>     public static final String OPERA = "opera";
>
>     public static final String UNKNOWN = "unknown";
>
>     private String ua;
>     private String os;
>     private String browser;
>
>     public Client(IRequestCycle cycle) {
>         this(cycle.getRequestContext().getRequest());
>     }
>
>     public Client(HttpServletRequest request) {
>         ua = request.getHeader(USER_AGENT);
>
>         if(ua != null) {
>             ua = ua.toLowerCase();
>         } else {
>             os = UNKNOWN;
>             browser = UNKNOWN;
>         }
>     }
>
>     /**
>      * Returns a String representing the client OS. Returns
> Client.WINDOWS, Client.MAC or
>      * Client.UNKNOWN.
>      * @return String
>      */
>     public String getOs() {
>         if(os == null) {
>             if(ua.indexOf(MAC) > -1) os = MAC;
>             else if(ua.indexOf(WINDOWS) > -1) os = WINDOWS;
>             else os = UNKNOWN;
>         }
>
>         return os;
>     }
>
>     /**
>      * Returns a String representing the client browser. Returns
> Client.IE, Client.FIREFOX,
>      * Client.MOZILLA, Client.SAFARI, Client.OPERA or Client.UNKNOWN.
>      * @return String
>      */
>     public String getBrowser() {
>         if(browser == null) {
>             /*
>              * Opera's user agent string contains "msie," so check for
> it before checking for
>              * IE. Same for checking for Firefox before Mozilla.
>              */
>             if(ua.indexOf(SAFARI) > -1) browser = SAFARI;
>             else if(ua.indexOf(OPERA) > -1) browser = OPERA;
>             else if(ua.indexOf(IE) > -1) browser = IE;
>             else if(ua.indexOf(FIREFOX) > -1) browser = FIREFOX;
>             else if(ua.indexOf(MOZILLA) > -1) browser = MOZILLA;
>             else browser = UNKNOWN;
>         }
>
>         return browser;
>     }
>
>     /**
>      * Returns true if the client OS matches the given one; false
> otherwise.
>      * @param String osCheck
>      * @return boolean
>      */
>     public boolean checkOs(String osCheck) {
>         return getOs().equals(osCheck);
>     }
>
>     /**
>      * Returns true if the client browser matches the given one; false
> otherwise.
>      * @param String browserCheck
>      * @return boolean
>      */
>     public boolean checkBrowser(String browserCheck) {
>         return getBrowser().equals(browserCheck);
>     }
>
>     /**
>      * Returns true if the client OS and browser match the given ones;
> false otherwise.
>      * @param String osCheck
>      * @param String browserCheck
>      * @return boolean
>      */
>     public boolean check(String osCheck, String browserCheck) {
>         return checkOs(osCheck) && checkBrowser(browserCheck);
>     }
> }
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to