| using System;
                                    using System.Data;
                                    
                                    using System.Diagnostics;
                                    using System.Text;
                                    using System.IO;
                                    using System.Collections;
                                    using System.Runtime.Serialization;
                                    using System.Runtime.Serialization.Formatters;
                                    using System.Runtime.Serialization.Formatters.Binary;
                                    using System.Threading;
                                    
                                    //###2
                                    
                                    namespace EXCommon
                                    {
                                    	/// 
                                    	/// Description résumée de BaseSerializable.
                                    	/// 
                                    	///
                                    	[Serializable]
                                    	abstract public class CSerializableBase
                                    	{
                                    		public CSerializableBase()
                                    		{
                                    
                                    		}
                                    		public const int	NOT_IN_STRING = -1;
                                    		static public bool PORTFOLIO_PERSISTENCE = true;
                                    
                                    		public static bool Contains( string strContenant, string strObject) 
                                    		{
                                    			return strContenant.IndexOf( strObject ) != NOT_IN_STRING;
                                    		}
                                    		public static bool ContainsNoCase( string strContenant, string strObject) 
                                    		{
                                    			return strContenant.ToUpper().IndexOf( strObject.ToUpper() ) != NOT_IN_STRING;
                                    		}
                                    
                                    		public bool IsSameDay(DateTime oLastDate, DateTime oTodayDate) 
                                    		{
                                    			return oLastDate.Year == oTodayDate.Year && oLastDate.Month == oTodayDate.Month
                                    				&&  oLastDate.Day == oTodayDate.Day;
                                    		}
                                    
                                    public const bool MORE_THAN = true;
                                    public const bool LESS_THAN = false;
                                    
                                    		static public bool IsUsed( int nValue) 
                                    		{
                                    			return nValue != NOT_USED &&   nValue != END_OF_SERIAL &&
                                    				nValue != NO_INFORMATION ;
                                    
                                    		}
                                    		static public bool IsUsed( double dValue) 
                                    		{
                                    			return dValue != NOT_USED &&   dValue != END_OF_SERIAL &&
                                    				dValue != NO_INFORMATION && Double.IsNaN(dValue) == false && Double.IsInfinity(dValue) == false;
                                    
                                    		}
                                    
                                    
                                    
                                    static string GetDownloadedUrlPath(string strDirectoryPath, string strTicker)
                                    {
                                    
                                    
                                    string strFilePath = strDirectoryPath + "\\" + strTicker.ToUpper() + ".html";
                                    if (!File.Exists(strFilePath))
                                    {
                                    strFilePath = strDirectoryPath + "\\" + strTicker.ToUpper() + ".htm";
                                    if (!File.Exists(strFilePath))
                                    {
                                    return null;
                                    }
                                    
                                    }
                                    if (!IsFileFilledUp(strFilePath))
                                    {
                                    return null;
                                    }
                                    
                                    return strFilePath;
                                    }
                                    
                                    
                                    
                                    
                                    static public bool IsFileFilledUp(string strPath)
                                    {
                                    
                                    
                                    Debug.WriteLine("IsFileFilledUp = " + strPath);
                                    if (File.Exists(strPath))
                                    {
                                    FileInfo oFileInfo = new FileInfo(strPath);
                                    return oFileInfo.Exists && oFileInfo.Length > 0;
                                    }
                                    return false;
                                    
                                    
                                    }
                                    
                                    static public string ConvertToTableName(string strTicker)
                                    {
                                    string strTableName = strTicker;
                                    strTableName = strTableName.Replace('.', '_');
                                    strTableName = strTableName.Replace('^', '_');
                                    if (strTableName[0] != '[') strTableName = "[" + strTableName + "]";
                                    return strTableName;
                                    }
                                    
                                    static public string RemoveBracket(string strName)
                                    {
                                    
                                    if (strName[0] == '[') strName = strName.Substring(1);
                                    if (strName[strName.Length - 1] == ']') strName = strName.Substring(0, strName.Length - 1);
                                    return strName;
                                    }
                                    public enum ENBoolean
                                    {
                                    True,
                                    False,
                                    Unknown
                                    }
                                    		static public bool IsNotUsed( object  oValue) 
                                    		{
                                    			return ! IsUsed( oValue);
                                    		}
                                    
                                    		static public bool IsUsed( object oValue) 
                                    		{
                                    			if ( oValue == null) 
                                    			{
                                    				return false;
                                    			}
                                    			if (  oValue is int ||  oValue is double ) 
                                    			{
                                    				int nValue;
                                    
                                    				try 
                                    				{
                                    					nValue = Convert.ToInt32(oValue);
                                    				}
                                    				catch (OverflowException e)
                                    				{
                                    CTrace.i().vWriteLn(ENMessage.Trace, "oValue = " + oValue);
                                    CTrace.i().vWriteLn(ENMessage.Trace, e.ToString() + " Source = " + e.Source + " Msg = " + e.Message);
                                    					nValue = NOT_USED;
                                    				}
                                    				return nValue != NOT_USED &&    nValue != END_OF_SERIAL &&
                                    					nValue != NO_INFORMATION;  ;
                                    			}
                                    			else if (  oValue is string ) 
                                    			{
                                    				string strValue =  oValue.ToString();
                                    				return strValue != null && strValue.Length > 0 && strValue != NOT_USED_STR  &&  strValue != NO_DATA
                                    					&& strValue != NO_INFORMATION_STR && strValue != "%" &&  strValue !=  "null"; 
                                    
                                    			}
                                    			else if (  oValue is DateTime ) 
                                    			{
                                    				DateTime oDate =  Convert.ToDateTime(oValue);
                                    				return oDate != NOT_USED_DATE;; 
                                    
                                    			}
                                    
                                    			Debug.Assert( false, oValue.GetType() + " is not known ");
                                    			return false;
                                    		}
                                    		public static DateTime YAHOO_DAILY_FIRST_DATE  = new DateTime( 1950, 1,1);
                                    
                                    static public void EPAssert(bool bAssert, string sMessage)
                                    {
                                    
                                    CTrace.i().vAssert(bAssert, "Assert failed = " + sMessage);
                                    
                                    }
                                    static public void EPAssert(bool bAssert)
                                    {
                                    
                                    CTrace.i().vAssert(bAssert);
                                    }
                                    		public const string CURRENCY_REFERENCE		=	"USD";
                                    		public enum ENCurrency 
                                    		{
                                    			AUD,
                                    			CAD,
                                    			CHF,	
                                    			EUR,
                                    			GBP,
                                    			HKD,
                                    			JPY,
                                    			USD,
                                    			NONE,
                                    			Count
                                    
                                    		}
                                    		static public bool IsNotUsed( double dValue) 
                                    		{
                                    			return  dValue == -888 ||  dValue == NOT_USED ||  dValue == END_OF_SERIAL ||  Double.IsNaN(dValue) || Double.IsInfinity(dValue);
                                    
                                    		}
                                    		static public bool IsNotUsed( string strValue) 
                                    		{
                                    			return strValue == null || strValue.Length == 0 || strValue == "-888" || strValue == NOT_USED_STR || strValue == NO_DATA
                                    				|| strValue == NO_INFORMATION_STR ||strValue == NON_APPLICABLE_STRING_ZACKS || strValue == "%"  || strValue == "null"
                                    ;
                                    		}
                                    
                                    		static public bool IsNotUsed( DateTime oDate) 
                                    		{
                                    			return oDate == NOT_USED_DATE; 
                                    		}
                                    	
                                    		public const string		NO_DATA = "-666";
                                    		public const int		NOT_USED	= -999;
                                    		public const string		NOT_USED_STR	= "-999";
                                    		public const int		NO_INFORMATION	= -888;
                                    		public const string		NO_INFORMATION_STR	= "-888";
                                    		public const double		END_OF_SERIAL = -666;
                                    		public static DateTime NOT_USED_DATE = new DateTime( 1800,12,31);
                                    		public const string		NON_APPLICABLE_STRING_ZACKS	= "n/a";
                                    
                                    	
                                    		public static string ToString(int nPad, object obj) 
                                    		{
                                    			string str;
                                    			if ( obj == null) return str = "null";
                                    			else str = obj.ToString();
                                    
                                    			return   str.Length < nPad ? string.Format("{0:-" + nPad.ToString() + "}",str) : str.Substring(0,nPad); 
                                    		}
                                    public const string FILE_PATH = "D:\\tmp";
                                    
                                    	}
                                    public enum ENMessage
                                    {
                                    sqlError,
                                    sqlWarning,
                                    sqlNotExistingTableWarning,
                                    sqlDuplicateIndexWarning,
                                    sqlTrace,
                                    Trace,
                                    assert,
                                    Report,
                                    Organisation,
                                    Feature,
                                    Parser,
                                    Lesson,
                                    ParseLesson,
                                    Thread,
                                    Access,
                                    Convert,
                                    Error,
                                    Warning,
                                    Avatar,
                                    TraceManager,
                                    CommandParsing,
                                    DbS,
                                    DbMultiJoin,
                                    DbView,
                                    CommandManager,
                                    CommandManagerDetail,
                                    EmailManager,
                                    Entity,
                                    DbTrace,
                                    EntityLoading,
                                    Attribute,
                                    		Identifier,
                                    DbMultiSlaveView,
                                    		Function
                                    }
                                    
                                    /// 
                                    /// Description résumée de BaseSerializable.
                                    /// 
                                    ///
                                    public class CTrace : CSerializableBase
                                    {
                                    protected CTrace()
                                    {
                                    m_oAllStream =  File.CreateText(FILE_PATH + "\\trace\\" + "all.rtf");
                                    m_oAllStream.AutoFlush = true;
                                    m_oTraceStream = File.CreateText(FILE_PATH + "\\trace\\" + "traces.rtf");
                                    m_oTraceStream.AutoFlush = true;
                                    m_oPriorityStream = File.CreateText(FILE_PATH + "\\trace\\" + "reduce.rtf");
                                    m_oPriorityStream.AutoFlush = true;
                                    }
                                    ENMessage[] enPriorityMessageList = {  ENMessage.DbMultiSlaveView, ENMessage.Access, ENMessage.Convert, ENMessage.sqlTrace,
                                    ENMessage.sqlError, 
                                    ENMessage.DbView, ENMessage.Organisation, ENMessage.Avatar,  ENMessage.CommandManager,   ENMessage.Function, ENMessage.Identifier,
                                    ENMessage.Parser};
                                    public bool bIsPriority(ENMessage enMessage)
                                    {
                                    foreach (ENMessage enIdxMessage in enPriorityMessageList)
                                    {
                                    if (enMessage == enIdxMessage)
                                    {
                                    return true;
                                    }
                                    
                                    }
                                    return false;
                                    }
                                    public void vWriteLn(ENMessage enMessage, string sMessage)
                                    {
                                    vWrite(enMessage, sMessage + "\n");
                                    }
                                    public void vWrite(ENMessage enMessage, string sMessage)
                                    {
                                    m_oAllStream.Write(sMessage + " ");
                                    if (enMessage == ENMessage.sqlTrace || enMessage == ENMessage.Trace || bIsPriority(enMessage))
                                    {
                                    m_oTraceStream.Write(enMessage + ": " + sMessage + " " );
                                    }
                                    if (bIsPriority(enMessage))
                                    {
                                    m_oPriorityStream.Write(enMessage + ": " + sMessage + " ");
                                    Debug.Write(enMessage + ": " + sMessage +  " ");
                                    }
                                    
                                    }
                                    
                                    
                                    StreamWriter m_oAllStream, m_oTraceStream, m_oPriorityStream;
                                    static CTrace m_oTrace = null;
                                    public static CTrace i()
                                    {
                                    if (m_oTrace == null)
                                    {
                                    m_oTrace = new CTrace();
                                    }
                                    return m_oTrace;
                                    }
                                    public void vWriteSqlLn( string sMessage)
                                    {
                                    vWriteSql(sMessage + "\n");
                                    }
                                    public void vWriteSql(string sMessage)
                                    {
                                    vWrite(ENMessage.DbTrace, sMessage);
                                    }
                                    public void vWriteSqlLn( int dError, string sMessage)
                                    {
                                    
                                    vWriteSql(dError, sMessage + "\n");
                                    }
                                    public void vWriteSql(int dError, string sMessage)
                                    {
                                    if (dError != 208 && dError != 2067 && dError != 3022 && dError != 911 && dError != 1913)
                                    {
                                    vWrite(ENMessage.sqlError, "|error:" + dError + "|" + sMessage);
                                    }
                                    else
                                    {
                                    vWrite(ENMessage.sqlWarning, "|error:" + dError + "|" + sMessage);
                                    }
                                    }
                                    
                                    
                                    public void vAssert(bool bExecuted)
                                    {
                                      vAssert(bExecuted, null);
                                    
                                            }
                                            public void vAssertMessage(bool bExecuted, string sMessage)
                                            {
                                                if (bExecuted == false)
                                                {
                                                    vWrite(ENMessage.assert, "Assert Failed:" + sMessage);
                                         
                                                }
                                            }
                                            public void vAssert(bool bExecuted, string sMessage)
                                            {
                                                if (bExecuted == false)
                                                {
                                                    vWrite(ENMessage.assert, "Assert Failed:" + sMessage);
                                                    Debug.Assert(bExecuted, sMessage);
                                                    return;
                                             
                                                }
                                            }
                                    
                                    
                                        }
                                    }
                                    
                                    
                                  |