void scriptObjectAction_Execute(object sender, SimpleActionExecuteEventArgs e)
        {
            ObjectScriptGenerator creator = new ObjectScriptGenerator();
            var result = new ScriptingResult()
            {
                Script = creator.GenerateScript(e.SelectedObjects.Cast <object>().ToList())
            };

            e.ShowViewParameters.CreatedView = Application.CreateDetailView(Application.CreateObjectSpace(result.GetType()), result);
        }
Exemple #2
0
        public string GenerateScript(IList <object> selectedObjects)
        {
            CodeCompileUnit compileUnit = new CodeCompileUnit();
            CodeNamespace   ns          = new CodeNamespace();

            ns.Name = "ScriptedObjects";
            compileUnit.Namespaces.Add(ns);
            CodeTypeDeclaration typeDeclaration = new CodeTypeDeclaration();

            typeDeclaration.Name = "Class1";
            ns.Types.Add(typeDeclaration);
            var method = new CodeMemberMethod();

            method.Name = "CreateObject";

            typeDeclaration.Members.Add(method);
            method.Parameters.Add(new CodeParameterDeclarationExpression(new CodeTypeReference(typeof(Session)), "session"));


            ns.Imports.AddRange(selectedObjects.Select(obj => obj.GetType().Name).Distinct().Select(n => new CodeNamespaceImport(n)).ToArray());

            var instanceManager = new InstanceManager();

            if (selectedObjects.Count == 1)
            {
                var rootObject     = selectedObjects[0];
                var rootObjectType = rootObject.GetType();

                method.ReturnType = new CodeTypeReference(rootObjectType.Name);
                string resultName = AddObjectInstance(method, rootObject, instanceManager);
                method.Statements.Add(new CodeMethodReturnStatement(new CodeVariableReferenceExpression(resultName)));
            }
            else
            {
                foreach (var obj in selectedObjects)
                {
                    AddObjectInstance(method, obj, instanceManager);
                }
            }
            CSharpCodeProvider codeProvider = new CSharpCodeProvider();
            var result = new ScriptingResult();

            using (var stringWriter = new StringWriter())
            {
                using (var itw = new IndentedTextWriter(stringWriter))
                {
                    var options = new CodeGeneratorOptions();
                    options.BracingStyle = "C";
                    codeProvider.GenerateCodeFromCompileUnit(compileUnit, itw, options);
                }

                return(stringWriter.ToString());
            }
        }