Exemple #1
0
        private void GenerateStateVarEventCode(
            string type, string stateVarFriendlyName, string conversionCode, StringConstants consts, StringBuilder eventHandlers,
            StringBuilder eventCallers, StringBuilder stateVarEventIntercept,
            StateVariableDescription stateVarDesc)
        {
            string lsConstName =
                consts[
                    CodeGenProvider.StateVarNameGroup, stateVarDesc.Name,
                    string.Format(CodeGenProvider.StateVarNameComment, stateVarDesc.Name)
                ];

            eventHandlers.Append(
                string.Format(
                    CodeGenProvider.StateVariableEventHandler,
                    type,
                    stateVarFriendlyName));

            eventCallers.Append(
                string.Format(
                    CodeGenProvider.StateVariableEventCaller,
                    type,
                    stateVarFriendlyName));

            stateVarEventIntercept.Append(
                string.Format(
                    CodeGenProvider.StateVarChangedEventHandlerCaseStatement,
                    lsConstName,
                    stateVarFriendlyName,
                    type,
                    conversionCode));
        }
Exemple #2
0
        /// <summary>
        /// Generates the case statements for the conversion functions
        /// for an enumerated state variaible.
        /// </summary>
        /// <param name="consts">The string constants created.</param>
        /// <param name="stateVarDesc">The state variable description.</param>
        /// <param name="friendlyName">The code friendly name of the state variaible.</param>
        /// <param name="stateVarEnumValues">A StringBuilder to contain the list of enumeration values.</param>
        /// <param name="enumStateVarParse">A StringBuilder to contain the list of state variable parse case statements.</param>
        /// <param name="enumStateVarToString">A StringBuilder to contain the list of state variable to string case statements.</param>
        private void GenerateEnumAllowedValuesCode(
            StringConstants consts, StateVariableDescription stateVarDesc, string friendlyName,
            StringBuilder stateVarEnumValues, StringBuilder enumStateVarParse, StringBuilder enumStateVarToString)
        {
            // For each allowed value
            foreach (string lsAllowedValue in stateVarDesc.AllowedValues)
            {
                // Get the code friendly name
                string lsFriendlyValue = CodeGenProvider.CodeFriendlyIdentifier(lsAllowedValue, false);

                // Create the constant for the allowed value
                string lsAllowedValueConst = consts[
                    string.Format(CodeGenProvider.AllowedValueGroup, CodeGenProvider.CodeFriendlyIdentifier(stateVarDesc.Name, false)),
                    lsAllowedValue,
                    string.Format(CodeGenProvider.AllowedValueComment, lsAllowedValue, stateVarDesc.Name)
                                             ];

                // Generate the enumeration values
                stateVarEnumValues.Append(string.Format(CodeGenProvider.EnumStateVarValue, lsFriendlyValue, friendlyName));

                // Generate the parse case statement
                enumStateVarParse.Append(string.Format(CodeGenProvider.EnumParseCaseStatement, lsAllowedValueConst, friendlyName, lsFriendlyValue));

                // Generate the to string case statment
                enumStateVarToString.Append(string.Format(CodeGenProvider.EnumToStringCaseStatement, friendlyName, lsFriendlyValue, lsAllowedValueConst));
            }
        }
Exemple #3
0
 /// <summary>
 /// Generates the comments for a state variable including its name.
 /// </summary>
 /// <param name="stateVarDesc">The state variable description describing the state variable.</param>
 /// <returns>A string containing a single line comment.</returns>
 private string GenerateStateVarComment(StateVariableDescription stateVarDesc)
 {
     return(string.Format(
                CodeGenProvider.StateVarComment,
                stateVarDesc.Name,
                GenerateStateVariableDescriptionComment(stateVarDesc)));
 }
Exemple #4
0
        /// <summary>
        /// Generates the comments for an actions method argument including its name.
        /// </summary>
        /// <param name="argumentDesc">The argument description describing the argument of the action.</param>
        /// <returns>A string containing a single line comment.</returns>
        private string GenerateArgumentDescriptionComment(ArgumentDescription argumentDesc)
        {
            StateVariableDescription lsdDesc = argumentDesc.RelatedStateVariableDescription;

            return(string.Format(
                       CodeGenProvider.ArgumentComment,
                       argumentDesc.Name,
                       GenerateStateVariableDescriptionComment(lsdDesc)));
        }
