/// <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);
            }
        }
Exemplo n.º 2
0
 protected override string GetMessage(object objectToValidate, string key)
 {
     return(ValidatorUtility.ShowFormattedMessage(
                this.MessageTemplate,
                ValidatorUtility.GetTargetName(currentTarget),
                this.maxLength,
                base.GetMessage(objectToValidate, key)));
 }
        /// <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));
                    }
                }
            }
        }
Exemplo n.º 4
0
 private static string GetElementName(ModelElement element)
 {
     return(element != null?
            ValidatorUtility.GetTargetName(element) :
                Guid.NewGuid().ToString());
 }
        // MBR format:
        // modelbus://logicalAdapterId/model display name/element display name/adapter reference data.
        // V3 format:
        // mel://[DSLNAMESPACE]\[MODELELEMENTTYPE]\[MODELELEMENT]@[PROJECT]\[MODELFILE]
        private object ConvertToModelBusReference <T>(SerializationContext serializationContext, string input)
        {
            if (serializationContext == null)
            {
                throw new ArgumentNullException("serializationContext");
            }
            if (string.IsNullOrWhiteSpace(input) ||
                !typeof(ModelBusReference).IsAssignableFrom(typeof(T)))
            {
                return(default(T));
            }

            // filter out the schema part
            input = input.Replace(MelSchema, string.Empty);

            string[] data = input.Split(new string[] { "@" }, StringSplitOptions.RemoveEmptyEntries);
            if (data.Length != 2)
            {
                serializationContext.Result.AddMessage(BuildSerializationMessage(Properties.Resources.InvalidMoniker, input));
                return(default(T));
            }

            string[] modelData = data[0].Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
            if (modelData.Length != 3)
            {
                serializationContext.Result.AddMessage(BuildSerializationMessage(Properties.Resources.InvalidMoniker, input));
                return(default(T));
            }

            string[] locationData = data[1].Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
            if (locationData.Length != 2)
            {
                serializationContext.Result.AddMessage(BuildSerializationMessage(Properties.Resources.InvalidMoniker, input));
                return(default(T));
            }
            // set full path to model file
            if (!Path.IsPathRooted(locationData[1]))
            {
                locationData[1] = Path.Combine(Path.GetDirectoryName(serializationContext.Location), locationData[1]);
            }

            ModelBusReference result = null;
            IModelBus         bus    = serializationContext[ModelBusReferencePropertySerializer.ModelBusLoadContextKey] as IModelBus;

            if (bus != null)
            {
                using (ModelBusAdapterManager manager = bus.GetAdapterManager(LogicalAdapterId))
                {
                    ModelBusReference reference = null;
                    if (manager.TryCreateReference(out reference, Path.ChangeExtension(locationData[1], FileExtension)))
                    {
                        using (ModelBusAdapter adapter = manager.CreateAdapter(reference))
                        {
                            IModelingAdapterWithStore storeAdapter = adapter as IModelingAdapterWithStore;
                            if (storeAdapter.Store != null)
                            {
                                foreach (ModelElement mel in FilterElementsByType(storeAdapter.Store, modelData[1]))
                                {
                                    if (ValidatorUtility.GetTargetName(mel).Equals(modelData[2], StringComparison.OrdinalIgnoreCase))
                                    {
                                        return(adapter.GetElementReference(mel));
                                    }
                                }
                                // If we are still here, we could not find any match so try will all mels
                                foreach (ModelElement mel in FilterElementsByType(storeAdapter.Store, string.Empty))
                                {
                                    if (ValidatorUtility.GetTargetName(mel).Equals(modelData[2], StringComparison.OrdinalIgnoreCase))
                                    {
                                        return(adapter.GetElementReference(mel));
                                    }
                                }
                            }
                        }
                    }
                }
            }

            serializationContext.Result.AddMessage(BuildSerializationMessage(Properties.Resources.ReferenceElementNotFound, input));
            return(result);
        }
Exemplo n.º 6
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));
                    }
                }
            }
        }