private ge_transform_parameters getTransformParameters(Guid transformId,
                                                               Guid?Id,
                                                               Guid?projectId,
                                                               Guid?groupId,
                                                               string[] projects,
                                                               string[] holes,
                                                               string[] tables,
                                                               string[] geols,
                                                               string[] options,
                                                               string arg_vals,
                                                               string flwor,
                                                               string xpath,
                                                               string version)
        {
            ge_transform_parameters transform_params = new ge_transform_parameters();

            if (!String.IsNullOrEmpty(transform.parameters))
            {
                try {
                    transform_params = Newtonsoft.Json.JsonConvert.DeserializeObject <ge_transform_parameters>(transform.parameters);
                } catch (Newtonsoft.Json.JsonReaderException e) {
                    Console.WriteLine(e.Message);
                }
            }

            /* Incase all parameters are passed in first element of parameters array purgeArray for delimiters*/
            string[] delims = new string[] { ",", ";" };

            if (projects.Any())
            {
                projects = projects.purgeArray(delims);
                transform_params.projects = projects;
            }

            if (holes.Any())
            {
                holes    = holes.purgeArray(delims);
                xml_data = getHoles(xml_data, holes);
                transform_params.holes = holes;
            }

            if (tables.Any())
            {
                tables = tables.purgeArray(delims);
                transform_params.tables = tables;
            }

            if (geols.Any())
            {
                geols    = geols.purgeArray(delims);
                xml_data = getGeols(xml_data, geols);
                transform_params.geols = geols;
            }

            if (options.Any())
            {
                options = options.purgeArray(delims);
                transform_params.options = options;
            }

            if (!String.IsNullOrEmpty(arg_vals))
            {
                /* To be added process FLO string */
                transform_params.arg_vals = arg_vals;
            }
            if (!String.IsNullOrEmpty(flwor))
            {
                /* To be added process FLO string */
                transform_params.flwor = flwor;
            }

            if (!String.IsNullOrEmpty(xpath))
            {
                xml_data = getXPath(xml_data, xpath);
                transform_params.xpath = xpath;
            }

            if (transformId != null & transformId != Guid.Empty)
            {
                transform_params.transformId = transformId.ToString();
            }

            if (Id != null & Id != Guid.Empty)
            {
                transform_params.Id = Id.ToString();
            }

            if (projectId != null & projectId != Guid.Empty)
            {
                transform_params.projectId = projectId.ToString();
            }

            if (groupId != null & groupId != Guid.Empty)
            {
                transform_params.groupId = groupId.ToString();
            }

            /* Add current local parameters for passing to stylesheet */
            transform_params.host           = getHostHref();
            transform_params.host_view      = getHostHref() + constHref_transform;
            transform_params.host_file      = getHostHref() + constHref_dataVIEW;
            transform_params.host_download  = getHostHref() + constHref_dataDOWNLOAD;
            transform_params.host_esri      = getHostHref() + constHref_esriFEATURE;
            transform_params.host_logger    = getHostHref() + constHref_Logger;
            transform_params.host_gint      = getHostHref() + constHref_gINT;
            transform_params.host_tablefile = getHostHref() + constHref_TableFile;
            transform_params.host_ags       = getHostHref() + constHref_AGS;
            transform_params.version        = version;
            // transform_params.sessionid = this.Session.Id;
            var user = GetUserAsync();

            if (user != null)
            {
                ge_user u = user.Result as ge_user;
                transform_params.user = u.FirstName + ' ' + u.LastName + '(' + u.Email + ')';
            }

            return(transform_params);
        }
        public async Task <ActionResult> View(Guid transformId,
                                              Guid?Id,
                                              Guid?projectId,
                                              Guid?groupId,
                                              string[] projects,
                                              string[] holes,
                                              string[] tables,
                                              string[] geols,
                                              string[] options,
                                              string[] args,
                                              string[] vals,
                                              string flwor,
                                              string xpath,
                                              string version)
        {
            if (transformId == Guid.Empty)
            {
                return(new EmptyResult());
            }

            transform = _context.ge_transform.
                        Include(t => t.project).
                        Where(t => t.Id == transformId).FirstOrDefault();

            if (transform == null)
            {
                return(new EmptyResult());
            }

            string arg_val = "";

            for (int i = 0; i < args.Length; i++)
            {
                if (arg_val.Length > 0)
                {
                    arg_val += "&";
                }
                arg_val += args[i] + "=" + vals[i];
            }

            if (projectId == null)
            {
                projectId = transform.projectId;
            }

            if (groupId == null)
            {
                groupId = transform.project.groupId;
            }

            ge_transform_parameters transform_params = getTransformParameters(transformId, Id, projectId, groupId, projects, holes, tables, geols, options, arg_val, flwor, xpath, version);

            /* Convert JSON back to string to pass via ViewBag */
            string parameters = JsonConvert.SerializeObject(transform_params);

            if (transform.service_endpoint != null)
            {
                string endpoint = getEndPointURL(transform.service_endpoint);
                var    resp     = await getServiceEndPointData(endpoint, transform_params);

                var xmlResult = resp as XmlActionResult;
                if (xmlResult != null)
                {
                    xml_data = xmlResult.Value();
                }
                var okResult = resp as OkObjectResult;
                if (okResult != null)
                {
                    if (okResult.StatusCode == 200)
                    {
                        xml_data = okResult.Value as string;
                    }
                }
            }

            if (transform.dataId != null && transform.storedprocedure == null)
            {
                xml_data = await new ge_dataController(_context,
                                                       _authorizationService,
                                                       _userManager,
                                                       _env,
                                                       _ge_config).getDataAsParsedXmlString(transform.dataId.Value);
            }

            if (transform.styleId != null)
            {
                xsl_data = await new ge_dataController(_context,
                                                       _authorizationService,
                                                       _userManager,
                                                       _env,
                                                       _ge_config).getDataAsParsedXmlString(transform.styleId.Value);
            }

            if (transform.queryId != null)
            {
                qry_data = await new ge_dataController(_context,
                                                       _authorizationService,
                                                       _userManager,
                                                       _env,
                                                       _ge_config).getDataAsString(transform.queryId.Value, false);
            }

            if (transform.dataId != null && transform.storedprocedure != null)
            {
                string dataId = transform.dataId.ToString();

                if (!String.IsNullOrEmpty(transform.add_data))
                {
                    dataId = dataId + ";" + transform.add_data;
                }

                string[] data_all = dataId.Split(";");

                string rawSQL = getSQLCommand(constSELECTALLFROM, data_all, holes, tables, version);

                ge_data_file task_xml_data_big = await _context.ge_data_file.FromSql(rawSQL).SingleOrDefaultAsync();

                xml_data = task_xml_data_big.getParsedXMLstring(null);
            }

            if (!String.IsNullOrEmpty(qry_data))
            {
                string res = XQuery(xml_data, qry_data);

                if (!String.IsNullOrEmpty(res))
                {
                    xml_data = res;
                }
            }


            if (xml_data == null || xsl_data == null)
            {
                new EmptyResult();
            }

            ViewBag.xml_data       = xml_data;
            ViewBag.xsl_stylesheet = xsl_data;
            ViewBag.xlt_arguments  = parameters;

            return(View("View"));
        }
        public async Task <IActionResult> getServiceEndPointData(string url, ge_transform_parameters transform_params)
        {
            Guid?Id        = null;
            Guid?projectId = null;
            Guid?groupId   = null;

            if (transform_params.Id != null)
            {
                Id = new Guid(transform_params.Id);
            }
            if (transform_params.projectId != null)
            {
                projectId = new Guid(transform_params.projectId);
            }
            if (transform_params.groupId != null)
            {
                groupId = new Guid(transform_params.groupId);
            }


            if (url == ge_gis_xmlGet_Endpoint)
            {
                var res = await new ge_gisController(_context,
                                                     _authorizationService,
                                                     _userManager,
                                                     _env,
                                                     _ge_config).xmlGet(projectId);

                if (res == null)
                {
                    return(NotFound());
                }

                return(res);
            }

            if (url == ge_data_xmlGetData_Endpoint)
            {
                var res = await new ge_dataController(_context,
                                                      _authorizationService,
                                                      _userManager,
                                                      _env,
                                                      _ge_config).xmlGetData(Id, projectId, groupId);

                if (res == null)
                {
                    return(UnprocessableEntity("data is null for projectid {} groupid {}"));
                }
                // var emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
                // var settings = new XmlWriterSettings();
                // settings.Indent = true;
                // settings.OmitXmlDeclaration = true;

                // var serializer = new XmlSerializer(typeof(List<ge_data>),
                //                    new XmlRootAttribute("ge_root"));

                // using (var stream = new StringWriter())
                // using (var writer = XmlWriter.Create(stream, settings))
                // {
                //  serializer.Serialize(writer, res, emptyNamespaces);
                //  return Ok(stream.ToString());
                // }

                string s1 = XmlSerialiseList <ge_data>(res, "ge_root");

                return(Ok(s1));
            }
            if (url == ge_data_xmlGetProjects_Endpoint)
            {
                var res = await new ge_dataController(_context,
                                                      _authorizationService,
                                                      _userManager,
                                                      _env,
                                                      _ge_config).xmlGetProjects(groupId);

                if (res == null)
                {
                    return(UnprocessableEntity("ge_project is null for groupid {}"));
                }

                //to prevent circular reference in xml serialisation;
                foreach (ge_project p in res)
                {
                    p.transform = null;
                }
                string s1 = XmlSerialiseList <ge_project>(res, "ge_root");
                return(Ok(s1));

                // var emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
                // var settings = new XmlWriterSettings();
                // settings.Indent = true;
                // settings.OmitXmlDeclaration = true;
                // var serializer = new XmlSerializer(typeof(List<ge_project>),
                //                    new XmlRootAttribute("ge_root"));



                // using (var stream = new StringWriter())
                // using (var writer = XmlWriter.Create(stream, settings))
                // {
                //  serializer.Serialize(writer, res, emptyNamespaces);
                //  return Ok(stream.ToString());
                // }
            }

            if (url.Contains("ge_LTC2/ViewSurvey123"))
            {
                string hole_id = null;
                if (!String.IsNullOrEmpty(transform_params.arg_vals))
                {
                    string[] args = transform_params.arg_vals.Split("&");
                    foreach (string arg in args)
                    {
                        if (arg.Contains("hole_id"))
                        {
                            string[] arg_val = arg.Split("=");
                            hole_id = arg_val[1];
                        }
                    }
                }
                var res = await new ge_LTC2Controller(_context,
                                                      _authorizationService,
                                                      _userManager,
                                                      _env,
                                                      _ge_config).ViewSurvey123(projectId.Value, hole_id);

                return(res);
            }

            string url2 = transform_params.host + "/" + url;

            if (!String.IsNullOrEmpty(transform_params.arg_vals))
            {
                url2 += "\\?" + transform_params.arg_vals;
            }

            var resp = Redirect(url2);

            return(resp);


            // HttpClient _httpClient = new HttpClient();
            // var response = await _httpClient.PostAsync(url2, null);
            // var result =  await response.Content.ReadAsStringAsync();

            // return StatusCode((int)response.StatusCode, response);;
        }
        public async Task <IActionResult> OnGetAsync(Guid dataId)
        {
            if (dataId == null)
            {
                return(NotFound());
            }

            var data = await _context.ge_data.Include(d => d.project)
                       .Where(d => d.Id == dataId)
                       .Where(d => d.fileext == AGS.FileExtension.XML)
                       .FirstOrDefaultAsync();

            if (data == null)
            {
                return(NotFound());
            }

            var task_ags_version = await getAGSVersion(dataId);

            string ags_version = task_ags_version.Value;

            if (String.IsNullOrEmpty(ags_version))
            {
                return(RedirectToPageMessage(msgCODE.TRANSFORM_AGS_NONE));
            }

            // Create a new transform to check authorisations
            transform           = new ge_transform();
            transform.dataId    = dataId;
            transform.project   = data.project;
            transform.projectId = data.projectId;

            var UserAuthorised = await IsUserCreateAuthorised();

            if (IsCreateAllowed() != geOPSResp.Allowed)
            {
                return(RedirectToPageMessage(msgCODE.TRANSFORM_CREATE_PROHIBITED));
            }

            if (!UserAuthorised.Succeeded)
            {
                return(RedirectToPageMessage(msgCODE.TRANSFORM_CREATE_USER_PROHIBITED));
            }

            ge_transform_parameters ags_transforms = getAGSTransforms(ags_version);

            if (ags_transforms == null)
            {
                return(RedirectToPageMessage(msgCODE.TRANSFORM_AGS_NONE));
            }



            project             = new ge_transform();
            project.Id          = Guid.NewGuid();
            project.projectId   = data.projectId;
            project.name        = "Project Summaries for " + data.filename;
            project.description = "HTML transforms for AGSML Project (" + GetTimestamp(DateTime.Now) + ")";
            project.styleId     = Guid.Parse(ags_transforms.project);
            project.operations  = data.project.data_operations;

            hole             = new ge_transform();
            hole.Id          = Guid.NewGuid();
            hole.projectId   = data.projectId;
            hole.name        = "Hole Summaries for " + data.filename;
            hole.description = "HTML transforms for AGSML Hole (" + GetTimestamp(DateTime.Now) + ")";
            hole.styleId     = Guid.Parse(ags_transforms.hole);
            hole.operations  = data.project.data_operations;

            table             = new ge_transform();
            table.Id          = Guid.NewGuid();
            table.projectId   = data.projectId;
            table.name        = "Table Summaries for " + data.filename;
            table.description = "HTML transforms for AGSML Tables (" + GetTimestamp(DateTime.Now) + ")";
            table.styleId     = Guid.Parse(ags_transforms.table);
            table.operations  = data.project.data_operations;

            ge_transform_parameters tparams = new ge_transform_parameters();

            tparams.project = project.Id.ToString();
            tparams.hole    = hole.Id.ToString();
            tparams.table   = table.Id.ToString();

            string json_tparams = JsonConvert.SerializeObject(tparams);

            transform.parameters = json_tparams;

            //     /*Add prospective transforms to list incase user wants to rebuilds json string */
            //     ge_transform[] Addtransforms = {project, hole, table};

            //     var Alltransforms = transforms.Concat(Addtransforms);

            //     ViewData["styleId"] = new SelectList(xlt_data, "Id", "filename");
            //     ViewData["transformId"] =  new SelectList(Alltransforms, "Id", "name");
            //     string[] p = new [] {"project","hole","table","geol"};
            //     ViewData["selectparameter"] = new SelectList(p);

            setViewData();
            return(Page());
        }