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; } }
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; } } } }