Pluralize() public static method

Get the plural form of a singular text.
public static Pluralize ( string value ) : string
value string The singular text for which to get /// the plural form.
return string
        private string CreateServiceResponse()
        {
            var workspaceElement = new XElement(
                NsApp + "workspace",
                new XElement(NsAtom + "title", "Default")
                );

            foreach (var type in _sessionFactory.GetAllClassMetadata().Values)
            {
                string name = Inflector.Pluralize(GetPersister(type).TableName);

                workspaceElement.Add(new XElement(
                                         NsApp + "collection",
                                         new XAttribute("href", name),
                                         new XElement(
                                             NsAtom + "title",
                                             name
                                             )
                                         ));
            }

            var document = new XDocument(
                new XElement(
                    NsApp + "service",
                    new XAttribute(XNamespace.Xmlns + "atom", NsAtom),
                    new XAttribute(XNamespace.Xmlns + "app", NsApp),
                    new XAttribute("xmlns", NsApp),
                    new XAttribute(XNamespace.Xml + "base", ServiceNamespace),
                    workspaceElement
                    )
                );

            return(document.ToString(SaveOptions.DisableFormatting));
        }
Beispiel #2
0
        private void PrepareDataResponse()
        {
            DataServiceVersion = "2.0;";

            string entityName;

            var path = new PathParser(_path).Parse();

            if (path.Members.Count > 2)
            {
                throw new ODataException(ErrorMessages.PathParser_InvalidPath);
            }

            entityName = Inflector.Singularize(path.Members[path.Members.Count - 1].Name);

            IEnumerable entities;
            object      parentEntity     = null;
            string      parentEntityName = Inflector.Singularize(path.Members[0].Name);

            if (path.Members[0].IdExpression != null)
            {
                object parentId = path.Members[0].IdExpression.Value;
                parentEntity = _session.Load(parentEntityName, parentId);
            }

            if (parentEntity != null && path.Members.Count == 1)
            {
                entities = new[] { parentEntity };
            }
            else
            {
                var criteria =
                    String.IsNullOrEmpty(_queryString)
                    ? _session.CreateCriteria(entityName)
                    : _session.ODataQuery(entityName, _queryString);

                if (path.Members.Count == 2)
                {
                    if (parentEntity == null || path.Members[1].IdExpression != null)
                    {
                        throw new ODataException(ErrorMessages.PathParser_InvalidPath);
                    }

                    var parentPersister = _service.GetPersister(parentEntityName);
                    var property        = GetProperty(parentPersister, path.Members[1].Name);
                    var collectionType  = property.Type as CollectionType;
                    var manyToOneType   = property.Type as ManyToOneType;

                    if (collectionType != null)
                    {
                        criteria.Add(Restrictions.Eq(parentEntityName, parentEntity));
                    }
                    else if (manyToOneType != null)
                    {
                        /**
                         * 01.06.2020: EntityMode.Poco removed; method GetPropertyValue supports only one parameter
                         */
                        var childEntity    = parentPersister.GetPropertyValue(parentEntity, property.Name /*, EntityMode.Poco*/);
                        var childPersister = _service.GetPersister(property.Type.ReturnedClass);

                        /**
                         * 01.06.2020: EntityMode.Poco removed; method GetIdentifier supports only one parameter
                         */
                        object idValue = childPersister.GetIdentifier(childEntity /*, EntityMode.Poco*/);

                        criteria.Add(Restrictions.Eq(childPersister.IdentifierPropertyName, idValue));
                    }
                    else
                    {
                        throw new ODataException(String.Format(ErrorMessages.ODataRequest_PropertyNotARelationship, path.Members[1].Name, parentPersister.EntityType.ReturnedClass.Name));
                    }
                }

                entities = criteria.List();
            }

            var feedElement = new XElement(
                ODataService.NsAtom + "feed",
                new XAttribute(XNamespace.Xml + "base", _service.ServiceNamespace),
                new XAttribute(XNamespace.Xmlns + "d", ODataService.NsDataServices),
                new XAttribute(XNamespace.Xmlns + "m", ODataService.NsMetadata),
                new XAttribute("xmlns", ODataService.NsAtom),
                new XElement(
                    ODataService.NsAtom + "title",
                    new XAttribute("type", "text"),
                    _path
                    ),
                new XElement(
                    ODataService.NsAtom + "id",
                    _service.ServiceNamespace.ToString().TrimEnd('/') + "/" + _path
                    ),
                new XElement(
                    ODataService.NsAtom + "updated",
                    DateTime.UtcNow.ToString("s") + "Z"
                    ),
                new XElement(
                    ODataService.NsAtom + "link",
                    new XAttribute("rel", "self"),
                    new XAttribute("title", _path),
                    new XAttribute("href", _path)
                    )
                );

            var persister = _service.GetPersister(entityName);

            foreach (var entity in entities)
            {
                var propertiesElement = new XElement(
                    ODataService.NsMetadata + "properties"
                    );

                /**
                 * 01.06.2020: EntityMode.Poco removed; method GetIdentifier supports only one parameter
                 */
                string id = Inflector.Pluralize(entityName) + "(" + LiteralUtil.EscapeValue(persister.GetIdentifier(entity /*, EntityMode.Poco*/)) + ")";

                var entryElement = new XElement(
                    ODataService.NsAtom + "entry",
                    new XElement(
                        ODataService.NsAtom + "id",
                        _service.ServiceNamespace.ToString().TrimEnd('/') + "/" + id
                        ),
                    new XElement(
                        ODataService.NsAtom + "author",
                        new XElement(ODataService.NsAtom + "name")
                        )
                    );

                feedElement.Add(entryElement);

                /**
                 * 01.06.2020: EntityMode.Poco removed; method GetIdentifier supports only one parameter
                 */
                propertiesElement.Add(AddProperty(persister.IdentifierPropertyName, persister.IdentifierType, persister.GetIdentifier(entity /*, EntityMode.Poco*/)));

                /**
                 * 01.06.2020: EntityMode.Poco removed; method GetPropertyValues supports only one parameter
                 */
                var values = persister.GetPropertyValues(entity /*, EntityMode.Poco*/);

                for (int i = 0; i < values.Length; i++)
                {
                    var    propertyType = persister.PropertyTypes[i];
                    string propertyName = persister.PropertyNames[i];

                    var collectionType = propertyType as CollectionType;
                    var manyToOneType  = propertyType as ManyToOneType;

                    if (collectionType != null || manyToOneType != null)
                    {
                        entryElement.Add(new XElement(
                                             ODataService.NsAtom + "link",
                                             new XAttribute("rel", ODataService.NsDataServices.ToString().TrimEnd('/') + "/related/" + propertyName),
                                             new XAttribute("type", "application/atom+xml;type=entry"),
                                             new XAttribute("title", propertyName),
                                             new XAttribute("href", id + "/" + propertyName)
                                             ));
                    }
                    else
                    {
                        propertiesElement.Add(AddProperty(propertyName, propertyType, values[i]));
                    }
                }

                entryElement.Add(
                    new XElement(
                        ODataService.NsAtom + "category",
                        new XAttribute("term", "SouthWind." + entityName),
                        new XAttribute("schema", ODataService.NsDataServices)
                        )
                    );

                entryElement.Add(
                    new XElement(
                        ODataService.NsAtom + "content",
                        new XAttribute("type", "application/xml"),
                        propertiesElement
                        )
                    );
            }

            Response = new XDocument(feedElement).ToString(SaveOptions.DisableFormatting);
        }
        private string CreateMetadataResponse()
        {
            var schemaElement = new XElement(
                NsEdm + "Schema",
                new XAttribute(XNamespace.Xmlns + "d", NsDataServices),
                new XAttribute(XNamespace.Xmlns + "m", NsMetadata),
                new XAttribute("xmlns", NsEdm),
                new XAttribute("Namespace", SchemaNamespace)
                );

            var entityContainerElement = new XElement(
                NsEdm + "EntityContainer",
                new XAttribute("Name", ContainerName),
                new XAttribute(NsMetadata + "IsDefaultEntityContainer", "true")
                );

            var associations = new Dictionary <string, XElement>();

            foreach (var type in _sessionFactory.GetAllClassMetadata().Values)
            {
                var persister = GetPersister(type);

                string entityName = persister.EntityType.ReturnedClass.Name;

                var entityElement = new XElement(
                    NsEdm + "EntityType",
                    new XAttribute("Name", entityName),
                    new XElement(
                        NsEdm + "Key",
                        new XElement(
                            NsEdm + "PropertyRef",
                            new XAttribute("Name", persister.IdentifierPropertyName)
                            )
                        )
                    );

                schemaElement.Add(entityElement);

                entityElement.Add(new XElement(
                                      NsEdm + "Property",
                                      new XAttribute("Name", persister.IdentifierPropertyName),
                                      new XAttribute("Type", LiteralUtil.GetEdmType(persister.IdentifierType.ReturnedClass)),
                                      new XAttribute("Nullable", "false")
                                      ));

                foreach (var property in persister.EntityMetamodel.Properties)
                {
                    var collectionType = property.Type as CollectionType;
                    var manyToOneType  = property.Type as ManyToOneType;

                    var propertyType = property.Type.ReturnedClass;

                    if (collectionType != null || manyToOneType != null)
                    {
                        string fromRole;
                        string toRole;
                        string relationship;
                        string multiplicity;

                        if (collectionType != null)
                        {
                            propertyType = propertyType.GetGenericArguments()[0];

                            fromRole     = entityName + "_" + property.Name;
                            toRole       = propertyType.Name + "_" + entityName;
                            relationship = toRole + "_" + fromRole;
                            multiplicity = "*";
                        }
                        else
                        {
                            fromRole     = entityName + "_" + property.Name;
                            toRole       = propertyType.Name + "_" + Inflector.Pluralize(entityName);
                            relationship = fromRole + "_" + toRole;
                            multiplicity = "0..1";
                        }

                        entityElement.Add(new XElement(
                                              NsEdm + "NavigationProperty",
                                              new XAttribute("Name", property.Name),
                                              new XAttribute("Relationship", SchemaNamespace + "." + relationship),
                                              new XAttribute("FromRole", fromRole),
                                              new XAttribute("ToRole", toRole)
                                              ));

                        XElement association;

                        if (!associations.TryGetValue(relationship, out association))
                        {
                            association = new XElement(
                                NsEdm + "Association",
                                new XAttribute("Name", relationship)
                                );

                            associations.Add(relationship, association);
                        }

                        association.Add(new XElement(
                                            NsEdm + "End",
                                            new XAttribute("Role", toRole),
                                            new XAttribute("Type", SchemaNamespace + "." + propertyType.Name),
                                            new XAttribute("Multiplicity", multiplicity)
                                            ));
                    }
                    else
                    {
                        entityElement.Add(new XElement(
                                              NsEdm + "Property",
                                              new XAttribute("Name", property.Name),
                                              new XAttribute("Type", LiteralUtil.GetEdmType(propertyType)),
                                              new XAttribute("Nullable", property.IsNullable ? "true" : "false")
                                              ));
                    }
                }

                entityContainerElement.Add(new XElement(
                                               NsEdm + "EntitySet",
                                               new XAttribute("Name", Inflector.Pluralize(entityName)),
                                               new XAttribute("EntityType", SchemaNamespace + "." + entityName)
                                               ));
            }

            foreach (var association in associations.Values)
            {
                schemaElement.Add(association);
            }

            schemaElement.Add(entityContainerElement);

            var document = new XDocument(
                new XElement(
                    NsEdmx + "Edmx",
                    new XAttribute(XNamespace.Xmlns + "edmx", NsEdmx),
                    new XAttribute("Version", "1.0"),
                    new XElement(
                        NsEdmx + "DataServices",
                        new XAttribute(XNamespace.Xmlns + "m", NsMetadata),
                        new XAttribute(NsMetadata + "DataServiceVersion", "2.0"),
                        schemaElement
                        )
                    )
                );

            return(document.ToString(SaveOptions.DisableFormatting));
        }