package system.rsrserver;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.net.*;
import LogPrinter;

/**
 * main class of the System Resource Server <br>
 * Creation date: (12/27/99 11:11:40 AM) <br>
 * @author: lex <br>
 *  <br>
 * requests model <br>
 *  <br>
 *  <br>
 * ReqType=0 <br>
 * Returns Overview page <br>
 * command string: <br>
 * ResourceServer?ReqType=0<br>
 * returns: <br>
 * html<br>
 *  <br>
 * ReqType=1 <br>
 * get all active languages <br>
 * command string: <br>
 * ResourceServer?ReqType=1&marketKey=1 <br>
 * returns: <br>
 * Nx langKey|langShortName|langName <br>
 *  <br>
 *  <br>
 * ReqType=2 <br>
 * register a language <br>
 * notes: <br>
 * the short name must have specific value. the first two letters from this value are used <br>
 * for comparation in the http header, when a page is about to be downloaded <br>
 * command string: <br>
 * ResourceServer?ReqType=2&langName=Greece&langShortName=gre <br>
 * returns: <br>
 * langKey <br>
 *  <br>
 *  <br>
 * ReqType=3 <br>
 * register a market (su)<br>
 * command string: <br>
 * ResourceServer?ReqType=3&marketName=SU&marketDescr=SU-Sofia <br>
 * returns: <br>
 * marketKey <br>
 *  <br>
 *  <br>
 * ReqType=4 <br>
 * activate a registred market (su)<br>
 * command string: <br>
 * ResourceServer?ReqType=4&marketKey=2 <br>
 * returns: <br>
 * nothing <br>
 *  <br>
 *  <br>
 * ReqType=5 <br>
 * deactivate a language (su)<br>
 * command string: <br>
 * ResourceServer?ReqType=5&langKey=8 <br>
 * returns: <br>
 * nothing <br>
 *  <br>
 *  <br>
 * ReqType=6 <br>
 * deactivate a market (su)<br>
 * command string: <br>
 * ResourceServer?ReqType=6&marketKey=2 <br>
 * returns: <br>
 * nothing <br>
 *  <br>
 *  <br>
 * ReqType=7 <br>
 * get all markets (su) <br>
 * command string: <br>
 * ResourceServer?ReqType=7 <br>
 * returns: <br>
 * Nx marketKey|marketName|marketDescr|marketStatus <br>
 *
 * ReqType=8 <br>
 * return a list of languages with service-html interface (su)<br>
 * command string: <br>
 * ResourceServer?ReqType=8 <br>
 * returns:
 * html page
 *
 * ReqType=9 <br>
 * return lists of markets with service-html interface (su) <br>
 * command string: <br>
 * ResourceServer?ReqType=9 <br>
 * returns: <br>
 * html page <br>
 *
 * ReqType=10 <br>
 * return a list of the valid markets for validation of the other system modules <br>
 * command string: <br>
 * ResourceServer?ReqType=10 <br>
 * //here we need more info to make this secure, otherwise everybody could get the list <br>
 * returns: <br>
 * numOfRecords|marketKey1|marketKey2|ma... <br>
 *
 * ReqType=11 <br>
 * return a configuration html page <br>
 * command string: <br>
 * ResourceServer?ReqType=11 <br>
 * returns: <br>
 * html page <br>
 *
 * ReqType=12 <br>
 * Change parameter value.<br>
 * command string: <br>
 * ResourceServer?ReqType=12&name=MYSQLDriver&value=org.gjt.mm.mysql.Driver <br>
 * returns: <br>
 * Confuguration html page <br>
 *
 * ReqType=13 <br>
 * Saves config parameters into a file.<br>
 * command string: <br>
 * ResourceServer?ReqType=13 <br>
 * returns: <br>
 * Confuguration html page <br>
 *
 * ReqType=14 <br>
 * return a html page. add language page<br>
 * command string: <br>
 * ResourceServer?ReqType=14 <br>
 * returns: <br>
 * Add lang html page <br>
 *
 * ReqType=15 <br>
 * return a html page. Add market page<br>
 * command string: <br>
 * ResourceServer?ReqType=15 <br>
 * returns: <br>
 * Add marjet html page <br>
 *
 * ReqType=16 <br>
 * re - init the servlet<br>
 * command string: <br>
 * ResourceServer?ReqType=16 <br>
 * returns: <br>
 * nothing <br>
 *
 */
