private string printNode(ParamTreeNode paramParamTreeNode)
        {
            TreeNode[]    arrayOfTreeNode = paramParamTreeNode.Path;
            StringBuilder stringBuffer    = new StringBuilder();

            foreach (TreeNode treeNode in arrayOfTreeNode)
            {
                stringBuffer.Append(treeNode + ", ");
            }
            return(stringBuffer.ToString());
        }
 private ParamTreeNode getChildOfName(ParamTreeNode paramParamTreeNode, string paramString)
 {
     System.Collections.IEnumerator enumeration = paramParamTreeNode.children();
     while (enumeration.MoveNext())
     {
         ParamTreeNode paramTreeNode = (ParamTreeNode)enumeration.Current;
         if (paramTreeNode.UserObject.ToString().Equals(paramString))
         {
             return(paramTreeNode);
         }
     }
     return(null);
 }
            /// <summary>
            /// Attempts to bind the next argument, if one is left, or attempst to bind to
            /// the final method.  This is equivalent to ReflectOptimizer's EmitCallOrNextParam
            /// </summary>
            private bool GetFinalCallOrNextArg(int param, int outArgs, ParamTreeNode node, object val)
            {
                Debug.Assert(node.Methods.Count != 0);

                if (param - outArgs == args.Length - 1 && GetFinalCall(param, outArgs, node.Methods[0]))
                {
                    StoreArgument(val);
                    return(true);
                }

                if (WalkWorker(param + 1, outArgs, node))
                {
                    StoreArgument(val);
                    return(true);
                }
                return(false);
            }
        private void mergeOneChild(ParamTreeNode paramParamTreeNode)
        {
            if (paramParamTreeNode.ChildCount == 1)
            {
                ParamTreeNode paramTreeNode = (ParamTreeNode)paramParamTreeNode.getChildAt(0);
                System.Collections.IEnumerator enumeration1 = paramTreeNode.children();
                List <object> arrayList1 = new List <object>();
                while (enumeration1.MoveNext())
                {
                    arrayList1.Add((ParamTreeNode)enumeration1.Current);
                }
                if (StringUtils.isNullOrBlank(paramParamTreeNode.UserObject.ToString()))
                {
                    paramParamTreeNode.UserObject = paramTreeNode.UserObject;
                }
                else
                {
                    paramParamTreeNode.UserObject = paramParamTreeNode.UserObject + ", " + paramTreeNode.UserObject;
                }
                paramParamTreeNode.remove(paramTreeNode);
                foreach (ParamTreeNode paramTreeNode1 in arrayList1)
                {
                    paramParamTreeNode.add(paramTreeNode1);
                    paramTreeNode1.Parent = paramParamTreeNode;
                }
                if (paramParamTreeNode.ChildCount == 1)
                {
                    mergeOneChild(paramParamTreeNode);
                    return;
                }
            }
            System.Collections.IEnumerator enumeration = paramParamTreeNode.children();
            List <object> arrayList = new List <object>();

            while (enumeration.MoveNext())
            {
                arrayList.Add((ParamTreeNode)enumeration.Current);
            }
            foreach (ParamTreeNode paramTreeNode in arrayList)
            {
                mergeOneChild(paramTreeNode);
            }
        }
Esempio n. 5
0
 public void UpdateParamNode(ParamTreeNode node, string user)
 {
     if (node.IsParam)
     {
         var entity = _kCaseThemeParamRepository.GetQuery()
                      .FirstOrDefault(t => t.Id == node.ParamId);
         entity.NAME            = node.Name;
         entity.LASTUPDATEDBY   = user;
         entity.LASTUPDATEDDATE = DateTime.Now;
         _kCaseThemeParamRepository.Update(entity);
     }
     else
     {
         var entity = _kCaseParamCategoryRepository.GetQuery()
                      .FirstOrDefault(t => t.Id == node.Id);
         entity.NAME            = node.Name;
         entity.LASTUPDATEDBY   = user;
         entity.LASTUPDATEDDATE = DateTime.Now;
         _kCaseParamCategoryRepository.Update(entity);
     }
 }
