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); }
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}'"); } }
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); } } }
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); } }
private static void AssertCollectionDefinitionsValid(ViewModelSettings vm) { AssertMemberDefinitionsValid(false, vm.type, vm.properties); }
private static void AssertPropertyDefinitionsValid(ViewModelSettings vm) { AssertMemberDefinitionsValid(true, vm.type, vm.properties); }