private IDictionary <object, object> Replace(IDictionary <object, object> dict) { var result = new Dictionary <object, object>(); foreach (var kvp in dict) { result.Add(kvp.Key, DataFeedItem.GetParamValue(kvp.Value.ToString())); } return(result); }
public ActionResult Ajax(FeedModel model) { model.Provider = Provider; if (model.Command == "run-script") { string query = string.Empty; string error = string.Empty; string buffer = string.Empty; string html = string.Empty; Hashtable data = new Hashtable(); if (model.FeedType == DataFeedType.Python) { query = model.Query; } else { query = string.Format("data(sqlquery(\"{0}\"))", model.Query.Replace("\n", " ").Replace("\"", @"\""").Trim()); } var dict = new Dictionary <object, object>(); DataFeedItem.ApplyDefaultParameters(model.DefaultParameters, dict); var parameters = ScriptParameters.Create(dict); var result = _engine.Run(query, parameters); if (result.Exception != null) { error = result.Exception.Message; } buffer = result.Buffer.ToString(); html = result.Html.ToString(); if (result.DataSet.Count > 0) { foreach (KeyValuePair <string, ScriptData> kvp in result.DataSet) { data.Add(kvp.Key, new { Headers = kvp.Value.GetHeaders().Select(x => x.DisplayText).ToArray(), Items = kvp.Value.GetItems() }); } } return(Json(new { Success = true, Message = "", Error = error, Buffer = buffer, Html = html, Data = data, Parameters = parameters.ToString() })); } else { return(Json(new { Success = false, Message = "Invalid command" })); } }
public ActionResult Index(string alias, string format, string key, string callback = null) { var model = new FeedModel { Provider = Provider, CurrentUser = CurrentUser, Alias = alias, Format = format, Key = key, Callback = callback }; if (string.IsNullOrEmpty(model.Alias)) { return(RedirectToAction("List")); } ContentResult result = new ContentResult(); var parameters = new Dictionary <object, object>(); Merge(parameters, Request.QueryString); var feedResult = ServiceProvider.Current.Data.Feed.GetDataFeedResult(alias, key, parameters); try { var util = new DataFeedUtility(ServiceProvider.Current); if (feedResult == null) { throw new Exception("Could not find feed: " + model.Alias); } else if (feedResult.Deleted) { throw new Exception("Could not find feed: " + model.Alias); } else if (!feedResult.Active && !DataFeedItem.CanViewInactiveFeeds(CurrentUser)) { throw new Exception("Could not find feed: " + model.Alias); } else { switch (model.Format) { case "xml": result.Content = util.XmlFeedContent(feedResult); result.ContentType = "text/xml"; break; case "rss": result.Content = util.RssFeedContent(feedResult, model.Key, Request.Url, Request.Path); result.ContentType = "application/rss+xml"; break; case "html": return(View("Feed", model)); case "table": result.Content = util.HtmlFeedContent(feedResult, model.Format); result.ContentType = "text/html"; break; case "json": case "jsonp": case "datatables": result.Content = util.JsonFeedContent(feedResult, model.Key, model.Format); if (model.Format == "jsonp" && !string.IsNullOrEmpty(model.Callback)) { result.Content = model.Callback + "(" + result.Content + ")"; } result.ContentType = "application/json"; break; case "ical": result.Content = util.IcalFeedContent(feedResult, model.Key, Request.ServerVariables["LOCAL_ADDR"]); result.ContentType = "text/calendar"; Response.Charset = string.Empty; Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}-{1}.ics", feedResult.Alias, DateTime.Now.ToString("yyyyMMddHHmmss"))); break; default: //csv result.Content = util.CsvFeedContent(feedResult, model.Key); result.ContentType = "text/csv"; Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}-{1}.csv", feedResult.Alias, DateTime.Now.ToString("yyyyMMddHHmmss"))); break; } } } catch (Exception ex) { //model.App = "Content"; model.ErrorMessage = ex.Message; switch (model.Format) { case "xml": result.Content = string.Format("<data name=\"LNF Feed Error\"><table name=\"default\"><row><Error>{0}</Error></row></table></data>", ex.Message); result.ContentType = "text/xml"; break; case "rss": result.Content = string.Format("<?xml version=\"1.0\" encoding=\"UTF-8\"?><rss version=\"2.0\"><channel><title>LNF Feed Error</title><item><title>Error</title><description>{0}</description></item></channel></rss>", ex.Message); result.ContentType = "application/rss+xml"; break; case "json": case "jsonp": case "datatables": result.Content = "{\"Error\":\"" + ex.Message + "\"}"; if (model.Format == "jsonp" && !string.IsNullOrEmpty(model.Callback)) { result.Content = model.Callback + "(" + result.Content + ")"; } result.ContentType = "application/json"; break; case "ical": result.Content = string.Format("Error: {0}", ex.Message); result.ContentType = "text/plain"; break; case "csv": result.Content = "Error" + Environment.NewLine + ex.Message; result.ContentType = "text/csv"; Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}-{1}.csv", "lnf-feed-error", DateTime.Now.ToString("yyyyMMddHHmmss"))); break; default: return(View("Launcher", model)); } } return(result); }
/// <summary> /// DataFeedItemThingOrText as a DataFeedItem. /// </summary> /// <param name="dataFeedItem">DataFeedItemThingOrText as a DataFeedItem.</param> public DataFeedItemThingOrText(DataFeedItem dataFeedItem) : base(dataFeedItem.Name.AsText) { AsDataFeedItem = dataFeedItem; }
/// <summary> /// Gets a dictionary that contains default parameters (if any) merged with the given parameters, overwritting defaults. /// </summary> public virtual void ApplyDefaultParameters(IDictionary <object, object> parameters) => DataFeedItem.ApplyDefaultParameters(DefaultParameters, parameters);