예제 #1
0
        private static void ConfigureViewModelSettings(ViewModelSettings vm, NamespaceSettings ns,
                                                       RenderSettings settings, string entity = null, string entityNamespace = null)
        {
            // view model type can not be null or empty; so if possible we'll come up with one
            // using the entity name if not given, otherwise we fail
            if (string.IsNullOrWhiteSpace(vm.type))
            {
                if (!string.IsNullOrWhiteSpace(entity))
                {
                    vm.type =
                        $"{ns.vmDefaults.typePrefix}{entity}{ns.vmDefaults.typeSuffix}";
                }
                else
                {
                    throw new InvalidRenderSettingsException("Parameter 'type' is required for adjunct view model definitions");
                }
            }

            // inherit emit to directory from namespace view model setting defaults if not
            // specified
            vm.emitTo = vm.emitTo ?? ns.vmDefaults.emitTo;
            vm.emitTo = EstablishSettingsDirectory(settings.emitDir, vm.emitTo,
                                                   "View model source file directory ('emitTo')");
            vm.EntityNamespace(entityNamespace);
            vm.EntityType(entity);
            vm.ViewModelNamespace(ns.mapToNamespace);

            InheritViewModelSettingsBase(vm, ns.vmDefaults);

            AssertPropertyDefinitionsValid(vm);
            AssertCollectionDefinitionsValid(vm);
        }
예제 #2
0
 private static void AssertViewModelSettingsValid(string entityType, string nameSpace,
                                                  ViewModelSettings vm)
 {
     // entity type must be present for view model settings
     if (string.IsNullOrWhiteSpace(entityType))
     {
         throw new InvalidRenderSettingsException($"Entity object type not specified for a view model in namespace '{nameSpace}'");
     }
     if (vm == null)
     {
         throw new InvalidRenderSettingsException($"Null view model settings encountered for entity '{entityType}'");
     }
 }
예제 #3
0
        public static void IncludeMemberDefinition(MemberDefinition md, ViewModelSettings vm)
        {
            MemberDefinition xMember = null;
            var isProperty           = md is PropertyDefinition;

            // merge existing member settings, if any
            if (isProperty && vm.properties.ContainsKey(md.Name()))
            {
                xMember = vm.properties[md.Name()];
            }
            else if (!isProperty && vm.collections.ContainsKey(md.Name()))
            {
                xMember = vm.collections[md.Name()];
            }

            if (xMember != null)
            {
                // read only setting on existing member only relevant if not already true on new one
                md.readOnly = md.readOnly ? md.readOnly : xMember.readOnly;
                md.summary  = md.summary ?? xMember.summary;
                // replace existing member
                if (isProperty)
                {
                    vm.properties[md.Name()] = md as PropertyDefinition;
                }
                else
                {
                    vm.collections[md.Name()] = md as CollectionDefinition;
                }
            }
            else
            {
                // add new member
                if (isProperty)
                {
                    vm.properties.Add(md.Name(), md as PropertyDefinition);
                }
                else
                {
                    vm.collections.Add(md.Name(), md as CollectionDefinition);
                }
            }
        }
예제 #4
0
        public static void IncludeViewModelSettings(RenderSettings settings, ViewModelSettings vm)
        {
            // get target namespace
            var ns = settings.namespaces[vm.EntityNamespace()];

            // merge existing view model settings, if there are any
            if (ns.viewModels.ContainsKey(vm.EntityType()))
            {
                var xVM = ns.viewModels[vm.EntityType()];
                vm.type   = vm.type ?? xVM.type;
                vm.emitTo = vm.emitTo ?? xVM.emitTo;
                InheritViewModelSettingsBase(vm, xVM);

                // replace existing model with one merged with attribute settings
                ns.viewModels[vm.EntityType()] = vm;
            }
            // if no settings exist, merge with view model defaults for namespace and add it in
            else
            {
                ConfigureViewModelSettings(vm, ns, settings, vm.EntityType(), vm.EntityNamespace());
                ns.viewModels.Add(vm.EntityType(), vm);
            }
        }
예제 #5
0
 private static void AssertCollectionDefinitionsValid(ViewModelSettings vm)
 {
     AssertMemberDefinitionsValid(false, vm.type, vm.properties);
 }
예제 #6
0
 private static void AssertPropertyDefinitionsValid(ViewModelSettings vm)
 {
     AssertMemberDefinitionsValid(true, vm.type, vm.properties);
 }