Beispiel #1
0
        private CimMethodParametersCollection CreateParametersCollection(IDictionary parameters, CimClass cimClass, CimInstance cimInstance, string methodName)
        {
            DebugHelper.WriteLogEx();
            CimMethodParametersCollection cimMethodParametersCollection = null;

            if (parameters != null)
            {
                if (parameters.Count != 0)
                {
                    cimMethodParametersCollection = new CimMethodParametersCollection();
                    IDictionaryEnumerator enumerator = parameters.GetEnumerator();
                    while (enumerator.MoveNext())
                    {
                        string   str        = enumerator.Key.ToString();
                        CimFlags cimFlag    = CimFlags.In;
                        object   baseObject = base.GetBaseObject(enumerator.Value);
                        object[] objArray   = new object[3];
                        objArray[0] = str;
                        objArray[1] = baseObject;
                        objArray[2] = cimFlag;
                        DebugHelper.WriteLog("Create parameter name= {0}, value= {1}, flags= {2}.", 4, objArray);
                        CimMethodParameter   cimMethodParameter = null;
                        CimMethodDeclaration item = null;
                        string className          = null;
                        if (cimClass == null)
                        {
                            if (cimInstance != null)
                            {
                                className = cimInstance.CimClass.CimSystemProperties.ClassName;
                                item      = cimInstance.CimClass.CimClassMethods[methodName];
                            }
                        }
                        else
                        {
                            className = cimClass.CimSystemProperties.ClassName;
                            item      = cimClass.CimClassMethods[methodName];
                            if (item == null)
                            {
                                object[] objArray1 = new object[2];
                                objArray1[0] = methodName;
                                objArray1[1] = className;
                                throw new ArgumentException(string.Format(CultureInfo.CurrentUICulture, Strings.InvalidMethod, objArray1));
                            }
                        }
                        if (item == null)
                        {
                            if (baseObject != null)
                            {
                                CimType cimType = CimType.Unknown;
                                object  referenceOrReferenceArrayObject = base.GetReferenceOrReferenceArrayObject(baseObject, ref cimType);
                                if (referenceOrReferenceArrayObject == null)
                                {
                                    cimMethodParameter = CimMethodParameter.Create(str, baseObject, cimFlag);
                                }
                                else
                                {
                                    cimMethodParameter = CimMethodParameter.Create(str, referenceOrReferenceArrayObject, cimType, cimFlag);
                                }
                            }
                            else
                            {
                                cimMethodParameter = CimMethodParameter.Create(str, baseObject, CimType.String, cimFlag);
                            }
                        }
                        else
                        {
                            CimMethodParameterDeclaration cimMethodParameterDeclaration = item.Parameters[str];
                            if (cimMethodParameterDeclaration != null)
                            {
                                cimMethodParameter = CimMethodParameter.Create(str, baseObject, cimMethodParameterDeclaration.CimType, cimFlag);
                            }
                            else
                            {
                                object[] objArray2 = new object[3];
                                objArray2[0] = str;
                                objArray2[1] = methodName;
                                objArray2[2] = className;
                                throw new ArgumentException(string.Format(CultureInfo.CurrentUICulture, Strings.InvalidMethodParameter, objArray2));
                            }
                        }
                        if (cimMethodParameter == null)
                        {
                            continue;
                        }
                        cimMethodParametersCollection.Add(cimMethodParameter);
                    }
                    return(cimMethodParametersCollection);
                }
                else
                {
                    return(cimMethodParametersCollection);
                }
            }
            else
            {
                return(cimMethodParametersCollection);
            }
        }
        /// <summary>
        /// <para>
        /// Create <see cref="CimMethodParametersCollection"/> with given key properties.
        /// And/or <see cref="CimClass"/> object.
        /// </para>
        /// </summary>
        /// <param name="parameters"></param>
        /// <param name="cimClass"></param>
        /// <param name="cimInstance"></param>
        /// <param name="methodName"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException">See CimProperty.Create.</exception>
        /// <exception cref="ArgumentException">CimProperty.Create.</exception>
        private CimMethodParametersCollection CreateParametersCollection(
            IDictionary parameters,
            CimClass cimClass,
            CimInstance cimInstance,
            string methodName)
        {
            DebugHelper.WriteLogEx();

            CimMethodParametersCollection collection = null;

            if (parameters == null)
            {
                return(collection);
            }
            else if (parameters.Count == 0)
            {
                return(collection);
            }

            collection = new CimMethodParametersCollection();
            IDictionaryEnumerator enumerator = parameters.GetEnumerator();

            while (enumerator.MoveNext())
            {
                string parameterName = enumerator.Key.ToString();

                const CimFlags parameterFlags = CimFlags.In;
                object         parameterValue = GetBaseObject(enumerator.Value);

                DebugHelper.WriteLog(@"Create parameter name= {0}, value= {1}, flags= {2}.", 4,
                                     parameterName,
                                     parameterValue,
                                     parameterFlags);

                CimMethodParameter   parameter   = null;
                CimMethodDeclaration declaration = null;
                string className = null;
                if (cimClass != null)
                {
                    className   = cimClass.CimSystemProperties.ClassName;
                    declaration = cimClass.CimClassMethods[methodName];
                    if (declaration == null)
                    {
                        throw new ArgumentException(string.Format(
                                                        CultureInfo.CurrentUICulture, CimCmdletStrings.InvalidMethod, methodName, className));
                    }
                }
                else if (cimInstance != null)
                {
                    className   = cimInstance.CimClass.CimSystemProperties.ClassName;
                    declaration = cimInstance.CimClass.CimClassMethods[methodName];
                }

                if (declaration != null)
                {
                    CimMethodParameterDeclaration paramDeclaration = declaration.Parameters[parameterName];
                    if (paramDeclaration == null)
                    {
                        throw new ArgumentException(string.Format(
                                                        CultureInfo.CurrentUICulture, CimCmdletStrings.InvalidMethodParameter, parameterName, methodName, className));
                    }

                    parameter = CimMethodParameter.Create(
                        parameterName,
                        parameterValue,
                        paramDeclaration.CimType,
                        parameterFlags);
                    // FIXME: check in/out qualifier
                    // parameterFlags = paramDeclaration.Qualifiers;
                }
                else
                {
                    if (parameterValue == null)
                    {
                        // try the best to get the type while value is null
                        parameter = CimMethodParameter.Create(
                            parameterName,
                            parameterValue,
                            CimType.String,
                            parameterFlags);
                    }
                    else
                    {
                        CimType referenceType   = CimType.Unknown;
                        object  referenceObject = GetReferenceOrReferenceArrayObject(parameterValue, ref referenceType);
                        if (referenceObject != null)
                        {
                            parameter = CimMethodParameter.Create(
                                parameterName,
                                referenceObject,
                                referenceType,
                                parameterFlags);
                        }
                        else
                        {
                            parameter = CimMethodParameter.Create(
                                parameterName,
                                parameterValue,
                                parameterFlags);
                        }
                    }
                }

                if (parameter != null)
                {
                    collection.Add(parameter);
                }
            }

            return(collection);
        }
Beispiel #3
0
        static bool IsOut(CimMethodParameterDeclaration p)
        {
            var q = p.Qualifiers["Out"];

            return(q != null);
        }