protected override LayeredApplicationModel DoCreateModel() { ListProxy <LayerModelMutable> topLevelLayers, allLayers; DictionaryQuery <CompositeModelType, CompositeModelTypeModelScopeSupport> compositeModelTypeSupport; DictionaryProxy <Int32, CompositeModel> models; var result = new LayeredApplicationModelImmutable( this, ArchitectureDefaults.GENERIC_COMPOSITE_PROPERTY_MIXIN_TYPE, ArchitectureDefaults.GENERIC_COMPOSITE_EVENT_MIXIN_TYPE, ArchitectureDefaults.GENERIC_FRAGMENT_TYPE, this.ModelTypeSupport, out compositeModelTypeSupport, out models, out topLevelLayers, out allLayers ); var layers = new Dictionary <LayerArchitectureImpl, LayerModelMutable>(); foreach (var layer in this._allLayers.CQ.Values) { var lState = new LayerModelState(this.CollectionsFactory); var lImmutable = new LayerModelImmutable(lState); var lMutable = new LayerModelMutable(lState, lImmutable); lState.ApplicationModel = result; lState.LayerName = layer.Name; lState.ModuleModels.AddRange(layer.ModuleImpls.Select(module => this.NewModuleModel(compositeModelTypeSupport, models, lMutable, module))); layers.Add(layer, lMutable); allLayers.Add(lMutable); } foreach (KeyValuePair <LayerArchitectureImpl, ListProxy <LayerArchitectureImpl> > kvp in this._usageInfos.CQ) { layers[kvp.Key].AddUsedLayers(kvp.Value.CQ.Select(layer => layers[layer])); } topLevelLayers.AddRange(layers.Where(layerKvp => !this._usageInfos.CQ.Any(kvp => !kvp.Key.Equals(layerKvp.Key) && this._usageInfos.CQ[kvp.Key].CQ.Contains(layerKvp.Key))).Select(layerKvp => layerKvp.Value)); return(result); }
protected ModuleModelMutable NewModuleModel(DictionaryQuery <CompositeModelType, CompositeModelTypeModelScopeSupport> compositeModelTypeSupport, DictionaryProxy <Int32, CompositeModel> models, LayerModelMutable owningLayer, ModuleArchitectureImpl module) { var state = new ModuleModelState(this.CollectionsFactory); var immutable = new ModuleModelImmutable(state); var result = new ModuleModelMutable(state, immutable); state.ModuleName = module.Name; state.LayerModel = owningLayer; state.Assembler = module.LayeredCompositeAssembler; foreach (var modelType in this.ModelTypeSupport.Keys) { IDictionary <CompositeModel, Visibility> visibilities = null; if (!state.CompositeVisibilities.TryGetValue(modelType, out visibilities)) { visibilities = new Dictionary <CompositeModel, Visibility>(ReferenceEqualityComparer <CompositeModel> .ReferenceBasedComparer); state.CompositeVisibilities.Add(modelType, visibilities); } foreach (LayeredCompositeAssemblyInfo info in module.LayeredCompositeAssembler.GetInfos(modelType).Cast <LayeredCompositeAssemblyInfo>()) { var cModel = this.NewCompositeModel(compositeModelTypeSupport, owningLayer.IQ.ApplicationModel, info, owningLayer.IQ.LayerName + "-" + module.Name); models.Add(cModel.CompositeModelID, cModel); state.CompositeModels.Add(cModel); visibilities.Add(cModel, info.Visibility); } } return(result); }