/// <summary> /// Execute the given query and return the result /// </summary> /// <param name="query"></param> /// <param name="results"></param> /// <param name="portalUrl"></param> /// <param name="maxResults"></param> /// <returns></returns> //public string Exec(OnlineQuery query, ObservableCollection<OnlineResultItem> results, // int maxResults = 0) { // if (maxResults == 0) // maxResults = DefaultMaxResults; // if (MaxResponseLength == 0) // MaxResponseLength = DefaultMaxResponseLength; // _response = new StringBuilder(); // _errorResponse = ""; // //slap in the initial request // _response.AppendLine(query.FinalUrl); // _response.AppendLine(""); // results.Clear(); // try { // Tuple<long, long> stats = new Tuple<long, long>(-1, -1); // do { // query.Start = stats.Item2; // System.Diagnostics.Debug.WriteLine(""); // System.Diagnostics.Debug.WriteLine(query.FinalUrl); // System.Diagnostics.Debug.WriteLine(""); // EsriHttpClient httpClient = new EsriHttpClient(); // var response = httpClient.Get(query.FinalUri.ToString()); // var raw = response.Content.ReadAsStringAsync().Result;//block // stats = ProcessResults(results, raw, query); // } while (stats.Item2 < maxResults && stats.Item2 > 0); // } // catch (WebException we) { // //bad request // _response.AppendLine(""); // _response.AppendLine("WebException: " + we.Message); // _response.AppendLine(query.FinalUrl); // _response.AppendLine(""); // _response.AppendLine(new Uri(query.FinalUrl).Scheme.ToUpper() + " " + // ((int)we.Status).ToString()); // try { // _errorResponse = new StreamReader(we.Response.GetResponseStream()).ReadToEnd(); // _response.AppendLine(_errorResponse); // } // catch { // } // } // finally { // //content = _response.ToString() // // .Replace("{", "{\r\n") // // .Replace("}", "\r\n}") // // .Replace(",\"", ",\r\n\""); // } // return _response.ToString(); //} public async void Exec2Async(OnlineQuery query, ObservableCollection <OnlinePortalItem> results, string portalUrl, int maxResults = 0) { if (maxResults == 0) { maxResults = DefaultMaxResults; } if (MaxResponseLength == 0) { MaxResponseLength = DefaultMaxResponseLength; } _response = new StringBuilder(); _errorResponse = ""; //slap in the initial request _response.AppendLine(query.FinalUrl); _response.AppendLine(""); results.Clear(); try { Tuple <long, int> stats = new Tuple <long, int>(-1, -1); var portal = ArcGISPortalManager.Current.GetPortal(new Uri(portalUrl)); int startIndex = 0; var totalCount = 0; do { query.Start = startIndex; System.Diagnostics.Debug.WriteLine(""); System.Diagnostics.Debug.WriteLine(query.FinalUrl); System.Diagnostics.Debug.WriteLine(""); PortalQueryResultSet <PortalItem> portalResults = await ArcGISPortalExtensions.SearchForContentAsync(portal, query.PortalQueryParams); if (portalResults.Results.Count <= 0) { break; } foreach (var item in portalResults.Results.OfType <PortalItem>()) { OnlinePortalItem ri = new OnlinePortalItem { Id = item.ID, Title = item.Title ?? String.Format("Item {0}", startIndex + ++totalCount), Name = item.Name, Snippet = item.Description ?? "no snippet", Url = item.Url ?? "", ThumbnailUrl = item.ThumbnailPath, PortalItemType = item.PortalItemType }; string thumb = item.ThumbnailUri?.ToString() ?? ""; string s = item.Description; string a = item.Access.ToString(); ri.Configure(query.URL, ri.Id, thumb, s, item.PortalItemType, a); results.Add(ri); totalCount++; } startIndex += results.Count; } while (totalCount < maxResults); } catch (WebException we) { //bad request _response.AppendLine(""); _response.AppendLine("WebException: " + we.Message); _response.AppendLine(query.FinalUrl); _response.AppendLine(""); _response.AppendLine(new Uri(query.FinalUrl).Scheme.ToUpper() + " " + ((int)we.Status).ToString()); try { _errorResponse = new StreamReader(we.Response.GetResponseStream()).ReadToEnd(); _response.AppendLine(_errorResponse); } catch { } } finally { } //return _response.ToString(); }
protected internal async virtual void ExecuteItemAction(string id) { _selectedResult = _results.FirstOrDefault(ri => ri.Id == id); if (_selectedResult == null) { return; } //Either we open a project and then create the item or //we download the item and then create a project from it. //MapPackage is a special case. We download it, create //a project and then add the map package to it. VisibleList = Visibility.Collapsed; VisibleText = Visibility.Visible; StatusTitle = $@"{_selectedResult.LinkText}: {_selectedResult.Title}"; switch (_selectedResult.PortalItemType) { case PortalItemType.WebMap: { await Project.CreateAsync(new CreateProjectSettings() { Name = System.IO.Path.GetFileNameWithoutExtension(_selectedResult.Name) }); var currentItem = ItemFactory.Instance.Create(_selectedResult.Id, ItemFactory.ItemType.PortalItem); if (MapFactory.Instance.CanCreateMapFrom(currentItem)) { await QueuedTask.Run(() => { var newMap = MapFactory.Instance.CreateMapFromItem(currentItem); FrameworkApplication.Panes.CreateMapPaneAsync(newMap); }); } } break; case PortalItemType.Layer: { var ps = new CreateProjectSettings() { Name = System.IO.Path.GetFileNameWithoutExtension(_selectedResult.Name), LocationPath = ConfigWithStartWizardModule.DefaultFolder(), TemplateType = TemplateType.GlobalScene }; _eventToken = ArcGIS.Desktop.Mapping.Events.MapViewInitializedEvent.Subscribe((args) => { Item currentItem = ItemFactory.Instance.Create(_selectedResult.Id, ItemFactory.ItemType.PortalItem); if (LayerFactory.Instance.CanCreateLayerFrom(currentItem)) { var lyrParams = new LayerCreationParams(currentItem); QueuedTask.Run(() => LayerFactory.Instance.CreateLayer <FeatureLayer>(lyrParams, args.MapView.Map)); } ArcGIS.Desktop.Mapping.Events.MapViewInitializedEvent.Unsubscribe(_eventToken); _eventToken = null; }); try { await Project.CreateAsync(ps); } catch (Exception ex) { Status = $@"Error occurred: {ex.ToString()}"; System.Diagnostics.Debug.WriteLine(ex.ToString()); } } break; default: var query = new OnlineQuery(_activePortalUri); query.ConfigureData("", _selectedResult.Id, _selectedResult.Name); Status = "Downloading"; await new SubmitQuery().DownloadFileAsync(query); Status = "Opening"; //Project package if (_selectedResult.PortalItemType == PortalItemType.ProjectPackage) { await Project.OpenAsync(query.DownloadFileName); } //Project Template else if (_selectedResult.PortalItemType == PortalItemType.MapTemplate) { var ps = new CreateProjectSettings() { Name = System.IO.Path.GetFileNameWithoutExtension(_selectedResult.Name), LocationPath = ConfigWithStartWizardModule.DefaultFolder(), TemplatePath = query.DownloadFileName }; try { await Project.CreateAsync(ps); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); Status = $@"Error occurred: {ex.ToString()}"; } } //Map Package else if (_selectedResult.PortalItemType == PortalItemType.MapPackage) { await Project.CreateAsync(new CreateProjectSettings() { Name = System.IO.Path.GetFileNameWithoutExtension(_selectedResult.Name) }); try { var mapPackage = ItemFactory.Instance.Create(query.DownloadFileName); MapFactory.Instance.CreateMapFromItem(mapPackage); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); Status = $@"Error occurred: {ex.ToString()}"; } } break; } }