public void Handle(GetAddInEntitiesEventArgs args, Type metadataClassType)
        {
            switch (args.DefinitionKind)
            {
            case ServerInterfaces.DefinitionKind.ComplexSetProperty:

                var entityContainer = (Entity_Container)args.BaseObject;
                var children        = args.GetCurrentChildren();
                var addInSets       = metadataClassType.GetProperties().Where(p => !children.Any((o) => o.Name == p.Name));

                foreach (var addInSet in addInSets)
                {
                    XmlElement element = CreateEntitySet(entityContainer, entityContainer.Name, addInSet);

                    args.Entities.Add(args.EntityFactory.Call(addInSet.Name, element));
                }

                break;
            }
        }
예제 #2
0
        private void Model_OnGetAddIns(object sender, GetAddInEntitiesEventArgs e)
        {
            var type       = allTypes.SingleOrDefault(t => t.FullName == e.Type.FullyQualifiedName);
            var baseObject = e.BaseObject;

            if (type == null)
            {
                e.NoMetadata = true;
            }
            else
            {
                if (e.PropertyName != null)
                {
                    if (type.HasCustomAttribute <MetadataTypeAttribute>())
                    {
                        var metadataTypeAttribute = type.GetCustomAttribute <MetadataTypeAttribute>();
                        var metadataClassType     = metadataTypeAttribute.MetadataClassType;
                    }
                    else
                    {
                        e.NoMetadata = true;
                    }
                }
                else if (type.HasCustomAttribute <MetadataTypeAttribute>())
                {
                    if (type.HasCustomAttribute <MetadataTypeAttribute>())
                    {
                        var metadataTypeAttribute = type.GetCustomAttribute <MetadataTypeAttribute>();
                        var metadataClassType     = metadataTypeAttribute.MetadataClassType;
                        var handlerTypes          = allTypes.Where(t => t.HasCustomAttribute <AddInHandlerAttribute>());

                        foreach (var handlerType in handlerTypes)
                        {
                            var handlerAttribute  = handlerType.GetCustomAttribute <AddInHandlerAttribute>();
                            var providerAttribute = baseObject.Root.GetType().GetCustomAttribute <AbstraXProviderAttribute>();

                            if (handlerAttribute.AbstraXProviderGuid == providerAttribute.Guid)
                            {
                                if (handlerAttribute.AddInHandlerKind == AddInHandlerKind.MetadataReflection)
                                {
                                    var handler = handlerType.CreateInstance <IAddInMetadataReflectionHandler>();

                                    handler.Handle(e, metadataClassType);
                                }
                            }
                        }

                        switch (e.DefinitionKind)
                        {
                        case DefinitionKind.ComplexSetProperty:
                            break;

                        default:
                            DebugUtils.Break();
                            break;
                        }
                    }
                    else
                    {
                        e.NoMetadata = true;
                    }
                }
            }
        }