Esempio n. 6
0
 public int AddNewParamNode(int themeId, ParamTreeNode node, string user)
 {
     if (node.IsParam)
     {
         var entity = new PKS_KCASE_THEME_PARAMETER
         {
             NAME                     = node.Name,
             PARAMETERTYPE            = 1,
             KCASEPARAMETERCATEGORYID = node.Pid.Value,
             CREATEDBY                = user,
             CREATEDDATE              = DateTime.Now,
             LASTUPDATEDBY            = user,
             LASTUPDATEDDATE          = DateTime.Now
         };
         _kCaseThemeParamRepository.Add(entity);
         return(entity.Id);
     }
     else
     {
         var entity = new PKS_KCASE_PARAMETER_CATEGORY
         {
             NAME            = node.Name,
             LEVELNUMBER     = 1,
             ORDERNUMBER     = 1,
             PARENTID        = null,
             KCASETHEMEID    = themeId,
             CREATEDBY       = user,
             CREATEDDATE     = DateTime.Now,
             LASTUPDATEDBY   = user,
             LASTUPDATEDDATE = DateTime.Now
         };
         var query = _kCaseParamCategoryRepository.GetQuery().Where(t => t.LEVELNUMBER == entity.LEVELNUMBER);
         if (query != null && query.Count() > 0)
         {
             entity.ORDERNUMBER = query.Max(t => t.ORDERNUMBER) + 1;
         }
         _kCaseParamCategoryRepository.Add(entity);
         return(entity.Id);
     }
 }
            /// <summary>
            /// Attempts to bind the remaining (extra) parameters into a params array.
            /// </summary>
            private bool GetBoundToParams(int param, int outArgs, ParamTreeNode root)
            {
                for (int i = 0; i < root.Methods.Count; i++)
                {
                    if (!root.Methods[i].IsParamsMethod)
                    {
                        continue;
                    }

                    ParameterInfo[] pis = root.Methods[i].GetParameters();
                    Conversion      conv;

                    object val = TryConvert(GetArgument(param - outArgs), pis[pis.Length - 1].ParameterType.GetElementType(), out conv);
                    if (conv != Conversion.None)
                    {
                        if (param - outArgs == args.Length - 1 && GetFinalCall(param, outArgs, root.Methods[i]))
                        {
                            StoreArgument(val);
                            return(true);
                        }

                        if (GetBoundToParams(param + 1, outArgs, root))
                        {
                            StoreArgument(val);
                            return(true);
                        }
                    }
                    else if (param - outArgs == args.Length - 1 && GetArgument(param) == null)
                    {
                        // explicitly passing null to the params array, ok...
                        if (GetFinalCall(param, outArgs, root.Methods[i]))
                        {
                            curArg--;
                            return(true);
                        }
                    }
                }
                return(false);
            }
            /// <summary>
            /// Attempts to bind the remaining (missing) parameters from default values.  Default values
            /// also include a virtual-default as an empty params array.
            /// </summary>
            private bool GetBoundToDefaults(int param, int outArgs, ParamTreeNode root)
            {
                for (int i = 0; i < root.Methods.Count; i++)
                {
                    int curParam = param;
                    int curOut   = outArgs;

                    // skip any remaining out params...
                    ParameterInfo[] pis = root.Methods[i].GetParameters();
                    while (curParam < root.Methods[i].SigLength && (pis[curParam].IsOut && !pis[curParam].IsIn))
                    {
                        curOut++;
                        curParam++;
                    }

                    if (curParam >= root.Methods[i].SigLength - 1 && root.Methods[i].IsParamsMethod)
                    {
                        // rest of the values go to the params method...
                        // no arguments for parameter array, we default to an empty one
                        if (GetFinalCall(curParam, curOut, root.Methods[i]))
                        {
                            return(true);
                        }
                    }
                    else if (curParam < root.Methods[i].GetParameters().Length&&
                             (pt.ArgumentCount - root.Methods[i].DefaultCount) == curParam)
                    {
                        // rest of the values are defaults...
                        if (GetFinalCallOrNextArg(curParam, curOut, root, root.Methods[i].GetParameters()[curParam].DefaultValue))
                        {
                            return(true);
                        }
                    }
                }

                // no binding available.
                return(false);
            }
 private void constructTreeFromDescs(ParamTreeNode paramParamTreeNode, IList <string> paramList)
 {
     foreach (string str in paramList)
     {
         ParamTreeNode paramTreeNode = paramParamTreeNode;
         string[]      arrayOfString = str.ToUpper().Split(", ", true);
         foreach (string str1 in arrayOfString)
         {
             ParamTreeNode paramTreeNode1 = getChildOfName(paramTreeNode, str1);
             if (paramTreeNode1 != null)
             {
                 paramTreeNode = paramTreeNode1;
             }
             else
             {
                 paramTreeNode1 = new ParamTreeNode(this, str1);
                 paramTreeNode.add(paramTreeNode1);
                 paramTreeNode1.Parent = paramTreeNode;
                 paramTreeNode         = paramTreeNode1;
             }
         }
     }
     mergeOneChild(paramParamTreeNode);
 }
        private IList <ParamItemInputTable> createInputList(Session paramSession, IList <ParamItemTable> paramList)
        {
            sbyte  b   = 1;
            int    i   = 1;
            string str = "Param";

            this.b_hasCostBooks = false;
            this.o_missingStr   = null;
            List <object> arrayList1 = new List <object>();
            List <object> arrayList2 = new List <object>();
            List <object> arrayList3 = new List <object>();

            foreach (ParamItemTable paramItemTable in paramList)
            {
                paramItemTable = (ParamItemTable)paramSession.load(typeof(ParamItemTable), paramItemTable.Id);
                string str1 = paramItemTable.Title.ToUpper();
                str1 = StringUtils.replaceAll(str1, " ", "");
                str1 = StringUtils.replaceAll(str1, ",", "");
                str1 = StringUtils.replaceAll(str1, "\"", "''");
                System.Collections.IList list = (System.Collections.IList) this.o_descToAccessRightsMap[str1];
                if (list == null)
                {
                    list = new List <object>();
                    this.o_descToAccessRightsMap[str1] = list;
                }
                if (!list.Contains(paramItemTable.AccessRights))
                {
                    list.Add(paramItemTable.AccessRights);
                }
                arrayList3.Add(StringUtils.replaceAll(paramItemTable.Title, "\"", "''"));
                foreach (ParamItemInputTable paramItemInputTable1 in paramItemTable.InputSet)
                {
                    if (paramItemInputTable1.SortOrder.Value > i)
                    {
                        i = paramItemInputTable1.SortOrder.Value;
                    }
                    if (arrayList2.Contains(paramItemInputTable1.Name))
                    {
                        continue;
                    }
                    arrayList2.Add(paramItemInputTable1.Name);
                    ParamItemInputTable paramItemInputTable2 = (ParamItemInputTable)paramItemInputTable1.clone();
                    arrayList1.Add(paramItemInputTable2);
                }
            }
            i++;
            this.o_rootNode = new ParamTreeNode(this, "", "");
            constructTreeFromDescs(this.o_rootNode, arrayList3);
            StringBuilder stringBuffer = new StringBuilder();

            stringBuffer.Append("SUBSTITUTE(SUBSTITUTE(CONCATENATE(");
            System.Collections.IEnumerator enumeration = this.o_rootNode.preorderEnumeration();
            bool @bool = true;

            while (enumeration.MoveNext())
            {
                ParamTreeNode paramTreeNode1 = (ParamTreeNode)enumeration.Current;
                ParamTreeNode paramTreeNode2 = (ParamTreeNode)paramTreeNode1.Parent;
                if (paramTreeNode1.Leaf)
                {
                    continue;
                }
                if (!@bool)
                {
                    stringBuffer.Append(",");
                }
                else
                {
                    @bool = false;
                }
                if (paramTreeNode1.ChildCount > 1)
                {
                    StringBuilder stringBuffer1 = new StringBuilder();
                    string        str1          = "";
                    for (sbyte b1 = 0; b1 < paramTreeNode1.ChildCount; b1++)
                    {
                        ParamTreeNode paramTreeNode = (ParamTreeNode)paramTreeNode1.getChildAt(b1);
                        if (b1 != 0)
                        {
                            stringBuffer1.Append("\n");
                            str1 = paramTreeNode.UserObject.ToString();
                        }
                        stringBuffer1.Append(paramTreeNode.UserObject.ToString());
                    }
                    paramTreeNode1.ParamName = str + b;
                    ParamItemInputTable paramItemInputTable1 = new ParamItemInputTable();
                    paramItemInputTable1.Name         = paramTreeNode1.ParamName;
                    paramItemInputTable1.DataType     = "datatype.list";
                    paramItemInputTable1.DefaultValue = "";
                    if (paramTreeNode1.Level == 0)
                    {
                        paramItemInputTable1.DependencyStatement = "";
                    }
                    else
                    {
                        string str2 = ((ParamTreeNode)paramTreeNode1.Parent).ParamName;
                        string str3 = str2 + "=\"" + paramTreeNode1.UserObject.ToString().ToUpper() + "\"";
                        str3 = "AND(ARG_SHOWING(\"" + str2 + "\")," + str3 + ")";
                        paramItemInputTable1.DependencyStatement = str3;
                    }
                    paramItemInputTable1.ValidationStatement = "";
                    paramItemInputTable1.Description         = "";
                    paramItemInputTable1.Grouping            = "A. Specification";
                    paramItemInputTable1.SelectionList       = stringBuffer1.ToString().ToUpper();
                    paramItemInputTable1.SortOrder           = Convert.ToInt32(i);
                    paramItemInputTable1.Pblk   = false;
                    paramItemInputTable1.Hidden = false;
                    arrayList1.Add(paramItemInputTable1);
                    stringBuffer.Append("\n   IF(ARG_SHOWING(\"" + paramItemInputTable1.Name + "\")," + paramItemInputTable1.Name + ",\"\")");
                    b++;
                    i++;
                    continue;
                }
                if (paramTreeNode1.ChildCount == 1)
                {
                    ParamItemInputTable paramItemInputTable1 = new ParamItemInputTable();
                    paramItemInputTable1.Name     = str + b;
                    paramItemInputTable1.DataType = "datatype.calcvalue";
                    if (paramTreeNode1.Level == 0)
                    {
                        paramItemInputTable1.DependencyStatement = "";
                    }
                    else
                    {
                        string str1 = ((ParamTreeNode)paramTreeNode1.Parent).ParamName;
                        string str2 = str1 + "=\"" + paramTreeNode1.UserObject.ToString().ToUpper() + "\"";
                        str2 = "AND(ARG_SHOWING(\"" + str1 + "\")," + str2 + ")";
                        paramItemInputTable1.DependencyStatement = str2;
                    }
                    paramItemInputTable1.ValidationStatement = "T(\"" + paramTreeNode1.getChildAt(0).ToString().ToUpper() + "\")";
                    paramItemInputTable1.Description         = "";
                    paramItemInputTable1.Grouping            = "A. Specification";
                    paramItemInputTable1.SelectionList       = "";
                    paramItemInputTable1.SortOrder           = Convert.ToInt32(i);
                    paramItemInputTable1.Pblk   = false;
                    paramItemInputTable1.Hidden = false;
                    arrayList1.Add(paramItemInputTable1);
                    stringBuffer.Append("\n   IF(ARG_SHOWING(\"" + paramItemInputTable1.Name + "\")," + paramItemInputTable1.Name + ",\"\")");
                    b++;
                    i++;
                }
            }
            stringBuffer.Append("\n),\" \",\"\"),\",\",\"\")");
            ParamItemInputTable paramItemInputTable = new ParamItemInputTable();

            paramItemInputTable.Name                = "Result";
            paramItemInputTable.DataType            = "datatype.calcvalue";
            paramItemInputTable.DefaultValue        = "";
            paramItemInputTable.DependencyStatement = "";
            paramItemInputTable.ValidationStatement = stringBuffer.ToString();
            paramItemInputTable.Description         = "";
            paramItemInputTable.Grouping            = "A. Specification";
            paramItemInputTable.SelectionList       = "";
            paramItemInputTable.SortOrder           = Convert.ToInt32(i++);
            b++;
            paramItemInputTable.Pblk   = false;
            paramItemInputTable.Hidden = true;
            arrayList1.Add(paramItemInputTable);
            this.o_missingStr = this.o_rootNode.UserObject.ToString();
            this.o_missingStr = StringUtils.replaceAll(this.o_missingStr, " ", "");
            this.o_missingStr = StringUtils.replaceAll(this.o_missingStr, ",", "");
            this.o_missingStr = StringUtils.replaceAll(this.o_missingStr, "\"", "''");
            System.Collections.IEnumerator iterator = this.o_descToAccessRightsMap.Keys.GetEnumerator();
            List <object> arrayList4 = new List <object>();

            while (iterator.MoveNext())
            {
                string str1 = (string)iterator.Current;
                System.Collections.IList list = (System.Collections.IList) this.o_descToAccessRightsMap[str1];
                if (list.Count > 1)
                {
                    str1 = str1.Substring(this.o_missingStr.Length);
                    ParamItemInputTable paramItemInputTable1 = constructCostBookByAccessRights(str1, list, i++, b++);
                    arrayList4.Add(paramItemInputTable1);
                    arrayList1.Add(paramItemInputTable1);
                }
            }
            if (arrayList4.Count != 0)
            {
                this.b_hasCostBooks = true;
                StringBuilder stringBuffer1 = new StringBuilder();
                sbyte         b1            = 0;
                foreach (ParamItemInputTable paramItemInputTable1 in arrayList4)
                {
                    stringBuffer1.Append("IF(ARG_SHOWING(\"" + paramItemInputTable1.Name + "\")," + paramItemInputTable1.Name + ",");
                    b1++;
                }
                stringBuffer1.Append("\"ALL\"");
                for (sbyte b2 = 0; b2 < b1; b2++)
                {
                    stringBuffer1.Append(")");
                }
                paramItemInputTable                     = new ParamItemInputTable();
                paramItemInputTable.Name                = "CostBook";
                paramItemInputTable.DataType            = "datatype.calcvalue";
                paramItemInputTable.DefaultValue        = "";
                paramItemInputTable.DependencyStatement = "";
                paramItemInputTable.ValidationStatement = stringBuffer1.ToString();
                paramItemInputTable.Description         = "";
                paramItemInputTable.Grouping            = "A. Specification";
                paramItemInputTable.SelectionList       = "";
                paramItemInputTable.SortOrder           = Convert.ToInt32(i++);
                paramItemInputTable.Pblk                = false;
                paramItemInputTable.Hidden              = true;
                arrayList1.Add(paramItemInputTable);
                StringBuilder stringBuffer2 = new StringBuilder();
                iterator = this.o_costBooksMap.Values.GetEnumerator();
                b1       = 0;
                while (iterator.MoveNext())
                {
                    string str1 = (string)iterator.Current;
                    foreach (string str2 in this.o_costBooksMap.Keys)
                    {
                        if (((string)this.o_costBooksMap[str2]).Equals(str1))
                        {
                            stringBuffer2.Append("IF(CostBook=\"" + str1 + "\",\"" + str2 + "\",\n");
                            b1++;
                        }
                    }
                }
                if (b1 > 0)
                {
                    stringBuffer2.Append("\"ALL\"");
                    for (sbyte b3 = 0; b3 < b1; b3++)
                    {
                        stringBuffer2.Append(")");
                    }
                }
                paramItemInputTable                     = new ParamItemInputTable();
                paramItemInputTable.Name                = "CostBookAlias";
                paramItemInputTable.DataType            = "datatype.calcvalue";
                paramItemInputTable.DefaultValue        = "";
                paramItemInputTable.DependencyStatement = "";
                paramItemInputTable.ValidationStatement = stringBuffer2.ToString();
                paramItemInputTable.Description         = "";
                paramItemInputTable.Grouping            = "A. Specification";
                paramItemInputTable.SelectionList       = "";
                paramItemInputTable.SortOrder           = Convert.ToInt32(i++);
                paramItemInputTable.Pblk                = false;
                paramItemInputTable.Hidden              = true;
                arrayList1.Add(paramItemInputTable);
            }
            return(resortGroupsInList(arrayList1));
        }
