public LayoutInfo ConvertStringToLayoutInfo(string layoutInfo, Store store) { LayoutInfo lInfo = null; Microsoft.VisualStudio.Modeling.SerializationResult serializationResult = new Microsoft.VisualStudio.Modeling.SerializationResult(); DomainXmlSerializerDirectory directory = this.GetDirectory(store); System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("ISO-8859-1"); Microsoft.VisualStudio.Modeling.SerializationContext serializationContext = new SerializationContext(directory, "", serializationResult); this.InitializeSerializationContext(store.DefaultPartition, serializationContext, false); DomainClassXmlSerializer rootSerializer = directory.GetSerializer(LayoutInfo.DomainClassId); using (System.Xml.XmlReader reader = System.Xml.XmlReader.Create(new System.IO.StringReader(layoutInfo))) { reader.Read(); // Move to the first node - will be the XmlDeclaration if there is one. serializationResult.Encoding = encoding; reader.MoveToContent(); lInfo = rootSerializer.TryCreateInstance(serializationContext, reader, store.DefaultPartition) as LayoutInfo; rootSerializer.Read(serializationContext, lInfo, reader); } return(lInfo); }
public LayoutInfo ConvertStringToLayoutInfo(string layoutInfo, Store store) { LayoutInfo lInfo = null; Microsoft.VisualStudio.Modeling.SerializationResult serializationResult = new Microsoft.VisualStudio.Modeling.SerializationResult(); DomainXmlSerializerDirectory directory = this.GetDirectory(store); System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("ISO-8859-1"); Microsoft.VisualStudio.Modeling.SerializationContext serializationContext = new SerializationContext(directory, "", serializationResult); this.InitializeSerializationContext(store.DefaultPartition, serializationContext, false); DomainClassXmlSerializer rootSerializer = directory.GetSerializer(LayoutInfo.DomainClassId); using(System.Xml.XmlReader reader = System.Xml.XmlReader.Create(new System.IO.StringReader(layoutInfo)) ) { reader.Read(); // Move to the first node - will be the XmlDeclaration if there is one. serializationResult.Encoding = encoding; reader.MoveToContent(); lInfo = rootSerializer.TryCreateInstance(serializationContext, reader, store.DefaultPartition) as LayoutInfo; rootSerializer.Read(serializationContext, lInfo, reader); } return lInfo; }
/// <summary> /// Saves the specified model. /// </summary> /// <param name="model">The model.</param> /// <param name="fileName">Name of the file.</param> /// <returns></returns> public static bool Save(CandleModel model, string fileName) { Microsoft.VisualStudio.Modeling.SerializationResult result = new Microsoft.VisualStudio.Modeling.SerializationResult(); CandleSerializationHelper.Instance.SaveModel(result, model, fileName); return(!result.Failed); }
private string SaveModel(ProductState store, string fileName) { var result = new Dsl.SerializationResult(); var itemName = Path.GetFileName(fileName); if (solution.IsOpen) { // First do the quick lookup in the default location. IItemContainer itemParent = this.solution.SolutionFolders.FirstOrDefault(folder => folder.Name.Equals(SolutionExtensions.SolutionItemsFolderName, StringComparison.OrdinalIgnoreCase) && folder.Items.Any(item => item.PhysicalPath == fileName)); if (itemParent == null) { // Try the slow probing anywhere in the solution. itemParent = (from item in this.solution.Traverse().OfType <IItem>() where item.PhysicalPath == fileName select item.Parent) .FirstOrDefault(); } if (itemParent == null) { tracer.Verbose(Resources.PatternManager_TraceSavingDefaultEmptyState, fileName); // Default to SolutionItems. itemParent = this.solution.Items.OfType <ISolutionFolder>().FirstOrDefault(x => x.IsSolutionItemsFolder()); if (itemParent == null) { tracer.Verbose(Resources.PatternManager_SaveNoSolutionItems); itemParent = this.solution.CreateSolutionFolder(SolutionExtensions.SolutionItemsFolderName); } } // Serialize to temp to add or override content next. var tempFileName = Path.GetTempFileName(); ProductStateStoreSerializationHelper.Instance.SaveModel(result, store, tempFileName); var addedItem = this.AddStateToSolution(itemParent, itemName, tempFileName); // Cleanup the temporary file. File.Delete(tempFileName); return(addedItem.PhysicalPath); } else { ProductStateStoreSerializationHelper.Instance.SaveModel(result, store, fileName); return(fileName); } }
public string ConvertLayoutInfoToString(LayoutInfo info) { string result = String.Empty; Microsoft.VisualStudio.Modeling.SerializationResult serializationResult = new Microsoft.VisualStudio.Modeling.SerializationResult(); DomainXmlSerializerDirectory directory = this.GetDirectory(info.Store); System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("ISO-8859-1"); Microsoft.VisualStudio.Modeling.SerializationContext serializationContext = new SerializationContext(directory, "", serializationResult); this.InitializeSerializationContext(info.Partition, serializationContext, false); global::System.IO.MemoryStream newFileContent = new global::System.IO.MemoryStream(); global::System.Xml.XmlWriterSettings settings = DiagramsDSLSerializationHelper.Instance.CreateXmlWriterSettings(serializationContext, false, encoding); using (global::System.Xml.XmlWriter writer = global::System.Xml.XmlWriter.Create(newFileContent, settings)) { DomainClassXmlSerializer rootSerializer = directory.GetSerializer(LayoutInfo.DomainClassId); RootElementSettings rootElementSettings = new RootElementSettings(); rootElementSettings.SchemaTargetNamespace = "http://schemas.microsoft.com/dsltools/DiagramsDSL"; rootElementSettings.Version = new global::System.Version("1.0.0.0"); // Carry out the normal serialization. rootSerializer.Write(serializationContext, info, writer, rootElementSettings); } char[] chars = encoding.GetChars(newFileContent.GetBuffer()); // search the open angle bracket and trim off the Byte Of Mark. result = new string(chars); int indexPos = result.IndexOf('<'); if (indexPos > 0) { // strip off the leading Byte Of Mark. result = result.Substring(indexPos); } // trim off trailing 0s. result = result.TrimEnd('\0'); return(result); }
public string ConvertLayoutInfoToString(LayoutInfo info) { string result = String.Empty; Microsoft.VisualStudio.Modeling.SerializationResult serializationResult = new Microsoft.VisualStudio.Modeling.SerializationResult(); DomainXmlSerializerDirectory directory = this.GetDirectory(info.Store); System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("ISO-8859-1"); Microsoft.VisualStudio.Modeling.SerializationContext serializationContext = new SerializationContext(directory, "", serializationResult); this.InitializeSerializationContext(info.Partition, serializationContext, false); global::System.IO.MemoryStream newFileContent = new global::System.IO.MemoryStream(); global::System.Xml.XmlWriterSettings settings = DiagramsDSLSerializationHelper.Instance.CreateXmlWriterSettings(serializationContext, false, encoding); using (global::System.Xml.XmlWriter writer = global::System.Xml.XmlWriter.Create(newFileContent, settings)) { DomainClassXmlSerializer rootSerializer = directory.GetSerializer(LayoutInfo.DomainClassId); RootElementSettings rootElementSettings = new RootElementSettings(); rootElementSettings.SchemaTargetNamespace = "http://schemas.microsoft.com/dsltools/DiagramsDSL"; rootElementSettings.Version = new global::System.Version("1.0.0.0"); // Carry out the normal serialization. rootSerializer.Write(serializationContext, info, writer, rootElementSettings); } char[] chars = encoding.GetChars(newFileContent.GetBuffer()); // search the open angle bracket and trim off the Byte Of Mark. result = new string(chars); int indexPos = result.IndexOf('<'); if (indexPos > 0) { // strip off the leading Byte Of Mark. result = result.Substring(indexPos); } // trim off trailing 0s. result = result.TrimEnd('\0'); return result; }
/// <summary> /// Reads the model into the given store and returns it. /// </summary> public static IProductState Read(Dsl.SerializationResult result, Dsl.Store store, string modelFile) { return(ProductStateStoreSerializationHelper.Instance.LoadModel(result, store, modelFile, null, null, null)); }
public MetaModel LoadLibrary(Microsoft.VisualStudio.Modeling.SerializationResult serializationResult) { System.IO.FileInfo fileInfo = new System.IO.FileInfo(this.AbsoluteFilePath); if (!fileInfo.Exists) { return(null); } if (System.String.Compare(fileInfo.Extension, ".lngdsl", System.StringComparison.OrdinalIgnoreCase) != 0) { return(null); } MetaModel dslLibrary = FindLibrary(Store, this.AbsoluteFilePath); if (dslLibrary != null) { if (dslLibrary.IsTopMost) { MessageBox.Show("Circular dependency to the top most meta model! Can not load library."); throw new ArgumentException("Circular dependency to the top most meta model! Can not load library."); } //this.ImportedLibrary = dslLibrary; this.Name = dslLibrary.Name; return(dslLibrary); } Microsoft.VisualStudio.Modeling.Partition partition = new Microsoft.VisualStudio.Modeling.Partition(Store); MetaModel metaModel; try { metaModel = LanguageDSLSerializationHelper.Instance.LoadModel(serializationResult, partition, this.AbsoluteFilePath, null, null, null, false); ReadOnlyCollection <ModelElement> elements = this.Store.ElementDirectory.FindElements(MetaModel.DomainClassId); foreach (ModelElement element in elements) { if (element is MetaModel && element != metaModel) { MetaModel m = element as MetaModel; if (m.Name == metaModel.Name) { metaModel.Delete(); throw new ArgumentException("Library can not have a name of an already included library or main meta model."); } } } } catch (System.Xml.XmlException) { metaModel = null; } if ((metaModel != null) && !serializationResult.Failed) { this.ImportedLibrary = metaModel; this.Name = metaModel.Name; if (ImmutabilityExtensionMethods.GetLocks(metaModel) != Locks.All) { SetLocks(metaModel, Locks.All); } } else { metaModel = null; } return(metaModel); }
public virtual void Open(string storeFile, bool autoCreate = false) { Guard.NotNullOrEmpty(() => storeFile, storeFile); using (tracer.StartActivity(Resources.PatternManager_TraceOpeningStore, storeFile)) using (new MouseCursor(System.Windows.Input.Cursors.Wait)) { if (this.IsOpen) { this.Close(); } this.StoreFile = storeFile; //tracer.TraceData(TraceEventType.Verbose, Resources.PatternManager_OpeningStoreEventId, storeFile); if (autoCreate && (!File.Exists(storeFile) || new FileInfo(storeFile).Length == 0)) { storeFile = CreateEmptyStateFile(storeFile); } //// Do NOT dispose the DSL state or it becomes null in the model elements!! if (VerifyDslVersion(storeFile)) { var result = new Dsl.SerializationResult(); var dslStore = new Dsl.Store(this.serviceProvider, typeof(Dsl.CoreDomainModel), typeof(ProductStateStoreDomainModel)); using (var tx = dslStore.TransactionManager.BeginTransaction(Resources.PatternManager_OpenTransactionDescription, true)) { using (new StorePropertyBag(dslStore, ProductState.IsSerializingKey, true)) { // Flag the state as being deserialized. This is // required by the ProductState class to ignore // element added events until deserialization is // completed. var store = ProductStateStoreSerializationHelper.Instance.LoadModel(result, dslStore, storeFile, null, null, null); if (!result.Failed) { this.productStore = store; tx.Commit(); } } } if (!result.Failed) { this.IsOpen = true; this.Store.TransactionCommited += this.OnTransactionCommitedDoSave; this.Store.ElementInstantiated += this.OnElementInstantiated; this.Store.ElementLoaded += this.OnElementLoaded; this.Store.ElementCreated += this.OnElementCreated; this.Store.ElementDeleted += this.OnElementDeleted; this.Store.ElementDeleting += this.OnElementDeleting; this.RaiseIsOpenChanged(); tracer.Info(Resources.PatternManager_OpenedStore, this.StoreFile); //tracer.TraceData(TraceEventType.Verbose, Resources.PatternManager_OpenedStoreEventId, storeFile); } else { this.messageService.ShowError( Properties.Resources.PatternManager_FailedToOpenStore); tracer.Error(Properties.Resources.PatternManager_DeSerializationFailed, this.StoreFile); result.ForEach(msg => tracer.Warn(msg.ToString())); } } } }
/// <summary> /// Post process gathered information. /// </summary> /// <param name="alreadyProcessedModels">Already processed models.</param> /// <param name="serializationResult">Serialization result.</param> /// <param name="store">Store.</param> public abstract void DoPostProcess(System.Collections.Generic.List <string> alreadyProcessedModels, Microsoft.VisualStudio.Modeling.SerializationResult serializationResult, Store store);
/// <summary> /// Post process gathered information. /// </summary> /// <param name="serializationResult">Serialization result.</param> /// <param name="store">Store.</param> protected virtual void DoPostProcess(Microsoft.VisualStudio.Modeling.SerializationResult serializationResult, Store store) { foreach (System.Guid domainClassId in this.dictionary.Keys) { DomainRelationshipInfo relationshipInfo = store.DomainDataDirectory.FindDomainRelationship(domainClassId); if (relationshipInfo == null) { SerializationUtilities.AddMessage(serializationResult, "", SerializationMessageKind.Warning, "Couldn't find domain relationship data. DomainClassId: " + domainClassId, 0, 0); continue; } foreach (PostProcessRelationshipData data in this.dictionary[domainClassId]) { // get source and target elements ModelElement source = store.ElementDirectory.FindElement(data.ModelElementSourceId); ModelElement target = store.ElementDirectory.FindElement(data.ModelElementTargetId); if (target == null) // target is link ? { target = store.ElementDirectory.FindElementLink(data.ModelElementTargetId); } if (source == null) { SerializationUtilities.AddMessage(serializationResult, "", SerializationMessageKind.Warning, "Couldn't find the source element of the relationship " + relationshipInfo.Name + ". Id of missing element: " + data.ModelElementSourceId, 0, 0); continue; } if (target == null) { SerializationUtilities.AddMessage(serializationResult, "", SerializationMessageKind.Warning, "Couldn't find the target element of the relationship " + relationshipInfo.Name + ". Id of missing element: " + data.ModelElementTargetId, 0, 0); continue; } if (data.RelationshipId == System.Guid.Empty) { try { // create new relationship RoleAssignment[] roleAssignments = new RoleAssignment[2]; roleAssignments[0] = new RoleAssignment(GetSourceDomainRole(relationshipInfo).Id, source); roleAssignments[1] = new RoleAssignment(GetTargetDomainRole(relationshipInfo).Id, target); store.ElementFactory.CreateElementLink(relationshipInfo, roleAssignments); } catch (System.Exception ex) { SerializationUtilities.AddMessage(serializationResult, "", SerializationMessageKind.Warning, "Error while creating new instance of relationship " + relationshipInfo.Name + " between " + source.Id.ToString() + " and " + target.Id.ToString() + ". Exception: " + ex.Message, 0, 0); } } else { try { // assign role players ElementLink instance = store.ElementDirectory.FindElementLink(data.RelationshipId); if (instance == null) { throw new System.ArgumentNullException("Post processing failed because relationship (id=" + data.RelationshipId + ") is not in the store"); } DomainRoleInfo.SetRolePlayer(instance, GetSourceDomainRole(relationshipInfo).Id, source); DomainRoleInfo.SetRolePlayer(instance, GetTargetDomainRole(relationshipInfo).Id, target); this.trackDictionary.Remove(instance.Id); } catch (System.Exception ex) { SerializationUtilities.AddMessage(serializationResult, "", SerializationMessageKind.Warning, "Error while creating the instance of the relationship " + relationshipInfo.Name + " (id: " + data.RelationshipId + ") between " + source.Id.ToString() + " and " + target.Id.ToString() + ". Exception: " + ex.Message, 0, 0); } } } } foreach (Guid id in this.trackDictionary) { ModelElement m = store.ElementDirectory.FindElement(id); if (m != null) { m.Delete(); } } }