/// <summary> /// Copie des opérations /// </summary> /// <param name="source">Opérations qui seront copiées</param> /// <param name="target">Cible de la copie</param> public static void CopyOperations(TypeWithOperations source, TypeWithOperations target) { // Copie des opérations foreach (Operation op in source.Operations) { target.Operations.Add(Operation.CopyOperation(target.Store, op)); } }
/// <summary> /// Création d'un nouveau contrat /// </summary> /// <param name="port">The port.</param> /// <param name="layer">The layer.</param> /// <returns></returns> private static ServiceContract CreateContract(CandleElement port, InterfaceLayer layer) { string name = StrategyManager.GetInstance(port.Store).NamingStrategy.CreateElementName(layer, port.RootName); // Vérification de l'existence foreach (ServiceContract sc in layer.ServiceContracts) { if (sc.Name == name) { return(sc); } } // Sinon création avec copie des opérations ServiceContract contract = new ServiceContract(layer.Store); layer.ServiceContracts.Add(contract); contract.RootName = port.RootName; UnplacedModelHelper.RegisterNewModel(layer.Store, contract); TypeWithOperations copiedContract = null; if (port != null) { if (port is ServiceContract || port is ExternalServiceContract) { copiedContract = port as TypeWithOperations; contract.Name = name; } else { ClassImplementation clazz = port as ClassImplementation; contract.Name = StrategyManager.GetInstance(clazz.Store).NamingStrategy.CreateElementName(layer, clazz.Name); if (clazz.Contract != null) { copiedContract = clazz.Contract; } contract.Comment = clazz.Comment; } } if (copiedContract != null) { TypeWithOperations.CopyOperations(copiedContract, contract); } return(contract); }
/// <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)); } } } } } }