示例#1
0
        private ModelElement LoadPartition(Partition partition, string modelFile)
        {
            if (string.IsNullOrEmpty(modelFile) || !File.Exists(modelFile))
            {
                base.ModelBus.LogError(ErrorCategory.Error, Microsoft.VisualStudio.TextTemplating.Modeling.ModelBusExceptionMessages.GetInvalidModelFilePath(modelFile));
                return(null);
            }
            ISerializerLocator serializerLocator = this.CreateSerializerLocator();

            if (serializerLocator == null)
            {
                base.ModelBus.LogError(ErrorCategory.Error, Microsoft.VisualStudio.TextTemplating.Modeling.ModelBusExceptionMessages.GetErrorLocateSerializer(modelFile));
                return(null);
            }
            IDomainModelSerializer serializerFromFileName = serializerLocator.GetSerializerFromFileName(modelFile);

            if (serializerFromFileName == null)
            {
                base.ModelBus.LogError(ErrorCategory.Error, Microsoft.VisualStudio.TextTemplating.Modeling.ModelBusExceptionMessages.GetErrorLocateSerializer(modelFile));
                return(null);
            }
            Type domainModelType = serializerFromFileName.DomainModelType;

            if (!(from i in partition.DomainDataDirectory.DomainModels select i.ImplementationType).Any <Type>(t => object.Equals(t, domainModelType)))
            {
                partition.Store.LoadDomainModels(new Type[] { domainModelType });
            }
            SerializationResult serializationResult = new SerializationResult();
            ModelElement        element             = null;

            using (Transaction transaction = partition.Store.TransactionManager.BeginTransaction("Load model", true))
            {
                element = serializerFromFileName.LoadModel(serializationResult, partition, modelFile, serializerLocator);
                if (!serializationResult.Failed)
                {
                    transaction.Commit();
                }
            }
            if (!serializationResult.Failed && (element != null))
            {
                return(element);
            }
            base.ModelBus.LogError(ErrorCategory.Error, Microsoft.VisualStudio.TextTemplating.Modeling.ModelBusExceptionMessages.GetErrorLoadFailed(modelFile));
            if (serializationResult.Failed)
            {
                foreach (SerializationMessage message in serializationResult)
                {
                    base.ModelBus.LogError(FromKind(message.Kind), message.Message);
                }
            }
            return(null);
        }