Ejemplo n.º 1
0
        public void SearchRssFeeds()
        {
            var ose      = MasterCatalogue.OpenSearchEngine;
            var settings = new OpenSearchableFactorySettings(ose);
            List <Terradue.OpenSearch.IOpenSearchable> osentities = new List <Terradue.OpenSearch.IOpenSearchable>();
            var parameters = new NameValueCollection();

            parameters.Set("count", "20");

            try {
                EntityList <RssNews> rsss = new EntityList <RssNews>(context);
                rsss.Load();
                if (rsss != null)
                {
                    foreach (RssNews rss in rsss)
                    {
                        osentities.Add(rss);
                    }
                }
                MultiGenericOpenSearchable  multiOSE = new MultiGenericOpenSearchable(osentities, settings);
                IOpenSearchResultCollection osr      = ose.Query(multiOSE, parameters);
                Assert.That(osr.TotalResults > 0);
            } catch (Exception e) {
                Assert.Fail(e.Message);
            } finally {
                context.EndImpersonation();
            }
        }
Ejemplo n.º 2
0
        //---------------------------------------------------------------------------------------------------------------------

        #region IOpenSearchable implementation

        //---------------------------------------------------------------------------------------------------------------------

        public OpenSearchRequest Create(QuerySettings querySettings, System.Collections.Specialized.NameValueCollection parameters)
        {
            UriBuilder url = new UriBuilder(context.BaseUrl);

            url.Path += "/remoteresource/" + this.Identifier;
            var array = (from key in parameters.AllKeys
                         from value in parameters.GetValues(key)
                         select string.Format("{0}={1}", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(value)))
                        .ToArray();

            url.Query = string.Join("&", array);

            /*if (!String.IsNullOrEmpty(parameters["grouped"]) && parameters["grouped"] == "true") {
             *  return new MultiAtomGroupedOpenSearchRequest(ose, GetOpenSearchableArray(), type, new OpenSearchUrl(url.ToString()), true);
             * }*/
            //TODO: if only one result dont use Multi
            var entities = GetOpenSearchableArray();
            OpenSearchableFactorySettings settings = new OpenSearchableFactorySettings(ose)
            {
                Credentials = querySettings.Credentials
            };

            settings.MergeFilters = Terradue.Metadata.EarthObservation.Helpers.GeoTimeOpenSearchHelper.MergeGeoTimeFilters;
            return(new MultiOpenSearchRequest <AtomFeed, AtomItem>(settings, entities, querySettings.PreferredContentType, new OpenSearchUrl(url.ToString()), true, this));
        }
Ejemplo n.º 3
0
 public UrlBasedOpenSearchable(IfyContext context, OpenSearchDescription osd, OpenSearchUrl url, OpenSearchableFactorySettings settings)
 {
     this.context  = context;
     this.osd      = osd;
     this.url      = url;
     this.settings = settings;
 }
Ejemplo n.º 4
0
        internal IOpenSearchable CreateOpenSearchableEntity(FiltersDefinition filters = null, int maxRetries = 3)
        {
            OpenSearchableFactorySettings ossettings = new OpenSearchableFactorySettings(ose)
            {
                Credentials = Wrapper.Settings.Credentials,
                MaxRetries  = maxRetries
            };
            IDataHubSourceWrapper wrapper = CreateDataAccessWrapper(TargetSiteConfig, filters);

            wrapper.Settings.MaxRetries = 3;
            return(wrapper.CreateOpenSearchable(ossettings));
        }
Ejemplo n.º 5
0
        //---------------------------------------------------------------------------------------------------------------------

        public virtual IOpenSearchable[] GetOpenSearchableArray()
        {
            List <IOpenSearchable> osResources = new List <IOpenSearchable>(Resources.Count);

            var settings = new OpenSearchableFactorySettings(ose);

            settings.MergeFilters = Terradue.Metadata.EarthObservation.Helpers.GeoTimeOpenSearchHelper.MergeGeoTimeFilters;

            foreach (RemoteResource res in Resources)
            {
                var entity = OpenSearchFactory.FindOpenSearchable(settings, new Uri(res.Location));
                osResources.Add(entity);
            }

            return(osResources.ToArray());
        }
