/// <summary>
        /// Retrieving a specific list of cases
        /// </summary>
        /// <param name="caseURNs">list of case urns</param>
        /// <returns>list of cases</returns>
        public CaseList GetCases(List<string> caseURNs)
        {
            Log.Debug("Retrieving cases...");

            string URI = String.Format("pathology/cases");
            CaseList result;
            IRestResponse response;
            try
            {
                RestStringArrayType urns = new RestStringArrayType(caseURNs);
                string body = ResponseParser.SerializeToXml<RestStringArrayType>(urns);

                response = ExecutePost(URI, VixServiceTypes.Pathology, body);
                ValidateRestResponse(response);
                result = ResponseParser.ParseGetCaseListResponse(response.Content);
            }
            catch (MagResponseParsingFailureException rpf)
            {
                Log.Error("Could not serialize urn lists.", rpf);
                result = new CaseList();
            }
            catch (MagVixFailureException vfe)
            {
                Log.Error("Unexpected response.", vfe);
                result = new CaseList();
            }
            catch (Exception ex)
            {
                Log.Error("Could not complete request to retrieve cases.", ex);
                result = new CaseList();
            }

            return result;
        }
        /// <summary>
        /// Add new CPT codes for a case
        /// </summary>
        /// <param name="caseURN">case ID</param>
        /// <param name="locationURN">ordering location id</param>
        /// <param name="cptCodes">new cpt codes</param>
        /// <returns>result for those codes</returns>
        public PathologyCptCodeResultsType AddCptCodesForCase(string caseURN, string locationURN, ObservableCollection<string> cptCodes)
        {
            Log.Debug("Adding new CPT codes...");

            if (string.IsNullOrWhiteSpace(caseURN))
            {
                throw new MagVixFailureException("Missing parameter: Case URN.");
            }

            if (string.IsNullOrWhiteSpace(locationURN))
            {
                throw new MagVixFailureException("Missing parameter: Ordering Facility.");
            }

            if (cptCodes == null)
            {
                throw new MagVixFailureException("Missing parameter: CPT codes.");
            }

            string URI = String.Format("pathology/case/cpt/{0}/{1}", caseURN, locationURN);
            IRestResponse response;
            try
            {
                RestStringArrayType cptArray = new RestStringArrayType();
                cptArray.Values = cptCodes;
                string body = ResponseParser.SerializeToXml<RestStringArrayType>(cptArray);
                response = ExecutePost(URI, VixServiceTypes.Pathology, body);
                ValidateRestResponse(response);
                PathologyCptCodeResultsType result = ResponseParser.ParseAddCptCodesForCase(response.Content);
                return result;
            }
            catch (MagResponseParsingFailureException rpf)
            {
                if (rpf.ErrorMessage.Contains("Serialization"))
                {
                    throw new MagVixFailureException("Could not parse CPT codes to response parameter.", rpf);
                }
                else
                {
                    throw new MagVixFailureException("Could not parse CPT codes result.", rpf);
                }
            }
            catch (MagVixFailureException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new MagVixFailureException("Could not complete request to add new CPT codes.", ex);
            }
        }