/// <summary>
        /// Création du fichier modèle à partir du nom sélectionné ou un fichier vide
        /// si problème
        /// </summary>
        /// <param name="template">The template.</param>
        /// <param name="targetFileName">Name of the target file.</param>
        private static void CreateModelFileName(string template, string targetFileName)
        {
            bool createEmpty = true;

            if (File.Exists(targetFileName))
            {
                createEmpty = false;
            }
            else if (template != null)
            {
                try
                {
                    createEmpty =
                        !RepositoryManager.Instance.GetFileFromRepository(RepositoryCategory.Configuration, template,
                                                                          targetFileName);
                }
                catch
                {
                }
            }

            if (createEmpty)
            {
                CandleModel         model  = ModelLoader.CreateModel(Path.GetFileNameWithoutExtension(targetFileName), new VersionInfo(1, 0, 0, 0));
                SerializationResult result = new SerializationResult();
                CandleSerializationHelper.Instance.SaveModel(result, model, targetFileName);
            }

            // Modification de l'identifiant du modele
            Dictionary <string, Guid> affectedIds = ReplaceAllIdsInModel(targetFileName);

            // Le diagramme associé
            template        = template + ".diagram";
            targetFileName += ".diagram";
            if (
                RepositoryManager.Instance.GetFileFromRepository(RepositoryCategory.Configuration, template,
                                                                 targetFileName))
            {
                ReplaceAllIdsInDiagram(targetFileName, affectedIds);
            }
        }
Exemple #2
0
        /// <summary>
        /// Sélection d'un modèle
        /// </summary>
        /// <param name="component">The component.</param>
        /// <param name="metaData">The meta data.</param>
        /// <returns></returns>
        bool IModelsMetadata.SelectModel(ExternalComponent component, out ComponentModelMetadata metaData)
        {
            metaData = null;

            // Ici on veut saisir le fichier décrivant le système
            ComponentType?ct = null;

            if (component.MetaData != null)
            {
                ct = component.MetaData.ComponentType;
            }

            RepositoryTreeForm wizard = new RepositoryTreeForm(true, ct);

            if (wizard.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                // On doit le créer
                if (wizard.SelectedItem == null)
                {
                    //
                    // Création d'un composant externe
                    //
                    if (component.Name == String.Empty)
                    {
                        PromptBox pb = new PromptBox("Name of the new component");
                        if (pb.ShowDialog() != System.Windows.Forms.DialogResult.OK)
                        {
                            return(false);
                        }

                        // Vérification des doublons.
                        if (_metadatas.NameExists(pb.Value))
                        {
                            IIDEHelper ide = ServiceLocator.Instance.IDEHelper;
                            if (ide != null)
                            {
                                ide.ShowMessage("This model already exists in this model.");
                            }
                            return(false);
                        }

                        component.Name = pb.Value;
                    }

                    // Création d'un modèle vide dans un répertoire temporaire
                    string relativeModelFileName = component.Name + ModelConstants.FileNameExtension;
                    string fn = Utils.GetTemporaryFileName(relativeModelFileName);
                    Directory.CreateDirectory(System.IO.Path.GetDirectoryName(fn));

                    // Persistence du modèle
                    CandleModel model = ModelLoader.CreateModel(component.Name, component.Version);
                    component.ModelMoniker = model.Id;
                    SerializationResult result = new SerializationResult();
                    CandleSerializationHelper.Instance.SaveModel(result, model, fn);

                    // Et ouverture du modèle
                    ServiceLocator.Instance.ShellHelper.Solution.DTE.ItemOperations.OpenFile(fn, EnvDTE.Constants.vsViewKindDesigner);
                }
                else // Sinon affectation
                {
                    metaData = wizard.SelectedItem;
                    ExternalComponent externalComponent = component.Model.FindExternalComponent(metaData.Id);
                    if (externalComponent != null)
                    {
                        IIDEHelper ide = ServiceLocator.Instance.IDEHelper;
                        if (ide != null)
                        {
                            ide.ShowMessage("This model already exists in this model.");
                        }
                        return(false);
                    }
                    metaData.UpdateComponent(component);
                }

                return(true); // On ne passe pas dans le rollback
            }
            return(false);
        }