Ejemplo n.º 6
0
        public void SearchTwitterFeeds()
        {
            var ose        = MasterCatalogue.OpenSearchEngine;
            var settings   = new OpenSearchableFactorySettings(ose);
            var parameters = new NameValueCollection();

            parameters.Set("count", "20");

            try {
                var twitters = TwitterNews.LoadTwitterCollection(context);
                IOpenSearchResultCollection osr = ose.Query(twitters, parameters);
                Assert.That(osr.TotalResults > 0);
            } catch (Exception e) {
                Assert.Fail(e.Message);
            } finally {
                context.EndImpersonation();
            }
        }
Ejemplo n.º 7
0
        public OpenSearchRequest Create(QuerySettings querySettings, NameValueCollection parameters)
        {
            UriBuilder url = new UriBuilder(context.BaseUrl);

            url.Path += "/series/" + this.Identifier;
            var array = (from key in parameters.AllKeys
                         from value in parameters.GetValues(key)
                         select string.Format("{0}={1}", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(value)))
                        .ToArray();

            url.Query = string.Join("&", array);
            OpenSearchableFactorySettings settings = new OpenSearchableFactorySettings(ose)
            {
                Credentials = querySettings.Credentials
            };

            settings.MergeFilters = Terradue.Metadata.EarthObservation.Helpers.GeoTimeOpenSearchHelper.MergeGeoTimeFilters;
            return(new MultiOpenSearchRequest <AtomFeed, AtomItem>(settings, Series.ToArray(), querySettings.PreferredContentType, new OpenSearchUrl(url.ToString()), true, this));
        }
Ejemplo n.º 8
0
        public virtual IOpenSearchable CreateOpenSearchable(IEnumerable <Uri> baseUrls, string queryFormatArg, OpenSearchEngine ose, IEnumerable <NetworkCredential> netCreds, OpenSearchableFactorySettings settings)
        {
            List <IOpenSearchable> entities = new List <IOpenSearchable>();

            for (int i = 0; i < baseUrls.Count(); i++)
            {
                var url = baseUrls.ElementAt(i);

                settings.Credentials = netCreds == null ? null : netCreds.ElementAt(i);

                if (string.IsNullOrEmpty(queryFormatArg))
                {
                    try
                    {
                        entities.Add(OpenSearchFactory.FindOpenSearchable(settings, url, null));
                    }
                    catch (Exception e)
                    {
                        throw e;
                    }
                }
                else
                {
                    var e = OpenSearchFactory.FindOpenSearchable(settings, url, ose.GetExtensionByExtensionName(queryFormatArg).DiscoveryContentType);
                    entities.Add(e);
                }
            }

            IOpenSearchable entity;
            OpenSearchableFactorySettings settings2 = new OpenSearchableFactorySettings(ose);

            if (entities.Count > 1)
            {
                entity = new MultiGenericOpenSearchable(entities, settings2);
            }
            else
            {
                entity = entities[0];
            }

            return(entity);
        }
Ejemplo n.º 9
0
        public object Get(WpsJobProductSearchRequestTep request)
        {
            var        context = TepWebContext.GetWebContext(PagePrivileges.EverybodyView);
            HttpResult result  = null;

            try {
                context.Open();
                context.LogInfo(this, string.Format("/job/wps/{0}/products/search GET", request.JobId));

                WpsJob wpsjob = null;

                try {
                    wpsjob = WpsJob.FromIdentifier(context, request.JobId);
                } catch (Exception e) {
                    if (request.Key != null)                     //or if public
                    {
                        context.AccessLevel = EntityAccessLevel.Administrator;
                        wpsjob = WpsJob.FromIdentifier(context, request.JobId);
                        if (request.Key != null && !request.Key.Equals(wpsjob.AccessKey))
                        {
                            throw new UnauthorizedAccessException(CustomErrorMessages.WRONG_ACCESSKEY);
                        }
                    }
                    else
                    {
                        throw e;
                    }
                }

                OpenSearchEngine ose         = MasterCatalogue.OpenSearchEngine;
                HttpRequest      httpRequest = HttpContext.Current.Request;
                Type             type        = OpenSearchFactory.ResolveTypeFromRequest(httpRequest.QueryString, httpRequest.Headers, ose);
                var nvc = httpRequest.QueryString;

                if (CatalogueFactory.IsCatalogUrl(new Uri(wpsjob.StatusLocation)))
                {
                    var settings = MasterCatalogue.OpenSearchFactorySettings;
                    OpenSearchableFactorySettings specsettings = (OpenSearchableFactorySettings)settings.Clone();

                    //get credentials from current user
                    if (context.UserId != 0)
                    {
                        var user     = UserTep.FromId(context, context.UserId);
                        var apikey   = user.GetSessionApiKey();
                        var t2userid = user.TerradueCloudUsername;
                        if (!string.IsNullOrEmpty(apikey))
                        {
                            specsettings.Credentials = new System.Net.NetworkCredential(t2userid, apikey);
                        }
                    }
                    GenericOpenSearchable urlToShare = new GenericOpenSearchable(new OpenSearchUrl(wpsjob.StatusLocation), specsettings);
                    var res = ose.Query(urlToShare, nvc, type);
                    result = new HttpResult(res.SerializeToString(), res.ContentType);
                }
                else
                {
                    WpsJobProductOpenSearchable wpsjobProductOs = new WpsJobProductOpenSearchable(wpsjob, context);

                    //var nvc = wpsjobUrl.GetParameters ();
                    var res = ose.Query(wpsjobProductOs, nvc, type);
                    OpenSearchFactory.ReplaceSelfLinks(wpsjobProductOs, httpRequest.QueryString, res, EntrySelfLinkTemplate);
                    OpenSearchFactory.ReplaceOpenSearchDescriptionLinks(wpsjobProductOs, res);
                    result = new HttpResult(res.SerializeToString(), res.ContentType);
                }

                context.Close();
            } catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }
            return(result);
        }