Exemple #5
0
        /// <summary>
        /// Generates the code for an enumerated state variable.
        /// </summary>
        /// <param name="consts">The string constants created.</param>
        /// <param name="stateVarProps">A StringBuilder to contain property definitions.</param>
        /// <param name="stateVarConversion">A StringBuilder to contain the conversion method definitions.</param>
        /// <param name="stateVarEnums">A StringBuilder to contain the enumerations for the state variables.</param>
        /// <param name="eventHandlers">A StringBuilder to contain event handler declarations for the state variable changes.</param>
        /// <param name="eventCallers">A StringBuilder to contain event caller methods for the state variable changes.</param>
        /// <param name="stateVarEventIntercept">A StringBUilder to contain the case statements for the state variable changed event.</param>
        /// <param name="enumStateVars">A HashSet containing the names of all enumerated state variables.</param>
        /// <param name="stateVarTypes">A Dictionary to contain each state variaible name and its code data type.</param>
        /// <param name="stateVarDesc">The state variable description.</param>
        /// <param name="friendlyName">The code friendly name of the state variaible.</param>
        /// <param name="addProp">True to add the actual property accessor.</param>
        private void GenerateEnumStateVarCode(
            StringConstants consts, StringBuilder stateVarProps, StringBuilder stateVarConversion, StringBuilder stateVarEnums,
            StringBuilder eventHandlers, StringBuilder eventCallers, StringBuilder stateVarEventIntercept,
            HashSet <string> enumStateVars, Dictionary <string, string> stateVarTypes,
            StateVariableDescription stateVarDesc, string friendlyName, bool addProp)
        {
            StringBuilder lsbStateVarEnumValues   = new StringBuilder();
            StringBuilder lsbEnumStateVarParse    = new StringBuilder();
            StringBuilder lsbEnumStateVarToString = new StringBuilder();

            // Add the state var to the enum list
            enumStateVars.Add(stateVarDesc.Name);

            // Generate allowed values code
            GenerateEnumAllowedValuesCode(
                consts, stateVarDesc, friendlyName, lsbStateVarEnumValues,
                lsbEnumStateVarParse, lsbEnumStateVarToString);

            // Generate enumeration
            stateVarEnums.Append(string.Format(CodeGenProvider.StateVarEnum, friendlyName, lsbStateVarEnumValues));

            // Generate conversion functions
            stateVarConversion.Append(string.Format(CodeGenProvider.EnumStateVarConversion, friendlyName, lsbEnumStateVarParse, lsbEnumStateVarToString));

            // Generate property accessor if required
            if (addProp)
            {
                stateVarProps.Append(
                    string.Format(
                        CodeGenProvider.EnumStateVar, friendlyName,
                        consts[
                            CodeGenProvider.StateVarNameGroup, stateVarDesc.Name,
                            string.Format(CodeGenProvider.StateVarNameComment, stateVarDesc.Name)
                        ],
                        GenerateStateVarComment(stateVarDesc)));
            }

            string lsEnumTypeName = string.Format(CodeGenProvider.EnumStateVarName, friendlyName);

            // Add the type to the list for the actions
            stateVarTypes[stateVarDesc.Name] = lsEnumTypeName;

            // If the state variable is evented
            if (stateVarDesc.SendEvents)
            {
                GenerateStateVarEventCode(
                    lsEnumTypeName,
                    friendlyName,
                    String.Format(CodeGenProvider.EnumStateVarEventConversion, friendlyName),
                    consts,
                    eventHandlers,
                    eventCallers,
                    stateVarEventIntercept,
                    stateVarDesc);
            }
        }
        /// <summary>
        /// Adds an input or output value to the data grids.
        /// </summary>
        /// <param name="argDesc">The argument description for the argument.</param>
        /// <param name="svDesc">The state variable description for the linked state variable to the argument.</param>
        /// <param name="inputIndex">The current input index.</param>
        /// <param name="outputIndex">The current output index.</param>
        protected void AddIOValue(ArgumentDescription argDesc, StateVariableDescription svDesc, ref int inputIndex, ref int outputIndex)
        {
            StateVariableDataType ldtType;

            // Get the data type for the state variable description
            if (svDesc == null)
            {
                ldtType = StateVariableDataType.tunknown;
            }
            else
            {
                ldtType = svDesc.DataTypeValue;
            }

            switch (argDesc.DirectionValue)
            {
            case ArgumentDirection.In:
                // If its an input then add it
                int liIndex = dgInputs.Rows.Add(
                    argDesc.Name,
                    ldtType.Description(),
                    ldtType.StringFromValue(ldtType.Default()));

                // Set its row info
                dgInputs.Rows[liIndex].Tag = new RowInfo(argDesc, svDesc, inputIndex);

                // Increment the input index
                inputIndex++;

                break;

            case ArgumentDirection.Out:
                // If its an output then add it
                liIndex = dgOutputs.Rows.Add(
                    argDesc.Name,
                    ldtType.Description(),
                    String.Empty);

                // Set its row info
                dgOutputs.Rows[liIndex].Tag = new RowInfo(argDesc, svDesc, outputIndex);

                // Increment the output index
                outputIndex++;

                break;
            }
        }
