/// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public static string ParseMediaType(string type)
        {
            foreach (string mime in DataProviderUtility.SplitTrim(type, ';'))
            {
                // only return first part
                return(mime);
            }

            // if no parts then was empty
            return(String.Empty);
        }
Esempio n. 2
0
        public virtual IDataWriter Find(string extension)
        {
            extension = DataProviderUtility.NormalizeExtension(extension);

            IDataWriter writer;

            if (this.WritersByExt.TryGetValue(extension, out writer))
            {
                return(writer);
            }

            return(null);
        }
Esempio n. 3
0
        /// <summary>
        /// Finds an IDataReader by content-type header
        /// </summary>
        /// <param name="contentTypeHeader"></param>
        /// <returns></returns>
        public virtual IDataReader Find(string contentTypeHeader)
        {
            // TODO: implement this negotiation
            // http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3-380003.8

            string type = DataProviderUtility.ParseMediaType(contentTypeHeader);

            IDataReader reader;

            if (this.ReadersByMime.TryGetValue(type, out reader))
            {
                return(reader);
            }

            return(null);
        }
Esempio n. 4
0
        public virtual IDataWriter Find(string acceptHeader, string contentTypeHeader)
        {
            // TODO: implement this negotiation
            // http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3-380003.8

            IDataWriter writer;

            foreach (string type in DataProviderUtility.ParseHeaders(acceptHeader, contentTypeHeader))
            {
                if (this.WritersByMime.TryGetValue(type, out writer))
                {
                    return(writer);
                }
            }

            return(null);
        }
        /// <summary>
        /// Parses HTTP headers for Media-Types
        /// </summary>
        /// <param name="accept">HTTP Accept header</param>
        /// <param name="contentType">HTTP Content-Type header</param>
        /// <returns>sequence of Media-Types</returns>
        /// <remarks>
        /// http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
        /// </remarks>
        public static IEnumerable <string> ParseHeaders(string accept, string contentType)
        {
            string mime;

            // check for a matching accept type
            foreach (string type in DataProviderUtility.SplitTrim(accept, ','))
            {
                mime = DataProviderUtility.ParseMediaType(type);
                if (!String.IsNullOrEmpty(mime))
                {
                    yield return(mime);
                }
            }

            // fallback on content-type
            mime = DataProviderUtility.ParseMediaType(contentType);
            if (!String.IsNullOrEmpty(mime))
            {
                yield return(mime);
            }
        }
Esempio n. 6
0
        /// <summary>
        /// Ctor
        /// </summary>
        /// <param name="writers">inject with all possible writers</param>
        public DataWriterProvider(IEnumerable <IDataWriter> writers)
        {
            if (writers != null)
            {
                foreach (IDataWriter writer in writers)
                {
                    if (this.DefaultWriter == null)
                    {
                        // TODO: decide less arbitrary way to choose default
                        // without hardcoding value into IDataWriter.
                        // Currently first DataWriter wins default.
                        this.DefaultWriter = writer;
                    }

                    foreach (string contentType in writer.ContentType)
                    {
                        if (String.IsNullOrEmpty(contentType) ||
                            this.WritersByMime.ContainsKey(contentType))
                        {
                            continue;
                        }

                        this.WritersByMime[contentType] = writer;
                    }

                    foreach (string fileExt in writer.FileExtension)
                    {
                        if (String.IsNullOrEmpty(fileExt) ||
                            this.WritersByExt.ContainsKey(fileExt))
                        {
                            continue;
                        }

                        string ext = DataProviderUtility.NormalizeExtension(fileExt);
                        this.WritersByExt[ext] = writer;
                    }
                }
            }
        }