Ejemplo n.º 10
0
 private SandboxOpenSearchable(SandboxOpenSearchInformation sosi, OpenSearchableFactorySettings settings) : base(sosi.Url, settings)
 {
     this.SandboxOpenSearchInformation = sosi;
 }
Ejemplo n.º 11
0
        public override IOpenSearchable[] GetOpenSearchableArray()
        {
            List <IOpenSearchable> osResources = new List <IOpenSearchable>(Resources.Count);

            var settings = MasterCatalogue.OpenSearchFactorySettings;

            string apikey   = null;
            string t2userid = null;

            if (context.UserId != 0)
            {
                var user = UserTep.FromId(context, context.UserId);
                apikey   = user.GetSessionApiKey();
                t2userid = user.TerradueCloudUsername;
            }

            foreach (RemoteResource res in Resources)
            {
                OpenSearchableFactorySettings specsettings = (OpenSearchableFactorySettings)settings.Clone();
                // For Terradue resources, use the API key
                if (res.Location.StartsWith(context.GetConfigValue("catalog-baseurl")) && !string.IsNullOrEmpty(apikey))
                {
                    specsettings.Credentials = new System.Net.NetworkCredential(t2userid, apikey);
                }
                try {
                    IOpenSearchable entity = null;
                    try {
                        entity = OpenSearchFactory.FindOpenSearchable(specsettings, new Uri(res.Location), "application/atom+xml");
                    }catch (Exception e) {
                        if (!res.Location.StartsWith(context.GetConfigValue("catalog-baseurl")))
                        {
                            try {
                                entity = OpenSearchFactory.FindOpenSearchable(specsettings, new Uri(res.Location));
                            } catch (Exception ex) {
                                var feed = new AtomFeed();
                                feed.Id = "Exception";
                                feed.ElementExtensions.Add(
                                    new SyndicationElementExtension("exception", "", new ExceptionMessage {
                                    Message = ex.Message, Source = res.Location, HelpLink = ex.HelpLink
                                })
                                    );
                                entity = new ExceptionOpensearchable(feed);
                            }
                        }
                        else
                        {
                            var feed = new AtomFeed();
                            feed.Id = "Exception";
                            feed.ElementExtensions.Add(
                                new SyndicationElementExtension("exception", "", new ExceptionMessage {
                                Message = e.Message, Source = res.Location, HelpLink = e.HelpLink
                            })
                                );
                            entity = new ExceptionOpensearchable(feed);
                        }
                    }
                    if (entity != null)
                    {
                        osResources.Add(entity);
                    }
                }
                catch (Exception e)
                {
                    context.LogError(this, e.Message);
                }
            }

            return(osResources.ToArray());
        }
