Beispiel #1
0
        /// <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"));
            }
        }
Beispiel #2
0
        /// <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);
					}
				}
			}
		}