01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17: package org.apache.wicket.examples.hellobrowser;
18:
19: import java.text.DateFormat;
20: import java.util.Calendar;
21: import java.util.Locale;
22: import java.util.TimeZone;
23:
24: import org.apache.wicket.examples.WicketExamplePage;
25: import org.apache.wicket.markup.html.basic.Label;
26: import org.apache.wicket.markup.html.basic.MultiLineLabel;
27: import org.apache.wicket.model.AbstractReadOnlyModel;
28: import org.apache.wicket.model.IModel;
29: import org.apache.wicket.protocol.http.ClientProperties;
30: import org.apache.wicket.protocol.http.request.WebClientInfo;
31:
32: /**
33: * Client snooping page.
34: *
35: * @author Eelco Hillenius
36: */
37: public class HelloBrowser extends WicketExamplePage {
38: /**
39: * Construct.
40: */
41: public HelloBrowser() {
42: // add a label that outputs a the client info object; it will result in
43: // the calls RequestCycle.getClientInfo -> Session.getClientInfo ->
44: // RequestCycle.newClientInfo. this is done once by default and
45: // afterwards cached in the session object. This application uses
46: // a custom requestcycle that overrides newClientInfo to not only
47: // look at the user-agent request header, but also snoops javascript
48: // properties by redirecting to a special page.
49:
50: // don't use a property model here or anything else that is resolved
51: // during rendering, as changing the request target during rendering
52: // is not allowed.
53: final ClientProperties properties = ((WebClientInfo) getRequestCycle()
54: .getClientInfo()).getProperties();
55:
56: add(new MultiLineLabel("clientinfo", properties.toString()));
57:
58: IModel clientTimeModel = new AbstractReadOnlyModel() {
59: /**
60: * @see org.apache.wicket.model.AbstractReadOnlyModel#getObject()
61: */
62: public Object getObject() {
63: TimeZone timeZone = properties.getTimeZone();
64: if (timeZone != null) {
65: Calendar cal = Calendar.getInstance(timeZone);
66: Locale locale = getLocale();
67: DateFormat dateFormat = DateFormat.getTimeInstance(
68: DateFormat.LONG, locale);
69: String calAsString = dateFormat.format(cal
70: .getTime());
71: StringBuffer b = new StringBuffer(
72: "Based on your settings, your time is: ");
73: b.append(calAsString);
74: b.append(" (and your time zone is ");
75: b.append(timeZone.getDisplayName(getLocale()));
76: b.append(")");
77: return b.toString();
78: }
79: return "Unfortunately, we were not able to figure out what your time zone is, so we have"
80: + "no idea what your time is";
81: }
82: };
83: add(new Label("clienttime", clientTimeModel));
84: }
85: }
|