001: /*
002: * BEGIN_HEADER - DO NOT EDIT
003: *
004: * The contents of this file are subject to the terms
005: * of the Common Development and Distribution License
006: * (the "License"). You may not use this file except
007: * in compliance with the License.
008: *
009: * You can obtain a copy of the license at
010: * https://open-esb.dev.java.net/public/CDDLv1.0.html.
011: * See the License for the specific language governing
012: * permissions and limitations under the License.
013: *
014: * When distributing Covered Code, include this CDDL
015: * HEADER in each file and include the License file at
016: * https://open-esb.dev.java.net/public/CDDLv1.0.html.
017: * If applicable add the following below this CDDL HEADER,
018: * with the fields enclosed by brackets "[]" replaced with
019: * your own identifying information: Portions Copyright
020: * [year] [name of copyright owner]
021: */
022:
023: /*
024: * @(#)I18NEchoTask.java
025: * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
026: *
027: * END_HEADER - DO NOT EDIT
028: */
029: package com.sun.jbi.ui.ant.util;
030:
031: import java.text.MessageFormat;
032: import java.util.ArrayList;
033: import java.util.List;
034: import java.util.Locale;
035: import java.util.MissingResourceException;
036: import java.util.ResourceBundle;
037: import org.apache.tools.ant.BuildException;
038: import org.apache.tools.ant.Project;
039:
040: /**
041: * Writes a i18n message to the Ant logging facilities.
042: * @author chikkala
043: */
044: public class I18NEchoTask extends org.apache.tools.ant.taskdefs.Echo {
045: private static final String DEFAULT_BUNDLE = "com.sun.jbi.ui.ant.util.Bundle";
046:
047: /**
048: * Holds mValue of property mBundle.
049: */
050: private String mBundle;
051:
052: /**
053: * Getter for property mBundle.
054: *
055: * @return Value of property mBundle.
056: */
057: public String getBundle() {
058: return (this .mBundle == null) ? DEFAULT_BUNDLE : this .mBundle;
059: }
060:
061: /**
062: * Setter for property mBundle.
063: *
064: *
065: * @param bundle New value of property mBundle.
066: */
067: public void setBundle(String bundle) {
068: this .mBundle = bundle;
069: }
070:
071: /**
072: * Holds mValue of property mKey.
073: */
074: private String mKey;
075:
076: /**
077: * Getter for property mKey.
078: *
079: * @return Value of property mKey.
080: */
081: public String getKey() {
082: return this .mKey;
083: }
084:
085: /**
086: * Setter for property mKey.
087: *
088: *
089: * @param key New value of property mKey.
090: */
091: public void setKey(String key) {
092: this .mKey = key;
093: }
094:
095: /** Holds Args Nested elements */
096: private List mArgList;
097:
098: public Argument createArg() {
099: if (this .mArgList == null) {
100: this .mArgList = new ArrayList();
101: }
102: Argument arg = new Argument();
103: this .mArgList.add(arg);
104: return arg;
105: }
106:
107: protected String[] getArguments() {
108:
109: if (this .mArgList == null) {
110: this .mArgList = new ArrayList();
111: }
112:
113: List args = new ArrayList();
114: for (int i = 0; i < this .mArgList.size(); ++i) {
115: args.add(((Argument) this .mArgList.get(i)).getValue());
116: }
117: return (String[]) args.toArray(new String[args.size()]);
118: }
119:
120: /**
121: * Does the work.
122: *
123: * @exception BuildException if something goes wrong with the build
124: */
125: public void execute() throws BuildException {
126: String i18nKey = this .getKey();
127: String bundleBase = this .getBundle();
128: String msg = null;
129: if (i18nKey != null) {
130: msg = loadMessageFromBundle(bundleBase, i18nKey,
131: getArguments());
132: }
133:
134: if (msg != null) {
135: this .setMessage(msg);
136: }
137: // do actual echo
138: super .execute();
139: }
140:
141: private String loadMessageFromBundle(String bundleBase, String key,
142: String[] args) throws BuildException {
143: String i18nMessage = loadBundle(bundleBase).getString(key);
144: MessageFormat mf = new MessageFormat(i18nMessage);
145: String formattedI18NMsg = mf.format(args);
146: return formattedI18NMsg;
147: }
148:
149: private ResourceBundle loadBundle(String bundleBase)
150: throws BuildException {
151: ResourceBundle resBundle = null;
152:
153: try {
154: // log("I18NEchoTask loading Bundle Base " + bundleBase, Project.MSG_DEBUG);
155: resBundle = ResourceBundle.getBundle(bundleBase);
156: } catch (MissingResourceException ex) {
157: log("I18NEchoTask MissingResourceException loading "
158: + bundleBase + " Message : " + ex.getMessage(),
159: Project.MSG_DEBUG);
160: log("Trying to load Locale independent default Bundle ",
161: Project.MSG_DEBUG);
162:
163: // Try with locale independent default Bundle ( e.g. bundleBase.properties )
164: resBundle = ResourceBundle.getBundle(bundleBase,
165: new Locale(""));
166: }
167: if (resBundle != null) {
168: log("I18NEchoTask got resource bundle with Locale "
169: + resBundle.getLocale(), Project.MSG_DEBUG);
170: } else {
171: log(
172: "I18NEchoTask got null resource bundle for bundel base "
173: + bundleBase, Project.MSG_DEBUG);
174: }
175: return resBundle;
176: }
177:
178: public static class Argument {
179: /**
180: * Holds mValue of property mValue.
181: */
182: private String mValue = "";
183:
184: /**
185: * Getter for property mValue.
186: *
187: * @return Value of property mValue.
188: */
189: public String getValue() {
190: return this .mValue;
191: }
192:
193: /**
194: * Setter for property mValue.
195: *
196: * @param value New value of property mValue.
197: */
198: public void setValue(String value) {
199: if (value == null) {
200: value = "";
201: }
202: this .mValue = value;
203: }
204:
205: public String toString() {
206: return getValue();
207: }
208: }
209:
210: }
|