private void Initialize()
        {
            if (_isInitialized)
            {
                return;
            }
            _isInitialized   = true;
            _selResultOption = _resultOptions[0];
            OnlineUriFactory.CreateOnlineUris();
            foreach (var uri in OnlineUriFactory.OnlineUris)
            {
                //create a query
                OnlineQuery query = new OnlineQuery();
                query.OnlineUri = uri;
                _browseQueries.Add(query);
            }

            //init timer
            _timer = new DispatcherTimer()
            {
                Interval  = TimeSpan.FromMilliseconds(25d),
                IsEnabled = false
            };
            _timer.Tick += (o, e) => {
                //update the progress bar
                _progressValue += 1.0;
                if (_progressValue > _maxProgressValue)
                {
                    _progressValue = 1.0;
                }
                FrameworkApplication.Current.Dispatcher.Invoke(() => OnPropertyChanged("ProgressValue"));
            };
        }
Example #2
0
        public async Task <IActionResult> EndSession(int query_id)
        {
            OnlineQuery query = await _db.OnlineQueries.Where(a => a.Id == query_id).FirstOrDefaultAsync();

            query.IsDeleted = 1;
            await _db.SaveChangesAsync();

            return(Ok(new ReturnMessage()));
        }
Example #3
0
        public async Task <IActionResult> Disable(int query_id)
        {
            OnlineQuery query = await _db.OnlineQueries.Where(a => a.Id == query_id).FirstOrDefaultAsync();

            query.IsSchedule = 0;
            await _db.SaveChangesAsync();

            return(Ok(new ReturnMessage()));
        }
Example #4
0
        public async Task ExecDownloadAsync(OnlineQuery query, string fileName)
        {
            EsriHttpClient httpClient = new EsriHttpClient();
            var            response   = httpClient.Get(query.DownloadUrl);
            var            stm        = await response.Content.ReadAsStreamAsync();

            using (MemoryStream ms = new MemoryStream()) {
                stm.CopyTo(ms);
                System.IO.File.WriteAllBytes(fileName, ms.ToArray());
            }
        }
