/// <summary> /// Gets the wps process offering from DB or from cloud /// </summary> /// <returns>The wps process offering.</returns> /// <param name="identifier">Identifier.</param> public static WpsProcessOfferingTep GetWpsProcessOffering(IfyContext context, string identifier) { WpsProcessOfferingTep wps = null; try { //wps is stored in DB wps = WpsProcessOfferingTep.FromIdentifier(context, identifier); } catch (UnauthorizedAccessException e) { throw e; } catch (Exception) { //wps is not stored in DB string[] identifierParams = identifier.Split("-".ToCharArray()); if (identifierParams.Length == 3) { switch (identifierParams[0]) { //wps is stored in OpenNebula Cloud Provider case "one": wps = new CloudWpsFactory(context).CreateWpsProcessOfferingForOne(identifierParams[1], identifierParams[2]); break; default: break; } } } if (wps == null) { throw new Exception("Unknown identifier"); } return(wps); }
//**************************************************************************************** // GetCapabilities //**************************************************************************************** public WPSCapabilitiesType WpsGetCapabilities() { context.LogDebug(this, string.Format("WPS GetCapabilities requested")); //create GetCapabilities response WPSCapabilitiesType getCapabilities = CreateGetCapabilititesTemplate(context.BaseUrl + "/wps/WebProcessingService"); //load providers from DB EntityList <WpsProvider> wpsList = new EntityList <WpsProvider>(context); wpsList.Load(); //for each provider, if proxied, get processOfferings and add it in the response foreach (WpsProvider process in wpsList) { if (process.Proxy) { //get processings from db List <ProcessBriefType> processOfferings = process.GetProcessBriefTypes(); foreach (ProcessBriefType processOff in processOfferings) { try{ getCapabilities.ProcessOfferings.Process.Add(processOff); context.LogDebug(this, string.Format("WPS GetCapabilities - " + processOff.Title.Value)); }catch (Exception) {} } } } //load providers from Cloud Provider CloudWpsFactory wpsFinder = new CloudWpsFactory(context); try{ foreach (WpsProvider prov in wpsFinder.GetWPSFromVMs()) { try{ WPSCapabilitiesType capa = prov.GetWPSCapabilities(); foreach (var oneProcess in capa.ProcessOfferings.Process) { oneProcess.Identifier.Value = prov.Identifier + "-" + oneProcess.Identifier.Value; getCapabilities.ProcessOfferings.Process.Add(oneProcess); context.LogDebug(this, string.Format("WPS GetCapabilities - " + oneProcess.Title.Value)); } }catch (Exception) {} } }catch (Exception) {} return(getCapabilities); }
private static List <WpsServiceOverview> GetWpsServiceOverview(IfyContext context, OwcOffering offering, string appUid, string appTitle, string appIcon) { List <WpsServiceOverview> wpsOverviews = new List <WpsServiceOverview>(); if (offering != null) { if (offering.Operations != null) { foreach (var ops in offering.Operations) { if (ops.Code == "ListProcess") { var href = ops.Href; //replace usernames in apps try { var user = UserTep.FromId(context, context.UserId); href = href.Replace("${USERNAME}", user.Username); href = href.Replace("${T2USERNAME}", user.TerradueCloudUsername); href = href.Replace("${T2APIKEY}", user.GetSessionApiKey()); } catch (Exception e) { context.LogError(context, e.Message); } var uri = new Uri(href.Replace("file://", context.BaseUrl)); var nvc = HttpUtility.ParseQueryString(uri.Query); nvc.Set("count", "100"); Terradue.OpenSearch.Engine.OpenSearchEngine ose = MasterCatalogue.OpenSearchEngine; var responseType = ose.GetExtensionByExtensionName("atom").GetTransformType(); EntityList <WpsProcessOffering> wpsProcesses = new EntityList <WpsProcessOffering>(context); wpsProcesses.SetFilter("Available", "true"); wpsProcesses.OpenSearchEngine = ose; wpsProcesses.Identifier = string.Format("servicewps-{0}", context.Username); CloudWpsFactory wpsOneProcesses = new CloudWpsFactory(context); wpsOneProcesses.OpenSearchEngine = ose; wpsProcesses.Identifier = "service/wps"; var entities = new List <IOpenSearchable> { wpsProcesses, wpsOneProcesses }; var settings = MasterCatalogue.OpenSearchFactorySettings; MultiGenericOpenSearchable multiOSE = new MultiGenericOpenSearchable(entities, settings); IOpenSearchResultCollection osr = ose.Query(multiOSE, nvc, responseType); OpenSearchFactory.ReplaceOpenSearchDescriptionLinks(wpsProcesses, osr); foreach (var itemWps in osr.Items) { string uid = ""; var identifiers = itemWps.ElementExtensions.ReadElementExtensions <string>("identifier", "http://purl.org/dc/elements/1.1/"); if (identifiers.Count > 0) { uid = identifiers[0]; } string description = ""; if (itemWps.Content is TextSyndicationContent) { var content = itemWps.Content as TextSyndicationContent; description = content.Text; } string version = ""; var versions = itemWps.ElementExtensions.ReadElementExtensions <string>("version", "https://www.terradue.com/"); if (versions.Count > 0) { version = versions[0]; } string publisher = ""; var publishers = itemWps.ElementExtensions.ReadElementExtensions <string>("publisher", "http://purl.org/dc/elements/1.1/"); if (publishers.Count > 0) { publisher = publishers[0]; } var serviceUrl = new UriBuilder(context.GetConfigValue("BaseUrl")); serviceUrl.Path = "/t2api/service/wps/search"; serviceUrl.Query = "id=" + uid; var url = new UriBuilder(context.GetConfigValue("BaseUrl")); url.Path = "t2api/share"; url.Query = "url=" + HttpUtility.UrlEncode(serviceUrl.Uri.AbsoluteUri) + "&id=" + appUid; var icon = itemWps.Links.FirstOrDefault(l => l.RelationshipType == "icon"); //entry.Links.Add(new SyndicationLink(new Uri(this.IconUrl), "icon", null, null, 0)); wpsOverviews.Add(new WpsServiceOverview { Identifier = uid, App = new AppOverview { Icon = appIcon ?? "", Title = appTitle, Uid = appUid }, Name = itemWps.Title != null ? itemWps.Title.Text : uid, Description = description, Version = version, Provider = publisher, Url = url.Uri.AbsoluteUri, Icon = icon != null ? icon.Uri.AbsoluteUri : "" }); } } } } } return(wpsOverviews); }