Ejemplo n.º 12
0
        public override IOpenSearchable CreateOpenSearchable(IEnumerable <Uri> baseUrls, string queryFormatArg, OpenSearchEngine ose, IEnumerable <NetworkCredential> netCreds, OpenSearchableFactorySettings settings)
        {
            List <IOpenSearchable> entities = new List <IOpenSearchable>();

            IOpenSearchEngineExtension ext;

            if (string.IsNullOrEmpty(queryFormatArg))
            {
                ext = ose.GetExtensionByExtensionName("atom");
            }
            else
            {
                ext = ose.GetExtensionByExtensionName(queryFormatArg);
            }

            for (int i = 0; i < baseUrls.Count(); i++)
            {
                var url = baseUrls.ElementAt(i);

                settings.Credentials = netCreds == null ? null : netCreds.ElementAt(i);

                IOpenSearchable e = null;
                // QC Sentinel1 case
                if (url.Host == "qc.sentinel1.eo.esa.int")
                {
                    log.DebugFormat("QC Sentinel1 source. Trying to get the earthobservation profile");
                    e = new Sentinel1QcOpenSearchable(url, settings.OpenSearchEngine);
                    entities.Add(e);
                    continue;
                }
                // USGS case
                if (url.Host == "earthexplorer.usgs.gov")
                {
                    log.DebugFormat("Usgs source. Trying to get the earthobservation profile");

                    // usgsOpenSearchable
                    e = new Terradue.OpenSearch.Usgs.UsgsOpenSearchable(url, settings);
                    entities.Add(e);
                    continue;
                }
                e = OpenSearchFactory.FindOpenSearchable(settings, url, ext.DiscoveryContentType);
                if (!e.DefaultMimeType.Contains("profile=http://earth.esa.int/eop"))
                {
                    try {
                        e = OpenSearchFactory.FindOpenSearchable(settings, url, "application/atom+xml; profile=http://earth.esa.int/eop/2.1");
                    } catch (InvalidOperationException) {
                        e = OpenSearchFactory.FindOpenSearchable(settings, url, "application/atom+xml");
                    }
                    if (!e.DefaultMimeType.Contains("xml"))
                    {
                        throw new InvalidOperationException("No Url in the OpenSearch Description Document that could fit the EOP data model");
                    }
                }
                // Fedeo case
                if (url.Host == "fedeo.esa.int" && e.DefaultMimeType == "application/atom+xml" && e is Terradue.OpenSearch.GenericOpenSearchable)
                {
                    log.DebugFormat("Fedeo source. Trying to get the earthobservation profile");
                    e = FedeoOpenSearchable.CreateFrom(url, settings.OpenSearchEngine);
                }
                // Cwic case
                if (url.Host == "cwic.wgiss.ceos.org" && e.DefaultMimeType == "application/atom+xml" && e is Terradue.OpenSearch.GenericOpenSearchable)
                {
                    log.DebugFormat("Cwic source. Trying to get the earthobservation profile");
                    e = CwicOpenSearchable.CreateFrom((Terradue.OpenSearch.GenericOpenSearchable)e, settings.OpenSearchEngine);
                }



                entities.Add(e);
            }

            IOpenSearchable entity;

            OpenSearchableFactorySettings settings2 = new OpenSearchableFactorySettings(ose);

            if (entities.Count > 1)
            {
                entity = new MultiGenericOpenSearchable(entities, settings2);
            }
            else
            {
                entity = entities[0];
            }

            return(entity);
        }
Ejemplo n.º 13
0
        public static SandboxOpenSearchable CreateSandboxOpenSearchable(OpenSearchUrl osUrl, OpenSearchableFactorySettings settings)
        {
            var sosi = GetSandboxOpenSearchInformation(osUrl);

            return(new SandboxOpenSearchable(sosi, settings));
        }
