Exemple #1
0
        private CodeTypeMember GenerateInputMapMethod(VariableItem item, PowerShellEventItem powerShellEventItem, int mapNr)
        {
            CodeMemberMethod method = new CodeMemberMethod();

            CodeParameterDeclarationExpression rsParam = new CodeParameterDeclarationExpression(new CodeTypeReference("System.Management.Automation.Runspaces.Runspace"), "rs");
            CodeParameterDeclarationExpression k2Param = new CodeParameterDeclarationExpression(new CodeTypeReference("$contexttype$"), "K2");

            method.Name       = "InputMap" + mapNr.ToString();
            method.ReturnType = new CodeTypeReference(typeof(void));
            method.Parameters.Add(k2Param);
            method.Parameters.Add(rsParam);



            // Some variables we need
            CodeVariableReferenceExpression k2Field = new CodeVariableReferenceExpression("K2");


            //Declare a object variable
            CodeVariableDeclarationStatement varValueDecl = new CodeVariableDeclarationStatement(typeof(object), "variableValue");
            CodeVariableReferenceExpression  varValueRef  = new CodeVariableReferenceExpression("variableValue");

            method.Statements.Add(varValueDecl);



            //TODO: use getsimplfy function? Check why that is there?
            K2FieldPart part = Simplify(item.VariableValue);
            string      data = ((IRuntimeDataProvider)part).GetGetRuntimeData();

            // This creates a 'getvalue' method
            CodeFieldReferenceExpression resolverManagerProperty = new CodeFieldReferenceExpression(k2Field, "ResolverManager");
            CodeMethodInvokeExpression   getValue = new CodeMethodInvokeExpression(
                resolverManagerProperty,
                "GetValue",
                new CodeExpression[] { new CodePrimitiveExpression(data) }
                );

            // Assign the getValue to a variable.
            CodeAssignStatement assignCurrentValue = new CodeAssignStatement();

            assignCurrentValue.Right = getValue;
            assignCurrentValue.Left  = varValueRef;
            method.Statements.Add(assignCurrentValue);

            method.Statements.Add(new CodeSnippetStatement("  if (variableValue != null) {"));
            method.Statements.Add(new CodeSnippetStatement(string.Format("rs.SessionStateProxy.SetVariable(\"{0}\", variableValue);", item.Name)));
            method.Statements.Add(new CodeSnippetStatement("  }"));


            return(method);
        }
Exemple #2
0
        public override T Clone <T>()
        {
            VariableItem item = base.Clone <VariableItem>();

            //TODO: K2Field.isnullorempty?
            if (this.VariableValue != null)
            {
                item.VariableValue = this.VariableValue.Clone <K2Field>();
            }

            if (!string.IsNullOrEmpty(this.Name))
            {
                item.Name = this.Name;
            }

            return(item as T);
        }
Exemple #3
0
        private CodeTypeMember GenerateOutputMapMethod(VariableItem item, PowerShellEventItem powerShellEventItem, int mapNr)
        {
            CodeMemberMethod method = new CodeMemberMethod();

            CodeParameterDeclarationExpression rsParam = new CodeParameterDeclarationExpression(new CodeTypeReference("System.Management.Automation.Runspaces.Runspace"), "rs");
            CodeParameterDeclarationExpression k2Param = new CodeParameterDeclarationExpression(new CodeTypeReference("$contexttype$"), "K2");

            method.Name       = "OutputMap" + mapNr.ToString();
            method.ReturnType = new CodeTypeReference(typeof(void));
            method.Parameters.Add(k2Param);
            method.Parameters.Add(rsParam);



            method.Statements.Add(new CodeSnippetStatement(string.Format("object psVariable = rs.SessionStateProxy.GetVariable(\"{0}\");", item.Name)));
            method.Statements.Add(new CodeSnippetStatement("if (psVariable != null) {"));

            //TODO: use getsimplfy function? Check why that is there?
            K2FieldPart part = item.VariableValue.Parts[0];
            string      data = ((IRuntimeDataProvider)part).GetGetRuntimeData();


            // Some variables we need
            CodeVariableReferenceExpression k2Field    = new CodeVariableReferenceExpression("K2");
            CodeVariableReferenceExpression psVariable = new CodeVariableReferenceExpression("psVariable");


            // new object variable
            CodeVariableDeclarationStatement destVariableDeclaration = new CodeVariableDeclarationStatement(typeof(object), "destinationValue");

            method.Statements.Add(destVariableDeclaration);

            CodeVariableReferenceExpression destVariable = new CodeVariableReferenceExpression("destinationValue");


            // This creates a 'getvalue' method
            CodeFieldReferenceExpression resolverManagerProperty = new CodeFieldReferenceExpression(k2Field, "ResolverManager");
            CodeMethodInvokeExpression   getValue = new CodeMethodInvokeExpression(
                resolverManagerProperty,
                "GetValue",
                new CodeExpression[] { new CodePrimitiveExpression(data) }
                );


            // Assign the getValue to a variable.
            CodeAssignStatement assignCurrentValue = new CodeAssignStatement();

            assignCurrentValue.Right = getValue;
            assignCurrentValue.Left  = destVariable;
            method.Statements.Add(assignCurrentValue);

            //TODO: convert to statements
            method.Statements.Add(new CodeSnippetStatement("  if (psVariable.GetType() != destinationValue.GetType()) {"));
            method.Statements.Add(new CodeSnippetStatement("    K2.ProcessInstance.Logger.LogDebugMessage(\"PowerShellWizard\", \"Source and destination type of PowerShell Variable " + item.Name + " do not match. Doing conversion.\");"));


            // Do the system.Convert.ChangeType method.
            CodeTypeReferenceExpression systemConvert    = new CodeTypeReferenceExpression("System.Convert");
            CodeMethodInvokeExpression  changeTypeInvoke = new CodeMethodInvokeExpression(
                systemConvert,
                "ChangeType",
                new CodeExpression[] {
                psVariable,
                new CodeMethodInvokeExpression(destVariable, "GetType")
            });

            CodeAssignStatement convertAssign = new CodeAssignStatement();

            convertAssign.Left  = psVariable;
            convertAssign.Right = changeTypeInvoke;
            method.Statements.Add(convertAssign);


            //TODO: convert to statements
            method.Statements.Add(new CodeSnippetStatement("    if (psVariable == null) {"));
            method.Statements.Add(new CodeSnippetStatement("      throw new System.Exception(\"Conversion of variable '" + item.Name + "' failed. Please make sure the types are the same.\");"));
            method.Statements.Add(new CodeSnippetStatement("    }"));



            method.Statements.Add(new CodeSnippetStatement("  }"));



            // Create a setValue on the ResolverManager
            CodeMethodInvokeExpression setValue = new CodeMethodInvokeExpression(
                resolverManagerProperty,
                "SetValue",
                new CodeExpression[] {
                new CodePrimitiveExpression(data),
                psVariable
            });

            method.Statements.Add(setValue);

            // Commit the resolverManager
            CodeMethodInvokeExpression commit = new CodeMethodInvokeExpression(
                resolverManagerProperty,
                "Commit"
                );

            method.Statements.Add(commit);

            method.Statements.Add(new CodeSnippetStatement("}"));

            return(method);
        }