Ejemplo n.º 1
0
        /// <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();
        }
Ejemplo n.º 2
0
        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;
            }
        }