Example #5
0
        private Tuple <long, long> ProcessResults(
            ObservableCollection <OnlineResultItem> results,
            string json,
            OnlineQuery query)
        {
            long num  = -1;
            long next = -1;

            if (string.IsNullOrEmpty(json))
            {
                return(new Tuple <long, long>(num, next));
            }

            //process the query results
            dynamic queryResults = JObject.Parse(json);

            if (queryResults.error != null)
            {
                //there was an error in the query
                return(new Tuple <long, long>(num, next));
            }

            long numberOfTotalItems = queryResults.total.Value;
            int  count = 0;

            if (numberOfTotalItems > 0)
            {
                //these are the results
                List <dynamic> userItemResults = new List <dynamic>();
                // store the results in the list
                userItemResults.AddRange(queryResults.results);
                foreach (dynamic item in userItemResults)
                {
                    count++;
                    OnlineResultItem ri = new OnlineResultItem();
                    ri.Id    = item.id;
                    ri.Title = item.title ?? String.Format("Item {0}", count);
                    ri.Name  = item.name;
                    //ri.Snippet = item.snippet ?? "no snippet";
                    ri.Url = item.url ?? "";
                    string thumb = item.thumbnail ?? "";
                    string s     = item.snippet;
                    string t     = item.type;
                    string a     = item.access;
                    ri.Configure(query.URL, ri.Id, thumb, s, t, a);
                    results.Add(ri);
                }
                num  = queryResults.num.Value;
                next = queryResults.nextStart.Value;
            }
            return(new Tuple <long, long>(num, next));
        }
        /// <summary>
        /// Returns the query string property or an empty string if the value is null
        /// </summary>
        /// <returns>The query string</returns>
        public Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture)
        {
            if (value == null)
            {
                return("");
            }
            if ((value as OnlineQuery) == null)
            {
                return("");
            }
            OnlineQuery val = value as OnlineQuery;

            return(val.FinalUrl);
        }
        public async Task ExecDownloadAsync2(OnlineQuery query, string fileName)
        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(query.DownloadUrl);

            req.Method    = "GET";
            req.Referer   = "ProjectViewer";
            req.UserAgent = SubmitQuery.DefaultUserAgent;
            //submit the query
            var response = await req.GetResponseAsync();

            using (MemoryStream ms = new MemoryStream()) {
                response.GetResponseStream().CopyTo(ms);
                System.IO.File.WriteAllBytes(fileName, ms.ToArray());
            }
        }
        public IActionResult GetOnlineQuery([FromBody] OnlineQueryDTO request)
        {
            #region FunctionBody
            bool existedQuery = _db.OnlineQueries.Any(c => c.UserId == request.UserId);
            if (existedQuery)
            {
                return(StatusCode(400, new ReturnErrorMessage((int)ErrorTypes.Errors.UnfinishedQuery)));
            }
            bool existedDate = _db.OnlineQueries.Any(a => a.ServiceDate == request.ServiceDate);
            if (existedDate)
            {
                return(StatusCode(400, new ReturnErrorMessage((int)ErrorTypes.Errors.ExistedTime)));
            }
            request.StartDate = DateTime.Now;
            int datecompare = DateTime.Compare(request.StartDate, request.ServiceDate);
            if (datecompare >= 0)
            {
                return(StatusCode(400, new ReturnErrorMessage((int)ErrorTypes.Errors.ValidationFailed)));
            }
            OnlineQuery query = new OnlineQuery();
            query.StartDate   = request.StartDate;
            query.ServiceDate = request.ServiceDate;
            query.ServiceId   = request.ServiceId;
            query.UserId      = request.UserId;
            query.Info        = request.Info;
            List <PDFClass> pdfcls = new List <PDFClass>();
            if (request.Files != null)
            {
                if (request.Files.Count > 0)
                {
                    foreach (var item in request.Files)
                    {
                        pdfcls.Add(new PDFClass {
                            PDFName = item.PDFName
                        });
                    }
                }
            }
            query.PdfClasses = pdfcls;
            _db.OnlineQueries.Add(query);

            _db.SaveChanges();
            return(Ok(new ReturnMessage()));

            #endregion
        }
Example #9
0
        public IActionResult GetResult([FromBody] ClientCredentials request)
        {
            bool existqueryId = _db.OnlineQueries.Any(a => a.Code == request.QueryId);

            if (!existqueryId)
            {
                return(BadRequest(new ReturnErrorMessage(errortype: (int)ErrorTypes.Errors.CodeInvalid)));
            }
            bool existNumber = _db.OnlineQueries.Any(a => a.PhoneNumber == request.PhoneNumber);

            if (!existNumber)
            {
                return(BadRequest(new ReturnErrorMessage(errortype: (int)ErrorTypes.Errors.NumberInvalid)));
            }
            OnlineQuery onlineQuery = _db.OnlineQueries.Where(a => a.Code == request.QueryId && a.PhoneNumber == request.PhoneNumber).FirstOrDefault();

            return(Ok(new ReturnMessage(data: _db.PDFBase.Where(a => a.OnlineQueryId == onlineQuery.Id).FirstOrDefault())));
        }
Example #10
0
        public async Task <IActionResult> ConfirmReal([FromBody] OnlineQuery request)
        {
            #region FunctionBody
            bool existed = await _db.OnlineQueries.AnyAsync(
                a =>
                a.QueryDate == request.QueryDate &&
                a.IsDeleted == 0 &&
                a.IsSchedule == 1);

            if (existed)
            {
                return(BadRequest(new ReturnErrorMessage(errortype: (int)ErrorTypes.Errors.ExistedTime, message: "This Time is exist by other user")));
            }
            Doctor dcBase = await _db.Doctors.FirstOrDefaultAsync(a => a.Id == request.DoctorId);

            DoctorsInfo doctor = await _db.DoctorsInfos.FirstOrDefaultAsync(a => a.DoctorId == request.DoctorId);

            if (
                doctor.WorkTimeFromDate > (int)request.QueryDate.DayOfWeek ||
                doctor.WorkTimeToDate < (int)request.QueryDate.DayOfWeek
                )

            {
                return(BadRequest(new ReturnErrorMessage(errortype: (int)ErrorTypes.Errors.NotAllowedTime, message: "This Time not registered by Doctor")));
            }
            try
            {
                request.ServeDate  = DateTime.Now;
                request.IsSchedule = 1;
                request.IsOnline   = 0;
                request.Price      = dcBase.Price;
                await _db.OnlineQueries.AddAsync(request);
            }
            catch (Exception x)
            {
                return(BadRequest(new ReturnErrorMessage(errortype: (int)ErrorTypes.Errors.Internal, message: x.Message, code: 500)));
            }
            await _db.SaveChangesAsync();

            return(Ok(new ReturnMessage()));

            #endregion
        }
 protected internal override Task InitializeAsync()
 {
     if (_initialized)
     {
         return(Task.FromResult(0));
     }
     return(QueuedTask.Run(() => {
         if (string.IsNullOrEmpty(_activePortalUri))
         {
             var portal = ArcGISPortalManager.Current.GetActivePortal();
             _activePortalUri = portal?.PortalUri.ToString();
             _token = portal?.GetToken();
         }
         if (!string.IsNullOrEmpty(_activePortalUri))
         {
             var query = new OnlineQuery(_activePortalUri);
             query.Configure(_contentType);
             var submitQuery = new SubmitQuery();
             submitQuery.Exec(query, _results, 100);
         }
     }));
 }
Example #12
0
        /// <summary>
        /// Execute the given query and return the result
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public async Task <string> ExecWithEsriClientAsync(OnlineQuery query, ObservableCollection <OnlineResultItem> results, int maxResults = 0)
        {
            if (maxResults == 0)
            {
                maxResults = OnlineQuery.DefaultMaxResults;
            }
            if (MaxResponseLength == 0)
            {
                MaxResponseLength = OnlineQuery.DefaultMaxResponseLength;
            }

            _response      = new StringBuilder();
            _errorResponse = "";

            //slap in the initial request
            _response.AppendLine(query.FinalUrl);
            _response.AppendLine("");

            try {
                Tuple <long, long> stats = new Tuple <long, long>(-1, -1);
                do
                {
                    query.Start = stats.Item2;

                    Debug.WriteLine("");
                    Debug.WriteLine(query.FinalUrl);
                    Debug.WriteLine("");

                    EsriHttpClient httpClient = new EsriHttpClient();
                    //submit the query
                    EsriHttpResponseMessage response = await httpClient.GetAsync(new Uri(query.FinalUrl).ToString());

                    HttpResponseHeaders headers = response.Headers;

                    //read out the json
                    string raw = await response.Content.ReadAsStringAsync();

                    //convert entity-replacement tags
                    raw = raw.Replace("&lt;", "<").Replace("&gt;", ">");
                    if (_response.Length < MaxResponseLength)
                    {
                        _response.AppendLine("");
                        _response.AppendLine(raw);
                        if (_response.Length > MaxResponseLength)
                        {
                            _response.AppendLine("...");
                        }
                    }

                    Debug.WriteLine("");
                    Debug.WriteLine(raw);
                    Debug.WriteLine("");

                    //deserialize
                    stats = await ProcessResultsAsync(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 {
                }
            }

            return(_response.ToString());
        }
Example #13
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();
        }
Example #14
0
 public Task <bool> DownloadFileAsync(OnlineQuery query)
 {
     return(new EsriHttpClient().GetAsFileAsync(query.DownloadUrl, query.DownloadFileName));
 }
Example #15
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;
            }
        }
Example #16
0
 public GameServer(IdentifierQuery identifierQuery = null, OnlineQuery onlineQuery = null, Network network = null)
 {
     this.identifierQuery = identifierQuery;
     this.onlineQuery     = onlineQuery;
     this.network         = network ?? new Network();
 }
        /// <summary>
        /// Execute the given query and return the result
        /// </summary>
        /// <param name="query"></param>
        /// <param name="results"></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());
        }
Example #18
0
        private Task <Tuple <long, long> > ProcessResultsAsync(ObservableCollection <OnlineResultItem> results, string json, OnlineQuery query)
        {
            //do this in the background
            return(Task.Run(() => {
                long num = -1;
                long next = -1;
                if (json.IsEmpty())
                {
                    return new Tuple <long, long>(num, next);
                }

                //process the query results
                dynamic queryResults = JObject.Parse(json);
                if (queryResults.error != null)
                {
                    //there was an error in the query
                    return new Tuple <long, long>(num, next);
                }

                long numberOfTotalItems = queryResults.total.Value;
                int count = 0;

                if (numberOfTotalItems > 0)
                {
                    //these are the results
                    List <dynamic> userItemResults = new List <dynamic>();
                    // store the results in the list
                    userItemResults.AddRange(queryResults.results);
                    foreach (dynamic item in userItemResults)
                    {
                        count++;
                        OnlineResultItem ri = new OnlineResultItem();
                        ri.Id = item.id;
                        ri.Title = item.title ?? String.Format("Item {0}", count);
                        ri.Snippet = item.snippet ?? "no snippet";
                        ri.Url = item.url ?? "";
                        string thumb = item.thumbnail ?? "";
                        ri.SetThumbnailURL(query.Portal, ri.Id, thumb);
                        results.Add(ri);
                    }
                    num = queryResults.num.Value;
                    next = queryResults.nextStart.Value;
                }
                return new Tuple <long, long>(num, next);
            }));
        }
        protected internal async virtual void ExecuteItemAction(string url)
        {
            _result = _results.FirstOrDefault(ri => ri.Id == url);
            if (_result == 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.
            switch (_result.OnlineItemType)
            {
            case OnlineItemType.WebMap:
            {
                await Project.CreateAsync(new CreateProjectSettings()
                    {
                        Name = System.IO.Path.GetFileNameWithoutExtension(_result.Name)
                    });

                var currentItem = ItemFactory.Create(_result.Id, ItemFactory.ItemType.PortalItem);
                if (MapFactory.CanCreateMapFrom(currentItem))
                {
                    var newMap = await MapFactory.CreateMapAsync(currentItem);

                    await FrameworkApplication.Panes.CreateMapPaneAsync(newMap);
                }
            }
            break;

            case OnlineItemType.Layer:
            {
                var ps = new CreateProjectSettings()
                {
                    Name         = System.IO.Path.GetFileNameWithoutExtension(_result.Name),
                    LocationPath = ConfigWithStartWizardModule.DefaultFolder(),
                    TemplatePath = ConfigWithStartWizardModule.GetDefaultTemplates()[0]         //Scene
                };
                _eventToken = ArcGIS.Desktop.Mapping.Events.MapViewInitializedEvent.Subscribe((args) =>
                    {
                        Item currentItem = ItemFactory.Create(_result.Id, ItemFactory.ItemType.PortalItem);
                        if (LayerFactory.CanCreateLayerFrom(currentItem))
                        {
                            QueuedTask.Run(() => LayerFactory.CreateLayer(currentItem, args.MapView.Map));
                        }
                        ArcGIS.Desktop.Mapping.Events.MapViewInitializedEvent.Unsubscribe(_eventToken);
                        _eventToken = null;
                    });
                try
                {
                    await Project.CreateAsync(ps);
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.ToString());
                }
            }
            break;

            default:
                var query = new OnlineQuery(_activePortalUri);
                query.ConfigureData("", _result.Id, _result.Name);

                await new SubmitQuery().DownloadFileAsync(query);

                //Project package
                if (_result.OnlineItemType == OnlineItemType.ProjectPackage)
                {
                    Project.OpenAsync(query.DownloadFileName);
                }
                //Project Template
                else if (_result.OnlineItemType == OnlineItemType.Template)
                {
                    var ps = new CreateProjectSettings()
                    {
                        Name         = System.IO.Path.GetFileNameWithoutExtension(_result.Name),
                        LocationPath = ConfigWithStartWizardModule.DefaultFolder(),
                        TemplatePath = query.DownloadFileName
                    };
                    try
                    {
                        await Project.CreateAsync(ps);
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Debug.WriteLine(ex.ToString());
                    }
                }
                //Map Package
                else if (_result.OnlineItemType == OnlineItemType.MapPackage)
                {
                    await Project.CreateAsync(new CreateProjectSettings()
                    {
                        Name = System.IO.Path.GetFileNameWithoutExtension(_result.Name)
                    });

                    try
                    {
                        var mapPackage = ItemFactory.Create(query.DownloadFileName);
                        await Project.Current.AddAsync(mapPackage);
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Debug.WriteLine(ex.ToString());
                    }
                }
                break;
            }
        }