Ejemplo n.º 14
0
        public object Get(ThematicAppCurrentUserSearchRequestTep request)
        {
            IfyWebContext context = TepWebContext.GetWebContext(PagePrivileges.EverybodyView);

            context.Open();
            context.LogInfo(this, string.Format("/user/current/apps/search GET"));

            IOpenSearchResultCollection result;
            OpenSearchEngine            ose = MasterCatalogue.OpenSearchEngine;
            var  httpRequest  = HttpContext.Current.Request;
            Type responseType = OpenSearchFactory.ResolveTypeFromRequest(httpRequest.QueryString, httpRequest.Headers, ose);
            List <Terradue.OpenSearch.IOpenSearchable> osentities = new List <Terradue.OpenSearch.IOpenSearchable>();
            var settings = MasterCatalogue.OpenSearchFactorySettings;
            OpenSearchableFactorySettings specsettings = (OpenSearchableFactorySettings)settings.Clone();

            UserTep user = null;

            if (context.UserId != 0)
            {
                user = UserTep.FromId(context, context.UserId);
                if (request.cache)
                {
                    var domain = user.GetPrivateDomain();
                    EntityList <ThematicApplicationCached> appsCached = new EntityList <ThematicApplicationCached>(context);
                    appsCached.SetFilter("DomainId", domain.Id);
                    appsCached.AddSort("LastUpdate", SortDirection.Descending);

                    result = ose.Query(appsCached, Request.QueryString, responseType);
                    OpenSearchFactory.ReplaceOpenSearchDescriptionLinks(appsCached, result);
                }
                else
                {
                    //get user private thematic app
                    var apikey   = user.GetSessionApiKey();
                    var t2userid = user.TerradueCloudUsername;
                    if (!string.IsNullOrEmpty(apikey))
                    {
                        specsettings.Credentials = new System.Net.NetworkCredential(t2userid, apikey);
                    }
                    var app = user.GetPrivateThematicApp();
                    if (app != null)
                    {
                        foreach (var item in app.Items)
                        {
                            if (!string.IsNullOrEmpty(item.Location))
                            {
                                try {
                                    var sgOs = OpenSearchFactory.FindOpenSearchable(specsettings, new OpenSearchUrl(item.Location));
                                    osentities.Add(sgOs);
                                    context.LogDebug(this, string.Format("Apps search -- Add '{0}'", item.Location));
                                } catch (Exception e) {
                                    context.LogError(this, e.Message, e);
                                }
                            }
                        }
                    }
                    MultiGenericOpenSearchable multiOSE = new MultiGenericOpenSearchable(osentities, specsettings);
                    result = ose.Query(multiOSE, Request.QueryString, responseType);
                }
            }
            else
            {
                result = ose.Query(new MultiGenericOpenSearchable(osentities, specsettings), Request.QueryString, responseType);
            }

            string sresult = result.SerializeToString();

            //replace usernames in apps
            if (user != null)
            {
                try {
                    sresult = sresult.Replace("${USERNAME}", user.Username);
                    sresult = sresult.Replace("${T2USERNAME}", user.TerradueCloudUsername);
                    sresult = sresult.Replace("${T2APIKEY}", user.GetSessionApiKey());
                } catch (Exception e) {
                    context.LogError(this, e.Message, e);
                }
            }

            context.Close();

            return(new HttpResult(sresult, result.ContentType));
        }