Exemple #7
0
        /// <summary>
        /// Generates the code for a NON enumerated state variable.
        /// </summary>
        /// <param name="consts">The string constants created.</param>
        /// <param name="stateVarProps">A StringBuilder to contain property definitions.</param>
        /// <param name="eventHandlers">A StringBuilder to contain event handler declarations for the state variable changes.</param>
        /// <param name="eventCallers">A StringBuilder to contain event caller methods for the state variable changes.</param>
        /// <param name="stateVarEventIntercept">A StringBUilder to contain the case statements for the state variable changed event.</param>
        /// <param name="stateVarTypes">A Dictionary to contain each state variaible name and its code data type.</param>
        /// <param name="stateVarDesc">The state variable description.</param>
        /// <param name="friendlyName">The code friendly name of the state variaible.</param>
        /// <param name="addProp">True to add the actual property accessor.</param>
        private void GenerateStateVarCode(
            StringConstants consts, StringBuilder stateVarProps,
            StringBuilder eventHandlers, StringBuilder eventCallers, StringBuilder stateVarEventIntercept,
            Dictionary <string, string> stateVarTypes, StateVariableDescription stateVarDesc,
            string friendlyName, bool addProp)
        {
            // Get the data type
            string lsType = stateVarDesc.DataTypeValue.BaseType().Name;

            // Append the accessor for the state variaible
            if (addProp)
            {
                stateVarProps.Append(
                    string.Format(
                        CodeGenProvider.NonEnumStateVar,
                        lsType, friendlyName,
                        consts[
                            CodeGenProvider.StateVarNameGroup, stateVarDesc.Name,
                            string.Format(CodeGenProvider.StateVarNameComment, stateVarDesc.Name)
                        ],
                        GenerateStateVarComment(stateVarDesc)));
            }

            // Add the type to the list for the actions
            stateVarTypes[stateVarDesc.Name] = lsType;

            // If the state variable is evented
            if (stateVarDesc.SendEvents)
            {
                GenerateStateVarEventCode(
                    lsType,
                    friendlyName,
                    String.Format(CodeGenProvider.NonEnumStateVarEventConversion, lsType),
                    consts,
                    eventHandlers,
                    eventCallers,
                    stateVarEventIntercept,
                    stateVarDesc);
            }
        }
Exemple #8
0
        /// <summary>
        /// Determines whether a state variable is queryable and therefore
        /// should have its property accessor created.
        /// </summary>
        /// <param name="service">The service the state variable belongs to.</param>
        /// <param name="testStateVars">True to test for query ability, false to allow.</param>
        /// <param name="stateVarDesc">The state variaible description for which needs to be tested.</param>
        /// <returns>True if the state variable should have its accessor property created.</returns>
        private bool IsStateVarQueryable(Service service, bool testStateVars, StateVariableDescription stateVarDesc)
        {
            // Do we want to test for queryable ability
            if (testStateVars)
            {
                bool lbAddProp = false;

                try
                {
                    // Attempt to query the state variable
                    service.QueryStateVariable(stateVarDesc.Name);

                    // If succeeded then allow the property
                    lbAddProp = true;
                }
                catch (UPnPException loE)
                {
                    // If its variable value unknown then its probably a valid state variable
                    if (loE.Code == UPnPException.UPnPErrorCode.UPNP_E_VARIABLE_VALUE_UNKNOWN)
                    {
                        lbAddProp = true;
                    }
                }
                catch (Exception)
                {
                }

                // Return whether the property should be added
                return(lbAddProp);
            }
            else
            {
                // We want to add it irrespective
                return(true);
            }
        }
