Ejemplo n.º 1
0
        /// <summary>
        /// Output compact (id's only for reference data) POI list
        /// </summary>
        /// <param name="context"></param>
        /// <param name="filter"></param>
        private void OutputCompactPOIList(HttpContext context, APIRequestSettings filter)
        {
            //get list of charge points as compact POISearchResult List for output:
            List <OCM.API.Common.Model.ChargePoint> dataList = new POIManager().GetChargePoints(filter);
            int numResults = dataList.Count;

            List <POISearchResult> poiList = new List <POISearchResult>();

            foreach (var c in dataList)
            {
                var poi = new POISearchResult
                {
                    ID           = c.ID,
                    Title        = c.AddressInfo.Title,
                    Address      = c.AddressInfo.AddressLine1,
                    Distance     = c.AddressInfo.Distance,
                    Latitude     = (double)c.AddressInfo.Latitude,
                    Longitude    = (double)c.AddressInfo.Longitude,
                    Postcode     = c.AddressInfo.Postcode,
                    UsageTypeID  = c.UsageType != null ? c.UsageType.ID : 0,
                    StatusTypeID = c.StatusType != null ? c.StatusType.ID : 0
                };
                poiList.Add(poi);
            }
            var    o           = new JSONOutputProvider();
            string description = "Compact POI List: id=ID, t= Title, u= UsageTypeID, s= StatusTypeID, a=Address, p=Postcode, lt=Latitude, lg=Longitude, d= Distance";

            o.PerformSerialisationV2(context.Response.OutputStream, new { status = "OK", description = description, count = poiList.Count, results = poiList }, filter.Callback);
        }
Ejemplo n.º 2
0
        public void ProcessRequest(HttpContext context)
        {
            OutputProviders.ImageOutputProvider outputProvider = new OutputProviders.ImageOutputProvider();
            APIRequestSettings settings = new APIRequestSettings();

            List <OCM.API.Common.Model.ChargePoint> dataList = new List <Common.Model.ChargePoint>();

            context.Response.ContentType = outputProvider.ContentType;
            outputProvider.GetOutput(context.Response.OutputStream, dataList, settings);
        }
Ejemplo n.º 3
0
 public static List <OCM.API.Common.Model.ChargePoint> GetPOIList(APIRequestSettings filter)
 {
     try
     {
         return(new CacheProviderMongoDB().GetPOIList(filter));
     }
     catch (Exception)
     {
         return(null);
     }
 }
Ejemplo n.º 4
0
        public void ProcessRequest(HttpContext context)
        {
            if (dataSummaryManager == null)
            {
                dataSummaryManager = new DataSummaryManager();
            }

            APIRequestSettings filterSettings = new APIRequestSettings();

            filterSettings.ParseParameters(filterSettings, context);

            string action = "totals_per_country";

            if (!String.IsNullOrEmpty(context.Request["action"]))
            {
                action = context.Request["action"].ToString();
            }

            if (action == "totals_per_country")
            {
                context.Response.ContentType = "application/javascript";
                context.Response.Write(dataSummaryManager.GetTotalsPerCountrySummary(true, "ocm_getdatasummary", filterSettings));
                context.Response.Flush();
            }

            if (action == "full_summary")
            {
                // Output JSON summary of:
                // - Current totals per country
                // - Total added (per country? based on date range, location/distance filter?)
                // - Total modified
                // - User Comments Count

                // - per month values, current month first? default last 12 months
            }

            if (action == "activity_summary")
            {
                // Based on date range, location and distance:
                // - list of recent comments, checkins, id & title etc of items added & modified
                var o = new JSONOutputProvider();

                context.Response.ContentType = o.ContentType;
                var summary = dataSummaryManager.GetActivitySummary(filterSettings);
                o.PerformSerialisationV2(context.Response.OutputStream, summary, filterSettings.Callback);

                context.Response.Flush();
            }
        }
