/*
* Commons eID Project.
* Copyright (C) 2008-2013 FedICT.
* Copyright (C) 2015 e-Contract.be BVBA.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License version
* 3.0 as published by the Free Software Foundation.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, see
* http://www.gnu.org/licenses/.
*/
package be.fedict.commons.eid.dialogs;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.swing.UIManager;
/**
* Util class to manage the i18n messages used within the BeIDCardUI.
*
* @author Frank Cornelis
*
*/
public class Messages {
public static final String RESOURCE_BUNDLE_NAME = "be.fedict.commons.eid.dialogs.Messages";
private static final Map<Locale, Messages> instances;
static {
instances = new HashMap<Locale, Messages>();
}
private final ResourceBundle resourceBundle;
private Locale locale;
/**
* Enumeration of all possible message identifiers.
*
* @author Frank Cornelis
*
*/
public static enum MESSAGE_ID {
LOADING("loading"),
SECURITY_ERROR("securityError"),
CARD_ERROR("cardError"),
GENERIC_ERROR("genericError"),
DETECTING_CARD("detectingCard"),
INSERT_CARD_QUESTION("insertCardQuestion"),
READING_IDENTITY("readingIdentity"),
TRANSMITTING_IDENTITY("transmittingIdentity"),
DONE("done"),
PRIVACY_QUESTION("privacyQuestion"),
AUTHENTICATING("authenticating"),
REMOVE_CARD("removeCard"),
SIGNING("signing"),
SELECT_FILES("selectFiles"),
DIGESTING_FILES("digestingFiles"),
COPY_ALL("copyAll"),
MAIL("mail"),
NO_MIDDLEWARE_ERROR("noMiddlewareError"),
PIN_BLOCKED("pinBlocked"),
PIN_CHANGED("pinChanged"),
PIN_UNBLOCKED("pinUnblocked"),
RETRIES_LEFT("retriesLeft"),
PIN_INCORRECT("pinIncorrect"),
CONNECT_READER("connectReader"),
PIN_PAD("pinPad"),
CURRENT_PIN("currentPin"),
NEW_PIN("newPin"),
OK("ok"),
CANCEL("cancel"),
PUK_PAD("pukPad"),
PIN_PAD_CHANGE("pinPadChange"),
KIOSK_MODE("kioskMode"),
ENTER_PIN("enterPin"),
LABEL_PIN("labelPin"),
PIN_CHANGE("pinChange"),
PIN_UNBLOCK("pinUnblock"),
PIN_PAD_MODIFY_OLD("pinPadModifyOld"),
PIN_PAD_MODIFY_NEW("pinPadModifyNew"),
PIN_PAD_MODIFY_NEW_AGAIN("pinPadModifyNewAgain"),
DIAGNOSTIC_MODE("diagnosticMode"),
CERTIFICATE_EXPIRED_ERROR("certificateExpiredError"),
CERTIFICATE_REVOKED_ERROR("certificateRevokedError"),
IDENTITY_INFO("identityInfo"),
IDENTITY_IDENTITY("identityIdentity"),
IDENTITY_ADDRESS("identityAddress"),
IDENTITY_PHOTO("identityPhoto"),
DETAILS_BUTTON("detailsButtonText"),
CANCEL_BUTTON("cancelButtonText"),
NO_BUTTON("noButtonText"),
OK_BUTTON("okButtonText"),
YES_BUTTON("yesButtonText"),
CERTIFICATE_NOT_TRUSTED("certificateNotTrusted"),
PIN_REASON("pinReason"),
APPLICATION("application");
private final String id;
private MESSAGE_ID(final String id) {
this.id = id;
}
public String getId() {
return this.id;
}
}
// --------------------------------------------------------------------
public static Messages getInstance() {
return getInstance(Locale.getDefault());
}
public static Messages getInstance(Locale locale) {
Messages messages = Messages.instances.get(locale);
if (messages == null) {
messages = new Messages(locale);
Messages.instances.put(locale, messages);
}
return messages;
}
// --------------------------------------------------------------------
public String getMessage(final MESSAGE_ID messageId) {
return this.resourceBundle.getString(messageId.id);
}
public String getMessage(final MESSAGE_ID messageId, final String variant) {
return this.resourceBundle.getString(messageId.id + "_" + variant);
}
// --------------------------------------------------------------------
public Locale getLocale() {
return locale;
}
// --------------------------------------------------------------------
private Messages(final Locale locale) {
this.locale = locale;
ResourceBundle bundle;
try {
bundle = ResourceBundle.getBundle(RESOURCE_BUNDLE_NAME, locale);
} catch (final MissingResourceException mre) {
/*
* In case the selected locale and default system locale are not
* supported we default to english.
*/
bundle = ResourceBundle.getBundle(RESOURCE_BUNDLE_NAME,
Locale.ENGLISH);
}
this.resourceBundle = bundle;
UIManager.put("OptionPane.cancelButtonText",
this.getMessage(MESSAGE_ID.CANCEL_BUTTON));
UIManager.put("OptionPane.noButtonText",
this.getMessage(MESSAGE_ID.NO_BUTTON));
UIManager.put("OptionPane.okButtonText",
this.getMessage(MESSAGE_ID.OK_BUTTON));
UIManager.put("OptionPane.yesButtonText",
this.getMessage(MESSAGE_ID.YES_BUTTON));
}
}