/// <summary> /// Merge des fichiers xml /// </summary> /// <param name="result">Fichier xml initial</param> /// <param name="component">The component.</param> /// <returns></returns> internal static XmlDocument MergeDeclaredConfigurations(XmlDocument result, SoftwareComponent component) { // Merge des configurations des layers foreach (AbstractLayer layer in component.Layers) { result = MergeConfiguration(result, layer.Configurations); } // Récupération des configurations des librairies externes ReferenceWalker walker = new ReferenceWalker(ReferenceScope.Runtime, new ConfigurationMode()); ConfigurationVisitor visitor = new ConfigurationVisitor(false); walker.Traverse(visitor, component.Model); result = MergeConfiguration(result, visitor.Configurations); // Il faut toujours placer la configSection en premier XmlNode cfgNode = result.SelectSingleNode("/configuration"); if (cfgNode != null) { XmlNode cs = cfgNode.SelectSingleNode("configSections"); if (cs != null) { cfgNode.RemoveChild(cs); cfgNode.InsertAfter(cs, null); } } return(result); }
/// <summary> /// Handles the Click event of the button1 control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param> private void button1_Click(object sender, EventArgs e) { try { ReferenceScope scope = GetReferenceScope(); lstArtefacts.Items.Clear(); ConfigurationMode mode = new ConfigurationMode(cbMode.Text); ReferenceWalker w = new ReferenceWalker(scope, mode); string folder = null; if ((string)cbAction.SelectedItem == "current solution") { folder = @"c:\[sln]\"; } ReferenceVisitor rv = new ReferenceVisitor(scope, folder); w.Traverse(rv, _system); // ReferenceContext context = new ReferenceContext(mode, scope, (ReferenceContext.ReferenceSource)cbAction.SelectedItem, CandleModel.GetInstance(((ModelElement)system).Store), "project folder\\..\\"); foreach (string item in rv.References) { lstArtefacts.Items.Add(item); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// Liste de tous les types disponibles dans le modèle /// </summary> /// <param name="sourceLayer">Source à partir duquel on veut récupérer les types (null pour récupérer à partir du modelsLayer)</param> /// <param name="includeExternalTypes">Indique si on doit inclure les types externes</param> /// <returns></returns> public IList <DataType> GetAllTypes(SoftwareLayer sourceLayer, bool includeExternalTypes) { List <DataType> types = new List <DataType>(); foreach (Package package in this.Packages) { foreach (DataType clazz in package.Types) { types.Add(clazz); } } if (includeExternalTypes) { // Référence entre les couches modèles List <Guid> models = new List <Guid>(); foreach (ExternalComponent sys in this.ReferencedExternalComponents) { CandleModel model = sys.ReferencedModel; if (model != null && model.DataLayer != null) { models.Add(model.Id); types.AddRange(model.DataLayer.AllTypes); } } if (sourceLayer != null) { ExternalDataLayerVisitor visitor = new ExternalDataLayerVisitor(types, models); ReferenceWalker walker = new ReferenceWalker(ReferenceScope.Compilation, new ConfigurationMode()); walker.Traverse(visitor, sourceLayer); } } return(types); }
/// <summary> /// Populates the specified current component. /// </summary> /// <param name="currentComponent">The current component.</param> /// <param name="model">The model.</param> private void Populate(SoftwareComponent currentComponent, CandleModel model) { _currentComponent = currentComponent; lstInheritedConfigurations.AutoGenerateColumns = false; lstConfigurations.AutoGenerateColumns = false; if (currentComponent != null) { foreach (SoftwareLayer layer in currentComponent.Layers) { ColLayer.Items.Add(layer.Name); } colVisibility.Items.Add(Visibility.Public); colVisibility.Items.Add(Visibility.Private); // Remplissage des configurations courantes _items = new ItemList(); foreach (SoftwareLayer layer in currentComponent.Layers) { foreach (ConfigurationPart cfg in layer.Configurations) { Item item = new Item(); item.ConfigName = cfg.Name; item.XmlContent = cfg.XmlContent; item.LayerName = layer.Name; item.LayerId = layer.Id; item.InitialEnabled = item.Enabled = cfg.Enabled; item.IsExternal = false; item.Visibility = cfg.Visibility; _items.Add(item); } } lstConfigurations.DataSource = _items; } else // On enlève cette page { tabControl1.TabPages.RemoveAt(0); } // Configurations externes ReferenceWalker walker = new ReferenceWalker(ReferenceScope.Runtime, new ConfigurationMode()); ConfigurationVisitor visitor = new ConfigurationVisitor(true); walker.Traverse(visitor, model); lstInheritedConfigurations.DataSource = visitor.Configurations.FindAll(delegate(ConfigurationPart p) { return(p.Enabled); }); }
/// <summary> /// Execute the command /// </summary> public void Exec() { if (!Enabled) { return; } // ReferenceWalker walker = new ReferenceWalker(ReferenceScope.All, new ConfigurationMode()); ReferenceVisitor visitor = new ReferenceVisitor(ReferenceScope.All); walker.Traverse(visitor, _externalModel); List <CandleModel> models = new List <CandleModel>(); foreach (CandleModel model in visitor.Models) { if (_force || model.MetaData.IsLastVersion() == false) { models.Add(model); } } SelectModelForm form = new SelectModelForm(models, visitor.Models); if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) { foreach (CandleModel model in form.SelectedModels) { RepositoryManager.Instance.ModelsMetadata.GetModelInLocalRepository(model.MetaData); } if (_externalComponent != null) { using (Transaction transaction = _externalComponent.Store.TransactionManager.BeginTransaction("Update ports")) { if (_externalComponent.UpdateFromModel()) { transaction.Commit(); } } } } }
/// <summary> /// Liste des artifacts d'un modèle /// </summary> /// <param name="metadata"></param> /// <returns></returns> public List <string> GetArtifacts(ComponentModelMetadata metadata) { ComponentSig sig = new ComponentSig(metadata); List <string> artifacts; if (!_artifactsCache.TryGetValue(sig, out artifacts)) { ModelLoader loader = ModelLoader.GetLoader(metadata); if (loader != null && loader.Model != null) { ReferenceWalker walker = new ReferenceWalker(ReferenceScope.Publish, new ConfigurationMode("*")); ReferenceVisitor visitor = new ReferenceVisitor(ReferenceScope.Publish); walker.Traverse(visitor, loader.Model); artifacts = new List <string>(); foreach (string artifactFileName in visitor.References) { artifacts.Add(Path.GetFileName(artifactFileName)); } } _artifactsCache.Add(sig, artifacts); } return(artifacts); }