Example #20
0
        /// <summary>
        /// Execute the given query and return the result
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public async Task <string> ExecAsync(OnlineQuery query, ObservableCollection <OnlineResultItem> results, int maxResults = 0)
        {
            if (maxResults == 0)
            {
                maxResults = OnlineQuery.DefaultMaxResults;
            }
            if (MaxResponseLength == 0)
            {
                MaxResponseLength = OnlineQuery.DefaultMaxResponseLength;
            }

            _response      = new StringBuilder();
            _errorResponse = "";

            //slap in the initial request
            _response.AppendLine(query.FinalUrl);
            _response.AppendLine("");

            try {
                Tuple <long, long> stats = new Tuple <long, long>(-1, -1);
                do
                {
                    query.Start = stats.Item2;

                    Debug.WriteLine("");
                    Debug.WriteLine(query.FinalUrl);
                    Debug.WriteLine("");

                    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(new Uri(query.FinalUrl));
                    req.Method    = "GET";
                    req.Referer   = query.Referer;
                    req.UserAgent = OnlineQuery.DefaultUserAgent;
                    //submit the query
                    var response = await req.GetResponseAsync();

                    //Headers for prosperity if we're debugging the response
                    WebHeaderCollection whc = response.Headers;
                    if (_response.Length < MaxResponseLength)
                    {
                        for (int i = 0; i < whc.Count; i++)
                        {
                            _response.AppendLine(whc.GetKey(i) + " = " + whc.Get(i));
                        }
                        if (_response.Length > MaxResponseLength)
                        {
                            _response.AppendLine("...");
                        }
                    }
                    //read out the json
                    using (StreamReader sr = new StreamReader(response.GetResponseStream())) {
                        string raw = await sr.ReadToEndAsync();

                        //convert entity-replacement tags
                        raw = raw.Replace("&lt;", "<").Replace("&gt;", ">");

                        if (_response.Length < MaxResponseLength)
                        {
                            _response.AppendLine("");
                            _response.AppendLine(raw);
                            if (_response.Length > MaxResponseLength)
                            {
                                _response.AppendLine("...");
                            }
                        }

                        Debug.WriteLine("");
                        Debug.WriteLine(raw);
                        Debug.WriteLine("");

                        //deserialize
                        stats = await ProcessResultsAsync(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 {
                }
            }

            return(_response.ToString());
        }
Example #21
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 <PortalItem> 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;
                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);

                    foreach (var item in portalResults.Results.OfType <PortalItem>())
                    {
                        results.Add(item);
                    }
                    startIndex = results.Count + startIndex;
                } while (startIndex < 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();
        }