001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package com.sun.rave.web.ui.appbase;
043:
044: import java.util.Locale;
045:
046: /**
047: * <p><strong>AbstractApplicationBean</strong> is the abstract base class for
048: * data bean(s) that are stored in application scope attributes. It extends
049: * {@link FacesBean}, so it inherits all of the default behavior
050: * found there. In addition, the following lifecycle methods are called
051: * automatically when the corresponding events occur:</p>
052: * <ul>
053: * <li><code>init()</code> - Called when this bean is initially added as an
054: * application scope attribute (typically as the result of
055: * evaluating a value binding or method binding expression).</li>
056: * <li><code>destroy()</code> - Called when the bean is removed from the
057: * application attributes (typically as a result of the application
058: * being shut down by the servlet container).</li>
059: * </ul>
060: */
061: public abstract class AbstractApplicationBean extends FacesBean {
062:
063: // ------------------------------------------------------------- Constructor
064:
065: /**
066: * <p>Create a new application scope bean.</p>
067: */
068: public AbstractApplicationBean() {
069: }
070:
071: // ------------------------------------------------------ Instance Variables
072:
073: /**
074: * <p>Mapping from the String version of the <code>Locale</code> for
075: * this response to the corresponding character encoding. For each
076: * row, the first String is the value returned by the toString() method
077: * for the java.util.Locale for the current view, and the second
078: * String is the name of the character encoding to be used.</p>
079: *
080: * <p>Only locales that use an encoding other than the default (UTF-8)
081: * need to be listed here.</p>
082: */
083: protected String encoding[][] = { { "zh_CN", "GB2312" }, // NOI18N
084: };
085:
086: // -------------------------------------------------------------- Properties
087:
088: /**
089: * <p>Return an appropriate character encoding based on the
090: * <code>Locale</code> defined for the current JavaServer Faces
091: * view. If no more suitable encoding can be found, return
092: * "UTF-8" as a general purpose default.</p>
093: *
094: * <p>This method makes a convenient value binding target for the
095: * <code>value</code> property of a <em>Set Encoding</em> component.
096: * Applications that wish to specialize this behavior can override
097: * this method in their own application bean class.</p>
098: */
099: public String getLocaleCharacterEncoding() {
100:
101: // Return the appropriate character encoding for this locale (if any)
102: Locale locale = getFacesContext().getViewRoot().getLocale();
103: if (locale == null) {
104: locale = Locale.getDefault();
105: }
106: String match = locale.toString();
107: for (int i = 0; i < encoding.length; i++) {
108: if (match.equals(encoding[i][0])) {
109: return encoding[i][1];
110: }
111: }
112:
113: // Return the default encoding value
114: return "UTF-8"; // NOI18N
115:
116: }
117:
118: // ------------------------------------------------------- Lifecycle Methods
119:
120: /**
121: * <p>This method is called when this bean is initially added to
122: * application scope. Typically, this occurs as a result of evaluating
123: * a value binding or method binding expression, which utilizes the
124: * managed bean facility to instantiate this bean and store it into
125: * application scope.</p>
126: *
127: * <p>You may customize this method to initialize and cache application wide
128: * data values (such as the lists of valid options for dropdown list
129: * components), or to allocate resources that are required for the
130: * lifetime of the application.</p>
131: */
132: public void init() {
133:
134: // The default implementation does nothing
135:
136: }
137:
138: /**
139: * <p>This method is called when this bean is removed from
140: * application scope. Typically, this occurs as a result of
141: * the application being shut down by its owning container.</p>
142: *
143: * <p>You may customize this method to clean up resources allocated
144: * during the execution of the <code>init()</code> method, or
145: * at any later time during the lifetime of the application.</p>
146: */
147: public void destroy() {
148:
149: // The default implementation does nothing
150:
151: }
152:
153: }
|