Ejemplo n.º 5
0
        public POIRecentActivity GetActivitySummary(APIRequestSettings filterSettings)
        {
            //default to last month
            DateTime dateFrom = DateTime.UtcNow.AddMonths(-1);

            if (filterSettings != null)
            {
                if (filterSettings.ChangesFromDate != null)
                {
                    dateFrom = filterSettings.ChangesFromDate.Value;
                }
                else
                {
                    filterSettings.ChangesFromDate = dateFrom;
                }
            }

            //populate recently added comments
            var recentComments = from c in DataModel.UserComments
                                 where c.DateCreated >= dateFrom
                                 select c;

            var summary = new POIRecentActivity();

            summary.RecentComments = new List <UserComment>();
            foreach (var c in recentComments.OrderByDescending(c => c.DateCreated).Take(10).ToList())
            {
                summary.RecentComments.Add(Model.Extensions.UserComment.FromDataModel(c, true));
            }

            //populate recently modified charge points TODO: differentiate between updated since and created since?
            var poiManager = new POIManager();

            var allRecentPOIChanges = poiManager.GetChargePoints(filterSettings);

            summary.POIRecentlyAdded   = allRecentPOIChanges.Where(p => p.DateCreated >= dateFrom).OrderByDescending(p => p.DateCreated).Take(10).ToList();
            summary.POIRecentlyUpdated = allRecentPOIChanges.Where(p => p.DateLastStatusUpdate >= dateFrom && p.DateCreated != p.DateLastStatusUpdate).OrderByDescending(p => p.DateLastStatusUpdate).Take(10).ToList();

            var recentMedia = DataModel.MediaItems.Where(m => m.DateCreated > dateFrom && m.IsEnabled == true).OrderByDescending(m => m.DateCreated).Take(10).ToList();

            summary.RecentMedia = new List <MediaItem>();
            foreach (var mediaItem in recentMedia.OrderByDescending(m => m.DateCreated))
            {
                summary.RecentMedia.Add(Model.Extensions.MediaItem.FromDataModel(mediaItem));
            }

            return(summary);
        }
