Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }