/// <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));
                    }
                }
            }
        }
Exemple #3
0
        /// <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);
                        }
                    }
                }
            }
        }