/// <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);
        }
Exemple #2
0
        //****************************************************************************************
        // 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);
        }