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-2006 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: package org.netbeans.spi.xml.cookies;
042:
043: import org.openide.ErrorManager;
044: import org.openide.util.Lookup;
045: import org.openide.util.NbBundle;
046:
047: /**
048: *
049: * @author Libor Kramolis
050: */
051: class Util {
052:
053: /** Default and only one instance of this class. */
054: public static final Util THIS = new Util();
055:
056: /** Nobody can create instance of it, just me. */
057: private Util() {
058: }
059:
060: /** Cached package name. */
061: private String packageName;
062: /** Instance package ErrorManager. */
063: private ErrorManager packageErrorManager;
064: /** Default debug severity used with ErrorManager. */
065: private static final int DEBUG_SEVERITY = ErrorManager.INFORMATIONAL;
066:
067: /**
068: * @return package name of this instance
069: */
070: private final synchronized String getPackageName() {
071: if (packageName == null) {
072: //??? what for classed from default package? -> A: we do not have classes in default package!
073: packageName = this .getClass().getPackage().getName()
074: .intern();
075: }
076: return packageName;
077: }
078:
079: //
080: // String localizing purposes
081: //
082:
083: /**
084: * Get localized string from package bundle.
085: * @param key Key identifing localized value.
086: * @return localized value.
087: */
088: public final String getString(String key) {
089: if (key == null)
090: throw new NullPointerException();
091: return NbBundle.getMessage(this .getClass(), key);
092: }
093:
094: /**
095: * Get localized string from package bundle.
096: * @param key Key identifing localized value (<code>MessageFormat</code>).
097: * @param param An argument <code>{0}</code> used for message parametrization.
098: * @return localized value.
099: */
100: public final String getString(String key, Object param) {
101: if (key == null)
102: throw new NullPointerException();
103: return NbBundle.getMessage(this .getClass(), key, param);
104: }
105:
106: /**
107: * Get localized string from package bundle.
108: * @param key Key identifing localized value (<code>MessageFormat</code>).
109: * @param param1 An argument <code>{0}</code> used for message parametrization.
110: * @param param2 An argument <code>{1}</code> used for message parametrization.
111: * @return Localized value.
112: */
113: public final String getString(String key, Object param1,
114: Object param2) {
115: if (key == null)
116: throw new NullPointerException();
117: return NbBundle
118: .getMessage(this .getClass(), key, param1, param2);
119: }
120:
121: /**
122: * Get localized character from package bundle. Usually used on mnemonic.
123: * @param key Key identifing localized value.
124: * @return localized value.
125: */
126: public final char getChar(String key) {
127: if (key == null)
128: throw new NullPointerException();
129: return NbBundle.getMessage(this .getClass(), key).charAt(0);
130: }
131:
132: //
133: // Debugging purposes
134: //
135:
136: /**
137: * Check whether running at loggable level.
138: * @return true if <code>debug (...)</code> will log something.
139: */
140: public final boolean isLoggable() {
141: return getErrorManager().isLoggable(DEBUG_SEVERITY);
142: }
143:
144: /**
145: * Log a message if package log level passes.
146: * @param message Message to log down. <code>null</code> is allowed
147: * but is not logged.
148: */
149: public final void debug(String message) {
150: if (message == null)
151: return;
152: getErrorManager().log(DEBUG_SEVERITY, message);
153: }
154:
155: /**
156: * Always log a exception.
157: * @param ex Exception to log down. <code>null</code> is allowed
158: * but is not logged.
159: */
160: public final void debug(Throwable ex) {
161: if (ex == null)
162: return;
163: getErrorManager().notify(DEBUG_SEVERITY, ex);
164: }
165:
166: /**
167: * Always log an annotated exception.
168: * @param message Message used for exception annotation or <code>null</code>.
169: * @param ex Exception to log down. <code>null</code> is allowed
170: * but is not logged.
171: */
172: public final void debug(String message, Throwable ex) {
173: if (ex == null)
174: return;
175: if (message != null) {
176: ex = getErrorManager().annotate(ex, DEBUG_SEVERITY,
177: message, null, null, null);
178: }
179: debug(ex);
180: }
181:
182: /**
183: * Provide an <code>ErrorManager</code> instance named per subclass package.
184: * @return ErrorManager which is default for package where is class
185: * declared .
186: */
187: public final synchronized ErrorManager getErrorManager() {
188: if (packageErrorManager == null) {
189: String pack = getPackageName();
190: packageErrorManager = ErrorManager.getDefault()
191: .getInstance(pack);
192: }
193: return packageErrorManager;
194: }
195:
196: }
|