package org.postgresql.util;

import java.util.*;
import java.text.*;

/**
 * A singleton class to translate JDBC driver messages in SQLException's.
 */
public class MessageTranslator {

	// The singleton instance.
	private static MessageTranslator instance = null;

	private ResourceBundle bundle;

	private MessageTranslator() {
		try {
			bundle = ResourceBundle.getBundle("org.postgresql.errors");
	    } catch(MissingResourceException e) {
			// translation files have not been installed.
			bundle = null;
	    }
	}

	// Synchronized, otherwise multiple threads may perform the test and
	// assign to the singleton instance simultaneously.
    private synchronized final static MessageTranslator getInstance() {
		if (instance == null) {
			instance = new MessageTranslator();
		}
		return instance;
	}

	public final static String translate(String id, Object[] args) {

		MessageTranslator translator = MessageTranslator.getInstance();

		return translator._translate(id, args);
	}

	private final String _translate(String id, Object[] args) {
		String message;

        if (bundle != null && id != null) {
			// Now look up a localized message. If one is not found, then use
			// the supplied message instead.
			try {
				message = bundle.getString(id);
			} catch(MissingResourceException e) {
				message = id;
			}
        } else {
			message = id;
		}

		// Expand any arguments
		if (args != null && message != null) {
			message = MessageFormat.format(message,args);
		}

		return message;
    }
}
