예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
            }
        }
예제 #3
0
파일: DataLayer.cs 프로젝트: malain/candle
        /// <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);
        }
예제 #4
0
        /// <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); });
        }
예제 #5
0
        /// <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();
                        }
                    }
                }
            }
        }
예제 #6
0
        /// <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);
        }