Ejemplo n.º 15
0
        public override IOpenSearchable CreateOpenSearchable(IEnumerable <Uri> baseUrls, string queryFormatArg, OpenSearchEngine ose, IEnumerable <NetworkCredential> netCreds, OpenSearchableFactorySettings settings)
        {
            if (netCreds == null || netCreds.Count() == 0)
            {
                throw new InvalidOperationException("Missing credentials for access Scihub service");
            }
            settings.Credentials = netCreds.First();
            DataHubOpenSearchable entity = new DataHubOpenSearchable(baseUrls.First(), settings);

            if (queryFormatArg == "eop")
            {
                entity.DefaultMimeType = "application/atom+xml; profile=http://earth.esa.int/eop/2.1";
            }

            return(entity);
        }
        private void PrintOpenSearchDescription(string arg)
        {
            Match  argMatch  = argRegex.Match(arg);
            string type      = argMatch.Groups[1].Value;
            string paramName = (argMatch.Groups[2].Success ? argMatch.Groups[3].Value : null);

            bool typeFound  = false;
            bool paramFound = false;

            dataModelParameters = PrepareDataModelParameters();
            dataModel           = DataModel.CreateFromArgs(queryModelArg, dataModelParameters);
            OpenSearchableFactorySettings settings = new OpenSearchableFactorySettings(ose);

            settings.MaxRetries = retryAttempts;
            List <Uri>            baseUrls = InitializeUrl();
            IOpenSearchable       entity   = dataModel.CreateOpenSearchable(baseUrls, queryFormatArg, ose, netCreds, settings);
            OpenSearchDescription osd      = entity.GetOpenSearchDescription();

            using (Stream outputStream = InitializeOutputStream()) {
                using (StreamWriter sw = new StreamWriter(outputStream)) {
                    if (type == "types")
                    {
                        sw.WriteLine("Formats");
                        sw.WriteLine("{0,-10}{1,-10}{2,-60}", "Format", "Supported", "MIME type");
                        sw.WriteLine("{0,-10}{1,-10}{2,-60}", "======", "=========", "=========");

                        foreach (OpenSearchDescriptionUrl url in osd.Url)
                        {
                            if (url.Relation == "self")
                            {
                                continue;
                            }

                            bool isFormat = false;
                            foreach (IOpenSearchEngineExtension osee in ose.Extensions.Values)
                            {
                                if (osee.DiscoveryContentType == url.Type)
                                {
                                    isFormat = true;
                                    break;
                                }
                            }
                            string urlShortType = GetUrlShortType(url.Type);

                            sw.WriteLine("{0,-14}{1,-6}{2,-40}", urlShortType == url.Type ? "-" : urlShortType, isFormat ? "*" : " ", url.Type);
                        }
                    }
                    else
                    {
                        foreach (OpenSearchDescriptionUrl url in osd.Url)
                        {
                            if (url.Relation == "self")
                            {
                                continue;
                            }

                            string urlShortType = GetUrlShortType(url.Type);
                            if (type != "full" && type != urlShortType)
                            {
                                continue;
                            }

                            typeFound = true;

                            bool isFormat = false;
                            foreach (IOpenSearchEngineExtension osee in ose.Extensions.Values)
                            {
                                if (osee.DiscoveryContentType == url.Type)
                                {
                                    isFormat = true;
                                    break;
                                }
                            }
                            sw.Write("Search URL type: {0}", url.Type);
                            if (isFormat)
                            {
                                sw.Write(" (format: {0})", urlShortType);
                            }
                            sw.WriteLine();

                            int qmPos = url.Template.IndexOf('?');
                            if (qmPos == -1)
                            {
                                continue;
                            }

                            string queryString = url.Template.Substring(qmPos + 1);

                            if (paramName == null)
                            {
                                sw.WriteLine("Parameters");
                                sw.WriteLine("{0,-22}{1,-40} M O R P S (mandatory, options, range, pattern, step)", "Name", "Description/title");
                                sw.WriteLine("{0,-22}{1,-40} ---------", "----", "-----------------");
                            }

                            MatchCollection paramMatches = paramRegex.Matches(queryString);
                            foreach (Match paramMatch in paramMatches)
                            {
                                string name       = paramMatch.Groups[1].Value;
                                string identifier = paramMatch.Groups[2].Value;
                                bool   mandatory  = !paramMatch.Groups[3].Success;
                                string title      = GetParameterDescription(identifier);
                                bool   options    = false;
                                bool   range      = false;
                                bool   pattern    = false;
                                bool   step       = false;

                                OpenSearchDescriptionUrlParameter param = null;
                                if (url.Parameters != null)
                                {
                                    foreach (OpenSearchDescriptionUrlParameter p in url.Parameters)
                                    {
                                        if (p.Name == name)
                                        {
                                            param = p;
                                        }
                                    }
                                }

                                if (param != null)
                                {
                                    title   = param.Title;
                                    options = param.Options != null && param.Options.Count != 0;
                                    range   = param.Maximum != null || param.MinInclusive != null || param.MaxInclusive != null || param.MinExclusive != null || param.MaxExclusive != null;
                                    pattern = param.Pattern != null;
                                    step    = param.Step != null;
                                }

                                if (paramName == null)
                                {
                                    if (title != null && title.Length > 40)
                                    {
                                        title = String.Format("{0}...", title.Substring(0, 37));
                                    }
                                    sw.WriteLine("- {0,-20}{1,-40} {2,-2}{3,-2}{4,-2}{5,-2}{6,-2}",
                                                 name,
                                                 title,
                                                 mandatory ? "M" : "-",
                                                 options ? "O" : "-",
                                                 range ? "R" : "-",
                                                 pattern ? "P" : "-",
                                                 step ? "S" : "-"
                                                 );
                                }

                                if (type != "full" && paramName != name)
                                {
                                    continue;
                                }

                                paramFound = true;
                                if (paramName != null)
                                {
                                    sw.WriteLine("- Parameter: {0}", name);
                                    sw.WriteLine("    Description/title: {0}", title);
                                }
                                if (options)
                                {
                                    sw.WriteLine("    Options:");
                                    sw.WriteLine("    {0,-22} {1,-40}", "Value", "Label/description");
                                    sw.WriteLine("    {0,-22} {1,-40}", "-----", "-----------------");
                                    foreach (OpenSearchDescriptionUrlParameterOption o in param.Options)
                                    {
                                        sw.WriteLine("    - {0,-20} {1,-40}", o.Value, o.Label);
                                    }
                                }
                                if (range)
                                {
                                    string min = (param.MinExclusive != null ? param.MinExclusive : param.MinInclusive != null ? param.MinInclusive : param.Minimum);
                                    string max = (param.MaxExclusive != null ? param.MaxExclusive : param.MaxInclusive != null ? param.MaxInclusive : param.Maximum);
                                    sw.WriteLine("    Range: {0} {2} value {3} {1}", min, max, param.MinExclusive == null ? "<=" : "<", param.MaxExclusive == null ? "<=" : "<");
                                }
                                if (pattern)
                                {
                                    sw.WriteLine("    Pattern: {0}", param.Pattern);
                                }
                                if (step)
                                {
                                    sw.WriteLine("    Step: {0}", param.Step);
                                }
                            }
                            sw.WriteLine();


                            //sw.WriteLine("URL {0} {1} {2}", url.Type, url.Relation, url.Template);
                        }
                    }
                    sw.Close();
                }
            }

            if (!typeFound && type != "types" && type != "full")
            {
                log.Error("URL Type not found");
            }
            else if (!paramFound && paramName != null)
            {
                log.Error("Parameter not found");
            }
        }
