|  |  | 
                  
                     | 
                           Enter subhead content here
                           
                         |  
                     |  |  
                     | 
                           
                              | using System;
                                    using System.Text;
                                    using System.Collections;
                                    using System.Diagnostics;
                                    using System.IO;
                                    using EXDb97;
                                    using EXCommon;
                                    
                                    //###2
                                    namespace EPol
                                    {
                                    /// 
                                    /// Summary description for Class1.
                                    /// 
                                    public class CEmailCommandManager : CCommandFactoryBase
                                    {
                                    public CEmailCommandManager()
                                    : base()
                                    {
                                    m_oCommandManager = null;
                                    }
                                    CCommandManager m_oCommandManager;
                                    
                                    public CCommandManager  CommandManager
                                    {
                                    get
                                    {
                                    return m_oCommandManager;
                                    }
                                    }
                                    
                                    public bool bInitDatabase(  string sDatabaseName)
                                    {
                                    m_oCommandManager = new CCommandManager(P.ENGLISH);
                                    bool bRet= m_oCommandManager.bInitDatabase(sDatabaseName);
                                    return bRet;
                                    }
                                    
                                    public string sDatabaseName{
                                    get {
                                    return m_oCommandManager.sDatabaseName;
                                    }
                                    }
                                    public void vCleanAllData()
                                    {
                                    m_oCommandManager.vCleanAllData();
                                    }
                                    public void vRegister()
                                    {
                                    m_oCommandManager.vRegister();
                                    }
                                    public ec dExecute(CReceivedEmail oRecievedEmail, out CStatusEmail oStatusEmail)
                                    {
                                    m_oCommandManager.m_oCommandLine.vClear();
                                    
                                    oStatusEmail = new CStatusEmail(oRecievedEmail.sGetRecipientEmail(0),
                                    oRecievedEmail.m_sSenderName, oRecievedEmail.m_sSenderAdress); 
                                    ec dStatus = ec.ST_SUCCEED;
                                    for (int dRecipientIndex = 0; dRecipientIndex < oRecievedEmail.dRecipientCount; dRecipientIndex++)
                                    {
                                    P  dLanguage = CEntityManager.Instance(P.ENGLISH).dFindEntity(
                                    CCommandFactoryBase.csGetParameter(P.LANGUAGE.ToString().ToLower(),  
                                    oRecievedEmail.Subject));
                                    
                                    if (dLanguage == P.LANGUAGE) dLanguage = P.ENGLISH;
                                    m_oCommandManager.Language = dLanguage;
                                    CCommandParser oCommandParser = CCommandParser.Instance(dLanguage, "");
                                    string sUserIDPublicProfile;
                                    if (dRecipientIndex ==0 && m_oCommandManager.bIsEmailRegistered(oRecievedEmail.m_sSenderAdress) == false)
                                    {
                                    if (m_oCommandManager.bRegister(oRecievedEmail.m_sSenderAdress, dLanguage, out sUserIDPublicProfile))
                                    {
                                    oStatusEmail.vAddLine("Congratulation. You are registered in " + ELECTRONIC_DEMOCRACY_INITIALE + " database.");
                                    oStatusEmail.vAddLine("Your default public profile is " + sUserIDPublicProfile + ".");
                                    oStatusEmail.vAddLine("You can change it with the command:\nupdate avatar " +
                                    sUserIDPublicProfile + " -name:{new_avatar_name}");
                                    EPAssert(IsUsed(m_oCommandManager.SenderProfileIndex), "The sender profile should be known");        
                                    
                                    }
                                    else
                                    {
                                    m_oCommandManager.vAdd(oRecievedEmail.m_sSenderAdress, ec.ST_PROFILE_UNDEFINED);
                                    oStatusEmail.vAddStatus(oRecievedEmail.Subject, m_oCommandManager.m_oCommandLine.GetErrors,
                                    "", "  Can not register the email adress");
                                    dStatus = ec.ST_PROFILE_UNDEFINED;
                                    }
                                    }
                                    if (dStatus == ec.ST_SUCCEED)
                                    {
                                    
                                    EPAssert(IsUsed(m_oCommandManager.m_oCommandLine.SenderIndex), "The sender profile should be known");
                                    
                                    
                                    dStatus = m_oCommandManager.dAddRecipient(oRecievedEmail.sGetRecipient(dRecipientIndex));
                                    if (dStatus != ec.ST_SUCCEED)
                                    {
                                    m_oCommandManager.vAdd(oRecievedEmail.sGetRecipient(dRecipientIndex), dStatus);
                                    oStatusEmail.vAddStatus(ELECTRONIC_DEMOCRACY_INITIALE + ": "  +
                                    oRecievedEmail.Subject, m_oCommandManager.m_oCommandLine.GetErrors, oRecievedEmail.sGetRecipient(dRecipientIndex), "The recipient
                                    adress is not valid");
                                    }
                                    else
                                    {
                                    
                                    //  m_oCommandManager.vInitializeCommandLineFactory();
                                    CTrace.i().vWrite(ENMessage.CommandManager, "oRecievedEmail.CommandCount = " + oRecievedEmail.CommandCount);
                                    
                                    for (int i = 0; i < oRecievedEmail.CommandCount; i++)
                                    {
                                    string  csBodyMessage;
                                    csBodyMessage = "";
                                    dStatus = ec.ST_SUCCEED;
                                    P dCommand =oRecievedEmail.getEmailCommand(i).m_dCommand;
                                    P dEntity = CDbEntityManager.Instance(
                                    m_oCommandManager.m_sDatabaseName, dLanguage).dGet(dLanguage, oRecievedEmail.getEmailCommand(i).m_sEntityName);
                                    
                                    
                                    CTrace.i().vWriteLn(ENMessage.CommandManager, "CommandLine=" +  m_oCommandManager.m_oCommandLine.csDump() );
                                    if (IsUsed(dCommand) && IsUsed(dEntity ) )
                                    {
                                    
                                    dStatus = m_oCommandManager.dExecute(oRecievedEmail.getEmailCommand(i).m_dCommand, dEntity,
                                    oRecievedEmail.getEmailCommand(i).m_csEntityContent,
                                    oRecievedEmail.getEmailCommand(i).m_csOptionString,
                                    out csBodyMessage);
                                    CTrace.i().vWriteLn(ENMessage.CommandManager, "oRecievedEmail = " + oRecievedEmail.getEmailCommand(i).csDump());
                                    
                                    m_oCommandManager.m_oCommandLine.vAdd(dCommand + " " + dEntity, dStatus);
                                    
                                    
                                    }
                                    else if (IsNotUsed(dCommand))
                                    {
                                    dStatus = ec.ST_COMMAND_IS_NOT_KNOWN;
                                    m_oCommandManager.m_oCommandLine.vAdd(dCommand, dStatus);               
                                    }
                                    else if (IsNotUsed(dEntity))
                                    {
                                    dStatus = ec.ST_ENTITY_NOT_SUPPORTED;
                                    m_oCommandManager.m_oCommandLine.vAdd(dEntity, dStatus);
                                    
                                    }
                                    else
                                    {
                                    m_oCommandManager.m_oCommandLine.vAdd(dEntity, dStatus);
                                    
                                    }
                                    oStatusEmail.vAddStatus(ELECTRONIC_DEMOCRACY_INITIALE + ": " + m_oCommandManager.Synopsis,
                                    m_oCommandManager.m_oCommandLine.GetErrors, oRecievedEmail.sGetRecipient(dRecipientIndex), csBodyMessage);
                                    if (dStatus != ec.ST_SUCCEED && BREAK_AT_FIRST_BUG)
                                    {
                                    break;
                                    }
                                    }
                                    }
                                    }
                                    }
                                    return dStatus;
                                    }
                                    }
                                    
                                    
                                    /// 
                                    /// Summary description for Class1.
                                    /// 
                                    public abstract class CEmail : CCommandFactoryBase
                                    {
                                    
                                    public CEmail(string sSenderAdress, string sSenderName, string[] sRecipientAdressArray)
                                    {
                                    m_sRecipientAdress = sRecipientAdressArray;
                                    m_sSenderName = sSenderName;
                                    m_sSenderAdress = sSenderAdress;
                                    }
                                    public CEmail(string sSenderAdress, string sSenderName, string sRecipientAdress)
                                    {
                                    m_sRecipientAdress = new string[1];
                                    m_sRecipientAdress[0]= sRecipientAdress;
                                    m_sSenderName = sSenderName;
                                    m_sSenderAdress = sSenderAdress;
                                    }        public string m_sSenderAdress, m_sSenderName;
                                    string[] m_sRecipientAdress;
                                    
                                    
                                    public virtual string csDump()
                                    {
                                    string csDump = " m_csRecipientAdress=" + m_sRecipientAdress +
                                    " m_csSenderAdress=" + m_sSenderAdress + " m_sSenderName=" + m_sSenderName + "\n";
                                    return csDump;
                                    }
                                    public string[] sGetAdressArray(string sAddressArray)
                                    {
                                    sAddressArray= sAddressArray.Trim('<', '>');
                                    ArrayList oArray = new ArrayList();
                                    int dIndex=0;
                                    while (dIndex < sAddressArray.Length)
                                    {
                                    int dNextNext = sAddressArray.IndexOf(';', dIndex);
                                    if (dNextNext == -1)
                                    {
                                    oArray.Add(sAddressArray.Substring(dIndex));
                                    break;
                                    }
                                    else
                                    {
                                    oArray.Add(sAddressArray.Substring(dIndex, dNextNext - dIndex));
                                    }
                                    dIndex = dNextNext + 1;
                                    }
                                    return (string[])oArray.ToArray(typeof(String));
                                    
                                    }
                                    
                                    public P  Language {
                                    
                                    get
                                    {
                                    P dLanguage = P.ENGLISH;
                                    if (Subject != "")
                                    {
                                    dLanguage = CEntityManager.Instance(P.ENGLISH).dFindEntity(CCommandFactoryBase.csGetParameter(P.LANGUAGE.ToString().ToLower(),
                                    Subject));
                                    }
                                    if (dLanguage == P.LANGUAGE || IsNotUsed(dLanguage)) dLanguage = P.ENGLISH;
                                    return dLanguage;
                                    }
                                    }
                                    public int dRecipientCount
                                    {
                                    get
                                    {
                                    return m_sRecipientAdress.Length;
                                    }
                                    }
                                    
                                    public string sGetRecipient(int i)
                                    {
                                    
                                    return csUsedIDFromEmailAdress(m_sRecipientAdress[i]);
                                    }
                                    
                                    public string sGetRecipientEmail(int i)
                                    {
                                    
                                    return  m_sRecipientAdress[i];
                                    }
                                    
                                    
                                    
                                    public virtual bool bIsValid
                                    {
                                    
                                    get
                                    {
                                    
                                    return m_sRecipientAdress != null && m_sSenderAdress != null &&
                                    m_sRecipientAdress[0] != "" && m_sSenderAdress != "";
                                    
                                    }
                                    
                                    }
                                    public abstract string Subject
                                    {
                                    get;
                                    }
                                    public abstract string BodyText
                                    {
                                    get;
                                    }
                                    
                                    
                                    
                                    }
                                    
                                    public class CStatusEmail : CEmail
                                    {
                                    
                                    public CStatusEmail(string sSenderAdress, string sName, string[] sRecipientAdressArray)
                                    : base(sSenderAdress, sName, sRecipientAdressArray)
                                    {
                                    m_oStatusLine = new ArrayList();
                                    
                                    }
                                    public CStatusEmail(string sSenderAdress, string sName, string sRecipientAdress)
                                    : base(sSenderAdress, sName, sRecipientAdress)
                                    {
                                    m_oStatusLine = new ArrayList();
                                    
                                    }
                                    
                                    ArrayList m_oStatusLine;
                                    public void vAddLine(string csMessage)
                                    {
                                    m_oStatusLine.Add(csMessage);
                                    }
                                    
                                    public void vAddStatus(string csSynopsys, ENErrorEvent[] dErrorArrayCode, string sRecipientName, string csMessage)
                                    {
                                    
                                    
                                    m_oStatusLine.Add(csSynopsys + " >> " + ToString(dErrorArrayCode) );
                                    if (sRecipientName != "")
                                    {
                                    m_oStatusLine.Add("From:" + sRecipientName);
                                    }
                                    
                                    if (csMessage != "")
                                    {
                                    m_oStatusLine.Add( csMessage);
                                    }
                                    
                                    }
                                    
                                    
                                    public override string Subject
                                    {
                                    get
                                    {
                                    if (m_oStatusLine.Count == 0)
                                    {
                                    return "";
                                    }
                                    else
                                    {
                                    return m_oStatusLine[0].ToString();
                                    }
                                    }
                                    }
                                    public override string BodyText
                                    {
                                    get
                                    {
                                    if (m_oStatusLine.Count <= 1)
                                    {
                                    return "";
                                    }
                                    else
                                    {
                                    StringBuilder oStringBuilder = new StringBuilder();
                                    for (int i = 1; i < m_oStatusLine.Count; i++)
                                    {
                                    oStringBuilder.Append(m_oStatusLine[i] + "\n");
                                    }
                                    return oStringBuilder.ToString();
                                    }
                                    }
                                    }
                                    
                                    public override string csDump()
                                    {
                                    string csDump = base.csDump();
                                    csDump += "Subject: " + Subject + "\n";
                                    csDump += "Body: " + BodyText + "\n";
                                    return csDump;
                                    }
                                    
                                    
                                    
                                    }
                                    
                                    
                                    
                                    public class CReceivedEmail : CEmail
                                    {
                                    
                                    public CReceivedEmail(string sSenderAdress, string sName, string[] sRecipientAdressArray, DateTime oRecieveTime)
                                    : base(sSenderAdress, sName, sRecipientAdressArray)
                                    {
                                    
                                    m_oRecieveDateTime = oRecieveTime;
                                    m_oEmailCommandArray = new ArrayList();
                                    }
                                    public CReceivedEmail(string sSenderAdress, string sName, string  sRecipientAdress, DateTime oRecieveTime)
                                    : base(sSenderAdress, sName, sRecipientAdress)
                                    {
                                    
                                    m_oRecieveDateTime = oRecieveTime;
                                    m_oEmailCommandArray = new ArrayList();
                                    
                                    }
                                    // public string m_csSenderAdress, m_csRecipientAdress;
                                    public DateTime m_oRecieveDateTime;
                                    
                                    public override string csDump()
                                    {
                                    string csDump = "m_csSenderAdress = " + m_sSenderAdress + " Date:" + m_oRecieveDateTime + "\n";
                                    for (int i = 0; i < m_oEmailCommandArray.Count; i++)
                                    {
                                    csDump += ((CEmailCommand)m_oEmailCommandArray[i]).csDump() + "\n";
                                    }
                                    
                                    return csDump + base.csDump();
                                    }
                                    
                                    protected ArrayList m_oEmailCommandArray;
                                    
                                    public int CommandCount
                                    {
                                    get
                                    {
                                    return m_oEmailCommandArray.Count;
                                    }
                                    }
                                    
                                    public CEmailCommand getEmailCommand(int i)
                                    {
                                    return (CEmailCommand)m_oEmailCommandArray[i];
                                    }
                                    
                                    
                                    
                                    
                                    
                                    public ec dAddText(string csText)
                                    {
                                    
                                    
                                    string csEntityContent, csOptionString;
                                    
                                    ec dErrorCode;
                                    CCommandParser oCommandParser = CCommandParser.Instance(Language, csText);
                                    
                                    int i = 0;
                                    P dCommand; string sEntity;
                                    while ((dErrorCode = oCommandParser.dNext(out dCommand, out sEntity, out csEntityContent, out csOptionString)) != ec.ST_PARSER_EOM)
                                    {
                                    
                                    if ( dErrorCode == ec.ST_PARSER_CANNOT_FIND_THE_NEXT_COMMAND)
                                    {
                                    return ec.ST_WRONG_EMAIL;
                                    }
                                    
                                    if (dErrorCode == ec.ST_SUCCEED)
                                    {
                                    m_oEmailCommandArray.Add(new CEmailCommand(Language, dCommand, sEntity, csEntityContent, csOptionString)); i++;
                                    
                                    }
                                    else
                                    {
                                    CTrace.i().vWriteLn(ENMessage.Lesson,"dErrorCode = " + dErrorCode);
                                    }
                                    
                                    }
                                    return dErrorCode;
                                    
                                    }
                                    
                                    public override bool bIsValid
                                    {
                                    
                                    get
                                    {
                                    
                                    return base.bIsValid && m_oEmailCommandArray.Count > 0;
                                    
                                    }
                                    
                                    }
                                    public override string Subject
                                    {
                                    get
                                    {
                                    if (m_oEmailCommandArray.Count == 0)
                                    {
                                    return "";
                                    }
                                    else
                                    {
                                    return ((CEmailCommand)m_oEmailCommandArray[0]).Synopsis;
                                    }
                                    }
                                    }
                                    public override string BodyText
                                    {
                                    get
                                    {
                                    if (m_oEmailCommandArray.Count <= 1)
                                    {
                                    return "";
                                    }
                                    else
                                    {
                                    StringBuilder oStringBuilder = new StringBuilder();
                                    for (int i = 1; i < m_oEmailCommandArray.Count; i++)
                                    {
                                    oStringBuilder.Append(((CEmailCommand)m_oEmailCommandArray[i]).Synopsis + "\n");
                                    }
                                    return oStringBuilder.ToString();
                                    }
                                    }
                                    }
                                    
                                    
                                    
                                    
                                    }
                                    /// 
                                    /// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                                    /// 
                                    public class CLesson : CLessonBase
                                    {
                                    public CLesson()
                                    {
                                    vClear();
                                    }
                                    public CLesson(CLesson oLesson)
                                    {
                                    vClear();
                                    if (oLesson != null)
                                    {
                                    m_sPurpose = oLesson.m_sPurpose;
                                    m_sTitle = oLesson.m_sTitle;
                                    m_sDefaultDomain = oLesson.m_sDefaultDomain;
                                    }
                                    
                                    }
                                    
                                    public string Title
                                    {
                                    get
                                    {
                                    return m_sTitle;
                                    }
                                    }
                                    public bool isValid
                                    {
                                    get
                                    {
                                    if (m_sPurpose != ""  && m_sTitle != "" &&  m_oLessonEmailArray.Count > 0)
                                    {
                                    for (int i = 0; i < m_oLessonEmailArray.Count; i++)
                                    {
                                    if (((CLessonEmail)m_oLessonEmailArray[i]).isValid)
                                    {
                                    return true;
                                    }
                                    }
                                    }
                                    return false;
                                    }
                                    }
                                    
                                    public CLessonEmail getLessonEmail(int i){
                                    if (i >=m_oLessonEmailArray.Count) return null;
                                    return (CLessonEmail)m_oLessonEmailArray[i];
                                    }
                                    
                                    public int LessonEmailCount
                                    {
                                    get {
                                    return m_oLessonEmailArray.Count;
                                    }
                                    }
                                    ArrayList m_oLessonEmailArray;
                                    protected string m_sPurpose, m_sTitle, m_sDefaultDomain;
                                    public void vClear()
                                    {
                                    m_sPurpose = m_sTitle =  "";
                                    m_oLessonEmailArray = new ArrayList();
                                    }
                                    public CLessonEmail getLastLessonEmail()
                                    {
                                    if (m_oLessonEmailArray.Count == 0)
                                    {
                                    return null;
                                    }
                                    else
                                    {
                                    return (CLessonEmail)m_oLessonEmailArray[m_oLessonEmailArray.Count - 1];
                                    }
                                    }
                                    public void vAddLine(string s)
                                    {
                                    try
                                    {
                                    s = sGetUncommentedText(s);
                                    if (s != null && s != "")
                                    {
                                    CTrace.i().vWriteLn(ENMessage.ParseLesson, s);
                                    if (bAdd(s, "pur=", ref m_sPurpose)) { }
                                    else if (bAdd(s, "tit=", ref m_sTitle)) { }
                                    else
                                    {
                                    if ((s.IndexOf("sen=") >= 0 && this.LessonEmailCount >= 1 && ((CLessonEmail)m_oLessonEmailArray[LessonEmailCount-1]).isValid)
                                    || getLastLessonEmail()== null)
                                    {
                                    CLessonEmail oLessonEmail = new CLessonEmail(getLastLessonEmail());
                                    //   oLessonEmail.Domain = m_sDefaultDomain;
                                    
                                    m_oLessonEmailArray.Add(oLessonEmail);
                                    }
                                    getLastLessonEmail().vAddLine(s);
                                    }
                                    }
                                    
                                    }
                                    catch (Exception e)
                                    {
                                    CTrace.i().vWriteLn(ENMessage.CommandParsing,e.Message);
                                    }
                                    }
                                    public string csDump()
                                    {
                                    string sOutput = "";
                                    sOutput += "pur=" + m_sPurpose + "\n";
                                    sOutput += "tit=" + m_sTitle + "\n";
                                    for (int i = 0; i < m_oLessonEmailArray.Count; i++)
                                    {
                                    sOutput += "number=" + i + "\n" + ((CLessonEmail)m_oLessonEmailArray[i]).csDump();
                                    }
                                    
                                    return sOutput;
                                    }
                                    
                                    
                                    }
                                    
                                    
                                    /// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                                    
                                    public class CLessonEmail : CLessonBase
                                    {
                                    public CLessonEmail(string sDomain)
                                    {
                                    vClear();
                                    }
                                    public CLessonEmail(CLessonEmail oLessonEmail)
                                    {
                                    vClear();
                                    if (oLessonEmail != null)
                                    {
                                    m_sRecipient = oLessonEmail.m_sRecipient;
                                    m_sSender = oLessonEmail.m_sSender;
                                    m_sName = oLessonEmail.m_sName;
                                    
                                    }
                                    }
                                    
                                    public bool isValid
                                    {
                                    get
                                    {
                                    return Recipient != "" && Sender != "" && Body != "";
                                    }
                                    }
                                    
                                    
                                    public void vAddLine(string s)
                                    {
                                    try
                                    {
                                    //CTrace.i().vWriteLn(ENMessage.CommandParsing,s);
                                    if (bAdd(s, "rec=", ref m_sRecipient)) { }
                                    else if (bAdd(s, "sen=", ref m_sSender)) { }
                                    else if (bAdd(s, "nam=", ref m_sName)) { }
                                    //  else if (bAdd(s, "dom=", ref m_sDomain)) { }
                                    else
                                    {
                                    m_sbBody.Append(s + "\n");
                                    }
                                    
                                    }
                                    catch (Exception e)
                                    {
                                    CTrace.i().vWriteLn(ENMessage.CommandParsing,e.Message);
                                    }
                                    }
                                    private string m_sName, m_sRecipient, m_sSender;
                                    StringBuilder m_sbBody;
                                    
                                    public void vClear()
                                    {
                                    
                                    m_sRecipient = m_sSender = m_sName = "";
                                    m_sbBody = new StringBuilder();
                                    }
                                    public string Name
                                    {
                                    get
                                    {
                                    if (m_sName == "")
                                    {
                                    if (m_sSender != "")
                                    {
                                    m_sSender = m_sSender.Trim(' ');
                                    int dNameIndex = m_sSender.IndexOf('@');
                                    if (dNameIndex <= 0) return m_sSender;
                                    return m_sSender.Substring(0, dNameIndex);
                                    }
                                    }
                                    return m_sName;
                                    }
                                    }
                                    public string Sender
                                    {
                                    get
                                    {
                                    if ( m_sSender == "") return "";
                                    m_sSender = m_sSender.Trim(' ');
                                    int dIndex = m_sSender.IndexOf('@');
                                    
                                    if (dIndex <= 0)
                                    {
                                    //   EPAssertMessage(m_sDomain != null, "Default domain should be filled up");
                                    return m_sSender + "@" + DEFAULT_DOMAIN;
                                    }
                                    return m_sSender;
                                    }
                                    }
                                    public string Domain
                                    {
                                    get
                                    {
                                    //    EPAssert(m_sDomain != null, "Default domain should be filled up");
                                    return DEFAULT_DOMAIN;
                                    }
                                    /*    set
                                    {
                                    m_sDomain = value;
                                    }*/
                                    }
                                    public string Recipient
                                    {
                                    get
                                    {
                                    if (m_sRecipient == "") return "";
                                    m_sRecipient = m_sRecipient.Trim(' ');
                                    int dIndex = m_sRecipient.IndexOf('@');
                                    if (dIndex <= 0)
                                    {
                                    
                                    //  EPAssertMessage(m_sDomain != null, "Default domain should be filled up");
                                    return m_sRecipient + "@" + DEFAULT_DOMAIN;
                                    }
                                    return m_sRecipient;
                                    }
                                    }
                                    public string Body
                                    {
                                    get
                                    {
                                    return m_sbBody.ToString();
                                    }
                                    }
                                    public string csDump()
                                    {
                                    string sOutput="";
                                    sOutput += "\n-------------------------------------------------------------------------------------------------\n";
                                    sOutput += "sen=" + Sender + "(" + Name + ")\n";
                                    sOutput += "rec=" + Recipient + "\n";
                                    sOutput += "body=" + Body + "\n";
                                    sOutput += "-------------------------------------------------------------------------------------------------\n";
                                    return sOutput;
                                    }
                                    }
                                    /// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                                    
                                    public class CLessonBase : CSerializableBase
                                    {
                                    public CLessonBase()
                                    {
                                    m_bIsCommentText = false;
                                    }
                                    
                                    public enum ENLessonPurpose
                                    {
                                    test = 0,
                                    basic
                                    
                                    
                                    }
                                    public const string DEFAULT_DOMAIN="test.fr";
                                    protected string sGetEndSubstring(int dIndex, string s) {
                                    if (dIndex >= s.Length)
                                    {
                                    return "";
                                    }
                                    else
                                    {
                                    return  s.Substring(dIndex);
                                    }
                                    
                                    }
                                    protected string sGetBegSubstring(int dIndex, string s)
                                    {
                                    if (dIndex >= s.Length)
                                    {
                                    return s;
                                    }
                                    else
                                    {
                                    return s.Substring(0, dIndex);
                                    }
                                    
                                    }
                                    
                                    
                                    protected bool m_bIsCommentText;
                                    protected string sGetUncommentedText(string s) 
                                    {
                                    if (s == null || s.Length == 0) return null;
                                    if (m_bIsCommentText)
                                    {
                                    int dEndComment = s.IndexOf("*/");
                                    if (dEndComment >= 0)
                                    {
                                    m_bIsCommentText = false;
                                    return sGetUncommentedText(sGetEndSubstring(dEndComment+2,  s));
                                    }
                                    else {
                                    return "";
                                    }
                                    
                                    }
                                    else
                                    {
                                    int dStartComment = s.IndexOf("/*");
                                    int dLineComment = s.IndexOf("//");
                                    if (dStartComment >=0 || ( dLineComment>=0 && dStartComment >=0 && dStartComment =0) || ( dLineComment>=0 && dStartComment >=0  && dLineComment < dStartComment)) {
                                    return sGetBegSubstring(dLineComment, s);
                                    
                                    }
                                    return s;
                                    }
                                    
                                    }
                                    public bool bAdd(string s, string sKey, ref string sField)
                                    {
                                    int dIndex = s.IndexOf(sKey);
                                    if (dIndex >= 0)
                                    {
                                    sField = s.Substring(sKey.Length);
                                    return true;
                                    }
                                    return false;
                                    }
                                    
                                    }
                                    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                                    public class CLessonManager : CLessonBase
                                    {
                                    public CLessonManager(ENLessonPurpose enLessonPurpose)
                                    {
                                    m_enLessonPurpose = enLessonPurpose;
                                    m_oLessonArray = new ArrayList();
                                    
                                    }
                                    ArrayList m_oLessonArray;
                                    ENLessonPurpose m_enLessonPurpose;
                                    
                                    public CLesson getLastLesson()
                                    {
                                    if (m_oLessonArray.Count == 0)
                                    {
                                    return null;
                                    }
                                    else
                                    {
                                    return (CLesson)m_oLessonArray[m_oLessonArray.Count - 1];
                                    }
                                    }
                                    public void vLoad(string sFileName)
                                    {
                                    
                                    string sFilePath = FILE_PATH + "\\" + sFileName;
                                    using (StreamReader sr = File.OpenText(sFilePath))
                                    {
                                    string s = "";
                                    while ((s = sr.ReadLine()) != null)
                                    {
                                    int dPurpose = s.IndexOf("pur=");
                                    if (m_oLessonArray.Count== 0 ||(dPurpose >= 0 && getLastLesson().isValid))
                                    {
                                    
                                    m_oLessonArray.Add(new CLesson(getLastLesson()));
                                    
                                    }
                                    if (getLastLesson() != null)
                                    {
                                    getLastLesson().vAddLine(s);
                                    }
                                    
                                    }/*
                                    if (oLesson != null && oLesson.m_sPurpose.ToLower() == m_enLessonPurpose.ToString().ToLower())
                                    {
                                    m_oLessonArray.Add(oLesson);
                                    }*/
                                    
                                    
                                    
                                    }
                                    
                                    
                                    }
                                    
                                    public string csDump()
                                    {
                                    string sOutput="";
                                    for (int i = 0; i < m_oLessonArray.Count; i++)
                                    {
                                    sOutput += ((CLesson)m_oLessonArray[i]).csDump();
                                    }
                                    return sOutput;
                                    }
                                    public int dFindIndex(string sTitle) 
                                    {
                                    for (int i = 0; i < m_oLessonArray.Count; i++)
                                    {
                                    if (sTitle.ToLower() == ((CLesson)m_oLessonArray[i]).Title.ToLower())
                                    {
                                    return i;
                                    }
                                    }
                                    return NOT_USED;
                                    
                                    }
                                    
                                    public CDbEPBase.ec dExecute(  int dIndex, out CStatusEmail oStatusEmail)
                                    {
                                    CDbEPBase.ec dStatus = CDbEPBase.ec.ST_NOT_USED; oStatusEmail = null;
                                    CDbEPBase.EPAssert(dIndex >= 0, "Index is not known");
                                    CLesson oLesson = ((CLesson)m_oLessonArray[dIndex]);
                                    CEmailManager oEmailManager = new CEmailManager();
                                    
                                    if (oEmailManager.bInitDatabase("EPOL_" + m_enLessonPurpose.ToString().ToUpper()))
                                    {
                                    if (m_enLessonPurpose == ENLessonPurpose.test)
                                    {
                                    oEmailManager.vCleanAllData();
                                    }
                                    oEmailManager.vRegister();
                                    
                                    for (int dLCom = 0; dLCom < oLesson.LessonEmailCount; dLCom++)
                                    {
                                    CLessonEmail oLessonEmail = oLesson.getLessonEmail(dLCom);
                                    CTrace.i().vWriteLn(ENMessage.CommandManager, "oLessonEmail(" + dLCom + ")= " + oLessonEmail.csDump());
                                    
                                    CReceivedEmail oRecievedEmail = new CReceivedEmail(oLessonEmail.Sender, oLessonEmail.Name, oLessonEmail.Recipient, DateTime.Now);
                                    oRecievedEmail.dAddText(oLessonEmail.Body);
                                    CTrace.i().vWriteLn(ENMessage.CommandManager,"oRecievedEmail.csDump() = " + oRecievedEmail.csDump());
                                    
                                    
                                    dStatus = oEmailManager.dExecute(oRecievedEmail, out oStatusEmail);
                                    CTrace.i().vWriteLn(ENMessage.CommandManager,"oStatusEmail dStatus  = " + dStatus + " " + oStatusEmail.csDump());
                                    }
                                    }
                                    return dStatus;
                                    
                                    }
                                    
                                    public CDbEPBase.ec dParse(int dIndex, out CCommandLine[] oCommandLineArray)
                                    {
                                    
                                    CDbEPBase.ec dErrorCode = CDbEPBase.ec.ST_SUCCEED; oCommandLineArray = null;
                                    CDbEPBase.EPAssert(dIndex >= 0, "Index is not known");
                                    CLesson oLesson = ((CLesson)m_oLessonArray[dIndex]);
                                    CEmailManager oEmailManager = new CEmailManager();
                                    if (oEmailManager.bInitDatabase("EPOL_" + m_enLessonPurpose.ToString().ToUpper()))
                                    {
                                    for (int dLCom = 0; dLCom < oLesson.LessonEmailCount; dLCom++)
                                    {
                                    CLessonEmail oLessonEmail = oLesson.getLessonEmail(dLCom);
                                    CReceivedEmail oRecievedEmail = new CReceivedEmail(oLessonEmail.Sender, oLessonEmail.Name, oLessonEmail.Recipient, DateTime.Now);
                                    oRecievedEmail.dAddText(oLessonEmail.Body);
                                    CTrace.i().vWriteLn(ENMessage.CommandParsing,"oRecievedEmail.csDump() = " + oRecievedEmail.csDump());
                                    
                                    oCommandLineArray = new CCommandLine[oRecievedEmail.CommandCount];
                                    CCommandLineFactory oCommandLineFactory = new CCommandLineFactory(oEmailManager.sDatabaseName);
                                    CCommandContext oCommandContext = new CCommandContext();
                                    					oCommandLineFactory.vSet( ref oCommandContext);
                                    
                                    for (int i = 0; i < oRecievedEmail.CommandCount; i++)
                                    {
                                    
                                    
                                    dErrorCode = oCommandLineFactory.dLoadOption(
                                    oRecievedEmail.getEmailCommand(i).m_dCommand,
                                    CDbEntityManager.Instance(
                                                                    oEmailManager.sDatabaseName, CDbEPBase.P.ENGLISH).dGet(CDbEPBase.P.ENGLISH, oRecievedEmail.getEmailCommand(i).m_sEntityName),
                                                                            oRecievedEmail.getEmailCommand(i).m_csEntityContent,
                                                                            oRecievedEmail.getEmailCommand(i).m_csOptionString,  out oCommandLineArray[i]);
                                    
                                                            CTrace.i().vWriteLn(ENMessage.CommandParsing,"oCommandLineArray[i] = " + oCommandLineArray[i].csDump());
                                    
                                                        }
                                                    }
                                                }
                                                return dErrorCode;
                                            }
                                     
                                        }
                                    
                                    
                                    
                                    }
                                    
                                    
                                    
                                  |  
                              |  |  
                              |  |  
                              |  |  
                              |  |  
                              |  |  
                              |  |  |  
                     | 
                           
                              | 
                                    Enter supporting content here
                                    
                                  |  |  |  |