Ejemplo n.º 6
0
        private void OutputGeocodingResult(IOutputProvider outputProvider, HttpContext context, APIRequestSettings filter)
        {
            GeocodingResult result = null;

            //get or get and cache result
            if (HttpContext.Current.Cache["Geocoding_" + filter.HashKey] != null && filter.EnableCaching)
            {
                result = (GeocodingResult)HttpContext.Current.Cache["Geocoding_" + filter.HashKey];
            }
            else
            {
                var geocoder = new GeocodingHelper();
                geocoder.IncludeExtendedData = true;

                result = geocoder.GeolocateAddressInfo_OSM(filter.Address);

                HttpContext.Current.Cache.Add("Geocoding_" + filter.HashKey, result, null, Cache.NoAbsoluteExpiration, new TimeSpan(1, 0, 0), CacheItemPriority.Normal, null);
            }

            //send API response
            if (filter.IsEnvelopedResponse)
            {
                var responseEnvelope = new APIResponseEnvelope();
                responseEnvelope.Data = result;
                outputProvider.GetOutput(context.Response.OutputStream, responseEnvelope, filter);
            }
            else
            {
                outputProvider.GetOutput(context.Response.OutputStream, result, filter);
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Output Core Reference Data (lookup lists, default objects)
        /// </summary>
        /// <param name="outputProvider"></param>
        /// <param name="context"></param>
        /// <param name="filter"></param>
        private void OutputCoreReferenceData(IOutputProvider outputProvider, HttpContext context, APIRequestSettings filter)
        {
            //get core reference data
            var refDataManager     = new ReferenceDataManager();
            CoreReferenceData data = null;

            //cache result
            if (HttpContext.Current.Cache["CoreRefData"] != null && filter.EnableCaching)
            {
                data = (CoreReferenceData)HttpContext.Current.Cache["CoreRefData"];
            }
            else
            {
                data = refDataManager.GetCoreReferenceData();

                HttpContext.Current.Cache.Add("CoreRefData", data, null, Cache.NoAbsoluteExpiration, new TimeSpan(1, 0, 0), CacheItemPriority.Normal, null);
            }

            //populate non-cached fragments (user profile)
            data.UserProfile = new InputProviderBase().GetUserFromAPICall(context);

            //send response
            outputProvider.GetOutput(context.Response.OutputStream, data, filter);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Output standard POI List results
        /// </summary>
        /// <param name="outputProvider"></param>
        /// <param name="context"></param>
        /// <param name="filter"></param>
        private void OutputPOIList(IOutputProvider outputProvider, HttpContext context, APIRequestSettings filter)
        {
            List <OCM.API.Common.Model.ChargePoint> dataList = null;

            //get list of charge points for output:
            dataList = new POIManager().GetChargePoints(filter);

            int numResults = dataList.Count;

            //send response
            outputProvider.GetOutput(context.Response.OutputStream, dataList, filter);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Handle output from API
        /// </summary>
        /// <param name="context"></param>
        private async void PerformOutput(HttpContext context)
        {
            HttpContext.Current.Server.ScriptTimeout = 120; //max script execution time is 2 minutes

            System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
            stopwatch.Start();

            //decide correct reponse type
            IOutputProvider outputProvider = null;
            var             filter         = new APIRequestSettings();

            //set defaults
            string outputType = "xml";

            filter.DistanceUnit  = DistanceUnit.Miles;
            filter.MaxResults    = 100;
            filter.EnableCaching = true;

            filter.ParseParameters(context);

            //override ?v=2 etc if called via /api/v2/ or /api/v1
            if (APIBehaviourVersion > 0)
            {
                filter.APIVersion = APIBehaviourVersion;
            }
            if (APIBehaviourVersion >= 2)
            {
                filter.Action = DefaultAction;
            }

            if (context.Request.Url.Host.ToLower().StartsWith("api") && filter.APIVersion == null)
            {
                //API version is mandatory for api V2 onwards via api.openchargemap.* hostname
                OutputBadRequestMessage(context, "mandatory API Version not specified in request");
                return;
            }

            if (!String.IsNullOrEmpty(context.Request["output"]))
            {
                outputType = ParseString(context.Request["output"]);
            }
            else
            {
                //new default after API V2 is json instead of XML
                if (filter.APIVersion >= 2)
                {
                    outputType = "json";
                }
            }

            //change defaults and override settings for deprecated api features
            if (filter.APIVersion >= 2)
            {
                //the following output types are deprecated and will default as JSON
                if (outputType == "carwings" || outputType == "rss")
                {
                    OutputBadRequestMessage(context, "specified output type not supported in this API version");
                    return;
                }
            }

            //determine output provider
            switch (outputType)
            {
            case "xml":
                outputProvider = new XMLOutputProvider();
                break;

            case "carwings":
            case "rss":
                outputProvider = new RSSOutputProvider();
                if (outputType == "carwings")
                {
                    ((RSSOutputProvider)outputProvider).EnableCarwingsMode = true;
                }
                break;

            case "json":
                outputProvider = new JSONOutputProvider();
                break;

            case "geojson":
                outputProvider = new GeoJSONOutputProvider();
                break;

            case "csv":
                outputProvider = new CSVOutputProvider();
                break;

            case "kml":
                outputProvider = new KMLOutputProvider(KMLOutputProvider.KMLVersion.V2);
                break;

            case "png":
                outputProvider = new ImageOutputProvider();
                break;

            default:
                outputProvider = new XMLOutputProvider();
                break;
            }

            if (outputProvider != null)
            {
                context.Response.ContentEncoding = Encoding.Default;
                context.Response.ContentType     = outputProvider.ContentType;

                if (!(filter.Action == "getcorereferencedata" && String.IsNullOrEmpty(context.Request["SessionToken"])))
                {
                    //by default output is cacheable for 24 hrs, unless requested by a specific user.
                    context.Response.Cache.SetExpires(DateTime.Now.AddDays(1));
                    context.Response.Cache.SetCacheability(HttpCacheability.Public);
                    context.Response.Cache.SetValidUntilExpires(true);
                }

                if (ConfigurationManager.AppSettings["EnableOutputCompression"] == "true")
                {
                    //apply compression if accepted
                    string encodings = context.Request.Headers.Get("Accept-Encoding");

                    if (encodings != null)
                    {
                        encodings = encodings.ToLower();

                        if (encodings.ToLower().Contains("gzip"))
                        {
                            context.Response.Filter = new GZipStream(context.Response.Filter, CompressionLevel.Optimal, false);
                            context.Response.AppendHeader("Content-Encoding", "gzip");
                            //context.Trace.Warn("GZIP Compression on");
                        }
                        else
                        {
                            context.Response.Filter = new DeflateStream(context.Response.Filter, CompressionMode.Compress);
                            context.Response.AppendHeader("Content-Encoding", "deflate");
                            //context.Trace.Warn("Deflate Compression on");
                        }
                    }
                }
                if (filter.Action == "getchargepoints" || filter.Action == "getpoilist")
                {
                    OutputPOIList(outputProvider, context, filter);
                }

                if (filter.Action == "getcompactpoilist")
                {
                    //experimental::
                    OutputCompactPOIList(context, filter);
                }

                if (filter.Action == "getcorereferencedata")
                {
                    OutputCoreReferenceData(outputProvider, context, filter);
                }

                if (filter.Action == "geocode")
                {
                    this.OutputGeocodingResult(outputProvider, context, filter);
                }

                if (filter.Action == "refreshmirror")
                {
                    try
                    {
                        var itemsUpdated = await new OCM.Core.Data.CacheProviderMongoDB().PopulatePOIMirror(Core.Data.CacheProviderMongoDB.CacheUpdateStrategy.Modified);
                        new JSONOutputProvider().GetOutput(context.Response.OutputStream, new { POICount = itemsUpdated, Status = "OK" }, filter);
                    }
                    catch (Exception exp)
                    {
                        new JSONOutputProvider().GetOutput(context.Response.OutputStream, new { Status = "Error", Message = exp.ToString() }, filter);
                    }
                }

                stopwatch.Stop();
                System.Diagnostics.Debug.WriteLine("Total output time: " + stopwatch.Elapsed.ToString());
            }
        }
Ejemplo n.º 10
0
        public string GetTotalsPerCountrySummary(bool outputAsFunction, string functionName, APIRequestSettings filterSettings)
        {
            //TODO: optionally output as normal JSON
            string output = "function " + functionName + "() { var ocm_summary = new Array(); \r\n";

            if (HttpContext.Current.Cache["ocm_summary"] == null)
            {
                var list = new List <CountrySummary>();

                var results = from c in DataModel.ChargePoints
                              where c.SubmissionStatusType.IsLive == true
                              group c by c.AddressInfo.Country into g
                              select new { g, NumItems = g.Count(), NumStations = g.Sum(s => s.NumberOfPoints > 0 ? s.NumberOfPoints : 1) };

                CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
                TextInfo    textInfo    = cultureInfo.TextInfo;

                foreach (var item in results)
                {
                    var    c           = item.g.First().AddressInfo.Country;
                    string countryName = textInfo.ToTitleCase(c.Title.ToLower());
                    string isoCode     = c.ISOCode;
                    list.Add(new CountrySummary {
                        CountryName = countryName, ISOCode = isoCode, ItemCount = item.NumItems, LocationCount = item.NumItems, StationCount = (int)item.NumStations, ItemType = "LocationsPerCountry"
                    });
                }

                HttpContext.Current.Cache["ocm_summary"] = list.OrderByDescending(i => i.ItemCount).ToList();
            }
            var cachedresults = (List <CountrySummary>)HttpContext.Current.Cache["ocm_summary"];

            foreach (var item in cachedresults)
            {
                output += "ocm_summary[ocm_summary.length]={\"country\":\"" + item.CountryName + "\", \"isocode\":\"" + item.ISOCode + "\", \"itemcount\":" + item.LocationCount + ", \"locationcount\":" + item.LocationCount + ", \"stationcount\":" + item.StationCount + "}; \r\n";
            }
            output += " return ocm_summary; }";
            return(output);
        }
Ejemplo n.º 11
0
        public List <OCM.API.Common.Model.ChargePoint> GetPOIList(APIRequestSettings settings)
        {
            bool freshCache         = false;
            int  maxCacheAgeMinutes = int.Parse(ConfigurationManager.AppSettings["MaxCacheAgeMinutes"]);

            if (status != null && status.LastUpdated.AddMinutes(maxCacheAgeMinutes) > DateTime.UtcNow)
            {
                freshCache = true;
            }

            if (!freshCache)
            {
                return(null);
            }

            //TODO: share common between POIManager and this
            int maxResults = settings.MaxResults;

            bool requiresDistance = false;
            GeoJsonPoint <GeoJson2DGeographicCoordinates> searchPoint = null;

            if (settings.Latitude != null && settings.Longitude != null)
            {
                requiresDistance = true;

                if (settings.Distance == null)
                {
                    settings.Distance = 100;
                }
                searchPoint = GeoJson.Point(GeoJson.Geographic((double)settings.Longitude, (double)settings.Latitude));
            }
            else
            {
                searchPoint       = GeoJson.Point(GeoJson.Geographic(0, 0));
                settings.Distance = 100;
            }

            //if distance filter provided in miles, convert to KM before use

            if (settings.DistanceUnit == OCM.API.Common.Model.DistanceUnit.Miles && settings.Distance != null)
            {
                settings.Distance = GeoManager.ConvertMilesToKM((double)settings.Distance);
            }

            bool filterByConnectionTypes = false;
            bool filterByLevels          = false;
            bool filterByOperators       = false;
            bool filterByCountries       = false;
            bool filterByUsage           = false;
            bool filterByStatus          = false;
            bool filterByDataProvider    = false;

            if (settings.ConnectionTypeIDs != null)
            {
                filterByConnectionTypes = true;
            }
            else
            {
                settings.ConnectionTypeIDs = new int[] { -1 };
            }

            if (settings.LevelIDs != null)
            {
                filterByLevels = true;
            }
            else
            {
                settings.LevelIDs = new int[] { -1 };
            }

            if (settings.OperatorIDs != null)
            {
                filterByOperators = true;
            }
            else
            {
                settings.OperatorIDs = new int[] { -1 };
            }

            //TODO: get country id for given country code
            //either filter by named country code or by country id list
            if (settings.CountryCode != null)
            {
                var referenceData = database.GetCollection <OCM.API.Common.Model.CoreReferenceData>("reference").FindOne();

                var filterCountry = referenceData.Countries.FirstOrDefault(c => c.ISOCode == settings.CountryCode);
                if (filterCountry != null)
                {
                    filterByCountries   = true;
                    settings.CountryIDs = new int[] { filterCountry.ID };
                }
                else
                {
                    filterByCountries   = false;
                    settings.CountryIDs = new int[] { -1 };
                }
            }
            else
            {
                if (settings.CountryIDs != null)
                {
                    filterByCountries = true;
                }
                else
                {
                    settings.CountryIDs = new int[] { -1 };
                }
            }

            if (settings.UsageTypeIDs != null)
            {
                filterByUsage = true;
            }
            else
            {
                settings.UsageTypeIDs = new int[] { -1 };
            }

            if (settings.StatusTypeIDs != null)
            {
                filterByStatus = true;
            }
            else
            {
                settings.StatusTypeIDs = new int[] { -1 };
            }

            if (settings.DataProviderIDs != null)
            {
                filterByDataProvider = true;
            }
            else
            {
                settings.DataProviderIDs = new int[] { -1 };
            }

            if (settings.SubmissionStatusTypeID == -1)
            {
                settings.SubmissionStatusTypeID = null;
            }
            /////////////////////////////////////
            if (database != null)
            {
                var collection = database.GetCollection <OCM.API.Common.Model.ChargePoint>("poi");
                IQueryable <OCM.API.Common.Model.ChargePoint> poiList = from c in collection.AsQueryable <OCM.API.Common.Model.ChargePoint>() select c;

                if (requiresDistance)
                {
                    //filter by distance first
                    poiList = poiList.Where(q => Query.Near("SpatialPosition", searchPoint, (double)settings.Distance * 1000).Inject()).Take(settings.MaxResults);
                }

                poiList = (from c in poiList
                           where

                           // (c.AddressInfo != null && c.AddressInfo.Latitude != null && c.AddressInfo.Longitude != null && c.AddressInfo.CountryID != null)
                           ((settings.SubmissionStatusTypeID == null && (c.SubmissionStatusTypeID == null || c.SubmissionStatusTypeID == (int)StandardSubmissionStatusTypes.Imported_Published || c.SubmissionStatusTypeID == (int)StandardSubmissionStatusTypes.Submitted_Published)) ||
                            (settings.SubmissionStatusTypeID == 0) ||                 //return all regardless of status
                            (settings.SubmissionStatusTypeID != null && c.SubmissionStatusTypeID != null && c.SubmissionStatusTypeID == settings.SubmissionStatusTypeID)
                           ) &&               //by default return live cps only, otherwise use specific submission statusid
                           (c.SubmissionStatusTypeID != null && c.SubmissionStatusTypeID != (int)StandardSubmissionStatusTypes.Delisted_NotPublicInformation)
                           //&& (settings.ChargePointID == null || (settings.ChargePointID!=null && (c.ID!=null && c.ID == settings.ChargePointID)))
                           && (settings.OperatorName == null || c.OperatorInfo.Title == settings.OperatorName) &&
                           (settings.IsOpenData == null || (settings.IsOpenData != null && ((settings.IsOpenData == true && c.DataProvider.IsOpenDataLicensed == true) || (settings.IsOpenData == false && c.DataProvider.IsOpenDataLicensed != true)))) &&
                           (settings.DataProviderName == null || c.DataProvider.Title == settings.DataProviderName)
                           //&& (String.IsNullOrEmpty(settings.LocationTitle) || (!String.IsNullOrEmpty(settings.LocationTitle) && c.AddressInfo!=null && c.AddressInfo.Title!=null && c.AddressInfo.Title.Contains(settings.LocationTitle)))
                           && (settings.ConnectionType == null || c.Connections.Any(conn => conn.ConnectionType.Title == settings.ConnectionType)) &&
                           (settings.MinPowerKW == null || c.Connections.Any(conn => conn.PowerKW >= settings.MinPowerKW))

                           && (filterByCountries == false || (filterByCountries == true && settings.CountryIDs.Contains((int)c.AddressInfo.CountryID))) &&
                           (filterByConnectionTypes == false || (filterByConnectionTypes == true && c.Connections.Any(conn => settings.ConnectionTypeIDs.Contains(conn.ConnectionType.ID)))) &&
                           (filterByLevels == false || (filterByLevels == true && c.Connections.Any(chg => settings.LevelIDs.Contains((int)chg.Level.ID)))) &&
                           (filterByOperators == false || (filterByOperators == true && settings.OperatorIDs.Contains((int)c.OperatorID))) &&
                           (filterByUsage == false || (filterByUsage == true && settings.UsageTypeIDs.Contains((int)c.UsageTypeID))) &&
                           (filterByStatus == false || (filterByStatus == true && settings.StatusTypeIDs.Contains((int)c.StatusTypeID))) &&
                           (filterByDataProvider == false || (filterByDataProvider == true && settings.DataProviderIDs.Contains((int)c.DataProviderID)))
                           select c);

                var results = poiList.ToList().OrderByDescending(p => p.DateCreated).Take(settings.MaxResults);
                if (requiresDistance && settings.Latitude != null & settings.Longitude != null)
                {
                    //populate distance
                    foreach (var p in results)
                    {
                        p.AddressInfo.Distance     = GeoManager.CalcDistance((double)settings.Latitude, (double)settings.Longitude, p.AddressInfo.Latitude, p.AddressInfo.Longitude, settings.DistanceUnit);
                        p.AddressInfo.DistanceUnit = settings.DistanceUnit;
                    }
                    results = results.OrderBy(r => r.AddressInfo.Distance);
                }
                return(results.ToList());
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 12
0
        public void GetOutput(Stream outputStream, List <Common.Model.ChargePoint> dataList, APIRequestSettings settings)
        {
            XmlTextWriter xml = new XmlTextWriter(outputStream, Encoding.UTF8);

            //start xml document
            xml.WriteStartDocument();

            //output rss tags
            xml.WriteStartElement("rss");
            xml.WriteAttributeString("version", "2.0");

            if (EnableCarwingsMode)
            {
                xml.WriteAttributeString("xmlns", "carwings", "http://www.w3.org/2000/xmlns/", "http://www.nissan.co.jp/dtd/carwings.dtd");
            }
            if (EnableGeoRSS)
            {
                xml.WriteAttributeString("xmlns", "georss", "http://www.w3.org/2000/xmlns/", "http://www.georss.org/georss/10");
            }

            //output feed details
            xml.WriteStartElement("channel");
            xml.WriteElementString("title", "OpenChargeMap Charge Points");
            xml.WriteElementString("link", "http://openchargemap.org");
            xml.WriteElementString("description", "Charge Point data contributed by OpenChargeMap community");
            xml.WriteElementString("copyright", "openchargemap.org");

            //output feed items
            foreach (var item in dataList)
            {
                if (item.AddressInfo != null)
                {
                    xml.WriteStartElement("item");
                    xml.WriteStartElement("guid");
                    xml.WriteAttributeString("isPermaLink", "false");
                    xml.WriteString(item.UUID);
                    xml.WriteEndElement();

                    xml.WriteElementString("title", item.AddressInfo.Title);

                    if (EnableCarwingsMode)
                    {
                        xml.WriteElementString("carwings:readtitle", item.AddressInfo.Title);
                    }

                    string description = item.GetSummaryDescription(true);
                    string address     = item.GetAddressSummary(true);

                    xml.WriteElementString("description", description);

                    if (item.AddressInfo.RelatedURL != null)
                    {
                        xml.WriteElementString("link", item.AddressInfo.RelatedURL);
                    }

                    if (EnableCarwingsMode)
                    {
                        if (address != "")
                        {
                            xml.WriteElementString("carwings:address", address);
                        }
                        if (item.AddressInfo.ContactTelephone1 != null)
                        {
                            xml.WriteElementString("carwings:tel", item.AddressInfo.ContactTelephone1);
                        }
                        xml.WriteElementString("carwings:lat", item.AddressInfo.Latitude.ToString());
                        xml.WriteElementString("carwings:lon", item.AddressInfo.Longitude.ToString());
                    }

                    if (EnableGeoRSS)
                    {
                        xml.WriteElementString("georss:point", item.AddressInfo.Latitude.ToString() + " " + item.AddressInfo.Longitude.ToString());
                    }

                    xml.WriteEndElement();
                }
            }

            xml.WriteEndElement();  //end channel
            xml.WriteEndElement();  //end rss
            xml.WriteEndDocument(); //end xml
            xml.Flush();
            //xml.Close();

            #region example rss

            /*
             * <?xml version="1.0" encoding="UTF-8"?>
             * <rss version="2.0" xmlns:carwings="http://www.nissan.co.jp/dtd/carwings.dtd">
             * <channel>
             *  <title> WEB site update: NISSAN Topics </ title>
             *  <link> http://rss.nissan.co.jp/ </ link>
             *  <description> Nissan will deliver the latest information. </ Description>
             *  <language>en</ language>
             *  <copyright> Copyright NISSAN MOTOR CO., LTD. 2005 All Rights Reserved. </ copyright>
             *  <lastBuildDate> Wed, 25 Oct 2006 12:18:36 +0900 </ lastBuildDate>
             *  <docs> http://blogs.law.harvard.edu/tech/rss </ docs>
             *  <item>
             *      <title>update information</ title>
             *      <carwings:readtitle> Trail Jam update information </ carwings: readtitle>
             *      <description> X-TRAIL JAM IN TOKYO DOME general tickets on sale! ! </ Description>
             *      <carwings:readtext> Trail Jam Tokyo Dome tickets, general sale.</ Carwings: readtext>
             *      <Carwings:itemimage> http://eplus.jp/sys/web/irg/2006x-trail/images/topmain.jpg </ Carwings: Itemimage>
             *      <Carwings:data> <! [CDATA [
             *              TRAIL <body> <br> <img src="http://lab.nissan-carwings.com/CWC/images/x-trail.jpg"> </ body>
             *              ]]>
             *      </ Carwings: data>
             *      <carwings:lat> 35.70568 </ carwings: lat>
             *      <carwings:lon> 139.75187 </ carwings: lon>
             *      <link> http://blog.nissan.co.jp/X-TRAIL/?rss </ link>
             *      <guid> http://blog.nissan.co.jp/X-TRAIL/?rss </ guid>
             *      <Carwings:link> Http://Www.nissan.co.jp/Event/....../Coupon.html </ Carwings: Link>
             *      <category> content </ category>
             *      <pubDate> Mon, 16 Oct 2006 20:15:02 +0900 </ pubDate>
             *  </item>
             * </channel>
             * </rss>
             * */
            #endregion
        }
Ejemplo n.º 13
0
 public void GetOutput(Stream outputStream, Object data, APIRequestSettings settings)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 14
0
 public void GetOutput(Stream outputStream, Common.Model.CoreReferenceData data, APIRequestSettings settings)
 {
     throw new NotImplementedException();
 }