public string GetProjectName(BimServer client, string uri)
        {
            try
            {
                var url = new Uri(uri);
                var poid = HttpUtility.ParseQueryString(url.Query).Get("poid");
                if (poid == null)
                {
                    AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Poid parameter not found in the URL");
                    return null;
                }


                var name = client.ProjectNameRequest(poid);
                return name;
            }
            catch (Exception e)
            {
                // TODO REMOVE WHEN FINISHED DEVELOPING
                MessageBox.Show(e.Message + "\n" + e.TargetSite + "\n" + e.StackTrace);
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, e.Message);
            }
            return null;
        }
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            var username = "";
            var password = "";
            var list = new List<string>();
            DA.GetDataList(0, list);
            DA.GetData(1, ref username);
            DA.GetData(2, ref password);


            if (!String.IsNullOrEmpty(username) && !String.IsNullOrEmpty(password))
            {
                BimServer.Username = username;
                BimServer.Password = password;
            }


            if (list.SequenceEqual(BimVisualiserData.Instance.URIList))
            {
                BimVisualiserData.Instance.URIList = list;
            }
            // New data feeded, need to recompute
            else
            {
                _returnValue = "";
                BimVisualiserData.Instance.Selected = -1;
                BimVisualiserData.Instance.URIList = list;
                BimVisualiserData.Instance.NameList = new List<string>();
            }


            if (BimVisualiserData.Instance.NameList.Count == 0)
            {
                foreach (var uri in BimVisualiserData.Instance.URIList)
                {
                    var client = new BimServer();
                    client.Login();
                    var name = GetProjectName(client, uri);
                    BimVisualiserData.Instance.NameList.Add(name);
                }

                m_attributes.ExpireLayout();
            }


            DA.SetData(0, _returnValue);
        }
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            String uri = "";

            // Default values
            String password = BimServer.Password;
            String username = BimServer.Username;
            String serializer = BimServer.Ifc2XSersializer;

            DA.GetData<String>(0, ref uri);
            DA.GetData(1, ref username);
            DA.GetData(2, ref password);
            DA.GetData(3, ref serializer);


            try
            {
                var url = new Uri(uri);
                var poid = HttpUtility.ParseQueryString(url.Query).Get("poid");
                if (poid == null)
                {
                    AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Poid parameter not found in the URL");
                    return;
                }
                
                BimServer.Username = username;
                BimServer.Password = password;
                var client = new BimServer();
                if (String.IsNullOrEmpty(serializer))
                {
                    serializer = BimServer.Ifc2XSersializer;
                }
                var filePath = client.Download(poid, serializer);
                // Set return data
                DA.SetData(0, filePath);
            }
            catch (Exception e)
            {
                // TODO REMOVE WHEN FINISHED DEVELOPING
                MessageBox.Show(e.Message + "\n" + e.TargetSite + "\n" + e.StackTrace);
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, e.Message);
            }
        }