/// <summary>
        /// Get list of Processing Services from Atom Feed
        /// Each Item of the feed contains a Describe Process url
        /// </summary>
        /// <param name="context"></param>
        /// <param name="feed"></param>
        /// <param name="createProviderIfNotFound"></param>
        /// <returns></returns>
        public static List <WpsProcessOffering> GetRemoteWpsProcessingOfferingsFromUrl(IfyContext context, string url, bool createProviderIfNotFound)
        {
            var remoteProcesses = new List <WpsProcessOffering>();

            var items = GetRemoteWpsServiceEntriesFromUrl(context, url);

            foreach (OwsContextAtomEntry item in items)
            {
                var wps = GetWpsProcessOfferingFromProcessDescriptionAtomFeed(context, item);
                if (wps == null)
                {
                    continue;
                }

                var         describeProcessUrl = wps.Url;
                var         providerBaseUrl    = describeProcessUrl.Substring(0, describeProcessUrl.LastIndexOf("/"));
                var         processIdentifier  = describeProcessUrl.Substring(describeProcessUrl.LastIndexOf("/") + 1);
                WpsProvider wpsprovider        = null;
                try {
                    wpsprovider = WpsProvider.FromBaseUrl(context, providerBaseUrl);
                } catch (System.Exception) {
                    if (createProviderIfNotFound)
                    {
                        var urip = new Uri(providerBaseUrl);
                        wpsprovider            = new WpsProvider(context);
                        wpsprovider.Identifier = urip.AbsolutePath.Contains("/wps3/processes") ?
                                                 urip.Host + urip.AbsolutePath.Substring(0, urip.AbsolutePath.IndexOf("/wps3/processes")).Replace("/", ".") :
                                                 Guid.NewGuid().ToString();
                        wpsprovider.Name = urip.AbsolutePath.Contains("/wps3/processes") ?
                                           urip.Host + urip.AbsolutePath.Substring(0, urip.AbsolutePath.IndexOf("/wps3/processes")).Replace("/", ".") :
                                           urip.Host + urip.AbsolutePath.Replace("/", ".");
                        wpsprovider.BaseUrl      = providerBaseUrl;
                        wpsprovider.StageResults = true;
                        wpsprovider.Proxy        = true;
                        wpsprovider.Store();

                        wpsprovider.GrantPermissionsToAll();
                    }
                }
                if (wpsprovider != null)
                {
                    wps.Provider = wpsprovider;
                }

                //case WPS 3.0
                if (IsWPS3(describeProcessUrl))
                {
                    try
                    {
                        WpsProcessOffering process = GetProcessingFromDescribeProcessWps3(context, describeProcessUrl);
                        wps.RemoteIdentifier = process.RemoteIdentifier;
                        if (string.IsNullOrEmpty(wps.Name))
                        {
                            wps.Name = process.Name;
                        }
                        if (string.IsNullOrEmpty(wps.Description))
                        {
                            wps.Description = process.Description;
                        }
                        if (string.IsNullOrEmpty(wps.Version))
                        {
                            wps.Version = process.Version;
                        }
                    }catch (System.Exception e) {
                        context.LogError(context, "Error with url '" + describeProcessUrl + "' : " + e.Message);
                        wps = null;
                    }
                }
                if (wps == null)
                {
                    continue;
                }
                remoteProcesses.Add(wps);
            }
            return(remoteProcesses);
        }