public static List <UoWCriteria> CriteriaOutputForm(CslaObjectInfo info, UnitOfWorkFunction function, bool generatingCriteria) { var result = new List <UoWCriteria>(); var propertyDeclarationCache = new Dictionary <string, PropertyDeclaration>(); foreach (var uowProperty in info.UnitOfWorkProperties) { propertyDeclarationCache[uowProperty.TypeName] = uowProperty.DeclarationMode; } 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 && CslaTemplateHelperCS.IsEditableType(crit.ParentObject.ObjectType)))) { break; } if (function == UnitOfWorkFunction.Getter && !crit.IsGetter) { break; } if (function == UnitOfWorkFunction.Deleter && !crit.IsDeleter) { break; } var elementCriteria = new ElementCriteria(); elementCriteria.ParentObject = crit.ParentObject.ObjectName; elementCriteria.DeclarationMode = propertyDeclarationCache[elementCriteria.ParentObject]; elementCriteria.IsGetter = !CslaTemplateHelperCS.IsEditableType(crit.ParentObject.ObjectType); 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; elementCriteria.Type = CslaTemplateHelperCS.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; newElementCriteria.Type = "bool"; 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); }
public static List <UoWCriteria> CriteriaOutputForm(CslaObjectInfo info, UnitOfWorkFunction function) { return(CriteriaOutputForm(info, function, false)); }