private bool ScalarProperty_ReadPropertiesFromAttributes(SerializationContext serializationContext, ScalarProperty scalarProperty, XmlReader reader) { // Type if (!serializationContext.Result.Failed) { string attribType = DONetEntityModelDesignerSerializationHelper.Instance.ReadAttribute(serializationContext, scalarProperty, reader, "type"); if (!string.IsNullOrEmpty(attribType)) { string typeDisplayName = SystemPrimitiveTypesConverter.GetDisplayName(attribType); if (!string.IsNullOrEmpty(typeDisplayName)) { Type clrType = SystemPrimitiveTypesConverter.GetClrType(typeDisplayName); Guid typeId = SystemPrimitiveTypesConverter.GetTypeId(clrType); IModelRoot entityModel = scalarProperty.Store.GetEntityModel(); IDomainType domainType = entityModel.GetDomainType(typeId); if (domainType == null) { domainType = entityModel.BuildInDomainTypes.SingleOrDefault(type => type.FullName == "System.String"); } scalarProperty.Type = (DomainType)domainType; return(true); } else { // Invalid property value, ignored. EntityModelDesignerSerializationBehaviorSerializationMessages.IgnoredPropertyValue(serializationContext, reader, "type", typeof(global::System.String), attribType); } } } return(false); }
public Type TryGetClrType(Type defaultType) { Type result = null; string displayName = SystemPrimitiveTypesConverter.GetDisplayName(this.FullName); if (!string.IsNullOrEmpty(displayName)) { result = SystemPrimitiveTypesConverter.GetClrType(displayName); } return(result ?? defaultType); }
public ScalarProperty AddScalarProperty(string name, Type type) { Guid typeId = SystemPrimitiveTypesConverter.GetTypeId(type); IDomainType domainType = null; IModelRoot entityModel = this.Store.GetEntityModel(); if (typeId != default(Guid)) { domainType = entityModel.GetDomainType(typeId); } else { domainType = entityModel.DomainTypes.SingleOrDefault(item => item.FullName == type.FullName); } if (domainType != null) { return(AddScalarProperty(name, (DomainType)domainType)); } throw new ArgumentOutOfRangeException("type is not registered as Domain Type!"); }
public override void ExecCommand(MenuCommand menuCommand) { CurrentModelSelection modelSelection = GetCurrentSelectedPersistentType(); EntityDiagram entityDiagram = modelSelection.GetFromSelection <EntityDiagram>(false).Single(); EntityModel entityModel = entityDiagram.Store.ElementDirectory.FindElements <EntityModel>().Single(); IEnumerable <Tuple <string, EntityKind> > existingTypeNames = entityDiagram.Store.ElementDirectory.FindElements <PersistentType>() .Where(item => item.TypeKind.In(PersistentTypeKind.Entity, PersistentTypeKind.Interface, PersistentTypeKind.Structure)) .Select(item => new Tuple <string, EntityKind>(item.Name, ConvertTypeKind(item.TypeKind))); Func <string, EntityKind, PersistentType> findTypeFunc = (typeName, typeKind) => entityDiagram.Store.ElementDirectory .FindElements <PersistentType>() .Where(item => item.Name == typeName && ConvertTypeKind(item.TypeKind) == typeKind) .SingleOrDefault(); FormAddPersistentType.ResultData resultData; if (FormAddPersistentType.DialogShow(existingTypeNames, out resultData)) { modelSelection.MakeActionWithinTransaction(string.Format("Add new {0} with name '{1}'", resultData.TypeKind, resultData.TypeName), delegate { PersistentType newEntity = null; switch (resultData.TypeKind) { case EntityKind.Entity: { newEntity = new Entity(entityModel.Partition); if (resultData.BaseTypeInfo.Item1.HasValue) { Entity entity = (Entity)newEntity; entity.BaseType = findTypeFunc(resultData.BaseTypeInfo.Item2, resultData.BaseTypeInfo.Item1.Value) as EntityBase; } break; } case EntityKind.Structure: { newEntity = new Structure(entityModel.Partition); if (resultData.BaseTypeInfo.Item1.HasValue) { Structure structure = (Structure)newEntity; structure.BaseType = findTypeFunc(resultData.BaseTypeInfo.Item2, resultData.BaseTypeInfo.Item1.Value) as EntityBase; } break; } case EntityKind.Interface: { newEntity = new Interface(entityModel.Partition); if (resultData.BaseTypeInfo.Item1.HasValue) { Interface @interface = (Interface)newEntity; Interface baseInterface = findTypeFunc(resultData.BaseTypeInfo.Item2, resultData.BaseTypeInfo.Item1.Value) as Interface; @interface.InheritedInterfaces.Add(baseInterface); } break; } } newEntity.Name = resultData.TypeName; entityModel.PersistentTypes.Add(newEntity); // create key property if (resultData.KeyPropertyInfo.Item1) { var newProperty = new ScalarProperty(newEntity.Partition); newProperty.Name = resultData.KeyPropertyInfo.Item2; newProperty.KeyAttribute.Enabled = true; Guid typeId = SystemPrimitiveTypesConverter.GetTypeId(resultData.KeyPropertyInfo.Item3); newProperty.Type = (DomainType)entityModel.GetDomainType(typeId); newEntity.Properties.Add(newProperty); } Owner.SelectModelElement((ModelElement)newEntity); }); } }