///// <summary> Implements <see cref="IModelDefinitionManager.GetModelType"/> </summary> //public void ResolveModel() //{ // try // { // Logger.Instance.Log(LogType.Info, "Starting the model resolution..."); // bool onError = false; // if (modelTypeByName != null) // { // foreach (IModelType type in modelTypeByName.Values) // { // try // { // (type as ModelType).ResolveDependencies(); // } // catch // { onError = true; } // } // } // if (onError) // throw new EtkException("Error(s) found"); // } // catch (Exception ex) // { // throw new EtkException(string.Format("Model resolution failed: {0}. Please check the log.", ex.Message)); // } // finally // { // Logger.Instance.Log(LogType.Info, "Model resolution finished."); // } //} #endregion #region protected methods //protected abstract IModelAccessor CreateModelAccessors(XmlModelAccessor modelAccessorDefinition); protected void PopulateFromXmlModelConfiguration(XmlModelConfiguration xmlModelConfiguration) { lock (syncObj) { if (xmlModelConfiguration.ModelAccessorGroupDefinitions != null) { HasModels = true; foreach (XmlModelAccessorGroup xmlGroup in xmlModelConfiguration.ModelAccessorGroupDefinitions) { //IModelAccessor accessor = CreateModelAccessors(modelAccessorDefinition); IModelAccessorGroup group = ModelAccessorGroup.CreateInstance(this, xmlGroup); if (group != null) { if (ModelAccessorGroupByName.ContainsKey(group.Name)) { Logger.Instance.LogFormat(LogType.Warn, "The model accessor group '{0}' is declared more than once.", group.Name); } ModelAccessorGroupByName[group.Name] = group; } } } if (xmlModelConfiguration.TypeDefinitions != null) { foreach (XmlModelType typeDefinition in xmlModelConfiguration.TypeDefinitions) { ModelType modelType = ModelType.CreateInstance(this, typeDefinition); if (modelType != null) { if (ModelTypeByName.ContainsKey(modelType.Name.ToUpper())) { Logger.Instance.LogFormat(LogType.Warn, "The model UnderlyingType '{0}' is declared more than once.", modelType.Name); } ModelTypeByName[modelType.Name.ToUpper()] = modelType; } } } // Resolve model accessorsNames dependencies foreach (ModelAccessor modelAccessor in ModelAccessorByIdent.Values) { modelAccessor.ResolveDependencies(); } // Resolve model types dependencies foreach (ModelType modelType in ModelTypeByName.Values.ToList()) { modelType.ResolveDependencies(); } // Resolve views dependencies of the model types foreach (ModelType modelType in ModelTypeByName.Values.ToList()) { modelType.ResolveViewsDependencies(); } } }
public static IModelAccessorGroup CreateInstance(ModelDefinitionManager parent, XmlModelAccessorGroup definition) { if (definition == null) { return(null); } ModelAccessorGroup group = new ModelAccessorGroup(); try { if (string.IsNullOrEmpty(definition.Name)) { throw new EtkException("'Name' is mandatory"); } group.Parent = parent; group.Name = definition.Name.EmptyIfNull().Trim(); group.Description = definition.Description.EmptyIfNull().Trim(); if (definition.Accessors != null) { foreach (XmlModelAccessor xmlAccessor in definition.Accessors) { //IModelAccessor accessor = CreateModelAccessors(modelAccessorDefinition); IModelAccessor accessor = ModelAccessor.CreateInstance(group, xmlAccessor); if (accessor != null) { group.accessors.Add(accessor); if (parent.ModelAccessorByIdent.ContainsKey(accessor.Ident)) { Logger.Instance.LogFormat(LogType.Warn, "The model accessor '{0}' is declared more than once.", accessor.Ident); } parent.ModelAccessorByIdent[accessor.Ident] = accessor; } } } } catch (Exception ex) { throw new EtkException($"Cannot create 'Model Accessor Group' '{definition.Name.EmptyIfNull()}': {ex.Message}"); } return(group); }