public override void LoadInitialConfiguration()
        {
            lock(_lock){
                Hashtable ht = new Hashtable();
                ClassQuery cq = new ClassQuery("Org.Reddragonit.FreeSwitchConfig.Site.BaseComponents",
                    "SELECT pr.RouteContext.Name,pr.Name,pr.DestinationCondition,pr.PinFile.Name FROM PinnedRoute pr ORDER BY pr.RouteContext.Name,pr.Index");
                cq.Execute();
                Hashtable routes = new Hashtable();
                string curContext = "";
                ArrayList prs = new ArrayList();
                while (cq.Read())
                {
                    if (curContext != cq[0].ToString())
                    {
                        if (prs.Count > 0)
                            routes.Add(curContext, prs);
                        prs = new ArrayList();
                        curContext = cq[0].ToString();
                    }
                    Hashtable pr = new Hashtable();
                    pr.Add(_NAME_FIELD_ID, cq[1].ToString());
                    pr.Add(_NPA_FIELD_ID, cq[2].ToString());
                    pr.Add(_PIN_SET_NAME_FIELD_ID, cq[3].ToString());
                    prs.Add(pr);
                }
                if (prs.Count > 0)
                    routes.Add(curContext, prs);
                cq.Close();

                Hashtable pins = new Hashtable();
                cq.NewQuery("Org.Reddragonit.FreeSwitchConfig.DataCore.DB.Phones",
                                "SELECT ps.Context.Name,ps.Advanced,ps.Name FROM PinSet ps");
                cq.Execute();
                curContext = "";
                Hashtable pinSets = new Hashtable();
                while (cq.Read())
                {
                    if (curContext!=cq[0].ToString()){
                        if (pinSets.Count>0)
                            pins.Add(curContext,pinSets);
                        pinSets = new Hashtable();
                        curContext = cq[0].ToString();
                    }
                    bool adv = cq.GetBoolean(1);
                    ClassQuery pinq = new ClassQuery("Org.Reddragonit.FreeSwitchConfig.DataCore.DB.Phones",
                        "SELECT pn.PinNumber" + (adv ? ",pn.Extension.Number,pn.Extension.Domain.Name" : "") + " Pin pn WHERE pn.OwningSet.Name = @name AND pn.OwningSet.Context.Name = @context");
                    pinq.Execute(new IDbDataParameter[]{
                        pinq.CreateParameter("@name",cq[1].ToString()),
                        pinq.CreateParameter("@context",cq[0].ToString())
                    });
                    ArrayList pinValues = new ArrayList();
                    while (pinq.Read())
                    {
                        if (adv)
                            pinValues.Add(cq[1].ToString()+"@"+cq[2].ToString() + ":" + cq[0].ToString());
                        else
                            pinValues.Add(cq[0].ToString());
                    }
                    pinq.Close();
                    Hashtable pset = new Hashtable();
                    pset.Add(_PINSET_ADVANCED_FIELD_ID, adv);
                    pset.Add(_PINSET_PINS_FIELD_ID, pinValues);
                    pinSets.Add(cq[2].ToString(), pset);
                }
                cq.Close();
                if (pinSets.Count>0)
                    pins.Add(curContext,pinSets);
                ht.Add(_SCONFIG_ROUTES_NAME, routes);
                ht.Add(_SCONFIG_PINS_NAME, pins);
                StoredConfiguration = ht;
            }
        }
 public sDeployedDomain(Domain domain)
 {
     _name = domain.Name;
     _variables = new List<NameValuePair>();
     ClassQuery cq = new ClassQuery("Org.Reddragonit.FreeSwitchConfig.DataCore.DB.Core", "SELECT dv.Name,dv.Value FROM DomainVariable dv WHERE dv.Domain.Name = @domainName");
     IDbDataParameter[] pars = new IDbDataParameter[] { cq.CreateParameter("@domainName", domain.Name) };
     cq.Execute(pars);
     while (cq.Read())
         _variables.Add(new NameValuePair(cq[0].ToString(), cq[1].ToString()));
     cq.Close();
     _params = new List<NameValuePair>();
     cq.NewQuery("Org.Reddragonit.FreeSwitchConfig.DataCore.DB.Core", "SELECT dp.Name,dp.Value FROM DomainParameter dp WHERE dp.Domain.Name = @domainName");
     cq.Execute(pars);
     while (cq.Read())
         _params.Add(new NameValuePair(cq[0].ToString(), cq[1].ToString()));
     cq.Close();
     _groups = new List<sDeployedDomainGroup>();
     cq.NewQuery("Org.Reddragonit.FreeSwitchConfig.DataCore.DB.Phones", "SELECT egrp.Name FROM ExtensionGroup egrp WHERE egrp.Domain.Name = @domainName");
     cq.Execute(pars);
     while (cq.Read())
         _groups.Add(new sDeployedDomainGroup(cq[0].ToString(),_name));
     cq.Close();
     _internalProfile = domain.InternalProfile.Name;
     _externalProfile = domain.ExternalProfile.Name;
 }