Example #1
0
        /// <summary>
        /// Create the template output
        /// </summary>
        public virtual string TransformText()
        {
            this.Write("\r\n");
            this.Write("\r\n");
            this.Write("\r\n\r\n\r\n");
            this.Write("\r\n\r\nusing System;\r\nusing System.Collections.Generic; \r\nusing System.Linq;\r\nusing " +
                       "LL.MDE.Components.Qvt.Common;\r\n");

            #line 23 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"

            // Small hack to bypass limitation of ForTea plugin ( https://github.com/MrJul/ForTea/issues/3 )
            // We redeclare members so that ForTea finds them, and enables code completion etc.
            // The errors can be ignored, as the generated .cs file compiles correctly.
            IRelationalTransformation transformation           = this.Transformation;
            ISet <ITypedModel>        validEnforceTargetParams = this.validEnforceTargetParams;
            bool useMetamodelInterface = this.useMetamodelInterface;


            #line default
            #line hidden
            this.Write("\r\n");

            #line 32 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            // Generating of the "usings", for each package of each metamodel used in the transformation
            foreach (IPackage package in transformation.ModelParameter.Select(p => p.UsedPackage).SelectMany(i => i).Distinct())
            {
            #line default
            #line hidden
                this.Write("\r\nusing ");

            #line 36 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(package.Name));

            #line default
            #line hidden
                this.Write(";\r\n\r\n");

            #line 38 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            }

            #line default
            #line hidden
            this.Write("\r\n");

            #line 40 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            // Generation of the namespace

            #line default
            #line hidden

            #line 41 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(QvtCodeGeneratorStrings.Namespace(transformation)));

            #line default
            #line hidden
            this.Write(" \r\n{ \r\n\r\n\r\n");

            #line 45 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            // Generation of the Transfo class

            #line default
            #line hidden
            this.Write("public class ");

            #line 46 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(QvtCodeGeneratorStrings.TransformationName(transformation)));

            #line default
            #line hidden
            this.Write(" : GeneratedTransformation {\r\n\r\n\r\n \tprivate readonly ");

            #line 49 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(nameof(IMetaModelInterface)));

            #line default
            #line hidden
            this.Write(" editor;");

            #line 49 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"


            bool hasFunctions = !transformation.OwnedOperation.IsNullOrEmpty();
            // Functions object, if any functions are defined
            if (hasFunctions)
            {
            #line default
            #line hidden
                this.Write("public readonly ");

            #line 55 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(QvtCodeGeneratorStrings.FunctionsInterfaceName(transformation)));

            #line default
            #line hidden
                this.Write(" Functions;");

            #line 55 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            }

            // Storing each relation instance once
            foreach (IRelation relation in transformation.Rule.OfType <IRelation>())
            {
            #line default
            #line hidden
                this.Write(" public readonly ");

            #line 61 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(QvtCodeGeneratorStrings.RelationClassName(relation)));

            #line default
            #line hidden
                this.Write(" ");

            #line 61 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(QvtCodeGeneratorStrings.RelationClassName(relation)));

            #line default
            #line hidden
                this.Write("; ");

            #line 61 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            }

            // Dictionnaries for keys
            foreach (IKey key in transformation.OwnedKey)
            {
                IList <IProperty> allKeyProperties = new List <IProperty>();
                allKeyProperties.AddRange(key.Part);
                allKeyProperties.AddRange(key.PropertyPaths().Select(pp => pp.Properties.Last()));
                string tupleTypes = string.Join(",", allKeyProperties.Select(p => p.Type.GetRealTypeName()));


            #line default
            #line hidden
                this.Write("internal readonly Dictionary<Tuple<");

            #line 71 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(tupleTypes));

            #line default
            #line hidden
                this.Write(">, ");

            #line 71 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(key.Identifies.GetRealTypeName()));

            #line default
            #line hidden
                this.Write("> ");

            #line 71 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(QvtCodeGeneratorStrings.KeyDictionnaryName(key)));

            #line default
            #line hidden
                this.Write(" = new Dictionary<Tuple<");

            #line 71 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(tupleTypes));

            #line default
            #line hidden
                this.Write(">, ");

            #line 71 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(key.Identifies.GetRealTypeName()));

            #line default
            #line hidden
                this.Write(">();");

            #line 71 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            }

            // Constructor


            #line default
            #line hidden
            this.Write("public ");

            #line 75 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(QvtCodeGeneratorStrings.TransformationName(transformation)));

            #line default
            #line hidden
            this.Write(" (");

            #line 75 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(nameof(IMetaModelInterface)));

            #line default
            #line hidden
            this.Write(" editor ");

            #line 75 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(hasFunctions ? ", " + QvtCodeGeneratorStrings.FunctionsInterfaceName(transformation) + " Functions" : ""));

            #line default
            #line hidden
            this.Write(") {\r\n\r\n\t\t\tthis.editor = editor;");

            #line 77 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"

            foreach (IRelation relation in transformation.Rule.OfType <IRelation>())
            {
            #line default
            #line hidden
                this.Write("  this.");

            #line 80 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(QvtCodeGeneratorStrings.RelationClassName(relation)));

            #line default
            #line hidden
                this.Write(" = new ");

            #line 80 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(QvtCodeGeneratorStrings.RelationClassName(relation)));

            #line default
            #line hidden
                this.Write("(editor, this); \r\n\t\t");

            #line 81 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"

                if (hasFunctions)
                {
            #line default
            #line hidden
                    this.Write("this.Functions = Functions;");

            #line 84 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                }
            }


            #line default
            #line hidden
            this.Write("}");

            #line 87 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"



            foreach (IRelation relation in transformation.Rule.OfType <IRelation>().Where(r => r.IsTopLevel.GetValueOrDefault(false)))
            {
            #line default
            #line hidden
                this.Write("public void ");

            #line 93 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(relation.Name));

            #line default
            #line hidden
                this.Write(" (");

            #line 93 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(RelationTemplateHelper.GenerateRelationParams(true, relation)));

            #line default
            #line hidden
                this.Write(") {\r\n\t\t");

            #line 94 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(QvtCodeGeneratorStrings.RelationClassName(relation)));

            #line default
            #line hidden
                this.Write(".CheckAndEnforce(");

            #line 94 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(RelationTemplateHelper.GenerateRelationParams(false, relation)));

            #line default
            #line hidden
                this.Write(") ;\r\n\t}");

            #line 95 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            }



            #line default
            #line hidden
            this.Write("public override void CallTopRelation (string topRelationName, List<object> parame" +
                       "ters)\r\n\t{\r\n\t\tswitch (topRelationName)\r\n\t\t{\r\n\t\t\t");

            #line 103 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            foreach (IRelation relation in transformation.Rule.OfType <IRelation>().Where(r => r.IsTopLevel.GetValueOrDefault(false)))
            {
            #line default
            #line hidden
                this.Write("\t\t\t\tcase \"");

            #line 105 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(relation.Name));

            #line default
            #line hidden
                this.Write("\":\r\n\t\t\t\t\t");

            #line 106 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(relation.Name));

            #line default
            #line hidden
                this.Write("(");

            #line 106 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(string.Join(",", relation.Domain.OfType <IRelationDomain>().Select(
                                                                                   d => "(" + d.RootVariable.Type.GetRealTypeName() + ")parameters[" + relation.Domain.IndexOf(d) + "]"))));

            #line default
            #line hidden
                this.Write(");\r\n\t\t\t\t\treturn;\r\n\t\t\t");

            #line 109 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\TransformationTemplate\TransformationMainTemplate.tt"
            }

            #line default
            #line hidden
            this.Write("\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t} // end class\r\n} // end namespace\r\n");
            return(this.GenerationEnvironment.ToString());
        }
        /// <summary>
        /// Create the template output
        /// </summary>
        public virtual string TransformText()
        {
            this.Write("\r\n");
            this.Write("\r\n\r\n");

            #line 18 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\FunctionsInterfaceTemplate\FunctionsInterfaceTemplate.tt"


            // Small hack to bypass limitation of ForTea plugin ( https://github.com/MrJul/ForTea/issues/3 )
            // We redeclare members so that ForTea finds them, and enables code completion etc.
            // The errors can be ignored, as the generated .cs file compiles correctly.
            IRelationalTransformation Transformation = this.Transformation;


            #line default
            #line hidden
            this.Write("\r\n\r\n");

            #line 27 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\FunctionsInterfaceTemplate\FunctionsInterfaceTemplate.tt"
            // Generation of the namespace

            #line default
            #line hidden

            #line 28 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\FunctionsInterfaceTemplate\FunctionsInterfaceTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(QvtCodeGeneratorStrings.Namespace(Transformation)));

            #line default
            #line hidden
            this.Write(" \r\n{\r\n    public interface ");

            #line 30 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\FunctionsInterfaceTemplate\FunctionsInterfaceTemplate.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(QvtCodeGeneratorStrings.FunctionsInterfaceName(Transformation)));

            #line default
            #line hidden
            this.Write("\r\n    {");

            #line 31 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\FunctionsInterfaceTemplate\FunctionsInterfaceTemplate.tt"

            foreach (IFunction function in Transformation.OwnedOperation.OfType <IFunction>())
            {
                IList <string> args = function.OwnedParameter.Select(p => p.Type.GetRealTypeName() + " " + p.Name).ToList();


            #line default
            #line hidden

            #line 35 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\FunctionsInterfaceTemplate\FunctionsInterfaceTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(function.Type == null ? "void" : function.Type.GetRealTypeName()));

            #line default
            #line hidden
                this.Write(" ");

            #line 35 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\FunctionsInterfaceTemplate\FunctionsInterfaceTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(function.Name));

            #line default
            #line hidden
                this.Write("(");

            #line 35 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\FunctionsInterfaceTemplate\FunctionsInterfaceTemplate.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(string.Join(",", args)));

            #line default
            #line hidden
                this.Write(" );");

            #line 35 "C:\Users\ebousse\Source\Repos\ChristianDopplerLabors\Software\QvtEnginePerformance\trunk\src\LL.MDE.Components.Qvt.CodeGenerator\CodeGeneration\FunctionsInterfaceTemplate\FunctionsInterfaceTemplate.tt"
            }


            #line default
            #line hidden
            this.Write("}\r\n}\r\n\r\n\r\n\r\n\r\n\r\n");
            return(this.GenerationEnvironment.ToString());
        }