Esempio n. 1
0
        protected String convertToXml(Object obj, RequestItem request)
        {
            MemoryStream ms = new MemoryStream();
            XmlWriter    xw = XmlWriter.Create(ms, new XmlWriterSettings {
                Indent = true
            });

            using (var writer = XmlDictionaryWriter.CreateDictionaryWriter(xw))
            {
                if (obj is IRestfulCollection)
                {
                    IRestfulCollection collection = (IRestfulCollection)obj;
                    var responses = collection.getEntry();
                    writer.WriteStartElement("response", osNameSpace);
                    writer.WriteElementString("startIndex", collection.startIndex.ToString());
                    if (request.getCount().HasValue)
                    {
                        writer.WriteElementString("itemsPerPage", request.getCount().ToString());
                    }
                    writer.WriteElementString("totalResults", collection.totalResults.ToString());
                    writer.WriteElementString("isFiltered", collection.isFiltered.ToString().ToLower());
                    writer.WriteElementString("isSorted", collection.isSorted.ToString().ToLower());
                    writer.WriteElementString("isUpdatedSince", collection.isUpdatedSince.ToString().ToLower());

                    foreach (var item in (IList)responses)
                    {
                        writer.WriteStartElement("entry");
                        //ser.WriteObject(writer, item);
                        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                        ns.Add("", osNameSpace);
                        XmlSerializer ser = new XmlSerializer(item.GetType());
                        ser.Serialize(writer, item, ns);
                        writer.WriteEndElement();
                    }

                    writer.WriteEndElement();
                }
                else if (obj is DataCollection)
                {
                    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                    ns.Add("", osNameSpace);
                    XmlSerializer ser = new XmlSerializer(obj.GetType());
                    ser.Serialize(writer, obj, ns);
                }
                else
                {
                    throw new Exception("XMLSerialization: shouldn't have got here");
                }
                writer.Flush();
                return(Encoding.UTF8.GetString(ms.ToArray()));
            }
        }
Esempio n. 2
0
        public String convertToAtom(Object obj, RequestItem request)
        {
            MemoryStream ms = new MemoryStream();
            XmlWriter    xw = XmlWriter.Create(ms, new XmlWriterSettings {
                Indent = true, OmitXmlDeclaration = true
            });

            using (var writer = XmlDictionaryWriter.CreateDictionaryWriter(xw))
            {
                var userIds = request.getUsers();
                IEnumerator <UserId> users = userIds.GetEnumerator();
                users.MoveNext();
                writer.WriteStartElement("feed", "http://www.w3.org/2005/Atom");
                writer.WriteXmlnsAttribute("osearch", osearchNameSpace);
                writer.WriteStartElement("author");
                writer.WriteElementString("uri", guidPrefix + ":" + users.Current.getUserId());
                writer.WriteEndElement(); // author

                if (obj is IRestfulCollection)
                {
                    IRestfulCollection collection = (IRestfulCollection)obj;
                    int totalResults = collection.totalResults;
                    int itemsPerPage = request.getCount() ?? RequestItem.DEFAULT_COUNT;
                    int startIndex   = collection.startIndex;

                    //int endPos = (startIndex + itemsPerPage) > totalResults ? totalResults : (startIndex + itemsPerPage);
                    writer.WriteStartElement("link");
                    writer.WriteAttributeString("ref", "self");
                    writer.WriteAttributeString("href", new Uri("http://" + request.getParameter("HTTP_HOST") +
                                                                request.getParameter("URL")).ToString());
                    writer.WriteEndElement(); // link
                    // Add osearch & next link to the entry
                    addPagingFields(writer, request, startIndex, itemsPerPage, totalResults);

                    // Add response entries to feed
                    var responses = collection.getEntry();
                    foreach (var response in (IList)responses)
                    {
                        writer.WriteStartElement("entry");
                        // Special hoisting rules for activities
                        if (response is Activity)
                        {
                            addActivityData(writer, response as Activity);
                        }
                        else if (response is Person)
                        {
                            addPeopleData(writer, response as Person);
                        }
                        else if (response is MessageCollection)
                        {
                            addMesssageCollectionData(writer, response as MessageCollection);
                        }
                        else
                        {
                            throw new Exception("AtomConverter: unsupported object");
                        }
                        writer.WriteEndElement(); // entry
                    }
                }
                else if (obj is DataCollection) // AppData
                {
                    var collection = (DataCollection)obj;
                    // TODO: fixed osearch for appData
                    addPagingFields(writer, request, 0, collection.entry.Count, collection.entry.Count);

                    foreach (var e in collection.entry)
                    {
                        writer.WriteStartElement("entry");
                        writer.WriteElementString("id", e.Key);
                        writer.WriteStartElement("content");
                        writer.WriteAttributeString("type", ContentTypes.OUTPUT_XML_CONTENT_TYPE);
                        foreach (var item in e.Value)
                        {
                            writer.WriteStartElement("entry");
                            writer.WriteElementString("key", item.Key);
                            writer.WriteElementString("value", item.Value);
                            writer.WriteEndElement(); // entry
                        }
                        writer.WriteEndElement();     // content
                        writer.WriteEndElement();     // entry
                    }
                }
                else
                {
                    throw new Exception("AtomConverter: unsupported object");
                }
                writer.WriteEndElement(); // feed
                xw.Flush();
                return(Encoding.UTF8.GetString(ms.ToArray()));
            }
        }