private static void SaveGroups(EditAttribute editAttribute, int attributeID)
        {
            var curList = AttributeGroups.GetByAttributeID(attributeID);

            foreach (var groupID in editAttribute.Groups)
            {
                if (!curList.Any(item => item.GroupID == groupID))
                {
                    var attributeGroup = new AttributeGroup();

                    attributeGroup.AttributeID = attributeID;
                    attributeGroup.GroupID     = groupID;

                    AttributeGroups.Insert(attributeGroup);
                }
                else
                {
                    curList.Remove(curList.Single(cls => cls.GroupID == groupID));
                }
            }

            foreach (var item in curList)
            {
                AttributeGroups.Delete(item.ID);
            }
        }
示例#2
0
        public CompositeEntitySchema(EntitySchema schema, IEnumerable <EntitySchema> ancestorSchemas, bool copyRelationProxiesFromSchema = false)
            : base(schema.Alias, schema.Name)
        {
            //TODO: Need to move this into a mapper, but not currently one available at the right level
            Id         = schema.Id;
            SchemaType = SchemaType;
            AttributeGroups.AddRange(schema.AttributeGroups);
            AttributeDefinitions.AddRange(schema.AttributeDefinitions);
            UtcCreated       = schema.UtcCreated;
            UtcModified      = schema.UtcModified;
            UtcStatusChanged = schema.UtcStatusChanged;

            var inheritedDefsDict = new Dictionary <string, InheritedAttributeDefinition>();
            var inheritedDefs     = ancestorSchemas
                                    .SelectMany(entitySchema => entitySchema.AttributeDefinitions.Select(definition => new InheritedAttributeDefinition(definition, entitySchema))).ToArray();

            foreach (var def in inheritedDefs)
            {
                if (!inheritedDefsDict.ContainsKey(def.Alias))
                {
                    inheritedDefsDict.Add(def.Alias, def);
                }
            }

            InheritedAttributeDefinitions = new EntityCollection <InheritedAttributeDefinition>(inheritedDefsDict.Values);

            // Need to only show the inherited groups that are exposed by the filtered inherited attribute definitions, but also include empty
            // groups so that they have a chance to have some definitions added
            var allLinkedGroups = ancestorSchemas.SelectMany(x => x.AttributeDefinitions.Select(y => new InheritedAttributeGroup(y.AttributeGroup, x)));
            var allKnownGroups  = ancestorSchemas.SelectMany(x => x.AttributeGroups.Select(y => new InheritedAttributeGroup(y, x)));
            var unlinkedGroups  = allKnownGroups.Except(allLinkedGroups);

            var inheritedGroups =
                InheritedAttributeDefinitions.Select(x => new InheritedAttributeGroup(x.AttributeGroup, x.Schema)).Union
                    (unlinkedGroups);

            InheritedAttributeGroups = new EntityCollection <InheritedAttributeGroup>(inheritedGroups);

            RelationProxies.LazyLoadDelegate = schema.RelationProxies.LazyLoadDelegate;
            XmlConfiguration = schema.XmlConfiguration;

            if (copyRelationProxiesFromSchema)
            {
                foreach (var proxies in schema.RelationProxies.GetManualParentProxies())
                {
                    RelationProxies.EnlistParent(proxies.Item.Source, proxies.Item.Type, proxies.Item.Ordinal, proxies.Item.MetaData.ToArray());
                }
                foreach (var proxies in schema.RelationProxies.GetManualChildProxies())
                {
                    RelationProxies.EnlistParent(proxies.Item.Source, proxies.Item.Type, proxies.Item.Ordinal, proxies.Item.MetaData.ToArray());
                }
            }
        }
        public ActionResult Edit(int?id)
        {
            EditAttribute editAttribute;

            if (id.HasValue)
            {
                editAttribute        = Mapper.Map <EditAttribute>(Attributes.GetByID(id.Value));
                editAttribute.Groups = AttributeGroups.GetByAttributeID(editAttribute.ID).Select(item => item.GroupID).ToList();
            }
            else
            {
                editAttribute = new EditAttribute();
            }

            return(View(editAttribute));
        }
        public ActionResult Edit(EditAttribute editAttribute)
        {
            try
            {
                var attribute = Mapper.Map <Attribute>(editAttribute);

                attribute.LastUpdate = DateTime.Now;

                ViewBag.Success = true;

                int attributeID = attribute.ID;
                if (attributeID == -1)
                {
                    Attributes.Insert(attribute);
                    attributeID = attribute.ID;

                    SaveGroups(editAttribute, attribute.ID);
                    SaveOptions(editAttribute, attribute.ID);

                    UserNotifications.Send(UserID, String.Format("جدید - ویژگی '{0}'", attribute.Title), "/Admin/Attributes/Edit/" + attribute.ID, NotificationType.Success);
                    editAttribute = new EditAttribute();
                }
                else
                {
                    Attributes.Update(attribute);

                    SaveGroups(editAttribute, attribute.ID);
                    SaveOptions(editAttribute, attribute.ID);

                    editAttribute.Groups  = AttributeGroups.GetByAttributeID(editAttribute.ID).Select(item => item.GroupID).ToList();
                    editAttribute.Options = AttributeOptions.GetByAttributeID(editAttribute.ID).Select(item => new EditAttributeOption()
                    {
                        ID = item.ID, AttributeID = item.AttributeID, Title = item.Title
                    }).ToList();
                }
            }
            catch (Exception ex)
            {
                SetErrors(ex);
            }

            return(ClearView(editAttribute));
        }
示例#5
0
 protected override void Visit(XmlSchemaAttributeGroup group)
 {
     AttributeGroups.Add(group);
 }