private static CriteriaPropertyCollection GetFakeCreateCriteria(CslaObjectInfo info, int createIndex) { var isCSharp = GeneratorController.Current.CurrentUnit.GenerationParams.OutputLanguage == CodeLanguage.CSharp; var result = new CriteriaPropertyCollection(); var index = 0; foreach (var crit in info.CriteriaObjects) { if (crit.IsGetter && !crit.IsCreator) { index++; if (index == createIndex) { var criteriaPropertyCollection = CriteriaPropertyCollection.Clone(crit.Properties); foreach (var criteriaProperty in criteriaPropertyCollection) { if (isCSharp) { criteriaProperty.UnitOfWorkFactoryParameter = "true, " + CslaTemplateHelperCS.GetDataTypeInitExpression(criteriaProperty, criteriaProperty.PropertyType); } else { criteriaProperty.UnitOfWorkFactoryParameter = "true, " + CslaTemplateHelperVB.GetDataTypeInitExpression(criteriaProperty, criteriaProperty.PropertyType); } } result.AddRange(criteriaPropertyCollection); break; } } } return(result); }
public static List <UoWCriteria> CriteriaOutputForm(CslaObjectInfo info, UnitOfWorkFunction function, bool generatingCriteria) { var isCSharp = GeneratorController.Current.CurrentUnit.GenerationParams.OutputLanguage == CodeLanguage.CSharp; var result = new List <UoWCriteria>(); var propertyDeclarationCache = new Dictionary <string, PropertyDeclaration>(); var propertyNameCache = new Dictionary <string, string>(); foreach (var uowProperty in info.UnitOfWorkProperties) { propertyDeclarationCache[uowProperty.TypeName] = uowProperty.DeclarationMode; propertyNameCache[uowProperty.TypeName] = uowProperty.Name; } var criteriaCollectionCounter = 0; foreach (var criteriaCollection in info.UnitOfWorkCriteriaObjects) { var creatorCounter = criteriaCollection.Count(crit => crit.IsCreator); if (function == UnitOfWorkFunction.Creator) { if (creatorCounter == 0) { continue; } } else if (function == UnitOfWorkFunction.Getter) { if (creatorCounter != 0) { continue; } } var uowCriteria = new UoWCriteria(); criteriaCollectionCounter++; foreach (var crit in criteriaCollection) { if (function == UnitOfWorkFunction.Creator && (!crit.IsCreator && (crit.IsGetter && crit.ParentObject.ObjectType.IsEditableType()))) { break; } if (function == UnitOfWorkFunction.Getter && !crit.IsGetter) { break; } if (function == UnitOfWorkFunction.Deleter && !crit.IsDeleter) { break; } var elementCriteria = new ElementCriteria { ParentObject = crit.ParentObject.ObjectName }; elementCriteria.PropertyName = propertyNameCache[elementCriteria.ParentObject]; elementCriteria.DeclarationMode = propertyDeclarationCache[elementCriteria.ParentObject]; elementCriteria.IsGetter = !crit.ParentObject.ObjectType.IsEditableType(); if (crit.Properties.Count == 0) { uowCriteria.ElementCriteriaList.Add(elementCriteria); } else { elementCriteria.Name = crit.Name; elementCriteria.Namespace = GetElementCriteriaNamesapce(crit); elementCriteria.Type = crit.Name; if (crit.Properties.Count == 1) { elementCriteria.Name = crit.Properties[0].Name; if (isCSharp) { elementCriteria.Type = CslaTemplateHelperCS.GetDataTypeGeneric(crit.Properties[0], crit.Properties[0].PropertyType); } else { elementCriteria.Type = CslaTemplateHelperVB.GetDataTypeGeneric(crit.Properties[0], crit.Properties[0].PropertyType); } } if (generatingCriteria) { var newElementCriteria = new ElementCriteria(); foreach (var prop in crit.Properties.Where(prop => !string.IsNullOrEmpty(prop.UnitOfWorkFactoryParameter))) { newElementCriteria.ParentObject = elementCriteria.Parameter; newElementCriteria.DeclarationMode = elementCriteria.DeclarationMode; newElementCriteria.IsGetter = elementCriteria.IsGetter; newElementCriteria.Namespace = elementCriteria.Namespace; if (isCSharp) { newElementCriteria.Type = CslaTemplateHelperCS.GetDataType(TypeCodeEx.Boolean); } else { newElementCriteria.Type = CslaTemplateHelperVB.GetDataType(TypeCodeEx.Boolean); } newElementCriteria.Name = "Create" + elementCriteria.ParentObject; } uowCriteria.ElementCriteriaList.Add(newElementCriteria); } else { foreach (var prop in crit.Properties.Where(prop => !string.IsNullOrEmpty(prop.UnitOfWorkFactoryParameter))) { if (!string.IsNullOrEmpty(elementCriteria.Parameter)) { elementCriteria.Parameter += ", "; } elementCriteria.Parameter += prop.UnitOfWorkFactoryParameter; } } uowCriteria.ElementCriteriaList.Add(elementCriteria); } } var elementCriteriaListCount = uowCriteria.ElementCriteriaList.Count(elementCriteria => !string.IsNullOrEmpty(elementCriteria.Name)); if ((generatingCriteria && elementCriteriaListCount > 1) || (!generatingCriteria && elementCriteriaListCount > 0)) { uowCriteria.CriteriaName = GetNumberedCriteria(info.UnitOfWorkCriteriaObjects.Count, criteriaCollectionCounter); } else { criteriaCollectionCounter--; } if (uowCriteria.ElementCriteriaList.Count > 0) { result.Add(uowCriteria); } } return(result); }