public class ResourceServer extends javax.servlet.http.HttpServlet {
	private static Connection rsrDBConn;
	private static int[] rsrActiveMarkets;
	private static LogPrinter LogOutput;
	public static ConfigRSRServer rsrConfig;
	private int rsrMarketKey;
	private static Object rsrDBSync = new Object();
	public String ver = "AAA000 | 000712";
/**
 * ResourceServer constructor. <br>
 */
public ResourceServer() {
	super();
}
/**
 * the destroy method of the servlet <br>
 * closes the connection to the db using the rsrDBDisConnect() method<br>
 * Creation date: (15.2.00 15:01:42) <br>
 */
public void destroy() {
	rsrDBDisConnect();
}
/**
 * this is the init method of the servlet. <br>
 * estaablishe a db connection using rsrDBConnect() method <br>
 * Creation date: (15.2.00 15:37:51) <br>
 */
public void init(ServletConfig config) throws ServletException {
	super.init(config); //This statement must always be here !!!
	rsrInit();
}
/**
 * marks a market as active in the db <br>
 * Creation date: (2.2.00 23:47:57) <br>
 */
public synchronized boolean rsrActivateMarket(int marketKey) {
	String SQLStat;
	int marketStatus = -1;
	Statement Stmt;
	SQLStat = "select " + RSRConstants.sDBFieldMarketStatus + " from " + RSRConstants.sDBMarketsTableName + " where " + RSRConstants.sDBFieldMarketKey + " = " + marketKey;
	boolean exit = true;
	boolean result;
	int error_counter = 0;
	do {
		try {
			Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			if (RS.next())
				marketStatus = RS.getInt(1);
			else {
				LogOutput.log("fail on activating market - no such market", LogOutput.ERROR);
				LogOutput.flush();
				result = false;
			}
			RS.close();
			Stmt.close();
			if (marketStatus == 0) {
				// market is not-active, activate it
				SQLStat = "update " + RSRConstants.sDBMarketsTableName + " set " + RSRConstants.sDBFieldMarketStatus + " = 1, " + RSRConstants.sDBFieldMarketActivationDate + " = '" + String.valueOf(new java.sql.Date(System.currentTimeMillis())) + "' where " + RSRConstants.sDBFieldMarketKey + " = " + marketKey;
				Stmt = rsrDBConn.createStatement();
				Stmt.executeQuery(SQLStat);
				Stmt.close();
			} else
				if (marketStatus == 1)
					// market is active, do nothing
					result = true;
				else
					// market is deactivated, activation fail
					result = false;
			exit = true;
			result = true;
		} catch (SQLException E) {
			LogOutput.log("fail on activating market - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			// sql error, activation fail
			result = false;
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	return result;
}
/**
 * Builds a list with valid markets (as a String) for the others system-side modules <br>
 * Creation date: (22.2.2000 a. 23:31:10) <br>
 * @return java.lang.String <br>
 */
private String rsrBuildActiveMarketsList() {
	String SQLStat = "select " + RSRConstants.sDBFieldMarketKey + " from " + RSRConstants.sDBMarketsTableName + " where " + RSRConstants.sDBFieldMarketStatus + " = 1";
	String resString = "";
	int counter = 0;
	boolean exit = true;
	String result;
	int error_counter = 0;
	do {
		try {
			Statement Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			while (RS.next()) {
				counter++;
				resString = resString + "|" + RS.getString(1);
			}
			RS.close();
			Stmt.close();
			exit = true;
			result = counter + resString;
		} catch (SQLException E) {
			LogOutput.log("fail on building active markets' list - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			result = null;
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	return result;
}
/**
 * Part of the interface part of the servlet. <br>
 * generates an interface for languages management. <br>
 * generates html. <br>
 * Creation date: (20.2.2000 a. 11:43:39) <br>
 * @return java.lang.String <br>
 */
private String rsrBuildHTMLLangInterFace() {
	String resString;
	String SQLStat = "select " + RSRConstants.sDBFieldLangKey + ", " + RSRConstants.sDBFieldLangShortName + ", " + RSRConstants.sDBFieldLangName + " from " + RSRConstants.sDBLanguagesTableName + " where " + RSRConstants.sDBFieldLangActive + " = 1";
	boolean exit = true;
	int error_counter = 0;
	resString = "<HTML><BODY>";
	resString = resString + "<HR>";
	resString = resString + "<P> SELECT A LANGUAGE TO BE DEACTIVATED <P>";
	resString = resString + "<FORM action=http://www.server.esof:8080/servlet/ResourceServer>";
	resString = resString + "<INPUT TYPE=\"HIDDEN\" NAME=\"ReqType\" VALUE=5>";
	resString = resString + "<SELECT name=langKey>";
	resString = resString + "<OPTION selected value=0>select a language</OPTION>";
	do {
		try {
			int count;
			Statement Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			while (RS.next()) {
				resString = resString + "<OPTION value=" + RS.getInt(1) + ">" + RS.getString(3) + " - " + RS.getString(2) + "</OPTION>";
			}
			RS.close();
			Stmt.close();
			exit = true;
		} catch (SQLException E) {
			LogOutput.log("fail on building lang interface - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	resString = resString + "</SELECT>";
	resString = resString + "&nbsp;<INPUT TYPE=\"SUBMIT\" VALUE=\"DELETE\">";
	resString = resString + "</FORM>";
	resString = resString + "<HR>";
	resString = resString + "<P>ENTER VALUES FOR A NEW LANGUAGE<P>";
	resString = resString + "<FORM action=http://www.server.esof:8080/servlet/ResourceServer>";
	resString = resString + "<INPUT TYPE=\"HIDDEN\" NAME=\"ReqType\" VALUE=2>";
	resString = resString + "<TABLE><TR><TD>lang name</TD><TD><INPUT TYPE=\"TEXT\" NAME=\"langName\"></TD></TR>";
	resString = resString + "<TR><TD>lang short name&nbsp;</TD><TD><INPUT TYPE=\"TEXT\" NAME=\"langShortName\"></TD></TR>";
	resString = resString + "<TR><TD></TD><TD><INPUT TYPE=\"SUBMIT\" VALUE=\"ADD\"></TD></TR></TABLE>";
	resString = resString + "</FORM>";
	resString = resString + "<HR>";
	resString = resString + "</BODY></HTML>";
	return resString;
}
/**
 * Part of the interface part of the servlet. <br>
 * generates an interface for markets management. <br>
 * generates html. <br>
 * Creation date: (20.2.2000 a. 15:17:58)
 * @return java.lang.String
 */
private String rsrBuildHTMLMarketInterFace() {
	String resString;
	String SQLStat = "select " + RSRConstants.sDBFieldLangKey + ", " + RSRConstants.sDBFieldLangShortName + ", " + RSRConstants.sDBFieldLangName + " from " + RSRConstants.sDBLanguagesTableName + " where " + RSRConstants.sDBFieldLangActive + " = 1";
	boolean exit = true;
	int error_counter = 0;
	resString = "<HTML><BODY>";
	resString = resString + "<HR>";
	resString = resString + "<P> SELECT A LANGUAGE TO BE DEACTIVATED <P>";
	resString = resString + "<FORM action=/ResourceServer>";
	resString = resString + "<INPUT TYPE=\"HIDDEN\" NAME=\"ReqType\" VALUE=5>";
	resString = resString + "<SELECT name=langKey>";
	resString = resString + "<OPTION selected value=0>select a language</OPTION>";
	do {
		try {
			int count;
			Statement Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			while (RS.next()) {
				resString = resString + "<OPTION value=" + RS.getInt(1) + ">" + RS.getString(3) + " - " + RS.getString(2) + "</OPTION>";
			}
			RS.close();
			Stmt.close();
			exit = true;
		} catch (SQLException E) {
			LogOutput.log("fail on building market interface - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	resString = resString + "</SELECT>";
	resString = resString + "&nbsp;<INPUT TYPE=\"SUBMIT\" VALUE=\"DELETE\">";
	resString = resString + "</FORM>";
	resString = resString + "<HR>";
	resString = resString + "<P>ENTER VALUES FOR A NEW LANGUAGE<P>";
	resString = resString + "<FORM action=/ResourceServer>";
	resString = resString + "<INPUT TYPE=\"HIDDEN\" NAME=\"ReqType\" VALUE=2>";
	resString = resString + "<TABLE><TR><TD>lang name</TD><TD><INPUT TYPE=\"TEXT\" NAME=\"langName\"></TD></TR>";
	resString = resString + "<TR><TD>lang short name&nbsp;</TD><TD><INPUT TYPE=\"TEXT\" NAME=\"langShortName\"></TD></TR>";
	resString = resString + "<TR><TD></TD><TD><INPUT TYPE=\"SUBMIT\" VALUE=\"ADD\"></TD></TR></TABLE>";
	resString = resString + "</FORM>";
	resString = resString + "<HR>";
	resString = resString + "</HTML></BODY>";
	return resString;
}
/**
 * Change a config param's <br>
 * Creation date: (07.3.2000 a. 16:38:17) <br>
 * @param req HttpServletRequest <br>
 */
public void rsrChangeParams(HttpServletRequest req) {
	String paramName = "";
	String paramValue = "";
	try {
		paramName = req.getParameter(RSRConstants.sName);
		paramValue = req.getParameter(RSRConstants.sValue);
	} catch (NumberFormatException e) {
		LogOutput.log("bad data type for config parameter name", LogOutput.ERROR);
		LogOutput.flush();
		return;
	}
	rsrConfig.setParam(paramName, paramValue);
}
/**
 * check if the conection is closed or null <br> 
 * return true if the connection is ok <br>
 * return false if the connection is null or closed <br>
 * Creation date: (4/24/00 6:16:46 PM) <br>
 * @return boolean <br>
 */
private boolean rsrCheckConnection() {
	try {
		if (!rsrDBConn.isClosed() && rsrDBConn != null) return true;
		else return false;
	} catch (Exception E) {
		return false;
	}
}
/**
 * Check if the marketKey form the request is a valid one <br>
 * Creation date: (26.2.2000 a. 19:56:10) <br>
 * @return boolean <br>
 * @param marketKey int <br>
 */
public boolean rsrCheckForActiveMarket(int marketKey) {
	if (rsrActiveMarkets == null)
		return false;
	else 
		for (int counter = 0; counter < rsrActiveMarkets.length; counter++) 
			if (rsrActiveMarkets[counter] == marketKey) 
				return true;
	return false;
}
/**
 * establishe a connection with the db. <br>
 * stores a pointer to the connection in the rsrDBConn field <br>
 * Creation date: (12/27/99 1:32:23 PM) <br>
 */
private boolean rsrDBConnect() {
	// establish a connection to the db and put a reference to it in the srcDBConn field
	// if an exception is generated, retry int countOfTries times
	// servlet - wide synchronized by the static field DBInitSync
	int countOfTries = 3;
	boolean flag = true;
	try {
		if (rsrDBConn == null || rsrDBConn.isClosed()) {
			synchronized (rsrDBSync) {
				for (int counter = 0; counter < countOfTries && (rsrDBConn == null || rsrDBConn.isClosed()); counter++) {
					try {
						rsrDBConn = DriverManager.getConnection(rsrConfig.sDBLocation + rsrConfig.sDBName, rsrConfig.sDBUser, rsrConfig.sDBPass);
						LogOutput.log("db connected", LogOutput.INFO);
						LogOutput.flush();
						flag = true;
					} catch (SQLException E) {
						LogOutput.log("fail on connecting with the db - " + E.getMessage(), LogOutput.ERROR);
						LogOutput.flush();
						flag = false;
					}
				}
			}
		}
	} catch (SQLException E) {
		LogOutput.log("fail on connecting with the db - " + E.getMessage(), LogOutput.ERROR);
		LogOutput.flush();
		flag = false;
	}
	return flag;
}
/**
 * closes the db connection pointed by the rsrDBConn field <br>
 * Creation date: (12/27/99 1:32:44 PM) <br>
 */
private void rsrDBDisConnect() {
	try {
		rsrDBConn.close();
	} catch (Exception E) {
		LogOutput.log("fail on closing the db connection - " + E.getMessage(), LogOutput.ERROR);
		LogOutput.flush();
	}
}
/**
 * update a language as not active <br>
 * Creation date: (3.2.00 11:41:38) <br>
 * @param langKey int - the langKey of the language to be disactivated <br>
 */
private synchronized boolean rsrDeActivateLang(int langKey) {
	String SQLStat;
	Statement Stmt;
	SQLStat = "select " + RSRConstants.sDBFieldLangActive + " from " + RSRConstants.sDBLanguagesTableName + " where " + RSRConstants.sDBFieldLangKey + " = " + langKey;
	boolean exit = true;
	boolean result;
	int error_counter = 0;
	do {
		try {
			Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			if (RS.next()) {
				if (RS.getInt(1) <= 0)
					// language is allready active, deactivation ok
					result = true;
			} else { // no such language, deactivation fail
				LogOutput.log("fail on deactivating language - no such language", LogOutput.ERROR);
				LogOutput.flush();
				result = false;
			}
			RS.close();
			Stmt.close();
			SQLStat = "UPDATE " + RSRConstants.sDBLanguagesTableName + " SET " + RSRConstants.sDBFieldLangActive + " = -1 where " + RSRConstants.sDBFieldLangKey + " = " + langKey;
			Stmt = rsrDBConn.createStatement();
			Stmt.executeQuery(SQLStat);
			Stmt.close();
			exit = true;
			result = true;
		} catch (SQLException E) {
			LogOutput.log("fail on deactivating language - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			// sql exception, deactivation fails
			result = false;
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	return result;
}
/**
 * update marketStatus and marketDeactivationDate fields form markets table <br>
 * this "marks" the market as deactivated <br>
 * Creation date: (04.2.2000 a. 17:29:38) <br>
 * @param marketKey int - the langKey of the market to be disactivated <br>
 */
private synchronized boolean rsrDeActivateMarket(int marketKey) {
	String SQLStat;
	Statement Stmt;
	SQLStat = "select " + RSRConstants.sDBFieldMarketStatus + " from " + RSRConstants.sDBMarketsTableName + " where " + RSRConstants.sDBFieldMarketKey + " = " + marketKey;
	boolean exit = true;
	boolean result;
	int error_counter = 0;
	do {
		try {
			Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			if (RS.next()) {
				if (RS.getInt(1) <= 0)
					// market allready not active, ok
					result = true;
			} else {
				// no such market
				LogOutput.log("fail on deactivating market - no such language", LogOutput.ERROR);
				LogOutput.flush();
				result = false;
			}
			RS.close();
			Stmt.close();
			SQLStat = "UPDATE " + RSRConstants.sDBMarketsTableName + " SET " + RSRConstants.sDBFieldMarketStatus + " = -1, " + RSRConstants.sDBFieldMarketDeactivationDate + " = '" + new java.sql.Date(System.currentTimeMillis()) + "' where " + RSRConstants.sDBFieldMarketKey + " = " + marketKey;
			Stmt = rsrDBConn.createStatement();
			Stmt.executeQuery(SQLStat);
			Stmt.close();
			exit = true;
			result = true;
		} catch (SQLException E) {
			LogOutput.log("fail on deactivating market - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			// sql error, deactivation fail
			result = false;
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	return result;
}
/**
 * Return Web page to browser. <br> This page is for adding a new language <br> 
 * Creation date: (12/16/99 11:31:06 AM) <br>
 * @param fileOut java.io.PrintWriter <br>
 */
public void rsrFormAddLang(PrintWriter fileOut) {
	String serverName = "ResourceServer?";
	int count = 0;
	String SQLStat = "select " + RSRConstants.sDBFieldLangKey + ", " + RSRConstants.sDBFieldLangShortName + ", " + RSRConstants.sDBFieldLangName + " from " + RSRConstants.sDBLanguagesTableName + " where " + RSRConstants.sDBFieldLangActive + " = 1";
	boolean exit = true;
	int error_counter = 0;
	fileOut.println("<HTML>");
	fileOut.println("<HEAD>");
	fileOut.println("<TITLE>LANGUAGE TABLE</TITLE>");
	fileOut.println("<SCRIPT Language = \"JavaScript\">");
	fileOut.println("<!-- \n     	   	  ");
	fileOut.println("function b_over(){");
	fileOut.println("	this.window.location=\"" + serverName + RSRConstants.sReqType + "=" + 0 + "\";\n }");
	fileOut.println("-->");
	fileOut.println("</SCRIPT>");
	fileOut.println("</HEAD>");
	fileOut.println("<BODY  text = \"black\">");
	fileOut.println("<H3>Language Table</H3>");
	fileOut.println("<FORM>");
	fileOut.println("<HR>");
	fileOut.println(" <input type=\"button\"name=\"overview\" value = \"Rsr Overview\" onClick = \"b_over();\">\n");
	fileOut.println("<HR>");
	fileOut.println("<TABLE border=\"1\" cellspacing=\"1\" >");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>chek</TD>\n");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>" + RSRConstants.sDBFieldLangKey + "</TD>\n");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>" + RSRConstants.sDBFieldLangName + "</TD>\n");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>" + RSRConstants.sDBFieldLangShortName + "</TD>\n");
	fileOut.println("</TR>\n");
	do {
		try {
			Statement Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			while (RS.next()) {
				count++;
				fileOut.println("<TR><TD><p><INPUT TYPE=\"radio\" NAME=\"tab\" value =\"" + RS.getInt(1) + "\">");
				fileOut.println("<TD>" + RS.getInt(1) + "</TD>\n");
				fileOut.println("<TD><CENTER>" + RS.getString(3) + "</TD>\n");
				fileOut.println("<TD ><CENTER>" + RS.getString(2) + "</TD>\n");
				fileOut.println("</TR>\n");
			}
			RS.close();
			Stmt.close();
			exit = true;
		} catch (SQLException E) {
			LogOutput.log("fail on building lang interface - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	fileOut.println("<INPUT TYPE=\"HIDDEN\" NAME=\"len\" VALUE=\"" + count + "\">");
	fileOut.println(" </TABLE>\n");
	fileOut.println(" </form>\n");
	fileOut.println("<FORM action=ResourceServer>\n");
	fileOut.println("<INPUT TYPE=\"HIDDEN\" NAME=\"ReqType\" VALUE=2>\n");
	fileOut.println("<INPUT TYPE=\"HIDDEN\" NAME=\"marketKey\" VALUE=" + rsrMarketKey + ">\n");
	fileOut.println("<TABLE><TR><TD>lang name</TD><TD><INPUT TYPE=\"TEXT\" NAME=\"langName\"></TD></TR>\n");
	fileOut.println("<TR><TD>lang short name&nbsp;</TD><TD><INPUT TYPE=\"TEXT\" NAME=\"langShortName\"></TD></TR>\n");
	fileOut.println("<TR><TD></TD><TD><INPUT TYPE=\"SUBMIT\" VALUE=\"ADD\"></TD></TR></TABLE>\n");
	fileOut.println(" </form>\n");
	fileOut.println("</BODY></HTML>\n");
	fileOut.close();
} // rsrFormLangTabHtml
/**
 * Return Web page to browser. <br> This page is for adding a new market <br> 
 * Creation date: (03/12/00 11:31:06 AM) <br>
 * @param fileOut java.io.PrintWriter <br>
 */
public void rsrFormAddMarket(PrintWriter fileOut) {
	String serverName = "ResourceServer?";
	int count = 0;
	String SQLStat = "select " + RSRConstants.sDBFieldMarketKey + ", " + RSRConstants.sDBFieldMarketName + ", " + RSRConstants.sDBFieldMarketDescr + ", " + RSRConstants.sDBFieldMarketStatus + " from " + RSRConstants.sDBMarketsTableName;
	boolean exit = true;
	int error_counter = 0;
	fileOut.println("<HTML>");
	fileOut.println("<HEAD>");
	fileOut.println("<TITLE>MARKET TABLE</TITLE>");
	fileOut.println("<SCRIPT Language = \"JavaScript\">");
	fileOut.println("<!-- \n     	   	  ");
	fileOut.println("function b_over(){");
	fileOut.println("	this.window.location=\"" + serverName + RSRConstants.sReqType + "=" + 0 + "\";\n }");
	fileOut.println("-->");
	fileOut.println("</SCRIPT>");
	fileOut.println("</HEAD>");
	fileOut.println("<BODY  text = \"black\">");
	fileOut.println("<H3>Market Table</H3>");
	fileOut.println("<FORM>");
	fileOut.println("<HR>");
	fileOut.println(" <input type=\"button\"name=\"overview\" value = \"Rsr Overview\" onClick = \"b_over();\">\n");
	fileOut.println("<HR>");
	fileOut.println("<TABLE border=\"1\" cellspacing=\"1\" >");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>chek</TD>\n");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>" + RSRConstants.sDBFieldMarketKey + "</TD>\n");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>" + RSRConstants.sDBFieldMarketName + "</TD>\n");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>" + RSRConstants.sDBFieldMarketDescr + "</TD>\n");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>" + RSRConstants.sDBFieldMarketStatus + "</TD>\n");
	fileOut.println("</TR>\n");
	do {
		try {
			Statement Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			while (RS.next()) {
				count++;
				fileOut.println("<TR><TD><p><INPUT TYPE=\"radio\" NAME=\"tab\" value =\"" + RS.getInt(1) + "\">");
				fileOut.println("<TD>" + RS.getInt(1) + "</TD>\n");
				fileOut.println("<TD><CENTER>" + RS.getString(2) + "</TD>\n");
				fileOut.println("<TD ><CENTER>" + RS.getString(3) + "</TD>\n");
				String marketStatus = "undefine";
				String m_stat = RS.getString(4);
				m_stat.trim();
				if (m_stat.equalsIgnoreCase("1")) {
					marketStatus = "active";
				} else
					if (m_stat.equalsIgnoreCase("0")) {
						marketStatus = "not active";
					} else
						if (m_stat.equalsIgnoreCase("-1")) {
							marketStatus = "closed";
						}
				fileOut.println("<TD ><CENTER>" + marketStatus + "</TD>\n");
				fileOut.println("</TR>\n");
			}
			RS.close();
			Stmt.close();
			exit = true;
		} catch (SQLException E) {
			LogOutput.log("fail on getting markets - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	fileOut.println(" </TABLE>\n");
	fileOut.println("<INPUT TYPE=\"HIDDEN\" NAME=\"len\" VALUE=\"" + count + "\">");
	fileOut.println(" </form>\n");
	fileOut.println(" </form>\n");
	fileOut.println("<FORM action=ResourceServer>\n");
	fileOut.println("<INPUT TYPE=\"HIDDEN\" NAME=\"ReqType\" VALUE=3>\n");
	fileOut.println("<TABLE><TR><TD>Market name</TD><TD><INPUT TYPE=\"TEXT\" NAME=\"marketName\"></TD></TR>\n");
	fileOut.println("<TR><TD>Market description&nbsp;</TD><TD><INPUT TYPE=\"TEXT\" NAME=\"marketDescr\"></TD></TR>\n");
	fileOut.println("<TR><TD></TD><TD><INPUT TYPE=\"SUBMIT\" VALUE=\"ADD\"></TD></TR></TABLE>\n");
	fileOut.println(" </form>\n");
	fileOut.println("</BODY></HTML>\n");
	fileOut.close();
}
/**
 * Return Web page to browser. <br> This is the configuration page of MDVServer <br> 
 * Creation date: (07/03/00 09:00:26 AM) <br>
 * @param fileOut java.io.PrintWriter <br>
 */
public void rsrFormConfigParam(PrintWriter fileOut) {

	String serverName = "ResourceServer?";
	fileOut.println("<HTML>");
	fileOut.println("<HEAD>");
	fileOut.println("<TITLE>Param configurations of ResourceServer</TITLE>");
	fileOut.println("<SCRIPT Language = \"JavaScript\">");
	fileOut.println("<!-- ");
	fileOut.println("function change(obj){");
	fileOut.println("this.window.location = \""+ serverName +  RSRConstants.sReqType+ "=" + 12 +"&"+RSRConstants.sName+"=\"+obj.name+\"&"+ RSRConstants.sValue +"=\"+obj.paramName.value; \n}");
	fileOut.println("function b_over(){");	
	fileOut.println("this.window.location = \""+ serverName +  RSRConstants.sReqType+ "=" + 0 +"\";");	
	fileOut.println("}");
	fileOut.println("function save_to(){");	
	fileOut.println("this.window.location = \""+ serverName +  RSRConstants.sReqType+ "=" + 13 +"\";");	
	fileOut.println("}");																															
	fileOut.println("-->");
	fileOut.println("</SCRIPT>");

	fileOut.println("</HEAD>");
	fileOut.println("<BODY  text = \"black\">");
	fileOut.println("<H3>Param configurations of ResourceServer</H3><HR>");
	fileOut.println("<input type =\"button\" value=\"Save to file\" onClick =\"save_to();\">");
	fileOut.println("<input type =\"button\" value=\"Overview\" onClick =\"b_over();\">");
	fileOut.println("<HR>");
	fileOut.println("<TABLE  border = 2 cellpadding =5 cellspacing = 2 name=\"all\">");

	fileOut.println("<TR>");
	fileOut.println("	<TD>");
	fileOut.println("				<TABLE name=\"Resource Server\" border >");
	fileOut.println("				<TR>");
	fileOut.println("				<TH COLSPAN = 3 ALIGN = \"CENTER\">Resource Server<TH>");
	fileOut.println("				</TR>");
	fileOut.println("				<TR>");
	fileOut.println("				<TD  width= 150>"+rsrConfig.namesMYSQLDriver+"</TD>");	
	fileOut.println("				<FORM NAME=\""+rsrConfig.namesMYSQLDriver+"\">");
	fileOut.println("				<TD><INPUT TYPE=\"text\" SIZE = 50 NAME=\"paramName\" value=\""+ rsrConfig.sMYSQLDriver +"\"></TD>");
	fileOut.println("				<TD> <INPUT TYPE=\"button\" value=\"Change\" onClick= change(this.form)></TD>");
	fileOut.println("				</FORM>");
	fileOut.println("				</TR>");
	fileOut.println("\n");
	fileOut.println("				<TR>");
	fileOut.println("				<TD  width= 150>"+rsrConfig.namesDBName +"</TD>");
	fileOut.println("				<FORM NAME=\""+rsrConfig.namesDBName+"\">");
	fileOut.println("				<TD><INPUT TYPE=\"text\" SIZE = 50 NAME=\"paramName\" value=\""+ rsrConfig.sDBName +"\"></TD>");
	fileOut.println("				<TD> <INPUT TYPE=\"button\" value=\"Change\" onClick= change(this.form)></TD>");
	fileOut.println("				</FORM>");
	fileOut.println("				</TR>");
	fileOut.println("\n");
	fileOut.println("				<TR>");
	fileOut.println("				<TD  width= 150>"+rsrConfig.namesDBLocation +"</TD>");
	fileOut.println("				<FORM NAME=\""+rsrConfig.namesDBLocation+"\">");
	fileOut.println("				<TD><INPUT TYPE=\"text\" SIZE = 50 NAME=\"paramName\" value=\""+ rsrConfig.sDBLocation +"\"></TD>");
	fileOut.println("				<TD> <INPUT TYPE=\"button\" value=\"Change\" onClick= change(this.form)></TD>");
	fileOut.println("				</FORM>");
	fileOut.println("				</TR>");
	fileOut.println("\n");
	fileOut.println("				<TR>");
	fileOut.println("				<TD  width= 150>"+rsrConfig.namesDBUser +"</TD>");
	fileOut.println("				<FORM NAME=\""+rsrConfig.namesDBUser+"\">");
	fileOut.println("				<TD><INPUT TYPE=\"text\" SIZE = 50 NAME=\"paramName\" value=\""+ rsrConfig.sDBUser +"\"></TD>");
	fileOut.println("				<TD> <INPUT TYPE=\"button\" value=\"Change\" onClick= change(this.form)></TD>");
	fileOut.println("				</FORM>");
	fileOut.println("				</TR>");

	fileOut.println("\n");
	fileOut.println("				<TR>");
	fileOut.println("				<TD  width= 150>"+rsrConfig.namesDBPass +"</TD>");
	fileOut.println("				<FORM NAME=\""+rsrConfig.namesDBPass+"\">");
	fileOut.println("				<TD><INPUT TYPE=\"text\" SIZE = 50 NAME=\"paramName\" value=\""+ rsrConfig.sDBPass+"\"></TD>");
	fileOut.println("				<TD> <INPUT TYPE=\"button\" value=\"Change\" onClick= change(this.form)></TD>");
	fileOut.println("				</FORM>");
	fileOut.println("				</TR>");

	fileOut.println("\n");
	fileOut.println("				<TR>");
	fileOut.println("				<TD  width= 150>"+rsrConfig.namesLogFilePath +"</TD>");
	fileOut.println("				<FORM NAME=\""+rsrConfig.namesLogFilePath+"\">");
	fileOut.println("				<TD><INPUT TYPE=\"text\" SIZE = 50 NAME=\"paramName\" value=\""+ rsrConfig.sLogFilePath+"\"></TD>");
	fileOut.println("				<TD> <INPUT TYPE=\"button\" value=\"Change\" onClick= change(this.form)></TD>");
	fileOut.println("				</FORM>");
	fileOut.println("				</TR>");
	
	fileOut.println(" 			</TABLE>");
	fileOut.println("	</TD>");
	fileOut.println("</TR>");
	fileOut.println(" 			</TABLE>");
	fileOut.println("</BODY></HTML>\n");
	fileOut.close();
} // rsrFormConfigPage
/**
 * Return Web page to browser. <br> This page contein Language table , and su-functions(su): <br> 
 * - Subscribe new language <br>
 * - Delete language <br>
 * - get Edit language page <br> 
  * - get Add language page <br> 
 * Creation date: (12/16/99 11:31:06 AM) <br>
 * @param fileOut java.io.PrintWriter <br>
 */
public void rsrFormLangTab(PrintWriter fileOut) {
	String serverName = "ResourceServer?";
	int count = 0;
	String SQLStat = "select " + RSRConstants.sDBFieldLangKey + ", " + RSRConstants.sDBFieldLangShortName + ", " + RSRConstants.sDBFieldLangName + " from " + RSRConstants.sDBLanguagesTableName + " where " + RSRConstants.sDBFieldLangActive + " = 1";
	boolean exit = true;
	int error_counter = 0;
	fileOut.println("<HTML>");
	fileOut.println("<HEAD>");
	fileOut.println("<TITLE>LANGUAGE TABLE</TITLE>");
	fileOut.println("<SCRIPT Language = \"JavaScript\">");
	fileOut.println("<!-- \n     	   	  ");
	fileOut.println("function del(obj){");
	fileOut.println("	len=obj.len.value;\n	");
	fileOut.println("			for (i=0;i<len;i++){");
	fileOut.println("					if(obj.tab[i].checked ) { ");
	fileOut.println("					this.window.location=\"" + serverName + RSRConstants.sReqType + "=" + 5 + "&" + RSRConstants.sLangKey + "=\"+obj.tab[i].value; ");
	fileOut.println("							} \n ");
	fileOut.println("					} \n ");
	fileOut.println("}\n");
	fileOut.println("function get_edit(obj){");
	fileOut.println("	broi=0; \n");
	fileOut.println(" str=\"\"; \n");
	fileOut.println("	len=obj.len.value;\n	");
	fileOut.println("			for (i=0;i<len;i++){\n");
	fileOut.println("					if(obj.tab[i].checked ) { \n  ");
	fileOut.println("					this.window.location=\"" + serverName + RSRConstants.sReqType + "=" + 5 + "&" + RSRConstants.sLangKey + "=\"+obj.tab[i].value;\n ");
	fileOut.println("							} \n ");
	fileOut.println("					} \n ");
	fileOut.println("}\n");
	fileOut.println("function get_add(){");
	fileOut.println("	this.window.location=\"" + serverName + RSRConstants.sReqType + "=" + 14 + "\"\n }");
	fileOut.println("function b_over(){");
	fileOut.println("	this.window.location=\"" + serverName + RSRConstants.sReqType + "=" + 0 + "\"\n }");
	fileOut.println("-->");
	fileOut.println("</SCRIPT>");
	fileOut.println("</HEAD>");
	fileOut.println("<BODY  text = \"black\">");
	fileOut.println("<H3>Language Table</H3>");
	fileOut.println("<FORM>");
	fileOut.println("<HR>");
	fileOut.println(" <input type=\"button\" value = \"Delete\" onClick = \"del(this.form);\">\n");
	fileOut.println(" <input type=\"button\"name=\"edit\" value = \"Edit\" onClick = \"get_edit(this.form);\">\n");
	fileOut.println(" <input type=\"button\"name=\"add\" value = \"Add\" onClick = \"get_add();\">\n");
	fileOut.println(" <input type=\"button\"name=\"overview\" value = \"Rsr Overview\" onClick = \"b_over();\">\n");
	fileOut.println("<HR>");
	fileOut.println("<TABLE border=\"1\" cellspacing=\"1\" >");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>chek</TD>\n");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>" + RSRConstants.sDBFieldLangKey + "</TD>\n");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>" + RSRConstants.sDBFieldLangName + "</TD>\n");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>" + RSRConstants.sDBFieldLangShortName + "</TD>\n");
	fileOut.println("</TR>\n");
	do {
		try {
			Statement Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			while (RS.next()) {
				count++;
				fileOut.println("<TR><TD><p><INPUT TYPE=\"radio\" NAME=\"tab\" value =\"" + RS.getInt(1) + "\">");
				fileOut.println("<TD>" + RS.getInt(1) + "</TD>\n");
				fileOut.println("<TD><CENTER>" + RS.getString(3) + "</TD>\n");
				fileOut.println("<TD ><CENTER>" + RS.getString(2) + "</TD>\n");
				fileOut.println("</TR>\n");
			}
			RS.close();
			Stmt.close();
			exit = true;
		} catch (SQLException E) {
			LogOutput.log("fail on building lang interface - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	fileOut.println(" </TABLE>\n");
	fileOut.println("<INPUT TYPE=\"HIDDEN\" NAME=\"len\" VALUE=\"" + count + "\">");
	fileOut.println(" </form>\n");
	fileOut.println("</BODY></HTML>\n");
	fileOut.close();
} // rsrFormLangTabHtml
/**
 * Return Web page to browser. <br> This page conteins Market table , and su-functions(su): <br> 
 * - Subscribe new market <br>
 * - Delete market <br>
 * - get Edit market page <br> 
  * - get Add market page <br> 
 * Creation date: (13/03/00 11:31:06 AM) <br>
 * @param fileOut java.io.PrintWriter <br>
 */
public void rsrFormMarketTab(PrintWriter fileOut) {
	String serverName = "ResourceServer?";
	int count = 0;
	String SQLStat = "select " + RSRConstants.sDBFieldMarketKey + ", " + RSRConstants.sDBFieldMarketName + ", " + RSRConstants.sDBFieldMarketDescr + ", " + RSRConstants.sDBFieldMarketStatus + " from " + RSRConstants.sDBMarketsTableName;
	boolean exit = true;
	int error_counter = 0;
	fileOut.println("<HTML>");
	fileOut.println("<HEAD>");
	fileOut.println("<TITLE>MARKET TABLE</TITLE>");
	fileOut.println("<SCRIPT Language = \"JavaScript\">");
	fileOut.println("<!-- \n     	   	  ");
	fileOut.println("function del(obj){");
	fileOut.println("	len=obj.len.value;\n	");
	fileOut.println("			for (i=0;i<len;i++){\n");
	fileOut.println("					if(obj.tab[i].checked ) { \n  ");
	fileOut.println("					this.window.location=\"" + serverName + RSRConstants.sReqType + "=" + 6 + "&" + RSRConstants.sMarketKey + "=\"+obj.tab[i].value;");
	fileOut.println("							} \n ");
	fileOut.println("					} \n ");
	fileOut.println("}\n");
	fileOut.println("function activ(obj){");
	fileOut.println("	len=obj.len.value;\n	");
	fileOut.println("			for (i=0;i<len;i++){\n");
	fileOut.println("					if(obj.tab[i].checked ) { \n  ");
	fileOut.println("					this.window.location=\"" + serverName + RSRConstants.sReqType + "=" + 4 + "&" + RSRConstants.sMarketKey + "=\"+obj.tab[i].value;\n ");
	fileOut.println("							} \n ");
	fileOut.println("					} \n ");
	fileOut.println("}\n");
	fileOut.println("function get_edit(obj){");
	fileOut.println("	broi=0; \n");
	fileOut.println(" str=\"\"; \n");
	fileOut.println("	len=obj.len.value;\n	");
	fileOut.println("			for (i=0;i<len;i++){\n");
	fileOut.println("					if(obj.tab[i].checked ) { \n  ");
	fileOut.println("					this.window.location=\"" + serverName + RSRConstants.sReqType + "=" + 4 + "&" + RSRConstants.sMarketKey + "=\"+obj.tab[i].value;\n ");
	fileOut.println("							} \n ");
	fileOut.println("					} \n ");
	fileOut.println("}\n");
	fileOut.println("function get_add(){");
	fileOut.println("	this.window.location=\"" + serverName + RSRConstants.sReqType + "=" + 15 + "\"\n }");
	fileOut.println("function b_over(){");
	fileOut.println("	this.window.location=\"" + serverName + RSRConstants.sReqType + "=" + 0 + "\"\n }");
	fileOut.println("</SCRIPT>");
	fileOut.println("</HEAD>");
	fileOut.println("<BODY  text = \"black\">");
	fileOut.println("<H3>Market Table</H3>");
	fileOut.println("<FORM>");
	fileOut.println("<HR>");
	fileOut.println(" <input type=\"button\" value = \"Deactivate\" onClick = \"del(this.form);\">\n");
	fileOut.println(" <input type=\"button\" value = \"Activate\" onClick = \"activ(this.form);\">\n");
	fileOut.println(" <input type=\"button\"name=\"edit\" value = \"Edit\" onClick = \"get_edit(this.form);\">\n");
	fileOut.println(" <input type=\"button\"name=\"add\" value = \"Add\" onClick = \"get_add();\">\n");
	fileOut.println(" <input type=\"button\"name=\"overview\" value = \"Rsr Overview\" onClick = \"b_over();\">\n");
	fileOut.println("<HR>");
	fileOut.println("<TABLE border=\"1\" cellspacing=\"1\" >");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>chek</TD>\n");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>" + RSRConstants.sDBFieldMarketKey + "</TD>\n");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>" + RSRConstants.sDBFieldMarketName + "</TD>\n");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>" + RSRConstants.sDBFieldMarketDescr + "</TD>\n");
	fileOut.println("<TD bgcolor=\"#C0C0C0\"><CENTER>" + RSRConstants.sDBFieldMarketStatus + "</TD>\n");
	fileOut.println("</TR>\n");
	do {
		try {
			Statement Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			while (RS.next()) {
				count++;
				fileOut.println("<TR><TD><p><INPUT TYPE=\"radio\" NAME=\"tab\" value =\"" + RS.getInt(1) + "\">");
				fileOut.println("<TD>" + RS.getInt(1) + "</TD>\n");
				fileOut.println("<TD><CENTER>" + RS.getString(2) + "</TD>\n");
				fileOut.println("<TD ><CENTER>" + RS.getString(3) + "</TD>\n");
				String marketStatus = "undefine";
				String m_stat = RS.getString(4);
				m_stat.trim();
				if (m_stat.equalsIgnoreCase("1")) {
					marketStatus = "active";
				} else
					if (m_stat.equalsIgnoreCase("0")) {
						marketStatus = "not active";
					} else
						if (m_stat.equalsIgnoreCase("-1")) {
							marketStatus = "closed";
						}
				fileOut.println("<TD ><CENTER>" + marketStatus + "</TD>\n");
				fileOut.println("</TR>\n");
			}
			RS.close();
			Stmt.close();
			exit = true;
		} catch (SQLException E) {
			LogOutput.log("fail on getting markets - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	fileOut.println(" </TABLE>\n");
	fileOut.println("<INPUT TYPE=\"HIDDEN\" NAME=\"len\" VALUE=\"" + count + "\">");
	fileOut.println(" </form>\n");
	fileOut.println("</BODY></HTML>\n");
	fileOut.close();
}
/**
 * Return Web page to browser. <br> This is the Overview page . Contains links to<br>
 * Market table<br>
 * language table<br>
 * Configuration interface<br>
 * Re-init<br>
 * Creation date: (12/03/00 11:31:06 AM) <br>
 * @param fileOut java.io.PrintWriter <br>
 */
public void rsrFormOverview( PrintWriter fileOut ) {

	String serverNane="ResourceServer?";
	fileOut.println("<HTML>");
	fileOut.println("<HEAD>");
	fileOut.println("<TITLE>Resource Server Overview</TITLE>");
	fileOut.println("<SCRIPT Language = \"JavaScript\">");
	fileOut.println("<!-- ");
	fileOut.println("function marketTab(){");
	fileOut.println("this.window.location = \""+ serverNane + RSRConstants.sReqType + "=" + 9 +"\"\n }");
	fileOut.println("function languageTab(){");									
	fileOut.println("this.window.location = \""+ serverNane + RSRConstants.sReqType + "=" + 8 +"\"\n }");
	fileOut.println("function config(){");
	fileOut.println("this.window.location = \""+ serverNane + RSRConstants.sReqType + "=" + 11 +"\"; \n}");
	fileOut.println("function re_in(){");
	fileOut.println("this.window.location =\""+ serverNane + RSRConstants.sReqType + "=" + 16+ "\";\n}");
	fileOut.println("-->");
	fileOut.println("</SCRIPT>");
	fileOut.println("</HEAD>");
	fileOut.println("<BODY  text = \"black\">");
//	fileOut.println("<input type =\"hidden\" name =\"m_key\" value=\""+ rsrMarketKey +"\">");
	fileOut.println("<HR><H3>Resource Server Overview</H3>");
	fileOut.println("<p>ver. " + ver);
	fileOut.println("<HR>");
	fileOut.println("<FORM name=\"logs\">");
	fileOut.println("<input type=\"button\" value=\"Market Table\" onClick=\"marketTab();\">");
	fileOut.println("<input type=\"button\" value=\"Language Table\" onClick=\"languageTab();\">");
	fileOut.println("<input type=\"button\" value=\"Configurations\" onClick=\"config();\">");
	fileOut.println("<input type=\"button\" value=\"Re_Init\"onClick=\"re_in();\">");
	fileOut.println("</FORM>");
	fileOut.println("</BODY></HTML>\n");
	fileOut.close();
} // rsrFormOverview
/**
 * Builds a list with the active market keys for internal use (needs to request validation) <br>
 * Creation date: (27.2.2000 a. 14:57:56) <br>
 */
private boolean rsrGetActiveMarkets() {
	String SQLStat = "select " + RSRConstants.sDBFieldMarketKey + " from " + RSRConstants.sDBMarketsTableName + " where " + RSRConstants.sDBFieldMarketStatus + " = 1";
	Statement Stmt;
	ResultSet RS;
	int counter = 0;
	boolean exit = true;
	boolean result;
	int error_counter = 0;
	do {
		try {
			// find the number of the active markets

			Stmt = rsrDBConn.createStatement();
			RS = Stmt.executeQuery(SQLStat);
			while (RS.next())
				counter++;
			RS.close();
			Stmt.close();
			// get the keys of the active markets
			rsrActiveMarkets = new int[counter];
			counter = 0;
			Stmt = rsrDBConn.createStatement();
			RS = Stmt.executeQuery(SQLStat);
			while (RS.next())
				rsrActiveMarkets[counter++] = RS.getInt(1);
			RS.close();
			Stmt.close();
			// check for errors
			if (rsrActiveMarkets.length == 0) {
				LogOutput.log("no valid markets", LogOutput.ERROR);
				LogOutput.flush();
				result = false;
			} else
				result = true;
			exit = true;
		} catch (SQLException E) {
			LogOutput.log("sql exception on getting the active marktes - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			result = false;
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	return result;
}
/**
 * returns a string containing info about the languages as a string <br>
 * Creation date: (12/28/99 12:11:45 PM) <br>
 * @param marketKey int - if the param is equal to 1 return all the active languages <br>
 * in format langKey|langShortName|langName \n next language <br>
 * else return all the languages in format <br>
 * langKey|langShortName|langName|langActive \n next language  <br>
 */
private String rsrGetLanguages(int Filter) {
	int counter = 0;
	String resString = "";
	String SQLStat = "select " + RSRConstants.sDBFieldLangKey + ", " + RSRConstants.sDBFieldLangShortName + ", " + RSRConstants.sDBFieldLangName + " from " + RSRConstants.sDBLanguagesTableName + " where " + RSRConstants.sDBFieldLangActive + " = 1";
	boolean exit = true;
	int error_counter = 0;
	do {
		try {
			if (Filter == 1) {
				int count;
				Statement Stmt = rsrDBConn.createStatement();
				ResultSet RS = Stmt.executeQuery(SQLStat);
				while (RS.next()) {
					resString = resString + RS.getInt(1) + "|" + RS.getString(2) + "|" + RS.getString(3) + "\n";
				}
				RS.close();
				Stmt.close();
			} else {
				SQLStat = "select " + RSRConstants.sDBFieldLangKey + ", " + RSRConstants.sDBFieldLangShortName + ", " + RSRConstants.sDBFieldLangName + ", " + RSRConstants.sDBFieldLangActive + " from " + RSRConstants.sDBLanguagesTableName;
				int count;
				Statement Stmt = rsrDBConn.createStatement();
				ResultSet RS = Stmt.executeQuery(SQLStat);
				while (RS.next()) {
					resString = resString + RS.getInt(1) + "|" + RS.getString(2) + "|" + RS.getString(3) + "|" + RS.getString(4) + "\n";
				}
				RS.close();
				Stmt.close();
			}
			exit = true;
		} catch (SQLException E) {
			LogOutput.log("fail on getting languages - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	return resString;
}
/**
 * returns all the markets in a format string <br>
 * Creation date: (3.2.00 1:16:53) <br>
 * @return java.lang.String <br>
 */
private String rsrGetMarkets() {
	String resString = "";
	String SQLStat = "select " + RSRConstants.sDBFieldMarketKey + ", " + RSRConstants.sDBFieldMarketName + ", " + RSRConstants.sDBFieldMarketDescr + ", " + RSRConstants.sDBFieldMarketStatus + " from " + RSRConstants.sDBMarketsTableName;
	boolean exit = true;
	String result;
	int error_counter = 0;
	do {
		try {
			int count;
			Statement Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			while (RS.next()) {
				resString = resString + RS.getInt(1) + "|" + RS.getString(2) + "|" + RS.getString(3) + "|" + RS.getString(4) + "\n";
			}
			RS.close();
			Stmt.close();
			exit = true;
			result = resString;
		} catch (SQLException E) {
			LogOutput.log("fail on getting markets - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			result = null;
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	return result;
}
/**
 * return a valid value for a new langKey for the resources db. <br>
 * it needs an established connection to the db, pointed by the rsrDBConn field. <br>
 * the new langKey is calculated by finding the biggest one in the db an incrementing it. <br>
 * Creation date: (12/28/99 4:37:56 AM) <br>
 * @return int <br>
 */
private synchronized int rsrGetNewLangKey() {
	int langKey = 0;
	String SQLStat = "select " + RSRConstants.sDBFieldLangKey + " from " + RSRConstants.sDBLanguagesTableName;
	boolean exit = true;
	int result;
	int error_counter = 0;
	do {
		try {
			Statement Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			while (RS.next()) {
				if (langKey < RS.getInt(1)) {
					langKey = RS.getInt(1);
				}
			}
			langKey++;
			RS.close();
			Stmt.close();
			exit = true;
			result = langKey;
		} catch (SQLException E) {
			LogOutput.log("fail on getting new langKey - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			result = 0;
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	return result;
}
/**
 * find a valid key for a new market <br>
 * Creation date: (12/28/99 4:21:35 AM) <br>
 */
private synchronized int rsrGetNewMarketKey() {
	int marketKey = 0;
	boolean exit = true;
	String SQLStat = "select " + RSRConstants.sDBFieldMarketKey + " from " + RSRConstants.sDBMarketsTableName;
	int result;
	int error_counter = 0;
	do {
		try {
			Statement Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			while (RS.next()) {
				if (marketKey < RS.getInt(1)) {
					marketKey = RS.getInt(1);
				}
			}
			marketKey++;
			RS.close();
			Stmt.close();
			exit = true;
			result = marketKey;
		} catch (SQLException E) {
			LogOutput.log("fail on getting new marketKey - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			result = 0;
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	return result;
}
/**
 * contains all the init routines for the servlet <br>
 * Creation date: (17.3.2000 a. 15:07:13)
 */
private boolean rsrInit() {
	rsrConfig = new ConfigRSRServer();
	String tempCfgPath = getInitParameter(RSRConstants.sCfgPath);
	if (tempCfgPath != null)
		rsrConfig.sRSRCfgPath = tempCfgPath;
	rsrConfig.cfgLoadProperty(rsrConfig.sRSRCfgPath);
	LogOutput = LogPrinter.makeLogPrinter(rsrConfig.sLogFilePath);
	LogOutput.setLogLevel(LogPrinter.ALL);
	LogOutput.setScreenLogLevel(LogPrinter.ALL);
	if (rsrLoadDriver()) {
		if (!rsrDBConnect())
			return false;
	} else
		return false;
	LogOutput.log("Init Servlet", LogOutput.INFO);
	LogOutput.flush();
	return true;
}
/**
 * Loads the db driver <br>
 * it must be executed before trying to establish a connection with the db <br>
 * Creation date: (4/25/00 7:53:23 PM) <bg>
 * @return boolean <bg>
 */
private boolean rsrLoadDriver() {
	// load the driver
	try {
		Class.forName(rsrConfig.sMYSQLDriver).newInstance();
		return true;
	} catch (Exception E) {
		LogOutput.log("fail on loading dbDriver " + E, LogOutput.ERROR);
		LogOutput.flush();
		return false;
	}
}
/**
 * check if a language exist by langName/langShortName. <br>
 * if not, add it in languages table <br>
 * Creation date: (12/27/99 11:58:23 AM) <br>
 * @return int <bg>
 */
private int rsrResolveLang(String langName, String langShortName) {
	int langKey = 0;
	Statement Stmt;
	boolean exit = true;
	String SQLStat = "select " + RSRConstants.sDBFieldLangKey + " from " + RSRConstants.sDBLanguagesTableName + " where " + RSRConstants.sDBFieldLangName + " = \"" + langName + "\" and " + RSRConstants.sDBFieldLangShortName + " = \"" + langShortName + "\"";
	int result;
	int error_counter = 0;
	do {
		try {
			Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			if (RS.next()) {
				langKey = RS.getInt(1);
			}
			RS.close();
			Stmt.close();
			if (langKey == 0) {
				langKey = rsrGetNewLangKey();
				SQLStat = "INSERT INTO " + RSRConstants.sDBLanguagesTableName + " (" + RSRConstants.sDBFieldLangKey + ", " + RSRConstants.sDBFieldLangName + ", " + RSRConstants.sDBFieldLangShortName + ", " + RSRConstants.sDBFieldLangActive + ") values (" + langKey + ", \"" + langName + "\", \"" + langShortName + "\", 1)";
				Stmt = rsrDBConn.createStatement();
				Stmt.executeQuery(SQLStat);
				Stmt.close();
			}
			exit = true;
			result = langKey;
		} catch (SQLException E) {
			LogOutput.log("fail on resolving a language - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			result = 0;
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	return result;
}
/**
 * check if a market exist by marketName/marketDescr. <br>
 * if not, add it in markets table <br>
 * Creation date: (12/27/99 11:57:50 AM) <br>
 * @return int <br>
 */
private int rsrResolveMarket(String marketName, String marketDescr) {
	int marketKey = 0;
	Statement Stmt;
	boolean exit = true;
	String SQLStat = "select " + RSRConstants.sDBFieldMarketKey + " from " + RSRConstants.sDBMarketsTableName + " where " + RSRConstants.sDBFieldMarketName + " = \"" + marketName + "\" and " + RSRConstants.sDBFieldMarketDescr + " = \"" + marketDescr + "\"";
	int error_counter = 0;
	do {
		try {
			Stmt = rsrDBConn.createStatement();
			ResultSet RS = Stmt.executeQuery(SQLStat);
			while (RS.next()) {
				marketKey = RS.getInt(1);
			}
			RS.close();
			Stmt.close();
			if (marketKey == 0) {
				marketKey = rsrGetNewMarketKey();
				SQLStat = "INSERT INTO " + RSRConstants.sDBMarketsTableName + " (" + RSRConstants.sDBFieldMarketKey + ", " + "marketName, marketDescr, marketStatus) " + "values (" + String.valueOf(marketKey) + ", \"" + marketName + "\", \"" + marketDescr + "\", 0)";
				Stmt = rsrDBConn.createStatement();
				Stmt.executeQuery(SQLStat);
				Stmt.close();
			}
			exit = true;
		} catch (SQLException E) {
			LogOutput.log("fail on resolving a market - sql exception - " + E.getMessage(), LogOutput.ERROR);
			LogOutput.flush();
			exit = !rsrServeConnection();
			error_counter++;
		}
	} while (!exit && error_counter < 3);
	return marketKey;
}
/**
 * Saves the cfg file <bg>
 * Creation date: (07.3.2000 a. 16:38:17) <bg>
 * @param req HttpServletRequest  <bg>
 */
public void rsrSaveCfgFile() {
	
	rsrConfig.cfgSaveProperty( rsrConfig.sRSRCfgPath );
}
/**
 * checks what is the state of the db connection and restores/establish it if needed <br>
 * Creation date: (4/24/00 6:01:24 PM) <br>
 * @return boolean <br>
 */
private boolean rsrServeConnection() {
	// got to synchronize this
	if (!rsrCheckConnection()) {
		if (!rsrDBConnect()) {
			LogOutput.log("fail on restoring the db-connection", LogOutput.ERROR);
			LogOutput.flush();
			return false;
		} else {
			LogOutput.log("db-connection restored", LogOutput.INFO);
			LogOutput.flush();
			return true;
		}
	} else {
		LogOutput.log("db-connection checked, found active", LogOutput.INFO);
		LogOutput.flush();
		return true;
	}
}
/**
 * recieve and proceed all the http requests <br>
 * Creation date: (12/27/99 11:12:20 AM) <br>
 */
public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, java.io.IOException {
	int sTask = 0;
	boolean result;
	int marketKey = -1;
	int langKey;
	String langName, langShortName, marketName, marketDescr;
	PrintWriter out = res.getWriter();
	try {
		sTask = Integer.valueOf(req.getParameter(RSRConstants.sReqType)).intValue();
	} catch (NumberFormatException e) {
		out.println("false");
		out.close();
		LogOutput.log("bad data type for reqType", LogOutput.ERROR);
		LogOutput.flush();
		return;
	}
	// check if the request is a valid one
	if (sTask < 0 || sTask > 16) {
		out.println("false");
		out.close();
		LogOutput.log("invalid value for reqType", LogOutput.ERROR);
		LogOutput.flush();
		return;
	}
	switch (sTask) {
		case 0:
		    // get overview page
	        rsrFormOverview(out);	
		    break;
		case 1 :
			// get all active languages for sending them to a market
			LogOutput.log("start: get all active languages for sending them to a market", LogOutput.INFO);
			try {
				marketKey = Integer.valueOf(req.getParameter(RSRConstants.sMarketKey)).intValue();
				rsrMarketKey = marketKey;   // Kotev polzva rsrMarketKey
			} catch (NumberFormatException e) {
				out.println("false");
				out.close();
				LogOutput.log("bad data type for marketKey", LogOutput.ERROR);
				LogOutput.flush();
				return;
			}
			if (rsrActiveMarkets == null)
				if (!rsrGetActiveMarkets()) {
					out.println("false");
					out.close();
					LogOutput.log("fail on getting the active markets key", LogOutput.ERROR);
					LogOutput.flush();
					return;
				}
			if (!rsrCheckForActiveMarket(marketKey)) {
				out.println("false");
				out.close();
				LogOutput.log("request from a not - valid market", LogOutput.ERROR);
				LogOutput.flush();
				return;
			}
			String Langs = rsrGetLanguages(1);
			out.print(Langs);
			LogOutput.log("final: get all active languages for sending them to a market", LogOutput.INFO);
			break;
		case 2 :
			// register language (su)
			LogOutput.log("start: register language (su)", LogOutput.INFO);
			// read the input - langName / langShortName
			try {
				langName = req.getParameter(RSRConstants.sLangName);
				langShortName = req.getParameter(RSRConstants.sLangShortName);
			} catch (Exception e) {
				out.println("false");
				out.close();
				LogOutput.log("bad data type or no data on lang name or langName and langShortName", LogOutput.ERROR);
				LogOutput.flush();
				return;
			}
			// check for empty input
			if (langName == null || langName.equals("") || langShortName == null || langShortName.equals("")) {
				// bad input values, report the error and do nothing
				out.println("false");
				out.close();
				LogOutput.log("bad values of langName or/and langshortName", LogOutput.ERROR);
				LogOutput.flush();
				return;
			}
			langKey = rsrResolveLang(langName, langShortName);
			rsrFormLangTab( out );
//			out.print(langKey);
			LogOutput.log("final: register language (su)", LogOutput.INFO);
			break;
		case 3 :
			// register market (su)
			LogOutput.log("start: register market (su)", LogOutput.INFO);
			// read the input - marketName / marketDescr
			try {
				marketName = req.getParameter(RSRConstants.sMarketName);
				marketDescr = req.getParameter(RSRConstants.sMarketDescr);
			} catch (Exception e) {
				// bad input, report the error and do nothing
				out.println("false");
				out.close();
				LogOutput.log("bad data type of marketName or/and marketDescr", LogOutput.ERROR);
				LogOutput.flush();
				return;
			}
			if (marketName == null || marketName.equals("") || marketDescr == null || marketDescr.equals("")) {
				// bad input values, report the error and do nothing
				out.println("false");
				out.close();
				LogOutput.log("bad values of marketName or/and marketDescr", LogOutput.ERROR);
				LogOutput.flush();
				return;
			}
			marketKey = rsrResolveMarket(marketName, marketDescr);
//			out.print(marketKey);
			rsrFormMarketTab( out );
			LogOutput.log("final: register market (su)", LogOutput.INFO);
			break;
		case 4 :
			// acrivate market (su)
			LogOutput.log("start: acrivate market (su)", LogOutput.INFO);
			try {
				marketKey = Integer.valueOf(req.getParameter(RSRConstants.sMarketKey)).intValue();
			} catch (NumberFormatException e) {
				// bad input, report the error and do nothing
				out.println("false");
				out.close();
				LogOutput.log("bad data typr of the marketKey", LogOutput.ERROR);
				LogOutput.flush();
				return;
			}
			result = rsrActivateMarket(marketKey);
//			out.println(result);
			rsrFormMarketTab( out );
			LogOutput.log("final: acrivate market (su)", LogOutput.INFO);			
			break;
		case 5 :
			// deactivate language (su)
			LogOutput.log("start: deactivate language (su)", LogOutput.INFO);
			try {
				langKey = Integer.valueOf(req.getParameter(RSRConstants.sLangKey)).intValue();
			} catch (NumberFormatException e) {
				// bad input, report the error and do nothing
				out.println("false");
				out.close();
				LogOutput.log("bad data type of the langKey", LogOutput.ERROR);
				LogOutput.flush();
				return;
			}
			result = rsrDeActivateLang(langKey);
//			out.println(result);
			 rsrFormLangTab( out );
			LogOutput.log("final: deactivate language (su)", LogOutput.INFO);
			break;
		case 6 :
			// deactivate market (su)
			LogOutput.log("start: deactivate market (su)", LogOutput.INFO);
			try {
				marketKey = Integer.valueOf(req.getParameter(RSRConstants.sMarketKey)).intValue();
			} catch (NumberFormatException e) {
				out.println("false");
				out.close();
				LogOutput.log("bad data type of the marketKey", LogOutput.ERROR);
				LogOutput.flush();
				return;
			}
			result = rsrDeActivateMarket(marketKey);
//			out.println(result);
			rsrFormMarketTab( out );
			LogOutput.log("final: deactivate market (su)", LogOutput.INFO);
			break;
		case 7 :
			// get all markets (su)
			LogOutput.log("start: get all markets (su)", LogOutput.INFO);
			String Markets = rsrGetMarkets();
			out.print(Markets);
			LogOutput.log("final: get all markets (su)", LogOutput.INFO);
			break;
		case 8 :
			// get all languages with html interface for su-functions(su)
			LogOutput.log("start: get all languages with html interface for su-functions(su)", LogOutput.INFO);
		//	out.print(rsrBuildHTMLLangInterFace());
			rsrFormLangTab( out );
			LogOutput.log("final: get all languages with html interface for su-functions(su)", LogOutput.INFO);
			break;
		case 9 :
			// get all markets with html interface for su-functions(su)
			LogOutput.log("start: get all markets with html interface for su-functions(su)", LogOutput.INFO);
//			out.print(rsrBuildHTMLMarketInterFace());
			rsrFormMarketTab( out );
			LogOutput.log("final: get all markets with html interface for su-functions(su)", LogOutput.INFO);
			break;
		case 10 :
			// build a list of all the active markets for validation
			LogOutput.log("start: build a list of all the active markets for validation", LogOutput.INFO);
			out.print(rsrBuildActiveMarketsList());
			LogOutput.log("final: build a list of all the active markets for validation", LogOutput.INFO);
			break;
		case 11 :
			// get get config page
	        rsrFormConfigParam(out);	
		    break;
		case 12 :
			// change config parameters page
			rsrChangeParams( req );		
	        rsrFormConfigParam(out);	
		    break;
		case 13 :
			  // saves cfg file		
			rsrSaveCfgFile();
	        rsrFormConfigParam(out);	
		    break;
		case 14 :
		    // get add lag page
   	        rsrFormAddLang( out );
   	        break;		    		    		    
		case 15 :
		    // get add page
	        rsrFormAddMarket( out);
		    break;
	    case 16 :
	    	// re - init the servlet
	    	rsrInit();
   	        rsrFormOverview(out);	
	    	break;
	}
	LogOutput.flush();
	out.close();
}
}

