/// <summary>
        /// Method <c>OnInit</c> is redefined in the aim to build the interface
        /// with columns and gadgets defined in a cockpit display configuration 
        /// stored in database.
        /// </summary>
        /// <param name="e"></param>
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            if (Session["userLogged"] == null)
            {
                Response.Redirect("Login.aspx");
            }

            lblUserLogged.Text = Session["userLogged"].ToString();

            //Find user cockpit configuration and generate columns based on display configuration.

            if (this.Session["currentCockpitConfiguration"] == null)
            {
                try
                {
                    cockpitConfigurationManager = new CockpitConfigurationManager();
                    cockpitConfiguration = cockpitConfigurationManager.getConfiguration(Session["userLogged"].ToString());

                    this.Session["currentCockpitConfiguration"] = cockpitConfiguration;
                    setupGadgetsColumns();
                }
                catch (Exception exception)
                {
                    Console.WriteLine(exception.Message);
                    Label lblDbError = new Label();
                    lblDbError.Text = "Unable to get cockpit configuration in database";
                    Master.FindControl("MainContent").Controls.Add(lblDbError);
                    ((HyperLink)Master.FindControl("MenuContent").FindControl("editCockpitLink")).Enabled = false;
                }
            }
            else
            {
                cockpitConfiguration = (CockpitConfiguration)this.Session["currentCockpitConfiguration"];
                setupGadgetsColumns();
            }
        }
        public void initializeCockpitConfigurationTest()
        {
            DisplayConfigurationManager displayManager = new DisplayConfigurationManager();

            List<Gadget> gadgets = new List<Gadget>();
            Gadget gadget = new Gadget(1, "gadget1", position: 0);
            gadgets.Add(gadget);
            gadget = new Gadget(2, "gadget2", position: 0);
            gadgets.Add(gadget);
            gadget = new Gadget(3, "gadget3", position: 0);
            gadgets.Add(gadget);
            gadget = new Gadget(4, "gadget4", position: 1);
            gadgets.Add(gadget);
            gadget = new Gadget(5, "gadget5", position: 1);
            gadgets.Add(gadget);
            gadget = new Gadget(6, "gadget6", position: 1);
            gadgets.Add(gadget);

            cockpitConfiguration = new CockpitConfiguration(33, gadgets, displayManager.getDisplayWithId(1));

            TestContext.RequestedPage.Session.Add("currentCockpitConfiguration", cockpitConfiguration);
        }
        private void compareCockpitConfigurations(CockpitConfiguration cockpitConfigurationToObtain, bool isNbColumnsTrue = true, bool isNbGadgetsTrue = true, bool isGadgetsPositionTrue = true)
        {
            List<List<Gadget>> columns = cockpitConfiguration.getGadgetsColumns();
            List<List<Gadget>> columnsToObtain = cockpitConfigurationToObtain.getGadgetsColumns();

            //verify the number of columns
            if (isNbColumnsTrue)
                Assert.IsTrue(columns.Count == columnsToObtain.Count, "Wrong number of columns in cockpitConfiguration");
            else
                Assert.IsFalse(columns.Count == columnsToObtain.Count, "Wrong number of columns in cockpitConfiguration");

            //for each columns
            bool isDifference = false;
            for (int column = 0; column < cockpitConfiguration.getGadgetsColumns().Count; column++)
            {
                //verify the number of gadgets in columns
                if (isNbGadgetsTrue)
                    Assert.IsTrue(columns[column].Count == columnsToObtain[column].Count, "Wrong number of gadget in column");
                else
                    Assert.IsFalse(columns[column].Count == columnsToObtain[column].Count, "Wrong number of gadget in column");

                //for each gadgets
                for (int gadgetIndex = 0; gadgetIndex < columns[column].Count; gadgetIndex++)
                {
                    //verifiy if gadgets' ids are similar
                    if (columns[column][gadgetIndex].getGadgetId() != columnsToObtain[column][gadgetIndex].getGadgetId())
                    {
                        isDifference = true;
                    }
                }
            }
            if (isGadgetsPositionTrue)
                Assert.IsFalse(isDifference, "Wrong gadget's position, should be true");
            else
                Assert.IsTrue(isDifference, "Wrong gadget's position, should be wrong");
        }
        public void updateGadgetPositionTest()
        {
            int originColumnId = 0; // TODO: Initialize to an appropriate value
            int originRowId = 0; // TODO: Initialize to an appropriate value
            int destinationColumnId = 0; // TODO: Initialize to an appropriate value
            int destinationRowId = 0; // TODO: Initialize to an appropriate value

            CockpitConfiguration cockpitConfigurationToObtain;

            //*****************************************************************
            DisplayConfigurationManager displayManager = new DisplayConfigurationManager();

            List<Gadget> gadgets = new List<Gadget>();
            Gadget gadget = new Gadget(1, "gadget1", position: 0);
            gadgets.Add(gadget);
            gadget = new Gadget(2, "gadget2", position: 0);
            gadgets.Add(gadget);
            gadget = new Gadget(3, "gadget3", position: 0);
            gadgets.Add(gadget);
            gadget = new Gadget(4, "gadget4", position: 1);
            gadgets.Add(gadget);
            gadget = new Gadget(5, "gadget5", position: 1);
            gadgets.Add(gadget);
            gadget = new Gadget(6, "gadget6", position: 1);
            gadgets.Add(gadget);

            cockpitConfigurationToObtain = new CockpitConfiguration(23, gadgets, displayManager.getDisplayWithId(1));

            //**************************************************************************************

            cockpitConfiguration = EditCockpit.updateGadgetPosition(originColumnId, originRowId, destinationColumnId, destinationRowId);
            TestContext.RequestedPage.Session.Add("currentCockpitConfiguration", cockpitConfiguration);

            compareCockpitConfigurations(cockpitConfigurationToObtain);

            //move gadget 5 on second position first column

            gadgets = new List<Gadget>();
            gadget = new Gadget(1, "gadget1", position: 0);
            gadgets.Add(gadget);
            gadget = new Gadget(5, "gadget5", position: 0);
            gadgets.Add(gadget);
            gadget = new Gadget(2, "gadget2", position: 0);
            gadgets.Add(gadget);
            gadget = new Gadget(3, "gadget3", position: 0);
            gadgets.Add(gadget);
            gadget = new Gadget(4, "gadget4", position: 1);
            gadgets.Add(gadget);
            gadget = new Gadget(6, "gadget6", position: 1);
            gadgets.Add(gadget);

            cockpitConfigurationToObtain = new CockpitConfiguration(12, gadgets, displayManager.getDisplayWithId(1));

            cockpitConfiguration = EditCockpit.updateGadgetPosition(2, 2, 1, 1);

            compareCockpitConfigurations(cockpitConfigurationToObtain, isGadgetsPositionTrue: false);

            //***********************************************************************************************

            gadgets = new List<Gadget>();
            gadget = new Gadget(5, "gadget5", position: 0);
            gadgets.Add(gadget);
            gadget = new Gadget(1, "gadget1", position: 0);
            gadgets.Add(gadget);
            gadget = new Gadget(2, "gadget2", position: 0);
            gadgets.Add(gadget);
            gadget = new Gadget(3, "gadget3", position: 0);
            gadgets.Add(gadget);
            gadget = new Gadget(4, "gadget4", position: 1);
            gadgets.Add(gadget);
            gadget = new Gadget(6, "gadget6", position: 1);
            gadgets.Add(gadget);

            cockpitConfigurationToObtain = new CockpitConfiguration(11, gadgets, displayManager.getDisplayWithId(1));
            compareCockpitConfigurations(cockpitConfigurationToObtain, isGadgetsPositionTrue: true);
        }
 protected void saveConfigLink_Click(object sender, EventArgs e)
 {
     cockpitConfiguration = (CockpitConfiguration)Session["currentCockpitConfiguration"];
     try
     {
         cockpitConfigurationManager.saveConfiguration(Session["userLogged"].ToString(), cockpitConfiguration);
     }
     catch (Exception exception)
     {
         //print error message
         Console.WriteLine(exception.Message);
         ///todo
     }
 }
        /// <summary>
        /// Methods <c>saveConfiguration</c> is called when a cockpit configuration has to be saved
        /// in database.
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="configurationToSave"></param>
        public void saveConfiguration(string userName, CockpitConfiguration configurationToSave)
        {
            XmlDocument configurationDoc = dbManager.retrieveDocument("cockpitConfiguration", configurationToSave.getConfigurationID());

            //update username
            XmlNode cockpitConfigurationUserNameNode = configurationDoc.GetElementsByTagName("userName")[0];
            cockpitConfigurationUserNameNode.InnerText = userName;

            //update display configuration id
            XmlNode cockpitDisplayConfigIdNode = configurationDoc.GetElementsByTagName("displayConfig")[0];
            cockpitDisplayConfigIdNode.InnerText = configurationToSave.getCurrentDisplay().getDisplayId().ToString();

            //udpate list of gadgets
            XmlNode cockpitGadgetsNode = configurationDoc.GetElementsByTagName("gadgets")[0];
            StringBuilder gadgetsString = new StringBuilder("");

            for (int i = 0; i < configurationToSave.getGadgetsColumns().Count; i++)
            {
                foreach (Gadget gadget in configurationToSave.getGadgetsColumns().ElementAt(i))
                {
                    gadgetsString.Append("<gadget ID='" + gadget.getGadgetId() + "' column='" + i + "'/>");
                }
            }
            cockpitGadgetsNode.InnerXml = gadgetsString.ToString();

            if (configurationToSave.getConfigurationID() == 0) //configuration id must be another than default one
            {
                //new docname and id is taken from current hour
                string uniqueDocName = System.DateTime.Now.ToString("HHmmssffff");
                configurationToSave.setConfigurationID(long.Parse(uniqueDocName));
                XmlNode cockpitConfigurationIdNode = configurationDoc.GetElementsByTagName("cockpitConfiguration")[0].Attributes.GetNamedItem("ID");
                cockpitConfigurationIdNode.InnerText = configurationToSave.getConfigurationID().ToString();
            }

            if (configurationToSave.getConfigurationID() != long.Parse(configurationDoc.GetElementsByTagName("cockpitConfiguration")[0].Attributes.GetNamedItem("ID").InnerText))
            {
                throw new Exception("Configuration's id and docName are not equal, impossible to save configuration");
            }

            dbManager.insertDocument(configurationDoc, "cockpitConfiguration", configurationToSave.getConfigurationID());
        }