Esempio n. 11
0
 public RetryInfo(Conversion conv, ParamTreeNode node, object value)
 {
     Conversion     = conv;
     Node           = node;
     ConvertedValue = value;
 }
Esempio n. 12
0
            /// <summary>
            /// Creates the retry list (if necessary) and adds a conversion to the list.  This
            /// is equivalent to ReflectOptimizer's EmitUpdateRetryList.
            /// </summary>
            private static List <RetryInfo> UpdateRetryList(object val, List <RetryInfo> retryList, ParamTreeNode node, Conversion conv)
            {
                if (retryList == null)
                {
                    retryList = new List <RetryInfo>();
                }

                // Update the retry list...
                bool fFound = false;

                for (int i = 0; i < retryList.Count; i++)
                {
                    if (retryList[i].Conversion > conv)
                    {
                        retryList.Insert(i, new RetryInfo(conv, node, val));
                        fFound = true;
                        break;
                    }
                }

                if (!fFound)
                {
                    retryList.Add(new RetryInfo(conv, node, val));
                }
                return(retryList);
            }
Esempio n. 13
0
            /// <summary>
            /// Walks an argument in the tree, recursing to further arguments to perform the dispatch
            /// as necessary.  the walk initially starts at either 0 (no instance) or -1 (instance
            /// available).
            /// </summary>
            private bool WalkWorker(int param, int outArgs, ParamTreeNode root)
            {
                object           val;
                List <RetryInfo> retryList = null;

                if (param - outArgs >= args.Length)
                {
                    return(GetBoundToDefaults(param, outArgs, root));
                }
                if (root.Children.Count == 0)
                {
                    return(GetBoundToParams(param, outArgs, root));
                }

                foreach (ParamTreeNode node in root.Children)
                {
                    if (node.ParamType == null)
                    {
                        continue;                           // method w/ less arguments then we're providing...
                    }
                    if ((node.Flags & ParamTree.NodeFlags.Out) != 0)
                    {
                        if (WalkWorker(param + 1, outArgs + 1, node))
                        {
                            return(true);
                        }
                        continue;
                    }

                    Conversion conv;
                    val = TryConvert(GetArgument(param - outArgs), node.ParamType, out conv);

                    if (conv == Conversion.Identity)
                    {
                        // nothing can beat us, dispatch now...
                        if (GetFinalCallOrNextArg(param, outArgs, node, val))
                        {
                            return(true);
                        }

                        // this method fails dispatch on later argument, don't put it
                        // in the retry list.
                        continue;
                    }

                    if (conv == Conversion.None)
                    {
                        if (node.ParamType != typeof(InstanceArgument) || GetArgument(param) == null)
                        {
                            continue;
                        }

                        // mixed method/function dispatch, we're calling an unbound method w/
                        // the 1st parameter matching the declaring type.  We favor calling the
                        // static method so this will get an Implicit conversion level.

                        val = TryConvert(GetArgument(param), node.Methods[0].DeclaringType, out conv);
                        if (conv == Conversion.Identity)
                        {
                            conv = Conversion.Implicit;
                        }
                    }

                    retryList = UpdateRetryList(val, retryList, node, conv);
                }


                if (retryList != null && HandleNonIdentityConversion(param, outArgs, retryList))
                {
                    return(true);
                }

                return(GetBoundToParams(param, outArgs, root));
            }