Exemple #9
0
        /// <summary>
        /// Generates the descriptive details for a state variable, eg. AllowedRange, Defulat, AllowedValues.
        /// </summary>
        /// <param name="stateVarDesc">The state variable description describing the state variable.</param>
        /// <returns>A string containing a single line comment.</returns>
        private string GenerateStateVariableDescriptionComment(StateVariableDescription stateVarDesc)
        {
            if (stateVarDesc != null)
            {
                StringBuilder lsbComment = new StringBuilder();

                // Allowed range
                if (stateVarDesc.AllowedRange != null)
                {
                    // Allowed range - min and max
                    if (
                        !string.IsNullOrEmpty(stateVarDesc.AllowedRange.Minimum) ||
                        !string.IsNullOrEmpty(stateVarDesc.AllowedRange.Maximum)
                        )
                    {
                        lsbComment.Append(
                            string.Format(
                                CodeGenProvider.StateVarAllowedRangeComment,
                                (string.IsNullOrEmpty(stateVarDesc.AllowedRange.Minimum) ? CodeGenProvider.ArgMinimum : stateVarDesc.AllowedRange.Minimum),
                                (string.IsNullOrEmpty(stateVarDesc.AllowedRange.Minimum) ? CodeGenProvider.ArgMaximum : stateVarDesc.AllowedRange.Maximum)
                                )
                            );
                    }

                    // Allowed range - step
                    if (!string.IsNullOrEmpty(stateVarDesc.AllowedRange.Step)
                        )
                    {
                        lsbComment.Append(
                            string.Format(
                                CodeGenProvider.StateVarStepComment,
                                stateVarDesc.AllowedRange.Step
                                )
                            );
                    }
                }

                // Allowed values - ecvluding Enum types
                if (stateVarDesc.AllowedValues != null &&
                    stateVarDesc.AllowedValues.Count > 0 &&
                    stateVarDesc.DataTypeValue != StateVariableDataType.tstring)
                {
                    StringBuilder lsbAllowedValues = new StringBuilder();

                    foreach (string lsAllowedValue in stateVarDesc.AllowedValues)
                    {
                        lsbAllowedValues.Append(
                            string.Format(
                                CodeGenProvider.AllowedValue,
                                (lsbAllowedValues.Length == 0 ? string.Empty : CodeGenProvider.Comma),
                                lsAllowedValue
                                )
                            );
                    }

                    if (lsbAllowedValues.Length > 0)
                    {
                        lsbComment.Append(
                            string.Format(
                                CodeGenProvider.StateVarAllowedValues,
                                lsbAllowedValues.ToString()
                                )
                            );
                    }
                }

                // Default value
                if (!string.IsNullOrEmpty(stateVarDesc.DefaultValue))
                {
                    lsbComment.Append(
                        string.Format(
                            CodeGenProvider.StateVarDefaultValueComment,
                            stateVarDesc.DefaultValue
                            )
                        );
                }

                return(lsbComment.ToString());
            }
            else
            {
                return(string.Empty);
            }
        }
Exemple #10
0
 /// <summary>
 /// Creates a new row info structure.
 /// </summary>
 /// <param name="argDesc">The argument description for the input or output.</param>
 /// <param name="stateVarDesc">The state variable description for the input or output.</param>
 /// <param name="index">The index of the input or output.</param>
 public RowInfo(ArgumentDescription argDesc, StateVariableDescription stateVarDesc, int index)
 {
     madArgDesc      = argDesc;
     msvStateVarDesc = stateVarDesc;
     miIndex         = index;
 }
Exemple #11
0
        /// <summary>
        /// Updates the data in the control from its item.
        /// </summary>
        protected override void UpdateData()
        {
            StringBuilder lsbBuilder = new StringBuilder();

            if (miItem != null)
            {
                // Get setup vars
                UPnPActionTreeItem lavItem   = (UPnPActionTreeItem)miItem;
                Service            lsService = ((Service)(miItem.LinkedObject));
                ServiceDescription ldDesc    = lsService.Description();

                // If description is available
                if (ldDesc != null)
                {
                    // Get the action description for this action
                    ActionDescription laDesc;
                    if (ldDesc.Actions.TryGetValue(lavItem.ActionName, out laDesc))
                    {
                        lsbBuilder.AppendLine(laDesc.ToString());
                    }

                    lsbBuilder.AppendLine();

                    // Lock the inputs
                    dgInputs.BeginUpdate();

                    try
                    {
                        // Lock the outputs
                        dgOutputs.BeginUpdate();

                        try
                        {
                            int liInputIndex  = 0;
                            int liOutputIndex = 0;

                            // For each argument in the action
                            foreach (ArgumentDescription ladDesc in laDesc.Arguments.Values)
                            {
                                // Get the state variable if there is one linked
                                StateVariableDescription lsvDesc = ladDesc.RelatedStateVariableDescription;

                                // Add the input or output argument to the grids
                                AddIOValue(ladDesc, lsvDesc, ref liInputIndex, ref liOutputIndex);

                                // Append a line in the text information for the argument
                                lsbBuilder.AppendLine(
                                    String.Format(
                                        "{0} {1} => {2}",
                                        ladDesc.DirectionValue.ToString(),
                                        ladDesc.Name,
                                        (lsvDesc == null ? "No Related Var" : lsvDesc.ToString())));
                            }

                            // Auto size the input and output grids
                            dgInputs.AutoSizeColumnsMode  = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
                            dgOutputs.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
                        }
                        finally
                        {
                            // Unlock outputs
                            dgOutputs.EndUpdate();
                        }
                    }
                    finally
                    {
                        // Unlock inputs
                        dgInputs.EndUpdate();
                    }
                }
            }

            // Set the info text
            rtbInfo.Text = lsbBuilder.ToString();
        }
 /// <summary>
 /// Creates a new state variable tree item.
 /// </summary>
 /// <param name="service">The service for which this state variable belongs.</param>
 /// <param name="desc">The state variable description.</param>
 public UPnPStateVarTreeItem(Service service, StateVariableDescription desc)
     : base(service)
 {
     mdDesc = desc;
 }