/// <summary> /// Does the validate. /// </summary> /// <param name="objectToValidate">The object to validate.</param> /// <param name="currentTarget">The current target.</param> /// <param name="key">The key.</param> /// <param name="validationResults">The validation results.</param> protected override void DoValidate(ModelBusReference objectToValidate, object currentTarget, string key, ValidationResults validationResults) { ModelElement currentElement = currentTarget as ModelElement; Debug.Assert(currentElement != null); if (!validationResults.IsValid) { return; } if (objectToValidate != null) { using (ModelBusReferenceResolver resolver = new ModelBusReferenceResolver()) { ModelElement referenced = resolver.Resolve(objectToValidate); // Check if we are not in the same model and we had visited this model before if (!currentElement.Store.Id.Equals(referenced.Store.Id) && Visited(referenced.Store.Id)) { this.LogValidationResult(validationResults, String.Format(CultureInfo.CurrentUICulture, this.MessageTemplate, ValidatorUtility.GetTargetName(currentTarget), objectToValidate.ElementDisplayName, objectToValidate.ModelDisplayName), currentTarget, key); return; } } // store the current model to compare with references // If referenced model == current model implies that we have a circular ref. alreadyVisited.Add(currentElement.Store.Id); } }
/// <summary> /// Does the validate. /// </summary> /// <param name="objectToValidate">The object to validate.</param> /// <param name="currentTarget">The current target.</param> /// <param name="key">The key.</param> /// <param name="validationResults">The validation results.</param> protected override void DoValidate(ModelBusReference objectToValidate, object currentTarget, string key, ValidationResults validationResults) { // store default message (in case the error comes from a DC element) and set our new message dcModelMessageTemplate = this.MessageTemplate; this.MessageTemplate = currentMessageTemplate; // Validate cross model references base.DoValidate(objectToValidate, currentTarget, key, validationResults); if (!validationResults.IsValid) { return; } using (ModelBusReferenceResolver resolver = new ModelBusReferenceResolver()) { ModelElement referencedElement = resolver.Resolve(objectToValidate); if (referencedElement != null) { DataContractModel dcm = referencedElement.Store.ElementDirectory.FindElements <DataContractModel>()[0]; if (dcm.ImplementationTechnology == null || String.IsNullOrWhiteSpace(dcm.ProjectMappingTable) || !dcm.ImplementationTechnology.Name.Equals(GetItName(currentTarget), StringComparison.OrdinalIgnoreCase)) { validationResults.AddResult( new ValidationResult(String.Format(CultureInfo.CurrentUICulture, this.dcModelMessageTemplate, ValidatorUtility.GetTargetName(currentTarget)), currentTarget, key, String.Empty, this)); } } } }
/// <summary> /// Does the validate. /// </summary> /// <param name="objectToValidate">The object to validate.</param> /// <param name="currentTarget">The current target.</param> /// <param name="key">The key.</param> /// <param name="validationResults">The validation results.</param> protected override void DoValidate(ModelBusReference objectToValidate, object currentTarget, string key, ValidationResults validationResults) { this.MessageTemplate = currentMessageTemplate; base.DoValidate(objectToValidate, currentTarget, key, validationResults); if (!validationResults.IsValid) { return; } ServiceReference serviceReference = currentTarget as ServiceReference; if (serviceReference == null) { return; } using (ModelBusReferenceResolver resolver = new ModelBusReferenceResolver()) { ModelElement referencedElement = resolver.Resolve(objectToValidate); if (referencedElement != null) { ServiceContractModel dcm = referencedElement.Store.ElementDirectory.FindElements <ServiceContractModel>()[0]; if (dcm.ImplementationTechnology == null || String.IsNullOrWhiteSpace(dcm.ProjectMappingTable) || !dcm.ImplementationTechnology.Name.Equals(GetItName(currentTarget), StringComparison.OrdinalIgnoreCase)) { validationResults.AddResult( new ValidationResult(String.Format(CultureInfo.CurrentUICulture, this.MessageTemplate, ValidatorUtility.GetTargetName(currentTarget)), currentTarget, key, String.Empty, this)); } } } }
private string GetDcImplementationTechnology(ModelBusReference reference) { using (ModelBusReferenceResolver resolver = new ModelBusReferenceResolver()) { ModelElement referencedElement = resolver.Resolve(reference); DataContractModel dcm = DomainModelHelper.GetElement <DataContractModel>(referencedElement.Store); return((dcm == null || dcm.ImplementationTechnology == null) ? string.Empty : dcm.ImplementationTechnology.Name); } }
/// <summary> /// Does the validate. /// </summary> /// <param name="objectToValidate">The object to validate.</param> /// <param name="currentTarget">The current target.</param> /// <param name="key">The key.</param> /// <param name="validationResults">The validation results.</param> protected override void DoValidate(ModelBusReference objectToValidate, object currentTarget, string key, ValidationResults validationResults) { base.DoValidate(objectToValidate, currentTarget, key, validationResults); if (!validationResults.IsValid) { return; } ServiceReference serviceReference = currentTarget as ServiceReference; if (serviceReference == null) { return; } using (ModelBusReferenceResolver resolver = new ModelBusReferenceResolver()) { ModelElement referencedElement = resolver.Resolve(objectToValidate); if (referencedElement != null) { ServiceContractModel scm = DomainModelHelper.GetElement <ServiceContractModel>(referencedElement.Store); if (scm != null && scm.ImplementationTechnology != null) { if (serviceReference.HostApplication.ImplementationTechnology != null && !serviceReference.HostApplication.ImplementationTechnology.Name.Equals( scm.ImplementationTechnology.Name)) { this.LogValidationResult( validationResults, string.Format(CultureInfo.CurrentCulture, this.MessageTemplate, serviceReference.Name), currentTarget, key); } } } } }