/// <summary> /// Saves the given file. /// </summary> protected override void Save(string fileName) { DslModeling::SerializationResult serializationResult = new DslModeling::SerializationResult(); global::Tum.PDE.LanguageDSL.MetaModel modelRoot = (global::Tum.PDE.LanguageDSL.MetaModel) this.RootElement; global::Tum.PDE.LanguageDSL.LanguageDSLSerializationHelper.Instance.SaveModel(serializationResult, modelRoot, fileName, this.Encoding, true); // Report serialization messages. this.SuspendErrorListRefresh(); try { foreach (DslModeling::SerializationMessage serializationMessage in serializationResult) { this.AddErrorListItem(new DslShell::SerializationErrorListItem(this.ServiceProvider, serializationMessage)); } } finally { this.ResumeErrorListRefresh(); } if (serializationResult.Failed) { // Save failed. throw new global::System.InvalidOperationException(global::Tum.PDE.LanguageDSL.LanguageDSLDomainModel.SingletonResourceManager.GetString("CannotSaveDocument")); } }
/// <summary> /// Loads the given file. /// </summary> protected override void Load(string fileName, bool isReload) { DslModeling::SerializationResult serializationResult = new DslModeling::SerializationResult(); global::Tum.PDE.LanguageDSL.MetaModel modelRoot = null; DslModeling::ISchemaResolver schemaResolver = new DslShell::ModelingSchemaResolver(this.ServiceProvider); //clear the current root element this.SetRootElement(null); modelRoot = global::Tum.PDE.LanguageDSL.LanguageDSLSerializationHelper.Instance.LoadModel(serializationResult, this.GetModelPartition(), fileName, schemaResolver, null /* no load-time validation */, this.SerializerLocator); // Report serialization messages. this.SuspendErrorListRefresh(); try { foreach (DslModeling::SerializationMessage serializationMessage in serializationResult) { this.AddErrorListItem(new DslShell::SerializationErrorListItem(this.ServiceProvider, serializationMessage)); } } finally { this.ResumeErrorListRefresh(); } if (serializationResult.Failed) { // Load failed, can't open the file. throw new global::System.InvalidOperationException(global::Tum.PDE.LanguageDSL.LanguageDSLDomainModel.SingletonResourceManager.GetString("CannotOpenDocument")); } else { this.SetRootElement(modelRoot); // Attempt to set the encoding if (serializationResult.Encoding != null) { this.ModelingDocStore.SetEncoding(serializationResult.Encoding); global::Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(this.SetDocDataDirty(0)); // Setting the encoding will mark the document as dirty, so clear the dirty flag. } } }
/// <summary> /// Adds a proto element to the current element. /// </summary> /// <param name="protoElement">Proto element representation of the element that is to be added.</param> /// <param name="groupMerger"> /// Group merger class used to track id mapping, merge errors/warnings and /// postprocess merging by rebuilding reference relationships. /// </param> /// <param name="isRoot">Root element?</param> public virtual void ModelMerge(DslEditorModeling::ModelProtoElement protoElement, DslEditorModeling::ModelProtoGroupMerger groupMerger, bool isRoot) { if( !ModelIsPasteAllowed(groupMerger.ProtoGroup.Operation) ) { // add warning message groupMerger.MergeResult.AddMessage(new DslEditorModeling::ValidationMessage("ModelMergePasteDisallowedId", DslEditorModeling.ModelValidationViolationType.Warning, "Element couldn't be addded to MetaModelLibrary because paste is not allowed.")); return; } if (protoElement != null) { DslModeling::DomainClassInfo elementDomainInfo = this.Partition.DomainDataDirectory.GetDomainClass(protoElement.DomainClassId); if (elementDomainInfo.IsDerivedFrom(global::Tum.PDE.LanguageDSL.BaseMetaModel.DomainClassId)) { // get element id System.Guid newElementId = System.Guid.NewGuid(); // create property assignments DslModeling::PropertyAssignment[] propertyAssignemnts = protoElement.GetPropertyAssignments(this.Store.DefaultPartition, newElementId); // create the actual model element global::Tum.PDE.LanguageDSL.BaseMetaModel element = null; if( global::Tum.PDE.LanguageDSL.MetaModel.DomainClassId == elementDomainInfo.Id ) element = new global::Tum.PDE.LanguageDSL.MetaModel(this.Store, propertyAssignemnts); if( element == null ) throw new System.ArgumentNullException("Element is null in ModelMerge: " + elementDomainInfo.Name); if( !element.ModelIsPasteAllowed(groupMerger.ProtoGroup.Operation) ) { // add warning message groupMerger.MergeResult.AddMessage(new DslEditorModeling.ValidationMessage("ModelMergePasteDisallowedId", DslEditorModeling.ModelValidationViolationType.Warning, "Element couldn't be addded to MetaModelLibrary because paste is not allowed.")); element.Delete(); return; } if( isRoot && groupMerger.ProtoGroup.Operation != DslEditorModeling.ModelProtoGroupOperation.Move) { //element.Name = "Copy of " + element.Name; } // update id mapping groupMerger.SetIdMapping(protoElement.ElementId, newElementId); // add child element DslModeling::DomainRoleInfo.SetLinkedElement(this, global::Tum.PDE.LanguageDSL.MetaModelLibraryHasImportedLibrary.MetaModelLibraryDomainRoleId, element); // continue with child elements (Embedding Relationship) System.Collections.Generic.List<DslEditorModeling::ModelProtoElement> embeddedProtoElements = groupMerger.GetEmbeddedElements(this.Store.DefaultPartition, protoElement); if( embeddedProtoElements.Count > 0 ) { foreach (DslEditorModeling::ModelProtoElement p in embeddedProtoElements) (element as DslEditorModeling::IModelMergeElements).ModelMerge(p, groupMerger, false); } } } }