/*
******************************************************************************
* Copyright (C) 2003, International Business Machines Corporation and        *
* others. All Rights Reserved.                                               *
******************************************************************************
*
* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/util/ULocale.java,v $
* $Date: 2003/11/24 22:24:28 $
* $Revision: 1.6 $
*
******************************************************************************
*/

package com.ibm.icu.util;

import java.util.Locale;
import java.io.Serializable;
import java.io.IOException;

/**
 * A class for replacing the java.util.Locale. This class provides all the 
 * functionality that java.util.Locale has and in ICU 3.0 will be enhanced for 
 * supporting RFC 3066 language identifiers.
 * @author weiv
 * @draft ICU 2.8
 */
public final class ULocale implements Serializable {
    private transient Locale locale;
    private String locName;

    /** 
     * Actual locale where data is coming from 
     * Actual locale will make sense only after the alternate
     * ICU data handling framework is implemented in ICU 3.0
     * @draft ICU 2.8
     */
    public static final ULocaleDataType ACTUAL_LOCALE = new ULocaleDataType(0);
 
    /** 
     * Valid locale for an object 
     * @draft ICU 2.8
     */ 
    public static final ULocaleDataType VALID_LOCALE = new ULocaleDataType(1);
    
    /**
     * Type safe enum for representing the type of locale
     * @draft ICU 2.8
     */
    public static final class ULocaleDataType{
    
        private int localeType;
        
        private ULocaleDataType(int id){
            localeType = id;
        }
        private boolean equals(int id){
            return localeType == id;
        }
    }
        
    /**
     * Convert this ULocale object to java.util.Locale object
     * @return Locale object that represents the information in this object
     * @draft ICU 2.8
     */
    public Locale toLocale() {
        return locale;
    }
    
    /**
     * Construct a ULocale object from java.util.Locale object.
     * @param loc The locale object to be converted
     * @draft ICU 2.8
     */
    public ULocale(Locale loc) {
	this.locName = loc.toString();
        this.locale = loc;
    }
    
    /**
     * Consturct a ULocale object from a string representing the locale
     * @param locName String representation of the locale, e.g: en_US, sy-Cyrl-YU
     * @draft ICU 2.8
     */ 
    public ULocale(String locName) {
	this.locName  = locName;
        this.locale = new Locale(locName, "");
    }

    public static ULocale getDefault() {
	return new ULocale(Locale.getDefault());
    }

    public static final ULocale ROOT = new ULocale("");

    private void writeObject(java.io.ObjectOutputStream out) throws IOException {
	out.writeObject(locName);
    }

    private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
	    locName = (String)in.readObject();
	    locale = new Locale(locName, "");
    }
}
