Example #1
0
        /// <summary>
        /// Récupére la liste des services utilisés par cette couche. Cette méthode assure que les services sont uniques.
        /// </summary>
        /// <param name="mode">Mode à prendre en compte</param>
        /// <returns></returns>
        public List <ClassUsesOperations> GetServicesUsed(ConfigurationMode mode)
        {
            List <ClassUsesOperations> services = new List <ClassUsesOperations>();
            List <TypeWithOperations>  types    = GetImplementations();

            if (types == null || types.Count == 0)
            {
                return(services);
            }

            List <Guid> doublons = new List <Guid>();

            foreach (TypeWithOperations clazz in types)
            {
                foreach (ClassUsesOperations service in ClassUsesOperations.GetLinksToServicesUsed(clazz))
                {
                    if (!mode.CheckConfigurationMode(service.ConfigurationMode) ||
                        doublons.Contains(service.TargetService.Id))
                    {
                        continue;
                    }
                    doublons.Add(service.TargetService.Id);
                    services.Add(service);
                }
            }
            return(services);
        }
Example #2
0
        /// <summary>
        /// Gets the service references.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="context">The context.</param>
        /// <param name="layers">The layers.</param>
        /// <returns></returns>
        protected IEnumerable <ReferenceItem> GetServiceReferences(TypeWithOperations item, ReferenceContext context,
                                                                   List <Guid> layers)
        {
            foreach (NamedElement service in item.ServicesUsed)
            {
                IList <ClassUsesOperations> externalServiceLinks = ClassUsesOperations.GetLinksToServicesUsed(item);
                foreach (ClassUsesOperations link in externalServiceLinks)
                {
                    if (context.Mode.CheckConfigurationMode(link.ConfigurationMode) && context.CheckScope(link.Scope))
                    {
                        if (service is ExternalServiceContract)
                        {
                            ExternalServiceContract contract = service as ExternalServiceContract;

                            // Ici on part du principe qu'un composant ne publie qu'une couche donc
                            // on ne prend en considèration que le 1er port rencontré. Si ce n'était pas le
                            // cas, il faudrait d'abord créer un tableau global des ports rencontrés PUIS faire
                            // un RetrieveReferencesForExternalComponent avec tous les ports.
                            List <Guid> ports2 = new List <Guid>();
                            ports2.Add(contract.ComponentPortMoniker);
                            yield return
                                (new ReferenceItem(this, contract.Parent, link.Scope, ports2, context.IsExternal));
                        }
                        else if (service is ServiceContract)
                        {
                            ServiceContract contract = service as ServiceContract;
                            if (!layers.Contains(contract.Layer.Id))
                            {
                                layers.Add(contract.Layer.Id);
                                yield return(new ReferenceItem(this, contract.Layer, context.IsExternal));
                            }
                        }
                        else if (service is ClassImplementation)
                        {
                            ClassImplementation targetClazz = service as ClassImplementation;
                            if (!layers.Contains(targetClazz.Layer.Id))
                            {
                                layers.Add(targetClazz.Layer.Id);
                                yield return(new ReferenceItem(this, targetClazz.Layer, context.IsExternal));
                            }
                        }
                    }
                }
            }
        }