package market.util;

import java.io.*;
import market.*;

/**
 * Contein all Languages, full name, short name and langKey
 * Creation date: (12/28/99 3:27:42 PM)
 * @author: tin
 */
public class LangTable {
/**
 * In table are all Language, short name and langKey
 */	
	public market.util.LangElement[] table;

	public int lastElm;

/**
 * LangTable constructor comment.
 * @param int numOfElem
 */
public LangTable( int numOfElem ) {
	super();
	table = new LangElement[ numOfElem ];
}
/**
 * Load language table from InputStream in
 * Creation date: (12/28/99 8:07:46 PM)
 * @param in java.io.InputStream
 */
public LangTable(InputStream in) {
	super();
	LoadTable( in );
}
/**
 * Add the lang Element in Table. <br>
 * Creation date: (12/22/99 5:12:33 PM)
 * @return boolean
 * @param src market.util.LangElement
 */
public boolean addElm(LangElement langElm) {

	if (lastElm < table.length ){
		table[lastElm++] = langElm;
		return true;
	}
	
	return false;
}
/**
 * Load language table from InputStream in. <br>
 * Creation date: (12/28/99 3:47:59 PM)
 * @return boolean true for successfull loading
 */
public boolean LoadTable( InputStream in ) {

	Reader r = new BufferedReader(new InputStreamReader(in));
	StreamTokenizer stoken = new StreamTokenizer(r);
	stoken.whitespaceChars((int) Const.http_delim, (int) Const.http_delim);
	int tt = 0;
	try {
		// Get number of language		
//		if ((tt = stoken.nextToken()) != stoken.TT_NUMBER)
//			return false;
		int num = Const.MAX_NUM_LANG; //(int) stoken.nval;

		table = new LangElement[ num ];
		
		while ((tt = stoken.nextToken()) != stoken.TT_EOF) {
			
			LangElement langElm = new LangElement();
			
			// Get langKey		
			if (tt != stoken.TT_NUMBER)
				return false;
			langElm.langKey = (short) stoken.nval;

			// Get short Langage name		
			if ((tt = stoken.nextToken()) != stoken.TT_WORD)
				return false;
			langElm.shortName = stoken.sval;

			// Get full Langage name		
			if ((tt = stoken.nextToken()) != stoken.TT_WORD)
				return false;
			langElm.name = stoken.sval;

			if (!addElm( langElm ) ) return false;
		}
	} catch (Exception e) {
		System.err.println("! IOExeption! ");
		e.printStackTrace();
	return false;
	}
	
	return true;
}
/**
 * Find langFullName for langKey
 * Creation date: (12/29/99 4:27:12 PM)
 * @return String	( full language name )
 * @param langKey int
 */
public String ltResolveKeyToFullName( int langKey ) {

	LangElement tmpElm;
	
	for ( int i=0; i < lastElm ; i++){
		tmpElm = table[i];
		if ( tmpElm.langKey == langKey )
			return tmpElm.name;
	}
	return null;
}
/**
 * Resolve langShortName by langKey
 * Creation date: (12/29/99 4:27:12 PM)
 * @return String	( short language name )
 * @param langKey int
 */
public String ltResolveKeyToShortName( int langKey ) {

	LangElement tmpElm;
	
	for ( int i=0; i < lastElm ; i++){
		tmpElm = table[i];
		if ( tmpElm.langKey == langKey )
			return tmpElm.shortName;
	}
	return null;
}
/**
 * Resolve langKey by full or short language name
 * Creation date: (12/29/99 4:27:12 PM)
 * @return int	( langKey )
 * @param langName java.lang.String
 */
public int ltResolveName(String langName) {

	LangElement tmpElm;
	
	for ( int i=0; i < lastElm ; i++){
		tmpElm = table[i];
		if ( tmpElm.name.equalsIgnoreCase( langName ) || tmpElm.shortName.equalsIgnoreCase( langName ) )
			return tmpElm.langKey;
	}
	return 0;
}
/**
 * Print Table whit language on screen
 * Creation date: (12/22/99 5:12:33 PM)
 */
public void print() {
	
	System.out.println(" Num of Element= " + lastElm);
	LangElement lang;

	for (int i = 0; i < lastElm; i++) {
		lang = table[i];
		System.out.println("Elem " + i + " langKey= " + lang.langKey + 
							" short name= " + lang.shortName + " name= " + lang.name);
	}
	return;
}
}

