Esempio n. 1
0
        /// <summary> Create instance from an xml definition</summary>
        /// <param name="modelDefinitionManager">The owner of the future ModelType</param>
        /// <param name="definition">The xml defintion</param>
        public static ModelType CreateInstance(IModelDefinitionManager modelDefinitionManager, XmlModelType definition)
        {
            ModelType ret = null;

            if (definition != null)
            {
                ret                      = new ModelType();
                ret.Parent               = modelDefinitionManager;
                ret.PropertiesByName     = new Dictionary <string, IModelProperty>();
                ret.LinkPropertiesByName = new Dictionary <string, ModelLinkProperty>();
                try
                {
                    if (string.IsNullOrEmpty(definition.Name))
                    {
                        throw new EtkException("'Name' is mandatory");
                    }

                    ret.Name        = definition.Name.EmptyIfNull().Trim();
                    ret.Description = definition.Description;

                    string typeName = definition.Type.EmptyIfNull().Trim();
                    if (string.IsNullOrEmpty(typeName))
                    {
                        throw new Exception("'Type' cannot be null or emtpy");
                    }

                    // if (!string.IsNullOrEmpty(typeName))
                    {
                        ret.UnderlyingType = TypeHelpers.GetType(typeName);
                        if (ret.UnderlyingType == null)
                        {
                            throw new Exception($"Cannot retrieve Underlying type '{typeName}'");
                        }
                        ret.RetrieveProperties(ret.UnderlyingType, definition.PropertiesToIgnore);
                    }

                    ret.OverridePropertiesFromXml(definition.Properties);
                    ret.RetrieveLinkPropertiesFromXml(definition.LinkProperties);
                    ret.RetrieveDefaultViewsFromXml(definition.Views);
                }
                catch (Exception ex)
                {
                    throw new EtkException($"Cannot create 'ModelType' '{definition.Name.EmptyIfNull()}': {ex.Message}");
                }
            }
            return(ret);
        }
Esempio n. 2
0
        public void ResolveDependencies(IModelDefinitionManager modelDefinition)
        {
            if (ModelType != null)
            {
                return;
            }

            ModelType = modelDefinition.GetModelType(Name);
            if (ModelType == null)
            {
                ModelType = Etk.ModelManagement.ModelType.CreateInstance(modelDefinition, BindingDefinition.BindingType);
                if (ModelType == null)
                {
                    throw new Exception($"Cannot retrieve Model type for ModelProperty '{Name}'");
                }
                modelDefinition.AddModelType(ModelType);
            }
        }
Esempio n. 3
0
        /// <summary>Create a model type from a given Type  </summary>
        /// <param name="modelDefinitionManager"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public static ModelType CreateInstance(IModelDefinitionManager modelDefinitionManager, Type type)
        {
            ModelType ret = null;

            if (type != null)
            {
                ret                  = new ModelType();
                ret.Parent           = modelDefinitionManager;
                ret.PropertiesByName = new Dictionary <string, IModelProperty>();
                try
                {
                    ret.Name           = type.Name;
                    ret.Description    = type.Name;
                    ret.UnderlyingType = type;

                    ret.RetrieveProperties(ret.UnderlyingType, null);
                }
                catch (Exception ex)
                {
                    throw new EtkException($"Cannot create 'ModelType' '{type.Name}': {ex.Message}");
                }
            }
            return(ret);
        }