/// <exclude /> public bool ValidateNewFieldDescriptors(IEnumerable <DataFieldDescriptor> newDataFieldDescriptors, string keyFieldName, out string message) { Verify.ArgumentNotNull(newDataFieldDescriptors, "newDataFieldDescriptors"); newDataFieldDescriptors = newDataFieldDescriptors.Evaluate(); message = null; if (!newDataFieldDescriptors.Any(f => f.Name != keyFieldName)) { message = Texts.MissingFields; return(false); } if (keyFieldName != IdFieldName && newDataFieldDescriptors.Any(dfd => dfd.Name == IdFieldName)) { message = Texts.FieldNameCannotBeUsed(IdFieldName); return(false); } return(true); }
/// <exclude /> public bool ValidateByCompile(out string errorMessage) { var dataTypeDescriptor = _oldDataTypeDescriptor == null?CreateNewDataTypeDescriptor() : CreateUpdatedDataTypeDescriptor(); var classFullName = (dataTypeDescriptor.Namespace + "." + dataTypeDescriptor.Name).Replace(" ", string.Empty); var classFullNameWithDot = classFullName + "."; foreach (var reservedNamespace in ReservedNamespaces) { if (classFullNameWithDot.StartsWith(reservedNamespace + ".", StringComparison.InvariantCultureIgnoreCase)) { errorMessage = Texts.NamespaceIsReserved; return(false); } } foreach (var namePart in classFullName.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries)) { if (!IsCSharpValidIdentifier(namePart)) { errorMessage = Texts.TypeNameIsInvalidIdentifier(classFullName); return(false); } } foreach (var dataField in dataTypeDescriptor.Fields) { if (!IsCSharpValidIdentifier(dataField.Name)) { errorMessage = Texts.FieldNameCannotBeUsed(dataField.Name); return(false); } } // Checking for name collisions with Composite.dll if (classFullName.StartsWith(CompositeNamespace + ".", StringComparison.InvariantCultureIgnoreCase)) { foreach (var type in typeof(IData).Assembly.GetTypes()) { var typeNameWithDot = type.FullName + "."; if (classFullNameWithDot.StartsWith(typeNameWithDot, StringComparison.InvariantCultureIgnoreCase) || typeNameWithDot.StartsWith(classFullNameWithDot, StringComparison.InvariantCultureIgnoreCase)) { errorMessage = Texts.CompileErrorWhileAddingType; return(false); } } } var compatibilityCheckResult = CodeCompatibilityChecker.CheckCompatibilityWithAppCodeFolder(dataTypeDescriptor); if (!compatibilityCheckResult.Successful) { errorMessage = _oldDataTypeDescriptor == null ? Texts.CompileErrorWhileAddingType : Texts.CompileErrorWhileChangingType; errorMessage += compatibilityCheckResult.ErrorMessage; return(false); } errorMessage = string.Empty; return(true); }
/// <exclude /> public bool ValidateNewTypeFullName(string typeName, string typeNamespace, out string message) { Verify.ArgumentNotNullOrEmpty(typeName, "typeName"); Verify.ArgumentNotNullOrEmpty(typeNamespace, "typeNamespace"); message = null; if (typeNamespace.Split('.').Contains(typeName)) { message = Texts.TypeNameInNamespace(typeName, typeNamespace); return(false); } if (_oldDataTypeDescriptor != null) { if (_oldDataTypeDescriptor.Name == typeName && _oldDataTypeDescriptor.Namespace == typeNamespace) { return(true); } var interfaceType = _oldDataTypeDescriptor.GetInterfaceType(); if (interfaceType.GetRefereeTypes().Count > 0) { message = Texts.TypesAreReferencing; return(false); } } var typeFullname = StringExtensionMethods.CreateNamespace(typeNamespace, typeName, '.'); foreach (var dtd in DataMetaDataFacade.GeneratedTypeDataTypeDescriptors) { var fullname = StringExtensionMethods.CreateNamespace(dtd.Namespace, dtd.Name, '.'); if (typeFullname == fullname) { message = Texts.TypesNameClash; return(false); } } var partNames = typeFullname.Split('.'); var sb = new StringBuilder(partNames[0]); for (var i = 1; i < partNames.Length; i++) { var exists = TypeManager.HasTypeWithName(sb.ToString()); if (exists) { message = Texts.NameSpaceIsTypeTypeName(sb.ToString()); return(false); } sb.Append("."); sb.Append(partNames[i]); } return(true); }