Ejemplo n.º 17
0
 public UrlBasedOpenSearchableFactory(IfyContext context, OpenSearchableFactorySettings settings)
 {
     this.context = context;
     Settings     = (OpenSearchableFactorySettings)settings.Clone();
 }
Ejemplo n.º 18
0
 public IOpenSearchable CreateOpenSearchable(IEnumerable <Uri> baseUrls, string queryFormatArg, OpenSearchEngine ose, IEnumerable <NetworkCredential> netCreds, OpenSearchableFactorySettings settings)
 {
     return(modelExtension.CreateOpenSearchable(baseUrls, queryFormatArg, ose, netCreds, settings));
 }
Ejemplo n.º 19
0
        public object Get(WpsJobProductDescriptionRequestTep request)
        {
            var        context = TepWebContext.GetWebContext(PagePrivileges.EverybodyView);
            HttpResult result  = null;

            try {
                context.Open();
                context.LogInfo(this, string.Format("/job/wps/{0}/products/description GET", request.JobId));

                WpsJob wpsjob = WpsJob.FromIdentifier(context, request.JobId);

                OpenSearchEngine ose         = MasterCatalogue.OpenSearchEngine;
                HttpRequest      httpRequest = HttpContext.Current.Request;

                OpenSearchDescription osd;

                if (CatalogueFactory.IsCatalogUrl(new Uri(wpsjob.StatusLocation)))
                {
                    var settings = MasterCatalogue.OpenSearchFactorySettings;
                    OpenSearchableFactorySettings specsettings = (OpenSearchableFactorySettings)settings.Clone();

                    //get credentials from current user
                    if (context.UserId != 0)
                    {
                        var user     = UserTep.FromId(context, context.UserId);
                        var apikey   = user.GetSessionApiKey();
                        var t2userid = user.TerradueCloudUsername;
                        if (!string.IsNullOrEmpty(apikey))
                        {
                            specsettings.Credentials = new System.Net.NetworkCredential(t2userid, apikey);
                        }
                    }
                    GenericOpenSearchable urlToShare = new GenericOpenSearchable(new OpenSearchUrl(wpsjob.StatusLocation), specsettings);
                    osd = urlToShare.GetOpenSearchDescription();
                    var oldUri = new UriBuilder(osd.DefaultUrl.Template);
                    var newUri = new UriBuilder(context.BaseUrl + "/job/wps/" + wpsjob.Identifier + "/products/search");
                    newUri.Query            = oldUri.Query.TrimStart("?".ToCharArray());
                    osd.DefaultUrl.Template = HttpUtility.UrlDecode(newUri.Uri.AbsoluteUri);
                    foreach (var url in osd.Url)
                    {
                        oldUri       = new UriBuilder(url.Template);
                        newUri       = new UriBuilder(context.BaseUrl + "/job/wps/" + wpsjob.Identifier + "/products/search");
                        newUri.Query = oldUri.Query.TrimStart("?".ToCharArray());
                        url.Template = HttpUtility.UrlDecode(newUri.Uri.AbsoluteUri);
                    }
                }
                else
                {
                    WpsJobProductOpenSearchable wpsjobProductOs = new WpsJobProductOpenSearchable(wpsjob, context);
                    osd = wpsjobProductOs.GetProxyOpenSearchDescription();
                }

                result = new HttpResult(osd, "application/opensearchdescription+xml");

                context.Close();
            } catch (Exception e) {
                context.LogError(this, e.Message, e);
                context.Close();
                throw e;
            }
            return(result);
        }
        private bool ProcessAlternative(List <Uri> uri, List <NetworkCredential> credential, ref bool isAtomFeedPartial, ref bool canceled)
        {
            // Find OpenSearch Entity
            IOpenSearchable entity = null;
            int             retry  = retryAttempts;
            int             index  = 1;

            while (retry >= 0)
            {
                // Perform the query
                try {
                    OpenSearchableFactorySettings settings = new OpenSearchableFactorySettings(ose);
                    settings.MaxRetries = retryAttempts;
                    entity = dataModel.CreateOpenSearchable(uri, queryFormatArg, ose, credential, settings);
                    index  = entity.GetOpenSearchDescription().DefaultUrl.IndexOffset;
                    log.Debug("IndexOffset : " + index);
                    break;
                } catch (Exception e) {
                    log.Warn(e.Message);
                    if (retry == 0)
                    {
                        throw;
                    }
                    retry--;
                    searchCache.ClearCache(".*", DateTime.Now);
                }
            }



            NameValueCollection parameters = PrepareQueryParameters(entity);
            string startIndex = parameters.Get("startIndex");

            if (startIndex != null)
            {
                index = int.Parse(startIndex);
            }

            NameValueCollection parametersNvc;

            IOpenSearchResultCollection osr = null;
            long totalCount = 0;

            log.DebugFormat("{0} entries requested", totalResults);

            if (outputStarted)
            {
                return(false);
            }

            while (totalResults > 0)
            {
                bool   closeOutputStream = true;
                Stream outputStream      = null;
                log.DebugFormat("startIndex: {0}", index);
                parametersNvc = ResolveParameters(parameters, entity);

                // Initialize the output stream
                if (outputStream == null)
                {
                    outputStream = InitializeOutputStream(index);
                }
                else
                {
                    closeOutputStream = false;
                }

                retry = retryAttempts;
                while (retry >= 0)
                {
                    if (canceled)
                    {
                        return(false);
                    }
                    // Perform the query
                    log.Debug("Launching query...");
                    try {
                        osr = QueryOpenSearch(ose, entity, parametersNvc);
                        isAtomFeedPartial = false;
                        break;
                    } catch (AggregateException ae) {
                        if (retry == 0)
                        {
                            throw ae;
                        }
                        foreach (Exception e in ae.InnerExceptions)
                        {
                            log.Warn("Exception " + e.Message);
                        }
                        retry--;
                        searchCache.ClearCache(".*", DateTime.Now);
                    } catch (KeyNotFoundException e) {
                        log.Error("Query not found : " + e.Message);
                        throw e;
                    } catch (PartialAtomException e) {
                        if (retry == 0)
                        {
                            osr = e.PartialOpenSearchResultCollection;
                            isAtomFeedPartial = true;
                        }
                        retry--;
                        searchCache.ClearCache(".*", DateTime.Now);
                    } catch (ThreadAbortException) {
                    } catch (Exception e) {
                        if (retry == 0)
                        {
                            throw;
                        }

                        log.Warn("Exception " + e.Message);
                        retry--;
                        searchCache.ClearCache(".*", DateTime.Now);
                    }
                }

                if (canceled)
                {
                    return(false);
                }

                int count = CountResults(osr);
                if (totalCount == 0 && count == 0)
                {
                    LogInfo("No entries found");
                    DeleteFileStream(outputStream);
                    return(false);
                }

                if (canceled)
                {
                    return(false);
                }

                if (osr.Count > 0)
                {
                    // Transform the result
                    OutputResult(osr, outputStream);
                }
                else
                {
                    closeOutputStream = false;
                    DeleteFileStream(outputStream);
                }


                outputStarted = true;


                log.Debug(count + " entries found");
                if (count == 0)
                {
                    break;
                }
                int expectedCount = count;
                if (!string.IsNullOrEmpty(parameters["count"]) && int.TryParse(parameters["count"], out expectedCount) && count < expectedCount)
                {
                    break;
                }

                totalResults -= count;
                totalCount   += count;
                log.Debug(count + " entries found on " + totalResults + " requested");
                int paramCount;
                if (Int32.TryParse(parameters.Get("count"), out paramCount) && totalResults < paramCount)
                {
                    parameters.Set("count", "" + totalResults);
                }
                index += count;

                parameters.Set("startIndex", "" + index);

                if (closeOutputStream)
                {
                    outputStream.Close();
                }
            }

            return(totalCount > 0);  // success
        }